@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
@@ -1,8 +1,12 @@
1
- import { Component, Input } from '@angular/core';
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
2
  import { RunView } from '@memberjunction/core';
3
+ import { Subject } from 'rxjs';
4
+ import { takeUntil } from 'rxjs/operators';
3
5
  import * as i0 from "@angular/core";
4
6
  import * as i1 from "../../services/conversation-state.service";
5
- import * as i2 from "@angular/common";
7
+ import * as i2 from "../../services/active-tasks.service";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "./task-widget.component";
6
10
  function TasksDropdownComponent_span_5_Template(rf, ctx) { if (rf & 1) {
7
11
  i0.ɵɵelementStart(0, "span", 5);
8
12
  i0.ɵɵtext(1);
@@ -10,106 +14,148 @@ function TasksDropdownComponent_span_5_Template(rf, ctx) { if (rf & 1) {
10
14
  } if (rf & 2) {
11
15
  const ctx_r0 = i0.ɵɵnextContext();
12
16
  i0.ɵɵadvance();
13
- i0.ɵɵtextInterpolate(ctx_r0.taskCount);
17
+ i0.ɵɵtextInterpolate(ctx_r0.totalTaskCount);
14
18
  } }
15
- function TasksDropdownComponent_div_6_div_9_Template(rf, ctx) { if (rf & 1) {
16
- i0.ɵɵelementStart(0, "div", 14);
17
- i0.ɵɵelement(1, "i", 2);
18
- i0.ɵɵelementStart(2, "p");
19
- i0.ɵɵtext(3, "No active tasks");
20
- i0.ɵɵelementEnd()();
21
- } }
22
- function TasksDropdownComponent_div_6_div_10_span_6_Template(rf, ctx) { if (rf & 1) {
23
- i0.ɵɵelementStart(0, "span", 22);
24
- i0.ɵɵelement(1, "i", 23);
25
- i0.ɵɵtext(2);
19
+ function TasksDropdownComponent_div_6_div_9_div_5_Template(rf, ctx) { if (rf & 1) {
20
+ i0.ɵɵelementStart(0, "div", 18);
21
+ i0.ɵɵelement(1, "div", 19);
22
+ i0.ɵɵelementStart(2, "div", 20)(3, "div", 21);
23
+ i0.ɵɵelement(4, "i", 22);
24
+ i0.ɵɵtext(5);
25
+ i0.ɵɵelementEnd();
26
+ i0.ɵɵelementStart(6, "div", 23);
27
+ i0.ɵɵtext(7);
26
28
  i0.ɵɵelementEnd();
29
+ i0.ɵɵelementStart(8, "div", 24);
30
+ i0.ɵɵtext(9);
31
+ i0.ɵɵelementEnd()()();
27
32
  } if (rf & 2) {
28
- const task_r3 = i0.ɵɵnextContext().$implicit;
33
+ const task_r3 = ctx.$implicit;
34
+ const ctx_r0 = i0.ɵɵnextContext(3);
35
+ i0.ɵɵadvance(5);
36
+ i0.ɵɵtextInterpolate1(" ", task_r3.agentName, " ");
37
+ i0.ɵɵadvance(2);
38
+ i0.ɵɵtextInterpolate(ctx_r0.getTrimmedStatus(task_r3.status));
29
39
  i0.ɵɵadvance(2);
30
- i0.ɵɵtextInterpolate1(" ", task_r3.PercentComplete, "% ");
40
+ i0.ɵɵtextInterpolate(ctx_r0.getElapsedTime(task_r3));
31
41
  } }
32
- function TasksDropdownComponent_div_6_div_10_span_7_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵelementStart(0, "span", 24);
34
- i0.ɵɵelement(1, "i", 25);
35
- i0.ɵɵtext(2);
42
+ function TasksDropdownComponent_div_6_div_9_Template(rf, ctx) { if (rf & 1) {
43
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 15);
44
+ i0.ɵɵelement(2, "i", 16);
45
+ i0.ɵɵelementStart(3, "span");
46
+ i0.ɵɵtext(4);
47
+ i0.ɵɵelementEnd()();
48
+ i0.ɵɵtemplate(5, TasksDropdownComponent_div_6_div_9_div_5_Template, 10, 3, "div", 17);
36
49
  i0.ɵɵelementEnd();
37
50
  } if (rf & 2) {
38
- const task_r3 = i0.ɵɵnextContext().$implicit;
39
- i0.ɵɵadvance(2);
40
- i0.ɵɵtextInterpolate1(" ", task_r3.User, " ");
51
+ const ctx_r0 = i0.ɵɵnextContext(2);
52
+ i0.ɵɵadvance(4);
53
+ i0.ɵɵtextInterpolate1("Active (", ctx_r0.activeTasks.length, ")");
54
+ i0.ɵɵadvance();
55
+ i0.ɵɵproperty("ngForOf", ctx_r0.activeTasks);
41
56
  } }
42
- function TasksDropdownComponent_div_6_div_10_span_8_Template(rf, ctx) { if (rf & 1) {
43
- i0.ɵɵelementStart(0, "span", 24);
44
- i0.ɵɵelement(1, "i", 26);
45
- i0.ɵɵtext(2);
57
+ function TasksDropdownComponent_div_6_div_10_mj_task_widget_5_Template(rf, ctx) { if (rf & 1) {
58
+ const _r4 = i0.ɵɵgetCurrentView();
59
+ i0.ɵɵelementStart(0, "mj-task-widget", 27);
60
+ i0.ɵɵlistener("taskClick", function TasksDropdownComponent_div_6_div_10_mj_task_widget_5_Template_mj_task_widget_taskClick_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.onTaskClick($event)); });
46
61
  i0.ɵɵelementEnd();
47
62
  } if (rf & 2) {
48
- const task_r3 = i0.ɵɵnextContext().$implicit;
49
- i0.ɵɵadvance(2);
50
- i0.ɵɵtextInterpolate1(" ", task_r3.Agent, " ");
63
+ const task_r5 = ctx.$implicit;
64
+ i0.ɵɵproperty("task", task_r5)("compact", true)("clickable", true)("showProgress", true)("showDuration", false);
51
65
  } }
52
66
  function TasksDropdownComponent_div_6_div_10_Template(rf, ctx) { if (rf & 1) {
53
- i0.ɵɵelementStart(0, "div", 15);
54
- i0.ɵɵelement(1, "div", 16);
55
- i0.ɵɵelementStart(2, "div", 17)(3, "div", 18);
67
+ i0.ɵɵelementStart(0, "div", 14)(1, "div", 15);
68
+ i0.ɵɵelement(2, "i", 25);
69
+ i0.ɵɵelementStart(3, "span");
56
70
  i0.ɵɵtext(4);
71
+ i0.ɵɵelementEnd()();
72
+ i0.ɵɵtemplate(5, TasksDropdownComponent_div_6_div_10_mj_task_widget_5_Template, 1, 5, "mj-task-widget", 26);
57
73
  i0.ɵɵelementEnd();
58
- i0.ɵɵelementStart(5, "div", 19);
59
- i0.ɵɵtemplate(6, TasksDropdownComponent_div_6_div_10_span_6_Template, 3, 1, "span", 20)(7, TasksDropdownComponent_div_6_div_10_span_7_Template, 3, 1, "span", 21)(8, TasksDropdownComponent_div_6_div_10_span_8_Template, 3, 1, "span", 21);
60
- i0.ɵɵelementEnd()()();
61
74
  } if (rf & 2) {
62
- const task_r3 = ctx.$implicit;
75
+ const ctx_r0 = i0.ɵɵnextContext(2);
76
+ i0.ɵɵadvance(4);
77
+ i0.ɵɵtextInterpolate1("In Progress (", ctx_r0.dbTasks.length, ")");
63
78
  i0.ɵɵadvance();
64
- i0.ɵɵattribute("data-status", task_r3.Status);
65
- i0.ɵɵadvance(3);
66
- i0.ɵɵtextInterpolate(task_r3.Name);
67
- i0.ɵɵadvance(2);
68
- i0.ɵɵproperty("ngIf", task_r3.PercentComplete != null);
69
- i0.ɵɵadvance();
70
- i0.ɵɵproperty("ngIf", task_r3.User);
71
- i0.ɵɵadvance();
72
- i0.ɵɵproperty("ngIf", task_r3.Agent);
79
+ i0.ɵɵproperty("ngForOf", ctx_r0.dbTasks);
80
+ } }
81
+ function TasksDropdownComponent_div_6_div_11_Template(rf, ctx) { if (rf & 1) {
82
+ i0.ɵɵelementStart(0, "div", 28);
83
+ i0.ɵɵelement(1, "i", 2);
84
+ i0.ɵɵelementStart(2, "p");
85
+ i0.ɵɵtext(3, "No active tasks");
86
+ i0.ɵɵelementEnd()();
73
87
  } }
74
88
  function TasksDropdownComponent_div_6_Template(rf, ctx) { if (rf & 1) {
75
89
  const _r2 = i0.ɵɵgetCurrentView();
76
90
  i0.ɵɵelementStart(0, "div", 6)(1, "div", 7)(2, "div", 8);
77
91
  i0.ɵɵelement(3, "i", 2);
78
92
  i0.ɵɵelementStart(4, "span");
79
- i0.ɵɵtext(5, "Active Tasks");
93
+ i0.ɵɵtext(5, "Tasks");
80
94
  i0.ɵɵelementEnd()();
81
95
  i0.ɵɵelementStart(6, "button", 9);
82
96
  i0.ɵɵlistener("click", function TasksDropdownComponent_div_6_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.closeDropdown()); });
83
97
  i0.ɵɵelement(7, "i", 10);
84
98
  i0.ɵɵelementEnd()();
85
99
  i0.ɵɵelementStart(8, "div", 11);
86
- i0.ɵɵtemplate(9, TasksDropdownComponent_div_6_div_9_Template, 4, 0, "div", 12)(10, TasksDropdownComponent_div_6_div_10_Template, 9, 5, "div", 13);
100
+ i0.ɵɵtemplate(9, TasksDropdownComponent_div_6_div_9_Template, 6, 2, "div", 12)(10, TasksDropdownComponent_div_6_div_10_Template, 6, 2, "div", 12)(11, TasksDropdownComponent_div_6_div_11_Template, 4, 0, "div", 13);
87
101
  i0.ɵɵelementEnd()();
88
102
  } if (rf & 2) {
89
103
  const ctx_r0 = i0.ɵɵnextContext();
90
104
  i0.ɵɵadvance(9);
91
- i0.ɵɵproperty("ngIf", ctx_r0.tasks.length === 0);
105
+ i0.ɵɵproperty("ngIf", ctx_r0.activeTasks.length > 0);
106
+ i0.ɵɵadvance();
107
+ i0.ɵɵproperty("ngIf", ctx_r0.dbTasks.length > 0);
92
108
  i0.ɵɵadvance();
93
- i0.ɵɵproperty("ngForOf", ctx_r0.tasks);
109
+ i0.ɵɵproperty("ngIf", ctx_r0.activeTasks.length === 0 && ctx_r0.dbTasks.length === 0);
94
110
  } }
95
111
  /**
96
- * Tasks dropdown component for chat header
97
- * Displays active tasks from the current conversation
112
+ * Enhanced tasks dropdown component for chat header.
113
+ * Shows both:
114
+ * 1. Active (running) tasks from ActiveTasksService
115
+ * 2. Database tasks for the current conversation
98
116
  */
99
117
  export class TasksDropdownComponent {
100
118
  conversationState;
119
+ activeTasksService;
101
120
  currentUser;
121
+ taskClicked = new EventEmitter();
102
122
  isOpen = false;
103
- tasks = [];
104
- taskCount = 0;
123
+ activeTasks = [];
124
+ dbTasks = [];
125
+ totalTaskCount = 0;
105
126
  previousConversationId = null;
106
- constructor(conversationState) {
127
+ destroy$ = new Subject();
128
+ pollingInterval = null;
129
+ constructor(conversationState, activeTasksService) {
107
130
  this.conversationState = conversationState;
131
+ this.activeTasksService = activeTasksService;
108
132
  }
109
133
  ngOnInit() {
134
+ // Subscribe to active tasks from the service
135
+ this.activeTasksService.tasks$
136
+ .pipe(takeUntil(this.destroy$))
137
+ .subscribe(tasks => {
138
+ this.activeTasks = tasks;
139
+ this.updateTotalCount();
140
+ });
110
141
  // Initial load if there's an active conversation
111
142
  if (this.conversationState.activeConversationId) {
112
- this.loadTasks();
143
+ this.loadDatabaseTasks();
144
+ }
145
+ // Poll for task updates every 3 seconds when conversation is active
146
+ this.startPolling();
147
+ }
148
+ startPolling() {
149
+ this.pollingInterval = setInterval(() => {
150
+ if (this.conversationState.activeConversationId) {
151
+ this.loadDatabaseTasks();
152
+ }
153
+ }, 3000); // Poll every 3 seconds
154
+ }
155
+ stopPolling() {
156
+ if (this.pollingInterval) {
157
+ clearInterval(this.pollingInterval);
158
+ this.pollingInterval = null;
113
159
  }
114
160
  }
115
161
  ngDoCheck() {
@@ -118,24 +164,33 @@ export class TasksDropdownComponent {
118
164
  if (currentId !== this.previousConversationId) {
119
165
  this.previousConversationId = currentId;
120
166
  if (currentId) {
121
- this.loadTasks();
167
+ this.loadDatabaseTasks();
122
168
  }
123
169
  else {
124
- this.tasks = [];
125
- this.taskCount = 0;
170
+ this.dbTasks = [];
171
+ this.updateTotalCount();
126
172
  }
127
173
  }
128
174
  }
129
175
  ngOnDestroy() {
130
- // Cleanup if needed
176
+ this.stopPolling();
177
+ this.destroy$.next();
178
+ this.destroy$.complete();
131
179
  }
132
180
  toggleDropdown() {
133
181
  this.isOpen = !this.isOpen;
182
+ if (this.isOpen) {
183
+ // Refresh database tasks when opening
184
+ this.loadDatabaseTasks();
185
+ }
134
186
  }
135
187
  closeDropdown() {
136
188
  this.isOpen = false;
137
189
  }
138
- async loadTasks() {
190
+ updateTotalCount() {
191
+ this.totalTaskCount = this.activeTasks.length + this.dbTasks.length;
192
+ }
193
+ async loadDatabaseTasks() {
139
194
  const activeId = this.conversationState.activeConversationId;
140
195
  if (!activeId) {
141
196
  return;
@@ -150,31 +205,52 @@ export class TasksDropdownComponent {
150
205
  ResultType: 'entity_object'
151
206
  }, this.currentUser);
152
207
  if (!detailsResult.Success || !detailsResult.Results || detailsResult.Results.length === 0) {
153
- this.tasks = [];
154
- this.taskCount = 0;
208
+ this.dbTasks = [];
209
+ this.updateTotalCount();
155
210
  return;
156
211
  }
157
212
  // Get all conversation detail IDs
158
213
  const detailIds = detailsResult.Results.map(d => `'${d.ID}'`).join(',');
159
- // Load tasks for these conversation details
214
+ // Load tasks for these conversation details (only top-level active ones)
160
215
  const result = await rv.RunView({
161
216
  EntityName: 'MJ: Tasks',
162
- ExtraFilter: `ConversationDetailID IN (${detailIds}) AND Status IN ('Pending', 'In Progress')`,
217
+ ExtraFilter: `ConversationDetailID IN (${detailIds}) AND Status IN ('Pending', 'In Progress') AND ParentID IS NULL`,
163
218
  OrderBy: '__mj_CreatedAt DESC',
164
219
  MaxRows: 50,
165
220
  ResultType: 'entity_object'
166
221
  }, this.currentUser);
167
222
  if (result.Success) {
168
- this.tasks = result.Results || [];
169
- this.taskCount = this.tasks.length;
223
+ this.dbTasks = result.Results || [];
224
+ this.updateTotalCount();
170
225
  }
171
226
  }
172
227
  catch (error) {
173
- console.error('Failed to load tasks:', error);
228
+ console.error('Failed to load database tasks:', error);
229
+ }
230
+ }
231
+ getElapsedTime(task) {
232
+ const elapsed = Date.now() - task.startTime;
233
+ const seconds = Math.floor(elapsed / 1000);
234
+ if (seconds < 60) {
235
+ return `${seconds}s`;
174
236
  }
237
+ const minutes = Math.floor(seconds / 60);
238
+ const remainingSeconds = seconds % 60;
239
+ return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
240
+ }
241
+ getTrimmedStatus(status) {
242
+ const maxLength = 60;
243
+ if (status.length <= maxLength) {
244
+ return status;
245
+ }
246
+ return status.substring(0, maxLength) + '...';
247
+ }
248
+ onTaskClick(task) {
249
+ this.taskClicked.emit(task);
250
+ this.closeDropdown();
175
251
  }
176
- static ɵfac = function TasksDropdownComponent_Factory(t) { return new (t || TasksDropdownComponent)(i0.ɵɵdirectiveInject(i1.ConversationStateService)); };
177
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TasksDropdownComponent, selectors: [["mj-tasks-dropdown"]], inputs: { currentUser: "currentUser" }, decls: 7, vars: 4, consts: [[1, "tasks-dropdown-container"], ["title", "View active tasks", 1, "active-tasks-btn", 3, "click"], [1, "fas", "fa-tasks"], ["class", "task-count-badge", 4, "ngIf"], ["class", "active-tasks-dropdown", 4, "ngIf"], [1, "task-count-badge"], [1, "active-tasks-dropdown"], [1, "dropdown-header"], [1, "header-left"], [1, "close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "dropdown-content"], ["class", "no-tasks", 4, "ngIf"], ["class", "task-item", 4, "ngFor", "ngForOf"], [1, "no-tasks"], [1, "task-item"], [1, "task-status"], [1, "task-content"], [1, "task-title"], [1, "task-meta"], ["class", "task-progress", 4, "ngIf"], ["class", "task-assigned", 4, "ngIf"], [1, "task-progress"], [1, "fas", "fa-chart-line"], [1, "task-assigned"], [1, "fas", "fa-user"], [1, "fas", "fa-robot"]], template: function TasksDropdownComponent_Template(rf, ctx) { if (rf & 1) {
252
+ static ɵfac = function TasksDropdownComponent_Factory(t) { return new (t || TasksDropdownComponent)(i0.ɵɵdirectiveInject(i1.ConversationStateService), i0.ɵɵdirectiveInject(i2.ActiveTasksService)); };
253
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TasksDropdownComponent, selectors: [["mj-tasks-dropdown"]], inputs: { currentUser: "currentUser" }, outputs: { taskClicked: "taskClicked" }, decls: 7, vars: 4, consts: [[1, "tasks-dropdown-container"], ["title", "View tasks", 1, "active-tasks-btn", 3, "click"], [1, "fas", "fa-tasks"], ["class", "task-count-badge", 4, "ngIf"], ["class", "active-tasks-dropdown", 4, "ngIf"], [1, "task-count-badge"], [1, "active-tasks-dropdown"], [1, "dropdown-header"], [1, "header-left"], [1, "close-btn", 3, "click"], [1, "fas", "fa-times"], [1, "dropdown-content"], ["class", "section", 4, "ngIf"], ["class", "no-tasks", 4, "ngIf"], [1, "section"], [1, "section-header"], [1, "fas", "fa-circle-notch", "fa-spin"], ["class", "active-task-item", 4, "ngFor", "ngForOf"], [1, "active-task-item"], [1, "task-status-indicator", "active"], [1, "task-content"], [1, "task-title"], [1, "fas", "fa-robot"], [1, "task-status-text"], [1, "task-elapsed"], [1, "fas", "fa-list-check"], [3, "task", "compact", "clickable", "showProgress", "showDuration", "taskClick", 4, "ngFor", "ngForOf"], [3, "taskClick", "task", "compact", "clickable", "showProgress", "showDuration"], [1, "no-tasks"]], template: function TasksDropdownComponent_Template(rf, ctx) { if (rf & 1) {
178
254
  i0.ɵɵelementStart(0, "div", 0)(1, "button", 1);
179
255
  i0.ɵɵlistener("click", function TasksDropdownComponent_Template_button_click_1_listener() { return ctx.toggleDropdown(); });
180
256
  i0.ɵɵelement(2, "i", 2);
@@ -183,16 +259,16 @@ export class TasksDropdownComponent {
183
259
  i0.ɵɵelementEnd();
184
260
  i0.ɵɵtemplate(5, TasksDropdownComponent_span_5_Template, 2, 1, "span", 3);
185
261
  i0.ɵɵelementEnd();
186
- i0.ɵɵtemplate(6, TasksDropdownComponent_div_6_Template, 11, 2, "div", 4);
262
+ i0.ɵɵtemplate(6, TasksDropdownComponent_div_6_Template, 12, 3, "div", 4);
187
263
  i0.ɵɵelementEnd();
188
264
  } if (rf & 2) {
189
265
  i0.ɵɵadvance();
190
266
  i0.ɵɵclassProp("active", ctx.isOpen);
191
267
  i0.ɵɵadvance(4);
192
- i0.ɵɵproperty("ngIf", ctx.taskCount > 0);
268
+ i0.ɵɵproperty("ngIf", ctx.totalTaskCount > 0);
193
269
  i0.ɵɵadvance();
194
270
  i0.ɵɵproperty("ngIf", ctx.isOpen);
195
- } }, dependencies: [i2.NgForOf, i2.NgIf], styles: [".tasks-dropdown-container[_ngcontent-%COMP%] {\n position: relative;\n }\n\n .active-tasks-btn[_ngcontent-%COMP%] {\n background: var(--gray-700, #374151);\n color: white;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n display: flex;\n align-items: center;\n gap: 6px;\n border: 1px solid #E5E7EB;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .active-tasks-btn[_ngcontent-%COMP%]:hover {\n background: var(--gray-600, #4B5563);\n }\n\n .active-tasks-btn.active[_ngcontent-%COMP%] {\n background: var(--navy, #1e40af);\n }\n\n .task-count-badge[_ngcontent-%COMP%] {\n background: var(--navy, #1e40af);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: bold;\n min-width: 18px;\n text-align: center;\n }\n\n .active-tasks-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n z-index: 1000;\n min-width: 400px;\n max-width: 500px;\n }\n\n .dropdown-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid #E5E7EB;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #111827;\n }\n\n .header-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent, #1e40af);\n }\n\n .close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #6B7280;\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n }\n\n .close-btn[_ngcontent-%COMP%]:hover {\n background: #F3F4F6;\n color: #111827;\n }\n\n .dropdown-content[_ngcontent-%COMP%] {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n }\n\n .no-tasks[_ngcontent-%COMP%] {\n padding: 32px 16px;\n text-align: center;\n color: #9CA3AF;\n }\n\n .no-tasks[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n }\n\n .no-tasks[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n }\n\n .task-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 6px;\n margin-bottom: 4px;\n cursor: pointer;\n transition: background 150ms ease;\n }\n\n .task-item[_ngcontent-%COMP%]:hover {\n background: #F9FAFB;\n }\n\n .task-status[_ngcontent-%COMP%] {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-top: 6px;\n flex-shrink: 0;\n }\n\n .task-status[data-status=\"Pending\"][_ngcontent-%COMP%] {\n background: #9CA3AF;\n }\n\n .task-status[data-status=\"In Progress\"][_ngcontent-%COMP%] {\n background: #3B82F6;\n }\n\n .task-status[data-status=\"Complete\"][_ngcontent-%COMP%] {\n background: #10B981;\n }\n\n .task-status[data-status=\"Blocked\"][_ngcontent-%COMP%] {\n background: #EF4444;\n }\n\n .task-status[data-status=\"Failed\"][_ngcontent-%COMP%] {\n background: #DC2626;\n }\n\n .task-status[data-status=\"Cancelled\"][_ngcontent-%COMP%], .task-status[data-status=\"Deferred\"][_ngcontent-%COMP%] {\n background: #6B7280;\n }\n\n .task-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n\n .task-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: #111827;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .task-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n }\n\n .task-progress[_ngcontent-%COMP%], .task-assigned[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .task-progress[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .task-assigned[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n }"] });
271
+ } }, dependencies: [i3.NgForOf, i3.NgIf, i4.TaskWidgetComponent], styles: [".tasks-dropdown-container[_ngcontent-%COMP%] {\n position: relative;\n }\n\n .active-tasks-btn[_ngcontent-%COMP%] {\n background: var(--gray-700, #374151);\n color: white;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n display: flex;\n align-items: center;\n gap: 6px;\n border: 1px solid #E5E7EB;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .active-tasks-btn[_ngcontent-%COMP%]:hover {\n background: var(--gray-600, #4B5563);\n }\n\n .active-tasks-btn.active[_ngcontent-%COMP%] {\n background: var(--navy, #1e40af);\n }\n\n .task-count-badge[_ngcontent-%COMP%] {\n background: var(--navy, #1e40af);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: bold;\n min-width: 18px;\n text-align: center;\n }\n\n .active-tasks-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n z-index: 1000;\n min-width: 400px;\n max-width: 500px;\n }\n\n .dropdown-header[_ngcontent-%COMP%] {\n padding: 12px 16px;\n border-bottom: 1px solid #E5E7EB;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #111827;\n }\n\n .header-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent, #1e40af);\n }\n\n .close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n color: #6B7280;\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n }\n\n .close-btn[_ngcontent-%COMP%]:hover {\n background: #F3F4F6;\n color: #111827;\n }\n\n .dropdown-content[_ngcontent-%COMP%] {\n max-height: 500px;\n overflow-y: auto;\n }\n\n .section[_ngcontent-%COMP%] {\n padding: 12px;\n border-bottom: 1px solid #F3F4F6;\n }\n\n .section[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n }\n\n .section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6B7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 12px;\n padding: 0 4px;\n }\n\n .section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n }\n\n .active-task-item[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n padding: 10px 12px;\n border-radius: 6px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n margin-bottom: 8px;\n }\n\n .active-task-item[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\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.active[_ngcontent-%COMP%] {\n background: #3B82F6;\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .task-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .task-title[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .task-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3B82F6;\n font-size: 12px;\n }\n\n .task-status-text[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6B7280;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .task-elapsed[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #3B82F6;\n font-weight: 600;\n }\n\n .no-tasks[_ngcontent-%COMP%] {\n padding: 40px 16px;\n text-align: center;\n color: #9CA3AF;\n }\n\n .no-tasks[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n }\n\n .no-tasks[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n }\n\n mj-task-widget[_ngcontent-%COMP%] {\n display: block;\n margin-bottom: 8px;\n }\n\n mj-task-widget[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n }"] });
196
272
  }
