@memberjunction/ng-conversations 2.107.0 → 2.108.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 (108) hide show
  1. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts +67 -0
  2. package/dist/lib/components/collection/artifact-collection-picker-modal.component.d.ts.map +1 -0
  3. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js +725 -0
  4. package/dist/lib/components/collection/artifact-collection-picker-modal.component.js.map +1 -0
  5. package/dist/lib/components/collection/artifact-create-modal.component.d.ts +39 -0
  6. package/dist/lib/components/collection/artifact-create-modal.component.d.ts.map +1 -0
  7. package/dist/lib/components/collection/artifact-create-modal.component.js +351 -0
  8. package/dist/lib/components/collection/artifact-create-modal.component.js.map +1 -0
  9. package/dist/lib/components/collection/collection-form-modal.component.d.ts +3 -1
  10. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -1
  11. package/dist/lib/components/collection/collection-form-modal.component.js +60 -10
  12. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -1
  13. package/dist/lib/components/collection/collection-share-modal.component.d.ts +43 -0
  14. package/dist/lib/components/collection/collection-share-modal.component.d.ts.map +1 -0
  15. package/dist/lib/components/collection/collection-share-modal.component.js +728 -0
  16. package/dist/lib/components/collection/collection-share-modal.component.js.map +1 -0
  17. package/dist/lib/components/collection/collection-tree.component.d.ts +8 -1
  18. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -1
  19. package/dist/lib/components/collection/collection-tree.component.js +217 -115
  20. package/dist/lib/components/collection/collection-tree.component.js.map +1 -1
  21. package/dist/lib/components/collection/collection-view.component.d.ts +2 -1
  22. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  23. package/dist/lib/components/collection/collection-view.component.js +52 -34
  24. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  25. package/dist/lib/components/collection/collections-full-view.component.d.ts +45 -9
  26. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -1
  27. package/dist/lib/components/collection/collections-full-view.component.js +586 -220
  28. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -1
  29. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +42 -15
  30. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  31. package/dist/lib/components/conversation/conversation-chat-area.component.js +336 -219
  32. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  33. package/dist/lib/components/message/message-input.component.d.ts +7 -1
  34. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  35. package/dist/lib/components/message/message-input.component.js +65 -10
  36. package/dist/lib/components/message/message-input.component.js.map +1 -1
  37. package/dist/lib/components/message/message-item.component.d.ts +39 -5
  38. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  39. package/dist/lib/components/message/message-item.component.js +259 -137
  40. package/dist/lib/components/message/message-item.component.js.map +1 -1
  41. package/dist/lib/components/message/message-list.component.d.ts +5 -1
  42. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  43. package/dist/lib/components/message/message-list.component.js +26 -12
  44. package/dist/lib/components/message/message-list.component.js.map +1 -1
  45. package/dist/lib/components/message/suggested-responses.component.d.ts +55 -0
  46. package/dist/lib/components/message/suggested-responses.component.d.ts.map +1 -0
  47. package/dist/lib/components/message/suggested-responses.component.js +207 -0
  48. package/dist/lib/components/message/suggested-responses.component.js.map +1 -0
  49. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -1
  50. package/dist/lib/components/search/search-panel.component.js +245 -113
  51. package/dist/lib/components/search/search-panel.component.js.map +1 -1
  52. package/dist/lib/components/shared/user-picker.component.d.ts +29 -0
  53. package/dist/lib/components/shared/user-picker.component.d.ts.map +1 -0
  54. package/dist/lib/components/shared/user-picker.component.js +229 -0
  55. package/dist/lib/components/shared/user-picker.component.js.map +1 -0
  56. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +7 -1
  57. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  58. package/dist/lib/components/tasks/tasks-dropdown.component.js +36 -6
  59. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  60. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +19 -2
  61. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  62. package/dist/lib/components/workspace/conversation-workspace.component.js +167 -58
  63. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  64. package/dist/lib/conversations.module.d.ts +52 -47
  65. package/dist/lib/conversations.module.d.ts.map +1 -1
  66. package/dist/lib/conversations.module.js +27 -4
  67. package/dist/lib/conversations.module.js.map +1 -1
  68. package/dist/lib/models/conversation-complete-query.model.d.ts +75 -0
  69. package/dist/lib/models/conversation-complete-query.model.d.ts.map +1 -0
  70. package/dist/lib/models/conversation-complete-query.model.js +19 -0
  71. package/dist/lib/models/conversation-complete-query.model.js.map +1 -0
  72. package/dist/lib/models/conversation-state.model.d.ts +27 -0
  73. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  74. package/dist/lib/services/agent-state.service.d.ts.map +1 -1
  75. package/dist/lib/services/agent-state.service.js +5 -0
  76. package/dist/lib/services/agent-state.service.js.map +1 -1
  77. package/dist/lib/services/artifact-state.service.d.ts.map +1 -1
  78. package/dist/lib/services/artifact-state.service.js +14 -9
  79. package/dist/lib/services/artifact-state.service.js.map +1 -1
  80. package/dist/lib/services/collection-permission.service.d.ts +96 -0
  81. package/dist/lib/services/collection-permission.service.d.ts.map +1 -0
  82. package/dist/lib/services/collection-permission.service.js +303 -0
  83. package/dist/lib/services/collection-permission.service.js.map +1 -0
  84. package/dist/lib/services/collection-state.service.d.ts +34 -0
  85. package/dist/lib/services/collection-state.service.d.ts.map +1 -0
  86. package/dist/lib/services/collection-state.service.js +50 -0
  87. package/dist/lib/services/collection-state.service.js.map +1 -0
  88. package/dist/lib/services/conversation-agent.service.d.ts +9 -4
  89. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  90. package/dist/lib/services/conversation-agent.service.js +41 -12
  91. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  92. package/dist/lib/services/data-cache.service.d.ts.map +1 -1
  93. package/dist/lib/services/data-cache.service.js +5 -0
  94. package/dist/lib/services/data-cache.service.js.map +1 -1
  95. package/dist/lib/services/mention-autocomplete.service.js +1 -1
  96. package/dist/lib/services/mention-autocomplete.service.js.map +1 -1
  97. package/dist/lib/services/mention-parser.service.d.ts.map +1 -1
  98. package/dist/lib/services/mention-parser.service.js +0 -5
  99. package/dist/lib/services/mention-parser.service.js.map +1 -1
  100. package/dist/lib/services/search.service.d.ts +26 -3
  101. package/dist/lib/services/search.service.d.ts.map +1 -1
  102. package/dist/lib/services/search.service.js +172 -12
  103. package/dist/lib/services/search.service.js.map +1 -1
  104. package/dist/public-api.d.ts +3 -0
  105. package/dist/public-api.d.ts.map +1 -1
  106. package/dist/public-api.js +3 -0
  107. package/dist/public-api.js.map +1 -1
  108. package/package.json +12 -12
