@memberjunction/ng-conversations 2.104.0 → 2.105.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 (106) hide show
  1. package/dist/lib/components/collection/collection-view.component.d.ts +5 -1
  2. package/dist/lib/components/collection/collection-view.component.d.ts.map +1 -1
  3. package/dist/lib/components/collection/collection-view.component.js +53 -11
  4. package/dist/lib/components/collection/collection-view.component.js.map +1 -1
  5. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts +53 -13
  6. package/dist/lib/components/conversation/conversation-chat-area.component.d.ts.map +1 -1
  7. package/dist/lib/components/conversation/conversation-chat-area.component.js +455 -289
  8. package/dist/lib/components/conversation/conversation-chat-area.component.js.map +1 -1
  9. package/dist/lib/components/conversation/conversation-list.component.d.ts +9 -1
  10. package/dist/lib/components/conversation/conversation-list.component.d.ts.map +1 -1
  11. package/dist/lib/components/conversation/conversation-list.component.js +258 -71
  12. package/dist/lib/components/conversation/conversation-list.component.js.map +1 -1
  13. package/dist/lib/components/mention/mention-dropdown.component.d.ts +6 -0
  14. package/dist/lib/components/mention/mention-dropdown.component.d.ts.map +1 -1
  15. package/dist/lib/components/mention/mention-dropdown.component.js +35 -13
  16. package/dist/lib/components/mention/mention-dropdown.component.js.map +1 -1
  17. package/dist/lib/components/message/message-input.component.d.ts +49 -12
  18. package/dist/lib/components/message/message-input.component.d.ts.map +1 -1
  19. package/dist/lib/components/message/message-input.component.js +579 -221
  20. package/dist/lib/components/message/message-input.component.js.map +1 -1
  21. package/dist/lib/components/message/message-item.component.d.ts +16 -5
  22. package/dist/lib/components/message/message-item.component.d.ts.map +1 -1
  23. package/dist/lib/components/message/message-item.component.js +136 -64
  24. package/dist/lib/components/message/message-item.component.js.map +1 -1
  25. package/dist/lib/components/message/message-list.component.d.ts +11 -5
  26. package/dist/lib/components/message/message-list.component.d.ts.map +1 -1
  27. package/dist/lib/components/message/message-list.component.js +48 -9
  28. package/dist/lib/components/message/message-list.component.js.map +1 -1
  29. package/dist/lib/components/navigation/conversation-navigation.component.d.ts.map +1 -1
  30. package/dist/lib/components/navigation/conversation-navigation.component.js +24 -9
  31. package/dist/lib/components/navigation/conversation-navigation.component.js.map +1 -1
  32. package/dist/lib/components/task/tasks-full-view.component.d.ts +47 -0
  33. package/dist/lib/components/task/tasks-full-view.component.d.ts.map +1 -0
  34. package/dist/lib/components/task/tasks-full-view.component.js +368 -0
  35. package/dist/lib/components/task/tasks-full-view.component.js.map +1 -0
  36. package/dist/lib/components/tasks/task-widget.component.d.ts +29 -0
  37. package/dist/lib/components/tasks/task-widget.component.d.ts.map +1 -0
  38. package/dist/lib/components/tasks/task-widget.component.js +385 -0
  39. package/dist/lib/components/tasks/task-widget.component.js.map +1 -0
  40. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts +22 -8
  41. package/dist/lib/components/tasks/tasks-dropdown.component.d.ts.map +1 -1
  42. package/dist/lib/components/tasks/tasks-dropdown.component.js +195 -99
  43. package/dist/lib/components/tasks/tasks-dropdown.component.js.map +1 -1
  44. package/dist/lib/components/thread/thread-panel.component.d.ts +3 -1
  45. package/dist/lib/components/thread/thread-panel.component.d.ts.map +1 -1
  46. package/dist/lib/components/thread/thread-panel.component.js +14 -14
  47. package/dist/lib/components/thread/thread-panel.component.js.map +1 -1
  48. package/dist/lib/components/workspace/conversation-workspace.component.d.ts +43 -4
  49. package/dist/lib/components/workspace/conversation-workspace.component.d.ts.map +1 -1
  50. package/dist/lib/components/workspace/conversation-workspace.component.js +288 -46
  51. package/dist/lib/components/workspace/conversation-workspace.component.js.map +1 -1
  52. package/dist/lib/conversations.module.d.ts +40 -46
  53. package/dist/lib/conversations.module.d.ts.map +1 -1
  54. package/dist/lib/conversations.module.js +28 -42
  55. package/dist/lib/conversations.module.js.map +1 -1
  56. package/dist/lib/models/conversation-state.model.d.ts +29 -1
  57. package/dist/lib/models/conversation-state.model.d.ts.map +1 -1
  58. package/dist/lib/services/conversation-agent.service.d.ts +6 -5
  59. package/dist/lib/services/conversation-agent.service.d.ts.map +1 -1
  60. package/dist/lib/services/conversation-agent.service.js +18 -19
  61. package/dist/lib/services/conversation-agent.service.js.map +1 -1
  62. package/dist/lib/services/data-cache.service.d.ts +96 -0
  63. package/dist/lib/services/data-cache.service.d.ts.map +1 -0
  64. package/dist/lib/services/data-cache.service.js +203 -0
  65. package/dist/lib/services/data-cache.service.js.map +1 -0
  66. package/dist/public-api.d.ts +3 -6
  67. package/dist/public-api.d.ts.map +1 -1
  68. package/dist/public-api.js +3 -6
  69. package/dist/public-api.js.map +1 -1
  70. package/package.json +12 -10
  71. package/dist/lib/components/artifact/artifact-panel.component.d.ts +0 -22
  72. package/dist/lib/components/artifact/artifact-panel.component.d.ts.map +0 -1
  73. package/dist/lib/components/artifact/artifact-panel.component.js +0 -237
  74. package/dist/lib/components/artifact/artifact-panel.component.js.map +0 -1
  75. package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts +0 -39
  76. package/dist/lib/components/artifact/artifact-upload-modal.component.d.ts.map +0 -1
  77. package/dist/lib/components/artifact/artifact-upload-modal.component.js +0 -384
  78. package/dist/lib/components/artifact/artifact-upload-modal.component.js.map +0 -1
  79. package/dist/lib/components/artifact/artifact-version-history.component.d.ts +0 -28
  80. package/dist/lib/components/artifact/artifact-version-history.component.d.ts.map +0 -1
  81. package/dist/lib/components/artifact/artifact-version-history.component.js +0 -280
  82. package/dist/lib/components/artifact/artifact-version-history.component.js.map +0 -1
  83. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts +0 -22
  84. package/dist/lib/components/artifact/artifact-viewer-panel.component.d.ts.map +0 -1
  85. package/dist/lib/components/artifact/artifact-viewer-panel.component.js +0 -182
  86. package/dist/lib/components/artifact/artifact-viewer-panel.component.js.map +0 -1
  87. package/dist/lib/components/artifact/artifact-viewer.component.d.ts +0 -27
  88. package/dist/lib/components/artifact/artifact-viewer.component.d.ts.map +0 -1
  89. package/dist/lib/components/artifact/artifact-viewer.component.js +0 -266
  90. package/dist/lib/components/artifact/artifact-viewer.component.js.map +0 -1
  91. package/dist/lib/components/artifact/inline-artifact.component.d.ts +0 -46
  92. package/dist/lib/components/artifact/inline-artifact.component.d.ts.map +0 -1
  93. package/dist/lib/components/artifact/inline-artifact.component.js +0 -447
  94. package/dist/lib/components/artifact/inline-artifact.component.js.map +0 -1
  95. package/dist/lib/components/task/task-form-modal.component.d.ts +0 -42
  96. package/dist/lib/components/task/task-form-modal.component.d.ts.map +0 -1
  97. package/dist/lib/components/task/task-form-modal.component.js +0 -329
  98. package/dist/lib/components/task/task-form-modal.component.js.map +0 -1
  99. package/dist/lib/components/task/task-item.component.d.ts +0 -22
  100. package/dist/lib/components/task/task-item.component.d.ts.map +0 -1
  101. package/dist/lib/components/task/task-item.component.js +0 -234
  102. package/dist/lib/components/task/task-item.component.js.map +0 -1
  103. package/dist/lib/components/task/task-list.component.d.ts +0 -32
  104. package/dist/lib/components/task/task-list.component.d.ts.map +0 -1
  105. package/dist/lib/components/task/task-list.component.js +0 -290
  106. package/dist/lib/components/task/task-list.component.js.map +0 -1