197
273
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TasksDropdownComponent, [{
198
274
  type: Component,
@@ -202,53 +278,73 @@ export class TasksDropdownComponent {
202
278
  class="active-tasks-btn"
203
279
  (click)="toggleDropdown()"
204
280
  [class.active]="isOpen"
205
- title="View active tasks">
281
+ title="View tasks">
206
282
  <i class="fas fa-tasks"></i>
207
283
  <span>Tasks</span>
208
- <span class="task-count-badge" *ngIf="taskCount > 0">{{ taskCount }}</span>
284
+ <span class="task-count-badge" *ngIf="totalTaskCount > 0">{{ totalTaskCount }}</span>
209
285
  </button>
210
286
 
211
287
  <div class="active-tasks-dropdown" *ngIf="isOpen">
212
288
  <div class="dropdown-header">
213
289
  <div class="header-left">
214
290
  <i class="fas fa-tasks"></i>
215
- <span>Active Tasks</span>
291
+ <span>Tasks</span>
216
292
  </div>
217
293
  <button class="close-btn" (click)="closeDropdown()">
218
294
  <i class="fas fa-times"></i>
219
295
  </button>
220
296
  </div>
297
+
221
298
  <div class="dropdown-content">
222
- <div *ngIf="tasks.length === 0" class="no-tasks">
223
- <i class="fas fa-tasks"></i>
224
- <p>No active tasks</p>
225
- </div>
226
- <div *ngFor="let task of tasks" class="task-item">
227
- <div class="task-status" [attr.data-status]="task.Status"></div>
228
- <div class="task-content">
229
- <div class="task-title">{{ task.Name }}</div>
230
- <div class="task-meta">
231
- <span class="task-progress" *ngIf="task.PercentComplete != null">
232
- <i class="fas fa-chart-line"></i>
233
- {{ task.PercentComplete }}%
234
- </span>
235
- <span class="task-assigned" *ngIf="task.User">
236
- <i class="fas fa-user"></i>
237
- {{ task.User }}
238
- </span>
239
- <span class="task-assigned" *ngIf="task.Agent">
299
+ <!-- Active Running Tasks Section -->
300
+ <div class="section" *ngIf="activeTasks.length > 0">
301
+ <div class="section-header">
302
+ <i class="fas fa-circle-notch fa-spin"></i>
303
+ <span>Active ({{ activeTasks.length }})</span>
304
+ </div>
305
+ <div class="active-task-item" *ngFor="let task of activeTasks">
306
+ <div class="task-status-indicator active"></div>
307
+ <div class="task-content">
308
+ <div class="task-title">
240
309
  <i class="fas fa-robot"></i>
241
- {{ task.Agent }}
242
- </span>
310
+ {{ task.agentName }}
311
+ </div>
312
+ <div class="task-status-text">{{ getTrimmedStatus(task.status) }}</div>
313
+ <div class="task-elapsed">{{ getElapsedTime(task) }}</div>
243
314
  </div>
244
315
  </div>
245
316
  </div>
317
+
318
+ <!-- Database Tasks Section -->
319
+ <div class="section" *ngIf="dbTasks.length > 0">
320
+ <div class="section-header">
321
+ <i class="fas fa-list-check"></i>
322
+ <span>In Progress ({{ dbTasks.length }})</span>
323
+ </div>
324
+ <mj-task-widget
325
+ *ngFor="let task of dbTasks"
326
+ [task]="task"
327
+ [compact]="true"
328
+ [clickable]="true"
329
+ [showProgress]="true"
330
+ [showDuration]="false"
331
+ (taskClick)="onTaskClick($event)">
332
+ </mj-task-widget>
333
+ </div>
334
+
335
+ <!-- No Tasks State -->
336
+ <div *ngIf="activeTasks.length === 0 && dbTasks.length === 0" class="no-tasks">
337
+ <i class="fas fa-tasks"></i>
338
+ <p>No active tasks</p>
339
+ </div>
246
340
  </div>
247
341
  </div>
248
342
  </div>
249
- `, styles: ["\n .tasks-dropdown-container {\n position: relative;\n }\n\n .active-tasks-btn {\n background: var(--gray-700, #374151);\n color: white;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n display: flex;\n align-items: center;\n gap: 6px;\n border: 1px solid #E5E7EB;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .active-tasks-btn:hover {\n background: var(--gray-600, #4B5563);\n }\n\n .active-tasks-btn.active {\n background: var(--navy, #1e40af);\n }\n\n .task-count-badge {\n background: var(--navy, #1e40af);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: bold;\n min-width: 18px;\n text-align: center;\n }\n\n .active-tasks-dropdown {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n z-index: 1000;\n min-width: 400px;\n max-width: 500px;\n }\n\n .dropdown-header {\n padding: 12px 16px;\n border-bottom: 1px solid #E5E7EB;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #111827;\n }\n\n .header-left i {\n color: var(--accent, #1e40af);\n }\n\n .close-btn {\n background: none;\n border: none;\n color: #6B7280;\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n }\n\n .close-btn:hover {\n background: #F3F4F6;\n color: #111827;\n }\n\n .dropdown-content {\n max-height: 400px;\n overflow-y: auto;\n padding: 8px;\n }\n\n .no-tasks {\n padding: 32px 16px;\n text-align: center;\n color: #9CA3AF;\n }\n\n .no-tasks i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n }\n\n .no-tasks p {\n margin: 0;\n font-size: 14px;\n }\n\n .task-item {\n display: flex;\n gap: 12px;\n padding: 12px;\n border-radius: 6px;\n margin-bottom: 4px;\n cursor: pointer;\n transition: background 150ms ease;\n }\n\n .task-item:hover {\n background: #F9FAFB;\n }\n\n .task-status {\n width: 8px;\n height: 8px;\n border-radius: 50%;\n margin-top: 6px;\n flex-shrink: 0;\n }\n\n .task-status[data-status=\"Pending\"] {\n background: #9CA3AF;\n }\n\n .task-status[data-status=\"In Progress\"] {\n background: #3B82F6;\n }\n\n .task-status[data-status=\"Complete\"] {\n background: #10B981;\n }\n\n .task-status[data-status=\"Blocked\"] {\n background: #EF4444;\n }\n\n .task-status[data-status=\"Failed\"] {\n background: #DC2626;\n }\n\n .task-status[data-status=\"Cancelled\"], .task-status[data-status=\"Deferred\"] {\n background: #6B7280;\n }\n\n .task-content {\n flex: 1;\n min-width: 0;\n }\n\n .task-title {\n font-size: 14px;\n font-weight: 500;\n color: #111827;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .task-meta {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n }\n\n .task-progress, .task-assigned {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .task-progress i, .task-assigned i {\n font-size: 10px;\n }\n "] }]
250
- }], () => [{ type: i1.ConversationStateService }], { currentUser: [{
343
+ `, styles: ["\n .tasks-dropdown-container {\n position: relative;\n }\n\n .active-tasks-btn {\n background: var(--gray-700, #374151);\n color: white;\n padding: 6px 12px;\n border-radius: 6px;\n font-size: 13px;\n display: flex;\n align-items: center;\n gap: 6px;\n border: 1px solid #E5E7EB;\n cursor: pointer;\n transition: all 150ms ease;\n }\n\n .active-tasks-btn:hover {\n background: var(--gray-600, #4B5563);\n }\n\n .active-tasks-btn.active {\n background: var(--navy, #1e40af);\n }\n\n .task-count-badge {\n background: var(--navy, #1e40af);\n color: white;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: bold;\n min-width: 18px;\n text-align: center;\n }\n\n .active-tasks-dropdown {\n position: absolute;\n top: calc(100% + 8px);\n right: 0;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n z-index: 1000;\n min-width: 400px;\n max-width: 500px;\n }\n\n .dropdown-header {\n padding: 12px 16px;\n border-bottom: 1px solid #E5E7EB;\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n color: #111827;\n }\n\n .header-left i {\n color: var(--accent, #1e40af);\n }\n\n .close-btn {\n background: none;\n border: none;\n color: #6B7280;\n cursor: pointer;\n font-size: 18px;\n padding: 0;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 4px;\n }\n\n .close-btn:hover {\n background: #F3F4F6;\n color: #111827;\n }\n\n .dropdown-content {\n max-height: 500px;\n overflow-y: auto;\n }\n\n .section {\n padding: 12px;\n border-bottom: 1px solid #F3F4F6;\n }\n\n .section:last-child {\n border-bottom: none;\n }\n\n .section-header {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6B7280;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 12px;\n padding: 0 4px;\n }\n\n .section-header i {\n font-size: 11px;\n }\n\n .active-task-item {\n display: flex;\n gap: 12px;\n padding: 10px 12px;\n border-radius: 6px;\n background: #F9FAFB;\n border: 1px solid #E5E7EB;\n margin-bottom: 8px;\n }\n\n .active-task-item:last-child {\n margin-bottom: 0;\n }\n\n .task-status-indicator {\n width: 4px;\n border-radius: 2px;\n flex-shrink: 0;\n }\n\n .task-status-indicator.active {\n background: #3B82F6;\n animation: pulse 2s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .task-content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n }\n\n .task-title {\n font-size: 14px;\n font-weight: 600;\n color: #111827;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .task-title i {\n color: #3B82F6;\n font-size: 12px;\n }\n\n .task-status-text {\n font-size: 12px;\n color: #6B7280;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .task-elapsed {\n font-size: 11px;\n color: #3B82F6;\n font-weight: 600;\n }\n\n .no-tasks {\n padding: 40px 16px;\n text-align: center;\n color: #9CA3AF;\n }\n\n .no-tasks i {\n font-size: 32px;\n margin-bottom: 8px;\n opacity: 0.5;\n }\n\n .no-tasks p {\n margin: 0;\n font-size: 14px;\n }\n\n mj-task-widget {\n display: block;\n margin-bottom: 8px;\n }\n\n mj-task-widget:last-child {\n margin-bottom: 0;\n }\n "] }]
344
+ }], () => [{ type: i1.ConversationStateService }, { type: i2.ActiveTasksService }], { currentUser: [{
251
345
  type: Input
346
+ }], taskClicked: [{
347
+ type: Output
252
348
  }] }); })();