@@ -10,30 +10,30 @@ const _c0 = ["searchInput"];
10
10
  const _forTrack0 = ($index, $item) => $item.id;
11
11
  function SearchPanelComponent_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
12
12
  const _r3 = i0.ɵɵgetCurrentView();
13
- i0.ɵɵelementStart(0, "button", 28);
13
+ i0.ɵɵelementStart(0, "button", 30);
14
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
15
  i0.ɵɵelement(1, "i", 10);
16
16
  i0.ɵɵelementEnd();
17
17
  } }
18
- function SearchPanelComponent_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
18
+ function SearchPanelComponent_Conditional_0_Conditional_33_Template(rf, ctx) { if (rf & 1) {
19
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);
20
+ i0.ɵɵelementStart(0, "button", 31);
21
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_33_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", 32);
23
23
  i0.ɵɵelementEnd();
24
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);
25
+ function SearchPanelComponent_Conditional_0_Conditional_35_Template(rf, ctx) { if (rf & 1) {
26
+ i0.ɵɵelementStart(0, "div", 24);
27
+ i0.ɵɵelement(1, "kendo-loader", 33);
28
28
  i0.ɵɵelementStart(2, "span");
29
29
  i0.ɵɵtext(3, "Searching...");
30
30
  i0.ɵɵelementEnd()();
31
31
  } }
32
- function SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_For_8_Template(rf, ctx) { if (rf & 1) {
32
+ function SearchPanelComponent_Conditional_0_Conditional_36_Conditional_0_For_8_Template(rf, ctx) { if (rf & 1) {
33
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);
34
+ i0.ɵɵelementStart(0, "button", 41);
35
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_36_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", 42);
37
37
  i0.ɵɵelementStart(2, "span");
38
38
  i0.ɵɵtext(3);
39
39
  i0.ɵɵelementEnd()();
@@ -42,31 +42,31 @@ function SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_For_8_T
42
42
  i0.ɵɵadvance(3);
43
43
  i0.ɵɵtextInterpolate(search_r7);
44
44
  } }
45
- function SearchPanelComponent_Conditional_0_Conditional_30_Conditional_0_Template(rf, ctx) { if (rf & 1) {
45
+ function SearchPanelComponent_Conditional_0_Conditional_36_Conditional_0_Template(rf, ctx) { if (rf & 1) {
46
46
  const _r5 = i0.ɵɵgetCurrentView();
47
- i0.ɵɵelementStart(0, "div", 32)(1, "div", 35)(2, "h3");
47
+ i0.ɵɵelementStart(0, "div", 34)(1, "div", 37)(2, "h3");
48
48
  i0.ɵɵtext(3, "Recent Searches");
49
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()); });
50
+ i0.ɵɵelementStart(4, "button", 38);
51
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_36_Conditional_0_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.clearRecentSearches()); });
52
52
  i0.ɵɵtext(5, " Clear ");