@@ -0,0 +1,385 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ function TaskWidgetComponent_span_7_Template(rf, ctx) { if (rf & 1) {
5
+ i0.ɵɵelementStart(0, "span", 13);
6
+ i0.ɵɵtext(1);
7
+ i0.ɵɵelementEnd();
8
+ } if (rf & 2) {
9
+ const ctx_r0 = i0.ɵɵnextContext();
10
+ i0.ɵɵadvance();
11
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.task.Type, " ");
12
+ } }
13
+ function TaskWidgetComponent_div_10_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div", 14);
15
+ i0.ɵɵtext(1);
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const ctx_r0 = i0.ɵɵnextContext();
19
+ i0.ɵɵadvance();
20
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.task.Description, " ");
21
+ } }
22
+ function TaskWidgetComponent_div_11_Template(rf, ctx) { if (rf & 1) {
23
+ i0.ɵɵelementStart(0, "div", 15)(1, "div", 16);
24
+ i0.ɵɵelement(2, "div", 17);
25
+ i0.ɵɵelementEnd();
26
+ i0.ɵɵelementStart(3, "span", 18);
27
+ i0.ɵɵtext(4);
28
+ i0.ɵɵelementEnd()();
29
+ } if (rf & 2) {
30
+ const ctx_r0 = i0.ɵɵnextContext();
31
+ i0.ɵɵadvance(2);
32
+ i0.ɵɵstyleProp("width", ctx_r0.task.PercentComplete, "%");
33
+ i0.ɵɵattribute("data-status", ctx_r0.task.Status);
34
+ i0.ɵɵadvance(2);
35
+ i0.ɵɵtextInterpolate1("", ctx_r0.task.PercentComplete, "%");
36
+ } }
37
+ function TaskWidgetComponent_span_13_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelementStart(0, "span", 19);
39
+ i0.ɵɵelement(1, "i", 20);
40
+ i0.ɵɵelementStart(2, "span", 21);
41
+ i0.ɵɵtext(3, "User:");
42
+ i0.ɵɵelementEnd();
43
+ i0.ɵɵelementStart(4, "span", 22);
44
+ i0.ɵɵtext(5);
45
+ i0.ɵɵelementEnd()();
46
+ } if (rf & 2) {
47
+ const ctx_r0 = i0.ɵɵnextContext();
48
+ i0.ɵɵadvance(5);
49
+ i0.ɵɵtextInterpolate(ctx_r0.task.User);
50
+ } }
51
+ function TaskWidgetComponent_span_14_Template(rf, ctx) { if (rf & 1) {
52
+ i0.ɵɵelementStart(0, "span", 19);
53
+ i0.ɵɵelement(1, "i", 23);
54
+ i0.ɵɵelementStart(2, "span", 21);
55
+ i0.ɵɵtext(3, "Agent:");
56
+ i0.ɵɵelementEnd();
57
+ i0.ɵɵelementStart(4, "span", 22);
58
+ i0.ɵɵtext(5);
59
+ i0.ɵɵelementEnd()();
60
+ } if (rf & 2) {
61
+ const ctx_r0 = i0.ɵɵnextContext();
62
+ i0.ɵɵadvance(5);
63
+ i0.ɵɵtextInterpolate(ctx_r0.task.Agent);
64
+ } }
65
+ function TaskWidgetComponent_span_15_Template(rf, ctx) { if (rf & 1) {
66
+ i0.ɵɵelementStart(0, "span", 19);
67
+ i0.ɵɵelement(1, "i", 24);
68
+ i0.ɵɵelementStart(2, "span", 21);
69
+ i0.ɵɵtext(3, "Started:");
70
+ i0.ɵɵelementEnd();
71
+ i0.ɵɵelementStart(4, "span", 22);
72
+ i0.ɵɵtext(5);
73
+ i0.ɵɵelementEnd()();
74
+ } if (rf & 2) {
75
+ const ctx_r0 = i0.ɵɵnextContext();
76
+ i0.ɵɵadvance(5);
77
+ i0.ɵɵtextInterpolate(ctx_r0.formatDate(ctx_r0.task.StartedAt));
78
+ } }
79
+ function TaskWidgetComponent_span_16_Template(rf, ctx) { if (rf & 1) {
80
+ i0.ɵɵelementStart(0, "span", 19);
81
+ i0.ɵɵelement(1, "i", 25);
82
+ i0.ɵɵelementStart(2, "span", 21);
83
+ i0.ɵɵtext(3, "Completed:");
84
+ i0.ɵɵelementEnd();
85
+ i0.ɵɵelementStart(4, "span", 22);
86
+ i0.ɵɵtext(5);
87
+ i0.ɵɵelementEnd()();
88
+ } if (rf & 2) {
89
+ const ctx_r0 = i0.ɵɵnextContext();
90
+ i0.ɵɵadvance(5);
91
+ i0.ɵɵtextInterpolate(ctx_r0.formatDate(ctx_r0.task.CompletedAt));
92
+ } }
93
+ function TaskWidgetComponent_span_17_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵelementStart(0, "span", 19);
95
+ i0.ɵɵelement(1, "i", 26);
96
+ i0.ɵɵelementStart(2, "span", 21);
97
+ i0.ɵɵtext(3, "Due:");
98
+ i0.ɵɵelementEnd();
99
+ i0.ɵɵelementStart(4, "span", 22);
100
+ i0.ɵɵtext(5);
101
+ i0.ɵɵelementEnd()();
102
+ } if (rf & 2) {
103
+ const ctx_r0 = i0.ɵɵnextContext();
104
+ i0.ɵɵadvance(4);
105
+ i0.ɵɵclassProp("overdue", ctx_r0.isOverdue(ctx_r0.task.DueAt));
106
+ i0.ɵɵadvance();
107
+ i0.ɵɵtextInterpolate1(" ", ctx_r0.formatDate(ctx_r0.task.DueAt), " ");
108
+ } }
109
+ function TaskWidgetComponent_span_18_Template(rf, ctx) { if (rf & 1) {
110
+ i0.ɵɵelementStart(0, "span", 19);
111
+ i0.ɵɵelement(1, "i", 27);
112
+ i0.ɵɵelementStart(2, "span", 21);
113
+ i0.ɵɵtext(3, "Duration:");
114
+ i0.ɵɵelementEnd();
115
+ i0.ɵɵelementStart(4, "span", 22);
116
+ i0.ɵɵtext(5);
117
+ i0.ɵɵelementEnd()();
118
+ } if (rf & 2) {
119
+ const ctx_r0 = i0.ɵɵnextContext();
120
+ i0.ɵɵadvance(5);
121
+ i0.ɵɵtextInterpolate(ctx_r0.getDuration(ctx_r0.task.StartedAt, ctx_r0.task.CompletedAt));
122
+ } }
123
+ function TaskWidgetComponent_span_19_Template(rf, ctx) { if (rf & 1) {
124
+ i0.ɵɵelementStart(0, "span", 28);
125
+ i0.ɵɵelement(1, "i", 29);
126
+ i0.ɵɵelementStart(2, "span", 22);
127
+ i0.ɵɵtext(3);
128
+ i0.ɵɵelementEnd()();
129
+ } if (rf & 2) {
130
+ const ctx_r0 = i0.ɵɵnextContext();
131
+ i0.ɵɵadvance(3);
132
+ i0.ɵɵtextInterpolate(ctx_r0.getElapsedTime(ctx_r0.task.StartedAt));
133
+ } }
134
+ /**
135
+ * Reusable task widget component that displays task information
136
+ * in a consistent, polished format across the application.
137
+ *
138
+ * Can be used in:
139
+ * - Tasks dropdown (active tasks)
140
+ * - Gear icon dropdown (tasks for conversation detail)
141
+ * - Tasks tab (full task list with filters)
142
+ */
143
+ export class TaskWidgetComponent {
144
+ task;
145
+ clickable = false;
146
+ compact = false;
147
+ showProgress = true;
148
+ showDuration = true;
149
+ taskClick = new EventEmitter();
150
+ get isActive() {
151
+ return this.task.Status === 'In Progress';
152
+ }
153
+ onTaskClick() {
154
+ if (this.clickable) {
155
+ this.taskClick.emit(this.task);
156
+ }
157
+ }
158
+ formatDate(date) {
159
+ if (!date)
160
+ return '';
161
+ const now = new Date();
162
+ const taskDate = new Date(date);
163
+ const diffMs = now.getTime() - taskDate.getTime();
164
+ const diffMins = Math.floor(diffMs / 60000);
165
+ // Less than 1 hour ago
166
+ if (diffMins < 60) {
167
+ return diffMins <= 1 ? 'just now' : `${diffMins}m ago`;
168
+ }
169
+ // Less than 24 hours ago
170
+ const diffHours = Math.floor(diffMins / 60);
171
+ if (diffHours < 24) {
172
+ return `${diffHours}h ago`;
173
+ }
174
+ // Less than 7 days ago
175
+ const diffDays = Math.floor(diffHours / 24);
176
+ if (diffDays < 7) {
177
+ return `${diffDays}d ago`;
178
+ }
179
+ // Format as date
180
+ return taskDate.toLocaleDateString();
181
+ }
182
+ isOverdue(dueDate) {
183
+ if (!dueDate)
184
+ return false;
185
+ return new Date(dueDate).getTime() < Date.now();
186
+ }
187
+ getDuration(start, end) {
188
+ if (!start || !end)
189
+ return '';
190
+ const diffMs = new Date(end).getTime() - new Date(start).getTime();
191
+ const diffSecs = Math.floor(diffMs / 1000);
192
+ if (diffSecs < 60) {
193
+ return `${diffSecs}s`;
194
+ }
195
+ const diffMins = Math.floor(diffSecs / 60);
196
+ if (diffMins < 60) {
197
+ return `${diffMins}m`;
198
+ }
199
+ const diffHours = Math.floor(diffMins / 60);
200
+ const remainingMins = diffMins % 60;
201
+ if (diffHours < 24) {
202
+ return remainingMins > 0 ? `${diffHours}h ${remainingMins}m` : `${diffHours}h`;
203
+ }
204
+ const diffDays = Math.floor(diffHours / 24);
205
+ const remainingHours = diffHours % 24;
206
+ return remainingHours > 0 ? `${diffDays}d ${remainingHours}h` : `${diffDays}d`;
207
+ }
208
+ getElapsedTime(start) {
209
+ if (!start)
210
+ return '';
211
+ const diffMs = Date.now() - new Date(start).getTime();
212
+ const diffSecs = Math.floor(diffMs / 1000);
213
+ if (diffSecs < 60) {
214
+ return `${diffSecs}s`;
215
+ }
216
+ const diffMins = Math.floor(diffSecs / 60);
217
+ const remainingSecs = diffSecs % 60;
218
+ if (diffMins < 60) {
219
+ return `${diffMins}:${remainingSecs.toString().padStart(2, '0')}`;
220
+ }
221
+ const diffHours = Math.floor(diffMins / 60);
222
+ const remainingMins = diffMins % 60;
223
+ return `${diffHours}:${remainingMins.toString().padStart(2, '0')}`;
224
+ }
225
+ static ɵfac = function TaskWidgetComponent_Factory(t) { return new (t || TaskWidgetComponent)(); };
226
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskWidgetComponent, selectors: [["mj-task-widget"]], inputs: { task: "task", clickable: "clickable", compact: "compact", showProgress: "showProgress", showDuration: "showDuration" }, outputs: { taskClick: "taskClick" }, decls: 20, vars: 18, consts: [[1, "task-widget", 3, "click"], [1, "task-status-indicator"], [1, "task-main"], [1, "task-header"], [1, "task-title"], [1, "task-badges"], ["class", "badge badge-type", 4, "ngIf"], [1, "badge", "badge-status"], ["class", "task-description", 4, "ngIf"], ["class", "task-progress-container", 4, "ngIf"], [1, "task-meta"], ["class", "meta-item", 4, "ngIf"], ["class", "meta-item meta-elapsed", 4, "ngIf"], [1, "badge", "badge-type"], [1, "task-description"], [1, "task-progress-container"], [1, "progress-bar"], [1, "progress-fill"], [1, "progress-text"], [1, "meta-item"], [1, "fas", "fa-user"], [1, "meta-label"], [1, "meta-value"], [1, "fas", "fa-robot"], [1, "fas", "fa-play-circle"], [1, "fas", "fa-check-circle"], [1, "fas", "fa-calendar-alt"], [1, "fas", "fa-clock"], [1, "meta-item", "meta-elapsed"], [1, "fas", "fa-hourglass-half"]], template: function TaskWidgetComponent_Template(rf, ctx) { if (rf & 1) {
227
+ i0.ɵɵelementStart(0, "div", 0);
228
+ i0.ɵɵlistener("click", function TaskWidgetComponent_Template_div_click_0_listener() { return ctx.onTaskClick(); });
229
+ i0.ɵɵelement(1, "div", 1);
230
+ i0.ɵɵelementStart(2, "div", 2)(3, "div", 3)(4, "div", 4);
231
+ i0.ɵɵtext(5);
232
+ i0.ɵɵelementEnd();
233
+ i0.ɵɵelementStart(6, "div", 5);
234
+ i0.ɵɵtemplate(7, TaskWidgetComponent_span_7_Template, 2, 1, "span", 6);
235
+ i0.ɵɵelementStart(8, "span", 7);
236
+ i0.ɵɵtext(9);
237
+ i0.ɵɵelementEnd()()();
238
+ i0.ɵɵtemplate(10, TaskWidgetComponent_div_10_Template, 2, 1, "div", 8)(11, TaskWidgetComponent_div_11_Template, 5, 4, "div", 9);
239
+ i0.ɵɵelementStart(12, "div", 10);
240
+ i0.ɵɵtemplate(13, TaskWidgetComponent_span_13_Template, 6, 1, "span", 11)(14, TaskWidgetComponent_span_14_Template, 6, 1, "span", 11)(15, TaskWidgetComponent_span_15_Template, 6, 1, "span", 11)(16, TaskWidgetComponent_span_16_Template, 6, 1, "span", 11)(17, TaskWidgetComponent_span_17_Template, 6, 3, "span", 11)(18, TaskWidgetComponent_span_18_Template, 6, 1, "span", 11)(19, TaskWidgetComponent_span_19_Template, 4, 1, "span", 12);
241
+ i0.ɵɵelementEnd()()();
242
+ } if (rf & 2) {
243
+ i0.ɵɵclassProp("clickable", ctx.clickable)("compact", ctx.compact);
244
+ i0.ɵɵadvance();
245
+ i0.ɵɵattribute("data-status", ctx.task.Status);
246
+ i0.ɵɵadvance(4);
247
+ i0.ɵɵtextInterpolate(ctx.task.Name);
248
+ i0.ɵɵadvance(2);
249
+ i0.ɵɵproperty("ngIf", ctx.task.Type);
250
+ i0.ɵɵadvance();
251
+ i0.ɵɵattribute("data-status", ctx.task.Status);
252
+ i0.ɵɵadvance();
253
+ i0.ɵɵtextInterpolate1(" ", ctx.task.Status, " ");
254
+ i0.ɵɵadvance();
255
+ i0.ɵɵproperty("ngIf", !ctx.compact && ctx.task.Description);
256
+ i0.ɵɵadvance();
257
+ i0.ɵɵproperty("ngIf", ctx.showProgress && ctx.task.PercentComplete != null);
258
+ i0.ɵɵadvance(2);
259
+ i0.ɵɵproperty("ngIf", ctx.task.User);
260
+ i0.ɵɵadvance();
261
+ i0.ɵɵproperty("ngIf", ctx.task.Agent);
262
+ i0.ɵɵadvance();
263
+ i0.ɵɵproperty("ngIf", ctx.task.StartedAt);
264
+ i0.ɵɵadvance();
265
+ i0.ɵɵproperty("ngIf", ctx.task.CompletedAt);
266
+ i0.ɵɵadvance();
267
+ i0.ɵɵproperty("ngIf", ctx.task.DueAt && !ctx.task.CompletedAt);
268
+ i0.ɵɵadvance();
269
+ i0.ɵɵproperty("ngIf", ctx.showDuration && ctx.task.StartedAt && ctx.task.CompletedAt);
270
+ i0.ɵɵadvance();
271
+ i0.ɵɵproperty("ngIf", ctx.isActive && ctx.task.StartedAt && !ctx.task.CompletedAt);
272
+ } }, dependencies: [i1.NgIf], styles: [".task-widget[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 6px;\n background: white;\n border: 1px solid #E5E7EB;\n transition: all 150ms ease;\n }\n\n .task-widget.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n }\n\n .task-widget.clickable[_ngcontent-%COMP%]:hover {\n background: #F9FAFB;\n border-color: #D1D5DB;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n }\n\n .task-widget.compact[_ngcontent-%COMP%] {\n padding: 8px 12px;\n }\n\n .task-status-indicator[_ngcontent-%COMP%] {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n\n .task-status-indicator[data-status=\"Pending\"][_ngcontent-%COMP%] {\n background: #9CA3AF;\n }\n\n .task-status-indicator[data-status=\"In Progress\"][_ngcontent-%COMP%] {\n background: #3B82F6;\n }\n\n .task-status-indicator[data-status=\"Complete\"][_ngcontent-%COMP%] {\n background: #10B981;\n }\n\n .task-status-indicator[data-status=\"Blocked\"][_ngcontent-%COMP%] {\n background: #EF4444;\n }\n\n .task-status-indicator[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #DC2626;\n }\n\n .task-status-indicator[data-status=\"Cancelled\"][_ngcontent-%COMP%], \n .task-status-indicator[data-status=\"Deferred\"][_ngcontent-%COMP%] {\n background: #6B7280;\n }\n\n .task-main[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .task-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n }\n\n .task-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n line-height: 1.4;\n flex: 1;\n }\n\n .task-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n white-space: nowrap;\n }\n\n .badge-type[_ngcontent-%COMP%] {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"Pending\"][_ngcontent-%COMP%] {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"In Progress\"][_ngcontent-%COMP%] {\n background: #DBEAFE;\n color: #1E40AF;\n }\n\n .badge-status[data-status=\"Complete\"][_ngcontent-%COMP%] {\n background: #D1FAE5;\n color: #065F46;\n }\n\n .badge-status[data-status=\"Blocked\"][_ngcontent-%COMP%] {\n background: #FEE2E2;\n color: #991B1B;\n }\n\n .badge-status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #FEE2E2;\n color: #7F1D1D;\n }\n\n .badge-status[data-status=\"Cancelled\"][_ngcontent-%COMP%], \n .badge-status[data-status=\"Deferred\"][_ngcontent-%COMP%] {\n background: #F3F4F6;\n color: #4B5563;\n }\n\n .task-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6B7280;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .task-progress-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .progress-bar[_ngcontent-%COMP%] {\n flex: 1;\n height: 6px;\n background: #F3F4F6;\n border-radius: 3px;\n overflow: hidden;\n }\n\n .progress-fill[_ngcontent-%COMP%] {\n height: 100%;\n transition: width 300ms ease;\n border-radius: 3px;\n }\n\n .progress-fill[data-status=\"In Progress\"][_ngcontent-%COMP%] {\n background: #3B82F6;\n }\n\n .progress-fill[data-status=\"Complete\"][_ngcontent-%COMP%] {\n background: #10B981;\n }\n\n .progress-fill[data-status=\"Blocked\"][_ngcontent-%COMP%], \n .progress-fill[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #EF4444;\n }\n\n .progress-text[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n color: #6B7280;\n min-width: 35px;\n text-align: right;\n }\n\n .task-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n }\n\n .meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.7;\n }\n\n .meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n }\n\n .meta-value[_ngcontent-%COMP%] {\n color: #111827;\n }\n\n .meta-value.overdue[_ngcontent-%COMP%] {\n color: #DC2626;\n font-weight: 600;\n }\n\n .meta-elapsed[_ngcontent-%COMP%] {\n color: #3B82F6;\n font-weight: 600;\n }"] });
273
+ }
274
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TaskWidgetComponent, [{
275
+ type: Component,
276
+ args: [{ selector: 'mj-task-widget', template: `
277
+ <div
278
+ class="task-widget"
279
+ [class.clickable]="clickable"
280
+ [class.compact]="compact"
281
+ (click)="onTaskClick()">
282
+
283
+ <!-- Status Indicator -->
284
+ <div class="task-status-indicator" [attr.data-status]="task.Status"></div>
285
+
286
+ <!-- Task Content -->
287
+ <div class="task-main">
288
+ <!-- Header Row -->
289
+ <div class="task-header">
290
+ <div class="task-title">{{ task.Name }}</div>
291
+ <div class="task-badges">
292
+ <!-- Type Badge -->
293
+ <span class="badge badge-type" *ngIf="task.Type">
294
+ {{ task.Type }}
295
+ </span>
296
+ <!-- Status Badge -->
297
+ <span
298
+ class="badge badge-status"
299
+ [attr.data-status]="task.Status">
300
+ {{ task.Status }}
301
+ </span>
302
+ </div>
303
+ </div>
304
+
305
+ <!-- Description -->
306
+ <div class="task-description" *ngIf="!compact && task.Description">
307
+ {{ task.Description }}
308
+ </div>
309
+
310
+ <!-- Progress Bar (if in progress or has completion %) -->
311
+ <div class="task-progress-container" *ngIf="showProgress && task.PercentComplete != null">
312
+ <div class="progress-bar">
313
+ <div
314
+ class="progress-fill"
315
+ [style.width.%]="task.PercentComplete"
316
+ [attr.data-status]="task.Status">
317
+ </div>
318
+ </div>
319
+ <span class="progress-text">{{ task.PercentComplete }}%</span>
320
+ </div>
321
+
322
+ <!-- Meta Information -->
323
+ <div class="task-meta">
324
+ <!-- Assignment -->
325
+ <span class="meta-item" *ngIf="task.User">
326
+ <i class="fas fa-user"></i>
327
+ <span class="meta-label">User:</span>
328
+ <span class="meta-value">{{ task.User }}</span>
329
+ </span>
330
+ <span class="meta-item" *ngIf="task.Agent">
331
+ <i class="fas fa-robot"></i>
332
+ <span class="meta-label">Agent:</span>
333
+ <span class="meta-value">{{ task.Agent }}</span>
334
+ </span>
335
+
336
+ <!-- Timestamps -->
337
+ <span class="meta-item" *ngIf="task.StartedAt">
338
+ <i class="fas fa-play-circle"></i>
339
+ <span class="meta-label">Started:</span>
340
+ <span class="meta-value">{{ formatDate(task.StartedAt) }}</span>
341
+ </span>
342
+ <span class="meta-item" *ngIf="task.CompletedAt">
343
+ <i class="fas fa-check-circle"></i>
344
+ <span class="meta-label">Completed:</span>
345
+ <span class="meta-value">{{ formatDate(task.CompletedAt) }}</span>
346
+ </span>
347
+ <span class="meta-item" *ngIf="task.DueAt && !task.CompletedAt">
348
+ <i class="fas fa-calendar-alt"></i>
349
+ <span class="meta-label">Due:</span>
350
+ <span class="meta-value" [class.overdue]="isOverdue(task.DueAt)">
351
+ {{ formatDate(task.DueAt) }}
352
+ </span>
353
+ </span>
354
+
355
+ <!-- Duration (for completed tasks) -->
356
+ <span class="meta-item" *ngIf="showDuration && task.StartedAt && task.CompletedAt">
357
+ <i class="fas fa-clock"></i>
358
+ <span class="meta-label">Duration:</span>
359
+ <span class="meta-value">{{ getDuration(task.StartedAt, task.CompletedAt) }}</span>
360
+ </span>
361
+
362
+ <!-- Elapsed time (for active tasks) -->
363
+ <span class="meta-item meta-elapsed" *ngIf="isActive && task.StartedAt && !task.CompletedAt">
364
+ <i class="fas fa-hourglass-half"></i>
365
+ <span class="meta-value">{{ getElapsedTime(task.StartedAt) }}</span>
366
+ </span>
367
+ </div>
368
+ </div>
369
+ </div>
370
+ `, styles: ["\n .task-widget {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 6px;\n background: white;\n border: 1px solid #E5E7EB;\n transition: all 150ms ease;\n }\n\n .task-widget.clickable {\n cursor: pointer;\n }\n\n .task-widget.clickable:hover {\n background: #F9FAFB;\n border-color: #D1D5DB;\n box-shadow: 0 2px 4px rgba(0,0,0,0.05);\n }\n\n .task-widget.compact {\n padding: 8px 12px;\n }\n\n .task-status-indicator {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n\n .task-status-indicator[data-status=\"Pending\"] {\n background: #9CA3AF;\n }\n\n .task-status-indicator[data-status=\"In Progress\"] {\n background: #3B82F6;\n }\n\n .task-status-indicator[data-status=\"Complete\"] {\n background: #10B981;\n }\n\n .task-status-indicator[data-status=\"Blocked\"] {\n background: #EF4444;\n }\n\n .task-status-indicator[data-status=\"Failed\"] {\n background: #DC2626;\n }\n\n .task-status-indicator[data-status=\"Cancelled\"],\n .task-status-indicator[data-status=\"Deferred\"] {\n background: #6B7280;\n }\n\n .task-main {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 8px;\n }\n\n .task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n }\n\n .task-title {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n line-height: 1.4;\n flex: 1;\n }\n\n .task-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .badge {\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n white-space: nowrap;\n }\n\n .badge-type {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"Pending\"] {\n background: #F3F4F6;\n color: #6B7280;\n }\n\n .badge-status[data-status=\"In Progress\"] {\n background: #DBEAFE;\n color: #1E40AF;\n }\n\n .badge-status[data-status=\"Complete\"] {\n background: #D1FAE5;\n color: #065F46;\n }\n\n .badge-status[data-status=\"Blocked\"] {\n background: #FEE2E2;\n color: #991B1B;\n }\n\n .badge-status[data-status=\"Failed\"] {\n background: #FEE2E2;\n color: #7F1D1D;\n }\n\n .badge-status[data-status=\"Cancelled\"],\n .badge-status[data-status=\"Deferred\"] {\n background: #F3F4F6;\n color: #4B5563;\n }\n\n .task-description {\n font-size: 13px;\n color: #6B7280;\n line-height: 1.5;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n }\n\n .task-progress-container {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .progress-bar {\n flex: 1;\n height: 6px;\n background: #F3F4F6;\n border-radius: 3px;\n overflow: hidden;\n }\n\n .progress-fill {\n height: 100%;\n transition: width 300ms ease;\n border-radius: 3px;\n }\n\n .progress-fill[data-status=\"In Progress\"] {\n background: #3B82F6;\n }\n\n .progress-fill[data-status=\"Complete\"] {\n background: #10B981;\n }\n\n .progress-fill[data-status=\"Blocked\"],\n .progress-fill[data-status=\"Failed\"] {\n background: #EF4444;\n }\n\n .progress-text {\n font-size: 11px;\n font-weight: 600;\n color: #6B7280;\n min-width: 35px;\n text-align: right;\n }\n\n .task-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n }\n\n .meta-item {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .meta-item i {\n font-size: 10px;\n opacity: 0.7;\n }\n\n .meta-label {\n font-weight: 500;\n }\n\n .meta-value {\n color: #111827;\n }\n\n .meta-value.overdue {\n color: #DC2626;\n font-weight: 600;\n }\n\n .meta-elapsed {\n color: #3B82F6;\n font-weight: 600;\n }\n "] }]
371
+ }], null, { task: [{
372
+ type: Input
373
+ }], clickable: [{
374
+ type: Input
375
+ }], compact: [{
376
+ type: Input
377
+ }], showProgress: [{
378
+ type: Input
379
+ }], showDuration: [{
380
+ type: Input
381
+ }], taskClick: [{
382
+ type: Output
383
+ }] }); })();
384
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TaskWidgetComponent, { className: "TaskWidgetComponent", filePath: "src/lib/components/tasks/task-widget.component.ts", lineNumber: 330 }); })();
385
+ //# sourceMappingURL=task-widget.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-widget.component.js","sourceRoot":"","sources":["../../../../src/lib/components/tasks/task-widget.component.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,41 @@
1
- import { OnInit, OnDestroy, DoCheck } from '@angular/core';
1
+ import { EventEmitter, OnInit, OnDestroy, DoCheck } from '@angular/core';
2
2
  import { UserInfo } from '@memberjunction/core';
