@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,255 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Metadata, RunView } from '@memberjunction/core';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Simplified state management for conversations
6
+ * Uses simple arrays with Angular change detection instead of complex observables
7
+ * This prevents synchronization issues when updating conversation properties
8
+ */
9
+ export class ConversationStateService {
10
+ // Simple properties - Angular change detection will handle updates
11
+ conversations = [];
12
+ activeConversationId = null;
13
+ searchQuery = '';
14
+ isLoading = false;
15
+ activeThreadId = null;
16
+ constructor() { }
17
+ /**
18
+ * Gets the active conversation object
19
+ */
20
+ get activeConversation() {
21
+ if (!this.activeConversationId)
22
+ return null;
23
+ return this.conversations.find(c => c.ID === this.activeConversationId) || null;
24
+ }
25
+ /**
26
+ * Gets filtered conversations based on search query
27
+ */
28
+ get filteredConversations() {
29
+ if (!this.searchQuery || this.searchQuery.trim() === '') {
30
+ return this.conversations;
31
+ }
32
+ const lowerQuery = this.searchQuery.toLowerCase();
33
+ return this.conversations.filter(c => (c.Name?.toLowerCase().includes(lowerQuery)) ||
34
+ (c.Description?.toLowerCase().includes(lowerQuery)));
35
+ }
36
+ /**
37
+ * Gets pinned conversations
38
+ */
39
+ get pinnedConversations() {
40
+ return this.conversations.filter(c => c.IsPinned);
41
+ }
42
+ /**
43
+ * Sets the active conversation
44
+ * @param id The conversation ID to activate (or null to clear)
45
+ */
46
+ setActiveConversation(id) {
47
+ console.log('🎯 Setting active conversation:', id);
48
+ this.activeConversationId = id;
49
+ }
50
+ /**
51
+ * Gets the current active conversation ID
52
+ */
53
+ getActiveConversationId() {
54
+ return this.activeConversationId;
55
+ }
56
+ /**
57
+ * Adds a conversation to the list
58
+ * @param conversation The conversation to add
59
+ */
60
+ addConversation(conversation) {
61
+ this.conversations = [conversation, ...this.conversations];
62
+ }
63
+ /**
64
+ * Updates a conversation in the list by directly modifying the entity object
65
+ * Angular change detection will pick up the changes automatically
66
+ * @param id The conversation ID
67
+ * @param updates The fields to update
68
+ */
69
+ updateConversationInPlace(id, updates) {
70
+ const conversation = this.conversations.find(c => c.ID === id);
71
+ if (conversation) {
72
+ Object.assign(conversation, updates);
73
+ console.log('📝 Updated conversation in-place:', { id, updates });
74
+ }
75
+ }
76
+ /**
77
+ * Removes a conversation from the list
78
+ * @param id The conversation ID to remove
79
+ */
80
+ removeConversation(id) {
81
+ this.conversations = this.conversations.filter(c => c.ID !== id);
82
+ }
83
+ /**
84
+ * Sets the search query
85
+ * @param query The search query string
86
+ */
87
+ setSearchQuery(query) {
88
+ this.searchQuery = query;
89
+ }
90
+ /**
91
+ * Clears the search query
92
+ */
93
+ clearSearchQuery() {
94
+ this.searchQuery = '';
95
+ }
96
+ /**
97
+ * Loads conversations from the database
98
+ * @param environmentId The environment ID to filter by
99
+ * @param currentUser The current user context
100
+ */
101
+ async loadConversations(environmentId, currentUser) {
102
+ this.isLoading = true;
103
+ try {
104
+ const rv = new RunView();
105
+ const filter = `EnvironmentID='${environmentId}' AND (IsArchived IS NULL OR IsArchived=0)`;
106
+ const result = await rv.RunView({
107
+ EntityName: 'Conversations',
108
+ ExtraFilter: filter,
109
+ OrderBy: 'IsPinned DESC, __mj_UpdatedAt DESC',
110
+ MaxRows: 1000,
111
+ ResultType: 'entity_object'
112
+ }, currentUser);
113
+ if (result.Success) {
114
+ this.conversations = result.Results || [];
115
+ }
116
+ else {
117
+ console.error('Failed to load conversations:', result.ErrorMessage);
118
+ this.conversations = [];
119
+ }
120
+ }
121
+ catch (error) {
122
+ console.error('Error loading conversations:', error);
123
+ this.conversations = [];
124
+ }
125
+ finally {
126
+ this.isLoading = false;
127
+ }
128
+ }
129
+ /**
130
+ * Creates a new conversation
131
+ * @param name The conversation name
132
+ * @param environmentId The environment ID
133
+ * @param currentUser The current user context
134
+ * @param description Optional description
135
+ * @param projectId Optional project ID
136
+ * @returns The created conversation entity
137
+ */
138
+ async createConversation(name, environmentId, currentUser, description, projectId) {
139
+ const md = new Metadata();
140
+ const conversation = await md.GetEntityObject('Conversations', currentUser);
141
+ conversation.Name = name;
142
+ conversation.EnvironmentID = environmentId;
143
+ conversation.UserID = currentUser.ID;
144
+ if (description)
145
+ conversation.Description = description;
146
+ if (projectId)
147
+ conversation.ProjectID = projectId;
148
+ const saved = await conversation.Save();
149
+ if (saved) {
150
+ this.addConversation(conversation);
151
+ return conversation;
152
+ }
153
+ else {
154
+ throw new Error(conversation.LatestResult?.Message || 'Failed to create conversation');
155
+ }
156
+ }
157
+ /**
158
+ * Deletes a conversation
159
+ * @param id The conversation ID
160
+ * @param currentUser The current user context
161
+ * @returns True if successful
162
+ */
163
+ async deleteConversation(id, currentUser) {
164
+ const md = new Metadata();
165
+ const conversation = await md.GetEntityObject('Conversations', currentUser);
166
+ const loaded = await conversation.Load(id);
167
+ if (!loaded) {
168
+ throw new Error('Conversation not found');
169
+ }
170
+ const deleted = await conversation.Delete();
171
+ if (deleted) {
172
+ this.removeConversation(id);
173
+ if (this.getActiveConversationId() === id) {
174
+ this.setActiveConversation(null);
175
+ }
176
+ return true;
177
+ }
178
+ else {
179
+ throw new Error(conversation.LatestResult?.Message || 'Failed to delete conversation');
180
+ }
181
+ }
182
+ /**
183
+ * Updates a conversation - saves to database AND updates in-place in the array
184
+ * @param id The conversation ID
185
+ * @param updates The fields to update
186
+ * @param currentUser The current user context
187
+ * @returns True if successful
188
+ */
189
+ async saveConversation(id, updates, currentUser) {
190
+ const md = new Metadata();
191
+ const conversation = await md.GetEntityObject('Conversations', currentUser);
192
+ const loaded = await conversation.Load(id);
193
+ if (!loaded) {
194
+ throw new Error('Conversation not found');
195
+ }
196
+ // Apply updates
197
+ Object.assign(conversation, updates);
198
+ const saved = await conversation.Save();
199
+ if (saved) {
200
+ // Update the in-memory conversation directly
201
+ this.updateConversationInPlace(id, updates);
202
+ return true;
203
+ }
204
+ else {
205
+ throw new Error(conversation.LatestResult?.Message || 'Failed to update conversation');
206
+ }
207
+ }
208
+ /**
209
+ * Toggles the pinned status of a conversation
210
+ * @param id The conversation ID
211
+ * @param currentUser The current user context
212
+ */
213
+ async togglePin(id, currentUser) {
214
+ const conversation = this.conversations.find(c => c.ID === id);
215
+ if (conversation) {
216
+ await this.saveConversation(id, { IsPinned: !conversation.IsPinned }, currentUser);
217
+ }
218
+ }
219
+ /**
220
+ * Archives a conversation
221
+ * @param id The conversation ID
222
+ * @param currentUser The current user context
223
+ */
224
+ async archiveConversation(id, currentUser) {
225
+ await this.saveConversation(id, { IsArchived: true }, currentUser);
226
+ }
227
+ /**
228
+ * Opens a thread panel for a specific message
229
+ * @param messageId The parent message ID
230
+ */
231
+ openThread(messageId) {
232
+ this.activeThreadId = messageId;
233
+ }
234
+ /**
235
+ * Closes the currently open thread panel
236
+ */
237
+ closeThread() {
238
+ this.activeThreadId = null;
239
+ }
240
+ /**
241
+ * Gets the currently active thread ID
242
+ */
243
+ getActiveThreadId() {
244
+ return this.activeThreadId;
245
+ }
246
+ static ɵfac = function ConversationStateService_Factory(t) { return new (t || ConversationStateService)(); };
247
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ConversationStateService, factory: ConversationStateService.ɵfac, providedIn: 'root' });
248
+ }
249
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConversationStateService, [{
250
+ type: Injectable,
251
+ args: [{
252
+ providedIn: 'root'
253
+ }]
254
+ }], () => [], null); })();
255
+ //# sourceMappingURL=conversation-state.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-state.service.js","sourceRoot":"","sources":["../../../src/lib/services/conversation-state.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { DialogService as KendoDialogService, DialogRef } from '@progress/kendo-angular-dialog';
2
+ import * as i0 from "@angular/core";
3
+ export interface DialogButton {
4
+ text: string;
5
+ primary?: boolean;
6
+ action: () => void;
7
+ }
8
+ export interface InputDialogOptions {
9
+ title: string;
10
+ message: string;
11
+ inputLabel: string;
12
+ inputValue?: string;
13
+ inputType?: 'text' | 'textarea' | 'number' | 'email';
14
+ placeholder?: string;
15
+ required?: boolean;
16
+ okText?: string;
17
+ cancelText?: string;
18
+ }
19
+ export interface ConfirmDialogOptions {
20
+ title: string;
21
+ message: string;
22
+ okText?: string;
23
+ cancelText?: string;
24
+ dangerous?: boolean;
25
+ }
26
+ /**
27
+ * Dialog service for displaying Kendo-based dialogs
28
+ * Replaces browser alert() and confirm() with proper UI components
29
+ */
30
+ export declare class DialogService {
31
+ private kendoDialogService;
32
+ constructor(kendoDialogService: KendoDialogService);
33
+ /**
34
+ * Show a confirmation dialog
35
+ * @returns Promise<boolean> - true if user clicked OK, false if cancelled
36
+ */
37
+ confirm(options: ConfirmDialogOptions): Promise<boolean>;
38
+ /**
39
+ * Show an alert dialog
40
+ */
41
+ alert(title: string, message: string, okText?: string): Promise<void>;
42
+ /**
43
+ * Show an input dialog
44
+ * @returns Promise<string | null> - input value if OK clicked, null if cancelled
45
+ */
46
+ input(options: InputDialogOptions): Promise<string | null>;
47
+ /**
48
+ * Show a custom dialog with custom content and actions
49
+ */
50
+ custom(title: string, content: string, buttons: DialogButton[], width?: number): DialogRef;
51
+ static ɵfac: i0.ɵɵFactoryDeclaration<DialogService, never>;
52
+ static ɵprov: i0.ɵɵInjectableDeclaration<DialogService>;
53
+ }
54
+ //# sourceMappingURL=dialog.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/dialog.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;;AAIhG,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;;GAGG;AACH,qBAGa,aAAa;IACZ,OAAO,CAAC,kBAAkB;gBAAlB,kBAAkB,EAAE,kBAAkB;IAE1D;;;OAGG;IACH,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BxD;;OAEG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB3E;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoD1D;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,KAAK,GAAE,MAAY,GAAG,SAAS;yCAxHpF,aAAa;6CAAb,aAAa;CAiJzB"}
@@ -0,0 +1,157 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { InputDialogComponent } from '../components/dialogs/input-dialog.component';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@progress/kendo-angular-dialog";
5
+ /**
6
+ * Dialog service for displaying Kendo-based dialogs
7
+ * Replaces browser alert() and confirm() with proper UI components
8
+ */
9
+ export class DialogService {
10
+ kendoDialogService;
11
+ constructor(kendoDialogService) {
12
+ this.kendoDialogService = kendoDialogService;
13
+ }
14
+ /**
15
+ * Show a confirmation dialog
16
+ * @returns Promise<boolean> - true if user clicked OK, false if cancelled
17
+ */
18
+ confirm(options) {
19
+ return new Promise((resolve) => {
20
+ const dialogRef = this.kendoDialogService.open({
21
+ title: options.title,
22
+ content: options.message,
23
+ actions: [
24
+ {
25
+ text: options.cancelText || 'Cancel',
26
+ primary: false
27
+ },
28
+ {
29
+ text: options.okText || 'OK',
30
+ primary: true,
31
+ themeColor: options.dangerous ? 'error' : 'primary'
32
+ }
33
+ ],
34
+ width: 450,
35
+ minWidth: 250
36
+ });
37
+ dialogRef.result.subscribe((result) => {
38
+ if (result instanceof Object && 'text' in result) {
39
+ resolve(result.text === (options.okText || 'OK'));
40
+ }
41
+ else {
42
+ resolve(false);
43
+ }
44
+ });
45
+ });
46
+ }
47
+ /**
48
+ * Show an alert dialog
49
+ */
50
+ alert(title, message, okText = 'OK') {
51
+ return new Promise((resolve) => {
52
+ const dialogRef = this.kendoDialogService.open({
53
+ title: title,
54
+ content: message,
55
+ actions: [
56
+ {
57
+ text: okText,
58
+ primary: true
59
+ }
60
+ ],
61
+ width: 450,
62
+ minWidth: 250
63
+ });
64
+ dialogRef.result.subscribe(() => {
65
+ resolve();
66
+ });
67
+ });
68
+ }
69
+ /**
70
+ * Show an input dialog
71
+ * @returns Promise<string | null> - input value if OK clicked, null if cancelled
72
+ */
73
+ input(options) {
74
+ return new Promise((resolve) => {
75
+ const dialogRef = this.kendoDialogService.open({
76
+ title: options.title,
77
+ content: InputDialogComponent,
78
+ actions: [
79
+ {
80
+ text: options.cancelText || 'Cancel',
81
+ primary: false
82
+ },
83
+ {
84
+ text: options.okText || 'OK',
85
+ primary: true
86
+ }
87
+ ],
88
+ width: 500,
89
+ minWidth: 300
90
+ });
91
+ // Pass data to the component
92
+ const componentInstance = dialogRef.content.instance;
93
+ componentInstance.message = options.message;
94
+ componentInstance.inputLabel = options.inputLabel;
95
+ componentInstance.inputType = options.inputType || 'text';
96
+ componentInstance.placeholder = options.placeholder || '';
97
+ componentInstance.required = options.required || false;
98
+ componentInstance.value = options.inputValue || '';
99
+ // Focus and select input after dialog opens
100
+ setTimeout(() => {
101
+ const inputElement = document.querySelector('.k-dialog input, .k-dialog textarea');
102
+ if (inputElement) {
103
+ inputElement.focus();
104
+ inputElement.select();
105
+ }
106
+ }, 100);
107
+ dialogRef.result.subscribe((result) => {
108
+ if (result instanceof Object && 'text' in result && result.text === (options.okText || 'OK')) {
109
+ const value = componentInstance.getValue();
110
+ if (options.required && !value) {
111
+ resolve(null);
112
+ }
113
+ else {
114
+ resolve(value);
115
+ }
116
+ }
117
+ else {
118
+ resolve(null);
119
+ }
120
+ });
121
+ });
122
+ }
123
+ /**
124
+ * Show a custom dialog with custom content and actions
125
+ */
126
+ custom(title, content, buttons, width = 500) {
127
+ const actions = buttons.map(btn => ({
128
+ text: btn.text,
129
+ primary: btn.primary || false
130
+ }));
131
+ const dialogRef = this.kendoDialogService.open({
132
+ title: title,
133
+ content: content,
134
+ actions: actions,
135
+ width: width,
136
+ minWidth: 300
137
+ });
138
+ dialogRef.result.subscribe((result) => {
139
+ if (result instanceof Object && 'text' in result) {
140
+ const button = buttons.find(b => b.text === result.text);
141
+ if (button && button.action) {
142
+ button.action();
143
+ }
144
+ }
145
+ });
146
+ return dialogRef;
147
+ }
148
+ static ɵfac = function DialogService_Factory(t) { return new (t || DialogService)(i0.ɵɵinject(i1.DialogService)); };
149
+ static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DialogService, factory: DialogService.ɵfac, providedIn: 'root' });
150
+ }
151
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DialogService, [{
152
+ type: Injectable,
153
+ args: [{
154
+ providedIn: 'root'
155
+ }]
156
+ }], () => [{ type: i1.DialogService }], null); })();
157
+ //# sourceMappingURL=dialog.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.service.js","sourceRoot":"","sources":["../../../src/lib/services/dialog.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { UserInfo } from '@memberjunction/core';
2
+ import * as i0 from "@angular/core";
3
+ export type ExportFormat = 'json' | 'markdown' | 'html' | 'text';
4
+ export interface ExportOptions {
5
+ includeMessages?: boolean;
6
+ includeMetadata?: boolean;
7
+ prettyPrint?: boolean;
8
+ includeCSS?: boolean;
9
+ }
10
+ export declare class ExportService {
11
+ exportConversation(conversationId: string, format: ExportFormat, currentUser: UserInfo, options?: ExportOptions): Promise<void>;
12
+ private loadConversationData;
13
+ private exportAsJSON;
14
+ private exportAsMarkdown;
15
+ private exportAsHTML;
16
+ private exportAsText;
17
+ private downloadFile;
18
+ private formatDate;
19
+ private capitalizeRole;
20
+ private escapeHtml;
21
+ private getTimestamp;
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<ExportService, never>;
23
+ static ɵprov: i0.ɵɵInjectableDeclaration<ExportService>;
24
+ }
25
+ //# sourceMappingURL=export.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/export.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;AAEzD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEjE,MAAM,WAAW,aAAa;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAGa,aAAa;IAClB,kBAAkB,CACtB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,QAAQ,EACrB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC;YA2CF,oBAAoB;IA+BlC,OAAO,CAAC,YAAY;IA8CpB,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,YAAY;IA+DpB,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,YAAY;yCAtST,aAAa;6CAAb,aAAa;CA0SzB"}