@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,379 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject, BehaviorSubject, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';
3
+ import { FormControl } from '@angular/forms';
4
+ import { RunView } from '@memberjunction/core';
5
+ import { MJNotificationService } from '@memberjunction/ng-notifications';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@progress/kendo-angular-dialog";
8
+ import * as i2 from "@angular/forms";
9
+ import * as i3 from "@progress/kendo-angular-inputs";
10
+ import * as i4 from "@progress/kendo-angular-buttons";
11
+ import * as i5 from "@angular/common";
12
+ const _forTrack0 = ($index, $item) => $item.ID;
13
+ function PromptSelectorDialogComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 8);
15
+ i0.ɵɵelement(2, "i", 9);
16
+ i0.ɵɵelementEnd();
17
+ i0.ɵɵelementStart(3, "p");
18
+ i0.ɵɵtext(4, "Loading prompts...");
19
+ i0.ɵɵelementEnd()();
20
+ } }
21
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_13_Template(rf, ctx) { if (rf & 1) {
22
+ i0.ɵɵelementStart(0, "span", 21);
23
+ i0.ɵɵelement(1, "i", 24);
24
+ i0.ɵɵtext(2);
25
+ i0.ɵɵelementEnd();
26
+ } if (rf & 2) {
27
+ const ctx_r1 = i0.ɵɵnextContext(2);
28
+ i0.ɵɵadvance(2);
29
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.selectedPrompts.size, " selected ");
30
+ } }
31
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_15_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div", 23);
33
+ i0.ɵɵelement(1, "i", 25);
34
+ i0.ɵɵelementStart(2, "h4");
35
+ i0.ɵɵtext(3, "No prompts found");
36
+ i0.ɵɵelementEnd();
37
+ i0.ɵɵelementStart(4, "p");
38
+ i0.ɵɵtext(5, "Try adjusting your search criteria or check that prompts are properly configured.");
39
+ i0.ɵɵelementEnd()();
40
+ } }
41
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
42
+ i0.ɵɵelement(0, "i", 29);
43
+ } }
44
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelement(0, "i", 30);
46
+ } }
47
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
48
+ i0.ɵɵelement(0, "i", 31);
49
+ } }
50
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
51
+ i0.ɵɵelementStart(0, "span", 36);
52
+ i0.ɵɵelement(1, "i", 41);
53
+ i0.ɵɵtext(2, " Linked ");
54
+ i0.ɵɵelementEnd();
55
+ } }
56
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
57
+ i0.ɵɵelementStart(0, "p", 38);
58
+ i0.ɵɵtext(1);
59
+ i0.ɵɵelementEnd();
60
+ } if (rf & 2) {
61
+ const prompt_r4 = i0.ɵɵnextContext().$implicit;
62
+ i0.ɵɵadvance();
63
+ i0.ɵɵtextInterpolate(prompt_r4.Description);
64
+ } }
65
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
66
+ i0.ɵɵelementStart(0, "span", 40);
67
+ i0.ɵɵelement(1, "i", 42);
68
+ i0.ɵɵtext(2);
69
+ i0.ɵɵpipe(3, "date");
70
+ i0.ɵɵelementEnd();
71
+ } if (rf & 2) {
72
+ const prompt_r4 = i0.ɵɵnextContext().$implicit;
73
+ i0.ɵɵadvance(2);
74
+ i0.ɵɵtextInterpolate1(" Created ", i0.ɵɵpipeBind2(3, 1, prompt_r4.__mj_CreatedAt, "short"), " ");
75
+ } }
76
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Template(rf, ctx) { if (rf & 1) {
77
+ const _r3 = i0.ɵɵgetCurrentView();
78
+ i0.ɵɵelementStart(0, "div", 27);
79
+ i0.ɵɵlistener("click", function PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Template_div_click_0_listener() { const prompt_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.togglePromptSelection(prompt_r4)); });
80
+ i0.ɵɵelementStart(1, "div", 28);
81
+ i0.ɵɵtemplate(2, PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_2_Template, 1, 0, "i", 29)(3, PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_3_Template, 1, 0, "i", 30)(4, PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_4_Template, 1, 0, "i", 31);
82
+ i0.ɵɵelementEnd();
83
+ i0.ɵɵelementStart(5, "div", 32)(6, "div", 33)(7, "h4", 34);
84
+ i0.ɵɵtext(8);
85
+ i0.ɵɵelementEnd();
86
+ i0.ɵɵelementStart(9, "div", 35);
87
+ i0.ɵɵtemplate(10, PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_10_Template, 3, 0, "span", 36);
88
+ i0.ɵɵelementStart(11, "span", 37);
89
+ i0.ɵɵtext(12);
90
+ i0.ɵɵelementEnd()()();
91
+ i0.ɵɵtemplate(13, PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_13_Template, 2, 1, "p", 38);
92
+ i0.ɵɵelementStart(14, "div", 39);
93
+ i0.ɵɵtemplate(15, PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Conditional_15_Template, 4, 4, "span", 40);
94
+ i0.ɵɵelementEnd()()();
95
+ } if (rf & 2) {
96
+ const prompt_r4 = ctx.$implicit;
97
+ const ctx_r1 = i0.ɵɵnextContext(3);
98
+ i0.ɵɵclassProp("selected", ctx_r1.isPromptSelected(prompt_r4))("linked", ctx_r1.isPromptLinked(prompt_r4));
99
+ i0.ɵɵadvance(2);
100
+ i0.ɵɵconditional(ctx_r1.isPromptLinked(prompt_r4) ? 2 : ctx_r1.isPromptSelected(prompt_r4) ? 3 : 4);
101
+ i0.ɵɵadvance(6);
102
+ i0.ɵɵtextInterpolate(prompt_r4.Name);
103
+ i0.ɵɵadvance(2);
104
+ i0.ɵɵconditional(ctx_r1.isPromptLinked(prompt_r4) ? 10 : -1);
105
+ i0.ɵɵadvance();
106
+ i0.ɵɵstyleProp("background-color", ctx_r1.getPromptStatusColor(prompt_r4));
107
+ i0.ɵɵadvance();
108
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.getPromptStatusText(prompt_r4), " ");
109
+ i0.ɵɵadvance();
110
+ i0.ɵɵconditional(prompt_r4.Description ? 13 : -1);
111
+ i0.ɵɵadvance(2);
112
+ i0.ɵɵconditional(prompt_r4.__mj_CreatedAt ? 15 : -1);
113
+ } }
114
+ function PromptSelectorDialogComponent_Conditional_3_Conditional_17_Template(rf, ctx) { if (rf & 1) {
115
+ i0.ɵɵrepeaterCreate(0, PromptSelectorDialogComponent_Conditional_3_Conditional_17_For_1_Template, 16, 12, "div", 26, _forTrack0);
116
+ i0.ɵɵpipe(2, "async");
117
+ } if (rf & 2) {
118
+ const ctx_r1 = i0.ɵɵnextContext(2);
119
+ i0.ɵɵrepeater(i0.ɵɵpipeBind1(2, 0, ctx_r1.filteredPrompts$));
120
+ } }
121
+ function PromptSelectorDialogComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
122
+ const _r1 = i0.ɵɵgetCurrentView();
123
+ i0.ɵɵelementStart(0, "div", 10)(1, "div", 11)(2, "div", 12);
124
+ i0.ɵɵelement(3, "i", 13)(4, "kendo-textbox", 14);
125
+ i0.ɵɵelementEnd();
126
+ i0.ɵɵelementStart(5, "div", 15)(6, "button", 16);
127
+ i0.ɵɵlistener("click", function PromptSelectorDialogComponent_Conditional_3_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleViewMode()); });
128
+ i0.ɵɵelement(7, "i", 17);
129
+ i0.ɵɵelementEnd()()()();
130
+ i0.ɵɵelementStart(8, "div", 18)(9, "span", 19);
131
+ i0.ɵɵelement(10, "i", 20);
132
+ i0.ɵɵtext(11);
133
+ i0.ɵɵpipe(12, "async");
134
+ i0.ɵɵelementEnd();
135
+ i0.ɵɵtemplate(13, PromptSelectorDialogComponent_Conditional_3_Conditional_13_Template, 3, 1, "span", 21);
136
+ i0.ɵɵelementEnd();
137
+ i0.ɵɵelementStart(14, "div", 22);
138
+ i0.ɵɵtemplate(15, PromptSelectorDialogComponent_Conditional_3_Conditional_15_Template, 6, 0, "div", 23);
139
+ i0.ɵɵpipe(16, "async");
140
+ i0.ɵɵtemplate(17, PromptSelectorDialogComponent_Conditional_3_Conditional_17_Template, 3, 2);
141
+ i0.ɵɵelementEnd();
142
+ } if (rf & 2) {
143
+ let tmp_5_0;
144
+ let tmp_9_0;
145
+ const ctx_r1 = i0.ɵɵnextContext();
146
+ i0.ɵɵadvance(4);
147
+ i0.ɵɵproperty("formControl", ctx_r1.searchControl);
148
+ i0.ɵɵadvance(2);
149
+ i0.ɵɵclassProp("active", ctx_r1.viewMode === "list");
150
+ i0.ɵɵadvance();
151
+ i0.ɵɵclassProp("fa-list", ctx_r1.viewMode === "grid")("fa-th", ctx_r1.viewMode === "list");
152
+ i0.ɵɵadvance(4);
153
+ i0.ɵɵtextInterpolate1(" ", ((tmp_5_0 = i0.ɵɵpipeBind1(12, 14, ctx_r1.filteredPrompts$)) == null ? null : tmp_5_0.length) || 0, " prompt(s) ");
154
+ i0.ɵɵadvance(2);
155
+ i0.ɵɵconditional(ctx_r1.config.multiSelect && ctx_r1.selectedPrompts.size > 0 ? 13 : -1);
156
+ i0.ɵɵadvance();
157
+ i0.ɵɵclassProp("grid-view", ctx_r1.viewMode === "grid")("list-view", ctx_r1.viewMode === "list");
158
+ i0.ɵɵadvance();
159
+ i0.ɵɵconditional(((tmp_9_0 = i0.ɵɵpipeBind1(16, 16, ctx_r1.filteredPrompts$)) == null ? null : tmp_9_0.length) === 0 ? 15 : 17);
160
+ } }
161
+ function PromptSelectorDialogComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
162
+ const _r5 = i0.ɵɵgetCurrentView();
163
+ i0.ɵɵelementStart(0, "button", 6);
164
+ i0.ɵɵlistener("click", function PromptSelectorDialogComponent_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNew()); });
165
+ i0.ɵɵelement(1, "i", 43);
166
+ i0.ɵɵtext(2, " Create New Prompt ");
167
+ i0.ɵɵelementEnd();
168
+ } }
169
+ function PromptSelectorDialogComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
170
+ i0.ɵɵelement(0, "i", 44);
171
+ i0.ɵɵtext(1);
172
+ } if (rf & 2) {
173
+ const ctx_r1 = i0.ɵɵnextContext();
174
+ i0.ɵɵadvance();
175
+ i0.ɵɵtextInterpolate2(" Add ", ctx_r1.selectedPrompts.size, " Prompt", ctx_r1.selectedPrompts.size === 1 ? "" : "s", " ");
176
+ } }
177
+ function PromptSelectorDialogComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
178
+ i0.ɵɵelement(0, "i", 44);
179
+ i0.ɵɵtext(1, " Select Prompt ");
180
+ } }
181
+ /**
182
+ * Unified prompt selector dialog that can be used for:
183
+ * - Selecting context compression prompts (single select)
184
+ * - Adding general prompts to agents (multi-select)
185
+ * - Any other prompt selection scenario
186
+ */
187
+ export class PromptSelectorDialogComponent {
188
+ constructor(dialogRef, cdr) {
189
+ this.dialogRef = dialogRef;
190
+ this.cdr = cdr;
191
+ // Input configuration
192
+ this.config = { title: 'Select Prompts' };
193
+ // State management
194
+ this.destroy$ = new Subject();
195
+ this.result = new Subject();
196
+ // Data and UI state
197
+ this.isLoading$ = new BehaviorSubject(false);
198
+ this.prompts$ = new BehaviorSubject([]);
199
+ this.filteredPrompts$ = new BehaviorSubject([]);
200
+ // Search and selection
201
+ this.searchControl = new FormControl('');
202
+ this.selectedPrompts = new Set();
203
+ this.linkedPrompts = new Set();
204
+ // View mode
205
+ this.viewMode = 'list';
206
+ }
207
+ ngOnInit() {
208
+ this.setupSearch();
209
+ this.loadPrompts();
210
+ // Initialize selected prompts if provided
211
+ if (this.config.selectedPromptIds) {
212
+ this.selectedPrompts = new Set(this.config.selectedPromptIds);
213
+ }
214
+ // Initialize linked prompts if provided
215
+ if (this.config.linkedPromptIds) {
216
+ this.linkedPrompts = new Set(this.config.linkedPromptIds);
217
+ }
218
+ }
219
+ ngOnDestroy() {
220
+ this.destroy$.next();
221
+ this.destroy$.complete();
222
+ }
223
+ setupSearch() {
224
+ this.searchControl.valueChanges
225
+ .pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.destroy$))
226
+ .subscribe(searchTerm => {
227
+ this.filterPrompts(searchTerm || '');
228
+ });
229
+ }
230
+ async loadPrompts() {
231
+ this.isLoading$.next(true);
232
+ try {
233
+ const rv = new RunView();
234
+ // Build filter - default to active prompts
235
+ let filter = "Status = 'Active'";
236
+ if (this.config.extraFilter) {
237
+ filter += ` AND ${this.config.extraFilter}`;
238
+ }
239
+ const result = await rv.RunView({
240
+ EntityName: 'AI Prompts',
241
+ ExtraFilter: filter,
242
+ OrderBy: 'Name ASC',
243
+ ResultType: 'entity_object',
244
+ MaxRows: 1000
245
+ });
246
+ if (result.Success) {
247
+ const prompts = result.Results || [];
248
+ this.prompts$.next(prompts);
249
+ this.filteredPrompts$.next(prompts);
250
+ }
251
+ else {
252
+ throw new Error(result.ErrorMessage || 'Failed to load prompts');
253
+ }
254
+ }
255
+ catch (error) {
256
+ console.error('Error loading prompts:', error);
257
+ MJNotificationService.Instance.CreateSimpleNotification('Error loading prompts. Please try again.', 'error', 3000);
258
+ this.prompts$.next([]);
259
+ this.filteredPrompts$.next([]);
260
+ }
261
+ finally {
262
+ this.isLoading$.next(false);
263
+ }
264
+ }
265
+ filterPrompts(searchTerm) {
266
+ const allPrompts = this.prompts$.value;
267
+ if (!searchTerm.trim()) {
268
+ this.filteredPrompts$.next(allPrompts);
269
+ return;
270
+ }
271
+ const filtered = allPrompts.filter(prompt => prompt.Name?.toLowerCase().includes(searchTerm.toLowerCase()) ||
272
+ prompt.Description?.toLowerCase().includes(searchTerm.toLowerCase()));
273
+ this.filteredPrompts$.next(filtered);
274
+ }
275
+ // === Selection Management ===
276
+ togglePromptSelection(prompt) {
277
+ // Prevent selection of already linked prompts
278
+ if (this.isPromptLinked(prompt)) {
279
+ MJNotificationService.Instance.CreateSimpleNotification(`"${prompt.Name}" is already linked to this agent`, 'info', 2000);
280
+ return;
281
+ }
282
+ if (this.config.multiSelect) {
283
+ if (this.selectedPrompts.has(prompt.ID)) {
284
+ this.selectedPrompts.delete(prompt.ID);
285
+ }
286
+ else {
287
+ this.selectedPrompts.add(prompt.ID);
288
+ }
289
+ }
290
+ else {
291
+ // Single select - replace current selection
292
+ this.selectedPrompts.clear();
293
+ this.selectedPrompts.add(prompt.ID);
294
+ }
295
+ }
296
+ isPromptSelected(prompt) {
297
+ return this.selectedPrompts.has(prompt.ID);
298
+ }
299
+ isPromptLinked(prompt) {
300
+ return this.linkedPrompts.has(prompt.ID);
301
+ }
302
+ getSelectedPromptObjects() {
303
+ const allPrompts = this.prompts$.value;
304
+ return allPrompts.filter(prompt => this.selectedPrompts.has(prompt.ID));
305
+ }
306
+ // === UI Helpers ===
307
+ toggleViewMode() {
308
+ this.viewMode = this.viewMode === 'grid' ? 'list' : 'grid';
309
+ }
310
+ getPromptStatusColor(prompt) {
311
+ switch (prompt.Status) {
312
+ case 'Active': return '#28a745';
313
+ case 'Pending': return '#ffc107';
314
+ case 'Disabled': return '#6c757d';
315
+ default: return '#6c757d';
316
+ }
317
+ }
318
+ getPromptStatusText(prompt) {
319
+ return prompt.Status || 'Unknown';
320
+ }
321
+ // === Dialog Actions ===
322
+ selectPrompts() {
323
+ const selectedPromptObjects = this.getSelectedPromptObjects();
324
+ if (selectedPromptObjects.length === 0) {
325
+ MJNotificationService.Instance.CreateSimpleNotification('Please select at least one prompt', 'warning', 2000);
326
+ return;
327
+ }
328
+ const result = {
329
+ selectedPrompts: selectedPromptObjects
330
+ };
331
+ this.result.next(result);
332
+ this.dialogRef.close();
333
+ }
334
+ createNew() {
335
+ const result = {
336
+ selectedPrompts: [],
337
+ createNew: true
338
+ };
339
+ this.result.next(result);
340
+ this.dialogRef.close();
341
+ }
342
+ cancel() {
343
+ this.result.next(null);
344
+ this.dialogRef.close();
345
+ }
346
+ static { this.ɵfac = function PromptSelectorDialogComponent_Factory(t) { return new (t || PromptSelectorDialogComponent)(i0.ɵɵdirectiveInject(i1.DialogRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
347
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptSelectorDialogComponent, selectors: [["mj-prompt-selector-dialog"]], decls: 13, vars: 6, consts: [[1, "prompt-selector-dialog"], [1, "loading-state"], [1, "dialog-footer"], [1, "footer-left"], ["kendoButton", "", "look", "flat"], [1, "footer-right"], ["kendoButton", "", "look", "flat", 3, "click"], ["kendoButton", "", "themeColor", "primary", 3, "click", "disabled"], [1, "loading-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-2x"], [1, "dialog-header"], [1, "search-section"], [1, "search-box"], [1, "fa-solid", "fa-search", "search-icon"], ["placeholder", "Search prompts by name or description...", 1, "search-input", 3, "formControl"], [1, "view-controls"], ["kendoButton", "", "size", "small", "fillMode", "flat", "title", "Toggle between list and grid view", 3, "click"], [1, "fa-solid"], [1, "results-summary"], [1, "results-count"], [1, "fa-solid", "fa-comment-dots"], [1, "selected-count"], [1, "prompts-container"], [1, "no-results"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-search", "fa-2x"], [1, "prompt-card", 3, "selected", "linked"], [1, "prompt-card", 3, "click"], [1, "selection-indicator"], ["title", "Already linked to this agent", 1, "fa-solid", "fa-link", "linked-icon"], [1, "fa-solid", "fa-check-circle", "selected-icon"], [1, "fa-regular", "fa-circle", "unselected-icon"], [1, "prompt-content"], [1, "prompt-header"], [1, "prompt-name"], [1, "prompt-badges"], [1, "linked-badge"], [1, "status-badge"], [1, "prompt-description"], [1, "prompt-metadata"], [1, "metadata-item"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-calendar"], [1, "fa-solid", "fa-plus"], [1, "fa-solid", "fa-check"]], template: function PromptSelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
348
+ i0.ɵɵelementStart(0, "div", 0);
349
+ i0.ɵɵtemplate(1, PromptSelectorDialogComponent_Conditional_1_Template, 5, 0, "div", 1);
350
+ i0.ɵɵpipe(2, "async");
351
+ i0.ɵɵtemplate(3, PromptSelectorDialogComponent_Conditional_3_Template, 18, 18);
352
+ i0.ɵɵelementStart(4, "div", 2)(5, "div", 3);
353
+ i0.ɵɵtemplate(6, PromptSelectorDialogComponent_Conditional_6_Template, 3, 0, "button", 4);
354
+ i0.ɵɵelementEnd();
355
+ i0.ɵɵelementStart(7, "div", 5)(8, "button", 6);
356
+ i0.ɵɵlistener("click", function PromptSelectorDialogComponent_Template_button_click_8_listener() { return ctx.cancel(); });
357
+ i0.ɵɵtext(9, " Cancel ");
358
+ i0.ɵɵelementEnd();
359
+ i0.ɵɵelementStart(10, "button", 7);
360
+ i0.ɵɵlistener("click", function PromptSelectorDialogComponent_Template_button_click_10_listener() { return ctx.selectPrompts(); });
361
+ i0.ɵɵtemplate(11, PromptSelectorDialogComponent_Conditional_11_Template, 2, 2)(12, PromptSelectorDialogComponent_Conditional_12_Template, 2, 0);
362
+ i0.ɵɵelementEnd()()()();
363
+ } if (rf & 2) {
364
+ i0.ɵɵadvance();
365
+ i0.ɵɵconditional(i0.ɵɵpipeBind1(2, 4, ctx.isLoading$) ? 1 : 3);
366
+ i0.ɵɵadvance(5);
367
+ i0.ɵɵconditional(ctx.config.showCreateNew ? 6 : -1);
368
+ i0.ɵɵadvance(4);
369
+ i0.ɵɵproperty("disabled", ctx.selectedPrompts.size === 0);
370
+ i0.ɵɵadvance();
371
+ i0.ɵɵconditional(ctx.config.multiSelect ? 11 : 12);
372
+ } }, dependencies: [i2.NgControlStatus, i2.FormControlDirective, i3.TextBoxComponent, i4.ButtonComponent, i5.AsyncPipe, i5.DatePipe], styles: [".prompt-selector-dialog[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-height: 70vh;\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: #666;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.search-section[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-box[_ngcontent-%COMP%] {\n flex: 1;\n position: relative;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #666;\n z-index: 2;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.search-input[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n padding-left: 36px !important;\n}\n\n.view-controls[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] {\n background-color: #007bff;\n color: white;\n}\n\n\n\n.results-summary[_ngcontent-%COMP%] {\n padding: 12px 16px;\n background: #f1f3f4;\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 14px;\n color: #666;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.results-count[_ngcontent-%COMP%], .selected-count[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.selected-count[_ngcontent-%COMP%] {\n color: #007bff;\n font-weight: 500;\n}\n\n\n\n.prompts-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n\n\n.prompts-container.list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n\n\n.prompts-container.grid-view[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n}\n\n\n\n.prompt-card[_ngcontent-%COMP%] {\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n padding: 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n background: white;\n display: flex;\n gap: 12px;\n position: relative;\n}\n\n.prompt-card[_ngcontent-%COMP%]:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0, 123, 255, 0.15);\n}\n\n.prompt-card.selected[_ngcontent-%COMP%] {\n border-color: #007bff;\n background: #f8f9ff;\n box-shadow: 0 2px 8px rgba(0, 123, 255, 0.25);\n}\n\n.prompt-card.linked[_ngcontent-%COMP%] {\n border-color: #6c757d;\n background: #f8f9fa;\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.prompt-card.linked[_ngcontent-%COMP%]:hover {\n border-color: #6c757d;\n box-shadow: none;\n}\n\n\n\n.selection-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n margin-top: 2px;\n}\n\n.selected-icon[_ngcontent-%COMP%] {\n color: #007bff;\n font-size: 18px;\n}\n\n.unselected-icon[_ngcontent-%COMP%] {\n color: #ccc;\n font-size: 18px;\n}\n\n.linked-icon[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 18px;\n}\n\n\n\n.prompt-content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.prompt-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n line-height: 1.4;\n flex: 1;\n}\n\n.prompt-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n color: white;\n white-space: nowrap;\n}\n\n.linked-badge[_ngcontent-%COMP%] {\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n background: #6c757d;\n color: white;\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.prompt-description[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: #666;\n font-size: 14px;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n\n\n.prompt-metadata[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: #888;\n flex-wrap: wrap;\n}\n\n.metadata-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.metadata-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 12px;\n font-size: 10px;\n}\n\n\n\n.no-results[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #666;\n text-align: center;\n}\n\n.no-results[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n color: #ccc;\n}\n\n.no-results[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px 0;\n color: #333;\n}\n\n.no-results[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n color: #888;\n max-width: 300px;\n}\n\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-top: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.footer-left[_ngcontent-%COMP%] {\n display: flex;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n\n\n@media (max-width: 768px) {\n .prompts-container.grid-view[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n \n .prompt-header[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n \n .search-section[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 8px;\n }\n \n .view-controls[_ngcontent-%COMP%] {\n align-self: flex-end;\n }\n}"] }); }
373
+ }
374
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptSelectorDialogComponent, [{
375
+ type: Component,
376
+ args: [{ selector: 'mj-prompt-selector-dialog', template: "<!-- Prompt Selector Dialog -->\n<div class=\"prompt-selector-dialog\">\n \n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <div class=\"loading-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-2x\"></i>\n </div>\n <p>Loading prompts...</p>\n </div>\n } @else {\n \n <!-- Search and Controls Header -->\n <div class=\"dialog-header\">\n <div class=\"search-section\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <kendo-textbox \n [formControl]=\"searchControl\"\n placeholder=\"Search prompts by name or description...\"\n class=\"search-input\">\n </kendo-textbox>\n </div>\n \n <div class=\"view-controls\">\n <button kendoButton \n size=\"small\"\n fillMode=\"flat\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"toggleViewMode()\"\n title=\"Toggle between list and grid view\">\n <i class=\"fa-solid\" [class.fa-list]=\"viewMode === 'grid'\" [class.fa-th]=\"viewMode === 'list'\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- Results Summary -->\n <div class=\"results-summary\">\n <span class=\"results-count\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n {{ (filteredPrompts$ | async)?.length || 0 }} prompt(s)\n </span>\n @if (config.multiSelect && selectedPrompts.size > 0) {\n <span class=\"selected-count\">\n <i class=\"fa-solid fa-check-circle\"></i>\n {{ selectedPrompts.size }} selected\n </span>\n }\n </div>\n\n <!-- Prompts List/Grid -->\n <div class=\"prompts-container\" [class.grid-view]=\"viewMode === 'grid'\" [class.list-view]=\"viewMode === 'list'\">\n @if ((filteredPrompts$ | async)?.length === 0) {\n <div class=\"no-results\">\n <i class=\"fa-solid fa-search fa-2x\"></i>\n <h4>No prompts found</h4>\n <p>Try adjusting your search criteria or check that prompts are properly configured.</p>\n </div>\n } @else {\n @for (prompt of filteredPrompts$ | async; track prompt.ID) {\n <div class=\"prompt-card\" \n [class.selected]=\"isPromptSelected(prompt)\"\n [class.linked]=\"isPromptLinked(prompt)\"\n (click)=\"togglePromptSelection(prompt)\">\n \n <!-- Selection indicator -->\n <div class=\"selection-indicator\">\n @if (isPromptLinked(prompt)) {\n <i class=\"fa-solid fa-link linked-icon\" title=\"Already linked to this agent\"></i>\n } @else if (isPromptSelected(prompt)) {\n <i class=\"fa-solid fa-check-circle selected-icon\"></i>\n } @else {\n <i class=\"fa-regular fa-circle unselected-icon\"></i>\n }\n </div>\n\n <!-- Prompt Content -->\n <div class=\"prompt-content\">\n <div class=\"prompt-header\">\n <h4 class=\"prompt-name\">{{ prompt.Name }}</h4>\n <div class=\"prompt-badges\">\n @if (isPromptLinked(prompt)) {\n <span class=\"linked-badge\">\n <i class=\"fa-solid fa-link\"></i>\n Linked\n </span>\n }\n <span class=\"status-badge\" \n [style.background-color]=\"getPromptStatusColor(prompt)\">\n {{ getPromptStatusText(prompt) }}\n </span>\n </div>\n </div>\n\n @if (prompt.Description) {\n <p class=\"prompt-description\">{{ prompt.Description }}</p>\n }\n\n <!-- Prompt Metadata -->\n <div class=\"prompt-metadata\">\n @if (prompt.__mj_CreatedAt) {\n <span class=\"metadata-item\">\n <i class=\"fa-solid fa-calendar\"></i>\n Created {{ prompt.__mj_CreatedAt | date:'short' }}\n </span>\n }\n </div>\n </div>\n </div>\n }\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=\"flat\"\n (click)=\"createNew()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Prompt\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)=\"selectPrompts()\"\n [disabled]=\"selectedPrompts.size === 0\">\n @if (config.multiSelect) {\n <i class=\"fa-solid fa-check\"></i>\n Add {{ selectedPrompts.size }} Prompt{{ selectedPrompts.size === 1 ? '' : 's' }}\n } @else {\n <i class=\"fa-solid fa-check\"></i>\n Select Prompt\n }\n </button>\n </div>\n </div>\n</div>", styles: [".prompt-selector-dialog {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-height: 70vh;\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: #666;\n}\n\n.loading-spinner {\n margin-bottom: 16px;\n}\n\n/* === Header Section === */\n.dialog-header {\n padding: 16px;\n border-bottom: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.search-section {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.search-box {\n flex: 1;\n position: relative;\n}\n\n.search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #666;\n z-index: 2;\n}\n\n.search-input {\n width: 100%;\n}\n\n.search-input input {\n padding-left: 36px !important;\n}\n\n.view-controls button.active {\n background-color: #007bff;\n color: white;\n}\n\n/* === Results Summary === */\n.results-summary {\n padding: 12px 16px;\n background: #f1f3f4;\n display: flex;\n align-items: center;\n gap: 16px;\n font-size: 14px;\n color: #666;\n border-bottom: 1px solid #e0e0e0;\n}\n\n.results-count, .selected-count {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.selected-count {\n color: #007bff;\n font-weight: 500;\n}\n\n/* === Prompts Container === */\n.prompts-container {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n/* List View */\n.prompts-container.list-view {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n/* Grid View */\n.prompts-container.grid-view {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\n gap: 16px;\n}\n\n/* === Prompt Cards === */\n.prompt-card {\n border: 2px solid #e0e0e0;\n border-radius: 8px;\n padding: 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n background: white;\n display: flex;\n gap: 12px;\n position: relative;\n}\n\n.prompt-card:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0, 123, 255, 0.15);\n}\n\n.prompt-card.selected {\n border-color: #007bff;\n background: #f8f9ff;\n box-shadow: 0 2px 8px rgba(0, 123, 255, 0.25);\n}\n\n.prompt-card.linked {\n border-color: #6c757d;\n background: #f8f9fa;\n opacity: 0.7;\n cursor: not-allowed;\n}\n\n.prompt-card.linked:hover {\n border-color: #6c757d;\n box-shadow: none;\n}\n\n/* === Selection Indicator === */\n.selection-indicator {\n display: flex;\n align-items: flex-start;\n margin-top: 2px;\n}\n\n.selected-icon {\n color: #007bff;\n font-size: 18px;\n}\n\n.unselected-icon {\n color: #ccc;\n font-size: 18px;\n}\n\n.linked-icon {\n color: #6c757d;\n font-size: 18px;\n}\n\n/* === Prompt Content === */\n.prompt-content {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-header {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.prompt-name {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n line-height: 1.4;\n flex: 1;\n}\n\n.prompt-badges {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n\n.status-badge {\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n color: white;\n white-space: nowrap;\n}\n\n.linked-badge {\n padding: 4px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n background: #6c757d;\n color: white;\n white-space: nowrap;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.prompt-description {\n margin: 0 0 12px 0;\n color: #666;\n font-size: 14px;\n line-height: 1.4;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n/* === Prompt Metadata === */\n.prompt-metadata {\n display: flex;\n gap: 16px;\n font-size: 12px;\n color: #888;\n flex-wrap: wrap;\n}\n\n.metadata-item {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.metadata-item i {\n width: 12px;\n font-size: 10px;\n}\n\n/* === No Results === */\n.no-results {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n color: #666;\n text-align: center;\n}\n\n.no-results i {\n margin-bottom: 16px;\n color: #ccc;\n}\n\n.no-results h4 {\n margin: 0 0 8px 0;\n color: #333;\n}\n\n.no-results p {\n margin: 0;\n color: #888;\n max-width: 300px;\n}\n\n/* === Dialog Footer === */\n.dialog-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px;\n border-top: 1px solid #e0e0e0;\n background: #f8f9fa;\n}\n\n.footer-left {\n display: flex;\n}\n\n.footer-right {\n display: flex;\n gap: 8px;\n}\n\n/* === Responsive Design === */\n@media (max-width: 768px) {\n .prompts-container.grid-view {\n grid-template-columns: 1fr;\n }\n \n .prompt-header {\n flex-direction: column;\n align-items: flex-start;\n gap: 8px;\n }\n \n .search-section {\n flex-direction: column;\n gap: 8px;\n }\n \n .view-controls {\n align-self: flex-end;\n }\n}"] }]
377
+ }], () => [{ type: i1.DialogRef }, { type: i0.ChangeDetectorRef }], null); })();
378
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptSelectorDialogComponent, { className: "PromptSelectorDialogComponent", filePath: "src/lib/custom/AIAgents/prompt-selector-dialog.component.ts", lineNumber: 42 }); })();
379
+ //# sourceMappingURL=prompt-selector-dialog.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-selector-dialog.component.js","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/prompt-selector-dialog.component.ts","../../../../src/lib/custom/AIAgents/prompt-selector-dialog.component.html"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
2
+ import { FormGroup, FormBuilder } from '@angular/forms';
3
+ import { DialogRef } from '@progress/kendo-angular-dialog';
4
+ import { Subject, BehaviorSubject } from 'rxjs';
5
+ import { AIAgentEntity, AIAgentTypeEntity } from '@memberjunction/core-entities';
6
+ import * as i0 from "@angular/core";
7
+ export interface SubAgentAdvancedSettingsFormData {
8
+ executionOrder: number;
9
+ executionMode: 'Sequential' | 'Parallel';
10
+ status: string;
11
+ typeID: string | null;
12
+ exposeAsAction: boolean;
13
+ }
14
+ /**
15
+ * Advanced Settings dialog for Sub-Agents.
16
+ * Manages execution order, execution mode, and other advanced sub-agent configurations.
17
+ */
18
+ export declare class SubAgentAdvancedSettingsDialogComponent implements OnInit, OnDestroy {
19
+ private dialogRef;
20
+ private fb;
21
+ private cdr;
22
+ subAgent: AIAgentEntity;
23
+ allSubAgents: AIAgentEntity[];
24
+ private destroy$;
25
+ result: Subject<SubAgentAdvancedSettingsFormData | null>;
26
+ advancedForm: FormGroup;
27
+ isLoading$: BehaviorSubject<boolean>;
28
+ isSaving$: BehaviorSubject<boolean>;
29
+ agentTypes$: BehaviorSubject<AIAgentTypeEntity[]>;
30
+ executionModeOptions: {
31
+ text: string;
32
+ value: string;
33
+ description: string;
34
+ icon: string;
35
+ }[];
36
+ statusOptions: {
37
+ text: string;
38
+ value: string;
39
+ }[];
40
+ executionOrderError: string | null;
41
+ constructor(dialogRef: DialogRef, fb: FormBuilder, cdr: ChangeDetectorRef);
42
+ ngOnInit(): void;
43
+ ngOnDestroy(): void;
44
+ private initializeForm;
45
+ private setupValidationLogic;
46
+ private validateExecutionOrder;
47
+ private loadDropdownData;
48
+ isFieldInvalid(fieldName: string): boolean;
49
+ getFieldError(fieldName: string): string;
50
+ hasExecutionOrderError(): boolean;
51
+ getExecutionModeIcon(mode: string): string;
52
+ getExecutionModeDescription(mode: string): string;
53
+ cancel(): void;
54
+ save(): Promise<void>;
55
+ static ɵfac: i0.ɵɵFactoryDeclaration<SubAgentAdvancedSettingsDialogComponent, never>;
56
+ static ɵcmp: i0.ɵɵComponentDeclaration<SubAgentAdvancedSettingsDialogComponent, "mj-sub-agent-advanced-settings-dialog", never, {}, {}, never, never, false, never>;
57
+ }
58
+ //# sourceMappingURL=sub-agent-advanced-settings-dialog.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sub-agent-advanced-settings-dialog.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,eAAe,EAAa,MAAM,MAAM,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;;AAGjF,MAAM,WAAW,gCAAgC;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,YAAY,GAAG,UAAU,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;GAGG;AACH,qBAKa,uCAAwC,YAAW,MAAM,EAAE,SAAS;IA4C7E,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;IA3Cb,QAAQ,EAAG,aAAa,CAAC;IACzB,YAAY,EAAE,aAAa,EAAE,CAAM;IAGnC,OAAO,CAAC,QAAQ,CAAuB;IAChC,MAAM,mDAA0D;IAGvE,YAAY,EAAG,SAAS,CAAC;IACzB,UAAU,2BAAuC;IACjD,SAAS,2BAAuC;IAGhD,WAAW,uCAAgD;IAG3D,oBAAoB;;;;;QAalB;IAEF,aAAa;;;QAIX;IAGF,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAGhC,SAAS,EAAE,SAAS,EACpB,EAAE,EAAE,WAAW,EACf,GAAG,EAAE,iBAAiB;IAGhC,QAAQ;IAKR,WAAW;IAKX,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,oBAAoB;IA0B5B,OAAO,CAAC,sBAAsB;YAsBhB,gBAAgB;IAiC9B,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK1C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IASxC,sBAAsB,IAAI,OAAO;IAMjC,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAK1C,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOjD,MAAM;IAKA,IAAI;yCA7LC,uCAAuC;2CAAvC,uCAAuC;CAiOnD"}