3
3
  import { TaskEntity } from '@memberjunction/core-entities';
4
4
  import { ConversationStateService } from '../../services/conversation-state.service';
5
+ import { ActiveTasksService, ActiveTask } from '../../services/active-tasks.service';
5
6
  import * as i0 from "@angular/core";
6
7
  /**
7
- * Tasks dropdown component for chat header
8
- * Displays active tasks from the current conversation
8
+ * Enhanced tasks dropdown component for chat header.
9
+ * Shows both:
10
+ * 1. Active (running) tasks from ActiveTasksService
11
+ * 2. Database tasks for the current conversation
9
12
  */
10
13
  export declare class TasksDropdownComponent implements OnInit, OnDestroy, DoCheck {
11
14
  private conversationState;
15
+ private activeTasksService;
12
16
  currentUser: UserInfo;
17
+ taskClicked: EventEmitter<TaskEntity>;
13
18
  isOpen: boolean;
14
- tasks: TaskEntity[];
15
- taskCount: number;
19
+ activeTasks: ActiveTask[];
20
+ dbTasks: TaskEntity[];
21
+ totalTaskCount: number;
16
22
  private previousConversationId;
17
- constructor(conversationState: ConversationStateService);
23
+ private destroy$;
24
+ private pollingInterval;
25
+ constructor(conversationState: ConversationStateService, activeTasksService: ActiveTasksService);
18
26
  ngOnInit(): void;
27
+ private startPolling;
28
+ private stopPolling;
19
29
  ngDoCheck(): void;
20
30
  ngOnDestroy(): void;
21
31
  toggleDropdown(): void;
22
32
  closeDropdown(): void;
23
- private loadTasks;
33
+ private updateTotalCount;
34
+ private loadDatabaseTasks;
35
+ getElapsedTime(task: ActiveTask): string;
36
+ getTrimmedStatus(status: string): string;
37
+ onTaskClick(task: TaskEntity): void;
24
38
  static ɵfac: i0.ɵɵFactoryDeclaration<TasksDropdownComponent, never>;
25
- static ɵcmp: i0.ɵɵComponentDeclaration<TasksDropdownComponent, "mj-tasks-dropdown", never, { "currentUser": { "alias": "currentUser"; "required": false; }; }, {}, never, never, false, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<TasksDropdownComponent, "mj-tasks-dropdown", never, { "currentUser": { "alias": "currentUser"; "required": false; }; }, { "taskClicked": "taskClicked"; }, never, never, false, never>;
26
40
  }
