@memberjunction/ng-conversations 2.104.0 → 2.106.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,368 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { RunView } from '@memberjunction/core';
4
+ import { TaskComponent } from '@memberjunction/ng-tasks';
5
+ import { AIEngineBase } from '@memberjunction/ai-engine-base';
6
+ import * as i0 from "@angular/core";
7
+ function TasksFullViewComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
8
+ const _r1 = i0.ɵɵgetCurrentView();
9
+ i0.ɵɵelementStart(0, "mj-task", 3);
10
+ i0.ɵɵlistener("taskClicked", function TasksFullViewComponent_Conditional_1_Template_mj_task_taskClicked_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTaskClick($event)); });
11
+ i0.ɵɵelementEnd();
12
+ } if (rf & 2) {
13
+ const ctx_r1 = i0.ɵɵnextContext();
14
+ i0.ɵɵproperty("tasks", ctx_r1.filteredTasks)("title", "Tasks")("description", ctx_r1.getDescription())("showHeader", true)("showViewToggle", false)("viewMode", "simple");
15
+ } }
16
+ function TasksFullViewComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
17
+ const _r3 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementStart(0, "div", 4)(1, "div", 5)(2, "button", 6);
19
+ i0.ɵɵlistener("click", function TasksFullViewComponent_Conditional_2_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.backToTaskList()); });
20
+ i0.ɵɵelement(3, "i", 7);
21
+ i0.ɵɵelementStart(4, "span");
22
+ i0.ɵɵtext(5, "Back to Tasks");
23
+ i0.ɵɵelementEnd()();
24
+ i0.ɵɵelementStart(6, "div", 8);
25
+ i0.ɵɵtext(7, "/");
26
+ i0.ɵɵelementEnd();
27
+ i0.ɵɵelementStart(8, "span", 9);
28
+ i0.ɵɵtext(9);
29
+ i0.ɵɵelementEnd()();
30
+ i0.ɵɵelementStart(10, "mj-task", 10);
31
+ i0.ɵɵlistener("taskClicked", function TasksFullViewComponent_Conditional_2_Template_mj_task_taskClicked_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSubTaskClick($event)); })("openEntityRecord", function TasksFullViewComponent_Conditional_2_Template_mj_task_openEntityRecord_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
32
+ i0.ɵɵelementEnd()();
33
+ } if (rf & 2) {
34
+ const ctx_r1 = i0.ɵɵnextContext();
35
+ i0.ɵɵclassProp("swoosh-in", ctx_r1.showDetailAnimation);
36
+ i0.ɵɵadvance(9);
37
+ i0.ɵɵtextInterpolate(ctx_r1.selectedTask.Name);
38
+ i0.ɵɵadvance();
39
+ i0.ɵɵproperty("tasks", ctx_r1.subTasks)("ganttTasks", ctx_r1.subTasksWithParent)("taskDependencies", ctx_r1.taskDependencies)("agentRunMap", ctx_r1.agentRunMap)("title", ctx_r1.selectedTask.Name)("description", ctx_r1.getTaskDetailDescription())("showHeader", true)("showViewToggle", true)("viewMode", "gantt");
40
+ } }
41
+ /**
42
+ * Full-page tasks view with task list and Gantt chart
43
+ * Generic component that displays tasks based on provided filter
44
+ * Supports drilling into individual tasks to see sub-tasks
45
+ */
46
+ export class TasksFullViewComponent {
47
+ environmentId;
48
+ currentUser;
49
+ baseFilter = '1=1'; // SQL filter for tasks (default: show all)
50
+ activeTaskId; // Task ID to auto-select and drill into
51
+ openEntityRecord = new EventEmitter();
52
+ allTasks = [];
53
+ filteredTasks = [];
54
+ subTasks = [];
55
+ subTasksWithParent = []; // Includes parent for Gantt hierarchy
56
+ taskDependencies = []; // Dependencies for Gantt links
57
+ agentRunMap = new Map(); // Maps TaskID -> AgentRunID
58
+ selectedTask = null;
59
+ showDetailAnimation = false;
60
+ isLoading = false;
61
+ aiEngineConfigured = false;
62
+ ngOnInit() {
63
+ this.loadTasks();
64
+ }
65
+ ngOnChanges(changes) {
66
+ // Reload tasks if baseFilter changes
67
+ if (changes['baseFilter'] && !changes['baseFilter'].firstChange) {
68
+ this.loadTasks();
69
+ }
70
+ // Auto-drill into task if activeTaskId changes
71
+ if (changes['activeTaskId'] && this.activeTaskId) {
72
+ const task = this.allTasks.find(t => t.ID === this.activeTaskId);
73
+ if (task) {
74
+ this.onTaskClick(task);
75
+ }
76
+ }
77
+ }
78
+ async loadTasks() {
79
+ this.isLoading = true;
80
+ try {
81
+ // Configure AIEngineBase on first load (false = don't force refresh)
82
+ if (!this.aiEngineConfigured) {
83
+ await AIEngineBase.Instance.Config(false);
84
+ this.aiEngineConfigured = true;
85
+ }
86
+ const rv = new RunView();
87
+ console.log('📝 Tasks filter SQL:', this.baseFilter);
88
+ // Load all tasks with the provided filter
89
+ const tasksResult = await rv.RunView({
90
+ EntityName: 'MJ: Tasks',
91
+ ExtraFilter: this.baseFilter,
92
+ OrderBy: '__mj_CreatedAt DESC',
93
+ MaxRows: 1000,
94
+ ResultType: 'entity_object'
95
+ }, this.currentUser);
96
+ console.log('📊 Tasks query result:', {
97
+ success: tasksResult.Success,
98
+ resultCount: tasksResult.Results?.length || 0,
99
+ errorMessage: tasksResult.ErrorMessage
100
+ });
101
+ if (tasksResult.Success) {
102
+ this.allTasks = tasksResult.Results || [];
103
+ this.filteredTasks = this.allTasks;
104
+ console.log(`📋 Loaded ${this.allTasks.length} tasks`);
105
+ if (this.allTasks.length === 0) {
106
+ console.log('💡 No tasks found with current filter');
107
+ }
108
+ else {
109
+ console.log('✅ Sample task:', {
110
+ id: this.allTasks[0].ID,
111
+ name: this.allTasks[0].Name,
112
+ status: this.allTasks[0].Status,
113
+ conversationDetailID: this.allTasks[0].ConversationDetailID
114
+ });
115
+ }
116
+ }
117
+ else {
118
+ console.error('❌ Failed to load tasks:', tasksResult.ErrorMessage);
119
+ this.allTasks = [];
120
+ this.filteredTasks = [];
121
+ }
122
+ }
123
+ catch (error) {
124
+ console.error('Failed to load tasks:', error);
125
+ this.allTasks = [];
126
+ this.filteredTasks = [];
127
+ }
128
+ finally {
129
+ this.isLoading = false;
130
+ }
131
+ }
132
+ async onTaskClick(task) {
133
+ console.log('Task clicked:', task);
134
+ this.selectedTask = task;
135
+ this.showDetailAnimation = true;
136
+ // Load all tasks in the hierarchy using RootParentID
137
+ await this.loadTaskHierarchy(task);
138
+ }
139
+ async loadTaskHierarchy(task) {
140
+ try {
141
+ const rv = new RunView();
142
+ // Use RootParentID to load all tasks in this hierarchy
143
+ // If task has no RootParentID, it's the root itself, so use its ID
144
+ const rootId = task.RootParentID || task.ID;
145
+ // Load all tasks where RootParentID matches, or tasks that are the root itself
146
+ const hierarchyResult = await rv.RunView({
147
+ EntityName: 'MJ: Tasks',
148
+ ExtraFilter: `RootParentID='${rootId}' OR ID='${rootId}'`,
149
+ OrderBy: '__mj_CreatedAt ASC',
150
+ MaxRows: 1000,
151
+ ResultType: 'entity_object'
152
+ }, this.currentUser);
153
+ if (hierarchyResult.Success) {
154
+ const allHierarchy = hierarchyResult.Results || [];
155
+ // For list view: Filter out the clicked task itself - only show its children/descendants
156
+ this.subTasks = allHierarchy.filter(t => t.ID !== task.ID);
157
+ // For Gantt view: Include the parent task so hierarchy works correctly
158
+ this.subTasksWithParent = allHierarchy;
159
+ console.log(`📋 Loaded ${this.subTasks.length} tasks in hierarchy for root ${rootId}`);
160
+ // Load task dependencies for this hierarchy
161
+ await this.loadTaskDependencies(rootId);
162
+ // Load agent runs for this hierarchy
163
+ await this.loadAgentRuns(allHierarchy);
164
+ }
165
+ else {
166
+ console.error('❌ Failed to load task hierarchy:', hierarchyResult.ErrorMessage);
167
+ this.subTasks = [];
168
+ this.subTasksWithParent = [];
169
+ this.taskDependencies = [];
170
+ }
171
+ }
172
+ catch (error) {
173
+ console.error('Failed to load task hierarchy:', error);
174
+ this.subTasks = [];
175
+ }
176
+ }
177
+ async loadTaskDependencies(rootId) {
178
+ try {
179
+ const rv = new RunView();
180
+ // Load task dependencies where either TaskID or DependsOnTaskID is in this hierarchy
181
+ // Use subquery to find all tasks with this RootParentID
182
+ // Note: Using __mj as the default schema - this is the standard MJ schema
183
+ const schema = '__mj';
184
+ const depsResult = await rv.RunView({
185
+ EntityName: 'MJ: Task Dependencies',
186
+ ExtraFilter: `
187
+ TaskID IN (SELECT ID FROM [${schema}].[vwTasks] WHERE RootParentID='${rootId}' OR ID='${rootId}')
188
+ OR
189
+ DependsOnTaskID IN (SELECT ID FROM [${schema}].[vwTasks] WHERE RootParentID='${rootId}' OR ID='${rootId}')
190
+ `,
191
+ ResultType: 'entity_object'
192
+ }, this.currentUser);
193
+ if (depsResult.Success) {
194
+ this.taskDependencies = depsResult.Results || [];
195
+ console.log(`🔗 Loaded ${this.taskDependencies.length} task dependencies`);
196
+ }
197
+ else {
198
+ console.error('❌ Failed to load task dependencies:', depsResult.ErrorMessage);
199
+ this.taskDependencies = [];
200
+ }
201
+ }
202
+ catch (error) {
203
+ console.error('Failed to load task dependencies:', error);
204
+ this.taskDependencies = [];
205
+ }
206
+ }
207
+ async loadAgentRuns(tasks) {
208
+ try {
209
+ // Clear existing map
210
+ this.agentRunMap.clear();
211
+ // Get all unique ConversationDetailIDs from tasks (filter out nulls)
212
+ const conversationDetailIds = tasks
213
+ .filter(t => t.ConversationDetailID != null)
214
+ .map(t => t.ConversationDetailID);
215
+ if (conversationDetailIds.length === 0) {
216
+ console.log('💡 No tasks with ConversationDetailID');
217
+ return;
218
+ }
219
+ const rv = new RunView();
220
+ const schema = '__mj';
221
+ // Build filter to find agent runs for these conversation details
222
+ // Use a subquery to avoid passing large ID lists
223
+ const taskIds = tasks.map(t => `'${t.ID}'`).join(',');
224
+ const agentRunsResult = await rv.RunView({
225
+ EntityName: 'MJ: AI Agent Runs',
226
+ ExtraFilter: `
227
+ ConversationDetailID IN (
228
+ SELECT DISTINCT ConversationDetailID
229
+ FROM [${schema}].[vwTasks]
230
+ WHERE ID IN (${taskIds})
231
+ AND ConversationDetailID IS NOT NULL
232
+ )
233
+ `,
234
+ ResultType: 'entity_object'
235
+ }, this.currentUser);
236
+ if (agentRunsResult.Success) {
237
+ const agentRuns = agentRunsResult.Results || [];
238
+ console.log(`🤖 Loaded ${agentRuns.length} agent runs`, agentRuns);
239
+ // Build map: ConversationDetailID -> AgentRunID
240
+ const convoToRunMap = new Map();
241
+ agentRuns.forEach(run => {
242
+ if (run.ConversationDetailID) {
243
+ convoToRunMap.set(run.ConversationDetailID, run.ID);
244
+ console.log(`📝 Mapping ConvoDetailID ${run.ConversationDetailID} -> RunID ${run.ID}`);
245
+ }
246
+ });
247
+ // Map TaskID -> AgentRunID using ConversationDetailID as the link
248
+ tasks.forEach(task => {
249
+ console.log(`🔍 Task ${task.Name} - ConvoDetailID: ${task.ConversationDetailID}, AgentID: ${task.AgentID}`);
250
+ if (task.ConversationDetailID) {
251
+ const agentRunId = convoToRunMap.get(task.ConversationDetailID);
252
+ if (agentRunId) {
253
+ this.agentRunMap.set(task.ID, agentRunId);
254
+ console.log(`✅ Mapped Task ${task.ID} -> AgentRun ${agentRunId}`);
255
+ }
256
+ else {
257
+ console.log(`⚠️ No agent run found for ConvoDetailID ${task.ConversationDetailID}`);
258
+ }
259
+ }
260
+ });
261
+ console.log(`🔗 Mapped ${this.agentRunMap.size} tasks to agent runs`, Array.from(this.agentRunMap.entries()));
262
+ }
263
+ else {
264
+ console.error('❌ Failed to load agent runs:', agentRunsResult.ErrorMessage);
265
+ }
266
+ }
267
+ catch (error) {
268
+ console.error('Failed to load agent runs:', error);
269
+ }
270
+ }
271
+ backToTaskList() {
272
+ this.selectedTask = null;
273
+ this.subTasks = [];
274
+ this.subTasksWithParent = [];
275
+ this.taskDependencies = [];
276
+ this.agentRunMap.clear();
277
+ this.showDetailAnimation = false;
278
+ }
279
+ onSubTaskClick(subTask) {
280
+ console.log('Sub-task clicked:', subTask);
281
+ // Could drill down further if needed
282
+ }
283
+ onOpenEntityRecord(event) {
284
+ // Bubble up the event to parent component
285
+ this.openEntityRecord.emit(event);
286
+ }
287
+ getDescription() {
288
+ const activeCount = this.allTasks.filter(t => t.Status === 'Pending' || t.Status === 'In Progress').length;
289
+ const completedCount = this.allTasks.filter(t => t.Status === 'Complete').length;
290
+ return `${activeCount} active, ${completedCount} completed, ${this.allTasks.length} total`;
291
+ }
292
+ getTaskDetailDescription() {
293
+ if (this.subTasks.length === 0) {
294
+ return 'No sub-tasks';
295
+ }
296
+ const activeCount = this.subTasks.filter(t => t.Status === 'Pending' || t.Status === 'In Progress').length;
297
+ const completedCount = this.subTasks.filter(t => t.Status === 'Complete').length;
298
+ return `${activeCount} active, ${completedCount} completed, ${this.subTasks.length} sub-tasks`;
299
+ }
300
+ static ɵfac = function TasksFullViewComponent_Factory(t) { return new (t || TasksFullViewComponent)(); };
301
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TasksFullViewComponent, selectors: [["mj-tasks-full-view"]], inputs: { environmentId: "environmentId", currentUser: "currentUser", baseFilter: "baseFilter", activeTaskId: "activeTaskId" }, outputs: { openEntityRecord: "openEntityRecord" }, standalone: true, features: [i0.ɵɵNgOnChangesFeature, i0.ɵɵStandaloneFeature], decls: 3, vars: 1, consts: [[1, "tasks-full-view"], [3, "tasks", "title", "description", "showHeader", "showViewToggle", "viewMode"], [1, "task-detail-view", 3, "swoosh-in"], [3, "taskClicked", "tasks", "title", "description", "showHeader", "showViewToggle", "viewMode"], [1, "task-detail-view"], [1, "breadcrumb-nav"], [1, "breadcrumb-back", 3, "click"], [1, "fas", "fa-arrow-left"], [1, "breadcrumb-divider"], [1, "breadcrumb-current"], [3, "taskClicked", "openEntityRecord", "tasks", "ganttTasks", "taskDependencies", "agentRunMap", "title", "description", "showHeader", "showViewToggle", "viewMode"]], template: function TasksFullViewComponent_Template(rf, ctx) { if (rf & 1) {
302
+ i0.ɵɵelementStart(0, "div", 0);
303
+ i0.ɵɵtemplate(1, TasksFullViewComponent_Conditional_1_Template, 1, 6, "mj-task", 1)(2, TasksFullViewComponent_Conditional_2_Template, 11, 12, "div", 2);
304
+ i0.ɵɵelementEnd();
305
+ } if (rf & 2) {
306
+ i0.ɵɵadvance();
307
+ i0.ɵɵconditional(!ctx.selectedTask ? 1 : 2);
308
+ } }, dependencies: [CommonModule, TaskComponent], styles: [".tasks-full-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #F9FAFB;\n }\n\n .task-detail-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .swoosh-in[_ngcontent-%COMP%] {\n animation: _ngcontent-%COMP%_swooshIn 0.3s ease-out;\n }\n\n @keyframes _ngcontent-%COMP%_swooshIn {\n from {\n opacity: 0;\n transform: translateX(50px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n .breadcrumb-nav[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: white;\n border-bottom: 1px solid #E5E7EB;\n }\n\n .breadcrumb-back[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #D1D5DB;\n border-radius: 6px;\n color: #374151;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .breadcrumb-back[_ngcontent-%COMP%]:hover {\n background: #F3F4F6;\n border-color: #9CA3AF;\n }\n\n .breadcrumb-back[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n\n .breadcrumb-divider[_ngcontent-%COMP%] {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .breadcrumb-current[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n }"] });
309
+ }
310
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TasksFullViewComponent, [{
311
+ type: Component,
312
+ args: [{ selector: 'mj-tasks-full-view', standalone: true, imports: [CommonModule, TaskComponent], template: `
313
+ <div class="tasks-full-view">
314
+ @if (!selectedTask) {
315
+ <!-- Task List View -->
316
+ <mj-task
317
+ [tasks]="filteredTasks"
318
+ [title]="'Tasks'"
319
+ [description]="getDescription()"
320
+ [showHeader]="true"
321
+ [showViewToggle]="false"
322
+ [viewMode]="'simple'"
323
+ (taskClicked)="onTaskClick($event)">
324
+ </mj-task>
325
+ } @else {
326
+ <!-- Task Detail View with Sub-tasks -->
327
+ <div class="task-detail-view" [class.swoosh-in]="showDetailAnimation">
328
+ <!-- Breadcrumb -->
329
+ <div class="breadcrumb-nav">
330
+ <button class="breadcrumb-back" (click)="backToTaskList()">
331
+ <i class="fas fa-arrow-left"></i>
332
+ <span>Back to Tasks</span>
333
+ </button>
334
+ <div class="breadcrumb-divider">/</div>
335
+ <span class="breadcrumb-current">{{ selectedTask.Name }}</span>
336
+ </div>
337
+
338
+ <!-- Task Details & Sub-tasks with Gantt Toggle -->
339
+ <mj-task
340
+ [tasks]="subTasks"
341
+ [ganttTasks]="subTasksWithParent"
342
+ [taskDependencies]="taskDependencies"
343
+ [agentRunMap]="agentRunMap"
344
+ [title]="selectedTask.Name"
345
+ [description]="getTaskDetailDescription()"
346
+ [showHeader]="true"
347
+ [showViewToggle]="true"
348
+ [viewMode]="'gantt'"
349
+ (taskClicked)="onSubTaskClick($event)"
350
+ (openEntityRecord)="onOpenEntityRecord($event)">
351
+ </mj-task>
352
+ </div>
353
+ }
354
+ </div>
355
+ `, styles: ["\n .tasks-full-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #F9FAFB;\n }\n\n .task-detail-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n }\n\n .swoosh-in {\n animation: swooshIn 0.3s ease-out;\n }\n\n @keyframes swooshIn {\n from {\n opacity: 0;\n transform: translateX(50px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n }\n\n .breadcrumb-nav {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 16px 24px;\n background: white;\n border-bottom: 1px solid #E5E7EB;\n }\n\n .breadcrumb-back {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: transparent;\n border: 1px solid #D1D5DB;\n border-radius: 6px;\n color: #374151;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .breadcrumb-back:hover {\n background: #F3F4F6;\n border-color: #9CA3AF;\n }\n\n .breadcrumb-back i {\n font-size: 12px;\n }\n\n .breadcrumb-divider {\n color: #9CA3AF;\n font-size: 14px;\n }\n\n .breadcrumb-current {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n }\n "] }]
356
+ }], null, { environmentId: [{
357
+ type: Input
358
+ }], currentUser: [{
359
+ type: Input
360
+ }], baseFilter: [{
361
+ type: Input
362
+ }], activeTaskId: [{
363
+ type: Input
364
+ }], openEntityRecord: [{
365
+ type: Output
366
+ }] }); })();
367
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TasksFullViewComponent, { className: "TasksFullViewComponent", filePath: "src/lib/components/task/tasks-full-view.component.ts", lineNumber: 136 }); })();
368
+ //# sourceMappingURL=tasks-full-view.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tasks-full-view.component.js","sourceRoot":"","sources":["../../../../src/lib/components/task/tasks-full-view.component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { TaskEntity } from '@memberjunction/core-entities';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Reusable task widget component that displays task information
6
+ * in a consistent, polished format across the application.
7
+ *
8
+ * Can be used in:
9
+ * - Tasks dropdown (active tasks)
10
+ * - Gear icon dropdown (tasks for conversation detail)
11
+ * - Tasks tab (full task list with filters)
12
+ */
13
+ export declare class TaskWidgetComponent {
14
+ task: TaskEntity;
15
+ clickable: boolean;
16
+ compact: boolean;
17
+ showProgress: boolean;
18
+ showDuration: boolean;
19
+ taskClick: EventEmitter<TaskEntity>;
20
+ get isActive(): boolean;
21
+ onTaskClick(): void;
22
+ formatDate(date: Date | null): string;
23
+ isOverdue(dueDate: Date | null): boolean;
24
+ getDuration(start: Date | null, end: Date | null): string;
25
+ getElapsedTime(start: Date | null): string;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<TaskWidgetComponent, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<TaskWidgetComponent, "mj-task-widget", never, { "task": { "alias": "task"; "required": false; }; "clickable": { "alias": "clickable"; "required": false; }; "compact": { "alias": "compact"; "required": false; }; "showProgress": { "alias": "showProgress"; "required": false; }; "showDuration": { "alias": "showDuration"; "required": false; }; }, { "taskClick": "taskClick"; }, never, never, false, never>;
28
+ }
29
+ //# sourceMappingURL=task-widget.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-widget.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/tasks/task-widget.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;;AAE3D;;;;;;;;GAQG;AACH,qBA6Ta,mBAAmB;IACrB,IAAI,EAAG,UAAU,CAAC;IAClB,SAAS,EAAE,OAAO,CAAS;IAC3B,OAAO,EAAE,OAAO,CAAS;IACzB,YAAY,EAAE,OAAO,CAAQ;IAC7B,YAAY,EAAE,OAAO,CAAQ;IAC5B,SAAS,2BAAkC;IAErD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,WAAW,IAAI,IAAI;IAMnB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IA6BrC,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO;IAKxC,WAAW,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IA2BzD,cAAc,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;yCA/E/B,mBAAmB;2CAAnB,mBAAmB;CAoG/B"}