53
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);
54
+ i0.ɵɵelementStart(6, "div", 39);
55
+ i0.ɵɵrepeaterCreate(7, SearchPanelComponent_Conditional_0_Conditional_36_Conditional_0_For_8_Template, 4, 1, "button", 40, i0.ɵɵrepeaterTrackByIdentity);
56
56
  i0.ɵɵelementEnd()();
57
57
  } if (rf & 2) {
58
58
  const ctx_r1 = i0.ɵɵnextContext(3);
59
59
  i0.ɵɵadvance(7);
60
60
  i0.ɵɵrepeater(ctx_r1.recentSearches);
61
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);
62
+ function SearchPanelComponent_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
63
+ i0.ɵɵtemplate(0, SearchPanelComponent_Conditional_0_Conditional_36_Conditional_0_Template, 9, 0, "div", 34);
64
+ i0.ɵɵelementStart(1, "div", 25);
65
+ i0.ɵɵelement(2, "i", 35);
66
66
  i0.ɵɵelementStart(3, "p");
67
- i0.ɵɵtext(4, "Search across all your conversations, messages, and artifacts");
67
+ i0.ɵɵtext(4, "Search across all your conversations, messages, artifacts, collections, and tasks");
68
68
  i0.ɵɵelementEnd();
69
- i0.ɵɵelementStart(5, "div", 34)(6, "h4");
69
+ i0.ɵɵelementStart(5, "div", 36)(6, "h4");
70
70
  i0.ɵɵtext(7, "Tips:");
71
71
  i0.ɵɵelementEnd();
72
72
  i0.ɵɵelementStart(8, "ul")(9, "li");
@@ -82,13 +82,13 @@ function SearchPanelComponent_Conditional_0_Conditional_30_Template(rf, ctx) { i
82
82
  const ctx_r1 = i0.ɵɵnextContext(2);
83
83
  i0.ɵɵconditional(ctx_r1.recentSearches.length > 0 ? 0 : -1);
84
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);
85
+ function SearchPanelComponent_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
86
+ i0.ɵɵelementStart(0, "div", 26);
87
+ i0.ɵɵelement(1, "i", 43);
88
88
  i0.ɵɵelementStart(2, "p");
89
89
  i0.ɵɵtext(3);
90
90
  i0.ɵɵelementEnd();
91
- i0.ɵɵelementStart(4, "p", 42);
91
+ i0.ɵɵelementStart(4, "p", 44);
92
92
  i0.ɵɵtext(5, "Try adjusting your filters or search terms");
93
93
  i0.ɵɵelementEnd()();
94
94
  } if (rf & 2) {
@@ -96,25 +96,25 @@ function SearchPanelComponent_Conditional_0_Conditional_31_Template(rf, ctx) { i
96
96
  i0.ɵɵadvance(3);
97
97
  i0.ɵɵtextInterpolate1("No results found for \"", ctx_r1.searchQuery, "\"");
98
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);
99
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_2_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
100
+ i0.ɵɵelement(0, "div", 56);
101
101
  } if (rf & 2) {
102
102
  const result_r9 = i0.ɵɵnextContext().$implicit;
103
103
  const ctx_r1 = i0.ɵɵnextContext(4);
104
104
  i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r9.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
105
105
  } }
106
- function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
106
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
107
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);
108
+ i0.ɵɵelementStart(0, "button", 50);
109
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_38_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", 51);
111
+ i0.ɵɵelement(2, "i", 52);
112
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);
113
+ i0.ɵɵelementStart(3, "div", 53);
114
+ i0.ɵɵelement(4, "div", 54)(5, "div", 55);
115
+ i0.ɵɵtemplate(6, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_2_For_6_Conditional_6_Template, 1, 1, "div", 56);
116
116
  i0.ɵɵelementEnd();
117
- i0.ɵɵelementStart(7, "div", 55)(8, "span", 56);
117
+ i0.ɵɵelementStart(7, "div", 57)(8, "span", 58);
118
118
  i0.ɵɵtext(9);
119
119
  i0.ɵɵelementEnd()()();
120
120
  } if (rf & 2) {
@@ -132,13 +132,13 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_For_6_T
132
132
  i0.ɵɵadvance(3);
133
133
  i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r9.createdAt));
134
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);
135
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_2_Template(rf, ctx) { if (rf & 1) {
136
+ i0.ɵɵelementStart(0, "div", 46)(1, "h3", 47);
137
137
  i0.ɵɵelement(2, "i", 14);
138
138
  i0.ɵɵtext(3);
139
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);
140
+ i0.ɵɵelementStart(4, "div", 48);
141
+ i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_2_For_6_Template, 10, 8, "button", 49, _forTrack0);
142
142
  i0.ɵɵelementEnd()();
