@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,352 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../services/dialog.service";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/forms";
6
+ import * as i4 from "@progress/kendo-angular-dialog";
7
+ import * as i5 from "@progress/kendo-angular-buttons";
8
+ import * as i6 from "@progress/kendo-angular-inputs";
9
+ import * as i7 from "@progress/kendo-angular-indicators";
10
+ import * as i8 from "@progress/kendo-angular-dropdowns";
11
+ function MembersModalComponent_kendo_dialog_0_div_13_div_1_Template(rf, ctx) { if (rf & 1) {
12
+ i0.ɵɵelementStart(0, "div", 16)(1, "p");
13
+ i0.ɵɵtext(2, "No additional members yet");
14
+ i0.ɵɵelementEnd()();
15
+ } }
16
+ function MembersModalComponent_kendo_dialog_0_div_13_div_2_button_11_Template(rf, ctx) { if (rf & 1) {
17
+ const _r3 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementStart(0, "button", 26);
19
+ i0.ɵɵlistener("click", function MembersModalComponent_kendo_dialog_0_div_13_div_2_button_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const member_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onRemoveMember(member_r4)); });
20
+ i0.ɵɵelement(1, "i", 27);
21
+ i0.ɵɵelementEnd();
22
+ } }
23
+ function MembersModalComponent_kendo_dialog_0_div_13_div_2_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelementStart(0, "div", 17)(1, "div", 18);
25
+ i0.ɵɵelement(2, "i", 19);
26
+ i0.ɵɵelementStart(3, "div", 20)(4, "div", 21);
27
+ i0.ɵɵtext(5);
28
+ i0.ɵɵelementEnd();
29
+ i0.ɵɵelementStart(6, "div", 22);
30
+ i0.ɵɵtext(7);
31
+ i0.ɵɵelementEnd()()();
32
+ i0.ɵɵelementStart(8, "div", 23)(9, "span", 24);
33
+ i0.ɵɵtext(10);
34
+ i0.ɵɵelementEnd();
35
+ i0.ɵɵtemplate(11, MembersModalComponent_kendo_dialog_0_div_13_div_2_button_11_Template, 2, 0, "button", 25);
36
+ i0.ɵɵelementEnd()();
37
+ } if (rf & 2) {
38
+ const member_r4 = ctx.$implicit;
39
+ i0.ɵɵadvance(5);
40
+ i0.ɵɵtextInterpolate(member_r4.userName);
41
+ i0.ɵɵadvance(2);
42
+ i0.ɵɵtextInterpolate(member_r4.userEmail);
43
+ i0.ɵɵadvance(2);
44
+ i0.ɵɵclassProp("owner", member_r4.role === "owner");
45
+ i0.ɵɵadvance();
46
+ i0.ɵɵtextInterpolate1(" ", member_r4.role === "owner" ? "Owner" : "Member", " ");
47
+ i0.ɵɵadvance();
48
+ i0.ɵɵproperty("ngIf", member_r4.role !== "owner");
49
+ } }
50
+ function MembersModalComponent_kendo_dialog_0_div_13_Template(rf, ctx) { if (rf & 1) {
51
+ i0.ɵɵelementStart(0, "div", 13);
52
+ i0.ɵɵtemplate(1, MembersModalComponent_kendo_dialog_0_div_13_div_1_Template, 3, 0, "div", 14)(2, MembersModalComponent_kendo_dialog_0_div_13_div_2_Template, 12, 6, "div", 15);
53
+ i0.ɵɵelementEnd();
54
+ } if (rf & 2) {
55
+ const ctx_r1 = i0.ɵɵnextContext(2);
56
+ i0.ɵɵadvance();
57
+ i0.ɵɵproperty("ngIf", ctx_r1.members.length === 0);
58
+ i0.ɵɵadvance();
59
+ i0.ɵɵproperty("ngForOf", ctx_r1.members);
60
+ } }
61
+ function MembersModalComponent_kendo_dialog_0_div_14_Template(rf, ctx) { if (rf & 1) {
62
+ i0.ɵɵelementStart(0, "div", 28);
63
+ i0.ɵɵelement(1, "kendo-loader", 29);
64
+ i0.ɵɵelementStart(2, "span");
65
+ i0.ɵɵtext(3, "Loading members...");
66
+ i0.ɵɵelementEnd()();
67
+ } }
68
+ function MembersModalComponent_kendo_dialog_0_div_15_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵelementStart(0, "div", 30);
70
+ i0.ɵɵtext(1);
71
+ i0.ɵɵelementEnd();
72
+ } if (rf & 2) {
73
+ const ctx_r1 = i0.ɵɵnextContext(2);
74
+ i0.ɵɵadvance();
75
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.errorMessage, " ");
76
+ } }
77
+ function MembersModalComponent_kendo_dialog_0_Template(rf, ctx) { if (rf & 1) {
78
+ const _r1 = i0.ɵɵgetCurrentView();
79
+ i0.ɵɵelementStart(0, "kendo-dialog", 1);
80
+ i0.ɵɵlistener("close", function MembersModalComponent_kendo_dialog_0_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
81
+ i0.ɵɵelementStart(1, "div", 2)(2, "div", 3)(3, "h4");
82
+ i0.ɵɵtext(4, "Add Member");
83
+ i0.ɵɵelementEnd();
84
+ i0.ɵɵelementStart(5, "div", 4)(6, "kendo-textbox", 5);
85
+ i0.ɵɵtwoWayListener("valueChange", function MembersModalComponent_kendo_dialog_0_Template_kendo_textbox_valueChange_6_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.newMemberEmail, $event) || (ctx_r1.newMemberEmail = $event); return i0.ɵɵresetView($event); });
86
+ i0.ɵɵelementEnd();
87
+ i0.ɵɵelementStart(7, "kendo-dropdownlist", 6);
88
+ i0.ɵɵtwoWayListener("ngModelChange", function MembersModalComponent_kendo_dialog_0_Template_kendo_dropdownlist_ngModelChange_7_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.newMemberRole, $event) || (ctx_r1.newMemberRole = $event); return i0.ɵɵresetView($event); });
89
+ i0.ɵɵelementEnd();
90
+ i0.ɵɵelementStart(8, "button", 7);
91
+ i0.ɵɵlistener("click", function MembersModalComponent_kendo_dialog_0_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onAddMember()); });
92
+ i0.ɵɵtext(9, " Add ");
93
+ i0.ɵɵelementEnd()()();
94
+ i0.ɵɵelementStart(10, "div", 8)(11, "h4");
95
+ i0.ɵɵtext(12);
96
+ i0.ɵɵelementEnd();
97
+ i0.ɵɵtemplate(13, MembersModalComponent_kendo_dialog_0_div_13_Template, 3, 2, "div", 9)(14, MembersModalComponent_kendo_dialog_0_div_14_Template, 4, 0, "div", 10);
98
+ i0.ɵɵelementEnd();
99
+ i0.ɵɵtemplate(15, MembersModalComponent_kendo_dialog_0_div_15_Template, 2, 1, "div", 11);
100
+ i0.ɵɵelementEnd();
101
+ i0.ɵɵelementStart(16, "kendo-dialog-actions")(17, "button", 12);
102
+ i0.ɵɵlistener("click", function MembersModalComponent_kendo_dialog_0_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCancel()); });
103
+ i0.ɵɵtext(18, "Close");
104
+ i0.ɵɵelementEnd()()();
105
+ } if (rf & 2) {
106
+ const ctx_r1 = i0.ɵɵnextContext();
107
+ i0.ɵɵproperty("title", ctx_r1.modalTitle)("width", 600)("height", 500);
108
+ i0.ɵɵadvance(6);
109
+ i0.ɵɵstyleProp("flex", 1);
110
+ i0.ɵɵtwoWayProperty("value", ctx_r1.newMemberEmail);
111
+ i0.ɵɵadvance();
112
+ i0.ɵɵstyleProp("width", 120, "px");
113
+ i0.ɵɵtwoWayProperty("ngModel", ctx_r1.newMemberRole);
114
+ i0.ɵɵproperty("data", ctx_r1.roleOptions)("textField", "label")("valueField", "value");
115
+ i0.ɵɵadvance();
116
+ i0.ɵɵproperty("primary", true)("disabled", ctx_r1.isLoading);
117
+ i0.ɵɵadvance(4);
118
+ i0.ɵɵtextInterpolate1("Current Members (", ctx_r1.members.length, ")");
119
+ i0.ɵɵadvance();
120
+ i0.ɵɵproperty("ngIf", !ctx_r1.isLoading);
121
+ i0.ɵɵadvance();
122
+ i0.ɵɵproperty("ngIf", ctx_r1.isLoading);
123
+ i0.ɵɵadvance();
124
+ i0.ɵɵproperty("ngIf", ctx_r1.errorMessage);
125
+ } }
126
+ export class MembersModalComponent {
127
+ dialogService;
128
+ isVisible = false;
129
+ conversation;
130
+ currentUser;
131
+ cancelled = new EventEmitter();
132
+ membersChanged = new EventEmitter();
133
+ members = [];
134
+ newMemberEmail = '';
135
+ newMemberRole = 'member';
136
+ isLoading = false;
137
+ errorMessage = '';
138
+ get modalTitle() {
139
+ return `Manage Members: ${this.conversation?.Name || 'Conversation'}`;
140
+ }
141
+ roleOptions = [
142
+ { value: 'member', label: 'Member' },
143
+ { value: 'owner', label: 'Owner' }
144
+ ];
145
+ constructor(dialogService) {
146
+ this.dialogService = dialogService;
147
+ }
148
+ ngOnChanges() {
149
+ if (this.isVisible && this.conversation) {
150
+ this.loadMembers();
151
+ }
152
+ }
153
+ async loadMembers() {
154
+ if (!this.conversation)
155
+ return;
156
+ this.isLoading = true;
157
+ this.errorMessage = '';
158
+ try {
159
+ // TODO: Load from ConversationMembers entity when available
160
+ // For now, show the owner
161
+ this.members = [
162
+ {
163
+ id: 'owner-' + this.conversation.ID,
164
+ userId: this.conversation.UserID || '',
165
+ userName: 'Owner',
166
+ userEmail: this.currentUser.Email,
167
+ role: 'owner',
168
+ addedAt: this.conversation.__mj_CreatedAt
169
+ }
170
+ ];
171
+ }
172
+ catch (error) {
173
+ console.error('Error loading members:', error);
174
+ this.errorMessage = 'Failed to load members';
175
+ }
176
+ finally {
177
+ this.isLoading = false;
178
+ }
179
+ }
180
+ async onAddMember() {
181
+ const email = this.newMemberEmail.trim();
182
+ if (!email)
183
+ return;
184
+ // Simple email validation
185
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
186
+ await this.dialogService.alert('Invalid Email', 'Please enter a valid email address');
187
+ return;
188
+ }
189
+ // Check if already a member
190
+ if (this.members.some(m => m.userEmail === email)) {
191
+ await this.dialogService.alert('Already a Member', 'This user is already a member');
192
+ return;
193
+ }
194
+ this.isLoading = true;
195
+ this.errorMessage = '';
196
+ try {
197
+ // TODO: Create ConversationMember entity when available
198
+ const newMember = {
199
+ id: 'temp-' + Date.now(),
200
+ userId: 'unknown',
201
+ userName: email.split('@')[0],
202
+ userEmail: email,
203
+ role: this.newMemberRole,
204
+ addedAt: new Date()
205
+ };
206
+ this.members.push(newMember);
207
+ this.newMemberEmail = '';
208
+ this.newMemberRole = 'member';
209
+ this.membersChanged.emit();
210
+ }
211
+ catch (error) {
212
+ console.error('Error adding member:', error);
213
+ this.errorMessage = 'Failed to add member';
214
+ }
215
+ finally {
216
+ this.isLoading = false;
217
+ }
218
+ }
219
+ async onRemoveMember(member) {
220
+ const confirmed = await this.dialogService.confirm({
221
+ title: 'Remove Member',
222
+ message: `Remove ${member.userEmail} from this conversation?`,
223
+ okText: 'Remove',
224
+ cancelText: 'Cancel'
225
+ });
226
+ if (!confirmed)
227
+ return;
228
+ this.isLoading = true;
229
+ this.errorMessage = '';
230
+ try {
231
+ // TODO: Delete ConversationMember entity when available
232
+ this.members = this.members.filter(m => m.id !== member.id);
233
+ this.membersChanged.emit();
234
+ }
235
+ catch (error) {
236
+ console.error('Error removing member:', error);
237
+ this.errorMessage = 'Failed to remove member';
238
+ }
239
+ finally {
240
+ this.isLoading = false;
241
+ }
242
+ }
243
+ onCancel() {
244
+ this.cancelled.emit();
245
+ this.resetForm();
246
+ }
247
+ resetForm() {
248
+ this.newMemberEmail = '';
249
+ this.newMemberRole = 'member';
250
+ this.errorMessage = '';
251
+ this.isVisible = false;
252
+ }
253
+ static ɵfac = function MembersModalComponent_Factory(t) { return new (t || MembersModalComponent)(i0.ɵɵdirectiveInject(i1.DialogService)); };
254
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MembersModalComponent, selectors: [["mj-members-modal"]], inputs: { isVisible: "isVisible", conversation: "conversation", currentUser: "currentUser" }, outputs: { cancelled: "cancelled", membersChanged: "membersChanged" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "title", "width", "height", "close", 4, "ngIf"], [3, "close", "title", "width", "height"], [1, "members-modal-content"], [1, "add-member-section"], [1, "add-member-form"], ["placeholder", "Enter email address", 3, "valueChange", "value"], [3, "ngModelChange", "ngModel", "data", "textField", "valueField"], ["kendoButton", "", 3, "click", "primary", "disabled"], [1, "members-section"], ["class", "members-list", 4, "ngIf"], ["class", "loading-indicator", 4, "ngIf"], ["class", "error-message", 4, "ngIf"], ["kendoButton", "", 3, "click"], [1, "members-list"], ["class", "empty-state", 4, "ngIf"], ["class", "member-item", 4, "ngFor", "ngForOf"], [1, "empty-state"], [1, "member-item"], [1, "member-info"], [1, "fas", "fa-user-circle"], [1, "member-details"], [1, "member-name"], [1, "member-email"], [1, "member-controls"], [1, "member-role"], ["class", "btn-remove", "title", "Remove member", 3, "click", 4, "ngIf"], ["title", "Remove member", 1, "btn-remove", 3, "click"], [1, "fas", "fa-times"], [1, "loading-indicator"], ["type", "infinite-spinner", "size", "medium"], [1, "error-message"]], template: function MembersModalComponent_Template(rf, ctx) { if (rf & 1) {
255
+ i0.ɵɵtemplate(0, MembersModalComponent_kendo_dialog_0_Template, 19, 18, "kendo-dialog", 0);
256
+ } if (rf & 2) {
257
+ i0.ɵɵproperty("ngIf", ctx.isVisible);
258
+ } }, dependencies: [i2.NgForOf, i2.NgIf, i3.NgControlStatus, i3.NgModel, i4.DialogComponent, i4.DialogActionsComponent, i5.ButtonComponent, i6.TextBoxComponent, i7.LoaderComponent, i8.DropDownListComponent], styles: [".members-modal-content[_ngcontent-%COMP%] {\n padding: 20px;\n }\n\n h4[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n }\n\n .add-member-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n }\n\n .add-member-form[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n }\n\n .members-list[_ngcontent-%COMP%] {\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n max-height: 300px;\n overflow-y: auto;\n }\n\n .member-item[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .member-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n\n .member-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n }\n\n .member-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n color: #999;\n }\n\n .member-details[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n }\n\n .member-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n }\n\n .member-email[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n }\n\n .member-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .member-role[_ngcontent-%COMP%] {\n padding: 4px 8px;\n border-radius: 3px;\n font-size: 12px;\n font-weight: 500;\n background: #e3f2fd;\n color: #1976d2;\n }\n\n .member-role.owner[_ngcontent-%COMP%] {\n background: #fff3e0;\n color: #f57c00;\n }\n\n .btn-remove[_ngcontent-%COMP%] {\n padding: 6px 8px;\n background: transparent;\n border: none;\n cursor: pointer;\n border-radius: 3px;\n color: #999;\n }\n\n .btn-remove[_ngcontent-%COMP%]:hover {\n background: #ffebee;\n color: #d32f2f;\n }\n\n .empty-state[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: #999;\n }\n\n .empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n }\n\n .loading-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 24px;\n color: #666;\n }\n\n .error-message[_ngcontent-%COMP%] {\n display: block;\n color: #d32f2f;\n font-size: 13px;\n margin-top: 12px;\n padding: 8px 12px;\n background: #ffebee;\n border-radius: 4px;\n }\n\n kendo-dialog-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 15px 20px;\n border-top: 1px solid #e0e0e0;\n }"] });
259
+ }
260
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MembersModalComponent, [{
261
+ type: Component,
262
+ args: [{ selector: 'mj-members-modal', template: `
263
+ <kendo-dialog
264
+ *ngIf="isVisible"
265
+ [title]="modalTitle"
266
+ [width]="600"
267
+ [height]="500"
268
+ (close)="onCancel()">
269
+
270
+ <div class="members-modal-content">
271
+ <div class="add-member-section">
272
+ <h4>Add Member</h4>
273
+ <div class="add-member-form">
274
+ <kendo-textbox
275
+ [(value)]="newMemberEmail"
276
+ placeholder="Enter email address"
277
+ [style.flex]="1">
278
+ </kendo-textbox>
279
+ <kendo-dropdownlist
280
+ [(ngModel)]="newMemberRole"
281
+ [data]="roleOptions"
282
+ [textField]="'label'"
283
+ [valueField]="'value'"
284
+ [style.width.px]="120">
285
+ </kendo-dropdownlist>
286
+ <button kendoButton [primary]="true" [disabled]="isLoading" (click)="onAddMember()">
287
+ Add
288
+ </button>
289
+ </div>
290
+ </div>
291
+
292
+ <div class="members-section">
293
+ <h4>Current Members ({{ members.length }})</h4>
294
+
295
+ <div class="members-list" *ngIf="!isLoading">
296
+ <div *ngIf="members.length === 0" class="empty-state">
297
+ <p>No additional members yet</p>
298
+ </div>
299
+
300
+ <div *ngFor="let member of members" class="member-item">
301
+ <div class="member-info">
302
+ <i class="fas fa-user-circle"></i>
303
+ <div class="member-details">
304
+ <div class="member-name">{{ member.userName }}</div>
305
+ <div class="member-email">{{ member.userEmail }}</div>
306
+ </div>
307
+ </div>
308
+
309
+ <div class="member-controls">
310
+ <span class="member-role" [class.owner]="member.role === 'owner'">
311
+ {{ member.role === 'owner' ? 'Owner' : 'Member' }}
312
+ </span>
313
+ <button
314
+ *ngIf="member.role !== 'owner'"
315
+ class="btn-remove"
316
+ (click)="onRemoveMember(member)"
317
+ title="Remove member">
318
+ <i class="fas fa-times"></i>
319
+ </button>
320
+ </div>
321
+ </div>
322
+ </div>
323
+
324
+ <div class="loading-indicator" *ngIf="isLoading">
325
+ <kendo-loader type="infinite-spinner" size="medium"></kendo-loader>
326
+ <span>Loading members...</span>
327
+ </div>
328
+ </div>
329
+
330
+ <div class="error-message" *ngIf="errorMessage">
331
+ {{ errorMessage }}
332
+ </div>
333
+ </div>
334
+
335
+ <kendo-dialog-actions>
336
+ <button kendoButton (click)="onCancel()">Close</button>
337
+ </kendo-dialog-actions>
338
+ </kendo-dialog>
339
+ `, styles: ["\n .members-modal-content {\n padding: 20px;\n }\n\n h4 {\n margin: 0 0 12px 0;\n font-size: 14px;\n font-weight: 600;\n }\n\n .add-member-section {\n margin-bottom: 24px;\n }\n\n .add-member-form {\n display: flex;\n gap: 8px;\n }\n\n .members-list {\n border: 1px solid #d9d9d9;\n border-radius: 4px;\n max-height: 300px;\n overflow-y: auto;\n }\n\n .member-item {\n padding: 12px;\n border-bottom: 1px solid #e8e8e8;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .member-item:last-child {\n border-bottom: none;\n }\n\n .member-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n }\n\n .member-info i {\n font-size: 32px;\n color: #999;\n }\n\n .member-details {\n display: flex;\n flex-direction: column;\n }\n\n .member-name {\n font-size: 14px;\n font-weight: 500;\n }\n\n .member-email {\n font-size: 12px;\n color: #666;\n }\n\n .member-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .member-role {\n padding: 4px 8px;\n border-radius: 3px;\n font-size: 12px;\n font-weight: 500;\n background: #e3f2fd;\n color: #1976d2;\n }\n\n .member-role.owner {\n background: #fff3e0;\n color: #f57c00;\n }\n\n .btn-remove {\n padding: 6px 8px;\n background: transparent;\n border: none;\n cursor: pointer;\n border-radius: 3px;\n color: #999;\n }\n\n .btn-remove:hover {\n background: #ffebee;\n color: #d32f2f;\n }\n\n .empty-state {\n padding: 24px;\n text-align: center;\n color: #999;\n }\n\n .empty-state p {\n margin: 0;\n font-size: 13px;\n }\n\n .loading-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n padding: 24px;\n color: #666;\n }\n\n .error-message {\n display: block;\n color: #d32f2f;\n font-size: 13px;\n margin-top: 12px;\n padding: 8px 12px;\n background: #ffebee;\n border-radius: 4px;\n }\n\n kendo-dialog-actions {\n display: flex;\n justify-content: flex-end;\n padding: 15px 20px;\n border-top: 1px solid #e0e0e0;\n }\n "] }]
340
+ }], () => [{ type: i1.DialogService }], { isVisible: [{
341
+ type: Input
342
+ }], conversation: [{
343
+ type: Input
344
+ }], currentUser: [{
345
+ type: Input
346
+ }], cancelled: [{
347
+ type: Output
348
+ }], membersChanged: [{
349
+ type: Output
350
+ }] }); })();
351
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MembersModalComponent, { className: "MembersModalComponent", filePath: "src/lib/components/members/members-modal.component.ts", lineNumber: 233 }); })();
352
+ //# sourceMappingURL=members-modal.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members-modal.component.js","sourceRoot":"","sources":["../../../../src/lib/components/members/members-modal.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
2
+ import { MentionSuggestion } from '../../services/mention-autocomplete.service';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Dropdown component for @mention autocomplete
6
+ */
7
+ export declare class MentionDropdownComponent implements OnInit, OnDestroy {
8
+ suggestions: MentionSuggestion[];
9
+ position: {
10
+ top: number;
11
+ left: number;
12
+ };
13
+ visible: boolean;
14
+ showAbove: boolean;
15
+ suggestionSelected: EventEmitter<MentionSuggestion>;
16
+ closed: EventEmitter<void>;
17
+ selectedIndex: number;
18
+ constructor();
19
+ ngOnInit(): void;
20
+ ngOnDestroy(): void;
21
+ /**
22
+ * Handle keyboard navigation
23
+ */
24
+ handleKeyDown(event: KeyboardEvent): void;
25
+ /**
26
+ * Select a suggestion
27
+ */
28
+ selectSuggestion(suggestion: MentionSuggestion): void;
29
+ /**
30
+ * Close the dropdown
31
+ */
32
+ close(): void;
33
+ /**
34
+ * Scroll to selected item
35
+ */
36
+ private scrollToSelected;
37
+ /**
38
+ * Track by function for ngFor
39
+ */
40
+ trackBySuggestion(index: number, item: MentionSuggestion): string;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<MentionDropdownComponent, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<MentionDropdownComponent, "mj-mention-dropdown", never, { "suggestions": { "alias": "suggestions"; "required": false; }; "position": { "alias": "position"; "required": false; }; "visible": { "alias": "visible"; "required": false; }; "showAbove": { "alias": "showAbove"; "required": false; }; }, { "suggestionSelected": "suggestionSelected"; "closed": "closed"; }, never, never, false, never>;
43
+ }
44
+ //# sourceMappingURL=mention-dropdown.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-dropdown.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/mention/mention-dropdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EAEV,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;;AAEhF;;GAEG;AACH,qBAKa,wBAAyB,YAAW,MAAM,EAAE,SAAS;IACvD,WAAW,EAAE,iBAAiB,EAAE,CAAM;IACtC,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAuB;IAC9D,OAAO,EAAE,OAAO,CAAS;IACzB,SAAS,EAAE,OAAO,CAAS;IAE1B,kBAAkB,kCAAyC;IAC3D,MAAM,qBAA4B;IAErC,aAAa,EAAE,MAAM,CAAK;;IAIjC,QAAQ,IAAI,IAAI;IAEhB,WAAW,IAAI,IAAI;IAEnB;;OAEG;IAEH,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IA4BzC;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAIrD;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,OAAO,CAAC,gBAAgB;IASxB;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM;yCA9EtD,wBAAwB;2CAAxB,wBAAwB;CAiFpC"}
@@ -0,0 +1,194 @@
1
+ import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ function MentionDropdownComponent_div_0_div_1_div_1_i_2_Template(rf, ctx) { if (rf & 1) {
5
+ i0.ɵɵelement(0, "i");
6
+ } if (rf & 2) {
7
+ const suggestion_r2 = i0.ɵɵnextContext().$implicit;
8
+ i0.ɵɵclassMapInterpolate1("fa-solid ", suggestion_r2.icon, "");
9
+ } }
10
+ function MentionDropdownComponent_div_0_div_1_div_1_i_3_Template(rf, ctx) { if (rf & 1) {
11
+ i0.ɵɵelement(0, "i", 15);
12
+ } }
13
+ function MentionDropdownComponent_div_0_div_1_div_1_span_6_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "span", 16);
15
+ i0.ɵɵtext(1, "Agent");
16
+ i0.ɵɵelementEnd();
17
+ } }
18
+ function MentionDropdownComponent_div_0_div_1_div_1_span_7_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "span", 17);
20
+ i0.ɵɵtext(1, "User");
21
+ i0.ɵɵelementEnd();
22
+ } }
23
+ function MentionDropdownComponent_div_0_div_1_div_1_div_9_Template(rf, ctx) { if (rf & 1) {
24
+ i0.ɵɵelementStart(0, "div", 18);
25
+ i0.ɵɵtext(1);
26
+ i0.ɵɵelementEnd();
27
+ } if (rf & 2) {
28
+ const suggestion_r2 = i0.ɵɵnextContext().$implicit;
29
+ i0.ɵɵadvance();
30
+ i0.ɵɵtextInterpolate1(" ", suggestion_r2.description, " ");
31
+ } }
32
+ function MentionDropdownComponent_div_0_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
33
+ const _r1 = i0.ɵɵgetCurrentView();
34
+ i0.ɵɵelementStart(0, "div", 6);
35
+ i0.ɵɵlistener("click", function MentionDropdownComponent_div_0_div_1_div_1_Template_div_click_0_listener() { const suggestion_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectSuggestion(suggestion_r2)); })("mouseenter", function MentionDropdownComponent_div_0_div_1_div_1_Template_div_mouseenter_0_listener() { const i_r4 = i0.ɵɵrestoreView(_r1).index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.selectedIndex = i_r4); });
36
+ i0.ɵɵelementStart(1, "div", 7);
37
+ i0.ɵɵtemplate(2, MentionDropdownComponent_div_0_div_1_div_1_i_2_Template, 1, 3, "i", 8)(3, MentionDropdownComponent_div_0_div_1_div_1_i_3_Template, 1, 0, "i", 9);
38
+ i0.ɵɵelementEnd();
39
+ i0.ɵɵelementStart(4, "div", 10)(5, "div", 11);
40
+ i0.ɵɵtemplate(6, MentionDropdownComponent_div_0_div_1_div_1_span_6_Template, 2, 0, "span", 12)(7, MentionDropdownComponent_div_0_div_1_div_1_span_7_Template, 2, 0, "span", 13);
41
+ i0.ɵɵtext(8);
42
+ i0.ɵɵelementEnd();
43
+ i0.ɵɵtemplate(9, MentionDropdownComponent_div_0_div_1_div_1_div_9_Template, 2, 1, "div", 14);
44
+ i0.ɵɵelementEnd()();
45
+ } if (rf & 2) {
46
+ const suggestion_r2 = ctx.$implicit;
47
+ const i_r4 = ctx.index;
48
+ const ctx_r2 = i0.ɵɵnextContext(3);
49
+ i0.ɵɵclassProp("selected", i_r4 === ctx_r2.selectedIndex);
50
+ i0.ɵɵadvance(2);
51
+ i0.ɵɵproperty("ngIf", suggestion_r2.type === "agent" && suggestion_r2.icon);
52
+ i0.ɵɵadvance();
53
+ i0.ɵɵproperty("ngIf", suggestion_r2.type === "user");
54
+ i0.ɵɵadvance(3);
55
+ i0.ɵɵproperty("ngIf", suggestion_r2.type === "agent");
56
+ i0.ɵɵadvance();
57
+ i0.ɵɵproperty("ngIf", suggestion_r2.type === "user");
58
+ i0.ɵɵadvance();
59
+ i0.ɵɵtextInterpolate1(" ", suggestion_r2.displayName, " ");
60
+ i0.ɵɵadvance();
61
+ i0.ɵɵproperty("ngIf", suggestion_r2.description);
62
+ } }
63
+ function MentionDropdownComponent_div_0_div_1_Template(rf, ctx) { if (rf & 1) {
64
+ i0.ɵɵelementStart(0, "div", 4);
65
+ i0.ɵɵtemplate(1, MentionDropdownComponent_div_0_div_1_div_1_Template, 10, 8, "div", 5);
66
+ i0.ɵɵelementEnd();
67
+ } if (rf & 2) {
68
+ const ctx_r2 = i0.ɵɵnextContext(2);
69
+ i0.ɵɵadvance();
70
+ i0.ɵɵproperty("ngForOf", ctx_r2.suggestions)("ngForTrackBy", ctx_r2.trackBySuggestion);
71
+ } }
72
+ function MentionDropdownComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵelementStart(0, "div", 19);
74
+ i0.ɵɵelement(1, "i", 20);
75
+ i0.ɵɵelementStart(2, "p");
76
+ i0.ɵɵtext(3, "No agents or users available");
77
+ i0.ɵɵelementEnd()();
78
+ } }
79
+ function MentionDropdownComponent_div_0_Template(rf, ctx) { if (rf & 1) {
80
+ i0.ɵɵelementStart(0, "div", 1);
81
+ i0.ɵɵtemplate(1, MentionDropdownComponent_div_0_div_1_Template, 2, 2, "div", 2)(2, MentionDropdownComponent_div_0_div_2_Template, 4, 0, "div", 3);
82
+ i0.ɵɵelementEnd();
83
+ } if (rf & 2) {
84
+ const ctx_r2 = i0.ɵɵnextContext();
85
+ i0.ɵɵstyleProp("top", ctx_r2.position.top, "px")("left", ctx_r2.position.left, "px");
86
+ i0.ɵɵclassProp("show-above", ctx_r2.showAbove);
87
+ i0.ɵɵadvance();
88
+ i0.ɵɵproperty("ngIf", ctx_r2.suggestions.length > 0);
89
+ i0.ɵɵadvance();
90
+ i0.ɵɵproperty("ngIf", ctx_r2.suggestions.length === 0);
91
+ } }
92
+ /**
93
+ * Dropdown component for @mention autocomplete
94
+ */
95
+ export class MentionDropdownComponent {
96
+ suggestions = [];
97
+ position = { top: 0, left: 0 };
98
+ visible = false;
99
+ showAbove = false; // Controls whether dropdown grows upward
100
+ suggestionSelected = new EventEmitter();
101
+ closed = new EventEmitter();
102
+ selectedIndex = 0;
103
+ constructor() { }
104
+ ngOnInit() { }
105
+ ngOnDestroy() { }
106
+ /**
107
+ * Handle keyboard navigation
108
+ */
109
+ handleKeyDown(event) {
110
+ if (!this.visible || this.suggestions.length === 0)
111
+ return;
112
+ switch (event.key) {
113
+ case 'ArrowDown':
114
+ event.preventDefault();
115
+ this.selectedIndex = Math.min(this.selectedIndex + 1, this.suggestions.length - 1);
116
+ this.scrollToSelected();
117
+ break;
118
+ case 'ArrowUp':
119
+ event.preventDefault();
120
+ this.selectedIndex = Math.max(this.selectedIndex - 1, 0);
121
+ this.scrollToSelected();
122
+ break;
123
+ case 'Enter':
124
+ case 'Tab':
125
+ event.preventDefault();
126
+ if (this.suggestions[this.selectedIndex]) {
127
+ this.selectSuggestion(this.suggestions[this.selectedIndex]);
128
+ }
129
+ break;
130
+ case 'Escape':
131
+ event.preventDefault();
132
+ this.close();
133
+ break;
134
+ }
135
+ }
136
+ /**
137
+ * Select a suggestion
138
+ */
139
+ selectSuggestion(suggestion) {
140
+ this.suggestionSelected.emit(suggestion);
141
+ }
142
+ /**
143
+ * Close the dropdown
144
+ */
145
+ close() {
146
+ this.closed.emit();
147
+ }
148
+ /**
149
+ * Scroll to selected item
150
+ */
151
+ scrollToSelected() {
152
+ setTimeout(() => {
153
+ const selected = document.querySelector('.mention-suggestion.selected');
154
+ if (selected) {
155
+ selected.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
156
+ }
157
+ }, 0);
158
+ }
159
+ /**
160
+ * Track by function for ngFor
161
+ */
162
+ trackBySuggestion(index, item) {
163
+ return item.id;
164
+ }
165
+ static ɵfac = function MentionDropdownComponent_Factory(t) { return new (t || MentionDropdownComponent)(); };
166
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MentionDropdownComponent, selectors: [["mj-mention-dropdown"]], hostBindings: function MentionDropdownComponent_HostBindings(rf, ctx) { if (rf & 1) {
167
+ i0.ɵɵlistener("keydown", function MentionDropdownComponent_keydown_HostBindingHandler($event) { return ctx.handleKeyDown($event); }, false, i0.ɵɵresolveDocument);
168
+ } }, inputs: { suggestions: "suggestions", position: "position", visible: "visible", showAbove: "showAbove" }, outputs: { suggestionSelected: "suggestionSelected", closed: "closed" }, decls: 1, vars: 1, consts: [["class", "mention-dropdown", 3, "show-above", "top", "left", 4, "ngIf"], [1, "mention-dropdown"], ["class", "mention-suggestions", 4, "ngIf"], ["class", "mention-empty-state", 4, "ngIf"], [1, "mention-suggestions"], ["class", "mention-suggestion", 3, "selected", "click", "mouseenter", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "mention-suggestion", 3, "click", "mouseenter"], [1, "suggestion-icon"], [3, "class", 4, "ngIf"], ["class", "fa-solid fa-user", 4, "ngIf"], [1, "suggestion-content"], [1, "suggestion-name"], ["class", "suggestion-type-badge", 4, "ngIf"], ["class", "suggestion-type-badge user", 4, "ngIf"], ["class", "suggestion-description", 4, "ngIf"], [1, "fa-solid", "fa-user"], [1, "suggestion-type-badge"], [1, "suggestion-type-badge", "user"], [1, "suggestion-description"], [1, "mention-empty-state"], [1, "fa-solid", "fa-robot"]], template: function MentionDropdownComponent_Template(rf, ctx) { if (rf & 1) {
169
+ i0.ɵɵtemplate(0, MentionDropdownComponent_div_0_Template, 3, 8, "div", 0);
170
+ } if (rf & 2) {
171
+ i0.ɵɵproperty("ngIf", ctx.visible);
172
+ } }, dependencies: [i1.NgForOf, i1.NgIf], styles: [".mention-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n z-index: 10000;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 280px;\n max-width: 400px;\n max-height: 300px;\n overflow-y: auto;\n transform-origin: top left; \n\n}\n\n.mention-dropdown.show-above[_ngcontent-%COMP%] {\n transform: translateY(-100%); \n\n transform-origin: bottom left; \n\n}\n\n.mention-suggestions[_ngcontent-%COMP%] {\n padding: 4px 0;\n}\n\n.mention-suggestion[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.mention-suggestion[_ngcontent-%COMP%]:hover, \n.mention-suggestion.selected[_ngcontent-%COMP%] {\n background-color: #f5f5f5;\n}\n\n.suggestion-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border-radius: 6px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.suggestion-icon[_ngcontent-%COMP%] i.fa-user[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.suggestion-name[_ngcontent-%COMP%] {\n font-weight: 500;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggestion-type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 3px;\n}\n\n.suggestion-type-badge.user[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #666;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 8px;\n}\n\n.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n\n\n.mention-empty-state[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: #9CA3AF;\n}\n\n.mention-empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.mention-empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n}"] });
173
+ }
174
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MentionDropdownComponent, [{
175
+ type: Component,
176
+ args: [{ selector: 'mj-mention-dropdown', template: "<div\n *ngIf=\"visible\"\n class=\"mention-dropdown\"\n [class.show-above]=\"showAbove\"\n [style.top.px]=\"position.top\"\n [style.left.px]=\"position.left\"\n>\n <!-- Suggestions List -->\n <div class=\"mention-suggestions\" *ngIf=\"suggestions.length > 0\">\n <div\n *ngFor=\"let suggestion of suggestions; let i = index; trackBy: trackBySuggestion\"\n class=\"mention-suggestion\"\n [class.selected]=\"i === selectedIndex\"\n (click)=\"selectSuggestion(suggestion)\"\n (mouseenter)=\"selectedIndex = i\"\n >\n <div class=\"suggestion-icon\">\n <i\n *ngIf=\"suggestion.type === 'agent' && suggestion.icon\"\n class=\"fa-solid {{ suggestion.icon }}\"\n ></i>\n <i\n *ngIf=\"suggestion.type === 'user'\"\n class=\"fa-solid fa-user\"\n ></i>\n </div>\n <div class=\"suggestion-content\">\n <div class=\"suggestion-name\">\n <span class=\"suggestion-type-badge\" *ngIf=\"suggestion.type === 'agent'\">Agent</span>\n <span class=\"suggestion-type-badge user\" *ngIf=\"suggestion.type === 'user'\">User</span>\n {{ suggestion.displayName }}\n </div>\n <div class=\"suggestion-description\" *ngIf=\"suggestion.description\">\n {{ suggestion.description }}\n </div>\n </div>\n </div>\n </div>\n\n <!-- Empty State -->\n <div class=\"mention-empty-state\" *ngIf=\"suggestions.length === 0\">\n <i class=\"fa-solid fa-robot\"></i>\n <p>No agents or users available</p>\n </div>\n</div>\n", styles: [".mention-dropdown {\n position: absolute;\n z-index: 10000;\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n min-width: 280px;\n max-width: 400px;\n max-height: 300px;\n overflow-y: auto;\n transform-origin: top left; /* Default: grows downward from top-left */\n}\n\n.mention-dropdown.show-above {\n transform: translateY(-100%); /* Shift entire dropdown up by its own height */\n transform-origin: bottom left; /* Grows upward from bottom-left */\n}\n\n.mention-suggestions {\n padding: 4px 0;\n}\n\n.mention-suggestion {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 10px 12px;\n cursor: pointer;\n transition: background-color 0.15s;\n}\n\n.mention-suggestion:hover,\n.mention-suggestion.selected {\n background-color: #f5f5f5;\n}\n\n.suggestion-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n border-radius: 6px;\n color: white;\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.suggestion-icon i.fa-user {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-content {\n flex: 1;\n min-width: 0;\n}\n\n.suggestion-name {\n font-weight: 500;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.suggestion-type-badge {\n display: inline-block;\n padding: 2px 6px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n border-radius: 3px;\n}\n\n.suggestion-type-badge.user {\n background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);\n}\n\n.suggestion-description {\n font-size: 12px;\n color: #666;\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n/* Scrollbar styling */\n.mention-dropdown::-webkit-scrollbar {\n width: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-thumb {\n background: #c1c1c1;\n border-radius: 8px;\n}\n\n.mention-dropdown::-webkit-scrollbar-thumb:hover {\n background: #a8a8a8;\n}\n\n/* Empty State */\n.mention-empty-state {\n padding: 24px;\n text-align: center;\n color: #9CA3AF;\n}\n\n.mention-empty-state i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n}\n\n.mention-empty-state p {\n margin: 0;\n font-size: 13px;\n font-weight: 500;\n}\n"] }]
177
+ }], () => [], { suggestions: [{
178
+ type: Input
179
+ }], position: [{
180
+ type: Input
181
+ }], visible: [{
182
+ type: Input
183
+ }], showAbove: [{
184
+ type: Input
185
+ }], suggestionSelected: [{
186
+ type: Output
187
+ }], closed: [{
188
+ type: Output
189
+ }], handleKeyDown: [{
190
+ type: HostListener,
191
+ args: ['document:keydown', ['$event']]
192
+ }] }); })();
193
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MentionDropdownComponent, { className: "MentionDropdownComponent", filePath: "src/lib/components/mention/mention-dropdown.component.ts", lineNumber: 20 }); })();
194
+ //# sourceMappingURL=mention-dropdown.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mention-dropdown.component.js","sourceRoot":"","sources":["../../../../src/lib/components/mention/mention-dropdown.component.ts","../../../../src/lib/components/mention/mention-dropdown.component.html"],"names":[],"mappings":"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"}