@memberjunction/ng-core-entity-forms 2.70.0 → 2.71.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 (64) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +65 -0
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -0
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +578 -0
  4. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -0
  5. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.d.ts +1 -0
  6. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.d.ts.map +1 -0
  7. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +282 -0
  8. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -0
  9. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +58 -0
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -0
  11. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +400 -0
  12. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -0
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +119 -23
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1815 -924
  16. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +159 -0
  18. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -0
  19. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +315 -0
  20. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -0
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +67 -0
  22. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -0
  23. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +463 -0
  24. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -0
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +82 -0
  26. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -0
  27. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +708 -0
  28. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -0
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
  30. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +65 -0
  31. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -0
  32. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +379 -0
  33. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -0
  34. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +58 -0
  35. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -0
  36. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +373 -0
  37. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -0
  38. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +61 -0
  39. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -0
  40. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +459 -0
  41. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -0
  42. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +90 -10
  43. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +1159 -687
  45. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  46. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +27 -0
  47. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -0
  48. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +88 -0
  49. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -0
  50. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +69 -0
  51. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -0
  52. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +442 -0
  53. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -0
  54. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +2 -2
  55. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  56. package/dist/lib/custom/custom-forms.module.d.ts +40 -33
  57. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  58. package/dist/lib/custom/custom-forms.module.js +26 -2
  59. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  60. package/dist/lib/shared/components/template-editor.component.d.ts +8 -2
  61. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  62. package/dist/lib/shared/components/template-editor.component.js +58 -23
  63. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  64. package/package.json +16 -16
