@memberjunction/ng-conversations 2.104.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/README.md +197 -0
  2. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts +20 -0
  3. package/dist/lib/components/active-tasks/active-tasks-panel.component.d.ts.map +1 -0
  4. package/dist/lib/components/active-tasks/active-tasks-panel.component.js +125 -0
  5. package/dist/lib/components/active-tasks/active-tasks-panel.component.js.map +1 -0
  6. package/dist/lib/components/agent/active-agent-indicator.component.d.ts +48 -0
  7. package/dist/lib/components/agent/active-agent-indicator.component.d.ts.map +1 -0
  8. package/dist/lib/components/agent/active-agent-indicator.component.js +199 -0
  9. package/dist/lib/components/agent/active-agent-indicator.component.js.map +1 -0
  10. package/dist/lib/components/agent/agent-process-panel.component.d.ts +30 -0
  11. package/dist/lib/components/agent/agent-process-panel.component.d.ts.map +1 -0
  12. package/dist/lib/components/agent/agent-process-panel.component.js +333 -0
  13. package/dist/lib/components/agent/agent-process-panel.component.js.map +1 -0
  14. package/dist/lib/components/artifact/artifact-panel.component.d.ts +22 -0
  15. package/dist/lib/components/artifact/artifact-panel.component.d.ts.map +1 -0
  16. package/dist/lib/components/artifact/artifact-panel.component.js +237 -0
  17. package/dist/lib/components/artifact/artifact-panel.component.js.map +1 -0
  18. package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts +39 -0
  19. package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts.map +1 -0
  20. package/dist/lib/components/artifact/artifact-upload-modal.component.js +384 -0
  21. package/dist/lib/components/artifact/artifact-upload-modal.component.js.map +1 -0
  22. package/dist/lib/components/artifact/artifact-version-history.component.d.ts +28 -0
  23. package/dist/lib/components/artifact/artifact-version-history.component.d.ts.map +1 -0
  24. package/dist/lib/components/artifact/artifact-version-history.component.js +280 -0
  25. package/dist/lib/components/artifact/artifact-version-history.component.js.map +1 -0
  26. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts +22 -0
  27. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts.map +1 -0
  28. package/dist/lib/components/artifact/artifact-viewer-panel.component.js +182 -0
  29. package/dist/lib/components/artifact/artifact-viewer-panel.component.js.map +1 -0
  30. package/dist/lib/components/artifact/artifact-viewer.component.d.ts +27 -0
  31. package/dist/lib/components/artifact/artifact-viewer.component.d.ts.map +1 -0
  32. package/dist/lib/components/artifact/artifact-viewer.component.js +266 -0
  33. package/dist/lib/components/artifact/artifact-viewer.component.js.map +1 -0
  34. package/dist/lib/components/artifact/inline-artifact.component.d.ts +46 -0
  35. package/dist/lib/components/artifact/inline-artifact.component.d.ts.map +1 -0
  36. package/dist/lib/components/artifact/inline-artifact.component.js +447 -0
  37. package/dist/lib/components/artifact/inline-artifact.component.js.map +1 -0
  38. package/dist/lib/components/collection/collection-artifact-card.component.d.ts +18 -0
  39. package/dist/lib/components/collection/collection-artifact-card.component.d.ts.map +1 -0
  40. package/dist/lib/components/collection/collection-artifact-card.component.js +147 -0
  41. package/dist/lib/components/collection/collection-artifact-card.component.js.map +1 -0
  42. package/dist/lib/components/collection/collection-form-modal.component.d.ts +33 -0
  43. package/dist/lib/components/collection/collection-form-modal.component.d.ts.map +1 -0
  44. package/dist/lib/components/collection/collection-form-modal.component.js +245 -0
  45. package/dist/lib/components/collection/collection-form-modal.component.js.map +1 -0
  46. package/dist/lib/components/collection/collection-tree.component.d.ts +42 -0
  47. package/dist/lib/components/collection/collection-tree.component.d.ts.map +1 -0
  48. package/dist/lib/components/collection/collection-tree.component.js +482 -0
  49. package/dist/lib/components/collection/collection-tree.component.js.map +1 -0
  50. package/dist/lib/components/collection/collection-view.component.d.ts +31 -0
  51. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -0
  52. package/dist/lib/components/collection/collection-view.component.js +254 -0
  53. package/dist/lib/components/collection/collection-view.component.js.map +1 -0
  54. package/dist/lib/components/collection/collections-full-view.component.d.ts +55 -0
  55. package/dist/lib/components/collection/collections-full-view.component.d.ts.map +1 -0
  56. package/dist/lib/components/collection/collections-full-view.component.js +578 -0
  57. package/dist/lib/components/collection/collections-full-view.component.js.map +1 -0
  58. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +160 -0
  59. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -0
  60. package/dist/lib/components/conversation/conversation-chat-area.component.js +891 -0
  61. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -0
  62. package/dist/lib/components/conversation/conversation-list.component.d.ts +29 -0
  63. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -0
  64. package/dist/lib/components/conversation/conversation-list.component.js +255 -0
  65. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -0
  66. package/dist/lib/components/dialogs/input-dialog.component.d.ts +17 -0
  67. package/dist/lib/components/dialogs/input-dialog.component.d.ts.map +1 -0
  68. package/dist/lib/components/dialogs/input-dialog.component.js +122 -0
  69. package/dist/lib/components/dialogs/input-dialog.component.js.map +1 -0
  70. package/dist/lib/components/export/export-modal.component.d.ts +37 -0
  71. package/dist/lib/components/export/export-modal.component.d.ts.map +1 -0
  72. package/dist/lib/components/export/export-modal.component.js +414 -0
  73. package/dist/lib/components/export/export-modal.component.js.map +1 -0
  74. package/dist/lib/components/library/library-full-view.component.d.ts +36 -0
  75. package/dist/lib/components/library/library-full-view.component.d.ts.map +1 -0
  76. package/dist/lib/components/library/library-full-view.component.js +270 -0
  77. package/dist/lib/components/library/library-full-view.component.js.map +1 -0
  78. package/dist/lib/components/members/members-modal.component.d.ts +42 -0
  79. package/dist/lib/components/members/members-modal.component.d.ts.map +1 -0
  80. package/dist/lib/components/members/members-modal.component.js +352 -0
  81. package/dist/lib/components/members/members-modal.component.js.map +1 -0
  82. package/dist/lib/components/mention/mention-dropdown.component.d.ts +44 -0
  83. package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +1 -0
  84. package/dist/lib/components/mention/mention-dropdown.component.js +194 -0
  85. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -0
  86. package/dist/lib/components/message/message-input.component.d.ts +137 -0
  87. package/dist/lib/components/message/message-input.component.d.ts.map +1 -0
  88. package/dist/lib/components/message/message-input.component.js +1159 -0
  89. package/dist/lib/components/message/message-input.component.js.map +1 -0
  90. package/dist/lib/components/message/message-item.component.d.ts +140 -0
  91. package/dist/lib/components/message/message-item.component.d.ts.map +1 -0
  92. package/dist/lib/components/message/message-item.component.js +817 -0
  93. package/dist/lib/components/message/message-item.component.js.map +1 -0
  94. package/dist/lib/components/message/message-list.component.d.ts +77 -0
  95. package/dist/lib/components/message/message-list.component.d.ts.map +1 -0
  96. package/dist/lib/components/message/message-list.component.js +316 -0
  97. package/dist/lib/components/message/message-list.component.js.map +1 -0
  98. package/dist/lib/components/navigation/conversation-navigation.component.d.ts +13 -0
  99. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -0
  100. package/dist/lib/components/navigation/conversation-navigation.component.js +88 -0
  101. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -0
  102. package/dist/lib/components/notification/activity-indicator.component.d.ts +11 -0
  103. package/dist/lib/components/notification/activity-indicator.component.d.ts.map +1 -0
  104. package/dist/lib/components/notification/activity-indicator.component.js +56 -0
  105. package/dist/lib/components/notification/activity-indicator.component.js.map +1 -0
  106. package/dist/lib/components/notification/notification-badge.component.d.ts +27 -0
  107. package/dist/lib/components/notification/notification-badge.component.d.ts.map +1 -0
  108. package/dist/lib/components/notification/notification-badge.component.js +160 -0
  109. package/dist/lib/components/notification/notification-badge.component.js.map +1 -0
  110. package/dist/lib/components/project/project-form-modal.component.d.ts +34 -0
  111. package/dist/lib/components/project/project-form-modal.component.d.ts.map +1 -0
  112. package/dist/lib/components/project/project-form-modal.component.js +357 -0
  113. package/dist/lib/components/project/project-form-modal.component.js.map +1 -0
  114. package/dist/lib/components/project/project-selector.component.d.ts +36 -0
  115. package/dist/lib/components/project/project-selector.component.d.ts.map +1 -0
  116. package/dist/lib/components/project/project-selector.component.js +317 -0
  117. package/dist/lib/components/project/project-selector.component.js.map +1 -0
  118. package/dist/lib/components/search/search-panel.component.d.ts +120 -0
  119. package/dist/lib/components/search/search-panel.component.d.ts.map +1 -0
  120. package/dist/lib/components/search/search-panel.component.js +714 -0
  121. package/dist/lib/components/search/search-panel.component.js.map +1 -0
  122. package/dist/lib/components/share/share-modal.component.d.ts +46 -0
  123. package/dist/lib/components/share/share-modal.component.d.ts.map +1 -0
  124. package/dist/lib/components/share/share-modal.component.js +431 -0
  125. package/dist/lib/components/share/share-modal.component.js.map +1 -0
  126. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts +18 -0
  127. package/dist/lib/components/sidebar/conversation-sidebar.component.d.ts.map +1 -0
  128. package/dist/lib/components/sidebar/conversation-sidebar.component.js +81 -0
  129. package/dist/lib/components/sidebar/conversation-sidebar.component.js.map +1 -0
  130. package/dist/lib/components/task/task-form-modal.component.d.ts +42 -0
  131. package/dist/lib/components/task/task-form-modal.component.d.ts.map +1 -0
  132. package/dist/lib/components/task/task-form-modal.component.js +329 -0
  133. package/dist/lib/components/task/task-form-modal.component.js.map +1 -0
  134. package/dist/lib/components/task/task-item.component.d.ts +22 -0
  135. package/dist/lib/components/task/task-item.component.d.ts.map +1 -0
  136. package/dist/lib/components/task/task-item.component.js +234 -0
  137. package/dist/lib/components/task/task-item.component.js.map +1 -0
  138. package/dist/lib/components/task/task-list.component.d.ts +32 -0
  139. package/dist/lib/components/task/task-list.component.d.ts.map +1 -0
  140. package/dist/lib/components/task/task-list.component.js +290 -0
  141. package/dist/lib/components/task/task-list.component.js.map +1 -0
  142. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +27 -0
  143. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -0
  144. package/dist/lib/components/tasks/tasks-dropdown.component.js +254 -0
  145. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -0
  146. package/dist/lib/components/thread/thread-panel.component.d.ts +65 -0
  147. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -0
  148. package/dist/lib/components/thread/thread-panel.component.js +325 -0
  149. package/dist/lib/components/thread/thread-panel.component.js.map +1 -0
  150. package/dist/lib/components/toast/toast.component.d.ts +26 -0
  151. package/dist/lib/components/toast/toast.component.d.ts.map +1 -0
  152. package/dist/lib/components/toast/toast.component.js +108 -0
  153. package/dist/lib/components/toast/toast.component.js.map +1 -0
  154. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +75 -0
  155. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -0
  156. package/dist/lib/components/workspace/conversation-workspace.component.js +299 -0
  157. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -0
  158. package/dist/lib/conversations.module.d.ts +62 -0
  159. package/dist/lib/conversations.module.d.ts.map +1 -0
  160. package/dist/lib/conversations.module.js +248 -0
  161. package/dist/lib/conversations.module.js.map +1 -0
  162. package/dist/lib/directives/search-shortcut.directive.d.ts +17 -0
  163. package/dist/lib/directives/search-shortcut.directive.d.ts.map +1 -0
  164. package/dist/lib/directives/search-shortcut.directive.js +39 -0
  165. package/dist/lib/directives/search-shortcut.directive.js.map +1 -0
  166. package/dist/lib/models/conversation-state.model.d.ts +72 -0
  167. package/dist/lib/models/conversation-state.model.d.ts.map +1 -0
  168. package/dist/lib/models/conversation-state.model.js +2 -0
  169. package/dist/lib/models/conversation-state.model.js.map +1 -0
  170. package/dist/lib/models/notification.model.d.ts +89 -0
  171. package/dist/lib/models/notification.model.d.ts.map +1 -0
  172. package/dist/lib/models/notification.model.js +11 -0
  173. package/dist/lib/models/notification.model.js.map +1 -0
  174. package/dist/lib/services/active-tasks.service.d.ts +65 -0
  175. package/dist/lib/services/active-tasks.service.d.ts.map +1 -0
  176. package/dist/lib/services/active-tasks.service.js +95 -0
  177. package/dist/lib/services/active-tasks.service.js.map +1 -0
  178. package/dist/lib/services/agent-state.service.d.ts +78 -0
  179. package/dist/lib/services/agent-state.service.d.ts.map +1 -0
  180. package/dist/lib/services/agent-state.service.js +213 -0
  181. package/dist/lib/services/agent-state.service.js.map +1 -0
  182. package/dist/lib/services/artifact-state.service.d.ts +114 -0
  183. package/dist/lib/services/artifact-state.service.d.ts.map +1 -0
  184. package/dist/lib/services/artifact-state.service.js +288 -0
  185. package/dist/lib/services/artifact-state.service.js.map +1 -0
  186. package/dist/lib/services/conversation-agent.service.d.ts +79 -0
  187. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -0
  188. package/dist/lib/services/conversation-agent.service.js +259 -0
  189. package/dist/lib/services/conversation-agent.service.js.map +1 -0
  190. package/dist/lib/services/conversation-state.service.d.ts +122 -0
  191. package/dist/lib/services/conversation-state.service.d.ts.map +1 -0
  192. package/dist/lib/services/conversation-state.service.js +255 -0
  193. package/dist/lib/services/conversation-state.service.js.map +1 -0
  194. package/dist/lib/services/dialog.service.d.ts +54 -0
  195. package/dist/lib/services/dialog.service.d.ts.map +1 -0
  196. package/dist/lib/services/dialog.service.js +157 -0
  197. package/dist/lib/services/dialog.service.js.map +1 -0
  198. package/dist/lib/services/export.service.d.ts +25 -0
  199. package/dist/lib/services/export.service.d.ts.map +1 -0
  200. package/dist/lib/services/export.service.js +237 -0
  201. package/dist/lib/services/export.service.js.map +1 -0
  202. package/dist/lib/services/mention-autocomplete.service.d.ts +59 -0
  203. package/dist/lib/services/mention-autocomplete.service.d.ts.map +1 -0
  204. package/dist/lib/services/mention-autocomplete.service.js +160 -0
  205. package/dist/lib/services/mention-autocomplete.service.js.map +1 -0
  206. package/dist/lib/services/mention-parser.service.d.ts +46 -0
  207. package/dist/lib/services/mention-parser.service.d.ts.map +1 -0
  208. package/dist/lib/services/mention-parser.service.js +156 -0
  209. package/dist/lib/services/mention-parser.service.js.map +1 -0
  210. package/dist/lib/services/notification.service.d.ts +108 -0
  211. package/dist/lib/services/notification.service.d.ts.map +1 -0
  212. package/dist/lib/services/notification.service.js +431 -0
  213. package/dist/lib/services/notification.service.js.map +1 -0
  214. package/dist/lib/services/search.service.d.ts +144 -0
  215. package/dist/lib/services/search.service.d.ts.map +1 -0
  216. package/dist/lib/services/search.service.js +370 -0
  217. package/dist/lib/services/search.service.js.map +1 -0
  218. package/dist/lib/services/toast.service.d.ts +46 -0
  219. package/dist/lib/services/toast.service.d.ts.map +1 -0
  220. package/dist/lib/services/toast.service.js +76 -0
  221. package/dist/lib/services/toast.service.js.map +1 -0
  222. package/dist/public-api.d.ts +42 -0
  223. package/dist/public-api.d.ts.map +1 -0
  224. package/dist/public-api.js +49 -0
  225. package/dist/public-api.js.map +1 -0
  226. package/package.json +54 -0