27
41
  //# sourceMappingURL=tasks-dropdown.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks-dropdown.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAA4B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;;AAErF;;;GAGG;AACH,qBAsPa,sBAAuB,YAAW,MAAM,EAAE,SAAS,EAAE,OAAO;IAQ3D,OAAO,CAAC,iBAAiB;IAP5B,WAAW,EAAG,QAAQ,CAAC;IAEzB,MAAM,EAAE,OAAO,CAAS;IACxB,KAAK,EAAE,UAAU,EAAE,CAAM;IACzB,SAAS,EAAE,MAAM,CAAK;IAC7B,OAAO,CAAC,sBAAsB,CAAuB;gBAEjC,iBAAiB,EAAE,wBAAwB;IAE/D,QAAQ;IAOR,SAAS;IAcT,WAAW;IAIX,cAAc,IAAI,IAAI;IAItB,aAAa,IAAI,IAAI;YAIP,SAAS;yCA3CZ,sBAAsB;2CAAtB,sBAAsB;CA4FlC"}
1
+ {"version":3,"file":"tasks-dropdown.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,UAAU,EAA4B,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;AAIrF;;;;;GAKG;AACH,qBA8Ra,sBAAuB,YAAW,MAAM,EAAE,SAAS,EAAE,OAAO;IAcrE,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,kBAAkB;IAdnB,WAAW,EAAG,QAAQ,CAAC;IACtB,WAAW,2BAAkC;IAEhD,MAAM,EAAE,OAAO,CAAS;IACxB,WAAW,EAAE,UAAU,EAAE,CAAM;IAC/B,OAAO,EAAE,UAAU,EAAE,CAAM;IAC3B,cAAc,EAAE,MAAM,CAAK;IAElC,OAAO,CAAC,sBAAsB,CAAuB;IACrD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,eAAe,CAAa;gBAG1B,iBAAiB,EAAE,wBAAwB,EAC3C,kBAAkB,EAAE,kBAAkB;IAGhD,QAAQ;IAkBR,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,WAAW;IAOnB,SAAS;IAcT,WAAW;IAMX,cAAc,IAAI,IAAI;IAQtB,aAAa,IAAI,IAAI;IAIrB,OAAO,CAAC,gBAAgB;YAIV,iBAAiB;IAkD/B,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;IAaxC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAQxC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;yCA9JxB,sBAAsB;2CAAtB,sBAAsB;CAkKlC"}