143
143
  } if (rf & 2) {
144
144
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -147,8 +147,8 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_2_Templat
147
147
  i0.ɵɵadvance(2);
148
148
  i0.ɵɵrepeater(ctx_r1.results.conversations);
149
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);
150
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_For_6_Conditional_4_Template(rf, ctx) { if (rf & 1) {
151
+ i0.ɵɵelementStart(0, "div", 59);
152
152
  i0.ɵɵelement(1, "i", 14);
153
153
  i0.ɵɵtext(2);
154
154
  i0.ɵɵelementEnd();
@@ -157,26 +157,26 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_C
157
157
  i0.ɵɵadvance(2);
158
158
  i0.ɵɵtextInterpolate1(" ", result_r11.conversationName, " ");
159
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);
160
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
161
+ i0.ɵɵelement(0, "div", 56);
162
162
  } if (rf & 2) {
163
163
  const result_r11 = i0.ɵɵnextContext().$implicit;
164
164
  const ctx_r1 = i0.ɵɵnextContext(4);
165
165
  i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r11.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
166
166
  } }
167
- function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_Template(rf, ctx) { if (rf & 1) {
167
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_For_6_Template(rf, ctx) { if (rf & 1) {
168
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);
169
+ i0.ɵɵelementStart(0, "button", 50);
170
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_38_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", 51);
172
+ i0.ɵɵelement(2, "i", 52);
173
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);
174
+ i0.ɵɵelementStart(3, "div", 53);
175
+ i0.ɵɵtemplate(4, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_For_6_Conditional_4_Template, 3, 1, "div", 59);
176
+ i0.ɵɵelement(5, "div", 55);
177
+ i0.ɵɵtemplate(6, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_For_6_Conditional_6_Template, 1, 1, "div", 56);
178
178
  i0.ɵɵelementEnd();
179
- i0.ɵɵelementStart(7, "div", 55)(8, "span", 56);
179
+ i0.ɵɵelementStart(7, "div", 57)(8, "span", 58);
180
180
  i0.ɵɵtext(9);
181
181
  i0.ɵɵelementEnd()()();
182
182
  } if (rf & 2) {
@@ -194,13 +194,13 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_For_6_T
194
194
  i0.ɵɵadvance(3);
195
195
  i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r11.createdAt));
196
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);
197
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_Template(rf, ctx) { if (rf & 1) {
198
+ i0.ɵɵelementStart(0, "div", 46)(1, "h3", 47);
199
199
  i0.ɵɵelement(2, "i", 15);
200
200
  i0.ɵɵtext(3);
201
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);
202
+ i0.ɵɵelementStart(4, "div", 48);
203
+ i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_For_6_Template, 10, 8, "button", 49, _forTrack0);
204
204
  i0.ɵɵelementEnd()();
205
205
  } if (rf & 2) {
206
206
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -209,8 +209,8 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_3_Templat
209
209
  i0.ɵɵadvance(2);
210
210
  i0.ɵɵrepeater(ctx_r1.results.messages);
211
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);
212
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
213
+ i0.ɵɵelementStart(0, "div", 60)(1, "span", 61);
214
214
  i0.ɵɵtext(2);
215
215
  i0.ɵɵelementEnd()();
216
216
  } if (rf & 2) {
@@ -218,8 +218,8 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_C
218
218
  i0.ɵɵadvance(2);
219
219
  i0.ɵɵtextInterpolate(result_r13.artifactType);
220
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);
221
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
222
+ i0.ɵɵelementStart(0, "div", 59);
223
223
  i0.ɵɵelement(1, "i", 14);
224
224
  i0.ɵɵtext(2);
225
225
  i0.ɵɵelementEnd();
@@ -228,27 +228,27 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_C
228
228
  i0.ɵɵadvance(2);
229
229
  i0.ɵɵtextInterpolate1(" ", result_r13.conversationName, " ");
230
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);
231
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Conditional_8_Template(rf, ctx) { if (rf & 1) {
232
+ i0.ɵɵelement(0, "div", 56);
233
233
  } if (rf & 2) {
234
234
  const result_r13 = i0.ɵɵnextContext().$implicit;
235
235
  const ctx_r1 = i0.ɵɵnextContext(4);
236
236
  i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r13.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
237
237
  } }
238
- function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
238
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Template(rf, ctx) { if (rf & 1) {
239
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);
240
+ i0.ɵɵelementStart(0, "button", 50);
241
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_38_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", 51);
243
+ i0.ɵɵelement(2, "i", 52);
244
+ i0.ɵɵelementEnd();
245
+ i0.ɵɵelementStart(3, "div", 53);
246
+ i0.ɵɵelement(4, "div", 54);
247
+ i0.ɵɵtemplate(5, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Conditional_5_Template, 3, 1, "div", 60)(6, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Conditional_6_Template, 3, 1, "div", 59);
248
+ i0.ɵɵelement(7, "div", 55);
249
+ i0.ɵɵtemplate(8, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Conditional_8_Template, 1, 1, "div", 56);
250
+ i0.ɵɵelementEnd();
251
+ i0.ɵɵelementStart(9, "div", 57)(10, "span", 58);
252
252
  i0.ɵɵtext(11);
253
253
  i0.ɵɵelementEnd()()();
254
254
  } if (rf & 2) {
@@ -270,13 +270,13 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_For_6_T
270
270
  i0.ɵɵadvance(3);
271
271
  i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r13.createdAt));