253
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TasksDropdownComponent, { className: "TasksDropdownComponent", filePath: "src/lib/components/tasks/tasks-dropdown.component.ts", lineNumber: 256 }); })();
349
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(TasksDropdownComponent, { className: "TasksDropdownComponent", filePath: "src/lib/components/tasks/tasks-dropdown.component.ts", lineNumber: 301 }); })();
254
350
  //# sourceMappingURL=tasks-dropdown.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks-dropdown.component.js","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks-dropdown.component.js","sourceRoot":"","sources":["../../../../src/lib/components/tasks/tasks-dropdown.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAA8B,MAAM,eAAe,CAAC;AACnG,OAAO,EAAY,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAIzD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;;;;;;;IAmBnC,+BAA0D;IAAA,YAAoB;IAAA,iBAAO;;;IAA3B,cAAoB;IAApB,2CAAoB;;;IAqB1E,+BAA+D;IAC7D,0BAAgD;IAE9C,AADF,+BAA0B,cACA;IACtB,wBAA4B;IAC5B,YACF;IAAA,iBAAM;IACN,+BAA8B;IAAA,YAAmC;IAAA,iBAAM;IACvE,+BAA0B;IAAA,YAA0B;IAExD,AADE,AADsD,iBAAM,EACtD,EACF;;;;IALA,eACF;IADE,kDACF;IAC8B,eAAmC;IAAnC,6DAAmC;IACvC,eAA0B;IAA1B,oDAA0B;;;IAZxD,AADF,+BAAoD,cACtB;IAC1B,wBAA2C;IAC3C,4BAAM;IAAA,YAAiC;IACzC,AADyC,iBAAO,EAC1C;IACN,qFAA+D;IAWjE,iBAAM;;;IAbI,eAAiC;IAAjC,iEAAiC;IAEM,cAAc;IAAd,4CAAc;;;;IAmB7D,0CAOoC;IAAlC,iOAAa,0BAAmB,KAAC;IACnC,iBAAiB;;;IAFf,AADA,AADA,AADA,AADA,8BAAa,iBACG,mBACE,sBACG,uBACC;;;IAVxB,AADF,+BAAgD,cAClB;IAC1B,wBAAiC;IACjC,4BAAM;IAAA,YAAkC;IAC1C,AAD0C,iBAAO,EAC3C;IACN,2GAOoC;IAEtC,iBAAM;;;IAXI,eAAkC;IAAlC,kEAAkC;IAGvB,cAAU;IAAV,wCAAU;;;IAW/B,+BAA+E;IAC7E,uBAA4B;IAC5B,yBAAG;IAAA,+BAAe;IACpB,AADoB,iBAAI,EAClB;;;;IAlDN,AADF,AADF,8BAAkD,aACnB,aACF;IACvB,uBAA4B;IAC5B,4BAAM;IAAA,qBAAK;IACb,AADa,iBAAO,EACd;IACN,iCAAoD;IAA1B,kLAAS,sBAAe,KAAC;IACjD,wBAA4B;IAEhC,AADE,iBAAS,EACL;IAEN,+BAA8B;IAsC5B,AAjBA,AAnBA,8EAAoD,mEAmBJ,mEAiB+B;IAKnF,AADE,iBAAM,EACF;;;IAzCoB,eAA4B;IAA5B,oDAA4B;IAmB5B,cAAwB;IAAxB,gDAAwB;IAiBxC,cAAsD;IAAtD,qFAAsD;;AArEtE;;;;;GAKG;AA+RH,MAAM,OAAO,sBAAsB;IAcvB;IACA;IAdD,WAAW,CAAY;IACtB,WAAW,GAAG,IAAI,YAAY,EAAc,CAAC;IAEhD,MAAM,GAAY,KAAK,CAAC;IACxB,WAAW,GAAiB,EAAE,CAAC;IAC/B,OAAO,GAAiB,EAAE,CAAC;IAC3B,cAAc,GAAW,CAAC,CAAC;IAE1B,sBAAsB,GAAkB,IAAI,CAAC;IAC7C,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;IAC/B,eAAe,GAAQ,IAAI,CAAC;IAEpC,YACU,iBAA2C,EAC3C,kBAAsC;QADtC,sBAAiB,GAAjB,iBAAiB,CAA0B;QAC3C,uBAAkB,GAAlB,kBAAkB,CAAoB;IAC7C,CAAC;IAEJ,QAAQ;QACN,6CAA6C;QAC7C,IAAI,CAAC,kBAAkB,CAAC,MAAM;aAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC9B,SAAS,CAAC,KAAK,CAAC,EAAE;YACjB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEL,iDAAiD;QACjD,IAAI,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;YAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;QAED,oEAAoE;QACpE,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,IAAI,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;gBAChD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,uBAAuB;IACnC,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,SAAS;QACP,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;QAC9D,IAAI,SAAS,KAAK,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9C,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;YACxC,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,sCAAsC;YACtC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,aAAa;QACX,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACtE,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,CAAC;QAC7D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;YAEzB,uDAAuD;YACvD,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,OAAO,CACpC;gBACE,UAAU,EAAE,sBAAsB;gBAClC,WAAW,EAAE,mBAAmB,QAAQ,GAAG;gBAC3C,OAAO,EAAE,oBAAoB;gBAC7B,UAAU,EAAE,eAAe;aAC5B,EACD,IAAI,CAAC,WAAW,CACjB,CAAC;YAEF,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3F,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;gBAClB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,kCAAkC;YAClC,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAExE,yEAAyE;YACzE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAC7B;gBACE,UAAU,EAAE,WAAW;gBACvB,WAAW,EAAE,4BAA4B,SAAS,iEAAiE;gBACnH,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,EAAE;gBACX,UAAU,EAAE,eAAe;aAC5B,EACD,IAAI,CAAC,WAAW,CACjB,CAAC;YAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;gBACpC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,cAAc,CAAC,IAAgB;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAE3C,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,GAAG,CAAC;QACvB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,gBAAgB,GAAG,OAAO,GAAG,EAAE,CAAC;QACtC,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACtE,CAAC;IAED,gBAAgB,CAAC,MAAc;QAC7B,MAAM,SAAS,GAAG,EAAE,CAAC;QACrB,IAAI,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC;IAChD,CAAC;IAED,WAAW,CAAC,IAAgB;QAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;gFAjKU,sBAAsB;6DAAtB,sBAAsB;YA1R7B,AADF,8BAAsC,gBAKf;YAFnB,mGAAS,oBAAgB,IAAC;YAG1B,uBAA4B;YAC5B,4BAAM;YAAA,qBAAK;YAAA,iBAAO;YAClB,yEAA0D;YAC5D,iBAAS;YAET,wEAAkD;YAuDpD,iBAAM;;YA9DF,cAAuB;YAAvB,oCAAuB;YAIS,eAAwB;YAAxB,6CAAwB;YAGtB,cAAY;YAAZ,iCAAY;;;iFAgRzC,sBAAsB;cA9RlC,SAAS;2BACE,mBAAmB,YACnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoET;0FAyNQ,WAAW;kBAAnB,KAAK;YACI,WAAW;kBAApB,MAAM;;kFAFI,sBAAsB"}