@@ -0,0 +1,459 @@
1
+ import { Component } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';
4
+ import { RunView } from '@memberjunction/core';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@progress/kendo-angular-dialog";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@progress/kendo-angular-inputs";
9
+ import * as i4 from "@progress/kendo-angular-dropdowns";
10
+ import * as i5 from "@progress/kendo-angular-buttons";
11
+ import * as i6 from "@angular/common";
12
+ const _forTrack0 = ($index, $item) => $item.ID;
13
+ const _c0 = () => ({ Name: "All Types", ID: "all" });
14
+ function SubAgentSelectorDialogComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
15
+ i0.ɵɵelementStart(0, "span", 5);
16
+ i0.ɵɵtext(1);
17
+ i0.ɵɵelementEnd();
18
+ } if (rf & 2) {
19
+ const ctx_r0 = i0.ɵɵnextContext();
20
+ i0.ɵɵadvance();
21
+ i0.ɵɵtextInterpolate1("", ctx_r0.selectedCount, " selected");
22
+ } }
23
+ function SubAgentSelectorDialogComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
24
+ const _r2 = i0.ɵɵgetCurrentView();
25
+ i0.ɵɵelementStart(0, "button", 24);
26
+ i0.ɵɵlistener("click", function SubAgentSelectorDialogComponent_Conditional_16_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.clearSearch()); });
27
+ i0.ɵɵelement(1, "i", 25);
28
+ i0.ɵɵelementEnd();
29
+ } }
30
+ function SubAgentSelectorDialogComponent_Conditional_24_Template(rf, ctx) { if (rf & 1) {
31
+ i0.ɵɵelementStart(0, "div", 16);
32
+ i0.ɵɵelement(1, "i", 26);
33
+ i0.ɵɵelementStart(2, "p");
34
+ i0.ɵɵtext(3, "Loading available agents...");
35
+ i0.ɵɵelementEnd()();
36
+ } }
37
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
38
+ i0.ɵɵelementStart(0, "p");
39
+ i0.ɵɵtext(1, "No eligible root agents are available to become sub-agents.");
40
+ i0.ɵɵelementEnd();
41
+ } }
42
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
43
+ const _r3 = i0.ɵɵgetCurrentView();
44
+ i0.ɵɵelementStart(0, "p");
45
+ i0.ɵɵtext(1, "Try adjusting your search criteria or selecting a different agent type.");
46
+ i0.ɵɵelementEnd();
47
+ i0.ɵɵelementStart(2, "button", 30);
48
+ i0.ɵɵlistener("click", function SubAgentSelectorDialogComponent_Conditional_26_Conditional_1_Conditional_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.clearSearch()); });
49
+ i0.ɵɵtext(3, " Clear Search ");
50
+ i0.ɵɵelementEnd();
51
+ } }
52
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_1_Template(rf, ctx) { if (rf & 1) {
53
+ i0.ɵɵelementStart(0, "div", 27);
54
+ i0.ɵɵelement(1, "i", 29);
55
+ i0.ɵɵelementStart(2, "h4");
56
+ i0.ɵɵtext(3, "No agents found");
57
+ i0.ɵɵelementEnd();
58
+ i0.ɵɵtemplate(4, SubAgentSelectorDialogComponent_Conditional_26_Conditional_1_Conditional_4_Template, 2, 0, "p")(5, SubAgentSelectorDialogComponent_Conditional_26_Conditional_1_Conditional_5_Template, 4, 0);
59
+ i0.ɵɵelementEnd();
60
+ } if (rf & 2) {
61
+ const ctx_r0 = i0.ɵɵnextContext(2);
62
+ i0.ɵɵadvance(4);
63
+ i0.ɵɵconditional(ctx_r0.totalAgentCount === 0 ? 4 : 5);
64
+ } }
65
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
66
+ i0.ɵɵelement(0, "i", 34);
67
+ } }
68
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
69
+ i0.ɵɵelement(0, "i", 35);
70
+ } }
71
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
72
+ i0.ɵɵelement(0, "img", 37);
73
+ } if (rf & 2) {
74
+ const agent_r5 = i0.ɵɵnextContext().$implicit;
75
+ i0.ɵɵproperty("src", agent_r5.LogoURL, i0.ɵɵsanitizeUrl)("alt", agent_r5.Name + " logo");
76
+ } }
77
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
78
+ i0.ɵɵelement(0, "i");
79
+ } if (rf & 2) {
80
+ const agent_r5 = i0.ɵɵnextContext().$implicit;
81
+ const ctx_r0 = i0.ɵɵnextContext(3);
82
+ i0.ɵɵclassMap(ctx_r0.getAgentIcon(agent_r5));
83
+ } }
84
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
85
+ i0.ɵɵelementStart(0, "div", 41);
86
+ i0.ɵɵtext(1);
87
+ i0.ɵɵelementEnd();
88
+ } if (rf & 2) {
89
+ const agent_r5 = i0.ɵɵnextContext().$implicit;
90
+ i0.ɵɵadvance();
91
+ i0.ɵɵtextInterpolate(agent_r5.Description);
92
+ } }
93
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
94
+ i0.ɵɵelementStart(0, "span", 46);
95
+ i0.ɵɵtext(1);
96
+ i0.ɵɵelementEnd();
97
+ } if (rf & 2) {
98
+ const agent_r5 = i0.ɵɵnextContext().$implicit;
99
+ const ctx_r0 = i0.ɵɵnextContext(3);
100
+ i0.ɵɵstyleProp("background-color", ctx_r0.getAgentStatusColor(agent_r5));
101
+ i0.ɵɵadvance();
102
+ i0.ɵɵtextInterpolate1(" ", agent_r5.Status, " ");
103
+ } }
104
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
105
+ i0.ɵɵelementStart(0, "span", 44);
106
+ i0.ɵɵtext(1);
107
+ i0.ɵɵelementEnd();
108
+ } if (rf & 2) {
109
+ const agent_r5 = i0.ɵɵnextContext().$implicit;
110
+ i0.ɵɵadvance();
111
+ i0.ɵɵtextInterpolate(agent_r5.typeName);
112
+ } }
113
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
114
+ i0.ɵɵelementStart(0, "span", 45);
115
+ i0.ɵɵtext(1);
116
+ i0.ɵɵelementEnd();
117
+ } if (rf & 2) {
118
+ const agent_r5 = i0.ɵɵnextContext().$implicit;
119
+ i0.ɵɵadvance();
120
+ i0.ɵɵtextInterpolate(agent_r5.ExecutionMode);
121
+ } }
122
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
123
+ const _r4 = i0.ɵɵgetCurrentView();
124
+ i0.ɵɵelementStart(0, "div", 32);
125
+ i0.ɵɵlistener("click", function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Template_div_click_0_listener() { const agent_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.toggleAgentSelection(agent_r5)); });
126
+ i0.ɵɵelementStart(1, "div", 33);
127
+ i0.ɵɵtemplate(2, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_2_Template, 1, 0, "i", 34)(3, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_3_Template, 1, 0, "i", 35);
128
+ i0.ɵɵelementEnd();
129
+ i0.ɵɵelementStart(4, "div", 36);
130
+ i0.ɵɵtemplate(5, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_5_Template, 1, 2, "img", 37)(6, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_6_Template, 1, 2, "i", 38);
131
+ i0.ɵɵelementEnd();
132
+ i0.ɵɵelementStart(7, "div", 39)(8, "div", 40);
133
+ i0.ɵɵtext(9);
134
+ i0.ɵɵelementEnd();
135
+ i0.ɵɵtemplate(10, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_10_Template, 2, 1, "div", 41);
136
+ i0.ɵɵelementStart(11, "div", 42);
137
+ i0.ɵɵtemplate(12, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_12_Template, 2, 3, "span", 43)(13, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_13_Template, 2, 1, "span", 44)(14, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Conditional_14_Template, 2, 1, "span", 45);
138
+ i0.ɵɵelementEnd()()();
139
+ } if (rf & 2) {
140
+ const agent_r5 = ctx.$implicit;
141
+ i0.ɵɵclassProp("selected", agent_r5.selected);
142
+ i0.ɵɵadvance(2);
143
+ i0.ɵɵconditional(agent_r5.selected ? 2 : 3);
144
+ i0.ɵɵadvance(3);
145
+ i0.ɵɵconditional(agent_r5.LogoURL ? 5 : 6);
146
+ i0.ɵɵadvance(4);
147
+ i0.ɵɵtextInterpolate(agent_r5.Name);
148
+ i0.ɵɵadvance();
149
+ i0.ɵɵconditional(agent_r5.Description ? 10 : -1);
150
+ i0.ɵɵadvance(2);
151
+ i0.ɵɵconditional(agent_r5.Status ? 12 : -1);
152
+ i0.ɵɵadvance();
153
+ i0.ɵɵconditional(agent_r5.typeName ? 13 : -1);
154
+ i0.ɵɵadvance();
155
+ i0.ɵɵconditional(agent_r5.ExecutionMode ? 14 : -1);
156
+ } }
157
+ function SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_Template(rf, ctx) { if (rf & 1) {
158
+ i0.ɵɵelementStart(0, "div", 28);
159
+ i0.ɵɵrepeaterCreate(1, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_For_2_Template, 15, 9, "div", 31, _forTrack0);
160
+ i0.ɵɵpipe(3, "async");
161
+ i0.ɵɵelementEnd();
162
+ } if (rf & 2) {
163
+ const ctx_r0 = i0.ɵɵnextContext(2);
164
+ i0.ɵɵadvance();
165
+ i0.ɵɵrepeater(i0.ɵɵpipeBind1(3, 0, ctx_r0.filteredAgents$));
166
+ } }
167
+ function SubAgentSelectorDialogComponent_Conditional_26_Template(rf, ctx) { if (rf & 1) {
168
+ i0.ɵɵelementStart(0, "div", 17);
169
+ i0.ɵɵtemplate(1, SubAgentSelectorDialogComponent_Conditional_26_Conditional_1_Template, 6, 1, "div", 27)(2, SubAgentSelectorDialogComponent_Conditional_26_Conditional_2_Template, 4, 2, "div", 28);
170
+ i0.ɵɵelementEnd();
171
+ } if (rf & 2) {
172
+ const ctx_r0 = i0.ɵɵnextContext();
173
+ i0.ɵɵadvance();
174
+ i0.ɵɵconditional(ctx_r0.filteredCount === 0 ? 1 : 2);
175
+ } }
176
+ function SubAgentSelectorDialogComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
177
+ const _r6 = i0.ɵɵgetCurrentView();
178
+ i0.ɵɵelementStart(0, "button", 47);
179
+ i0.ɵɵlistener("click", function SubAgentSelectorDialogComponent_Conditional_29_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.createNew()); });
180
+ i0.ɵɵelement(1, "i", 48);
181
+ i0.ɵɵtext(2, " Create Sub-Agent ");
182
+ i0.ɵɵelementEnd();
183
+ } }
184
+ function SubAgentSelectorDialogComponent_Conditional_34_Template(rf, ctx) { if (rf & 1) {
185
+ i0.ɵɵtext(0);
186
+ } if (rf & 2) {
187
+ const ctx_r0 = i0.ɵɵnextContext();
188
+ i0.ɵɵtextInterpolate2(" Add ", ctx_r0.selectedCount > 0 ? ctx_r0.selectedCount + " " : "", "Sub-Agent", ctx_r0.selectedCount !== 1 ? "s" : "", " ");
189
+ } }
190
+ function SubAgentSelectorDialogComponent_Conditional_35_Template(rf, ctx) { if (rf & 1) {
191
+ i0.ɵɵtext(0, " Add Sub-Agent ");
192
+ } }
193
+ /**
194
+ * Sub-Agent Selector Dialog for selecting agents to convert to sub-agents.
195
+ * Only shows agents with NULL ParentID (root agents) that can become sub-agents.
196
+ */
197
+ export class SubAgentSelectorDialogComponent {
198
+ // Computed values
199
+ get selectedCount() {
200
+ return this.selectedAgents$.value.size;
201
+ }
202
+ get totalAgentCount() {
203
+ return this.allAgents$.value.length;
204
+ }
205
+ get filteredCount() {
206
+ return this.filteredAgents$.value.length;
207
+ }
208
+ constructor(dialogRef, cdr) {
209
+ this.dialogRef = dialogRef;
210
+ this.cdr = cdr;
211
+ // Reactive state management
212
+ this.destroy$ = new Subject();
213
+ this.result = new Subject();
214
+ // Data streams
215
+ this.allAgents$ = new BehaviorSubject([]);
216
+ this.agentTypes$ = new BehaviorSubject([]);
217
+ this.filteredAgents$ = new BehaviorSubject([]);
218
+ this.selectedAgents$ = new BehaviorSubject(new Set());
219
+ this.isLoading$ = new BehaviorSubject(false);
220
+ // UI state
221
+ this.searchControl = new FormControl('');
222
+ this.selectedTypeId$ = new BehaviorSubject('all');
223
+ }
224
+ ngOnInit() {
225
+ this.initializeData();
226
+ this.setupFiltering();
227
+ this.preselectExistingAgents();
228
+ }
229
+ ngOnDestroy() {
230
+ this.destroy$.next();
231
+ this.destroy$.complete();
232
+ }
233
+ async initializeData() {
234
+ this.isLoading$.next(true);
235
+ try {
236
+ await this.loadAgentsAndTypes();
237
+ }
238
+ catch (error) {
239
+ console.error('Error loading dialog data:', error);
240
+ }
241
+ finally {
242
+ this.isLoading$.next(false);
243
+ }
244
+ }
245
+ async loadAgentsAndTypes() {
246
+ const rv = new RunView();
247
+ // Load root agents (ParentID IS NULL) excluding the current parent agent
248
+ // Also exclude agents with ExposeAsAction = true (constraint prevents sub-agents from being exposed as actions)
249
+ const agentsResult = await rv.RunView({
250
+ EntityName: 'AI Agents',
251
+ ExtraFilter: `ParentID IS NULL AND ID != '${this.config.parentAgentId}' AND Status = 'Active' AND (ExposeAsAction = 0 OR ExposeAsAction IS NULL)`,
252
+ OrderBy: 'Name',
253
+ ResultType: 'entity_object',
254
+ MaxRows: 1000
255
+ });
256
+ if (agentsResult.Success) {
257
+ const agents = (agentsResult.Results || []).map(agent => ({
258
+ ...agent.GetAll(),
259
+ selected: false,
260
+ typeName: agent.Type || 'Default'
261
+ }));
262
+ this.allAgents$.next(agents);
263
+ }
264
+ // Load agent types for filtering
265
+ const typesResult = await rv.RunView({
266
+ EntityName: 'MJ: AI Agent Types',
267
+ ExtraFilter: 'IsActive = 1',
268
+ OrderBy: 'Name',
269
+ ResultType: 'entity_object',
270
+ MaxRows: 1000
271
+ });
272
+ if (typesResult.Success) {
273
+ this.agentTypes$.next(typesResult.Results || []);
274
+ }
275
+ }
276
+ setupFiltering() {
277
+ combineLatest([
278
+ this.allAgents$,
279
+ this.searchControl.valueChanges.pipe(debounceTime(300), distinctUntilChanged(), startWith('')),
280
+ this.selectedTypeId$
281
+ ]).pipe(takeUntil(this.destroy$)).subscribe(([agents, searchTerm, typeId]) => {
282
+ this.filterAgents(agents, searchTerm || '', typeId);
283
+ });
284
+ }
285
+ filterAgents(agents, searchTerm, typeId) {
286
+ let filtered = [...agents];
287
+ // Type filter
288
+ if (typeId !== 'all') {
289
+ filtered = filtered.filter(agent => agent.TypeID === typeId);
290
+ }
291
+ // Search filter
292
+ if (searchTerm) {
293
+ const term = searchTerm.toLowerCase();
294
+ filtered = filtered.filter(agent => (agent.Name && agent.Name.toLowerCase().includes(term)) ||
295
+ (agent.Description && agent.Description.toLowerCase().includes(term)) ||
296
+ (agent.typeName && agent.typeName.toLowerCase().includes(term)));
297
+ }
298
+ this.filteredAgents$.next(filtered);
299
+ }
300
+ preselectExistingAgents() {
301
+ if (this.config.selectedAgentIds.length > 0) {
302
+ const selected = new Set(this.config.selectedAgentIds);
303
+ this.selectedAgents$.next(selected);
304
+ // Update agent selection state
305
+ const agents = this.allAgents$.value;
306
+ agents.forEach(agent => {
307
+ agent.selected = selected.has(agent.ID);
308
+ });
309
+ this.allAgents$.next(agents);
310
+ }
311
+ }
312
+ // === UI Event Handlers ===
313
+ selectType(typeId) {
314
+ this.selectedTypeId$.next(typeId);
315
+ }
316
+ toggleAgentSelection(agent) {
317
+ const selected = this.selectedAgents$.value;
318
+ const agents = this.allAgents$.value;
319
+ // Find the agent and toggle its selection
320
+ const agentToUpdate = agents.find(a => a.ID === agent.ID);
321
+ if (agentToUpdate) {
322
+ agentToUpdate.selected = !agentToUpdate.selected;
323
+ if (agentToUpdate.selected) {
324
+ if (!this.config.multiSelect) {
325
+ // Single select mode - clear other selections
326
+ selected.clear();
327
+ agents.forEach(a => {
328
+ if (a.ID !== agent.ID) {
329
+ a.selected = false;
330
+ }
331
+ });
332
+ }
333
+ selected.add(agent.ID);
334
+ }
335
+ else {
336
+ selected.delete(agent.ID);
337
+ }
338
+ this.selectedAgents$.next(new Set(selected));
339
+ this.allAgents$.next(agents);
340
+ // Update filtered agents to reflect selection state
341
+ const filtered = this.filteredAgents$.value;
342
+ const filteredAgent = filtered.find(a => a.ID === agent.ID);
343
+ if (filteredAgent) {
344
+ filteredAgent.selected = agentToUpdate.selected;
345
+ this.filteredAgents$.next(filtered);
346
+ }
347
+ }
348
+ }
349
+ clearSearch() {
350
+ this.searchControl.reset();
351
+ }
352
+ getAgentIcon(agent) {
353
+ if (agent.IconClass) {
354
+ return agent.IconClass;
355
+ }
356
+ return 'fa-solid fa-robot';
357
+ }
358
+ getAgentStatusColor(agent) {
359
+ switch (agent.Status) {
360
+ case 'Active': return '#28a745';
361
+ case 'Disabled': return '#6c757d';
362
+ case 'Pending': return '#ffc107';
363
+ default: return '#6c757d';
364
+ }
365
+ }
366
+ // === Dialog Actions ===
367
+ cancel() {
368
+ this.result.next(null);
369
+ this.dialogRef.close();
370
+ }
371
+ createNew() {
372
+ this.result.next({
373
+ selectedAgents: [],
374
+ createNew: true
375
+ });
376
+ this.dialogRef.close();
377
+ }
378
+ async addSelectedAgents() {
379
+ const selectedIds = this.selectedAgents$.value;
380
+ const allAgents = this.allAgents$.value;
381
+ // Get the selected agent display items
382
+ const selectedDisplayItems = allAgents
383
+ .filter(agent => selectedIds.has(agent.ID));
384
+ // Convert AgentDisplayItem to AIAgentEntity by casting (they have the same structure)
385
+ const selectedAgents = selectedDisplayItems.map(item => item);
386
+ this.result.next({
387
+ selectedAgents,
388
+ createNew: false
389
+ });
390
+ this.dialogRef.close();
391
+ }
392
+ static { this.ɵfac = function SubAgentSelectorDialogComponent_Factory(t) { return new (t || SubAgentSelectorDialogComponent)(i0.ɵɵdirectiveInject(i1.DialogRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
393
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SubAgentSelectorDialogComponent, selectors: [["mj-sub-agent-selector-dialog"]], decls: 36, vars: 21, consts: [[1, "sub-agent-selector-dialog"], [1, "dialog-header"], [1, "header-info"], [1, "header-description"], [1, "header-stats"], [1, "selection-count"], [1, "total-count"], [1, "controls-section"], [1, "search-controls"], [1, "search-input"], [1, "fa-solid", "fa-search", "search-icon"], ["placeholder", "Search agents by name, description, or type...", 1, "search-field", 3, "formControl"], ["kendoButton", "", "fillMode", "flat", "size", "small", 1, "clear-search"], [1, "filter-controls"], [1, "type-filter"], ["textField", "Name", "valueField", "ID", 1, "type-dropdown", 3, "valueChange", "value", "valuePrimitive", "defaultItem", "data"], [1, "loading-state"], [1, "content-area"], [1, "dialog-footer"], [1, "footer-left"], ["kendoButton", "", "look", "outline", "themeColor", "primary"], [1, "footer-right"], ["kendoButton", "", "look", "flat", 3, "click"], ["kendoButton", "", "themeColor", "primary", 3, "click", "disabled"], ["kendoButton", "", "fillMode", "flat", "size", "small", 1, "clear-search", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-2x"], [1, "empty-state"], [1, "agents-grid"], [1, "fa-solid", "fa-robot"], ["kendoButton", "", "themeColor", "primary", 3, "click"], [1, "agent-card", 3, "selected"], [1, "agent-card", 3, "click"], [1, "selection-indicator"], [1, "fa-solid", "fa-check-circle"], [1, "fa-regular", "fa-circle"], [1, "agent-icon"], [1, "agent-logo", 3, "src", "alt"], [3, "class"], [1, "agent-info"], [1, "agent-name"], [1, "agent-description"], [1, "agent-meta"], [1, "status-badge", 3, "background-color"], [1, "type-badge"], [1, "execution-badge"], [1, "status-badge"], ["kendoButton", "", "look", "outline", "themeColor", "primary", 3, "click"], [1, "fa-solid", "fa-plus"]], template: function SubAgentSelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
394
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3");
395
+ i0.ɵɵtext(4);
396
+ i0.ɵɵelementEnd();
397
+ i0.ɵɵelementStart(5, "p", 3);
398
+ i0.ɵɵtext(6, " Choose existing root agents to convert into sub-agents. Only active agents without parents and not exposed as actions can be selected. ");
399
+ i0.ɵɵelementEnd()();
400
+ i0.ɵɵelementStart(7, "div", 4);
401
+ i0.ɵɵtemplate(8, SubAgentSelectorDialogComponent_Conditional_8_Template, 2, 1, "span", 5);
402
+ i0.ɵɵelementStart(9, "span", 6);
403
+ i0.ɵɵtext(10);
404
+ i0.ɵɵelementEnd()()();
405
+ i0.ɵɵelementStart(11, "div", 7)(12, "div", 8)(13, "div", 9);
406
+ i0.ɵɵelement(14, "i", 10)(15, "kendo-textbox", 11);
407
+ i0.ɵɵtemplate(16, SubAgentSelectorDialogComponent_Conditional_16_Template, 2, 0, "button", 12);
408
+ i0.ɵɵelementEnd()();
409
+ i0.ɵɵelementStart(17, "div", 13)(18, "div", 14)(19, "label");
410
+ i0.ɵɵtext(20, "Agent Type:");
411
+ i0.ɵɵelementEnd();
412
+ i0.ɵɵelementStart(21, "kendo-dropdownlist", 15);
413
+ i0.ɵɵpipe(22, "async");
414
+ i0.ɵɵpipe(23, "async");
415
+ i0.ɵɵlistener("valueChange", function SubAgentSelectorDialogComponent_Template_kendo_dropdownlist_valueChange_21_listener($event) { return ctx.selectType($event); });
416
+ i0.ɵɵelementEnd()()()();
417
+ i0.ɵɵtemplate(24, SubAgentSelectorDialogComponent_Conditional_24_Template, 4, 0, "div", 16);
418
+ i0.ɵɵpipe(25, "async");
419
+ i0.ɵɵtemplate(26, SubAgentSelectorDialogComponent_Conditional_26_Template, 3, 1, "div", 17);
420
+ i0.ɵɵelementStart(27, "div", 18)(28, "div", 19);
421
+ i0.ɵɵtemplate(29, SubAgentSelectorDialogComponent_Conditional_29_Template, 3, 0, "button", 20);
422
+ i0.ɵɵelementEnd();
423
+ i0.ɵɵelementStart(30, "div", 21)(31, "button", 22);
424
+ i0.ɵɵlistener("click", function SubAgentSelectorDialogComponent_Template_button_click_31_listener() { return ctx.cancel(); });
425
+ i0.ɵɵtext(32, " Cancel ");
426
+ i0.ɵɵelementEnd();
427
+ i0.ɵɵelementStart(33, "button", 23);
428
+ i0.ɵɵlistener("click", function SubAgentSelectorDialogComponent_Template_button_click_33_listener() { return ctx.addSelectedAgents(); });
429
+ i0.ɵɵtemplate(34, SubAgentSelectorDialogComponent_Conditional_34_Template, 1, 2)(35, SubAgentSelectorDialogComponent_Conditional_35_Template, 1, 0);
430
+ i0.ɵɵelementEnd()()()();
431
+ } if (rf & 2) {
432
+ i0.ɵɵadvance(4);
433
+ i0.ɵɵtextInterpolate(ctx.config.title || "Select Sub-Agents");
434
+ i0.ɵɵadvance(4);
435
+ i0.ɵɵconditional(ctx.selectedCount > 0 ? 8 : -1);
436
+ i0.ɵɵadvance(2);
437
+ i0.ɵɵtextInterpolate2("", ctx.filteredCount, " of ", ctx.totalAgentCount, " agents");
438
+ i0.ɵɵadvance(5);
439
+ i0.ɵɵproperty("formControl", ctx.searchControl);
440
+ i0.ɵɵadvance();
441
+ i0.ɵɵconditional(ctx.searchControl.value ? 16 : -1);
442
+ i0.ɵɵadvance(5);
443
+ i0.ɵɵproperty("value", i0.ɵɵpipeBind1(22, 14, ctx.selectedTypeId$))("valuePrimitive", true)("defaultItem", i0.ɵɵpureFunction0(20, _c0))("data", i0.ɵɵpipeBind1(23, 16, ctx.agentTypes$));
444
+ i0.ɵɵadvance(3);
445
+ i0.ɵɵconditional(i0.ɵɵpipeBind1(25, 18, ctx.isLoading$) ? 24 : 26);
446
+ i0.ɵɵadvance(5);
447
+ i0.ɵɵconditional(ctx.config.showCreateNew ? 29 : -1);
448
+ i0.ɵɵadvance(4);
449
+ i0.ɵɵproperty("disabled", ctx.selectedCount === 0);
450
+ i0.ɵɵadvance();
451
+ i0.ɵɵconditional(ctx.config.multiSelect ? 34 : 35);
452
+ } }, dependencies: [i2.NgControlStatus, i2.FormControlDirective, i3.TextBoxComponent, i4.DropDownListComponent, i5.ButtonComponent, i6.AsyncPipe], styles: [".sub-agent-selector-dialog[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: white;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n}\n\n.header-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: #212529;\n font-size: 1.25rem;\n font-weight: 600;\n}\n\n.header-description[_ngcontent-%COMP%] {\n margin: 0;\n color: #6c757d;\n font-size: 0.9rem;\n line-height: 1.4;\n}\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.25rem;\n font-size: 0.85rem;\n}\n\n.selection-count[_ngcontent-%COMP%] {\n color: #0d6efd;\n font-weight: 600;\n}\n\n.total-count[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n\n\n\n.controls-section[_ngcontent-%COMP%] {\n padding: 1rem 1.5rem;\n background: white;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n gap: 1rem;\n align-items: flex-end;\n}\n\n.search-controls[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.search-input[_ngcontent-%COMP%] {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n color: #6c757d;\n z-index: 1;\n}\n\n.search-field[_ngcontent-%COMP%] {\n width: 100%;\n padding-left: 40px;\n}\n\n.clear-search[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n z-index: 1;\n}\n\n.filter-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 1rem;\n align-items: flex-end;\n}\n\n.type-filter[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.type-filter[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n font-weight: 500;\n color: #495057;\n}\n\n.type-dropdown[_ngcontent-%COMP%] {\n min-width: 150px;\n}\n\n\n\n.content-area[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n}\n\n\n\n.loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #0d6efd;\n margin-bottom: 1rem;\n}\n\n.loading-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1rem;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n color: #dee2e6;\n margin-bottom: 1rem;\n}\n\n.empty-state[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-size: 1.1rem;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 1rem 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n\n\n.agents-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1rem;\n}\n\n.agent-card[_ngcontent-%COMP%] {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 1rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n gap: 1rem;\n position: relative;\n}\n\n.agent-card[_ngcontent-%COMP%]:hover {\n border-color: #0d6efd;\n box-shadow: 0 2px 8px rgba(13, 110, 253, 0.15);\n}\n\n.agent-card.selected[_ngcontent-%COMP%] {\n border-color: #0d6efd;\n background: #f8f9ff;\n box-shadow: 0 2px 8px rgba(13, 110, 253, 0.2);\n}\n\n.selection-indicator[_ngcontent-%COMP%] {\n position: absolute;\n top: 0.75rem;\n right: 0.75rem;\n font-size: 1.1rem;\n}\n\n.selection-indicator[_ngcontent-%COMP%] .fa-check-circle[_ngcontent-%COMP%] {\n color: #198754;\n}\n\n.selection-indicator[_ngcontent-%COMP%] .fa-circle[_ngcontent-%COMP%] {\n color: #dee2e6;\n}\n\n.agent-icon[_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n}\n\n.agent-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: #0d6efd;\n}\n\n.agent-logo[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 6px;\n}\n\n.agent-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.agent-name[_ngcontent-%COMP%] {\n font-size: 1rem;\n font-weight: 600;\n color: #212529;\n margin-bottom: 0.5rem;\n word-wrap: break-word;\n}\n\n.agent-description[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: #6c757d;\n line-height: 1.4;\n margin-bottom: 0.75rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.agent-meta[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.status-badge[_ngcontent-%COMP%], \n.type-badge[_ngcontent-%COMP%], \n.execution-badge[_ngcontent-%COMP%] {\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n font-size: 0.75rem;\n font-weight: 500;\n color: white;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n \n\n}\n\n.type-badge[_ngcontent-%COMP%] {\n background: #6f42c1;\n}\n\n.execution-badge[_ngcontent-%COMP%] {\n background: #fd7e14;\n}\n\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n padding: 1rem 1.5rem;\n background: white;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.footer-left[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.5rem;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 0.75rem;\n}\n\n.dialog-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 100px;\n}\n\n.dialog-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0.5rem;\n}\n\n\n\n@media (max-width: 768px) {\n .agents-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n \n .dialog-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 1rem;\n }\n \n .header-stats[_ngcontent-%COMP%] {\n align-items: flex-start;\n }\n \n .controls-section[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n }\n \n .filter-controls[_ngcontent-%COMP%] {\n justify-content: flex-start;\n }\n \n .dialog-footer[_ngcontent-%COMP%] {\n flex-direction: column-reverse;\n gap: 1rem;\n }\n \n .footer-left[_ngcontent-%COMP%], \n .footer-right[_ngcontent-%COMP%] {\n width: 100%;\n justify-content: center;\n }\n}"] }); }
453
+ }
454
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SubAgentSelectorDialogComponent, [{
455
+ type: Component,
456
+ args: [{ selector: 'mj-sub-agent-selector-dialog', template: "<!-- Sub-Agent Selector Dialog -->\n<div class=\"sub-agent-selector-dialog\">\n \n <!-- Dialog Header -->\n <div class=\"dialog-header\">\n <div class=\"header-info\">\n <h3>{{ config.title || 'Select Sub-Agents' }}</h3>\n <p class=\"header-description\">\n Choose existing root agents to convert into sub-agents. Only active agents without parents and not exposed as actions can be selected.\n </p>\n </div>\n <div class=\"header-stats\">\n @if (selectedCount > 0) {\n <span class=\"selection-count\">{{ selectedCount }} selected</span>\n }\n <span class=\"total-count\">{{ filteredCount }} of {{ totalAgentCount }} agents</span>\n </div>\n </div>\n\n <!-- Search and Filter Controls -->\n <div class=\"controls-section\">\n <div class=\"search-controls\">\n <div class=\"search-input\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <kendo-textbox \n [formControl]=\"searchControl\"\n placeholder=\"Search agents by name, description, or type...\"\n class=\"search-field\">\n </kendo-textbox>\n @if (searchControl.value) {\n <button kendoButton \n fillMode=\"flat\" \n size=\"small\"\n (click)=\"clearSearch()\"\n class=\"clear-search\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n }\n </div>\n </div>\n\n <div class=\"filter-controls\">\n <div class=\"type-filter\">\n <label>Agent Type:</label>\n <kendo-dropdownlist \n [value]=\"selectedTypeId$ | async\"\n (valueChange)=\"selectType($event)\"\n textField=\"Name\"\n valueField=\"ID\"\n [valuePrimitive]=\"true\"\n [defaultItem]=\"{ Name: 'All Types', ID: 'all' }\"\n [data]=\"agentTypes$ | async\"\n class=\"type-dropdown\">\n </kendo-dropdownlist>\n </div>\n </div>\n </div>\n\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n <p>Loading available agents...</p>\n </div>\n } @else {\n \n <!-- Content Area -->\n <div class=\"content-area\">\n @if (filteredCount === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-robot\"></i>\n <h4>No agents found</h4>\n @if (totalAgentCount === 0) {\n <p>No eligible root agents are available to become sub-agents.</p>\n } @else {\n <p>Try adjusting your search criteria or selecting a different agent type.</p>\n <button kendoButton (click)=\"clearSearch()\" themeColor=\"primary\">\n Clear Search\n </button>\n }\n </div>\n } @else {\n \n <!-- Agents Grid -->\n <div class=\"agents-grid\">\n @for (agent of (filteredAgents$ | async); track agent.ID) {\n <div class=\"agent-card\" \n [class.selected]=\"agent.selected\"\n (click)=\"toggleAgentSelection(agent)\">\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\">\n @if (agent.selected) {\n <i class=\"fa-solid fa-check-circle\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n \n <!-- Agent Icon/Logo -->\n <div class=\"agent-icon\">\n @if (agent.LogoURL) {\n <img [src]=\"agent.LogoURL\" [alt]=\"agent.Name + ' logo'\" class=\"agent-logo\">\n } @else {\n <i [class]=\"getAgentIcon(agent)\"></i>\n }\n </div>\n \n <!-- Agent Info -->\n <div class=\"agent-info\">\n <div class=\"agent-name\">{{ agent.Name }}</div>\n @if (agent.Description) {\n <div class=\"agent-description\">{{ agent.Description }}</div>\n }\n <div class=\"agent-meta\">\n @if (agent.Status) {\n <span class=\"status-badge\" [style.background-color]=\"getAgentStatusColor(agent)\">\n {{ agent.Status }}\n </span>\n }\n @if (agent.typeName) {\n <span class=\"type-badge\">{{ agent.typeName }}</span>\n }\n @if (agent.ExecutionMode) {\n <span class=\"execution-badge\">{{ agent.ExecutionMode }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Dialog Footer -->\n <div class=\"dialog-footer\">\n <div class=\"footer-left\">\n @if (config.showCreateNew) {\n <button kendoButton \n look=\"outline\"\n themeColor=\"primary\"\n (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Sub-Agent\n </button>\n }\n </div>\n \n <div class=\"footer-right\">\n <button kendoButton \n look=\"flat\" \n (click)=\"cancel()\">\n Cancel\n </button>\n \n <button kendoButton \n themeColor=\"primary\" \n (click)=\"addSelectedAgents()\"\n [disabled]=\"selectedCount === 0\">\n @if (config.multiSelect) {\n Add {{ selectedCount > 0 ? selectedCount + ' ' : '' }}Sub-Agent{{ selectedCount !== 1 ? 's' : '' }}\n } @else {\n Add Sub-Agent\n }\n </button>\n </div>\n </div>\n</div>", styles: [".sub-agent-selector-dialog {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f8f9fa;\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n/* === Dialog Header === */\n.dialog-header {\n padding: 1.5rem;\n background: white;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n}\n\n.header-info h3 {\n margin: 0 0 0.5rem 0;\n color: #212529;\n font-size: 1.25rem;\n font-weight: 600;\n}\n\n.header-description {\n margin: 0;\n color: #6c757d;\n font-size: 0.9rem;\n line-height: 1.4;\n}\n\n.header-stats {\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n gap: 0.25rem;\n font-size: 0.85rem;\n}\n\n.selection-count {\n color: #0d6efd;\n font-weight: 600;\n}\n\n.total-count {\n color: #6c757d;\n}\n\n/* === Controls Section === */\n.controls-section {\n padding: 1rem 1.5rem;\n background: white;\n border-bottom: 1px solid #e9ecef;\n display: flex;\n gap: 1rem;\n align-items: flex-end;\n}\n\n.search-controls {\n flex: 1;\n}\n\n.search-input {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.search-icon {\n position: absolute;\n left: 12px;\n color: #6c757d;\n z-index: 1;\n}\n\n.search-field {\n width: 100%;\n padding-left: 40px;\n}\n\n.clear-search {\n position: absolute;\n right: 8px;\n z-index: 1;\n}\n\n.filter-controls {\n display: flex;\n gap: 1rem;\n align-items: flex-end;\n}\n\n.type-filter {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.type-filter label {\n font-size: 0.85rem;\n font-weight: 500;\n color: #495057;\n}\n\n.type-dropdown {\n min-width: 150px;\n}\n\n/* === Content Area === */\n.content-area {\n flex: 1;\n overflow-y: auto;\n padding: 1rem;\n}\n\n/* === Loading State === */\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n}\n\n.loading-state i {\n color: #0d6efd;\n margin-bottom: 1rem;\n}\n\n.loading-state p {\n margin: 0;\n font-size: 1rem;\n}\n\n/* === Empty State === */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 300px;\n color: #6c757d;\n text-align: center;\n}\n\n.empty-state i {\n font-size: 3rem;\n color: #dee2e6;\n margin-bottom: 1rem;\n}\n\n.empty-state h4 {\n margin: 0 0 0.5rem 0;\n color: #495057;\n font-size: 1.1rem;\n}\n\n.empty-state p {\n margin: 0 0 1rem 0;\n max-width: 400px;\n line-height: 1.5;\n}\n\n/* === Agents Grid === */\n.agents-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));\n gap: 1rem;\n}\n\n.agent-card {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 1rem;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n gap: 1rem;\n position: relative;\n}\n\n.agent-card:hover {\n border-color: #0d6efd;\n box-shadow: 0 2px 8px rgba(13, 110, 253, 0.15);\n}\n\n.agent-card.selected {\n border-color: #0d6efd;\n background: #f8f9ff;\n box-shadow: 0 2px 8px rgba(13, 110, 253, 0.2);\n}\n\n.selection-indicator {\n position: absolute;\n top: 0.75rem;\n right: 0.75rem;\n font-size: 1.1rem;\n}\n\n.selection-indicator .fa-check-circle {\n color: #198754;\n}\n\n.selection-indicator .fa-circle {\n color: #dee2e6;\n}\n\n.agent-icon {\n flex-shrink: 0;\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 8px;\n background: #f8f9fa;\n border: 1px solid #e9ecef;\n}\n\n.agent-icon i {\n font-size: 1.5rem;\n color: #0d6efd;\n}\n\n.agent-logo {\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 6px;\n}\n\n.agent-info {\n flex: 1;\n min-width: 0;\n}\n\n.agent-name {\n font-size: 1rem;\n font-weight: 600;\n color: #212529;\n margin-bottom: 0.5rem;\n word-wrap: break-word;\n}\n\n.agent-description {\n font-size: 0.85rem;\n color: #6c757d;\n line-height: 1.4;\n margin-bottom: 0.75rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.agent-meta {\n display: flex;\n flex-wrap: wrap;\n gap: 0.5rem;\n}\n\n.status-badge,\n.type-badge,\n.execution-badge {\n padding: 0.25rem 0.5rem;\n border-radius: 4px;\n font-size: 0.75rem;\n font-weight: 500;\n color: white;\n}\n\n.status-badge {\n /* Color set dynamically via style binding */\n}\n\n.type-badge {\n background: #6f42c1;\n}\n\n.execution-badge {\n background: #fd7e14;\n}\n\n/* === Dialog Footer === */\n.dialog-footer {\n padding: 1rem 1.5rem;\n background: white;\n border-top: 1px solid #e9ecef;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.footer-left {\n display: flex;\n gap: 0.5rem;\n}\n\n.footer-right {\n display: flex;\n gap: 0.75rem;\n}\n\n.dialog-footer button {\n min-width: 100px;\n}\n\n.dialog-footer button i {\n margin-right: 0.5rem;\n}\n\n/* === Responsive Design === */\n@media (max-width: 768px) {\n .agents-grid {\n grid-template-columns: 1fr;\n }\n \n .dialog-header {\n flex-direction: column;\n gap: 1rem;\n }\n \n .header-stats {\n align-items: flex-start;\n }\n \n .controls-section {\n flex-direction: column;\n align-items: stretch;\n }\n \n .filter-controls {\n justify-content: flex-start;\n }\n \n .dialog-footer {\n flex-direction: column-reverse;\n gap: 1rem;\n }\n \n .footer-left,\n .footer-right {\n width: 100%;\n justify-content: center;\n }\n}"] }]
457
+ }], () => [{ type: i1.DialogRef }, { type: i0.ChangeDetectorRef }], null); })();
458
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SubAgentSelectorDialogComponent, { className: "SubAgentSelectorDialogComponent", filePath: "src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts", lineNumber: 35 }); })();
459
+ //# sourceMappingURL=sub-agent-selector-dialog.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts","../../../../src/lib/custom/AIAgents/sub-agent-selector-dialog.component.html"],"names":[],"mappings":"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"}