272
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);
273
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_Template(rf, ctx) { if (rf & 1) {
274
+ i0.ɵɵelementStart(0, "div", 46)(1, "h3", 47);
275
275
  i0.ɵɵelement(2, "i", 16);
276
276
  i0.ɵɵtext(3);
277
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);
278
+ i0.ɵɵelementStart(4, "div", 48);
279
+ i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_For_6_Template, 12, 10, "button", 49, _forTrack0);
280
280
  i0.ɵɵelementEnd()();
281
281
  } if (rf & 2) {
282
282
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -285,11 +285,113 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Conditional_4_Templat
285
285
  i0.ɵɵadvance(2);
286
286
  i0.ɵɵrepeater(ctx_r1.results.artifacts);
287
287
  } }
288
- function SearchPanelComponent_Conditional_0_Conditional_32_Template(rf, ctx) { if (rf & 1) {
289
- i0.ɵɵelementStart(0, "div", 43);
288
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_5_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
289
+ i0.ɵɵelement(0, "div", 56);
290
+ } if (rf & 2) {
291
+ const result_r15 = i0.ɵɵnextContext().$implicit;
292
+ const ctx_r1 = i0.ɵɵnextContext(4);
293
+ i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r15.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
294
+ } }
295
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_5_For_6_Template(rf, ctx) { if (rf & 1) {
296
+ const _r14 = i0.ɵɵgetCurrentView();
297
+ i0.ɵɵelementStart(0, "button", 50);
298
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_5_For_6_Template_button_click_0_listener() { const result_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectResult(result_r15)); });
299
+ i0.ɵɵelementStart(1, "div", 51);
300
+ i0.ɵɵelement(2, "i", 52);
301
+ i0.ɵɵelementEnd();
302
+ i0.ɵɵelementStart(3, "div", 53);
303
+ i0.ɵɵelement(4, "div", 54)(5, "div", 55);
304
+ i0.ɵɵtemplate(6, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_5_For_6_Conditional_6_Template, 1, 1, "div", 56);
305
+ i0.ɵɵelementEnd();
306
+ i0.ɵɵelementStart(7, "div", 57)(8, "span", 58);
307
+ i0.ɵɵtext(9);
308
+ i0.ɵɵelementEnd()()();
309
+ } if (rf & 2) {
310
+ const result_r15 = ctx.$implicit;
311
+ const ctx_r1 = i0.ɵɵnextContext(4);
312
+ i0.ɵɵclassProp("selected", ctx_r1.isResultSelected(result_r15));
313
+ i0.ɵɵadvance(2);
314
+ i0.ɵɵclassMap(ctx_r1.getResultIcon(result_r15.type));
315
+ i0.ɵɵadvance(2);
316
+ i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r15.title, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
317
+ i0.ɵɵadvance();
318
+ i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r15.preview, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
319
+ i0.ɵɵadvance();
320
+ i0.ɵɵconditional(result_r15.matchedText ? 6 : -1);
321
+ i0.ɵɵadvance(3);
322
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r15.createdAt));
323
+ } }
324
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_5_Template(rf, ctx) { if (rf & 1) {
325
+ i0.ɵɵelementStart(0, "div", 46)(1, "h3", 47);
326
+ i0.ɵɵelement(2, "i", 17);
327
+ i0.ɵɵtext(3);
328
+ i0.ɵɵelementEnd();
329
+ i0.ɵɵelementStart(4, "div", 48);
330
+ i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_5_For_6_Template, 10, 8, "button", 49, _forTrack0);
331
+ i0.ɵɵelementEnd()();
332
+ } if (rf & 2) {
333
+ const ctx_r1 = i0.ɵɵnextContext(3);
334
+ i0.ɵɵadvance(3);
335
+ i0.ɵɵtextInterpolate1(" Collections (", ctx_r1.results.collections.length, ") ");
336
+ i0.ɵɵadvance(2);
337
+ i0.ɵɵrepeater(ctx_r1.results.collections);
338
+ } }
339
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_6_For_6_Conditional_6_Template(rf, ctx) { if (rf & 1) {
340
+ i0.ɵɵelement(0, "div", 56);
341
+ } if (rf & 2) {
342
+ const result_r17 = i0.ɵɵnextContext().$implicit;
343
+ const ctx_r1 = i0.ɵɵnextContext(4);
344
+ i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r17.matchedText, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
345
+ } }
346
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_6_For_6_Template(rf, ctx) { if (rf & 1) {
347
+ const _r16 = i0.ɵɵgetCurrentView();
348
+ i0.ɵɵelementStart(0, "button", 50);
349
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_6_For_6_Template_button_click_0_listener() { const result_r17 = i0.ɵɵrestoreView(_r16).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectResult(result_r17)); });
350
+ i0.ɵɵelementStart(1, "div", 51);
351
+ i0.ɵɵelement(2, "i", 52);
352
+ i0.ɵɵelementEnd();
353
+ i0.ɵɵelementStart(3, "div", 53);
354
+ i0.ɵɵelement(4, "div", 54)(5, "div", 55);
355
+ i0.ɵɵtemplate(6, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_6_For_6_Conditional_6_Template, 1, 1, "div", 56);
356
+ i0.ɵɵelementEnd();
357
+ i0.ɵɵelementStart(7, "div", 57)(8, "span", 58);
358
+ i0.ɵɵtext(9);
359
+ i0.ɵɵelementEnd()()();
360
+ } if (rf & 2) {
361
+ const result_r17 = ctx.$implicit;
362
+ const ctx_r1 = i0.ɵɵnextContext(4);
363
+ i0.ɵɵclassProp("selected", ctx_r1.isResultSelected(result_r17));
364
+ i0.ɵɵadvance(2);
365
+ i0.ɵɵclassMap(ctx_r1.getResultIcon(result_r17.type));
366
+ i0.ɵɵadvance(2);
367
+ i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r17.title, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
368
+ i0.ɵɵadvance();
369
+ i0.ɵɵproperty("innerHTML", ctx_r1.highlightMatch(result_r17.preview, ctx_r1.searchQuery), i0.ɵɵsanitizeHtml);
370
+ i0.ɵɵadvance();
371
+ i0.ɵɵconditional(result_r17.matchedText ? 6 : -1);
372
+ i0.ɵɵadvance(3);
373
+ i0.ɵɵtextInterpolate(ctx_r1.formatDate(result_r17.createdAt));
374
+ } }
375
+ function SearchPanelComponent_Conditional_0_Conditional_38_Conditional_6_Template(rf, ctx) { if (rf & 1) {
376
+ i0.ɵɵelementStart(0, "div", 46)(1, "h3", 47);
377
+ i0.ɵɵelement(2, "i", 18);
378
+ i0.ɵɵtext(3);
379
+ i0.ɵɵelementEnd();
380
+ i0.ɵɵelementStart(4, "div", 48);
381
+ i0.ɵɵrepeaterCreate(5, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_6_For_6_Template, 10, 8, "button", 49, _forTrack0);
382
+ i0.ɵɵelementEnd()();
383
+ } if (rf & 2) {
384
+ const ctx_r1 = i0.ɵɵnextContext(3);
385
+ i0.ɵɵadvance(3);
386
+ i0.ɵɵtextInterpolate1(" Tasks (", ctx_r1.results.tasks.length, ") ");
387
+ i0.ɵɵadvance(2);
388
+ i0.ɵɵrepeater(ctx_r1.results.tasks);
389
+ } }
390
+ function SearchPanelComponent_Conditional_0_Conditional_38_Template(rf, ctx) { if (rf & 1) {
391
+ i0.ɵɵelementStart(0, "div", 45);
290
392
  i0.ɵɵtext(1);
291
393
  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);
394
+ i0.ɵɵtemplate(2, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_2_Template, 7, 1, "div", 46)(3, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_3_Template, 7, 1, "div", 46)(4, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_4_Template, 7, 1, "div", 46)(5, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_5_Template, 7, 1, "div", 46)(6, SearchPanelComponent_Conditional_0_Conditional_38_Conditional_6_Template, 7, 1, "div", 46);
293
395
  } if (rf & 2) {
294
396
  const ctx_r1 = i0.ɵɵnextContext(2);
295
397
  i0.ɵɵadvance();
@@ -300,6 +402,10 @@ function SearchPanelComponent_Conditional_0_Conditional_32_Template(rf, ctx) { i
300
402
  i0.ɵɵconditional(ctx_r1.results.messages.length > 0 ? 3 : -1);
301
403
  i0.ɵɵadvance();
302
404
  i0.ɵɵconditional(ctx_r1.results.artifacts.length > 0 ? 4 : -1);
405
+ i0.ɵɵadvance();
406
+ i0.ɵɵconditional(ctx_r1.results.collections.length > 0 ? 5 : -1);
407
+ i0.ɵɵadvance();
408
+ i0.ɵɵconditional(ctx_r1.results.tasks.length > 0 ? 6 : -1);
303
409
  } }