@@ -1,12 +1,14 @@
1
1
  import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
2
  import { ConversationDetailEntity } from '@memberjunction/core-entities';
3
3
  import { UserInfo } from '@memberjunction/core';
4
+ import { DataCacheService } from '../../services/data-cache.service';
4
5
  import * as i0 from "@angular/core";
5
6
  /**
6
7
  * Side panel component for displaying and managing threaded message replies
7
8
  * Shows parent message at top with all replies in chronological order
8
9
  */
9
10
  export declare class ThreadPanelComponent implements OnInit, OnDestroy {
11
+ private dataCache;
10
12
  private cdRef;
11
13
  parentMessageId: string;
12
14
  conversationId: string;
@@ -20,7 +22,7 @@ export declare class ThreadPanelComponent implements OnInit, OnDestroy {
20
22
  isSending: boolean;
21
23
  errorMessage: string;
22
24
  private destroy$;
23
- constructor(cdRef: ChangeDetectorRef);
25
+ constructor(dataCache: DataCacheService, cdRef: ChangeDetectorRef);
24
26
  ngOnInit(): Promise<void>;
25
27
  ngOnDestroy(): void;
26
28
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"thread-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/thread/thread-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;;AAInE;;;GAGG;AACH,qBAKa,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAiBhD,OAAO,CAAC,KAAK;IAhBhB,eAAe,EAAG,MAAM,CAAC;IACzB,cAAc,EAAG,MAAM,CAAC;IACxB,WAAW,EAAG,QAAQ,CAAC;IAEtB,MAAM,qBAA4B;IAClC,UAAU,yCAAgD;IAE7D,aAAa,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IACtD,OAAO,EAAE,wBAAwB,EAAE,CAAM;IACzC,SAAS,EAAE,MAAM,CAAM;IACvB,SAAS,EAAE,OAAO,CAAS;IAC3B,SAAS,EAAE,OAAO,CAAS;IAC3B,YAAY,EAAE,MAAM,CAAM;IAEjC,OAAO,CAAC,QAAQ,CAAuB;gBAEnB,KAAK,EAAE,iBAAiB;IAEtC,QAAQ;IAId,WAAW;IAKX;;OAEG;YACW,cAAc;IA6B5B;;OAEG;YACW,WAAW;IAyBzB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA4ClC;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAIzD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAkBzD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAKxD;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAG3B;yCA/LU,oBAAoB;2CAApB,oBAAoB;CAgMhC"}
1
+ {"version":3,"file":"thread-panel.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/thread/thread-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC7G,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;;AAIrE;;;GAGG;AACH,qBAKa,oBAAqB,YAAW,MAAM,EAAE,SAAS;IAkB1D,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IAlBN,eAAe,EAAG,MAAM,CAAC;IACzB,cAAc,EAAG,MAAM,CAAC;IACxB,WAAW,EAAG,QAAQ,CAAC;IAEtB,MAAM,qBAA4B;IAClC,UAAU,yCAAgD;IAE7D,aAAa,EAAE,wBAAwB,GAAG,IAAI,CAAQ;IACtD,OAAO,EAAE,wBAAwB,EAAE,CAAM;IACzC,SAAS,EAAE,MAAM,CAAM;IACvB,SAAS,EAAE,OAAO,CAAS;IAC3B,SAAS,EAAE,OAAO,CAAS;IAC3B,YAAY,EAAE,MAAM,CAAM;IAEjC,OAAO,CAAC,QAAQ,CAAuB;gBAG7B,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,iBAAiB;IAG5B,QAAQ;IAId,WAAW;IAKX;;OAEG;YACW,cAAc;IA2B5B;;OAEG;YACW,WAAW;IAyBzB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA2ClC;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAIzD;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAkBzD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;IAKxD;;OAEG;IACH,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAG3B;yCA/LU,oBAAoB;2CAApB,oBAAoB;CAgMhC"}