@memberjunction/ng-conversations 2.104.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/README.md +197 -0
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +20 -0
- package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -0
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js +125 -0
- package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -0
- package/dist/lib/components/agent/active-agent-indicator.component.d.ts +48 -0
- package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -0
- package/dist/lib/components/agent/active-agent-indicator.component.js +199 -0
- package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -0
- package/dist/lib/components/agent/agent-process-panel.component.d.ts +30 -0
- package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -0
- package/dist/lib/components/agent/agent-process-panel.component.js +333 -0
- package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -0
- package/dist/lib/components/artifact/artifact-panel.component.d.ts +22 -0
- package/dist/lib/components/artifact/artifact-panel.component.d.ts.map +1 -0
- package/dist/lib/components/artifact/artifact-panel.component.js +237 -0
- package/dist/lib/components/artifact/artifact-panel.component.js.map +1 -0
- package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts +39 -0
- package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts.map +1 -0
- package/dist/lib/components/artifact/artifact-upload-modal.component.js +384 -0
- package/dist/lib/components/artifact/artifact-upload-modal.component.js.map +1 -0
- package/dist/lib/components/artifact/artifact-version-history.component.d.ts +28 -0
- package/dist/lib/components/artifact/artifact-version-history.component.d.ts.map +1 -0
- package/dist/lib/components/artifact/artifact-version-history.component.js +280 -0
- package/dist/lib/components/artifact/artifact-version-history.component.js.map +1 -0
- package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts +22 -0
- package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts.map +1 -0
- package/dist/lib/components/artifact/artifact-viewer-panel.component.js +182 -0
- package/dist/lib/components/artifact/artifact-viewer-panel.component.js.map +1 -0
- package/dist/lib/components/artifact/artifact-viewer.component.d.ts +27 -0
- package/dist/lib/components/artifact/artifact-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/artifact/artifact-viewer.component.js +266 -0
- package/dist/lib/components/artifact/artifact-viewer.component.js.map +1 -0
- package/dist/lib/components/artifact/inline-artifact.component.d.ts +46 -0
- package/dist/lib/components/artifact/inline-artifact.component.d.ts.map +1 -0
- package/dist/lib/components/artifact/inline-artifact.component.js +447 -0
- package/dist/lib/components/artifact/inline-artifact.component.js.map +1 -0
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts +18 -0
- package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -0
- package/dist/lib/components/collection/collection-artifact-card.component.js +147 -0
- package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -0
- package/dist/lib/components/collection/collection-form-modal.component.d.ts +33 -0
- package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -0
- package/dist/lib/components/collection/collection-form-modal.component.js +245 -0
- package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -0
- package/dist/lib/components/collection/collection-tree.component.d.ts +42 -0
- package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -0
- package/dist/lib/components/collection/collection-tree.component.js +482 -0
- package/dist/lib/components/collection/collection-tree.component.js.map +1 -0
- package/dist/lib/components/collection/collection-view.component.d.ts +31 -0
- package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -0
- package/dist/lib/components/collection/collection-view.component.js +254 -0
- package/dist/lib/components/collection/collection-view.component.js.map +1 -0
- package/dist/lib/components/collection/collections-full-view.component.d.ts +55 -0
- package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -0
- package/dist/lib/components/collection/collections-full-view.component.js +578 -0
- package/dist/lib/components/collection/collections-full-view.component.js.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +160 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.js +891 -0
- package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -0
- package/dist/lib/components/conversation/conversation-list.component.d.ts +29 -0
- package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -0
- package/dist/lib/components/conversation/conversation-list.component.js +255 -0
- package/dist/lib/components/conversation/conversation-list.component.js.map +1 -0
- package/dist/lib/components/dialogs/input-dialog.component.d.ts +17 -0
- package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -0
- package/dist/lib/components/dialogs/input-dialog.component.js +122 -0
- package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -0
- package/dist/lib/components/export/export-modal.component.d.ts +37 -0
- package/dist/lib/components/export/export-modal.component.d.ts.map +1 -0
- package/dist/lib/components/export/export-modal.component.js +414 -0
- package/dist/lib/components/export/export-modal.component.js.map +1 -0
- package/dist/lib/components/library/library-full-view.component.d.ts +36 -0
- package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -0
- package/dist/lib/components/library/library-full-view.component.js +270 -0
- package/dist/lib/components/library/library-full-view.component.js.map +1 -0
- package/dist/lib/components/members/members-modal.component.d.ts +42 -0
- package/dist/lib/components/members/members-modal.component.d.ts.map +1 -0
- package/dist/lib/components/members/members-modal.component.js +352 -0
- package/dist/lib/components/members/members-modal.component.js.map +1 -0
- package/dist/lib/components/mention/mention-dropdown.component.d.ts +44 -0
- package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +1 -0
- package/dist/lib/components/mention/mention-dropdown.component.js +194 -0
- package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -0
- package/dist/lib/components/message/message-input.component.d.ts +137 -0
- package/dist/lib/components/message/message-input.component.d.ts.map +1 -0
- package/dist/lib/components/message/message-input.component.js +1159 -0
- package/dist/lib/components/message/message-input.component.js.map +1 -0
- package/dist/lib/components/message/message-item.component.d.ts +140 -0
- package/dist/lib/components/message/message-item.component.d.ts.map +1 -0
- package/dist/lib/components/message/message-item.component.js +817 -0
- package/dist/lib/components/message/message-item.component.js.map +1 -0
- package/dist/lib/components/message/message-list.component.d.ts +77 -0
- package/dist/lib/components/message/message-list.component.d.ts.map +1 -0
- package/dist/lib/components/message/message-list.component.js +316 -0
- package/dist/lib/components/message/message-list.component.js.map +1 -0
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts +13 -0
- package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -0
- package/dist/lib/components/navigation/conversation-navigation.component.js +88 -0
- package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -0
- package/dist/lib/components/notification/activity-indicator.component.d.ts +11 -0
- package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -0
- package/dist/lib/components/notification/activity-indicator.component.js +56 -0
- package/dist/lib/components/notification/activity-indicator.component.js.map +1 -0
- package/dist/lib/components/notification/notification-badge.component.d.ts +27 -0
- package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -0
- package/dist/lib/components/notification/notification-badge.component.js +160 -0
- package/dist/lib/components/notification/notification-badge.component.js.map +1 -0
- package/dist/lib/components/project/project-form-modal.component.d.ts +34 -0
- package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -0
- package/dist/lib/components/project/project-form-modal.component.js +357 -0
- package/dist/lib/components/project/project-form-modal.component.js.map +1 -0
- package/dist/lib/components/project/project-selector.component.d.ts +36 -0
- package/dist/lib/components/project/project-selector.component.d.ts.map +1 -0
- package/dist/lib/components/project/project-selector.component.js +317 -0
- package/dist/lib/components/project/project-selector.component.js.map +1 -0
- package/dist/lib/components/search/search-panel.component.d.ts +120 -0
- package/dist/lib/components/search/search-panel.component.d.ts.map +1 -0
- package/dist/lib/components/search/search-panel.component.js +714 -0
- package/dist/lib/components/search/search-panel.component.js.map +1 -0
- package/dist/lib/components/share/share-modal.component.d.ts +46 -0
- package/dist/lib/components/share/share-modal.component.d.ts.map +1 -0
- package/dist/lib/components/share/share-modal.component.js +431 -0
- package/dist/lib/components/share/share-modal.component.js.map +1 -0
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +18 -0
- package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -0
- package/dist/lib/components/sidebar/conversation-sidebar.component.js +81 -0
- package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -0
- package/dist/lib/components/task/task-form-modal.component.d.ts +42 -0
- package/dist/lib/components/task/task-form-modal.component.d.ts.map +1 -0
- package/dist/lib/components/task/task-form-modal.component.js +329 -0
- package/dist/lib/components/task/task-form-modal.component.js.map +1 -0
- package/dist/lib/components/task/task-item.component.d.ts +22 -0
- package/dist/lib/components/task/task-item.component.d.ts.map +1 -0
- package/dist/lib/components/task/task-item.component.js +234 -0
- package/dist/lib/components/task/task-item.component.js.map +1 -0
- package/dist/lib/components/task/task-list.component.d.ts +32 -0
- package/dist/lib/components/task/task-list.component.d.ts.map +1 -0
- package/dist/lib/components/task/task-list.component.js +290 -0
- package/dist/lib/components/task/task-list.component.js.map +1 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +27 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.js +254 -0
- package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -0
- package/dist/lib/components/thread/thread-panel.component.d.ts +65 -0
- package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -0
- package/dist/lib/components/thread/thread-panel.component.js +325 -0
- package/dist/lib/components/thread/thread-panel.component.js.map +1 -0
- package/dist/lib/components/toast/toast.component.d.ts +26 -0
- package/dist/lib/components/toast/toast.component.d.ts.map +1 -0
- package/dist/lib/components/toast/toast.component.js +108 -0
- package/dist/lib/components/toast/toast.component.js.map +1 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts +75 -0
- package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -0
- package/dist/lib/components/workspace/conversation-workspace.component.js +299 -0
- package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -0
- package/dist/lib/conversations.module.d.ts +62 -0
- package/dist/lib/conversations.module.d.ts.map +1 -0
- package/dist/lib/conversations.module.js +248 -0
- package/dist/lib/conversations.module.js.map +1 -0
- package/dist/lib/directives/search-shortcut.directive.d.ts +17 -0
- package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -0
- package/dist/lib/directives/search-shortcut.directive.js +39 -0
- package/dist/lib/directives/search-shortcut.directive.js.map +1 -0
- package/dist/lib/models/conversation-state.model.d.ts +72 -0
- package/dist/lib/models/conversation-state.model.d.ts.map +1 -0
- package/dist/lib/models/conversation-state.model.js +2 -0
- package/dist/lib/models/conversation-state.model.js.map +1 -0
- package/dist/lib/models/notification.model.d.ts +89 -0
- package/dist/lib/models/notification.model.d.ts.map +1 -0
- package/dist/lib/models/notification.model.js +11 -0
- package/dist/lib/models/notification.model.js.map +1 -0
- package/dist/lib/services/active-tasks.service.d.ts +65 -0
- package/dist/lib/services/active-tasks.service.d.ts.map +1 -0
- package/dist/lib/services/active-tasks.service.js +95 -0
- package/dist/lib/services/active-tasks.service.js.map +1 -0
- package/dist/lib/services/agent-state.service.d.ts +78 -0
- package/dist/lib/services/agent-state.service.d.ts.map +1 -0
- package/dist/lib/services/agent-state.service.js +213 -0
- package/dist/lib/services/agent-state.service.js.map +1 -0
- package/dist/lib/services/artifact-state.service.d.ts +114 -0
- package/dist/lib/services/artifact-state.service.d.ts.map +1 -0
- package/dist/lib/services/artifact-state.service.js +288 -0
- package/dist/lib/services/artifact-state.service.js.map +1 -0
- package/dist/lib/services/conversation-agent.service.d.ts +79 -0
- package/dist/lib/services/conversation-agent.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-agent.service.js +259 -0
- package/dist/lib/services/conversation-agent.service.js.map +1 -0
- package/dist/lib/services/conversation-state.service.d.ts +122 -0
- package/dist/lib/services/conversation-state.service.d.ts.map +1 -0
- package/dist/lib/services/conversation-state.service.js +255 -0
- package/dist/lib/services/conversation-state.service.js.map +1 -0
- package/dist/lib/services/dialog.service.d.ts +54 -0
- package/dist/lib/services/dialog.service.d.ts.map +1 -0
- package/dist/lib/services/dialog.service.js +157 -0
- package/dist/lib/services/dialog.service.js.map +1 -0
- package/dist/lib/services/export.service.d.ts +25 -0
- package/dist/lib/services/export.service.d.ts.map +1 -0
- package/dist/lib/services/export.service.js +237 -0
- package/dist/lib/services/export.service.js.map +1 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts +59 -0
- package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -0
- package/dist/lib/services/mention-autocomplete.service.js +160 -0
- package/dist/lib/services/mention-autocomplete.service.js.map +1 -0
- package/dist/lib/services/mention-parser.service.d.ts +46 -0
- package/dist/lib/services/mention-parser.service.d.ts.map +1 -0
- package/dist/lib/services/mention-parser.service.js +156 -0
- package/dist/lib/services/mention-parser.service.js.map +1 -0
- package/dist/lib/services/notification.service.d.ts +108 -0
- package/dist/lib/services/notification.service.d.ts.map +1 -0
- package/dist/lib/services/notification.service.js +431 -0
- package/dist/lib/services/notification.service.js.map +1 -0
- package/dist/lib/services/search.service.d.ts +144 -0
- package/dist/lib/services/search.service.d.ts.map +1 -0
- package/dist/lib/services/search.service.js +370 -0
- package/dist/lib/services/search.service.js.map +1 -0
- package/dist/lib/services/toast.service.d.ts +46 -0
- package/dist/lib/services/toast.service.d.ts.map +1 -0
- package/dist/lib/services/toast.service.js +76 -0
- package/dist/lib/services/toast.service.js.map +1 -0
- package/dist/public-api.d.ts +42 -0
- package/dist/public-api.d.ts.map +1 -0
- package/dist/public-api.js +49 -0
- package/dist/public-api.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,714 @@
|
|
|
1
|
+
import { Component, Output, EventEmitter, Input, HostListener, ViewChild } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../services/search.service";
|
|
6
|
+
import * as i2 from "@angular/forms";
|
|
7
|
+
import * as i3 from "@progress/kendo-angular-indicators";
|
|
8
|
+
import * as i4 from "@progress/kendo-angular-dateinputs";
|
|
9
|
+
const _c0 = ["searchInput"];
|
|
10
|
+
const _forTrack0 = ($index, $item) => $item.id;
|
|
11
|
+
function SearchPanelComponent_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
12
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
13
|
+
i0.ɵɵelementStart(0, "button", 28);
|
|
14
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.clearSearch()); });
|
|
15
|
+
i0.ɵɵelement(1, "i", 10);
|
|
16
|
+
i0.ɵɵelementEnd();
|
|
17
|
+
} }
|
|
18
|
+
function SearchPanelComponent_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
19
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
20
|
+
i0.ɵɵelementStart(0, "button", 29);
|
|
21
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_27_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.clearDateRange()); });
|
|
22
|
+
i0.ɵɵelement(1, "i", 30);
|
|
23
|
+
i0.ɵɵelementEnd();
|
|
24
|
+
} }
|
|
25
|
+
function SearchPanelComponent_Conditional_0_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵelementStart(0, "div", 22);
|
|
27
|
+
i0.ɵɵelement(1, "kendo-loader", 31);
|
|
28
|
+
i0.ɵɵelementStart(2, "span");
|
|
29
|
+
i0.ɵɵtext(3, "Searching...");
|
|
30
|
+
i0.ɵɵelementEnd()();
|
|
31
|
+
} }
|
|
32
|
+
function SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
33
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
34
|
+
i0.ɵɵelementStart(0, "button", 39);
|
|
35
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_For_8_Template_button_click_0_listener() { const search_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.useRecentSearch(search_r7)); });
|
|
36
|
+
i0.ɵɵelement(1, "i", 40);
|
|
37
|
+
i0.ɵɵelementStart(2, "span");
|
|
38
|
+
i0.ɵɵtext(3);
|
|
39
|
+
i0.ɵɵelementEnd()();
|
|
40
|
+
} if (rf & 2) {
|
|
41
|
+
const search_r7 = ctx.$implicit;
|
|
42
|
+
i0.ɵɵadvance(3);
|
|
43
|
+
i0.ɵɵtextInterpolate(search_r7);
|
|
44
|
+
} }
|
|
45
|
+
function SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
47
|
+
i0.ɵɵelementStart(0, "div", 32)(1, "div", 35)(2, "h3");
|
|
48
|
+
i0.ɵɵtext(3, "Recent Searches");
|
|
49
|
+
i0.ɵɵelementEnd();
|
|
50
|
+
i0.ɵɵelementStart(4, "button", 36);
|
|
51
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.clearRecentSearches()); });
|
|
52
|
+
i0.ɵɵtext(5, " Clear ");
|
|
53
|
+
i0.ɵɵelementEnd()();
|
|
54
|
+
i0.ɵɵelementStart(6, "div", 37);
|
|
55
|
+
i0.ɵɵrepeaterCreate(7, SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_For_8_Template, 4, 1, "button", 38, i0.ɵɵrepeaterTrackByIdentity);
|
|
56
|
+
i0.ɵɵelementEnd()();
|
|
57
|
+
} if (rf & 2) {
|
|
58
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
59
|
+
i0.ɵɵadvance(7);
|
|
60
|
+
i0.ɵɵrepeater(ctx_r1.recentSearches);
|
|
61
|
+
} }
|
|
62
|
+
function SearchPanelComponent_Conditional_0_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
63
|
+
i0.ɵɵtemplate(0, SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_Template, 9, 0, "div", 32);
|
|
64
|
+
i0.ɵɵelementStart(1, "div", 23);
|
|
65
|
+
i0.ɵɵelement(2, "i", 33);
|
|
66
|
+
i0.ɵɵelementStart(3, "p");
|
|
67
|
+
i0.ɵɵtext(4, "Search across all your conversations, messages, and artifacts");
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
i0.ɵɵelementStart(5, "div", 34)(6, "h4");
|
|
70
|
+
i0.ɵɵtext(7, "Tips:");
|
|
71
|
+
i0.ɵɵelementEnd();
|
|
72
|
+
i0.ɵɵelementStart(8, "ul")(9, "li");
|
|
73
|
+
i0.ɵɵtext(10, "Use filters to narrow results");
|
|
74
|
+
i0.ɵɵelementEnd();
|
|
75
|
+
i0.ɵɵelementStart(11, "li");
|
|
76
|
+
i0.ɵɵtext(12, "Set date range to find recent content");
|
|
77
|
+
i0.ɵɵelementEnd();
|
|
78
|
+
i0.ɵɵelementStart(13, "li");
|
|
79
|
+
i0.ɵɵtext(14, "Use keyboard shortcuts to navigate");
|
|
80
|
+
i0.ɵɵelementEnd()()()();
|
|
81
|
+
} if (rf & 2) {
|
|
82
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
83
|
+
i0.ɵɵconditional(ctx_r1.recentSearches.length > 0 ? 0 : -1);
|
|
84
|
+
} }
|
|
85
|
+
function SearchPanelComponent_Conditional_0_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
86
|
+
i0.ɵɵelementStart(0, "div", 24);
|
|
87
|
+
i0.ɵɵelement(1, "i", 41);
|
|
88
|
+
i0.ɵɵelementStart(2, "p");
|
|
89
|
+
i0.ɵɵtext(3);
|
|
90
|
+
i0.ɵɵelementEnd();
|
|
91
|
+
i0.ɵɵelementStart(4, "p", 42);
|
|
92
|
+
i0.ɵɵtext(5, "Try adjusting your filters or search terms");
|
|
93
|
+
i0.ɵɵelementEnd()();
|
|
94
|
+
} if (rf & 2) {
|
|
95
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
96
|
+
i0.ɵɵadvance(3);
|
|
97
|
+
i0.ɵɵtextInterpolate1("No results found for \"", ctx_r1.searchQuery, "\"");
|
|
98
|
+
} }
|
|
99
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
+
i0.ɵɵelement(0, "div", 54);
|
|
101
|
+
} if (rf & 2) {
|
|
102
|
+
const result_r9 = i0.ɵɵnextContext().$implicit;
|
|
103
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
104
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r9.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
105
|
+
} }
|
|
106
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
108
|
+
i0.ɵɵelementStart(0, "button", 48);
|
|
109
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_For_6_Template_button_click_0_listener() { const result_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectResult(result_r9)); });
|
|
110
|
+
i0.ɵɵelementStart(1, "div", 49);
|
|
111
|
+
i0.ɵɵelement(2, "i", 50);
|
|
112
|
+
i0.ɵɵelementEnd();
|
|
113
|
+
i0.ɵɵelementStart(3, "div", 51);
|
|
114
|
+
i0.ɵɵelement(4, "div", 52)(5, "div", 53);
|
|
115
|
+
i0.ɵɵtemplate(6, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_For_6_Conditional_6_Template, 1, 1, "div", 54);
|
|
116
|
+
i0.ɵɵelementEnd();
|
|
117
|
+
i0.ɵɵelementStart(7, "div", 55)(8, "span", 56);
|
|
118
|
+
i0.ɵɵtext(9);
|
|
119
|
+
i0.ɵɵelementEnd()()();
|
|
120
|
+
} if (rf & 2) {
|
|
121
|
+
const result_r9 = ctx.$implicit;
|
|
122
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
123
|
+
i0.ɵɵclassProp("selected", ctx_r1.isResultSelected(result_r9));
|
|
124
|
+
i0.ɵɵadvance(2);
|
|
125
|
+
i0.ɵɵclassMap(ctx_r1.getResultIcon(result_r9.type));
|
|
126
|
+
i0.ɵɵadvance(2);
|
|
127
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r9.title, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
128
|
+
i0.ɵɵadvance();
|
|
129
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r9.preview, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
130
|
+
i0.ɵɵadvance();
|
|
131
|
+
i0.ɵɵconditional(result_r9.matchedText ? 6 : -1);
|
|
132
|
+
i0.ɵɵadvance(3);
|
|
133
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r9.createdAt));
|
|
134
|
+
} }
|
|
135
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
136
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "h3", 45);
|
|
137
|
+
i0.ɵɵelement(2, "i", 14);
|
|
138
|
+
i0.ɵɵtext(3);
|
|
139
|
+
i0.ɵɵelementEnd();
|
|
140
|
+
i0.ɵɵelementStart(4, "div", 46);
|
|
141
|
+
i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_For_6_Template, 10, 8, "button", 47, _forTrack0);
|
|
142
|
+
i0.ɵɵelementEnd()();
|
|
143
|
+
} if (rf & 2) {
|
|
144
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
145
|
+
i0.ɵɵadvance(3);
|
|
146
|
+
i0.ɵɵtextInterpolate1(" Conversations (", ctx_r1.results.conversations.length, ") ");
|
|
147
|
+
i0.ɵɵadvance(2);
|
|
148
|
+
i0.ɵɵrepeater(ctx_r1.results.conversations);
|
|
149
|
+
} }
|
|
150
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
151
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
152
|
+
i0.ɵɵelement(1, "i", 14);
|
|
153
|
+
i0.ɵɵtext(2);
|
|
154
|
+
i0.ɵɵelementEnd();
|
|
155
|
+
} if (rf & 2) {
|
|
156
|
+
const result_r11 = i0.ɵɵnextContext().$implicit;
|
|
157
|
+
i0.ɵɵadvance(2);
|
|
158
|
+
i0.ɵɵtextInterpolate1(" ", result_r11.conversationName, " ");
|
|
159
|
+
} }
|
|
160
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
161
|
+
i0.ɵɵelement(0, "div", 54);
|
|
162
|
+
} if (rf & 2) {
|
|
163
|
+
const result_r11 = i0.ɵɵnextContext().$implicit;
|
|
164
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
165
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r11.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
166
|
+
} }
|
|
167
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
168
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
169
|
+
i0.ɵɵelementStart(0, "button", 48);
|
|
170
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Template_button_click_0_listener() { const result_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectResult(result_r11)); });
|
|
171
|
+
i0.ɵɵelementStart(1, "div", 49);
|
|
172
|
+
i0.ɵɵelement(2, "i", 50);
|
|
173
|
+
i0.ɵɵelementEnd();
|
|
174
|
+
i0.ɵɵelementStart(3, "div", 51);
|
|
175
|
+
i0.ɵɵtemplate(4, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Conditional_4_Template, 3, 1, "div", 57);
|
|
176
|
+
i0.ɵɵelement(5, "div", 53);
|
|
177
|
+
i0.ɵɵtemplate(6, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Conditional_6_Template, 1, 1, "div", 54);
|
|
178
|
+
i0.ɵɵelementEnd();
|
|
179
|
+
i0.ɵɵelementStart(7, "div", 55)(8, "span", 56);
|
|
180
|
+
i0.ɵɵtext(9);
|
|
181
|
+
i0.ɵɵelementEnd()()();
|
|
182
|
+
} if (rf & 2) {
|
|
183
|
+
const result_r11 = ctx.$implicit;
|
|
184
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
185
|
+
i0.ɵɵclassProp("selected", ctx_r1.isResultSelected(result_r11));
|
|
186
|
+
i0.ɵɵadvance(2);
|
|
187
|
+
i0.ɵɵclassMap(ctx_r1.getResultIcon(result_r11.type));
|
|
188
|
+
i0.ɵɵadvance(2);
|
|
189
|
+
i0.ɵɵconditional(result_r11.conversationName ? 4 : -1);
|
|
190
|
+
i0.ɵɵadvance();
|
|
191
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r11.preview, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
192
|
+
i0.ɵɵadvance();
|
|
193
|
+
i0.ɵɵconditional(result_r11.matchedText ? 6 : -1);
|
|
194
|
+
i0.ɵɵadvance(3);
|
|
195
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r11.createdAt));
|
|
196
|
+
} }
|
|
197
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
198
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "h3", 45);
|
|
199
|
+
i0.ɵɵelement(2, "i", 15);
|
|
200
|
+
i0.ɵɵtext(3);
|
|
201
|
+
i0.ɵɵelementEnd();
|
|
202
|
+
i0.ɵɵelementStart(4, "div", 46);
|
|
203
|
+
i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Template, 10, 8, "button", 47, _forTrack0);
|
|
204
|
+
i0.ɵɵelementEnd()();
|
|
205
|
+
} if (rf & 2) {
|
|
206
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
207
|
+
i0.ɵɵadvance(3);
|
|
208
|
+
i0.ɵɵtextInterpolate1(" Messages (", ctx_r1.results.messages.length, ") ");
|
|
209
|
+
i0.ɵɵadvance(2);
|
|
210
|
+
i0.ɵɵrepeater(ctx_r1.results.messages);
|
|
211
|
+
} }
|
|
212
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
213
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "span", 59);
|
|
214
|
+
i0.ɵɵtext(2);
|
|
215
|
+
i0.ɵɵelementEnd()();
|
|
216
|
+
} if (rf & 2) {
|
|
217
|
+
const result_r13 = i0.ɵɵnextContext().$implicit;
|
|
218
|
+
i0.ɵɵadvance(2);
|
|
219
|
+
i0.ɵɵtextInterpolate(result_r13.artifactType);
|
|
220
|
+
} }
|
|
221
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
222
|
+
i0.ɵɵelementStart(0, "div", 57);
|
|
223
|
+
i0.ɵɵelement(1, "i", 14);
|
|
224
|
+
i0.ɵɵtext(2);
|
|
225
|
+
i0.ɵɵelementEnd();
|
|
226
|
+
} if (rf & 2) {
|
|
227
|
+
const result_r13 = i0.ɵɵnextContext().$implicit;
|
|
228
|
+
i0.ɵɵadvance(2);
|
|
229
|
+
i0.ɵɵtextInterpolate1(" ", result_r13.conversationName, " ");
|
|
230
|
+
} }
|
|
231
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
232
|
+
i0.ɵɵelement(0, "div", 54);
|
|
233
|
+
} if (rf & 2) {
|
|
234
|
+
const result_r13 = i0.ɵɵnextContext().$implicit;
|
|
235
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
236
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r13.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
237
|
+
} }
|
|
238
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
239
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
240
|
+
i0.ɵɵelementStart(0, "button", 48);
|
|
241
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Template_button_click_0_listener() { const result_r13 = i0.ɵɵrestoreView(_r12).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectResult(result_r13)); });
|
|
242
|
+
i0.ɵɵelementStart(1, "div", 49);
|
|
243
|
+
i0.ɵɵelement(2, "i", 50);
|
|
244
|
+
i0.ɵɵelementEnd();
|
|
245
|
+
i0.ɵɵelementStart(3, "div", 51);
|
|
246
|
+
i0.ɵɵelement(4, "div", 52);
|
|
247
|
+
i0.ɵɵtemplate(5, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Conditional_5_Template, 3, 1, "div", 58)(6, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Conditional_6_Template, 3, 1, "div", 57);
|
|
248
|
+
i0.ɵɵelement(7, "div", 53);
|
|
249
|
+
i0.ɵɵtemplate(8, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Conditional_8_Template, 1, 1, "div", 54);
|
|
250
|
+
i0.ɵɵelementEnd();
|
|
251
|
+
i0.ɵɵelementStart(9, "div", 55)(10, "span", 56);
|
|
252
|
+
i0.ɵɵtext(11);
|
|
253
|
+
i0.ɵɵelementEnd()()();
|
|
254
|
+
} if (rf & 2) {
|
|
255
|
+
const result_r13 = ctx.$implicit;
|
|
256
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
257
|
+
i0.ɵɵclassProp("selected", ctx_r1.isResultSelected(result_r13));
|
|
258
|
+
i0.ɵɵadvance(2);
|
|
259
|
+
i0.ɵɵclassMap(ctx_r1.getResultIcon(result_r13.type));
|
|
260
|
+
i0.ɵɵadvance(2);
|
|
261
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r13.title, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
262
|
+
i0.ɵɵadvance();
|
|
263
|
+
i0.ɵɵconditional(result_r13.artifactType ? 5 : -1);
|
|
264
|
+
i0.ɵɵadvance();
|
|
265
|
+
i0.ɵɵconditional(result_r13.conversationName ? 6 : -1);
|
|
266
|
+
i0.ɵɵadvance();
|
|
267
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r13.preview, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
|
|
268
|
+
i0.ɵɵadvance();
|
|
269
|
+
i0.ɵɵconditional(result_r13.matchedText ? 8 : -1);
|
|
270
|
+
i0.ɵɵadvance(3);
|
|
271
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r13.createdAt));
|
|
272
|
+
} }
|
|
273
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
274
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "h3", 45);
|
|
275
|
+
i0.ɵɵelement(2, "i", 16);
|
|
276
|
+
i0.ɵɵtext(3);
|
|
277
|
+
i0.ɵɵelementEnd();
|
|
278
|
+
i0.ɵɵelementStart(4, "div", 46);
|
|
279
|
+
i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Template, 12, 10, "button", 47, _forTrack0);
|
|
280
|
+
i0.ɵɵelementEnd()();
|
|
281
|
+
} if (rf & 2) {
|
|
282
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
283
|
+
i0.ɵɵadvance(3);
|
|
284
|
+
i0.ɵɵtextInterpolate1(" Artifacts (", ctx_r1.results.artifacts.length, ") ");
|
|
285
|
+
i0.ɵɵadvance(2);
|
|
286
|
+
i0.ɵɵrepeater(ctx_r1.results.artifacts);
|
|
287
|
+
} }
|
|
288
|
+
function SearchPanelComponent_Conditional_0_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
+
i0.ɵɵelementStart(0, "div", 43);
|
|
290
|
+
i0.ɵɵtext(1);
|
|
291
|
+
i0.ɵɵelementEnd();
|
|
292
|
+
i0.ɵɵtemplate(2, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_Template, 7, 1, "div", 44)(3, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_Template, 7, 1, "div", 44)(4, SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_Template, 7, 1, "div", 44);
|
|
293
|
+
} if (rf & 2) {
|
|
294
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
295
|
+
i0.ɵɵadvance();
|
|
296
|
+
i0.ɵɵtextInterpolate2(" Found ", ctx_r1.results.total, " result", ctx_r1.results.total === 1 ? "" : "s", " ");
|
|
297
|
+
i0.ɵɵadvance();
|
|
298
|
+
i0.ɵɵconditional(ctx_r1.results.conversations.length > 0 ? 2 : -1);
|
|
299
|
+
i0.ɵɵadvance();
|
|
300
|
+
i0.ɵɵconditional(ctx_r1.results.messages.length > 0 ? 3 : -1);
|
|
301
|
+
i0.ɵɵadvance();
|
|
302
|
+
i0.ɵɵconditional(ctx_r1.results.artifacts.length > 0 ? 4 : -1);
|
|
303
|
+
} }
|
|
304
|
+
function SearchPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
305
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
306
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
307
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closePanel()); });
|
|
308
|
+
i0.ɵɵelementStart(1, "div", 3);
|
|
309
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
310
|
+
i0.ɵɵelementStart(2, "div", 4)(3, "div", 5);
|
|
311
|
+
i0.ɵɵelement(4, "i", 6);
|
|
312
|
+
i0.ɵɵelementStart(5, "input", 7, 0);
|
|
313
|
+
i0.ɵɵtwoWayListener("ngModelChange", function SearchPanelComponent_Conditional_0_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.searchQuery, $event) || (ctx_r1.searchQuery = $event); return i0.ɵɵresetView($event); });
|
|
314
|
+
i0.ɵɵlistener("input", function SearchPanelComponent_Conditional_0_Template_input_input_5_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSearchInput()); });
|
|
315
|
+
i0.ɵɵelementEnd();
|
|
316
|
+
i0.ɵɵtemplate(7, SearchPanelComponent_Conditional_0_Conditional_7_Template, 2, 0, "button", 8);
|
|
317
|
+
i0.ɵɵelementEnd();
|
|
318
|
+
i0.ɵɵelementStart(8, "button", 9);
|
|
319
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closePanel()); });
|
|
320
|
+
i0.ɵɵelement(9, "i", 10);
|
|
321
|
+
i0.ɵɵelementEnd()();
|
|
322
|
+
i0.ɵɵelementStart(10, "div", 11)(11, "div", 12)(12, "button", 13);
|
|
323
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setFilter("all")); });
|
|
324
|
+
i0.ɵɵtext(13, " All ");
|
|
325
|
+
i0.ɵɵelementEnd();
|
|
326
|
+
i0.ɵɵelementStart(14, "button", 13);
|
|
327
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setFilter("conversations")); });
|
|
328
|
+
i0.ɵɵelement(15, "i", 14);
|
|
329
|
+
i0.ɵɵtext(16, " Conversations ");
|
|
330
|
+
i0.ɵɵelementEnd();
|
|
331
|
+
i0.ɵɵelementStart(17, "button", 13);
|
|
332
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setFilter("messages")); });
|
|
333
|
+
i0.ɵɵelement(18, "i", 15);
|
|
334
|
+
i0.ɵɵtext(19, " Messages ");
|
|
335
|
+
i0.ɵɵelementEnd();
|
|
336
|
+
i0.ɵɵelementStart(20, "button", 13);
|
|
337
|
+
i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setFilter("artifacts")); });
|
|
338
|
+
i0.ɵɵelement(21, "i", 16);
|
|
339
|
+
i0.ɵɵtext(22, " Artifacts ");
|
|
340
|
+
i0.ɵɵelementEnd()();
|
|
341
|
+
i0.ɵɵelementStart(23, "div", 17)(24, "kendo-daterange")(25, "kendo-dateinput", 18);
|
|
342
|
+
i0.ɵɵtwoWayListener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_25_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.dateRange.start, $event) || (ctx_r1.dateRange.start = $event); return i0.ɵɵresetView($event); });
|
|
343
|
+
i0.ɵɵlistener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_25_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDateRangeChange()); });
|
|
344
|
+
i0.ɵɵelementEnd();
|
|
345
|
+
i0.ɵɵelementStart(26, "kendo-dateinput", 19);
|
|
346
|
+
i0.ɵɵtwoWayListener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_26_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.dateRange.end, $event) || (ctx_r1.dateRange.end = $event); return i0.ɵɵresetView($event); });
|
|
347
|
+
i0.ɵɵlistener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_26_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDateRangeChange()); });
|
|
348
|
+
i0.ɵɵelementEnd()();
|
|
349
|
+
i0.ɵɵtemplate(27, SearchPanelComponent_Conditional_0_Conditional_27_Template, 2, 0, "button", 20);
|
|
350
|
+
i0.ɵɵelementEnd()();
|
|
351
|
+
i0.ɵɵelementStart(28, "div", 21);
|
|
352
|
+
i0.ɵɵtemplate(29, SearchPanelComponent_Conditional_0_Conditional_29_Template, 4, 0, "div", 22)(30, SearchPanelComponent_Conditional_0_Conditional_30_Template, 15, 1, "div", 23)(31, SearchPanelComponent_Conditional_0_Conditional_31_Template, 6, 1, "div", 24)(32, SearchPanelComponent_Conditional_0_Conditional_32_Template, 5, 5);
|
|
353
|
+
i0.ɵɵelementEnd();
|
|
354
|
+
i0.ɵɵelementStart(33, "div", 25)(34, "div", 26)(35, "span", 27)(36, "kbd");
|
|
355
|
+
i0.ɵɵtext(37, "\u2191");
|
|
356
|
+
i0.ɵɵelementEnd();
|
|
357
|
+
i0.ɵɵelementStart(38, "kbd");
|
|
358
|
+
i0.ɵɵtext(39, "\u2193");
|
|
359
|
+
i0.ɵɵelementEnd();
|
|
360
|
+
i0.ɵɵtext(40, " Navigate");
|
|
361
|
+
i0.ɵɵelementEnd();
|
|
362
|
+
i0.ɵɵelementStart(41, "span", 27)(42, "kbd");
|
|
363
|
+
i0.ɵɵtext(43, "\u21B5");
|
|
364
|
+
i0.ɵɵelementEnd();
|
|
365
|
+
i0.ɵɵtext(44, " Select");
|
|
366
|
+
i0.ɵɵelementEnd();
|
|
367
|
+
i0.ɵɵelementStart(45, "span", 27)(46, "kbd");
|
|
368
|
+
i0.ɵɵtext(47, "Esc");
|
|
369
|
+
i0.ɵɵelementEnd();
|
|
370
|
+
i0.ɵɵtext(48, " Close");
|
|
371
|
+
i0.ɵɵelementEnd()()()()();
|
|
372
|
+
} if (rf & 2) {
|
|
373
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
374
|
+
i0.ɵɵadvance(5);
|
|
375
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.searchQuery);
|
|
376
|
+
i0.ɵɵadvance(2);
|
|
377
|
+
i0.ɵɵconditional(ctx_r1.searchQuery ? 7 : -1);
|
|
378
|
+
i0.ɵɵadvance(5);
|
|
379
|
+
i0.ɵɵclassProp("active", ctx_r1.activeFilter === "all");
|
|
380
|
+
i0.ɵɵadvance(2);
|
|
381
|
+
i0.ɵɵclassProp("active", ctx_r1.activeFilter === "conversations");
|
|
382
|
+
i0.ɵɵadvance(3);
|
|
383
|
+
i0.ɵɵclassProp("active", ctx_r1.activeFilter === "messages");
|
|
384
|
+
i0.ɵɵadvance(3);
|
|
385
|
+
i0.ɵɵclassProp("active", ctx_r1.activeFilter === "artifacts");
|
|
386
|
+
i0.ɵɵadvance(5);
|
|
387
|
+
i0.ɵɵtwoWayProperty("value", ctx_r1.dateRange.start);
|
|
388
|
+
i0.ɵɵadvance();
|
|
389
|
+
i0.ɵɵtwoWayProperty("value", ctx_r1.dateRange.end);
|
|
390
|
+
i0.ɵɵadvance();
|
|
391
|
+
i0.ɵɵconditional(ctx_r1.dateRange.start || ctx_r1.dateRange.end ? 27 : -1);
|
|
392
|
+
i0.ɵɵadvance(2);
|
|
393
|
+
i0.ɵɵconditional(ctx_r1.isSearching ? 29 : !ctx_r1.searchQuery ? 30 : ctx_r1.results.total === 0 ? 31 : 32);
|
|
394
|
+
} }
|
|
395
|
+
/**
|
|
396
|
+
* Search panel component providing global search UI
|
|
397
|
+
* Can be displayed as a modal or slide-out panel
|
|
398
|
+
* Supports filtering, date ranges, and result navigation
|
|
399
|
+
*/
|
|
400
|
+
export class SearchPanelComponent {
|
|
401
|
+
searchService;
|
|
402
|
+
environmentId;
|
|
403
|
+
currentUser;
|
|
404
|
+
isOpen = false;
|
|
405
|
+
close = new EventEmitter();
|
|
406
|
+
resultSelected = new EventEmitter();
|
|
407
|
+
searchInput;
|
|
408
|
+
searchQuery = '';
|
|
409
|
+
activeFilter = 'all';
|
|
410
|
+
dateRange = { start: null, end: null };
|
|
411
|
+
isSearching = false;
|
|
412
|
+
results = {
|
|
413
|
+
conversations: [],
|
|
414
|
+
messages: [],
|
|
415
|
+
artifacts: [],
|
|
416
|
+
total: 0
|
|
417
|
+
};
|
|
418
|
+
recentSearches = [];
|
|
419
|
+
selectedIndex = -1;
|
|
420
|
+
destroy$ = new Subject();
|
|
421
|
+
constructor(searchService) {
|
|
422
|
+
this.searchService = searchService;
|
|
423
|
+
}
|
|
424
|
+
ngOnInit() {
|
|
425
|
+
this.subscribeToSearchState();
|
|
426
|
+
this.loadRecentSearches();
|
|
427
|
+
}
|
|
428
|
+
ngOnDestroy() {
|
|
429
|
+
this.destroy$.next();
|
|
430
|
+
this.destroy$.complete();
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Subscribe to search service state
|
|
434
|
+
*/
|
|
435
|
+
subscribeToSearchState() {
|
|
436
|
+
this.searchService.isSearching$
|
|
437
|
+
.pipe(takeUntil(this.destroy$))
|
|
438
|
+
.subscribe(isSearching => {
|
|
439
|
+
this.isSearching = isSearching;
|
|
440
|
+
});
|
|
441
|
+
this.searchService.searchResults$
|
|
442
|
+
.pipe(takeUntil(this.destroy$))
|
|
443
|
+
.subscribe(results => {
|
|
444
|
+
this.results = results;
|
|
445
|
+
this.selectedIndex = -1;
|
|
446
|
+
});
|
|
447
|
+
this.searchService.searchFilter$
|
|
448
|
+
.pipe(takeUntil(this.destroy$))
|
|
449
|
+
.subscribe(filter => {
|
|
450
|
+
this.activeFilter = filter;
|
|
451
|
+
});
|
|
452
|
+
this.searchService.dateRange$
|
|
453
|
+
.pipe(takeUntil(this.destroy$))
|
|
454
|
+
.subscribe(range => {
|
|
455
|
+
this.dateRange = range;
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* Load recent searches
|
|
460
|
+
*/
|
|
461
|
+
loadRecentSearches() {
|
|
462
|
+
this.recentSearches = this.searchService.getRecentSearches();
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Handle search input
|
|
466
|
+
*/
|
|
467
|
+
onSearchInput() {
|
|
468
|
+
if (this.searchQuery.trim()) {
|
|
469
|
+
this.performSearch();
|
|
470
|
+
}
|
|
471
|
+
else {
|
|
472
|
+
this.searchService.clearResults();
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Perform search
|
|
477
|
+
*/
|
|
478
|
+
async performSearch() {
|
|
479
|
+
await this.searchService.search(this.searchQuery, this.environmentId, this.currentUser);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Set search filter
|
|
483
|
+
*/
|
|
484
|
+
setFilter(filter) {
|
|
485
|
+
this.searchService.setSearchFilter(filter);
|
|
486
|
+
if (this.searchQuery.trim()) {
|
|
487
|
+
this.performSearch();
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Clear search
|
|
492
|
+
*/
|
|
493
|
+
clearSearch() {
|
|
494
|
+
this.searchQuery = '';
|
|
495
|
+
this.searchService.clearResults();
|
|
496
|
+
this.focusSearchInput();
|
|
497
|
+
}
|
|
498
|
+
/**
|
|
499
|
+
* Select a result
|
|
500
|
+
*/
|
|
501
|
+
selectResult(result) {
|
|
502
|
+
this.resultSelected.emit(result);
|
|
503
|
+
this.closePanel();
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Use recent search
|
|
507
|
+
*/
|
|
508
|
+
useRecentSearch(query) {
|
|
509
|
+
this.searchQuery = query;
|
|
510
|
+
this.performSearch();
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Clear recent searches
|
|
514
|
+
*/
|
|
515
|
+
clearRecentSearches() {
|
|
516
|
+
this.searchService.clearRecentSearches();
|
|
517
|
+
this.recentSearches = [];
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Close panel
|
|
521
|
+
*/
|
|
522
|
+
closePanel() {
|
|
523
|
+
this.close.emit();
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* Focus search input
|
|
527
|
+
*/
|
|
528
|
+
focusSearchInput() {
|
|
529
|
+
setTimeout(() => {
|
|
530
|
+
this.searchInput?.nativeElement.focus();
|
|
531
|
+
}, 0);
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* Handle keyboard navigation
|
|
535
|
+
*/
|
|
536
|
+
handleKeyboard(event) {
|
|
537
|
+
if (!this.isOpen)
|
|
538
|
+
return;
|
|
539
|
+
const allResults = this.getAllResultsFlat();
|
|
540
|
+
switch (event.key) {
|
|
541
|
+
case 'Escape':
|
|
542
|
+
event.preventDefault();
|
|
543
|
+
this.closePanel();
|
|
544
|
+
break;
|
|
545
|
+
case 'ArrowDown':
|
|
546
|
+
event.preventDefault();
|
|
547
|
+
if (allResults.length > 0) {
|
|
548
|
+
this.selectedIndex = Math.min(this.selectedIndex + 1, allResults.length - 1);
|
|
549
|
+
}
|
|
550
|
+
break;
|
|
551
|
+
case 'ArrowUp':
|
|
552
|
+
event.preventDefault();
|
|
553
|
+
if (this.selectedIndex > 0) {
|
|
554
|
+
this.selectedIndex--;
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
this.selectedIndex = -1;
|
|
558
|
+
}
|
|
559
|
+
break;
|
|
560
|
+
case 'Enter':
|
|
561
|
+
event.preventDefault();
|
|
562
|
+
if (this.selectedIndex >= 0 && allResults[this.selectedIndex]) {
|
|
563
|
+
this.selectResult(allResults[this.selectedIndex]);
|
|
564
|
+
}
|
|
565
|
+
break;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Get all results as flat array
|
|
570
|
+
*/
|
|
571
|
+
getAllResultsFlat() {
|
|
572
|
+
return [
|
|
573
|
+
...this.results.conversations,
|
|
574
|
+
...this.results.messages,
|
|
575
|
+
...this.results.artifacts
|
|
576
|
+
];
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Check if result is selected
|
|
580
|
+
*/
|
|
581
|
+
isResultSelected(result) {
|
|
582
|
+
const allResults = this.getAllResultsFlat();
|
|
583
|
+
const index = allResults.findIndex(r => r.id === result.id && r.type === result.type);
|
|
584
|
+
return index === this.selectedIndex;
|
|
585
|
+
}
|
|
586
|
+
/**
|
|
587
|
+
* Get icon for result type
|
|
588
|
+
*/
|
|
589
|
+
getResultIcon(type) {
|
|
590
|
+
switch (type) {
|
|
591
|
+
case 'conversation':
|
|
592
|
+
return 'fa-comments';
|
|
593
|
+
case 'message':
|
|
594
|
+
return 'fa-comment';
|
|
595
|
+
case 'artifact':
|
|
596
|
+
return 'fa-file-alt';
|
|
597
|
+
default:
|
|
598
|
+
return 'fa-circle';
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Get filter display text
|
|
603
|
+
*/
|
|
604
|
+
getFilterText(filter) {
|
|
605
|
+
switch (filter) {
|
|
606
|
+
case 'all':
|
|
607
|
+
return 'All';
|
|
608
|
+
case 'conversations':
|
|
609
|
+
return 'Conversations';
|
|
610
|
+
case 'messages':
|
|
611
|
+
return 'Messages';
|
|
612
|
+
case 'artifacts':
|
|
613
|
+
return 'Artifacts';
|
|
614
|
+
default:
|
|
615
|
+
return 'All';
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* Format date for display
|
|
620
|
+
*/
|
|
621
|
+
formatDate(date) {
|
|
622
|
+
const now = new Date();
|
|
623
|
+
const diff = now.getTime() - new Date(date).getTime();
|
|
624
|
+
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
|
625
|
+
if (days === 0)
|
|
626
|
+
return 'Today';
|
|
627
|
+
if (days === 1)
|
|
628
|
+
return 'Yesterday';
|
|
629
|
+
if (days < 7)
|
|
630
|
+
return `${days} days ago`;
|
|
631
|
+
if (days < 30)
|
|
632
|
+
return `${Math.floor(days / 7)} weeks ago`;
|
|
633
|
+
if (days < 365)
|
|
634
|
+
return `${Math.floor(days / 30)} months ago`;
|
|
635
|
+
return `${Math.floor(days / 365)} years ago`;
|
|
636
|
+
}
|
|
637
|
+
/**
|
|
638
|
+
* Highlight matched text in result
|
|
639
|
+
*/
|
|
640
|
+
highlightMatch(text, query) {
|
|
641
|
+
if (!query)
|
|
642
|
+
return text;
|
|
643
|
+
const regex = new RegExp(`(${this.escapeRegex(query)})`, 'gi');
|
|
644
|
+
return text.replace(regex, '<mark>$1</mark>');
|
|
645
|
+
}
|
|
646
|
+
/**
|
|
647
|
+
* Escape regex special characters
|
|
648
|
+
*/
|
|
649
|
+
escapeRegex(str) {
|
|
650
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
651
|
+
}
|
|
652
|
+
/**
|
|
653
|
+
* Handle date range change
|
|
654
|
+
*/
|
|
655
|
+
onDateRangeChange() {
|
|
656
|
+
this.searchService.setDateRange(this.dateRange);
|
|
657
|
+
if (this.searchQuery.trim()) {
|
|
658
|
+
this.performSearch();
|
|
659
|
+
}
|
|
660
|
+
}
|
|
661
|
+
/**
|
|
662
|
+
* Clear date range
|
|
663
|
+
*/
|
|
664
|
+
clearDateRange() {
|
|
665
|
+
this.dateRange = { start: null, end: null };
|
|
666
|
+
this.searchService.setDateRange({ start: null, end: null });
|
|
667
|
+
if (this.searchQuery.trim()) {
|
|
668
|
+
this.performSearch();
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Watch for panel open state changes
|
|
673
|
+
*/
|
|
674
|
+
ngOnChanges() {
|
|
675
|
+
if (this.isOpen) {
|
|
676
|
+
this.focusSearchInput();
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
static ɵfac = function SearchPanelComponent_Factory(t) { return new (t || SearchPanelComponent)(i0.ɵɵdirectiveInject(i1.SearchService)); };
|
|
680
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchPanelComponent, selectors: [["mj-search-panel"]], viewQuery: function SearchPanelComponent_Query(rf, ctx) { if (rf & 1) {
|
|
681
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
682
|
+
} if (rf & 2) {
|
|
683
|
+
let _t;
|
|
684
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchInput = _t.first);
|
|
685
|
+
} }, hostBindings: function SearchPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
686
|
+
i0.ɵɵlistener("keydown", function SearchPanelComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyboard($event); });
|
|
687
|
+
} }, inputs: { environmentId: "environmentId", currentUser: "currentUser", isOpen: "isOpen" }, outputs: { close: "close", resultSelected: "resultSelected" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["searchInput", ""], [1, "search-panel-overlay"], [1, "search-panel-overlay", 3, "click"], [1, "search-panel", 3, "click"], [1, "search-header"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search conversations, messages, and artifacts...", "autocomplete", "off", 1, "search-input", 3, "ngModelChange", "input", "ngModel"], ["type", "button", "title", "Clear search", 1, "clear-button"], ["type", "button", "title", "Close (Esc)", 1, "close-button", 3, "click"], [1, "fa-solid", "fa-times"], [1, "search-filters"], [1, "filter-buttons"], ["type", "button", 1, "filter-button", 3, "click"], [1, "fa-solid", "fa-comments"], [1, "fa-solid", "fa-comment"], [1, "fa-solid", "fa-file-alt"], [1, "date-filter"], ["kendoDateRangeStartInput", "", "placeholder", "From", 3, "valueChange", "value"], ["kendoDateRangeEndInput", "", "placeholder", "To", 3, "valueChange", "value"], ["type", "button", "title", "Clear date range", 1, "clear-date-button"], [1, "search-results"], [1, "search-loading"], [1, "empty-state"], [1, "no-results"], [1, "search-footer"], [1, "keyboard-hints"], [1, "hint"], ["type", "button", "title", "Clear search", 1, "clear-button", 3, "click"], ["type", "button", "title", "Clear date range", 1, "clear-date-button", 3, "click"], [1, "fa-solid", "fa-times-circle"], ["type", "converging-spinner", "size", "medium"], [1, "recent-searches"], [1, "fa-solid", "fa-search", "empty-icon"], [1, "search-tips"], [1, "recent-searches-header"], ["type", "button", "title", "Clear recent searches", 1, "clear-recent-button", 3, "click"], [1, "recent-searches-list"], ["type", "button", 1, "recent-search-item"], ["type", "button", 1, "recent-search-item", 3, "click"], [1, "fa-solid", "fa-history"], [1, "fa-solid", "fa-search-minus", "empty-icon"], [1, "no-results-hint"], [1, "results-summary"], [1, "results-group"], [1, "results-group-title"], [1, "results-list"], ["type", "button", 1, "result-item", 3, "selected"], ["type", "button", 1, "result-item", 3, "click"], [1, "result-icon"], [1, "fa-solid"], [1, "result-content"], [1, "result-title", 3, "innerHTML"], [1, "result-preview", 3, "innerHTML"], [1, "result-match", 3, "innerHTML"], [1, "result-meta"], [1, "result-date"], [1, "result-conversation"], [1, "result-type"], [1, "type-badge"]], template: function SearchPanelComponent_Template(rf, ctx) { if (rf & 1) {
|
|
688
|
+
i0.ɵɵtemplate(0, SearchPanelComponent_Conditional_0_Template, 49, 14, "div", 1);
|
|
689
|
+
} if (rf & 2) {
|
|
690
|
+
i0.ɵɵconditional(ctx.isOpen ? 0 : -1);
|
|
691
|
+
} }, dependencies: [i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.LoaderComponent, i4.DateInputComponent, i4.DateRangeComponent, i4.DateRangeStartInputDirective, i4.DateRangeEndInputDirective], styles: [".search-panel-overlay[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: flex-start;\n justify-content: center;\n z-index: 10000;\n padding-top: 10vh;\n backdrop-filter: blur(2px);\n}\n\n.search-panel[_ngcontent-%COMP%] {\n background: #ffffff;\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);\n width: 90%;\n max-width: 800px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: _ngcontent-%COMP%_slideDown 0.2s ease-out;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n\n\n.search-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.search-input-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n background: #f5f5f5;\n border-radius: 6px;\n padding: 8px 12px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n color: #666;\n font-size: 16px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 16px;\n outline: none;\n color: #333;\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: #999;\n}\n\n.clear-button[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.clear-button[_ngcontent-%COMP%]:hover {\n background: #e0e0e0;\n color: #333;\n}\n\n.close-button[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.close-button[_ngcontent-%COMP%]:hover {\n background: #f5f5f5;\n color: #333;\n}\n\n\n\n.search-filters[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid #e0e0e0;\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.filter-buttons[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.filter-button[_ngcontent-%COMP%] {\n border: 1px solid #ddd;\n background: #ffffff;\n color: #666;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n}\n\n.filter-button[_ngcontent-%COMP%]:hover {\n background: #f5f5f5;\n border-color: #ccc;\n}\n\n.filter-button.active[_ngcontent-%COMP%] {\n background: #007bff;\n color: #ffffff;\n border-color: #007bff;\n}\n\n.date-filter[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.clear-date-button[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s;\n}\n\n.clear-date-button[_ngcontent-%COMP%]:hover {\n color: #333;\n}\n\n\n\n.search-results[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.search-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n gap: 16px;\n color: #666;\n}\n\n.results-summary[_ngcontent-%COMP%] {\n padding: 8px 0 16px;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n}\n\n.results-group[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.results-group-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin: 0 0 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.results-group-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #007bff;\n}\n\n.results-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.result-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n background: #ffffff;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s;\n width: 100%;\n}\n\n.result-item[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #007bff;\n transform: translateX(2px);\n}\n\n.result-item.selected[_ngcontent-%COMP%] {\n background: #e7f3ff;\n border-color: #007bff;\n}\n\n.result-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f5f5f5;\n border-radius: 6px;\n color: #007bff;\n flex-shrink: 0;\n}\n\n.result-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.result-title[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.result-preview[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #666;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.result-match[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n margin-top: 4px;\n padding: 4px 8px;\n background: #f8f9fa;\n border-radius: 4px;\n font-style: italic;\n}\n\n.result-conversation[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #007bff;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.result-type[_ngcontent-%COMP%] {\n margin-top: 4px;\n}\n\n.type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n background: #e7f3ff;\n color: #007bff;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.result-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.result-date[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #999;\n}\n\n\n\n.result-item[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(mark) {\n background: #fff3cd;\n color: #333;\n padding: 2px 0;\n border-radius: 2px;\n font-weight: 600;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%], \n.no-results[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: #666;\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: #ccc;\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%], \n.no-results[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 8px 0;\n font-size: 14px;\n}\n\n.no-results-hint[_ngcontent-%COMP%] {\n color: #999;\n font-size: 13px;\n}\n\n.search-tips[_ngcontent-%COMP%] {\n margin-top: 24px;\n text-align: left;\n background: #f8f9fa;\n padding: 16px;\n border-radius: 6px;\n max-width: 400px;\n}\n\n.search-tips[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 13px;\n color: #333;\n}\n\n.search-tips[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n}\n\n.search-tips[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n margin: 4px 0;\n}\n\n\n\n.recent-searches[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.recent-searches-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.recent-searches-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin: 0;\n}\n\n.clear-recent-button[_ngcontent-%COMP%] {\n border: none;\n background: transparent;\n color: #007bff;\n cursor: pointer;\n font-size: 13px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.clear-recent-button[_ngcontent-%COMP%]:hover {\n background: #f5f5f5;\n}\n\n.recent-searches-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.recent-search-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n background: #ffffff;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s;\n width: 100%;\n font-size: 14px;\n color: #666;\n}\n\n.recent-search-item[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ccc;\n}\n\n.recent-search-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #999;\n}\n\n\n\n.search-footer[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-top: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.keyboard-hints[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n justify-content: center;\n font-size: 12px;\n color: #666;\n}\n\n.hint[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\nkbd[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 3px 6px;\n background: #ffffff;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n font-size: 11px;\n color: #333;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n\n\n@media (max-width: 768px) {\n .search-panel[_ngcontent-%COMP%] {\n width: 95%;\n max-height: 90vh;\n }\n\n .search-filters[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n\n .date-filter[_ngcontent-%COMP%] {\n margin-left: 0;\n }\n\n .keyboard-hints[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}"] });
|
|
692
|
+
}
|
|
693
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchPanelComponent, [{
|
|
694
|
+
type: Component,
|
|
695
|
+
args: [{ selector: 'mj-search-panel', template: "@if (isOpen) {\n<div class=\"search-panel-overlay\" (click)=\"closePanel()\">\n <div class=\"search-panel\" (click)=\"$event.stopPropagation()\">\n <!-- Search Header -->\n <div class=\"search-header\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input\n #searchInput\n type=\"text\"\n class=\"search-input\"\n placeholder=\"Search conversations, messages, and artifacts...\"\n [(ngModel)]=\"searchQuery\"\n (input)=\"onSearchInput()\"\n autocomplete=\"off\"\n />\n @if (searchQuery) {\n <button\n type=\"button\"\n class=\"clear-button\"\n (click)=\"clearSearch()\"\n title=\"Clear search\"\n >\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n\n <button\n type=\"button\"\n class=\"close-button\"\n (click)=\"closePanel()\"\n title=\"Close (Esc)\"\n >\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <!-- Filters -->\n <div class=\"search-filters\">\n <div class=\"filter-buttons\">\n <button\n type=\"button\"\n class=\"filter-button\"\n [class.active]=\"activeFilter === 'all'\"\n (click)=\"setFilter('all')\"\n >\n All\n </button>\n <button\n type=\"button\"\n class=\"filter-button\"\n [class.active]=\"activeFilter === 'conversations'\"\n (click)=\"setFilter('conversations')\"\n >\n <i class=\"fa-solid fa-comments\"></i>\n Conversations\n </button>\n <button\n type=\"button\"\n class=\"filter-button\"\n [class.active]=\"activeFilter === 'messages'\"\n (click)=\"setFilter('messages')\"\n >\n <i class=\"fa-solid fa-comment\"></i>\n Messages\n </button>\n <button\n type=\"button\"\n class=\"filter-button\"\n [class.active]=\"activeFilter === 'artifacts'\"\n (click)=\"setFilter('artifacts')\"\n >\n <i class=\"fa-solid fa-file-alt\"></i>\n Artifacts\n </button>\n </div>\n\n <!-- Date Range Filter -->\n <div class=\"date-filter\">\n <kendo-daterange>\n <kendo-dateinput\n kendoDateRangeStartInput\n [(value)]=\"dateRange.start\"\n (valueChange)=\"onDateRangeChange()\"\n placeholder=\"From\"\n ></kendo-dateinput>\n <kendo-dateinput\n kendoDateRangeEndInput\n [(value)]=\"dateRange.end\"\n (valueChange)=\"onDateRangeChange()\"\n placeholder=\"To\"\n ></kendo-dateinput>\n </kendo-daterange>\n @if (dateRange.start || dateRange.end) {\n <button\n type=\"button\"\n class=\"clear-date-button\"\n (click)=\"clearDateRange()\"\n title=\"Clear date range\"\n >\n <i class=\"fa-solid fa-times-circle\"></i>\n </button>\n }\n </div>\n </div>\n\n <!-- Search Results -->\n <div class=\"search-results\">\n @if (isSearching) {\n <div class=\"search-loading\">\n <kendo-loader type=\"converging-spinner\" size=\"medium\"></kendo-loader>\n <span>Searching...</span>\n </div>\n } @else if (!searchQuery) {\n <!-- Recent Searches -->\n @if (recentSearches.length > 0) {\n <div class=\"recent-searches\">\n <div class=\"recent-searches-header\">\n <h3>Recent Searches</h3>\n <button\n type=\"button\"\n class=\"clear-recent-button\"\n (click)=\"clearRecentSearches()\"\n title=\"Clear recent searches\"\n >\n Clear\n </button>\n </div>\n <div class=\"recent-searches-list\">\n @for (search of recentSearches; track search) {\n <button\n type=\"button\"\n class=\"recent-search-item\"\n (click)=\"useRecentSearch(search)\"\n >\n <i class=\"fa-solid fa-history\"></i>\n <span>{{ search }}</span>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Empty State -->\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-search empty-icon\"></i>\n <p>Search across all your conversations, messages, and artifacts</p>\n <div class=\"search-tips\">\n <h4>Tips:</h4>\n <ul>\n <li>Use filters to narrow results</li>\n <li>Set date range to find recent content</li>\n <li>Use keyboard shortcuts to navigate</li>\n </ul>\n </div>\n </div>\n } @else if (results.total === 0) {\n <!-- No Results -->\n <div class=\"no-results\">\n <i class=\"fa-solid fa-search-minus empty-icon\"></i>\n <p>No results found for \"{{ searchQuery }}\"</p>\n <p class=\"no-results-hint\">Try adjusting your filters or search terms</p>\n </div>\n } @else {\n <!-- Results Summary -->\n <div class=\"results-summary\">\n Found {{ results.total }} result{{ results.total === 1 ? '' : 's' }}\n </div>\n\n <!-- Conversations Results -->\n @if (results.conversations.length > 0) {\n <div class=\"results-group\">\n <h3 class=\"results-group-title\">\n <i class=\"fa-solid fa-comments\"></i>\n Conversations ({{ results.conversations.length }})\n </h3>\n <div class=\"results-list\">\n @for (result of results.conversations; track result.id) {\n <button\n type=\"button\"\n class=\"result-item\"\n [class.selected]=\"isResultSelected(result)\"\n (click)=\"selectResult(result)\"\n >\n <div class=\"result-icon\">\n <i class=\"fa-solid\" [class]=\"getResultIcon(result.type)\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-title\" [innerHTML]=\"highlightMatch(result.title, searchQuery)\"></div>\n <div class=\"result-preview\" [innerHTML]=\"highlightMatch(result.preview, searchQuery)\"></div>\n @if (result.matchedText) {\n <div class=\"result-match\" [innerHTML]=\"highlightMatch(result.matchedText, searchQuery)\"></div>\n }\n </div>\n <div class=\"result-meta\">\n <span class=\"result-date\">{{ formatDate(result.createdAt) }}</span>\n </div>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Messages Results -->\n @if (results.messages.length > 0) {\n <div class=\"results-group\">\n <h3 class=\"results-group-title\">\n <i class=\"fa-solid fa-comment\"></i>\n Messages ({{ results.messages.length }})\n </h3>\n <div class=\"results-list\">\n @for (result of results.messages; track result.id) {\n <button\n type=\"button\"\n class=\"result-item\"\n [class.selected]=\"isResultSelected(result)\"\n (click)=\"selectResult(result)\"\n >\n <div class=\"result-icon\">\n <i class=\"fa-solid\" [class]=\"getResultIcon(result.type)\"></i>\n </div>\n <div class=\"result-content\">\n @if (result.conversationName) {\n <div class=\"result-conversation\">\n <i class=\"fa-solid fa-comments\"></i>\n {{ result.conversationName }}\n </div>\n }\n <div class=\"result-preview\" [innerHTML]=\"highlightMatch(result.preview, searchQuery)\"></div>\n @if (result.matchedText) {\n <div class=\"result-match\" [innerHTML]=\"highlightMatch(result.matchedText, searchQuery)\"></div>\n }\n </div>\n <div class=\"result-meta\">\n <span class=\"result-date\">{{ formatDate(result.createdAt) }}</span>\n </div>\n </button>\n }\n </div>\n </div>\n }\n\n <!-- Artifacts Results -->\n @if (results.artifacts.length > 0) {\n <div class=\"results-group\">\n <h3 class=\"results-group-title\">\n <i class=\"fa-solid fa-file-alt\"></i>\n Artifacts ({{ results.artifacts.length }})\n </h3>\n <div class=\"results-list\">\n @for (result of results.artifacts; track result.id) {\n <button\n type=\"button\"\n class=\"result-item\"\n [class.selected]=\"isResultSelected(result)\"\n (click)=\"selectResult(result)\"\n >\n <div class=\"result-icon\">\n <i class=\"fa-solid\" [class]=\"getResultIcon(result.type)\"></i>\n </div>\n <div class=\"result-content\">\n <div class=\"result-title\" [innerHTML]=\"highlightMatch(result.title, searchQuery)\"></div>\n @if (result.artifactType) {\n <div class=\"result-type\">\n <span class=\"type-badge\">{{ result.artifactType }}</span>\n </div>\n }\n @if (result.conversationName) {\n <div class=\"result-conversation\">\n <i class=\"fa-solid fa-comments\"></i>\n {{ result.conversationName }}\n </div>\n }\n <div class=\"result-preview\" [innerHTML]=\"highlightMatch(result.preview, searchQuery)\"></div>\n @if (result.matchedText) {\n <div class=\"result-match\" [innerHTML]=\"highlightMatch(result.matchedText, searchQuery)\"></div>\n }\n </div>\n <div class=\"result-meta\">\n <span class=\"result-date\">{{ formatDate(result.createdAt) }}</span>\n </div>\n </button>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Footer with keyboard hints -->\n <div class=\"search-footer\">\n <div class=\"keyboard-hints\">\n <span class=\"hint\"><kbd>\u2191</kbd><kbd>\u2193</kbd> Navigate</span>\n <span class=\"hint\"><kbd>\u21B5</kbd> Select</span>\n <span class=\"hint\"><kbd>Esc</kbd> Close</span>\n </div>\n </div>\n </div>\n</div>\n}\n", styles: [".search-panel-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: flex-start;\n justify-content: center;\n z-index: 10000;\n padding-top: 10vh;\n backdrop-filter: blur(2px);\n}\n\n.search-panel {\n background: #ffffff;\n border-radius: 8px;\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);\n width: 90%;\n max-width: 800px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: slideDown 0.2s ease-out;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Header */\n.search-header {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 16px;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.search-input-wrapper {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 8px;\n background: #f5f5f5;\n border-radius: 6px;\n padding: 8px 12px;\n}\n\n.search-icon {\n color: #666;\n font-size: 16px;\n}\n\n.search-input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 16px;\n outline: none;\n color: #333;\n}\n\n.search-input::placeholder {\n color: #999;\n}\n\n.clear-button {\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.clear-button:hover {\n background: #e0e0e0;\n color: #333;\n}\n\n.close-button {\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.close-button:hover {\n background: #f5f5f5;\n color: #333;\n}\n\n/* Filters */\n.search-filters {\n padding: 12px 16px;\n border-bottom: 1px solid #e0e0e0;\n display: flex;\n align-items: center;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.filter-buttons {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.filter-button {\n border: 1px solid #ddd;\n background: #ffffff;\n color: #666;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n}\n\n.filter-button:hover {\n background: #f5f5f5;\n border-color: #ccc;\n}\n\n.filter-button.active {\n background: #007bff;\n color: #ffffff;\n border-color: #007bff;\n}\n\n.date-filter {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.clear-date-button {\n border: none;\n background: transparent;\n color: #666;\n cursor: pointer;\n padding: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: color 0.2s;\n}\n\n.clear-date-button:hover {\n color: #333;\n}\n\n/* Results */\n.search-results {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.search-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n gap: 16px;\n color: #666;\n}\n\n.results-summary {\n padding: 8px 0 16px;\n color: #666;\n font-size: 14px;\n font-weight: 500;\n}\n\n.results-group {\n margin-bottom: 24px;\n}\n\n.results-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin: 0 0 12px;\n padding-bottom: 8px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.results-group-title i {\n color: #007bff;\n}\n\n.results-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.result-item {\n display: flex;\n gap: 12px;\n padding: 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n background: #ffffff;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s;\n width: 100%;\n}\n\n.result-item:hover {\n background: #f8f9fa;\n border-color: #007bff;\n transform: translateX(2px);\n}\n\n.result-item.selected {\n background: #e7f3ff;\n border-color: #007bff;\n}\n\n.result-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #f5f5f5;\n border-radius: 6px;\n color: #007bff;\n flex-shrink: 0;\n}\n\n.result-content {\n flex: 1;\n min-width: 0;\n}\n\n.result-title {\n font-weight: 600;\n color: #333;\n margin-bottom: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.result-preview {\n font-size: 13px;\n color: #666;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.result-match {\n font-size: 12px;\n color: #666;\n margin-top: 4px;\n padding: 4px 8px;\n background: #f8f9fa;\n border-radius: 4px;\n font-style: italic;\n}\n\n.result-conversation {\n font-size: 12px;\n color: #007bff;\n margin-bottom: 4px;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.result-type {\n margin-top: 4px;\n}\n\n.type-badge {\n display: inline-block;\n padding: 2px 8px;\n background: #e7f3ff;\n color: #007bff;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.result-meta {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.result-date {\n font-size: 12px;\n color: #999;\n}\n\n/* Highlight */\n.result-item :deep(mark) {\n background: #fff3cd;\n color: #333;\n padding: 2px 0;\n border-radius: 2px;\n font-weight: 600;\n}\n\n/* Empty States */\n.empty-state,\n.no-results {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: #666;\n}\n\n.empty-icon {\n font-size: 48px;\n color: #ccc;\n margin-bottom: 16px;\n}\n\n.empty-state p,\n.no-results p {\n margin: 8px 0;\n font-size: 14px;\n}\n\n.no-results-hint {\n color: #999;\n font-size: 13px;\n}\n\n.search-tips {\n margin-top: 24px;\n text-align: left;\n background: #f8f9fa;\n padding: 16px;\n border-radius: 6px;\n max-width: 400px;\n}\n\n.search-tips h4 {\n margin: 0 0 8px;\n font-size: 13px;\n color: #333;\n}\n\n.search-tips ul {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n}\n\n.search-tips li {\n margin: 4px 0;\n}\n\n/* Recent Searches */\n.recent-searches {\n margin-bottom: 24px;\n}\n\n.recent-searches-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.recent-searches-header h3 {\n font-size: 14px;\n font-weight: 600;\n color: #333;\n margin: 0;\n}\n\n.clear-recent-button {\n border: none;\n background: transparent;\n color: #007bff;\n cursor: pointer;\n font-size: 13px;\n padding: 4px 8px;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.clear-recent-button:hover {\n background: #f5f5f5;\n}\n\n.recent-searches-list {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.recent-search-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n background: #ffffff;\n cursor: pointer;\n text-align: left;\n transition: all 0.2s;\n width: 100%;\n font-size: 14px;\n color: #666;\n}\n\n.recent-search-item:hover {\n background: #f8f9fa;\n border-color: #ccc;\n}\n\n.recent-search-item i {\n color: #999;\n}\n\n/* Footer */\n.search-footer {\n padding: 12px 16px;\n border-top: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.keyboard-hints {\n display: flex;\n gap: 16px;\n justify-content: center;\n font-size: 12px;\n color: #666;\n}\n\n.hint {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\nkbd {\n display: inline-block;\n padding: 3px 6px;\n background: #ffffff;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-family: 'Courier New', monospace;\n font-size: 11px;\n color: #333;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n\n/* Responsive */\n@media (max-width: 768px) {\n .search-panel {\n width: 95%;\n max-height: 90vh;\n }\n\n .search-filters {\n flex-direction: column;\n align-items: stretch;\n }\n\n .date-filter {\n margin-left: 0;\n }\n\n .keyboard-hints {\n flex-wrap: wrap;\n }\n}\n"] }]
|
|
696
|
+
}], () => [{ type: i1.SearchService }], { environmentId: [{
|
|
697
|
+
type: Input
|
|
698
|
+
}], currentUser: [{
|
|
699
|
+
type: Input
|
|
700
|
+
}], isOpen: [{
|
|
701
|
+
type: Input
|
|
702
|
+
}], close: [{
|
|
703
|
+
type: Output
|
|
704
|
+
}], resultSelected: [{
|
|
705
|
+
type: Output
|
|
706
|
+
}], searchInput: [{
|
|
707
|
+
type: ViewChild,
|
|
708
|
+
args: ['searchInput']
|
|
709
|
+
}], handleKeyboard: [{
|
|
710
|
+
type: HostListener,
|
|
711
|
+
args: ['keydown', ['$event']]
|
|
712
|
+
}] }); })();
|
|
713
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SearchPanelComponent, { className: "SearchPanelComponent", filePath: "src/lib/components/search/search-panel.component.ts", lineNumber: 33 }); })();
|
|
714
|
+
//# sourceMappingURL=search-panel.component.js.map
|