304
410
  function SearchPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
305
411
  const _r1 = i0.ɵɵgetCurrentView();
@@ -337,37 +443,47 @@ function SearchPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
337
443
  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
444
  i0.ɵɵelement(21, "i", 16);
339
445
  i0.ɵɵtext(22, " Artifacts ");
446
+ i0.ɵɵelementEnd();
447
+ i0.ɵɵelementStart(23, "button", 13);
448
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_button_click_23_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setFilter("collections")); });
449
+ i0.ɵɵelement(24, "i", 17);
450
+ i0.ɵɵtext(25, " Collections ");
451
+ i0.ɵɵelementEnd();
452
+ i0.ɵɵelementStart(26, "button", 13);
453
+ i0.ɵɵlistener("click", function SearchPanelComponent_Conditional_0_Template_button_click_26_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setFilter("tasks")); });
454
+ i0.ɵɵelement(27, "i", 18);
455
+ i0.ɵɵtext(28, " Tasks ");
340
456
  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()); });
457
+ i0.ɵɵelementStart(29, "div", 19)(30, "kendo-daterange")(31, "kendo-dateinput", 20);
458
+ i0.ɵɵtwoWayListener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_31_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); });
459
+ i0.ɵɵlistener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_31_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDateRangeChange()); });
344
460
  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()); });
