@memberjunction/ng-tasks 3.4.0 → 4.0.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.
- package/.turbo/turbo-build.log +6 -4
- package/CHANGELOG.md +26 -0
- package/dist/lib/components/gantt-task-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/gantt-task-viewer.component.js +51 -45
- package/dist/lib/components/gantt-task-viewer.component.js.map +1 -1
- package/dist/lib/components/simple-task-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/simple-task-viewer.component.js +114 -97
- package/dist/lib/components/simple-task-viewer.component.js.map +1 -1
- package/dist/lib/components/task-detail-panel.component.d.ts.map +1 -1
- package/dist/lib/components/task-detail-panel.component.js +150 -130
- package/dist/lib/components/task-detail-panel.component.js.map +1 -1
- package/dist/lib/components/task.component.d.ts.map +1 -1
- package/dist/lib/components/task.component.js +86 -77
- package/dist/lib/components/task.component.js.map +1 -1
- package/dist/lib/ng-tasks.module.js +1 -2
- package/dist/lib/ng-tasks.module.js.map +1 -1
- package/package.json +13 -13
- package/src/lib/components/gantt-task-viewer.component.ts +28 -22
- package/src/lib/components/simple-task-viewer.component.ts +70 -56
- package/src/lib/components/task-detail-panel.component.ts +68 -52
- package/src/lib/components/task.component.ts +53 -44
- package/tsconfig.json +6 -24
|
@@ -3,14 +3,14 @@ import { CommonModule } from '@angular/common';
|
|
|
3
3
|
import { TaskDetailPanelComponent } from './task-detail-panel.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
import * as i1 from "@angular/common";
|
|
6
|
-
function
|
|
7
|
-
i0.ɵɵelement(0, "i",
|
|
6
|
+
function SimpleTaskViewerComponent_For_4_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
7
|
+
i0.ɵɵelement(0, "i", 14);
|
|
8
8
|
} }
|
|
9
|
-
function
|
|
10
|
-
i0.ɵɵelementStart(0, "div",
|
|
11
|
-
i0.ɵɵelement(2, "div",
|
|
9
|
+
function SimpleTaskViewerComponent_For_4_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
10
|
+
i0.ɵɵelementStart(0, "div", 15)(1, "div", 19);
|
|
11
|
+
i0.ɵɵelement(2, "div", 20);
|
|
12
12
|
i0.ɵɵelementEnd();
|
|
13
|
-
i0.ɵɵelementStart(3, "span",
|
|
13
|
+
i0.ɵɵelementStart(3, "span", 21);
|
|
14
14
|
i0.ɵɵtext(4);
|
|
15
15
|
i0.ɵɵelementEnd()();
|
|
16
16
|
} if (rf & 2) {
|
|
@@ -21,9 +21,9 @@ function SimpleTaskViewerComponent_div_3_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
|
21
21
|
i0.ɵɵadvance(2);
|
|
22
22
|
i0.ɵɵtextInterpolate1("", task_r2.PercentComplete, "%");
|
|
23
23
|
} }
|
|
24
|
-
function
|
|
25
|
-
i0.ɵɵelementStart(0, "span",
|
|
26
|
-
i0.ɵɵelement(1, "i",
|
|
24
|
+
function SimpleTaskViewerComponent_For_4_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
25
|
+
i0.ɵɵelementStart(0, "span", 17);
|
|
26
|
+
i0.ɵɵelement(1, "i", 22);
|
|
27
27
|
i0.ɵɵtext(2);
|
|
28
28
|
i0.ɵɵelementEnd();
|
|
29
29
|
} if (rf & 2) {
|
|
@@ -32,9 +32,9 @@ function SimpleTaskViewerComponent_div_3_span_11_Template(rf, ctx) { if (rf & 1)
|
|
|
32
32
|
i0.ɵɵadvance(2);
|
|
33
33
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.formatDate(task_r2.DueAt), " ");
|
|
34
34
|
} }
|
|
35
|
-
function
|
|
36
|
-
i0.ɵɵelementStart(0, "span",
|
|
37
|
-
i0.ɵɵelement(1, "i",
|
|
35
|
+
function SimpleTaskViewerComponent_For_4_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "span", 18);
|
|
37
|
+
i0.ɵɵelement(1, "i", 23);
|
|
38
38
|
i0.ɵɵtext(2);
|
|
39
39
|
i0.ɵɵelementEnd();
|
|
40
40
|
} if (rf & 2) {
|
|
@@ -42,21 +42,22 @@ function SimpleTaskViewerComponent_div_3_span_12_Template(rf, ctx) { if (rf & 1)
|
|
|
42
42
|
i0.ɵɵadvance(2);
|
|
43
43
|
i0.ɵɵtextInterpolate1(" ", task_r2.User, " ");
|
|
44
44
|
} }
|
|
45
|
-
function
|
|
45
|
+
function SimpleTaskViewerComponent_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
46
46
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
47
47
|
i0.ɵɵelementStart(0, "div", 7);
|
|
48
|
-
i0.ɵɵlistener("click", function
|
|
48
|
+
i0.ɵɵlistener("click", function SimpleTaskViewerComponent_For_4_Template_div_click_0_listener() { const task_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTaskClick(task_r2)); });
|
|
49
49
|
i0.ɵɵelementStart(1, "div", 8);
|
|
50
50
|
i0.ɵɵelement(2, "i", 9);
|
|
51
51
|
i0.ɵɵelementEnd();
|
|
52
52
|
i0.ɵɵelementStart(3, "div", 10)(4, "div", 11)(5, "div", 12)(6, "span", 13);
|
|
53
53
|
i0.ɵɵtext(7);
|
|
54
|
-
i0.ɵɵ
|
|
54
|
+
i0.ɵɵconditionalCreate(8, SimpleTaskViewerComponent_For_4_Conditional_8_Template, 1, 0, "i", 14);
|
|
55
55
|
i0.ɵɵelementEnd();
|
|
56
|
-
i0.ɵɵ
|
|
56
|
+
i0.ɵɵconditionalCreate(9, SimpleTaskViewerComponent_For_4_Conditional_9_Template, 5, 5, "div", 15);
|
|
57
57
|
i0.ɵɵelementEnd();
|
|
58
58
|
i0.ɵɵelementStart(10, "span", 16);
|
|
59
|
-
i0.ɵɵ
|
|
59
|
+
i0.ɵɵconditionalCreate(11, SimpleTaskViewerComponent_For_4_Conditional_11_Template, 3, 1, "span", 17);
|
|
60
|
+
i0.ɵɵconditionalCreate(12, SimpleTaskViewerComponent_For_4_Conditional_12_Template, 3, 1, "span", 18);
|
|
60
61
|
i0.ɵɵelementEnd()()()();
|
|
61
62
|
} if (rf & 2) {
|
|
62
63
|
const task_r2 = ctx.$implicit;
|
|
@@ -71,31 +72,31 @@ function SimpleTaskViewerComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
71
72
|
i0.ɵɵadvance();
|
|
72
73
|
i0.ɵɵtextInterpolate1(" ", task_r2.Name, " ");
|
|
73
74
|
i0.ɵɵadvance();
|
|
74
|
-
i0.ɵɵ
|
|
75
|
+
i0.ɵɵconditional(task_r2.Status === "Complete" ? 8 : -1);
|
|
75
76
|
i0.ɵɵadvance();
|
|
76
|
-
i0.ɵɵ
|
|
77
|
+
i0.ɵɵconditional(task_r2.PercentComplete != null ? 9 : -1);
|
|
77
78
|
i0.ɵɵadvance(2);
|
|
78
|
-
i0.ɵɵ
|
|
79
|
+
i0.ɵɵconditional(task_r2.DueAt ? 11 : -1);
|
|
79
80
|
i0.ɵɵadvance();
|
|
80
|
-
i0.ɵɵ
|
|
81
|
+
i0.ɵɵconditional(task_r2.User ? 12 : -1);
|
|
81
82
|
} }
|
|
82
|
-
function
|
|
83
|
-
i0.ɵɵelementStart(0, "div",
|
|
84
|
-
i0.ɵɵelement(1, "i",
|
|
83
|
+
function SimpleTaskViewerComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelementStart(0, "div", 4);
|
|
85
|
+
i0.ɵɵelement(1, "i", 24);
|
|
85
86
|
i0.ɵɵelementStart(2, "p");
|
|
86
87
|
i0.ɵɵtext(3, "No tasks to display");
|
|
87
88
|
i0.ɵɵelementEnd()();
|
|
88
89
|
} }
|
|
89
|
-
function
|
|
90
|
+
function SimpleTaskViewerComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
90
91
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
91
|
-
i0.ɵɵelementStart(0, "div",
|
|
92
|
-
i0.ɵɵlistener("mousedown", function
|
|
92
|
+
i0.ɵɵelementStart(0, "div", 25);
|
|
93
|
+
i0.ɵɵlistener("mousedown", function SimpleTaskViewerComponent_Conditional_6_Template_div_mousedown_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.startResize($event)); });
|
|
93
94
|
i0.ɵɵelementEnd();
|
|
94
95
|
} }
|
|
95
|
-
function
|
|
96
|
+
function SimpleTaskViewerComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
96
97
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
97
|
-
i0.ɵɵelementStart(0, "div",
|
|
98
|
-
i0.ɵɵlistener("closePanel", function
|
|
98
|
+
i0.ɵɵelementStart(0, "div", 26)(1, "mj-task-detail-panel", 27);
|
|
99
|
+
i0.ɵɵlistener("closePanel", function SimpleTaskViewerComponent_Conditional_7_Template_mj_task_detail_panel_closePanel_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDetailPanel()); })("openEntityRecord", function SimpleTaskViewerComponent_Conditional_7_Template_mj_task_detail_panel_openEntityRecord_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onOpenEntityRecord($event)); });
|
|
99
100
|
i0.ɵɵelementEnd()();
|
|
100
101
|
} if (rf & 2) {
|
|
101
102
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -167,25 +168,27 @@ export class SimpleTaskViewerComponent {
|
|
|
167
168
|
}
|
|
168
169
|
static ɵfac = function SimpleTaskViewerComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SimpleTaskViewerComponent)(); };
|
|
169
170
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SimpleTaskViewerComponent, selectors: [["mj-simple-task-viewer"]], hostBindings: function SimpleTaskViewerComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
170
|
-
i0.ɵɵlistener("mousemove", function SimpleTaskViewerComponent_mousemove_HostBindingHandler($event) { return ctx.handleResize($event); },
|
|
171
|
-
} }, inputs: { tasks: "tasks", agentRunMap: "agentRunMap" }, outputs: { taskClicked: "taskClicked", openEntityRecord: "openEntityRecord" },
|
|
171
|
+
i0.ɵɵlistener("mousemove", function SimpleTaskViewerComponent_mousemove_HostBindingHandler($event) { return ctx.handleResize($event); }, i0.ɵɵresolveDocument)("mouseup", function SimpleTaskViewerComponent_mouseup_HostBindingHandler() { return ctx.stopResize(); }, i0.ɵɵresolveDocument);
|
|
172
|
+
} }, inputs: { tasks: "tasks", agentRunMap: "agentRunMap" }, outputs: { taskClicked: "taskClicked", openEntityRecord: "openEntityRecord" }, features: [i0.ɵɵNgOnChangesFeature], decls: 8, vars: 5, consts: [[1, "simple-task-viewer"], [1, "list-layout"], [1, "task-list"], [1, "task-item", 3, "completed", "selected"], [1, "no-tasks"], [1, "list-resizer"], [1, "task-detail-panel", 3, "width"], [1, "task-item", 3, "click"], [1, "status-icon"], [1, "fas", 3, "ngClass"], [1, "task-content"], [1, "task-header"], [1, "task-title-row"], [1, "task-title"], [1, "fas", "fa-check", "completed-check"], [1, "task-progress-compact"], [1, "task-meta"], [1, "due-date"], [1, "assigned-to"], [1, "progress-bar-compact"], [1, "progress-fill-compact"], [1, "progress-text-compact"], [1, "far", "fa-calendar"], [1, "far", "fa-user"], [1, "fas", "fa-tasks"], [1, "list-resizer", 3, "mousedown"], [1, "task-detail-panel"], [3, "closePanel", "openEntityRecord", "task", "agentRunId"]], template: function SimpleTaskViewerComponent_Template(rf, ctx) { if (rf & 1) {
|
|
172
173
|
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
173
|
-
i0.ɵɵ
|
|
174
|
+
i0.ɵɵrepeaterCreate(3, SimpleTaskViewerComponent_For_4_Template, 13, 14, "div", 3, i0.ɵɵrepeaterTrackByIdentity);
|
|
175
|
+
i0.ɵɵconditionalCreate(5, SimpleTaskViewerComponent_Conditional_5_Template, 4, 0, "div", 4);
|
|
174
176
|
i0.ɵɵelementEnd();
|
|
175
|
-
i0.ɵɵ
|
|
177
|
+
i0.ɵɵconditionalCreate(6, SimpleTaskViewerComponent_Conditional_6_Template, 1, 0, "div", 5);
|
|
178
|
+
i0.ɵɵconditionalCreate(7, SimpleTaskViewerComponent_Conditional_7_Template, 2, 4, "div", 6);
|
|
176
179
|
i0.ɵɵelementEnd()();
|
|
177
180
|
} if (rf & 2) {
|
|
178
181
|
i0.ɵɵadvance(2);
|
|
179
182
|
i0.ɵɵclassProp("with-detail", ctx.selectedTask);
|
|
180
183
|
i0.ɵɵadvance();
|
|
181
|
-
i0.ɵɵ
|
|
182
|
-
i0.ɵɵadvance();
|
|
183
|
-
i0.ɵɵ
|
|
184
|
+
i0.ɵɵrepeater(ctx.tasks);
|
|
185
|
+
i0.ɵɵadvance(2);
|
|
186
|
+
i0.ɵɵconditional(!ctx.tasks || ctx.tasks.length === 0 ? 5 : -1);
|
|
184
187
|
i0.ɵɵadvance();
|
|
185
|
-
i0.ɵɵ
|
|
188
|
+
i0.ɵɵconditional(ctx.selectedTask ? 6 : -1);
|
|
186
189
|
i0.ɵɵadvance();
|
|
187
|
-
i0.ɵɵ
|
|
188
|
-
} }, dependencies: [CommonModule, i1.NgClass,
|
|
190
|
+
i0.ɵɵconditional(ctx.selectedTask ? 7 : -1);
|
|
191
|
+
} }, dependencies: [CommonModule, i1.NgClass, TaskDetailPanelComponent], styles: [".simple-task-viewer[_ngcontent-%COMP%] {\n height: 100%;\n background: #FAFAFA;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .list-layout[_ngcontent-%COMP%] {\n display: flex;\n height: 100%;\n position: relative;\n }\n\n .task-list[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 400px;\n padding: 16px;\n overflow-y: auto;\n }\n\n .task-list.with-detail[_ngcontent-%COMP%] {\n border-right: 1px solid #E5E7EB;\n }\n\n .list-resizer[_ngcontent-%COMP%] {\n width: 4px;\n background: #E5E7EB;\n cursor: col-resize;\n flex-shrink: 0;\n transition: background 0.2s;\n }\n\n .list-resizer[_ngcontent-%COMP%]:hover {\n background: #3B82F6;\n }\n\n .task-detail-panel[_ngcontent-%COMP%] {\n min-width: 300px;\n max-width: 600px;\n height: 100%;\n flex-shrink: 0;\n }\n\n .task-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n margin-bottom: 8px;\n transition: all 0.2s;\n cursor: pointer;\n }\n\n .task-item[_ngcontent-%COMP%]:hover {\n border-color: #3B82F6;\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);\n transform: translateY(-1px);\n }\n\n .task-item.selected[_ngcontent-%COMP%] {\n border-color: #3B82F6;\n background: #EFF6FF;\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15);\n }\n\n .task-item.completed[_ngcontent-%COMP%] {\n background: #F9FAFB;\n border-color: #D1D5DB;\n }\n\n .status-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #FEF3C7;\n color: #F59E0B;\n flex-shrink: 0;\n }\n\n .status-icon.complete[_ngcontent-%COMP%] {\n background: #D1FAE5;\n color: #10B981;\n }\n\n .task-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n }\n\n .task-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 6px;\n }\n\n .task-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n }\n\n .task-title[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #111827;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .task-title.completed-text[_ngcontent-%COMP%] {\n color: #6B7280;\n text-decoration: line-through;\n text-decoration-thickness: 1.5px;\n }\n\n .completed-check[_ngcontent-%COMP%] {\n color: #10B981;\n font-size: 12px;\n }\n\n .task-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n white-space: nowrap;\n }\n\n .task-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n }\n\n .task-description[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6B7280;\n margin-bottom: 8px;\n line-height: 1.5;\n }\n\n .task-progress-compact[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .progress-bar-compact[_ngcontent-%COMP%] {\n width: 80px;\n height: 4px;\n background: #E5E7EB;\n border-radius: 2px;\n overflow: hidden;\n }\n\n .progress-fill-compact[_ngcontent-%COMP%] {\n height: 100%;\n background: #3B82F6;\n transition: width 0.3s ease;\n }\n\n .progress-fill-compact.complete[_ngcontent-%COMP%] {\n background: #10B981;\n }\n\n .progress-text-compact[_ngcontent-%COMP%] {\n font-size: 10px;\n font-weight: 600;\n color: #6B7280;\n min-width: 30px;\n text-align: right;\n }\n\n .no-tasks[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: #9CA3AF;\n }\n\n .no-tasks[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n opacity: 0.3;\n margin-bottom: 12px;\n }\n\n .no-tasks[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n }"] });
|
|
189
192
|
}
|
|
190
193
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SimpleTaskViewerComponent, [{
|
|
191
194
|
type: Component,
|
|
@@ -193,69 +196,83 @@ export class SimpleTaskViewerComponent {
|
|
|
193
196
|
<div class="simple-task-viewer">
|
|
194
197
|
<div class="list-layout">
|
|
195
198
|
<div class="task-list" [class.with-detail]="selectedTask">
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
199
|
+
@for (task of tasks; track task) {
|
|
200
|
+
<div
|
|
201
|
+
class="task-item"
|
|
202
|
+
[class.completed]="task.Status === 'Complete'"
|
|
203
|
+
[class.selected]="selectedTask?.ID === task.ID"
|
|
204
|
+
(click)="onTaskClick(task)">
|
|
205
|
+
<!-- Status Icon -->
|
|
206
|
+
<div class="status-icon" [class.complete]="task.Status === 'Complete'">
|
|
207
|
+
<i class="fas" [ngClass]="getStatusIcon(task.Status)"></i>
|
|
208
|
+
</div>
|
|
209
|
+
<!-- Task Content -->
|
|
210
|
+
<div class="task-content">
|
|
211
|
+
<div class="task-header">
|
|
212
|
+
<div class="task-title-row">
|
|
213
|
+
<span class="task-title" [class.completed-text]="task.Status === 'Complete'">
|
|
214
|
+
{{ task.Name }}
|
|
215
|
+
@if (task.Status === 'Complete') {
|
|
216
|
+
<i class="fas fa-check completed-check"></i>
|
|
217
|
+
}
|
|
218
|
+
</span>
|
|
219
|
+
<!-- Compact progress indicator for all tasks -->
|
|
220
|
+
@if (task.PercentComplete != null) {
|
|
221
|
+
<div class="task-progress-compact">
|
|
222
|
+
<div class="progress-bar-compact">
|
|
223
|
+
<div class="progress-fill-compact"
|
|
224
|
+
[style.width.%]="task.PercentComplete"
|
|
225
|
+
[class.complete]="task.Status === 'Complete'"></div>
|
|
226
|
+
</div>
|
|
227
|
+
<span class="progress-text-compact">{{ task.PercentComplete }}%</span>
|
|
228
|
+
</div>
|
|
229
|
+
}
|
|
221
230
|
</div>
|
|
222
|
-
<span class="
|
|
231
|
+
<span class="task-meta">
|
|
232
|
+
@if (task.DueAt) {
|
|
233
|
+
<span class="due-date">
|
|
234
|
+
<i class="far fa-calendar"></i>
|
|
235
|
+
{{ formatDate(task.DueAt) }}
|
|
236
|
+
</span>
|
|
237
|
+
}
|
|
238
|
+
@if (task.User) {
|
|
239
|
+
<span class="assigned-to">
|
|
240
|
+
<i class="far fa-user"></i>
|
|
241
|
+
{{ task.User }}
|
|
242
|
+
</span>
|
|
243
|
+
}
|
|
244
|
+
</span>
|
|
223
245
|
</div>
|
|
224
246
|
</div>
|
|
225
|
-
<span class="task-meta">
|
|
226
|
-
<span *ngIf="task.DueAt" class="due-date">
|
|
227
|
-
<i class="far fa-calendar"></i>
|
|
228
|
-
{{ formatDate(task.DueAt) }}
|
|
229
|
-
</span>
|
|
230
|
-
<span *ngIf="task.User" class="assigned-to">
|
|
231
|
-
<i class="far fa-user"></i>
|
|
232
|
-
{{ task.User }}
|
|
233
|
-
</span>
|
|
234
|
-
</span>
|
|
235
247
|
</div>
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
<div *ngIf="selectedTask" class="list-resizer"
|
|
246
|
-
(mousedown)="startResize($event)"></div>
|
|
247
|
-
|
|
248
|
-
<div *ngIf="selectedTask" class="task-detail-panel" [style.width.px]="detailPanelWidth">
|
|
249
|
-
<mj-task-detail-panel
|
|
250
|
-
[task]="selectedTask"
|
|
251
|
-
[agentRunId]="getAgentRunId(selectedTask)"
|
|
252
|
-
(closePanel)="closeDetailPanel()"
|
|
253
|
-
(openEntityRecord)="onOpenEntityRecord($event)">
|
|
254
|
-
</mj-task-detail-panel>
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
@if (!tasks || tasks.length === 0) {
|
|
251
|
+
<div class="no-tasks">
|
|
252
|
+
<i class="fas fa-tasks"></i>
|
|
253
|
+
<p>No tasks to display</p>
|
|
254
|
+
</div>
|
|
255
|
+
}
|
|
255
256
|
</div>
|
|
257
|
+
|
|
258
|
+
@if (selectedTask) {
|
|
259
|
+
<div class="list-resizer"
|
|
260
|
+
(mousedown)="startResize($event)"></div>
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
@if (selectedTask) {
|
|
264
|
+
<div class="task-detail-panel" [style.width.px]="detailPanelWidth">
|
|
265
|
+
<mj-task-detail-panel
|
|
266
|
+
[task]="selectedTask"
|
|
267
|
+
[agentRunId]="getAgentRunId(selectedTask)"
|
|
268
|
+
(closePanel)="closeDetailPanel()"
|
|
269
|
+
(openEntityRecord)="onOpenEntityRecord($event)">
|
|
270
|
+
</mj-task-detail-panel>
|
|
271
|
+
</div>
|
|
272
|
+
}
|
|
256
273
|
</div>
|
|
257
274
|
</div>
|
|
258
|
-
|
|
275
|
+
`, styles: ["\n .simple-task-viewer {\n height: 100%;\n background: #FAFAFA;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n\n .list-layout {\n display: flex;\n height: 100%;\n position: relative;\n }\n\n .task-list {\n flex: 1;\n min-width: 400px;\n padding: 16px;\n overflow-y: auto;\n }\n\n .task-list.with-detail {\n border-right: 1px solid #E5E7EB;\n }\n\n .list-resizer {\n width: 4px;\n background: #E5E7EB;\n cursor: col-resize;\n flex-shrink: 0;\n transition: background 0.2s;\n }\n\n .list-resizer:hover {\n background: #3B82F6;\n }\n\n .task-detail-panel {\n min-width: 300px;\n max-width: 600px;\n height: 100%;\n flex-shrink: 0;\n }\n\n .task-item {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n padding: 16px;\n background: white;\n border: 1px solid #E5E7EB;\n border-radius: 8px;\n margin-bottom: 8px;\n transition: all 0.2s;\n cursor: pointer;\n }\n\n .task-item:hover {\n border-color: #3B82F6;\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.1);\n transform: translateY(-1px);\n }\n\n .task-item.selected {\n border-color: #3B82F6;\n background: #EFF6FF;\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15);\n }\n\n .task-item.completed {\n background: #F9FAFB;\n border-color: #D1D5DB;\n }\n\n .status-icon {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #FEF3C7;\n color: #F59E0B;\n flex-shrink: 0;\n }\n\n .status-icon.complete {\n background: #D1FAE5;\n color: #10B981;\n }\n\n .task-content {\n flex: 1;\n min-width: 0;\n }\n\n .task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 12px;\n margin-bottom: 6px;\n }\n\n .task-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n }\n\n .task-title {\n font-weight: 600;\n color: #111827;\n font-size: 14px;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .task-title.completed-text {\n color: #6B7280;\n text-decoration: line-through;\n text-decoration-thickness: 1.5px;\n }\n\n .completed-check {\n color: #10B981;\n font-size: 12px;\n }\n\n .task-meta {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: #6B7280;\n white-space: nowrap;\n }\n\n .task-meta i {\n margin-right: 4px;\n }\n\n .task-description {\n font-size: 13px;\n color: #6B7280;\n margin-bottom: 8px;\n line-height: 1.5;\n }\n\n .task-progress-compact {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .progress-bar-compact {\n width: 80px;\n height: 4px;\n background: #E5E7EB;\n border-radius: 2px;\n overflow: hidden;\n }\n\n .progress-fill-compact {\n height: 100%;\n background: #3B82F6;\n transition: width 0.3s ease;\n }\n\n .progress-fill-compact.complete {\n background: #10B981;\n }\n\n .progress-text-compact {\n font-size: 10px;\n font-weight: 600;\n color: #6B7280;\n min-width: 30px;\n text-align: right;\n }\n\n .no-tasks {\n text-align: center;\n padding: 60px 20px;\n color: #9CA3AF;\n }\n\n .no-tasks i {\n font-size: 48px;\n opacity: 0.3;\n margin-bottom: 12px;\n }\n\n .no-tasks p {\n margin: 0;\n font-size: 14px;\n }\n "] }]
|
|
259
276
|
}], null, { tasks: [{
|
|
260
277
|
type: Input
|
|
261
278
|
}], agentRunMap: [{
|
|
@@ -271,5 +288,5 @@ export class SimpleTaskViewerComponent {
|
|
|
271
288
|
type: HostListener,
|
|
272
289
|
args: ['document:mouseup']
|
|
273
290
|
}] }); })();
|
|
274
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SimpleTaskViewerComponent, { className: "SimpleTaskViewerComponent", filePath: "src/lib/components/simple-task-viewer.component.ts", lineNumber:
|
|
291
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SimpleTaskViewerComponent, { className: "SimpleTaskViewerComponent", filePath: "src/lib/components/simple-task-viewer.component.ts", lineNumber: 297 }); })();
|
|
275
292
|
//# sourceMappingURL=simple-task-viewer.component.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simple-task-viewer.component.js","sourceRoot":"","sources":["../../../src/lib/components/simple-task-viewer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAa,YAAY,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;;;;
|
|
1
|
+
{"version":3,"file":"simple-task-viewer.component.js","sourceRoot":"","sources":["../../../src/lib/components/simple-task-viewer.component.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-detail-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/task-detail-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;;AAErE;;;GAGG;AACH,
|
|
1
|
+
{"version":3,"file":"task-detail-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/task-detail-panel.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;;AAErE;;;GAGG;AACH,qBA8Pa,wBAAyB,YAAW,MAAM,EAAE,SAAS;IACvD,IAAI,EAAG,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAChC,UAAU,qBAA4B;IACtC,gBAAgB;oBAAkC,MAAM;kBAAY,MAAM;OAAM;IAEnF,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAQ;IAElD,QAAQ,IAAI,IAAI;IAIhB,WAAW,IAAI,IAAI;IAInB,OAAO,CAAC,aAAa;IAWd,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,MAAM;IAYzC,SAAS,IAAI,IAAI;IASjB,YAAY,IAAI,IAAI;yCAhDhB,wBAAwB;2CAAxB,wBAAwB;CAwDpC"}
|