@memberjunction/ng-tasks 6.2.0-edge.0 → 6.2.0-edge.2

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.
@@ -117,11 +117,43 @@ function TaskDetailPanelComponent_Conditional_19_Template(rf, ctx) { if (rf & 1)
117
117
  * Reusable across list and Gantt views
118
118
  */
119
119
  export class TaskDetailPanelComponent {
120
- task;
120
+ Task;
121
+ /** @deprecated Use {@link Task}. */
122
+ set task(value) {
123
+ this.Task = value;
124
+ }
125
+ /** @deprecated Use {@link Task}. */
126
+ get task() {
127
+ return this.Task;
128
+ }
121
129
  agentRunId = null;
122
- closePanel = new EventEmitter();
123
- openEntityRecord = new EventEmitter();
124
- agent = null;
130
+ ClosePanel = new EventEmitter();
131
+ /**
132
+ * @deprecated Use {@link ClosePanel}.
133
+ *
134
+ * The same emitter under the old binding name, so a template still binding
135
+ * (closePanel) keeps working. Must stay AFTER ClosePanel: class fields
136
+ * initialise in order, and the other way round this captures undefined.
137
+ */
138
+ closePanel = this.ClosePanel;
139
+ OpenEntityRecord = new EventEmitter();
140
+ /**
141
+ * @deprecated Use {@link OpenEntityRecord}.
142
+ *
143
+ * The same emitter under the old binding name, so a template still binding
144
+ * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields
145
+ * initialise in order, and the other way round this captures undefined.
146
+ */
147
+ openEntityRecord = this.OpenEntityRecord;
148
+ Agent = null;
149
+ /** @deprecated Use {@link Agent}. */
150
+ get agent() {
151
+ return this.Agent;
152
+ }
153
+ /** @deprecated Use {@link Agent}. */
154
+ set agent(value) {
155
+ this.Agent = value;
156
+ }
125
157
  ngOnInit() {
126
158
  this.loadAgentInfo();
127
159
  }
@@ -129,16 +161,16 @@ export class TaskDetailPanelComponent {
129
161
  this.loadAgentInfo();
130
162
  }
131
163
  async loadAgentInfo() {
132
- if (!this.task?.AgentID) {
133
- this.agent = null;
164
+ if (!this.Task?.AgentID) {
165
+ this.Agent = null;
134
166
  return;
135
167
  }
136
168
  // AIEngineBase is deferred at startup; ensure loaded before reading .Agents.
137
169
  await AIEngineBase.Instance.EnsureLoaded();
138
170
  const agents = AIEngineBase.Instance.Agents;
139
- this.agent = agents.find((a) => UUIDsEqual(a.ID, this.task.AgentID)) || null;
171
+ this.Agent = agents.find((a) => UUIDsEqual(a.ID, this.Task.AgentID)) || null;
140
172
  }
141
- formatDateTime(date) {
173
+ FormatDateTime(date) {
142
174
  if (!date)
143
175
  return '';
144
176
  const d = new Date(date);
@@ -150,24 +182,36 @@ export class TaskDetailPanelComponent {
150
182
  minute: '2-digit'
151
183
  });
152
184
  }
153
- openAgent() {
154
- if (this.task.AgentID) {
155
- this.openEntityRecord.emit({
185
+ /** @deprecated Use {@link FormatDateTime}. */
186
+ formatDateTime(date) {
187
+ return this.FormatDateTime(date);
188
+ }
189
+ OpenAgent() {
190
+ if (this.Task.AgentID) {
191
+ this.OpenEntityRecord.emit({
156
192
  entityName: 'MJ: AI Agents',
157
- recordId: this.task.AgentID
193
+ recordId: this.Task.AgentID
158
194
  });
159
195
  }
160
196
  }
161
- openAgentRun() {
197
+ /** @deprecated Use {@link OpenAgent}. */
198
+ openAgent() {
199
+ return this.OpenAgent();
200
+ }
201
+ OpenAgentRun() {
162
202
  if (this.agentRunId) {
163
- this.openEntityRecord.emit({
203
+ this.OpenEntityRecord.emit({
164
204
  entityName: 'MJ: AI Agent Runs',
165
205
  recordId: this.agentRunId
166
206
  });
167
207
  }
168
208
  }
209
+ /** @deprecated Use {@link OpenAgentRun}. */
210
+ openAgentRun() {
211
+ return this.OpenAgentRun();
212
+ }
169
213
  static ɵfac = function TaskDetailPanelComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TaskDetailPanelComponent)(); };
170
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskDetailPanelComponent, selectors: [["mj-task-detail-panel"]], inputs: { task: "task", agentRunId: "agentRunId" }, outputs: { closePanel: "closePanel", openEntityRecord: "openEntityRecord" }, features: [i0.ɵɵNgOnChangesFeature], decls: 20, vars: 10, consts: [[1, "task-detail-panel"], [1, "detail-header"], [1, "close-detail-btn", 3, "click"], [1, "fas", "fa-times"], [1, "detail-content"], [1, "detail-field"], [1, "detail-progress"], [1, "progress-bar-detail"], [1, "progress-fill-detail"], [1, "agent-info", 3, "click"], [1, "agent-icon"], [1, "agent-name"], [1, "fas", "fa-external-link-alt", "link-icon"], [1, "agent-run-link", 3, "click"]], template: function TaskDetailPanelComponent_Template(rf, ctx) { if (rf & 1) {
214
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskDetailPanelComponent, selectors: [["mj-task-detail-panel"]], inputs: { Task: "Task", task: "task", agentRunId: "agentRunId" }, outputs: { ClosePanel: "ClosePanel", closePanel: "closePanel", OpenEntityRecord: "OpenEntityRecord", openEntityRecord: "openEntityRecord" }, features: [i0.ɵɵNgOnChangesFeature], decls: 20, vars: 10, consts: [[1, "task-detail-panel"], [1, "detail-header"], [1, "close-detail-btn", 3, "click"], [1, "fas", "fa-times"], [1, "detail-content"], [1, "detail-field"], [1, "detail-progress"], [1, "progress-bar-detail"], [1, "progress-fill-detail"], [1, "agent-info", 3, "click"], [1, "agent-icon"], [1, "agent-name"], [1, "fas", "fa-external-link-alt", "link-icon"], [1, "agent-run-link", 3, "click"]], template: function TaskDetailPanelComponent_Template(rf, ctx) { if (rf & 1) {
171
215
  i0.ɵɵdomElementStart(0, "div", 0)(1, "div", 1)(2, "h3");
172
216
  i0.ɵɵtext(3);
173
217
  i0.ɵɵdomElementEnd();
@@ -303,12 +347,18 @@ export class TaskDetailPanelComponent {
303
347
  </div>
304
348
  </div>
305
349
  `, styles: ["\n .task-detail-panel {\n width: 100%;\n height: calc(100% - 45px);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .detail-header {\n padding: 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n }\n\n .detail-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n padding-right: 12px;\n }\n\n .close-detail-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .close-detail-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n }\n\n .detail-content {\n padding: 20px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n }\n\n .detail-field {\n margin-bottom: 20px;\n }\n\n .detail-field:last-child {\n margin-bottom: 0;\n }\n\n .detail-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .detail-field p {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.5;\n }\n\n .detail-progress {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .progress-bar-detail {\n flex: 1;\n height: 8px;\n background: var(--mj-border-default);\n border-radius: 4px;\n overflow: hidden;\n }\n\n .progress-fill-detail {\n height: calc(100% - 69px);\n background: var(--mj-brand-primary);\n transition: width 0.3s ease;\n }\n\n .detail-progress span {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-muted);\n min-width: 40px;\n }\n\n .agent-info {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .agent-info:hover {\n background: var(--mj-border-default);\n }\n\n .agent-icon {\n font-size: 18px;\n color: var(--mj-brand-primary);\n }\n\n .agent-name {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .link-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .agent-run-link {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .agent-run-link:hover {\n background: var(--mj-border-default);\n }\n\n .agent-run-link span {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n "] }]
306
- }], null, { task: [{
350
+ }], null, { Task: [{
351
+ type: Input
352
+ }], task: [{
307
353
  type: Input
308
354
  }], agentRunId: [{
309
355
  type: Input
356
+ }], ClosePanel: [{
357
+ type: Output
310
358
  }], closePanel: [{
311
359
  type: Output
360
+ }], OpenEntityRecord: [{
361
+ type: Output
312
362
  }], openEntityRecord: [{
313
363
  type: Output
314
364
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"task-detail-panel.component.js","sourceRoot":"","sources":["../../../src/lib/components/task-detail-panel.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges } from '@angular/core';\n\nimport { MJTaskEntity } from '@memberjunction/core-entities';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Task detail panel showing task information, agent details, and agent run\n * Reusable across list and Gantt views\n */\n@Component({\n selector: 'mj-task-detail-panel',\n standalone: true,\n imports: [],\n template: `\n <div class=\"task-detail-panel\">\n <div class=\"detail-header\">\n <h3>{{ task.Name }}</h3>\n <button class=\"close-detail-btn\" (click)=\"closePanel.emit()\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n \n <div class=\"detail-content\">\n @if (task.Description) {\n <div class=\"detail-field\">\n <label>Description</label>\n <p>{{ task.Description }}</p>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Status</label>\n <p>{{ task.Status }}</p>\n </div>\n \n @if (task.PercentComplete != null) {\n <div class=\"detail-field\">\n <label>Progress</label>\n <div class=\"detail-progress\">\n <div class=\"progress-bar-detail\">\n <div class=\"progress-fill-detail\" [style.width.%]=\"task.PercentComplete\"></div>\n </div>\n <span>{{ task.PercentComplete }}%</span>\n </div>\n </div>\n }\n \n @if (task.StartedAt) {\n <div class=\"detail-field\">\n <label>Started</label>\n <p>{{ formatDateTime(task.StartedAt) }}</p>\n </div>\n }\n \n @if (task.DueAt) {\n <div class=\"detail-field\">\n <label>Due</label>\n <p>{{ formatDateTime(task.DueAt) }}</p>\n </div>\n }\n \n @if (task.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed</label>\n <p>{{ formatDateTime(task.CompletedAt) }}</p>\n </div>\n }\n \n @if (task.User) {\n <div class=\"detail-field\">\n <label>Assigned User</label>\n <p>{{ task.User }}</p>\n </div>\n }\n \n <!-- Agent Information -->\n @if (agent) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"agent-info\" (click)=\"openAgent()\">\n <i [class]=\"'fas fa-' + ('robot')\" class=\"agent-icon\"></i>\n <span class=\"agent-name\">{{ agent.Name }}</span>\n <i class=\"fas fa-external-link-alt link-icon\"></i>\n </div>\n </div>\n }\n \n <!-- Agent Run Information -->\n @if (agentRunId) {\n <div class=\"detail-field\">\n <label>Agent Run</label>\n <div class=\"agent-run-link\" (click)=\"openAgentRun()\">\n <span>View Run Details</span>\n <i class=\"fas fa-external-link-alt link-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styles: [`\n .task-detail-panel {\n width: 100%;\n height: calc(100% - 45px);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .detail-header {\n padding: 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n }\n\n .detail-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n padding-right: 12px;\n }\n\n .close-detail-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .close-detail-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n }\n\n .detail-content {\n padding: 20px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n }\n\n .detail-field {\n margin-bottom: 20px;\n }\n\n .detail-field:last-child {\n margin-bottom: 0;\n }\n\n .detail-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .detail-field p {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.5;\n }\n\n .detail-progress {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .progress-bar-detail {\n flex: 1;\n height: 8px;\n background: var(--mj-border-default);\n border-radius: 4px;\n overflow: hidden;\n }\n\n .progress-fill-detail {\n height: calc(100% - 69px);\n background: var(--mj-brand-primary);\n transition: width 0.3s ease;\n }\n\n .detail-progress span {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-muted);\n min-width: 40px;\n }\n\n .agent-info {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .agent-info:hover {\n background: var(--mj-border-default);\n }\n\n .agent-icon {\n font-size: 18px;\n color: var(--mj-brand-primary);\n }\n\n .agent-name {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .link-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .agent-run-link {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .agent-run-link:hover {\n background: var(--mj-border-default);\n }\n\n .agent-run-link span {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n `]\n})\nexport class TaskDetailPanelComponent implements OnInit, OnChanges {\n @Input() task!: MJTaskEntity;\n @Input() agentRunId: string | null = null;\n @Output() closePanel = new EventEmitter<void>();\n @Output() openEntityRecord = new EventEmitter<{ entityName: string; recordId: string }>();\n\n public agent: MJAIAgentEntityExtended | null = null;\n\n ngOnInit(): void {\n this.loadAgentInfo();\n }\n\n ngOnChanges(): void {\n this.loadAgentInfo();\n }\n\n private async loadAgentInfo(): Promise<void> {\n if (!this.task?.AgentID) {\n this.agent = null;\n return;\n }\n\n // AIEngineBase is deferred at startup; ensure loaded before reading .Agents.\n await AIEngineBase.Instance.EnsureLoaded();\n const agents = AIEngineBase.Instance.Agents;\n this.agent = agents.find((a: MJAIAgentEntityExtended) => UUIDsEqual(a.ID, this.task.AgentID)) || null;\n }\n\n public formatDateTime(date: Date | null): string {\n if (!date) return '';\n const d = new Date(date);\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n public openAgent(): void {\n if (this.task.AgentID) {\n this.openEntityRecord.emit({\n entityName: 'MJ: AI Agents',\n recordId: this.task.AgentID\n });\n }\n }\n\n public openAgentRun(): void {\n if (this.agentRunId) {\n this.openEntityRecord.emit({\n entityName: 'MJ: AI Agent Runs',\n recordId: this.agentRunId\n });\n }\n }\n}\n"]}
1
+ {"version":3,"file":"task-detail-panel.component.js","sourceRoot":"","sources":["../../../src/lib/components/task-detail-panel.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnChanges } from '@angular/core';\n\nimport { MJTaskEntity } from '@memberjunction/core-entities';\nimport { AIEngineBase } from '@memberjunction/ai-engine-base';\nimport { MJAIAgentEntityExtended } from '@memberjunction/ai-core-plus';\nimport { UUIDsEqual } from '@memberjunction/global';\n\n/**\n * Task detail panel showing task information, agent details, and agent run\n * Reusable across list and Gantt views\n */\n@Component({\n selector: 'mj-task-detail-panel',\n standalone: true,\n imports: [],\n template: `\n <div class=\"task-detail-panel\">\n <div class=\"detail-header\">\n <h3>{{ task.Name }}</h3>\n <button class=\"close-detail-btn\" (click)=\"closePanel.emit()\">\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n \n <div class=\"detail-content\">\n @if (task.Description) {\n <div class=\"detail-field\">\n <label>Description</label>\n <p>{{ task.Description }}</p>\n </div>\n }\n \n <div class=\"detail-field\">\n <label>Status</label>\n <p>{{ task.Status }}</p>\n </div>\n \n @if (task.PercentComplete != null) {\n <div class=\"detail-field\">\n <label>Progress</label>\n <div class=\"detail-progress\">\n <div class=\"progress-bar-detail\">\n <div class=\"progress-fill-detail\" [style.width.%]=\"task.PercentComplete\"></div>\n </div>\n <span>{{ task.PercentComplete }}%</span>\n </div>\n </div>\n }\n \n @if (task.StartedAt) {\n <div class=\"detail-field\">\n <label>Started</label>\n <p>{{ formatDateTime(task.StartedAt) }}</p>\n </div>\n }\n \n @if (task.DueAt) {\n <div class=\"detail-field\">\n <label>Due</label>\n <p>{{ formatDateTime(task.DueAt) }}</p>\n </div>\n }\n \n @if (task.CompletedAt) {\n <div class=\"detail-field\">\n <label>Completed</label>\n <p>{{ formatDateTime(task.CompletedAt) }}</p>\n </div>\n }\n \n @if (task.User) {\n <div class=\"detail-field\">\n <label>Assigned User</label>\n <p>{{ task.User }}</p>\n </div>\n }\n \n <!-- Agent Information -->\n @if (agent) {\n <div class=\"detail-field\">\n <label>Agent</label>\n <div class=\"agent-info\" (click)=\"openAgent()\">\n <i [class]=\"'fas fa-' + ('robot')\" class=\"agent-icon\"></i>\n <span class=\"agent-name\">{{ agent.Name }}</span>\n <i class=\"fas fa-external-link-alt link-icon\"></i>\n </div>\n </div>\n }\n \n <!-- Agent Run Information -->\n @if (agentRunId) {\n <div class=\"detail-field\">\n <label>Agent Run</label>\n <div class=\"agent-run-link\" (click)=\"openAgentRun()\">\n <span>View Run Details</span>\n <i class=\"fas fa-external-link-alt link-icon\"></i>\n </div>\n </div>\n }\n </div>\n </div>\n `,\n styles: [`\n .task-detail-panel {\n width: 100%;\n height: calc(100% - 45px);\n background: var(--mj-bg-surface);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .detail-header {\n padding: 20px;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n background: var(--mj-bg-surface-sunken);\n flex-shrink: 0;\n }\n\n .detail-header h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n padding-right: 12px;\n }\n\n .close-detail-btn {\n background: none;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n padding: 4px;\n width: 28px;\n height: 28px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n\n .close-detail-btn:hover {\n background: var(--mj-border-default);\n color: var(--mj-text-primary);\n }\n\n .detail-content {\n padding: 20px;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n }\n\n .detail-field {\n margin-bottom: 20px;\n }\n\n .detail-field:last-child {\n margin-bottom: 0;\n }\n\n .detail-field label {\n display: block;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 6px;\n }\n\n .detail-field p {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-primary);\n line-height: 1.5;\n }\n\n .detail-progress {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .progress-bar-detail {\n flex: 1;\n height: 8px;\n background: var(--mj-border-default);\n border-radius: 4px;\n overflow: hidden;\n }\n\n .progress-fill-detail {\n height: calc(100% - 69px);\n background: var(--mj-brand-primary);\n transition: width 0.3s ease;\n }\n\n .detail-progress span {\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-muted);\n min-width: 40px;\n }\n\n .agent-info {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .agent-info:hover {\n background: var(--mj-border-default);\n }\n\n .agent-icon {\n font-size: 18px;\n color: var(--mj-brand-primary);\n }\n\n .agent-name {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n\n .link-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n }\n\n .agent-run-link {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .agent-run-link:hover {\n background: var(--mj-border-default);\n }\n\n .agent-run-link span {\n flex: 1;\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n }\n `]\n})\nexport class TaskDetailPanelComponent implements OnInit, OnChanges {\n @Input() Task!: MJTaskEntity;\n\n /** @deprecated Use {@link Task}. */\n @Input() set task(value: MJTaskEntity) {\n this.Task = value;\n }\n /** @deprecated Use {@link Task}. */\n get task(): MJTaskEntity {\n return this.Task;\n }\n @Input() agentRunId: string | null = null;\n @Output() ClosePanel = new EventEmitter<void>();\n\n /**\n * @deprecated Use {@link ClosePanel}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (closePanel) keeps working. Must stay AFTER ClosePanel: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() closePanel = this.ClosePanel;\n @Output() OpenEntityRecord = new EventEmitter<{ entityName: string; recordId: string }>();\n\n /**\n * @deprecated Use {@link OpenEntityRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openEntityRecord = this.OpenEntityRecord;\n\n public Agent: MJAIAgentEntityExtended | null = null;\n\n /** @deprecated Use {@link Agent}. */\n public get agent(): MJAIAgentEntityExtended | null {\n return this.Agent;\n }\n /** @deprecated Use {@link Agent}. */\n public set agent(value: MJAIAgentEntityExtended | null) {\n this.Agent = value;\n }\n\n ngOnInit(): void {\n this.loadAgentInfo();\n }\n\n ngOnChanges(): void {\n this.loadAgentInfo();\n }\n\n private async loadAgentInfo(): Promise<void> {\n if (!this.Task?.AgentID) {\n this.Agent = null;\n return;\n }\n\n // AIEngineBase is deferred at startup; ensure loaded before reading .Agents.\n await AIEngineBase.Instance.EnsureLoaded();\n const agents = AIEngineBase.Instance.Agents;\n this.Agent = agents.find((a: MJAIAgentEntityExtended) => UUIDsEqual(a.ID, this.Task.AgentID)) || null;\n }\n\n public FormatDateTime(date: Date | null): string {\n if (!date) return '';\n const d = new Date(date);\n return d.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit'\n });\n }\n\n /** @deprecated Use {@link FormatDateTime}. */\n public formatDateTime(date: Date | null): string {\n return this.FormatDateTime(date);\n }\n\n public OpenAgent(): void {\n if (this.Task.AgentID) {\n this.OpenEntityRecord.emit({\n entityName: 'MJ: AI Agents',\n recordId: this.Task.AgentID\n });\n }\n }\n\n /** @deprecated Use {@link OpenAgent}. */\n public openAgent(): void {\n return this.OpenAgent();\n }\n\n public OpenAgentRun(): void {\n if (this.agentRunId) {\n this.OpenEntityRecord.emit({\n entityName: 'MJ: AI Agent Runs',\n recordId: this.agentRunId\n });\n }\n }\n\n /** @deprecated Use {@link OpenAgentRun}. */\n public openAgentRun(): void {\n return this.OpenAgentRun();\n }\n}\n"]}
@@ -7,28 +7,100 @@ import * as i0 from "@angular/core";
7
7
  * Allows switching between list and Gantt chart views
8
8
  */
9
9
  export declare class TaskComponent {
10
- tasks: MJTaskEntity[];
11
- ganttTasks?: MJTaskEntity[];
12
- taskDependencies?: MJTaskDependencyEntity[];
13
- agentRunMap?: Map<string, string>;
14
- title?: string;
15
- description?: string;
16
- showHeader: boolean;
17
- showViewToggle: boolean;
18
- viewMode: TaskViewMode;
10
+ Tasks: MJTaskEntity[];
11
+ /** @deprecated Use {@link Tasks}. */
12
+ set tasks(value: MJTaskEntity[]);
13
+ /** @deprecated Use {@link Tasks}. */
14
+ get tasks(): MJTaskEntity[];
15
+ GanttTasks?: MJTaskEntity[];
16
+ /** @deprecated Use {@link GanttTasks}. */
17
+ set ganttTasks(value: MJTaskEntity[] | undefined);
18
+ /** @deprecated Use {@link GanttTasks}. */
19
+ get ganttTasks(): MJTaskEntity[] | undefined;
20
+ TaskDependencies?: MJTaskDependencyEntity[];
21
+ /** @deprecated Use {@link TaskDependencies}. */
22
+ set taskDependencies(value: MJTaskDependencyEntity[] | undefined);
23
+ /** @deprecated Use {@link TaskDependencies}. */
24
+ get taskDependencies(): MJTaskDependencyEntity[] | undefined;
25
+ AgentRunMap?: Map<string, string>;
26
+ /** @deprecated Use {@link AgentRunMap}. */
27
+ set agentRunMap(value: Map<string, string> | undefined);
28
+ /** @deprecated Use {@link AgentRunMap}. */
29
+ get agentRunMap(): Map<string, string> | undefined;
30
+ Title?: string;
31
+ /** @deprecated Use {@link Title}. */
32
+ set title(value: string | undefined);
33
+ /** @deprecated Use {@link Title}. */
34
+ get title(): string | undefined;
35
+ Description?: string;
36
+ /** @deprecated Use {@link Description}. */
37
+ set description(value: string | undefined);
38
+ /** @deprecated Use {@link Description}. */
39
+ get description(): string | undefined;
40
+ ShowHeader: boolean;
41
+ /** @deprecated Use {@link ShowHeader}. */
42
+ set showHeader(value: boolean);
43
+ /** @deprecated Use {@link ShowHeader}. */
44
+ get showHeader(): boolean;
45
+ ShowViewToggle: boolean;
46
+ /** @deprecated Use {@link ShowViewToggle}. */
47
+ set showViewToggle(value: boolean);
48
+ /** @deprecated Use {@link ShowViewToggle}. */
49
+ get showViewToggle(): boolean;
50
+ ViewMode: TaskViewMode;
51
+ /** @deprecated Use {@link ViewMode}. */
52
+ set viewMode(value: TaskViewMode);
53
+ /** @deprecated Use {@link ViewMode}. */
54
+ get viewMode(): TaskViewMode;
55
+ ViewModeChanged: EventEmitter<TaskViewMode>;
56
+ /**
57
+ * @deprecated Use {@link ViewModeChanged}.
58
+ *
59
+ * The same emitter under the old binding name, so a template still binding
60
+ * (viewModeChanged) keeps working. Must stay AFTER ViewModeChanged: class fields
61
+ * initialise in order, and the other way round this captures undefined.
62
+ */
19
63
  viewModeChanged: EventEmitter<TaskViewMode>;
64
+ TaskClicked: EventEmitter<MJTaskEntity>;
65
+ /**
66
+ * @deprecated Use {@link TaskClicked}.
67
+ *
68
+ * The same emitter under the old binding name, so a template still binding
69
+ * (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields
70
+ * initialise in order, and the other way round this captures undefined.
71
+ */
20
72
  taskClicked: EventEmitter<MJTaskEntity>;
73
+ OpenEntityRecord: EventEmitter<{
74
+ entityName: string;
75
+ recordId: string;
76
+ }>;
77
+ /**
78
+ * @deprecated Use {@link OpenEntityRecord}.
79
+ *
80
+ * The same emitter under the old binding name, so a template still binding
81
+ * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields
82
+ * initialise in order, and the other way round this captures undefined.
83
+ */
21
84
  openEntityRecord: EventEmitter<{
22
85
  entityName: string;
23
86
  recordId: string;
24
87
  }>;
88
+ SetViewMode(mode: TaskViewMode): void;
89
+ /** @deprecated Use {@link SetViewMode}. */
25
90
  setViewMode(mode: TaskViewMode): void;
91
+ OnTaskClicked(task: MJTaskEntity): void;
92
+ /** @deprecated Use {@link OnTaskClicked}. */
26
93
  onTaskClicked(task: MJTaskEntity): void;
94
+ OnOpenEntityRecord(event: {
95
+ entityName: string;
96
+ recordId: string;
97
+ }): void;
98
+ /** @deprecated Use {@link OnOpenEntityRecord}. */
27
99
  onOpenEntityRecord(event: {
28
100
  entityName: string;
29
101
  recordId: string;
30
102
  }): void;
31
103
  static ɵfac: i0.ɵɵFactoryDeclaration<TaskComponent, never>;
32
- static ɵcmp: i0.ɵɵComponentDeclaration<TaskComponent, "mj-task", never, { "tasks": { "alias": "tasks"; "required": false; }; "ganttTasks": { "alias": "ganttTasks"; "required": false; }; "taskDependencies": { "alias": "taskDependencies"; "required": false; }; "agentRunMap": { "alias": "agentRunMap"; "required": false; }; "title": { "alias": "title"; "required": false; }; "description": { "alias": "description"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "showViewToggle": { "alias": "showViewToggle"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; }, { "viewModeChanged": "viewModeChanged"; "taskClicked": "taskClicked"; "openEntityRecord": "openEntityRecord"; }, never, never, true, never>;
104
+ static ɵcmp: i0.ɵɵComponentDeclaration<TaskComponent, "mj-task", never, { "Tasks": { "alias": "Tasks"; "required": false; }; "tasks": { "alias": "tasks"; "required": false; }; "GanttTasks": { "alias": "GanttTasks"; "required": false; }; "ganttTasks": { "alias": "ganttTasks"; "required": false; }; "TaskDependencies": { "alias": "TaskDependencies"; "required": false; }; "taskDependencies": { "alias": "taskDependencies"; "required": false; }; "AgentRunMap": { "alias": "AgentRunMap"; "required": false; }; "agentRunMap": { "alias": "agentRunMap"; "required": false; }; "Title": { "alias": "Title"; "required": false; }; "title": { "alias": "title"; "required": false; }; "Description": { "alias": "Description"; "required": false; }; "description": { "alias": "description"; "required": false; }; "ShowHeader": { "alias": "ShowHeader"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "ShowViewToggle": { "alias": "ShowViewToggle"; "required": false; }; "showViewToggle": { "alias": "showViewToggle"; "required": false; }; "ViewMode": { "alias": "ViewMode"; "required": false; }; "viewMode": { "alias": "viewMode"; "required": false; }; }, { "ViewModeChanged": "ViewModeChanged"; "viewModeChanged": "viewModeChanged"; "TaskClicked": "TaskClicked"; "taskClicked": "taskClicked"; "OpenEntityRecord": "OpenEntityRecord"; "openEntityRecord": "openEntityRecord"; }, never, never, true, never>;
33
105
  }
34
106
  //# sourceMappingURL=task.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"task.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/task.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;;AAI1D;;;GAGG;AACH,qBAiJa,aAAa;IACf,KAAK,EAAE,YAAY,EAAE,CAAM;IAC3B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,CAAC;IAC5C,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAQ;IAC3B,cAAc,EAAE,OAAO,CAAQ;IAC/B,QAAQ,EAAE,YAAY,CAAY;IAEjC,eAAe,6BAAoC;IACnD,WAAW,6BAAoC;IAC/C,gBAAgB;oBAAkC,MAAM;kBAAY,MAAM;OAAM;IAEnF,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAKrC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAIvC,kBAAkB,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;yCAxBrE,aAAa;2CAAb,aAAa;CA2BzB"}
1
+ {"version":3,"file":"task.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/task.component.ts"],"names":[],"mappings":"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"}
@@ -81,30 +81,138 @@ function TaskComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
81
81
  * Allows switching between list and Gantt chart views
82
82
  */
83
83
  export class TaskComponent {
84
- tasks = [];
85
- ganttTasks; // Optional separate task list for Gantt (includes parent)
86
- taskDependencies; // Task dependencies for Gantt links
87
- agentRunMap; // Maps TaskID -> AgentRunID
88
- title;
89
- description;
90
- showHeader = true;
91
- showViewToggle = true; // Show Gantt/List toggle
92
- viewMode = 'simple';
93
- viewModeChanged = new EventEmitter();
94
- taskClicked = new EventEmitter();
95
- openEntityRecord = new EventEmitter();
84
+ Tasks = [];
85
+ /** @deprecated Use {@link Tasks}. */
86
+ set tasks(value) {
87
+ this.Tasks = value;
88
+ }
89
+ /** @deprecated Use {@link Tasks}. */
90
+ get tasks() {
91
+ return this.Tasks;
92
+ }
93
+ GanttTasks;
94
+ /** @deprecated Use {@link GanttTasks}. */
95
+ set ganttTasks(value) {
96
+ this.GanttTasks = value;
97
+ }
98
+ /** @deprecated Use {@link GanttTasks}. */
99
+ get ganttTasks() {
100
+ return this.GanttTasks;
101
+ } // Optional separate task list for Gantt (includes parent)
102
+ TaskDependencies;
103
+ /** @deprecated Use {@link TaskDependencies}. */
104
+ set taskDependencies(value) {
105
+ this.TaskDependencies = value;
106
+ }
107
+ /** @deprecated Use {@link TaskDependencies}. */
108
+ get taskDependencies() {
109
+ return this.TaskDependencies;
110
+ } // Task dependencies for Gantt links
111
+ AgentRunMap;
112
+ /** @deprecated Use {@link AgentRunMap}. */
113
+ set agentRunMap(value) {
114
+ this.AgentRunMap = value;
115
+ }
116
+ /** @deprecated Use {@link AgentRunMap}. */
117
+ get agentRunMap() {
118
+ return this.AgentRunMap;
119
+ } // Maps TaskID -> AgentRunID
120
+ Title;
121
+ /** @deprecated Use {@link Title}. */
122
+ set title(value) {
123
+ this.Title = value;
124
+ }
125
+ /** @deprecated Use {@link Title}. */
126
+ get title() {
127
+ return this.Title;
128
+ }
129
+ Description;
130
+ /** @deprecated Use {@link Description}. */
131
+ set description(value) {
132
+ this.Description = value;
133
+ }
134
+ /** @deprecated Use {@link Description}. */
135
+ get description() {
136
+ return this.Description;
137
+ }
138
+ ShowHeader = true;
139
+ /** @deprecated Use {@link ShowHeader}. */
140
+ set showHeader(value) {
141
+ this.ShowHeader = value;
142
+ }
143
+ /** @deprecated Use {@link ShowHeader}. */
144
+ get showHeader() {
145
+ return this.ShowHeader;
146
+ }
147
+ ShowViewToggle = true;
148
+ /** @deprecated Use {@link ShowViewToggle}. */
149
+ set showViewToggle(value) {
150
+ this.ShowViewToggle = value;
151
+ }
152
+ /** @deprecated Use {@link ShowViewToggle}. */
153
+ get showViewToggle() {
154
+ return this.ShowViewToggle;
155
+ } // Show Gantt/List toggle
156
+ ViewMode = 'simple';
157
+ /** @deprecated Use {@link ViewMode}. */
158
+ set viewMode(value) {
159
+ this.ViewMode = value;
160
+ }
161
+ /** @deprecated Use {@link ViewMode}. */
162
+ get viewMode() {
163
+ return this.ViewMode;
164
+ }
165
+ ViewModeChanged = new EventEmitter();
166
+ /**
167
+ * @deprecated Use {@link ViewModeChanged}.
168
+ *
169
+ * The same emitter under the old binding name, so a template still binding
170
+ * (viewModeChanged) keeps working. Must stay AFTER ViewModeChanged: class fields
171
+ * initialise in order, and the other way round this captures undefined.
172
+ */
173
+ viewModeChanged = this.ViewModeChanged;
174
+ TaskClicked = new EventEmitter();
175
+ /**
176
+ * @deprecated Use {@link TaskClicked}.
177
+ *
178
+ * The same emitter under the old binding name, so a template still binding
179
+ * (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields
180
+ * initialise in order, and the other way round this captures undefined.
181
+ */
182
+ taskClicked = this.TaskClicked;
183
+ OpenEntityRecord = new EventEmitter();
184
+ /**
185
+ * @deprecated Use {@link OpenEntityRecord}.
186
+ *
187
+ * The same emitter under the old binding name, so a template still binding
188
+ * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields
189
+ * initialise in order, and the other way round this captures undefined.
190
+ */
191
+ openEntityRecord = this.OpenEntityRecord;
192
+ SetViewMode(mode) {
193
+ this.ViewMode = mode;
194
+ this.ViewModeChanged.emit(mode);
195
+ }
196
+ /** @deprecated Use {@link SetViewMode}. */
96
197
  setViewMode(mode) {
97
- this.viewMode = mode;
98
- this.viewModeChanged.emit(mode);
198
+ return this.SetViewMode(mode);
99
199
  }
200
+ OnTaskClicked(task) {
201
+ this.TaskClicked.emit(task);
202
+ }
203
+ /** @deprecated Use {@link OnTaskClicked}. */
100
204
  onTaskClicked(task) {
101
- this.taskClicked.emit(task);
205
+ return this.OnTaskClicked(task);
206
+ }
207
+ OnOpenEntityRecord(event) {
208
+ this.OpenEntityRecord.emit(event);
102
209
  }
210
+ /** @deprecated Use {@link OnOpenEntityRecord}. */
103
211
  onOpenEntityRecord(event) {
104
- this.openEntityRecord.emit(event);
212
+ return this.OnOpenEntityRecord(event);
105
213
  }
106
214
  static ɵfac = function TaskComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || TaskComponent)(); };
107
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskComponent, selectors: [["mj-task"]], inputs: { tasks: "tasks", ganttTasks: "ganttTasks", taskDependencies: "taskDependencies", agentRunMap: "agentRunMap", title: "title", description: "description", showHeader: "showHeader", showViewToggle: "showViewToggle", viewMode: "viewMode" }, outputs: { viewModeChanged: "viewModeChanged", taskClicked: "taskClicked", openEntityRecord: "openEntityRecord" }, decls: 5, vars: 3, consts: [[1, "task-component"], [1, "task-header"], [1, "task-viewer"], [3, "tasks", "agentRunMap"], [3, "tasks", "taskDependencies", "agentRunMap"], [1, "header-left"], [1, "task-title"], [1, "task-description"], [1, "view-toggle"], ["title", "Gantt Chart", 1, "toggle-btn", 3, "click"], [1, "fas", "fa-chart-gantt"], ["title", "List View", 1, "toggle-btn", 3, "click"], [1, "fas", "fa-list"], [3, "taskClicked", "openEntityRecord", "tasks", "agentRunMap"], [3, "taskClicked", "openEntityRecord", "tasks", "taskDependencies", "agentRunMap"]], template: function TaskComponent_Template(rf, ctx) { if (rf & 1) {
215
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TaskComponent, selectors: [["mj-task"]], inputs: { Tasks: "Tasks", tasks: "tasks", GanttTasks: "GanttTasks", ganttTasks: "ganttTasks", TaskDependencies: "TaskDependencies", taskDependencies: "taskDependencies", AgentRunMap: "AgentRunMap", agentRunMap: "agentRunMap", Title: "Title", title: "title", Description: "Description", description: "description", ShowHeader: "ShowHeader", showHeader: "showHeader", ShowViewToggle: "ShowViewToggle", showViewToggle: "showViewToggle", ViewMode: "ViewMode", viewMode: "viewMode" }, outputs: { ViewModeChanged: "ViewModeChanged", viewModeChanged: "viewModeChanged", TaskClicked: "TaskClicked", taskClicked: "taskClicked", OpenEntityRecord: "OpenEntityRecord", openEntityRecord: "openEntityRecord" }, decls: 5, vars: 3, consts: [[1, "task-component"], [1, "task-header"], [1, "task-viewer"], [3, "tasks", "agentRunMap"], [3, "tasks", "taskDependencies", "agentRunMap"], [1, "header-left"], [1, "task-title"], [1, "task-description"], [1, "view-toggle"], ["title", "Gantt Chart", 1, "toggle-btn", 3, "click"], [1, "fas", "fa-chart-gantt"], ["title", "List View", 1, "toggle-btn", 3, "click"], [1, "fas", "fa-list"], [3, "taskClicked", "openEntityRecord", "tasks", "agentRunMap"], [3, "taskClicked", "openEntityRecord", "tasks", "taskDependencies", "agentRunMap"]], template: function TaskComponent_Template(rf, ctx) { if (rf & 1) {
108
216
  i0.ɵɵelementStart(0, "div", 0);
109
217
  i0.ɵɵconditionalCreate(1, TaskComponent_Conditional_1_Template, 5, 3, "div", 1);
110
218
  i0.ɵɵelementStart(2, "div", 2);
@@ -181,28 +289,52 @@ export class TaskComponent {
181
289
  </div>
182
290
  </div>
183
291
  `, styles: ["\n .task-component {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n }\n\n .task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n padding: 20px 24px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .header-left {\n flex: 1;\n min-width: 0;\n }\n\n .task-title {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n\n .task-description {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n line-height: 1.5;\n }\n\n .view-toggle {\n display: flex;\n gap: 8px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px;\n border-radius: 8px;\n }\n\n .toggle-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .toggle-btn:hover {\n color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-bg-surface) 50%, transparent);\n }\n\n .toggle-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .toggle-btn i {\n font-size: 14px;\n }\n\n .task-viewer {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n }\n "] }]
184
- }], null, { tasks: [{
292
+ }], null, { Tasks: [{
293
+ type: Input
294
+ }], tasks: [{
295
+ type: Input
296
+ }], GanttTasks: [{
185
297
  type: Input
186
298
  }], ganttTasks: [{
187
299
  type: Input
300
+ }], TaskDependencies: [{
301
+ type: Input
188
302
  }], taskDependencies: [{
189
303
  type: Input
304
+ }], AgentRunMap: [{
305
+ type: Input
190
306
  }], agentRunMap: [{
191
307
  type: Input
308
+ }], Title: [{
309
+ type: Input
192
310
  }], title: [{
193
311
  type: Input
312
+ }], Description: [{
313
+ type: Input
194
314
  }], description: [{
195
315
  type: Input
316
+ }], ShowHeader: [{
317
+ type: Input
196
318
  }], showHeader: [{
197
319
  type: Input
320
+ }], ShowViewToggle: [{
321
+ type: Input
198
322
  }], showViewToggle: [{
199
323
  type: Input
324
+ }], ViewMode: [{
325
+ type: Input
200
326
  }], viewMode: [{
201
327
  type: Input
328
+ }], ViewModeChanged: [{
329
+ type: Output
202
330
  }], viewModeChanged: [{
203
331
  type: Output
332
+ }], TaskClicked: [{
333
+ type: Output
204
334
  }], taskClicked: [{
205
335
  type: Output
336
+ }], OpenEntityRecord: [{
337
+ type: Output
206
338
  }], openEntityRecord: [{
207
339
  type: Output
208
340
  }] }); })();
@@ -1 +1 @@
1
- {"version":3,"file":"task.component.js","sourceRoot":"","sources":["../../../src/lib/components/task.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { MJTaskEntity, MJTaskDependencyEntity } from '@memberjunction/core-entities';\nimport { TaskViewMode } from '../models/task-view.models';\nimport { SimpleTaskViewerComponent } from './simple-task-viewer.component';\nimport { GanttTaskViewerComponent } from './gantt-task-viewer.component';\n\n/**\n * Main task component that composes SimpleTaskViewer and GanttTaskViewer\n * Allows switching between list and Gantt chart views\n */\n@Component({\n selector: 'mj-task',\n standalone: true,\n imports: [SimpleTaskViewerComponent, GanttTaskViewerComponent],\n template: `\n <div class=\"task-component\">\n <!-- Header with View Toggle -->\n @if (showHeader) {\n <div class=\"task-header\">\n <div class=\"header-left\">\n @if (title) {\n <h2 class=\"task-title\">{{ title }}</h2>\n }\n @if (description) {\n <p class=\"task-description\">{{ description }}</p>\n }\n </div>\n @if (showViewToggle) {\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'gantt'\"\n (click)=\"setViewMode('gantt')\"\n title=\"Gantt Chart\">\n <i class=\"fas fa-chart-gantt\"></i>\n <span>Gantt</span>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'simple'\"\n (click)=\"setViewMode('simple')\"\n title=\"List View\">\n <i class=\"fas fa-list\"></i>\n <span>List</span>\n </button>\n </div>\n }\n </div>\n }\n \n <!-- Task Viewer (Simple or Gantt) -->\n <div class=\"task-viewer\">\n @if (viewMode === 'simple') {\n <mj-simple-task-viewer\n [tasks]=\"tasks\"\n [agentRunMap]=\"agentRunMap\"\n (taskClicked)=\"onTaskClicked($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-simple-task-viewer>\n }\n \n @if (viewMode === 'gantt') {\n <mj-gantt-task-viewer\n [tasks]=\"ganttTasks || tasks\"\n [taskDependencies]=\"taskDependencies || []\"\n [agentRunMap]=\"agentRunMap\"\n (taskClicked)=\"onTaskClicked($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-gantt-task-viewer>\n }\n </div>\n </div>\n `,\n styles: [`\n .task-component {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n }\n\n .task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n padding: 20px 24px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .header-left {\n flex: 1;\n min-width: 0;\n }\n\n .task-title {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n\n .task-description {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n line-height: 1.5;\n }\n\n .view-toggle {\n display: flex;\n gap: 8px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px;\n border-radius: 8px;\n }\n\n .toggle-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .toggle-btn:hover {\n color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-bg-surface) 50%, transparent);\n }\n\n .toggle-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .toggle-btn i {\n font-size: 14px;\n }\n\n .task-viewer {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n }\n `]\n})\nexport class TaskComponent {\n @Input() tasks: MJTaskEntity[] = [];\n @Input() ganttTasks?: MJTaskEntity[]; // Optional separate task list for Gantt (includes parent)\n @Input() taskDependencies?: MJTaskDependencyEntity[]; // Task dependencies for Gantt links\n @Input() agentRunMap?: Map<string, string>; // Maps TaskID -> AgentRunID\n @Input() title?: string;\n @Input() description?: string;\n @Input() showHeader: boolean = true;\n @Input() showViewToggle: boolean = true; // Show Gantt/List toggle\n @Input() viewMode: TaskViewMode = 'simple';\n\n @Output() viewModeChanged = new EventEmitter<TaskViewMode>();\n @Output() taskClicked = new EventEmitter<MJTaskEntity>();\n @Output() openEntityRecord = new EventEmitter<{ entityName: string; recordId: string }>();\n\n public setViewMode(mode: TaskViewMode): void {\n this.viewMode = mode;\n this.viewModeChanged.emit(mode);\n }\n\n public onTaskClicked(task: MJTaskEntity): void {\n this.taskClicked.emit(task);\n }\n\n public onOpenEntityRecord(event: { entityName: string; recordId: string }): void {\n this.openEntityRecord.emit(event);\n }\n}\n"]}
1
+ {"version":3,"file":"task.component.js","sourceRoot":"","sources":["../../../src/lib/components/task.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter } from '@angular/core';\n\nimport { MJTaskEntity, MJTaskDependencyEntity } from '@memberjunction/core-entities';\nimport { TaskViewMode } from '../models/task-view.models';\nimport { SimpleTaskViewerComponent } from './simple-task-viewer.component';\nimport { GanttTaskViewerComponent } from './gantt-task-viewer.component';\n\n/**\n * Main task component that composes SimpleTaskViewer and GanttTaskViewer\n * Allows switching between list and Gantt chart views\n */\n@Component({\n selector: 'mj-task',\n standalone: true,\n imports: [SimpleTaskViewerComponent, GanttTaskViewerComponent],\n template: `\n <div class=\"task-component\">\n <!-- Header with View Toggle -->\n @if (showHeader) {\n <div class=\"task-header\">\n <div class=\"header-left\">\n @if (title) {\n <h2 class=\"task-title\">{{ title }}</h2>\n }\n @if (description) {\n <p class=\"task-description\">{{ description }}</p>\n }\n </div>\n @if (showViewToggle) {\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'gantt'\"\n (click)=\"setViewMode('gantt')\"\n title=\"Gantt Chart\">\n <i class=\"fas fa-chart-gantt\"></i>\n <span>Gantt</span>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"viewMode === 'simple'\"\n (click)=\"setViewMode('simple')\"\n title=\"List View\">\n <i class=\"fas fa-list\"></i>\n <span>List</span>\n </button>\n </div>\n }\n </div>\n }\n \n <!-- Task Viewer (Simple or Gantt) -->\n <div class=\"task-viewer\">\n @if (viewMode === 'simple') {\n <mj-simple-task-viewer\n [tasks]=\"tasks\"\n [agentRunMap]=\"agentRunMap\"\n (taskClicked)=\"onTaskClicked($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-simple-task-viewer>\n }\n \n @if (viewMode === 'gantt') {\n <mj-gantt-task-viewer\n [tasks]=\"ganttTasks || tasks\"\n [taskDependencies]=\"taskDependencies || []\"\n [agentRunMap]=\"agentRunMap\"\n (taskClicked)=\"onTaskClicked($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-gantt-task-viewer>\n }\n </div>\n </div>\n `,\n styles: [`\n .task-component {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-sunken);\n }\n\n .task-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n padding: 20px 24px;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-border-default);\n }\n\n .header-left {\n flex: 1;\n min-width: 0;\n }\n\n .task-title {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n }\n\n .task-description {\n margin: 0;\n font-size: 14px;\n color: var(--mj-text-muted);\n line-height: 1.5;\n }\n\n .view-toggle {\n display: flex;\n gap: 8px;\n background: var(--mj-bg-surface-sunken);\n padding: 4px;\n border-radius: 8px;\n }\n\n .toggle-btn {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: none;\n background: transparent;\n color: var(--mj-text-muted);\n font-size: 13px;\n font-weight: 600;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .toggle-btn:hover {\n color: var(--mj-text-primary);\n background: color-mix(in srgb, var(--mj-bg-surface) 50%, transparent);\n }\n\n .toggle-btn.active {\n background: var(--mj-bg-surface);\n color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .toggle-btn i {\n font-size: 14px;\n }\n\n .task-viewer {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n }\n `]\n})\nexport class TaskComponent {\n @Input() Tasks: MJTaskEntity[] = [];\n\n /** @deprecated Use {@link Tasks}. */\n @Input() set tasks(value: MJTaskEntity[]) {\n this.Tasks = value;\n }\n /** @deprecated Use {@link Tasks}. */\n get tasks(): MJTaskEntity[] {\n return this.Tasks;\n }\n @Input() GanttTasks?: MJTaskEntity[];\n\n /** @deprecated Use {@link GanttTasks}. */\n @Input() set ganttTasks(value: MJTaskEntity[] | undefined) {\n this.GanttTasks = value;\n }\n /** @deprecated Use {@link GanttTasks}. */\n get ganttTasks(): MJTaskEntity[] | undefined {\n return this.GanttTasks;\n } // Optional separate task list for Gantt (includes parent)\n @Input() TaskDependencies?: MJTaskDependencyEntity[];\n\n /** @deprecated Use {@link TaskDependencies}. */\n @Input() set taskDependencies(value: MJTaskDependencyEntity[] | undefined) {\n this.TaskDependencies = value;\n }\n /** @deprecated Use {@link TaskDependencies}. */\n get taskDependencies(): MJTaskDependencyEntity[] | undefined {\n return this.TaskDependencies;\n } // Task dependencies for Gantt links\n @Input() AgentRunMap?: Map<string, string>;\n\n /** @deprecated Use {@link AgentRunMap}. */\n @Input() set agentRunMap(value: Map<string, string> | undefined) {\n this.AgentRunMap = value;\n }\n /** @deprecated Use {@link AgentRunMap}. */\n get agentRunMap(): Map<string, string> | undefined {\n return this.AgentRunMap;\n } // Maps TaskID -> AgentRunID\n @Input() Title?: string;\n\n /** @deprecated Use {@link Title}. */\n @Input() set title(value: string | undefined) {\n this.Title = value;\n }\n /** @deprecated Use {@link Title}. */\n get title(): string | undefined {\n return this.Title;\n }\n @Input() Description?: string;\n\n /** @deprecated Use {@link Description}. */\n @Input() set description(value: string | undefined) {\n this.Description = value;\n }\n /** @deprecated Use {@link Description}. */\n get description(): string | undefined {\n return this.Description;\n }\n @Input() ShowHeader: boolean = true;\n\n /** @deprecated Use {@link ShowHeader}. */\n @Input() set showHeader(value: boolean) {\n this.ShowHeader = value;\n }\n /** @deprecated Use {@link ShowHeader}. */\n get showHeader(): boolean {\n return this.ShowHeader;\n }\n @Input() ShowViewToggle: boolean = true;\n\n /** @deprecated Use {@link ShowViewToggle}. */\n @Input() set showViewToggle(value: boolean) {\n this.ShowViewToggle = value;\n }\n /** @deprecated Use {@link ShowViewToggle}. */\n get showViewToggle(): boolean {\n return this.ShowViewToggle;\n } // Show Gantt/List toggle\n @Input() ViewMode: TaskViewMode = 'simple';\n\n /** @deprecated Use {@link ViewMode}. */\n @Input() set viewMode(value: TaskViewMode) {\n this.ViewMode = value;\n }\n /** @deprecated Use {@link ViewMode}. */\n get viewMode(): TaskViewMode {\n return this.ViewMode;\n }\n\n @Output() ViewModeChanged = new EventEmitter<TaskViewMode>();\n\n /**\n * @deprecated Use {@link ViewModeChanged}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (viewModeChanged) keeps working. Must stay AFTER ViewModeChanged: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() viewModeChanged = this.ViewModeChanged;\n @Output() TaskClicked = new EventEmitter<MJTaskEntity>();\n\n /**\n * @deprecated Use {@link TaskClicked}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (taskClicked) keeps working. Must stay AFTER TaskClicked: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() taskClicked = this.TaskClicked;\n @Output() OpenEntityRecord = new EventEmitter<{ entityName: string; recordId: string }>();\n\n /**\n * @deprecated Use {@link OpenEntityRecord}.\n *\n * The same emitter under the old binding name, so a template still binding\n * (openEntityRecord) keeps working. Must stay AFTER OpenEntityRecord: class fields\n * initialise in order, and the other way round this captures undefined.\n */\n @Output() openEntityRecord = this.OpenEntityRecord;\n\n public SetViewMode(mode: TaskViewMode): void {\n this.ViewMode = mode;\n this.ViewModeChanged.emit(mode);\n }\n\n /** @deprecated Use {@link SetViewMode}. */\n public setViewMode(mode: TaskViewMode): void {\n return this.SetViewMode(mode);\n }\n\n public OnTaskClicked(task: MJTaskEntity): void {\n this.TaskClicked.emit(task);\n }\n\n /** @deprecated Use {@link OnTaskClicked}. */\n public onTaskClicked(task: MJTaskEntity): void {\n return this.OnTaskClicked(task);\n }\n\n public OnOpenEntityRecord(event: { entityName: string; recordId: string }): void {\n this.OpenEntityRecord.emit(event);\n }\n\n /** @deprecated Use {@link OnOpenEntityRecord}. */\n public onOpenEntityRecord(event: { entityName: string; recordId: string }): void {\n return this.OnOpenEntityRecord(event);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-tasks",
3
- "version": "6.2.0-edge.0",
3
+ "version": "6.2.0-edge.2",
4
4
  "description": "MemberJunction: Angular components for task visualization and management with Gantt chart support",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "dependencies": {
8
- "@memberjunction/ai-core-plus": "6.2.0-edge.0",
9
- "@memberjunction/ai-engine-base": "6.2.0-edge.0",
10
- "@memberjunction/core": "6.2.0-edge.0",
11
- "@memberjunction/core-entities": "6.2.0-edge.0",
12
- "@memberjunction/global": "6.2.0-edge.0",
13
- "@memberjunction/ng-shared-generic": "6.2.0-edge.0",
8
+ "@memberjunction/ai-core-plus": "6.2.0-edge.2",
9
+ "@memberjunction/ai-engine-base": "6.2.0-edge.2",
10
+ "@memberjunction/core": "6.2.0-edge.2",
11
+ "@memberjunction/core-entities": "6.2.0-edge.2",
12
+ "@memberjunction/global": "6.2.0-edge.2",
13
+ "@memberjunction/ng-shared-generic": "6.2.0-edge.2",
14
14
  "dhtmlx-gantt": "^9.1.1",
15
15
  "rxjs": "^7.8.2"
16
16
  },
@@ -27,7 +27,7 @@
27
27
  "url": "https://github.com/MemberJunction/MJ"
28
28
  },
29
29
  "devDependencies": {
30
- "@memberjunction/ng-test-utils": "6.2.0-edge.0",
30
+ "@memberjunction/ng-test-utils": "6.2.0-edge.2",
31
31
  "vitest": "^4.0.18",
32
32
  "@angular/compiler-cli": "21.2.22"
33
33
  },