461
+ i0.ɵɵelementStart(32, "kendo-dateinput", 21);
462
+ i0.ɵɵtwoWayListener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_32_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); });
463
+ i0.ɵɵlistener("valueChange", function SearchPanelComponent_Conditional_0_Template_kendo_dateinput_valueChange_32_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDateRangeChange()); });
348
464
  i0.ɵɵelementEnd()();
349
- i0.ɵɵtemplate(27, SearchPanelComponent_Conditional_0_Conditional_27_Template, 2, 0, "button", 20);
465
+ i0.ɵɵtemplate(33, SearchPanelComponent_Conditional_0_Conditional_33_Template, 2, 0, "button", 22);
350
466
  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);
467
+ i0.ɵɵelementStart(34, "div", 23);
468
+ i0.ɵɵtemplate(35, SearchPanelComponent_Conditional_0_Conditional_35_Template, 4, 0, "div", 24)(36, SearchPanelComponent_Conditional_0_Conditional_36_Template, 15, 1, "div", 25)(37, SearchPanelComponent_Conditional_0_Conditional_37_Template, 6, 1, "div", 26)(38, SearchPanelComponent_Conditional_0_Conditional_38_Template, 7, 7);
353
469
  i0.ɵɵelementEnd();
354
- i0.ɵɵelementStart(33, "div", 25)(34, "div", 26)(35, "span", 27)(36, "kbd");
355
- i0.ɵɵtext(37, "\u2191");
470
+ i0.ɵɵelementStart(39, "div", 27)(40, "div", 28)(41, "span", 29)(42, "kbd");
471
+ i0.ɵɵtext(43, "\u2191");
356
472
  i0.ɵɵelementEnd();
357
- i0.ɵɵelementStart(38, "kbd");
358
- i0.ɵɵtext(39, "\u2193");
473
+ i0.ɵɵelementStart(44, "kbd");
474
+ i0.ɵɵtext(45, "\u2193");
359
475
  i0.ɵɵelementEnd();
360
- i0.ɵɵtext(40, " Navigate");
476
+ i0.ɵɵtext(46, " Navigate");
361
477
  i0.ɵɵelementEnd();
362
- i0.ɵɵelementStart(41, "span", 27)(42, "kbd");
363
- i0.ɵɵtext(43, "\u21B5");
478
+ i0.ɵɵelementStart(47, "span", 29)(48, "kbd");
479
+ i0.ɵɵtext(49, "\u21B5");
364
480
  i0.ɵɵelementEnd();
365
- i0.ɵɵtext(44, " Select");
481
+ i0.ɵɵtext(50, " Select");
366
482
  i0.ɵɵelementEnd();
367
- i0.ɵɵelementStart(45, "span", 27)(46, "kbd");
368
- i0.ɵɵtext(47, "Esc");
483
+ i0.ɵɵelementStart(51, "span", 29)(52, "kbd");
484
+ i0.ɵɵtext(53, "Esc");
369
485
  i0.ɵɵelementEnd();
370
- i0.ɵɵtext(48, " Close");
486
+ i0.ɵɵtext(54, " Close");
371
487
  i0.ɵɵelementEnd()()()()();