@@ -0,0 +1,317 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { RunView, Metadata } from '@memberjunction/core';
3
+ import { ProjectFormModalComponent } from './project-form-modal.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../services/dialog.service";
6
+ import * as i2 from "@progress/kendo-angular-dialog";
7
+ import * as i3 from "@progress/kendo-angular-buttons";
8
+ import * as i4 from "@progress/kendo-angular-dropdowns";
9
+ function ProjectSelectorComponent_ng_template_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
10
+ i0.ɵɵelementStart(0, "span", 9);
11
+ i0.ɵɵtext(1);
12
+ i0.ɵɵelementEnd();
13
+ } if (rf & 2) {
14
+ const dataItem_r1 = i0.ɵɵnextContext().$implicit;
15
+ i0.ɵɵadvance();
16
+ i0.ɵɵtextInterpolate1("", dataItem_r1.conversationCount, " conversations");
17
+ } }
18
+ function ProjectSelectorComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "div", 6);
20
+ i0.ɵɵelement(1, "i");
21
+ i0.ɵɵelementStart(2, "div", 7)(3, "span", 8);
22
+ i0.ɵɵtext(4);
23
+ i0.ɵɵelementEnd();
24
+ i0.ɵɵtemplate(5, ProjectSelectorComponent_ng_template_2_Conditional_5_Template, 2, 1, "span", 9);
25
+ i0.ɵɵelementEnd()();
26
+ } if (rf & 2) {
27
+ const dataItem_r1 = ctx.$implicit;
28
+ const ctx_r1 = i0.ɵɵnextContext();
29
+ i0.ɵɵadvance();
30
+ i0.ɵɵclassMapInterpolate1("fa-solid ", dataItem_r1.Icon || "fa-folder", "");
31
+ i0.ɵɵstyleProp("color", dataItem_r1.Color || "#0076B6");
32
+ i0.ɵɵadvance(3);
33
+ i0.ɵɵtextInterpolate(dataItem_r1.Name);
34
+ i0.ɵɵadvance();
35
+ i0.ɵɵconditional(ctx_r1.showStats && dataItem_r1.conversationCount != null ? 5 : -1);
36
+ } }
37
+ function ProjectSelectorComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelementStart(0, "div", 6);
39
+ i0.ɵɵelement(1, "i");
40
+ i0.ɵɵelementStart(2, "span");
41
+ i0.ɵɵtext(3);
42
+ i0.ɵɵelementEnd()();
43
+ } if (rf & 2) {
44
+ const dataItem_r3 = ctx.$implicit;
45
+ i0.ɵɵadvance();
46
+ i0.ɵɵclassMapInterpolate1("fa-solid ", dataItem_r3.Icon || "fa-folder", "");
47
+ i0.ɵɵstyleProp("color", dataItem_r3.Color || "#0076B6");
48
+ i0.ɵɵadvance(2);
49
+ i0.ɵɵtextInterpolate(dataItem_r3.Name);
50
+ } }
51
+ function ProjectSelectorComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
52
+ const _r4 = i0.ɵɵgetCurrentView();
53
+ i0.ɵɵelementStart(0, "button", 10);
54
+ i0.ɵɵlistener("click", function ProjectSelectorComponent_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEditProject()); });
55
+ i0.ɵɵelementEnd();
56
+ i0.ɵɵelementStart(1, "button", 11);
57
+ i0.ɵɵlistener("click", function ProjectSelectorComponent_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onDeleteProject()); });
58
+ i0.ɵɵelementEnd();
59
+ } if (rf & 2) {
60
+ const ctx_r1 = i0.ɵɵnextContext();
61
+ i0.ɵɵproperty("icon", "edit")("disabled", ctx_r1.disabled);
62
+ i0.ɵɵadvance();
63
+ i0.ɵɵproperty("icon", "trash")("disabled", ctx_r1.disabled);
64
+ } }
65
+ export class ProjectSelectorComponent {
66
+ dialogService;
67
+ kendoDialogService;
68
+ viewContainerRef;
69
+ environmentId;
70
+ currentUser;
71
+ selectedProjectId = null;
72
+ disabled = false;
73
+ showStats = true;
74
+ projectSelected = new EventEmitter();
75
+ projectCreated = new EventEmitter();
76
+ projectUpdated = new EventEmitter();
77
+ projectDeleted = new EventEmitter();
78
+ projectsWithStats = [];
79
+ selectedProject = null;
80
+ constructor(dialogService, kendoDialogService, viewContainerRef) {
81
+ this.dialogService = dialogService;
82
+ this.kendoDialogService = kendoDialogService;
83
+ this.viewContainerRef = viewContainerRef;
84
+ }
85
+ ngOnInit() {
86
+ this.loadProjects();
87
+ }
88
+ async loadProjects() {
89
+ try {
90
+ const rv = new RunView();
91
+ // Load projects and conversation counts in parallel
92
+ const [projectsResult, conversationsResult] = await rv.RunViews([
93
+ {
94
+ EntityName: 'MJ: Projects',
95
+ ExtraFilter: `EnvironmentID='${this.environmentId}' AND IsArchived=0`,
96
+ OrderBy: 'Name ASC',
97
+ ResultType: 'entity_object'
98
+ },
99
+ {
100
+ EntityName: 'Conversations',
101
+ ExtraFilter: `EnvironmentID='${this.environmentId}'`,
102
+ ResultType: 'entity_object'
103
+ }
104
+ ], this.currentUser);
105
+ if (projectsResult.Success && conversationsResult.Success) {
106
+ const projects = projectsResult.Results || [];
107
+ const conversations = conversationsResult.Results || [];
108
+ // Calculate conversation counts per project
109
+ const conversationCounts = this.calculateConversationCounts(conversations);
110
+ // Merge projects with stats
111
+ this.projectsWithStats = projects.map(p => {
112
+ const projectWithStats = p;
113
+ projectWithStats.conversationCount = conversationCounts.get(p.ID) || 0;
114
+ return projectWithStats;
115
+ });
116
+ if (this.selectedProjectId) {
117
+ this.selectedProject = this.projectsWithStats.find(p => p.ID === this.selectedProjectId) || null;
118
+ }
119
+ }
120
+ }
121
+ catch (error) {
122
+ console.error('Error loading projects:', error);
123
+ }
124
+ }
125
+ calculateConversationCounts(conversations) {
126
+ const counts = new Map();
127
+ for (const conv of conversations) {
128
+ if (conv.ProjectID) {
129
+ counts.set(conv.ProjectID, (counts.get(conv.ProjectID) || 0) + 1);
130
+ }
131
+ }
132
+ return counts;
133
+ }
134
+ onProjectChange(project) {
135
+ this.selectedProject = project;
136
+ this.projectSelected.emit(project);
137
+ }
138
+ onCreateProject() {
139
+ const dialogRef = this.kendoDialogService.open({
140
+ content: ProjectFormModalComponent,
141
+ width: 600,
142
+ minWidth: 400
143
+ });
144
+ const modalInstance = dialogRef.content.instance;
145
+ modalInstance.dialogRef = dialogRef;
146
+ modalInstance.environmentId = this.environmentId;
147
+ modalInstance.currentUser = this.currentUser;
148
+ modalInstance.projectSaved.subscribe(async (project) => {
149
+ this.projectCreated.emit(project);
150
+ await this.loadProjects();
151
+ this.selectedProject = project;
152
+ this.projectSelected.emit(project);
153
+ });
154
+ }
155
+ onEditProject() {
156
+ if (!this.selectedProject)
157
+ return;
158
+ const dialogRef = this.kendoDialogService.open({
159
+ content: ProjectFormModalComponent,
160
+ width: 600,
161
+ minWidth: 400
162
+ });
163
+ const modalInstance = dialogRef.content.instance;
164
+ modalInstance.dialogRef = dialogRef;
165
+ modalInstance.project = this.selectedProject;
166
+ modalInstance.environmentId = this.environmentId;
167
+ modalInstance.currentUser = this.currentUser;
168
+ modalInstance.projectSaved.subscribe(async (project) => {
169
+ this.projectUpdated.emit(project);
170
+ await this.loadProjects();
171
+ this.selectedProject = project;
172
+ this.projectSelected.emit(project);
173
+ });
174
+ }
175
+ async onDeleteProject() {
176
+ if (!this.selectedProject)
177
+ return;
178
+ const projectName = this.selectedProject.Name;
179
+ const projectId = this.selectedProject.ID;
180
+ const conversationCount = this.selectedProject.conversationCount || 0;
181
+ let message = `Are you sure you want to delete the project "${projectName}"?`;
182
+ if (conversationCount > 0) {
183
+ message += `\n\nThis project has ${conversationCount} conversation(s). The conversations will not be deleted, but will be unassigned from this project.`;
184
+ }
185
+ const confirmed = await this.dialogService.confirm({
186
+ title: 'Delete Project',
187
+ message: message,
188
+ okText: 'Delete',
189
+ cancelText: 'Cancel',
190
+ dangerous: true
191
+ });
192
+ if (!confirmed)
193
+ return;
194
+ try {
195
+ const md = new Metadata();
196
+ const project = await md.GetEntityObject('MJ: Projects', this.currentUser);
197
+ await project.Load(projectId);
198
+ const deleted = await project.Delete();
199
+ if (deleted) {
200
+ this.projectDeleted.emit(projectId);
201
+ await this.loadProjects();
202
+ this.selectedProject = null;
203
+ this.projectSelected.emit(null);
204
+ }
205
+ else {
206
+ throw new Error('Delete operation returned false');
207
+ }
208
+ }
209
+ catch (error) {
210
+ console.error('Error deleting project:', error);
211
+ await this.dialogService.alert('Error', 'Failed to delete project. Please try again.');
212
+ }
213
+ }
214
+ static ɵfac = function ProjectSelectorComponent_Factory(t) { return new (t || ProjectSelectorComponent)(i0.ɵɵdirectiveInject(i1.DialogService), i0.ɵɵdirectiveInject(i2.DialogService), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); };
215
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ProjectSelectorComponent, selectors: [["mj-project-selector"]], inputs: { environmentId: "environmentId", currentUser: "currentUser", selectedProjectId: "selectedProjectId", disabled: "disabled", showStats: "showStats" }, outputs: { projectSelected: "projectSelected", projectCreated: "projectCreated", projectUpdated: "projectUpdated", projectDeleted: "projectDeleted" }, decls: 7, vars: 9, consts: [[1, "project-selector"], [3, "valueChange", "data", "value", "textField", "valueField", "disabled"], ["kendoDropDownListItemTemplate", ""], ["kendoDropDownListValueTemplate", ""], [1, "project-actions"], ["kendoButton", "", "title", "Create New Project", 1, "btn-icon", 3, "click", "icon", "disabled", "themeColor"], [1, "project-item"], [1, "project-info"], [1, "project-name"], [1, "project-stats"], ["kendoButton", "", "title", "Edit Project", 1, "btn-icon", 3, "click", "icon", "disabled"], ["kendoButton", "", "title", "Delete Project", 1, "btn-icon", "btn-danger", 3, "click", "icon", "disabled"]], template: function ProjectSelectorComponent_Template(rf, ctx) { if (rf & 1) {
216
+ i0.ɵɵelementStart(0, "div", 0)(1, "kendo-dropdownlist", 1);
217
+ i0.ɵɵlistener("valueChange", function ProjectSelectorComponent_Template_kendo_dropdownlist_valueChange_1_listener($event) { return ctx.onProjectChange($event); });
218
+ i0.ɵɵtemplate(2, ProjectSelectorComponent_ng_template_2_Template, 6, 7, "ng-template", 2)(3, ProjectSelectorComponent_ng_template_3_Template, 4, 6, "ng-template", 3);
219
+ i0.ɵɵelementEnd();
220
+ i0.ɵɵelementStart(4, "div", 4);
221
+ i0.ɵɵtemplate(5, ProjectSelectorComponent_Conditional_5_Template, 2, 4);
222
+ i0.ɵɵelementStart(6, "button", 5);
223
+ i0.ɵɵlistener("click", function ProjectSelectorComponent_Template_button_click_6_listener() { return ctx.onCreateProject(); });
224
+ i0.ɵɵelementEnd()()();
225
+ } if (rf & 2) {
226
+ i0.ɵɵadvance();
227
+ i0.ɵɵproperty("data", ctx.projectsWithStats)("value", ctx.selectedProject)("textField", "Name")("valueField", "ID")("disabled", ctx.disabled);
228
+ i0.ɵɵadvance(4);
229
+ i0.ɵɵconditional(ctx.selectedProject ? 5 : -1);
230
+ i0.ɵɵadvance();
231
+ i0.ɵɵproperty("icon", "plus")("disabled", ctx.disabled)("themeColor", "primary");
232
+ } }, dependencies: [i3.ButtonComponent, i4.ItemTemplateDirective, i4.ValueTemplateDirective, i4.DropDownListComponent], styles: [".project-selector[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n .project-selector[_ngcontent-%COMP%] kendo-dropdownlist[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 200px;\n }\n .project-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n }\n .project-info[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .project-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: #333;\n }\n .project-stats[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n }\n .project-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n }\n .btn-icon[_ngcontent-%COMP%] {\n min-width: auto;\n padding: 6px 8px;\n }\n .btn-danger[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #F44336;\n border-color: #F44336;\n color: white;\n }"] });
233
+ }
234
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ProjectSelectorComponent, [{
235
+ type: Component,
236
+ args: [{ selector: 'mj-project-selector', template: `
237
+ <div class="project-selector">
238
+ <kendo-dropdownlist
239
+ [data]="projectsWithStats"
240
+ [value]="selectedProject"
241
+ [textField]="'Name'"
242
+ [valueField]="'ID'"
243
+ [disabled]="disabled"
244
+ (valueChange)="onProjectChange($event)">
245
+ <ng-template kendoDropDownListItemTemplate let-dataItem>
246
+ <div class="project-item">
247
+ <i class="fa-solid {{ dataItem.Icon || 'fa-folder' }}"
248
+ [style.color]="dataItem.Color || '#0076B6'"></i>
249
+ <div class="project-info">
250
+ <span class="project-name">{{ dataItem.Name }}</span>
251
+ @if (showStats && dataItem.conversationCount != null) {
252
+ <span class="project-stats">{{ dataItem.conversationCount }} conversations</span>
253
+ }
254
+ </div>
255
+ </div>
256
+ </ng-template>
257
+ <ng-template kendoDropDownListValueTemplate let-dataItem>
258
+ <div class="project-item">
259
+ <i class="fa-solid {{ dataItem.Icon || 'fa-folder' }}"
260
+ [style.color]="dataItem.Color || '#0076B6'"></i>
261
+ <span>{{ dataItem.Name }}</span>
262
+ </div>
263
+ </ng-template>
264
+ </kendo-dropdownlist>
265
+
266
+ <div class="project-actions">
267
+ @if (selectedProject) {
268
+ <button
269
+ kendoButton
270
+ [icon]="'edit'"
271
+ [disabled]="disabled"
272
+ (click)="onEditProject()"
273
+ title="Edit Project"
274
+ class="btn-icon">
275
+ </button>
276
+ <button
277
+ kendoButton
278
+ [icon]="'trash'"
279
+ [disabled]="disabled"
280
+ (click)="onDeleteProject()"
281
+ title="Delete Project"
282
+ class="btn-icon btn-danger">
283
+ </button>
284
+ }
285
+ <button
286
+ kendoButton
287
+ [icon]="'plus'"
288
+ [disabled]="disabled"
289
+ (click)="onCreateProject()"
290
+ title="Create New Project"
291
+ [themeColor]="'primary'"
292
+ class="btn-icon">
293
+ </button>
294
+ </div>
295
+ </div>
296
+ `, styles: ["\n .project-selector {\n display: flex;\n gap: 8px;\n align-items: center;\n }\n .project-selector kendo-dropdownlist {\n flex: 1;\n min-width: 200px;\n }\n .project-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n }\n .project-info {\n display: flex;\n flex-direction: column;\n gap: 2px;\n }\n .project-name {\n font-weight: 500;\n color: #333;\n }\n .project-stats {\n font-size: 12px;\n color: #666;\n }\n .project-actions {\n display: flex;\n gap: 4px;\n }\n .btn-icon {\n min-width: auto;\n padding: 6px 8px;\n }\n .btn-danger:hover:not(:disabled) {\n background-color: #F44336;\n border-color: #F44336;\n color: white;\n }\n "] }]
297
+ }], () => [{ type: i1.DialogService }, { type: i2.DialogService }, { type: i0.ViewContainerRef }], { environmentId: [{
298
+ type: Input
299
+ }], currentUser: [{
300
+ type: Input
301
+ }], selectedProjectId: [{
302
+ type: Input
303
+ }], disabled: [{
304
+ type: Input
305
+ }], showStats: [{
306
+ type: Input
307
+ }], projectSelected: [{
308
+ type: Output
309
+ }], projectCreated: [{
310
+ type: Output
311
+ }], projectUpdated: [{
312
+ type: Output
313
+ }], projectDeleted: [{
314
+ type: Output
315
+ }] }); })();
316
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ProjectSelectorComponent, { className: "ProjectSelectorComponent", filePath: "src/lib/components/project/project-selector.component.ts", lineNumber: 119 }); })();
317
+ //# sourceMappingURL=project-selector.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-selector.component.js","sourceRoot":"","sources":["../../../../src/lib/components/project/project-selector.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ import { OnInit, OnDestroy, EventEmitter, ElementRef } from '@angular/core';
2
+ import { UserInfo } from '@memberjunction/core';
3
+ import { SearchService, SearchResult, SearchFilter, GroupedSearchResults, DateRange } from '../../services/search.service';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Search panel component providing global search UI
7
+ * Can be displayed as a modal or slide-out panel
8
+ * Supports filtering, date ranges, and result navigation
9
+ */
10
+ export declare class SearchPanelComponent implements OnInit, OnDestroy {
11
+ private searchService;
12
+ environmentId: string;
13
+ currentUser: UserInfo;
14
+ isOpen: boolean;
15
+ close: EventEmitter<void>;
16
+ resultSelected: EventEmitter<SearchResult>;
17
+ searchInput?: ElementRef<HTMLInputElement>;
18
+ searchQuery: string;
19
+ activeFilter: SearchFilter;
20
+ dateRange: DateRange;
21
+ isSearching: boolean;
22
+ results: GroupedSearchResults;
23
+ recentSearches: string[];
24
+ selectedIndex: number;
25
+ private destroy$;
26
+ constructor(searchService: SearchService);
27
+ ngOnInit(): void;
28
+ ngOnDestroy(): void;
29
+ /**
30
+ * Subscribe to search service state
31
+ */
32
+ private subscribeToSearchState;
33
+ /**
34
+ * Load recent searches
35
+ */
36
+ private loadRecentSearches;
37
+ /**
38
+ * Handle search input
39
+ */
40
+ onSearchInput(): void;
41
+ /**
42
+ * Perform search
43
+ */
44
+ private performSearch;
45
+ /**
46
+ * Set search filter
47
+ */
48
+ setFilter(filter: SearchFilter): void;
49
+ /**
50
+ * Clear search
51
+ */
52
+ clearSearch(): void;
53
+ /**
54
+ * Select a result
55
+ */
56
+ selectResult(result: SearchResult): void;
57
+ /**
58
+ * Use recent search
59
+ */
60
+ useRecentSearch(query: string): void;
61
+ /**
62
+ * Clear recent searches
63
+ */
64
+ clearRecentSearches(): void;
65
+ /**
66
+ * Close panel
67
+ */
68
+ closePanel(): void;
69
+ /**
70
+ * Focus search input
71
+ */
72
+ private focusSearchInput;
73
+ /**
74
+ * Handle keyboard navigation
75
+ */
76
+ handleKeyboard(event: KeyboardEvent): void;
77
+ /**
78
+ * Get all results as flat array
79
+ */
80
+ private getAllResultsFlat;
81
+ /**
82
+ * Check if result is selected
83
+ */
84
+ isResultSelected(result: SearchResult): boolean;
85
+ /**
86
+ * Get icon for result type
87
+ */
88
+ getResultIcon(type: string): string;
89
+ /**
90
+ * Get filter display text
91
+ */
92
+ getFilterText(filter: SearchFilter): string;
93
+ /**
94
+ * Format date for display
95
+ */
96
+ formatDate(date: Date): string;
97
+ /**
98
+ * Highlight matched text in result
99
+ */
100
+ highlightMatch(text: string, query: string): string;
101
+ /**
102
+ * Escape regex special characters
103
+ */
104
+ private escapeRegex;
105
+ /**
106
+ * Handle date range change
107
+ */
108
+ onDateRangeChange(): void;
109
+ /**
110
+ * Clear date range
111
+ */
112
+ clearDateRange(): void;
113
+ /**
114
+ * Watch for panel open state changes
115
+ */
116
+ ngOnChanges(): void;
117
+ static ɵfac: i0.ɵɵFactoryDeclaration<SearchPanelComponent, never>;
118
+ static ɵcmp: i0.ɵɵComponentDeclaration<SearchPanelComponent, "mj-search-panel", never, { "environmentId": { "alias": "environmentId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "isOpen": { "alias": "isOpen"; "required": false; }; }, { "close": "close"; "resultSelected": "resultSelected"; }, never, never, false, never>;
119
+ }
120
+ //# sourceMappingURL=search-panel.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/search/search-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EACN,SAAS,EAET,YAAY,EAIZ,UAAU,EACX,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,oBAAoB,EACpB,SAAS,EACV,MAAM,+BAA+B,CAAC;;AAEvC;;;;GAIG;AACH,qBAKa,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAyBhD,OAAO,CAAC,aAAa;IAxBxB,aAAa,EAAG,MAAM,CAAC;IACvB,WAAW,EAAG,QAAQ,CAAC;IACvB,MAAM,EAAE,OAAO,CAAS;IAEvB,KAAK,qBAA4B;IACjC,cAAc,6BAAoC;IAElC,WAAW,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAE9D,WAAW,EAAE,MAAM,CAAM;IACzB,YAAY,EAAE,YAAY,CAAS;IACnC,SAAS,EAAE,SAAS,CAA8B;IAClD,WAAW,EAAE,OAAO,CAAS;IAC7B,OAAO,EAAE,oBAAoB,CAKlC;IACK,cAAc,EAAE,MAAM,EAAE,CAAM;IAC9B,aAAa,EAAE,MAAM,CAAM;IAElC,OAAO,CAAC,QAAQ,CAAuB;gBAEnB,aAAa,EAAE,aAAa;IAEhD,QAAQ,IAAI,IAAI;IAKhB,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA2B9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACI,aAAa,IAAI,IAAI;IAQ5B;;OAEG;YACW,aAAa;IAQ3B;;OAEG;IACI,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAO5C;;OAEG;IACI,WAAW,IAAI,IAAI;IAM1B;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI;IAK/C;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK3C;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAKlC;;OAEG;IACI,UAAU,IAAI,IAAI;IAIzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAMxB;;OAEG;IAEI,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAoCjD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACI,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO;IAMtD;;OAEG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAa1C;;OAEG;IACI,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAelD;;OAEG;IACI,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM;IAarC;;OAEG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAO1D;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACI,iBAAiB,IAAI,IAAI;IAOhC;;OAEG;IACI,cAAc,IAAI,IAAI;IAQ7B;;OAEG;IACH,WAAW,IAAI,IAAI;yCAlTR,oBAAoB;2CAApB,oBAAoB;CAuThC"}