372
488
  } if (rf & 2) {
373
489
  const ctx_r1 = i0.ɵɵnextContext();
@@ -383,14 +499,18 @@ function SearchPanelComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
383
499
  i0.ɵɵclassProp("active", ctx_r1.activeFilter === "messages");
384
500
  i0.ɵɵadvance(3);
385
501
  i0.ɵɵclassProp("active", ctx_r1.activeFilter === "artifacts");
502
+ i0.ɵɵadvance(3);
503
+ i0.ɵɵclassProp("active", ctx_r1.activeFilter === "collections");
504
+ i0.ɵɵadvance(3);
505
+ i0.ɵɵclassProp("active", ctx_r1.activeFilter === "tasks");
386
506
  i0.ɵɵadvance(5);
387
507
  i0.ɵɵtwoWayProperty("value", ctx_r1.dateRange.start);
388
508
  i0.ɵɵadvance();
389
509
  i0.ɵɵtwoWayProperty("value", ctx_r1.dateRange.end);
390
510
  i0.ɵɵadvance();
391
- i0.ɵɵconditional(ctx_r1.dateRange.start || ctx_r1.dateRange.end ? 27 : -1);
511
+ i0.ɵɵconditional(ctx_r1.dateRange.start || ctx_r1.dateRange.end ? 33 : -1);
392
512
  i0.ɵɵadvance(2);
393
- i0.ɵɵconditional(ctx_r1.isSearching ? 29 : !ctx_r1.searchQuery ? 30 : ctx_r1.results.total === 0 ? 31 : 32);
513
+ i0.ɵɵconditional(ctx_r1.isSearching ? 35 : !ctx_r1.searchQuery ? 36 : ctx_r1.results.total === 0 ? 37 : 38);
394
514
  } }
395
515
  /**
396
516
  * Search panel component providing global search UI
@@ -413,6 +533,8 @@ export class SearchPanelComponent {
413
533
  conversations: [],
414
534
  messages: [],
415
535
  artifacts: [],
536
+ collections: [],
537
+ tasks: [],
416
538
  total: 0
417
539
  };
418
540
  recentSearches = [];
@@ -572,7 +694,9 @@ export class SearchPanelComponent {
572
694
  return [
573
695
  ...this.results.conversations,
574
696
  ...this.results.messages,
575
- ...this.results.artifacts
697
+ ...this.results.artifacts,
698
+ ...this.results.collections,
699
+ ...this.results.tasks
576
700
  ];
577
701
  }
578
702
  /**
@@ -594,6 +718,10 @@ export class SearchPanelComponent {
594
718
  return 'fa-comment';
595
719
  case 'artifact':
596
720
  return 'fa-file-alt';
721
+ case 'collection':
722
+ return 'fa-folder';
723
+ case 'task':
724
+ return 'fa-tasks';
597
725
  default:
598
726
  return 'fa-circle';
599
727
  }
@@ -611,6 +739,10 @@ export class SearchPanelComponent {
611
739
  return 'Messages';
612
740
  case 'artifacts':
613
741
  return 'Artifacts';
742
+ case 'collections':
743
+ return 'Collections';
744
+ case 'tasks':
745
+ return 'Tasks';
614
746
  default:
615
747
  return 'All';
616
748
  }
@@ -684,15 +816,15 @@ export class SearchPanelComponent {
684
816
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchInput = _t.first);
685
817
  } }, hostBindings: function SearchPanelComponent_HostBindings(rf, ctx) { if (rf & 1) {
686
818
  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);
819
+ } }, 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, artifacts, collections, and tasks...", "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, "fa-solid", "fa-folder"], [1, "fa-solid", "fa-tasks"], [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) {
820
+ i0.ɵɵtemplate(0, SearchPanelComponent_Conditional_0_Template, 55, 18, "div", 1);
689
821
  } if (rf & 2) {
690
822
  i0.ɵɵconditional(ctx.isOpen ? 0 : -1);
691
823
  } }, 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
824
  }
693
825
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchPanelComponent, [{
694
826
  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"] }]
827
+ 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, artifacts, collections, and tasks...\"\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 <button\n type=\"button\"\n class=\"filter-button\"\n [class.active]=\"activeFilter === 'collections'\"\n (click)=\"setFilter('collections')\"\n >\n <i class=\"fa-solid fa-folder\"></i>\n Collections\n </button>\n <button\n type=\"button\"\n class=\"filter-button\"\n [class.active]=\"activeFilter === 'tasks'\"\n (click)=\"setFilter('tasks')\"\n >\n <i class=\"fa-solid fa-tasks\"></i>\n Tasks\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, artifacts, collections, and tasks</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 <!-- Collections Results -->\n @if (results.collections.length > 0) {\n <div class=\"results-group\">\n <h3 class=\"results-group-title\">\n <i class=\"fa-solid fa-folder\"></i>\n Collections ({{ results.collections.length }})\n </h3>\n <div class=\"results-list\">\n @for (result of results.collections; 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 <!-- Tasks Results -->\n @if (results.tasks.length > 0) {\n <div class=\"results-group\">\n <h3 class=\"results-group-title\">\n <i class=\"fa-solid fa-tasks\"></i>\n Tasks ({{ results.tasks.length }})\n </h3>\n <div class=\"results-list\">\n @for (result of results.tasks; 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 </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
828
  }], () => [{ type: i1.SearchService }], { environmentId: [{
697
829
  type: Input
698
830
  }], currentUser: [{