@memberjunction/ng-core-entity-forms 5.21.0 → 5.23.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 (157) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
  4. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
  6. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
  8. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
  15. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  34. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
  35. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  36. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
  37. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
  39. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
  41. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  42. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
  43. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
  45. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
  48. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  49. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
  50. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  51. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
  52. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  53. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
  54. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
  56. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  57. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
  58. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
  60. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  61. package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
  62. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  63. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  64. package/dist/lib/custom/Actions/action-form.component.js +93 -94
  65. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  66. package/dist/lib/custom/Entities/entity-form.component.js +2 -2
  67. package/dist/lib/custom/Lists/list-form.component.js +61 -63
  68. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  69. package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
  70. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-form.component.js +354 -360
  72. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
  74. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  75. package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
  76. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  77. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
  78. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
  80. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  81. package/dist/lib/custom/Templates/templates-form.component.js +34 -36
  82. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  83. package/dist/lib/custom/Tests/test-form.component.js +9 -10
  84. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
  86. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/test-run-form.component.js +8 -8
  88. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-form.component.js +7 -8
  90. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +7 -8
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
  94. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  95. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
  97. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  99. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  104. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.d.ts +22 -27
  107. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  108. package/dist/lib/custom/custom-forms.module.js +51 -81
  109. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  110. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
  111. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  112. package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
  113. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  115. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
  116. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
  118. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
  119. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
  120. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
  121. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
  122. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
  123. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
  124. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
  125. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  126. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +80 -44
  127. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -8
  129. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  130. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +39 -24
  132. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +35 -17
  135. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +15 -13
  137. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
  140. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +28 -24
  142. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  143. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  144. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
  145. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  146. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +19 -17
  147. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
  149. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +82 -14
  150. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  151. package/dist/lib/generated/generated-forms.module.d.ts +280 -279
  152. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  153. package/dist/lib/generated/generated-forms.module.js +102 -142
  154. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  155. package/dist/lib/shared/components/template-editor.component.js +14 -15
  156. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  157. package/package.json +34 -41
@@ -1,15 +1,12 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, Output, EventEmitter } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
3
  import { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';
4
4
  import { RunView } from '@memberjunction/core';
5
5
  import { UUIDsEqual } from '@memberjunction/global';
6
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-dropdowns";
11
- import * as i5 from "@progress/kendo-angular-buttons";
12
- import * as i6 from "@angular/common";
7
+ import * as i1 from "@angular/forms";
8
+ import * as i2 from "@memberjunction/ng-ui-components";
9
+ import * as i3 from "@angular/common";
13
10
  const _c0 = () => ({ Name: "All Types", ID: "all" });
14
11
  const _forTrack0 = ($index, $item) => $item.ID;
15
12
  function SubAgentSelectorDialogComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
@@ -178,9 +175,9 @@ function SubAgentSelectorDialogComponent_Conditional_26_Template(rf, ctx) { if (
178
175
  } }
179
176
  function SubAgentSelectorDialogComponent_Conditional_29_Template(rf, ctx) { if (rf & 1) {
180
177
  const _r6 = i0.ɵɵgetCurrentView();
181
- i0.ɵɵelementStart(0, "button", 47);
178
+ i0.ɵɵelementStart(0, "button", 30);
182
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()); });
183
- i0.ɵɵelement(1, "i", 48);
180
+ i0.ɵɵelement(1, "i", 47);
184
181
  i0.ɵɵtext(2, " Create Sub-Agent ");
185
182
  i0.ɵɵelementEnd();
186
183
  } }
@@ -208,8 +205,7 @@ export class SubAgentSelectorDialogComponent {
208
205
  get filteredCount() {
209
206
  return this.filteredAgents$.value.length;
210
207
  }
211
- constructor(dialogRef, cdr) {
212
- this.dialogRef = dialogRef;
208
+ constructor(cdr) {
213
209
  this.cdr = cdr;
214
210
  // Reactive state management
215
211
  this.destroy$ = new Subject();
@@ -223,6 +219,7 @@ export class SubAgentSelectorDialogComponent {
223
219
  // UI state
224
220
  this.searchControl = new FormControl('');
225
221
  this.selectedTypeId$ = new BehaviorSubject('all');
222
+ this.DialogClose = new EventEmitter();
226
223
  }
227
224
  ngOnInit() {
228
225
  this.initializeData();
@@ -373,14 +370,14 @@ export class SubAgentSelectorDialogComponent {
373
370
  // === Dialog Actions ===
374
371
  cancel() {
375
372
  this.result.next(null);
376
- this.dialogRef.close();
373
+ this.DialogClose.emit();
377
374
  }
378
375
  createNew() {
379
376
  this.result.next({
380
377
  selectedAgents: [],
381
378
  createNew: true
382
379
  });
383
- this.dialogRef.close();
380
+ this.DialogClose.emit();
384
381
  }
385
382
  async addSelectedAgents() {
386
383
  const selectedIds = this.selectedAgents$.value;
@@ -394,10 +391,10 @@ export class SubAgentSelectorDialogComponent {
394
391
  selectedAgents,
395
392
  createNew: false
396
393
  });
397
- this.dialogRef.close();
394
+ this.DialogClose.emit();
398
395
  }
399
- static { this.ɵfac = function SubAgentSelectorDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SubAgentSelectorDialogComponent)(i0.ɵɵdirectiveInject(i1.WindowRef), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
400
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SubAgentSelectorDialogComponent, selectors: [["mj-sub-agent-selector-dialog"]], standalone: false, 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) {
396
+ static { this.ɵfac = function SubAgentSelectorDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SubAgentSelectorDialogComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); }; }
397
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SubAgentSelectorDialogComponent, selectors: [["mj-sub-agent-selector-dialog"]], outputs: { DialogClose: "DialogClose" }, standalone: false, 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, "mj-input", "search-field", 3, "formControl"], ["mjButton", "", "variant", "flat", 1, "clear-search"], [1, "filter-controls"], [1, "type-filter"], ["TextField", "Name", "ValueField", "ID", 1, "type-dropdown", 3, "ngModelChange", "ngModel", "ValuePrimitive", "DefaultItem", "Data"], [1, "loading-state"], [1, "content-area"], [1, "dialog-footer"], [1, "footer-left"], ["mjButton", "", "variant", "primary"], [1, "footer-right"], ["mjButton", "", "variant", "flat", 3, "click"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], ["mjButton", "", "variant", "flat", 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"], ["mjButton", "", "variant", "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"], [1, "fa-solid", "fa-plus"]], template: function SubAgentSelectorDialogComponent_Template(rf, ctx) { if (rf & 1) {
401
398
  i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h3");
402
399
  i0.ɵɵtext(4);
403
400
  i0.ɵɵelementEnd();
@@ -410,16 +407,16 @@ export class SubAgentSelectorDialogComponent {
410
407
  i0.ɵɵtext(10);
411
408
  i0.ɵɵelementEnd()()();
412
409
  i0.ɵɵelementStart(11, "div", 7)(12, "div", 8)(13, "div", 9);
413
- i0.ɵɵelement(14, "i", 10)(15, "kendo-textbox", 11);
410
+ i0.ɵɵelement(14, "i", 10)(15, "input", 11);
414
411
  i0.ɵɵconditionalCreate(16, SubAgentSelectorDialogComponent_Conditional_16_Template, 2, 0, "button", 12);
415
412
  i0.ɵɵelementEnd()();
416
413
  i0.ɵɵelementStart(17, "div", 13)(18, "div", 14)(19, "label");
417
414
  i0.ɵɵtext(20, "Agent Type:");
418
415
  i0.ɵɵelementEnd();
419
- i0.ɵɵelementStart(21, "kendo-dropdownlist", 15);
416
+ i0.ɵɵelementStart(21, "mj-dropdown", 15);
420
417
  i0.ɵɵpipe(22, "async");
421
418
  i0.ɵɵpipe(23, "async");
422
- i0.ɵɵlistener("valueChange", function SubAgentSelectorDialogComponent_Template_kendo_dropdownlist_valueChange_21_listener($event) { return ctx.selectType($event); });
419
+ i0.ɵɵlistener("ngModelChange", function SubAgentSelectorDialogComponent_Template_mj_dropdown_ngModelChange_21_listener($event) { return ctx.selectType($event); });
423
420
  i0.ɵɵelementEnd()()()();
424
421
  i0.ɵɵconditionalCreate(24, SubAgentSelectorDialogComponent_Conditional_24_Template, 4, 0, "div", 16);
425
422
  i0.ɵɵpipe(25, "async");
@@ -447,7 +444,7 @@ export class SubAgentSelectorDialogComponent {
447
444
  i0.ɵɵadvance();
448
445
  i0.ɵɵconditional(ctx.searchControl.value ? 16 : -1);
449
446
  i0.ɵɵadvance(5);
450
- i0.ɵɵproperty("value", i0.ɵɵpipeBind1(22, 14, ctx.selectedTypeId$))("valuePrimitive", true)("defaultItem", i0.ɵɵpureFunction0(20, _c0))("data", i0.ɵɵpipeBind1(23, 16, ctx.agentTypes$));
447
+ i0.ɵɵproperty("ngModel", i0.ɵɵpipeBind1(22, 14, ctx.selectedTypeId$))("ValuePrimitive", true)("DefaultItem", i0.ɵɵpureFunction0(20, _c0))("Data", i0.ɵɵpipeBind1(23, 16, ctx.agentTypes$));
451
448
  i0.ɵɵadvance(3);
452
449
  i0.ɵɵconditional(i0.ɵɵpipeBind1(25, 18, ctx.isLoading$) ? 24 : 26);
453
450
  i0.ɵɵadvance(5);
@@ -456,11 +453,13 @@ export class SubAgentSelectorDialogComponent {
456
453
  i0.ɵɵproperty("disabled", ctx.selectedCount === 0);
457
454
  i0.ɵɵadvance();
458
455
  i0.ɵɵconditional(ctx.config.multiSelect ? 34 : 35);
459
- } }, 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: var(--mj-bg-surface-card);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n\n\n[_nghost-%COMP%] .k-dialog, \n[_nghost-%COMP%] .k-window {\n z-index: 10000 !important;\n}\n\n[_nghost-%COMP%] .k-overlay {\n z-index: 9999 !important;\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-primary);\n font-size: 1.25rem;\n font-weight: 600;\n}\n\n.header-description[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-muted);\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: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.total-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.controls-section[_ngcontent-%COMP%] {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-muted);\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: var(--mj-text-secondary);\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: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\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: var(--mj-text-muted);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n color: var(--mj-border-default);\n margin-bottom: 1rem;\n}\n\n.empty-state[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-bg-surface-sunken);\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: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.agent-card.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\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: var(--mj-status-success);\n}\n\n.selection-indicator[_ngcontent-%COMP%] .fa-circle[_ngcontent-%COMP%] {\n color: var(--mj-border-default);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.agent-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--mj-brand-primary);\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: var(--mj-text-primary);\n margin-bottom: 0.5rem;\n word-wrap: break-word;\n}\n\n.agent-description[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n margin-bottom: 0.75rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n 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: var(--mj-text-inverse);\n}\n\n\n\n\n.type-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.execution-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-bg-surface-sunken);\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}"] }); }
456
+ } }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.NgModel, i1.FormControlDirective, i2.MJButtonDirective, i2.MJDropdownComponent, i3.AsyncPipe], styles: [".sub-agent-selector-dialog[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--mj-bg-surface-card);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n\n\n[_nghost-%COMP%] .k-dialog, \n[_nghost-%COMP%] .k-window {\n z-index: 10000 !important;\n}\n\n[_nghost-%COMP%] .k-overlay {\n z-index: 9999 !important;\n}\n\n\n\n.dialog-header[_ngcontent-%COMP%] {\n padding: 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-primary);\n font-size: 1.25rem;\n font-weight: 600;\n}\n\n.header-description[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-muted);\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: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.total-count[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n.controls-section[_ngcontent-%COMP%] {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-muted);\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: var(--mj-text-secondary);\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: var(--mj-text-muted);\n}\n\n.loading-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\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: var(--mj-text-muted);\n text-align: center;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 3rem;\n color: var(--mj-border-default);\n margin-bottom: 1rem;\n}\n\n.empty-state[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-bg-surface-sunken);\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: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.agent-card.selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\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: var(--mj-status-success);\n}\n\n.selection-indicator[_ngcontent-%COMP%] .fa-circle[_ngcontent-%COMP%] {\n color: var(--mj-border-default);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.agent-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 1.5rem;\n color: var(--mj-brand-primary);\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: var(--mj-text-primary);\n margin-bottom: 0.5rem;\n word-wrap: break-word;\n}\n\n.agent-description[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n margin-bottom: 0.75rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n 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: var(--mj-text-inverse);\n}\n\n\n\n\n.type-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.execution-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n\n\n.dialog-footer[_ngcontent-%COMP%] {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-bg-surface-sunken);\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}"] }); }
460
457
  }
461
458
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SubAgentSelectorDialogComponent, [{
462
459
  type: Component,
463
- args: [{ standalone: false, 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: var(--mj-bg-surface-card);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n/* Ensure dialog appears above banner and other elements */\n:host ::ng-deep .k-dialog,\n:host ::ng-deep .k-window {\n z-index: 10000 !important;\n}\n\n:host ::ng-deep .k-overlay {\n z-index: 9999 !important;\n}\n\n/* === Dialog Header === */\n.dialog-header {\n padding: 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-primary);\n font-size: 1.25rem;\n font-weight: 600;\n}\n\n.header-description {\n margin: 0;\n color: var(--mj-text-muted);\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: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.total-count {\n color: var(--mj-text-muted);\n}\n\n/* === Controls Section === */\n.controls-section {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-muted);\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: var(--mj-text-secondary);\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: var(--mj-text-muted);\n}\n\n.loading-state i {\n color: var(--mj-brand-primary);\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: var(--mj-text-muted);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 3rem;\n color: var(--mj-border-default);\n margin-bottom: 1rem;\n}\n\n.empty-state h4 {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-bg-surface-sunken);\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: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.agent-card.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\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: var(--mj-status-success);\n}\n\n.selection-indicator .fa-circle {\n color: var(--mj-border-default);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.agent-icon i {\n font-size: 1.5rem;\n color: var(--mj-brand-primary);\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: var(--mj-text-primary);\n margin-bottom: 0.5rem;\n word-wrap: break-word;\n}\n\n.agent-description {\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n margin-bottom: 0.75rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n 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: var(--mj-text-inverse);\n}\n\n/* Status badge color set dynamically via style binding */\n\n.type-badge {\n background: var(--mj-brand-primary);\n}\n\n.execution-badge {\n background: var(--mj-status-warning);\n}\n\n/* === Dialog Footer === */\n.dialog-footer {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-bg-surface-sunken);\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}\n"] }]
464
- }], () => [{ type: i1.WindowRef }, { type: i0.ChangeDetectorRef }], null); })();
465
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SubAgentSelectorDialogComponent, { className: "SubAgentSelectorDialogComponent", filePath: "src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts", lineNumber: 38 }); })();
460
+ args: [{ standalone: false, 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 <input\n class=\"mj-input search-field\"\n [formControl]=\"searchControl\"\n placeholder=\"Search agents by name, description, or type...\">\n @if (searchControl.value) {\n <button mjButton\n variant=\"flat\"\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 <mj-dropdown\n [ngModel]=\"selectedTypeId$ | async\"\n (ngModelChange)=\"selectType($any($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 </mj-dropdown>\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 mjButton (click)=\"clearSearch()\" variant=\"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 mjButton\n variant=\"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 mjButton\n variant=\"flat\"\n (click)=\"cancel()\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"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: var(--mj-bg-surface-card);\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n}\n\n/* Ensure dialog appears above banner and other elements */\n:host ::ng-deep .k-dialog,\n:host ::ng-deep .k-window {\n z-index: 10000 !important;\n}\n\n:host ::ng-deep .k-overlay {\n z-index: 9999 !important;\n}\n\n/* === Dialog Header === */\n.dialog-header {\n padding: 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-primary);\n font-size: 1.25rem;\n font-weight: 600;\n}\n\n.header-description {\n margin: 0;\n color: var(--mj-text-muted);\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: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.total-count {\n color: var(--mj-text-muted);\n}\n\n/* === Controls Section === */\n.controls-section {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-bottom: 1px solid var(--mj-bg-surface-sunken);\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: var(--mj-text-muted);\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: var(--mj-text-secondary);\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: var(--mj-text-muted);\n}\n\n.loading-state i {\n color: var(--mj-brand-primary);\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: var(--mj-text-muted);\n text-align: center;\n}\n\n.empty-state i {\n font-size: 3rem;\n color: var(--mj-border-default);\n margin-bottom: 1rem;\n}\n\n.empty-state h4 {\n margin: 0 0 0.5rem 0;\n color: var(--mj-text-secondary);\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: var(--mj-bg-surface);\n border: 2px solid var(--mj-bg-surface-sunken);\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: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.agent-card.selected {\n border-color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, var(--mj-bg-surface));\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\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: var(--mj-status-success);\n}\n\n.selection-indicator .fa-circle {\n color: var(--mj-border-default);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-bg-surface-sunken);\n}\n\n.agent-icon i {\n font-size: 1.5rem;\n color: var(--mj-brand-primary);\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: var(--mj-text-primary);\n margin-bottom: 0.5rem;\n word-wrap: break-word;\n}\n\n.agent-description {\n font-size: 0.85rem;\n color: var(--mj-text-muted);\n line-height: 1.4;\n margin-bottom: 0.75rem;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n 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: var(--mj-text-inverse);\n}\n\n/* Status badge color set dynamically via style binding */\n\n.type-badge {\n background: var(--mj-brand-primary);\n}\n\n.execution-badge {\n background: var(--mj-status-warning);\n}\n\n/* === Dialog Footer === */\n.dialog-footer {\n padding: 1rem 1.5rem;\n background: var(--mj-bg-surface);\n border-top: 1px solid var(--mj-bg-surface-sunken);\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}\n"] }]
461
+ }], () => [{ type: i0.ChangeDetectorRef }], { DialogClose: [{
462
+ type: Output
463
+ }] }); })();
464
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SubAgentSelectorDialogComponent, { className: "SubAgentSelectorDialogComponent", filePath: "src/lib/custom/AIAgents/sub-agent-selector-dialog.component.ts", lineNumber: 37 }); })();
466
465
  //# sourceMappingURL=sub-agent-selector-dialog.component.js.map
@@ -1 +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":"AAAA,OAAO,EAAE,SAAS,EAAwC,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACzH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;;;;;;;;;;;ICM5C,+BAA8B;IAAA,YAA4B;IAAA,iBAAO;;;IAAnC,cAA4B;IAA5B,4DAA4B;;;;IAiBxD,kCAI6B;IADrB,oMAAS,oBAAa,KAAC;IAE7B,wBAAiC;IACnC,iBAAS;;;IAwBf,+BAA2B;IACzB,wBAAiD;IACjD,yBAAG;IAAA,2CAA2B;IAChC,AADgC,iBAAI,EAC9B;;;IAUE,yBAAG;IAAA,2EAA2D;IAAA,iBAAI;;;;IAElE,yBAAG;IAAA,uFAAuE;IAAA,iBAAI;IAC9E,kCAAiE;IAA7C,iOAAS,oBAAa,KAAC;IACzC,8BACF;IAAA,iBAAS;;;IATb,+BAAyB;IACvB,wBAAiC;IACjC,0BAAI;IAAA,+BAAe;IAAA,iBAAK;IAGtB,AAFF,yHAA6B,8FAEpB;IAMX,iBAAM;;;IARJ,eAOC;IAPD,sDAOC;;;IAcO,wBAAwC;;;IAExC,wBAAoC;;;IAOpC,0BAA2E;;;IAAhD,AAAtB,wDAAqB,gCAA6B;;;IAEvD,oBAAqC;;;;IAAlC,4CAA6B;;;IAQhC,+BAA+B;IAAA,YAAuB;IAAA,iBAAM;;;IAA7B,cAAuB;IAAvB,0CAAuB;;;IAIpD,gCAAiF;IAC/E,YACF;IAAA,iBAAO;;;;IAFoB,wEAAqD;IAC9E,cACF;IADE,gDACF;;;IAGA,gCAAyB;IAAA,YAAoB;IAAA,iBAAO;;;IAA3B,cAAoB;IAApB,uCAAoB;;;IAG7C,gCAA8B;IAAA,YAAyB;IAAA,iBAAO;;;IAAhC,cAAyB;IAAzB,4CAAyB;;;;IAtC/D,+BAE2C;IAAtC,iPAAS,qCAA2B,KAAC;IAGxC,+BAAiC;IAG7B,AAFF,mIAAsB,6GAEb;IAGX,iBAAM;IAGN,+BAAwB;IAGpB,AAFF,qIAAqB,6GAEZ;IAGX,iBAAM;IAIJ,AADF,+BAAwB,cACE;IAAA,YAAgB;IAAA,iBAAM;IAC9C,uIAAyB;IAGzB,gCAAwB;IACtB,wIAAoB;IAKpB,wIAAsB;IAGtB,wIAA2B;IAKjC,AADE,AADE,iBAAM,EACF,EACF;;;IAzCD,6CAAiC;IAKlC,eAIC;IAJD,2CAIC;IAKD,eAIC;IAJD,0CAIC;IAKuB,eAAgB;IAAhB,mCAAgB;IACxC,cAEC;IAFD,gDAEC;IAEC,eAIC;IAJD,2CAIC;IACD,cAEC;IAFD,6CAEC;IACD,cAEC;IAFD,kDAEC;;;IAzCX,+BAAyB;IACvB,iIA4CC;;IACH,iBAAM;;;IA7CJ,cA4CC;IA5CD,2DA4CC;;;IA9DP,+BAA0B;IActB,AAbF,iHAA2B,2FAalB;IAmDX,iBAAM;;;IAhEJ,cA+DC;IA/DD,oDA+DC;;;;IAQC,kCAG8B;IAAtB,oMAAS,kBAAW,KAAC;IAC3B,wBAAgC;IAChC,kCACF;IAAA,iBAAS;;;IAgBP,YACF;;;IADE,mJACF;;;IACE,+BACF;;ADzIR;;;GAGG;AAOH,MAAM,OAAO,+BAA+B;IAoB1C,kBAAkB;IAClB,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC;IACzC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;IACtC,CAAC;IAED,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3C,CAAC;IAED,YACU,SAAoB,EACpB,GAAsB;QADtB,cAAS,GAAT,SAAS,CAAW;QACpB,QAAG,GAAH,GAAG,CAAmB;QA9BhC,4BAA4B;QACpB,aAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAChC,WAAM,GAAG,IAAI,OAAO,EAAiC,CAAC;QAE7D,eAAe;QACf,eAAU,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC,CAAC;QACzD,gBAAW,GAAG,IAAI,eAAe,CAAwB,EAAE,CAAC,CAAC;QAC7D,oBAAe,GAAG,IAAI,eAAe,CAAqB,EAAE,CAAC,CAAC;QAC9D,oBAAe,GAAG,IAAI,eAAe,CAAc,IAAI,GAAG,EAAE,CAAC,CAAC;QAC9D,eAAU,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;QAEjD,WAAW;QACX,kBAAa,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;QACpC,oBAAe,GAAG,IAAI,eAAe,CAAS,KAAK,CAAC,CAAC;IAkBlD,CAAC;IAEJ,QAAQ;QACN,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACjC,CAAC;IAED,WAAW;QACT,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACrD,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QAEzB,sEAAsE;QACtE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC;YAChC,wBAAwB;YACxB;gBACE,UAAU,EAAE,eAAe;gBAC3B,WAAW,EAAE,+BAA+B,IAAI,CAAC,MAAM,CAAC,aAAa,4EAA4E;gBACjJ,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,IAAI;aACd;YACD,wBAAwB;YACxB;gBACE,UAAU,EAAE,oBAAoB;gBAChC,WAAW,EAAE,cAAc;gBAC3B,OAAO,EAAE,MAAM;gBACf,UAAU,EAAE,eAAe;gBAC3B,OAAO,EAAE,IAAI;aACd;SACF,CAAC,CAAC;QAEH,gCAAgC;QAChC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,MAAM,GAAuB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC1E,GAAG,KAAK,CAAC,MAAM,EAAE;gBACjB,QAAQ,EAAE,KAAK;gBACf,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,SAAS;aACb,CAAA,CAAC,CAAC;YAExB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,gCAAgC;QAChC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAEO,cAAc;QACpB,aAAa,CAAC;YACZ,IAAI,CAAC,UAAU;YACf,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,CAClC,YAAY,CAAC,GAAG,CAAC,EACjB,oBAAoB,EAAE,EACtB,SAAS,CAAC,EAAE,CAAC,CACd;YACD,IAAI,CAAC,eAAe;SACrB,CAAC,CAAC,IAAI,CACL,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;YAC3C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,MAA0B,EAAE,UAAkB,EAAE,MAAc;QACjF,IAAI,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAE3B,cAAc;QACd,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,gBAAgB;QAChB,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;YACtC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACjC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvD,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrE,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAChE,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAEO,uBAAuB;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACvD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEpC,+BAA+B;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;YACrC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBACrB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,4BAA4B;IAE5B,UAAU,CAAC,MAAc;QACvB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,oBAAoB,CAAC,KAAuB;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAErC,0CAA0C;QAC1C,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,QAAQ,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC;YAEjD,IAAI,aAAa,CAAC,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;oBAC7B,8CAA8C;oBAC9C,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACjB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;wBACjB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;4BAChC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC;wBACrB,CAAC;oBACH,CAAC,CAAC,CAAC;gBACL,CAAC;gBACD,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE7B,oDAAoD;YACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAC5C,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACrE,IAAI,aAAa,EAAE,CAAC;gBAClB,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC;gBAChD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW;QACT,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY,CAAC,KAAuB;QAClC,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,KAAK,CAAC,SAAS,CAAC;QACzB,CAAC;QACD,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,mBAAmB,CAAC,KAAuB;QACzC,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,QAAQ,CAAC,CAAC,OAAO,0BAA0B,CAAC;YACjD,KAAK,UAAU,CAAC,CAAC,OAAO,sBAAsB,CAAC;YAC/C,KAAK,SAAS,CAAC,CAAC,OAAO,0BAA0B,CAAC;YAClD,OAAO,CAAC,CAAC,OAAO,sBAAsB,CAAC;QACzC,CAAC;IACH,CAAC;IAED,yBAAyB;IAEzB,MAAM;QACJ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;QAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAExC,uCAAuC;QACvC,MAAM,oBAAoB,GAAG,SAAS;aACnC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9C,gGAAgG;QAChG,MAAM,cAAc,GAA8B,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAA+B,CAAC,CAAC;QAEpH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACf,cAAc;YACd,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;gIAtPU,+BAA+B;oEAA/B,+BAA+B;YC/BtC,AADF,AADF,AAHF,8BAAuC,aAGV,aACA,SACnB;YAAA,YAAyC;YAAA,iBAAK;YAClD,4BAA8B;YAC5B,wJACF;YACF,AADE,iBAAI,EACA;YACN,8BAA0B;YACxB,kGAAyB;YAGzB,+BAA0B;YAAA,aAAmD;YAEjF,AADE,AAD+E,iBAAO,EAChF,EACF;YAKF,AADF,AADF,+BAA8B,cACC,cACD;YAExB,AADA,yBAA8C,yBAK9B;YAChB,uGAA2B;YAU/B,AADE,iBAAM,EACF;YAIF,AADF,AADF,gCAA6B,eACF,aAChB;YAAA,4BAAW;YAAA,iBAAQ;YAC1B,+CAQwB;;;YANtB,2IAAe,sBAAkB,IAAC;YAU1C,AADE,AADE,AADE,iBAAqB,EACjB,EACF,EACF;YAGN,oGAA0B;;YAKxB,0GAAO;YAyEP,AADF,gCAA2B,eACA;YACvB,uGAA4B;YAS9B,iBAAM;YAGJ,AADF,gCAA0B,kBAGG;YAAnB,6GAAS,YAAQ,IAAC;YACxB,yBACF;YAAA,iBAAS;YAET,mCAGyC;YADjC,6GAAS,uBAAmB,IAAC;YAIjC,AAFF,yFAA0B,mEAEjB;YAMjB,AADE,AADE,AADE,iBAAS,EACL,EACF,EACF;;YAlKI,eAAyC;YAAzC,6DAAyC;YAM7C,eAEC;YAFD,gDAEC;YACyB,eAAmD;YAAnD,oFAAmD;YAUzE,eAA6B;YAA7B,+CAA6B;YAI/B,cAQC;YARD,mDAQC;YAQC,eAAiC;YAMjC,AADA,AADA,AAJA,mEAAiC,wBAIV,4CACyB,iDACpB;YAQpC,eA0EC;YA1ED,kEA0EC;YAKG,eAQC;YARD,oDAQC;YAaO,eAAgC;YAAhC,kDAAgC;YACtC,cAIC;YAJD,kDAIC;;;iFD/HI,+BAA+B;cAN3C,SAAS;6BACI,KAAK,YACP,8BAA8B;;kFAI7B,+BAA+B","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { WindowRef } from '@progress/kendo-angular-dialog';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentEntityExtended } from \"@memberjunction/ai-core-plus\";\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface SubAgentSelectorResult {\n selectedAgents: MJAIAgentEntityExtended[];\n createNew: boolean;\n}\n\nexport interface SubAgentSelectorConfig {\n title: string;\n multiSelect: boolean;\n selectedAgentIds: string[];\n showCreateNew: boolean;\n parentAgentId: string; // To exclude from selection\n}\n\nexport interface AgentDisplayItem extends MJAIAgentEntityExtended {\n selected: boolean;\n typeName?: string;\n}\n\n/**\n * Sub-Agent Selector Dialog for selecting agents to convert to sub-agents.\n * Only shows agents with NULL ParentID (root agents) that can become sub-agents.\n */\n@Component({\n standalone: false,\n selector: 'mj-sub-agent-selector-dialog',\n templateUrl: './sub-agent-selector-dialog.component.html',\n styleUrls: ['./sub-agent-selector-dialog.component.css']\n})\nexport class SubAgentSelectorDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n config!: SubAgentSelectorConfig;\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<SubAgentSelectorResult | null>();\n \n // Data streams\n allAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n filteredAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n selectedAgents$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedTypeId$ = new BehaviorSubject<string>('all');\n \n // Computed values\n get selectedCount(): number {\n return this.selectedAgents$.value.size;\n }\n\n get totalAgentCount(): number {\n return this.allAgents$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredAgents$.value.length;\n }\n\n constructor(\n private dialogRef: WindowRef,\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingAgents();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadAgentsAndTypes();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadAgentsAndTypes() {\n const rv = new RunView();\n \n // Load both agents and types in a single batch for better performance\n const results = await rv.RunViews([\n // Root agents (index 0)\n {\n EntityName: 'MJ: AI Agents',\n ExtraFilter: `ParentID IS NULL AND ID != '${this.config.parentAgentId}' AND Status = 'Active' AND (ExposeAsAction = 0 OR ExposeAsAction IS NULL)`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n },\n // Agent types (index 1)\n {\n EntityName: 'MJ: AI Agent Types',\n ExtraFilter: 'IsActive = 1',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n // Process root agents (index 0)\n if (results[0].Success) {\n const agents: AgentDisplayItem[] = (results[0].Results || []).map(agent => ({\n ...agent.GetAll(),\n selected: false,\n typeName: agent.Type || 'Default'\n } as AgentDisplayItem));\n \n this.allAgents$.next(agents);\n }\n\n // Process agent types (index 1)\n if (results[1].Success) {\n this.agentTypes$.next(results[1].Results || []);\n }\n }\n\n private setupFiltering() {\n combineLatest([\n this.allAgents$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('')\n ),\n this.selectedTypeId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([agents, searchTerm, typeId]) => {\n this.filterAgents(agents, searchTerm || '', typeId);\n });\n }\n\n private filterAgents(agents: AgentDisplayItem[], searchTerm: string, typeId: string) {\n let filtered = [...agents];\n\n // Type filter\n if (typeId !== 'all') {\n filtered = filtered.filter(agent => UUIDsEqual(agent.TypeID, typeId));\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(agent =>\n (agent.Name && agent.Name.toLowerCase().includes(term)) ||\n (agent.Description && agent.Description.toLowerCase().includes(term)) ||\n (agent.typeName && agent.typeName.toLowerCase().includes(term))\n );\n }\n\n this.filteredAgents$.next(filtered);\n }\n\n private preselectExistingAgents() {\n if (this.config.selectedAgentIds.length > 0) {\n const selected = new Set(this.config.selectedAgentIds);\n this.selectedAgents$.next(selected);\n \n // Update agent selection state\n const agents = this.allAgents$.value;\n agents.forEach(agent => {\n agent.selected = selected.has(agent.ID);\n });\n this.allAgents$.next(agents);\n }\n }\n\n // === UI Event Handlers ===\n\n selectType(typeId: string) {\n this.selectedTypeId$.next(typeId);\n }\n\n toggleAgentSelection(agent: AgentDisplayItem) {\n const selected = this.selectedAgents$.value;\n const agents = this.allAgents$.value;\n \n // Find the agent and toggle its selection\n const agentToUpdate = agents.find(a => UUIDsEqual(a.ID, agent.ID));\n if (agentToUpdate) {\n agentToUpdate.selected = !agentToUpdate.selected;\n \n if (agentToUpdate.selected) {\n if (!this.config.multiSelect) {\n // Single select mode - clear other selections\n selected.clear();\n agents.forEach(a => {\n if (!UUIDsEqual(a.ID, agent.ID)) {\n a.selected = false;\n }\n });\n }\n selected.add(agent.ID);\n } else {\n selected.delete(agent.ID);\n }\n \n this.selectedAgents$.next(new Set(selected));\n this.allAgents$.next(agents);\n \n // Update filtered agents to reflect selection state\n const filtered = this.filteredAgents$.value;\n const filteredAgent = filtered.find(a => UUIDsEqual(a.ID, agent.ID));\n if (filteredAgent) {\n filteredAgent.selected = agentToUpdate.selected;\n this.filteredAgents$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getAgentIcon(agent: AgentDisplayItem): string {\n if (agent.IconClass) {\n return agent.IconClass;\n }\n return 'fa-solid fa-robot';\n }\n\n getAgentStatusColor(agent: AgentDisplayItem): string {\n switch (agent.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Disabled': return 'var(--mj-text-muted)';\n case 'Pending': return 'var(--mj-status-warning)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.dialogRef.close();\n }\n\n createNew() {\n this.result.next({\n selectedAgents: [],\n createNew: true\n });\n this.dialogRef.close();\n }\n\n async addSelectedAgents() {\n const selectedIds = this.selectedAgents$.value;\n const allAgents = this.allAgents$.value;\n \n // Get the selected agent display items\n const selectedDisplayItems = allAgents\n .filter(agent => selectedIds.has(agent.ID));\n \n // Convert AgentDisplayItem to MJAIAgentEntityExtended by casting (they have the same structure)\n const selectedAgents: MJAIAgentEntityExtended[] = selectedDisplayItems.map(item => item as MJAIAgentEntityExtended);\n \n this.result.next({\n selectedAgents,\n createNew: false\n });\n this.dialogRef.close();\n }\n}","<!-- 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>"]}
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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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil, startWith } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { MJAIAgentTypeEntity } from '@memberjunction/core-entities';\nimport { MJAIAgentEntityExtended } from \"@memberjunction/ai-core-plus\";\nimport { UUIDsEqual } from '@memberjunction/global';\n\nexport interface SubAgentSelectorResult {\n selectedAgents: MJAIAgentEntityExtended[];\n createNew: boolean;\n}\n\nexport interface SubAgentSelectorConfig {\n title: string;\n multiSelect: boolean;\n selectedAgentIds: string[];\n showCreateNew: boolean;\n parentAgentId: string; // To exclude from selection\n}\n\nexport interface AgentDisplayItem extends MJAIAgentEntityExtended {\n selected: boolean;\n typeName?: string;\n}\n\n/**\n * Sub-Agent Selector Dialog for selecting agents to convert to sub-agents.\n * Only shows agents with NULL ParentID (root agents) that can become sub-agents.\n */\n@Component({\n standalone: false,\n selector: 'mj-sub-agent-selector-dialog',\n templateUrl: './sub-agent-selector-dialog.component.html',\n styleUrls: ['./sub-agent-selector-dialog.component.css']\n})\nexport class SubAgentSelectorDialogComponent implements OnInit, OnDestroy {\n \n // Input properties set by service\n config!: SubAgentSelectorConfig;\n \n // Reactive state management\n private destroy$ = new Subject<void>();\n public result = new Subject<SubAgentSelectorResult | null>();\n \n // Data streams\n allAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n agentTypes$ = new BehaviorSubject<MJAIAgentTypeEntity[]>([]);\n filteredAgents$ = new BehaviorSubject<AgentDisplayItem[]>([]);\n selectedAgents$ = new BehaviorSubject<Set<string>>(new Set());\n isLoading$ = new BehaviorSubject<boolean>(false);\n \n // UI state\n searchControl = new FormControl('');\n selectedTypeId$ = new BehaviorSubject<string>('all');\n \n // Computed values\n get selectedCount(): number {\n return this.selectedAgents$.value.size;\n }\n\n get totalAgentCount(): number {\n return this.allAgents$.value.length;\n }\n\n get filteredCount(): number {\n return this.filteredAgents$.value.length;\n }\n\n @Output() DialogClose = new EventEmitter<void>();\n\n constructor(\n private cdr: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this.initializeData();\n this.setupFiltering();\n this.preselectExistingAgents();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n private async initializeData() {\n this.isLoading$.next(true);\n \n try {\n await this.loadAgentsAndTypes();\n } catch (error) {\n console.error('Error loading dialog data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n\n private async loadAgentsAndTypes() {\n const rv = new RunView();\n \n // Load both agents and types in a single batch for better performance\n const results = await rv.RunViews([\n // Root agents (index 0)\n {\n EntityName: 'MJ: AI Agents',\n ExtraFilter: `ParentID IS NULL AND ID != '${this.config.parentAgentId}' AND Status = 'Active' AND (ExposeAsAction = 0 OR ExposeAsAction IS NULL)`,\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n },\n // Agent types (index 1)\n {\n EntityName: 'MJ: AI Agent Types',\n ExtraFilter: 'IsActive = 1',\n OrderBy: 'Name',\n ResultType: 'entity_object',\n MaxRows: 1000\n }\n ]);\n\n // Process root agents (index 0)\n if (results[0].Success) {\n const agents: AgentDisplayItem[] = (results[0].Results || []).map(agent => ({\n ...agent.GetAll(),\n selected: false,\n typeName: agent.Type || 'Default'\n } as AgentDisplayItem));\n \n this.allAgents$.next(agents);\n }\n\n // Process agent types (index 1)\n if (results[1].Success) {\n this.agentTypes$.next(results[1].Results || []);\n }\n }\n\n private setupFiltering() {\n combineLatest([\n this.allAgents$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged(),\n startWith('')\n ),\n this.selectedTypeId$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([agents, searchTerm, typeId]) => {\n this.filterAgents(agents, searchTerm || '', typeId);\n });\n }\n\n private filterAgents(agents: AgentDisplayItem[], searchTerm: string, typeId: string) {\n let filtered = [...agents];\n\n // Type filter\n if (typeId !== 'all') {\n filtered = filtered.filter(agent => UUIDsEqual(agent.TypeID, typeId));\n }\n\n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(agent =>\n (agent.Name && agent.Name.toLowerCase().includes(term)) ||\n (agent.Description && agent.Description.toLowerCase().includes(term)) ||\n (agent.typeName && agent.typeName.toLowerCase().includes(term))\n );\n }\n\n this.filteredAgents$.next(filtered);\n }\n\n private preselectExistingAgents() {\n if (this.config.selectedAgentIds.length > 0) {\n const selected = new Set(this.config.selectedAgentIds);\n this.selectedAgents$.next(selected);\n \n // Update agent selection state\n const agents = this.allAgents$.value;\n agents.forEach(agent => {\n agent.selected = selected.has(agent.ID);\n });\n this.allAgents$.next(agents);\n }\n }\n\n // === UI Event Handlers ===\n\n selectType(typeId: string) {\n this.selectedTypeId$.next(typeId);\n }\n\n toggleAgentSelection(agent: AgentDisplayItem) {\n const selected = this.selectedAgents$.value;\n const agents = this.allAgents$.value;\n \n // Find the agent and toggle its selection\n const agentToUpdate = agents.find(a => UUIDsEqual(a.ID, agent.ID));\n if (agentToUpdate) {\n agentToUpdate.selected = !agentToUpdate.selected;\n \n if (agentToUpdate.selected) {\n if (!this.config.multiSelect) {\n // Single select mode - clear other selections\n selected.clear();\n agents.forEach(a => {\n if (!UUIDsEqual(a.ID, agent.ID)) {\n a.selected = false;\n }\n });\n }\n selected.add(agent.ID);\n } else {\n selected.delete(agent.ID);\n }\n \n this.selectedAgents$.next(new Set(selected));\n this.allAgents$.next(agents);\n \n // Update filtered agents to reflect selection state\n const filtered = this.filteredAgents$.value;\n const filteredAgent = filtered.find(a => UUIDsEqual(a.ID, agent.ID));\n if (filteredAgent) {\n filteredAgent.selected = agentToUpdate.selected;\n this.filteredAgents$.next(filtered);\n }\n }\n }\n\n clearSearch() {\n this.searchControl.reset();\n }\n\n getAgentIcon(agent: AgentDisplayItem): string {\n if (agent.IconClass) {\n return agent.IconClass;\n }\n return 'fa-solid fa-robot';\n }\n\n getAgentStatusColor(agent: AgentDisplayItem): string {\n switch (agent.Status) {\n case 'Active': return 'var(--mj-status-success)';\n case 'Disabled': return 'var(--mj-text-muted)';\n case 'Pending': return 'var(--mj-status-warning)';\n default: return 'var(--mj-text-muted)';\n }\n }\n\n // === Dialog Actions ===\n\n cancel() {\n this.result.next(null);\n this.DialogClose.emit();\n }\n\n createNew() {\n this.result.next({\n selectedAgents: [],\n createNew: true\n });\n this.DialogClose.emit();\n }\n\n async addSelectedAgents() {\n const selectedIds = this.selectedAgents$.value;\n const allAgents = this.allAgents$.value;\n \n // Get the selected agent display items\n const selectedDisplayItems = allAgents\n .filter(agent => selectedIds.has(agent.ID));\n \n // Convert AgentDisplayItem to MJAIAgentEntityExtended by casting (they have the same structure)\n const selectedAgents: MJAIAgentEntityExtended[] = selectedDisplayItems.map(item => item as MJAIAgentEntityExtended);\n \n this.result.next({\n selectedAgents,\n createNew: false\n });\n this.DialogClose.emit();\n }\n}","<!-- 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 <input\n class=\"mj-input search-field\"\n [formControl]=\"searchControl\"\n placeholder=\"Search agents by name, description, or type...\">\n @if (searchControl.value) {\n <button mjButton\n variant=\"flat\"\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 <mj-dropdown\n [ngModel]=\"selectedTypeId$ | async\"\n (ngModelChange)=\"selectType($any($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 </mj-dropdown>\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 mjButton (click)=\"clearSearch()\" variant=\"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 mjButton\n variant=\"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 mjButton\n variant=\"flat\"\n (click)=\"cancel()\">\n Cancel\n </button>\n\n <button mjButton\n variant=\"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>"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ai-prompt-run-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-prompt-run-form.component.d.ts","sourceRoot":"","sources":["../../../../src/lib/custom/AIPromptRuns/ai-prompt-run-form.component.ts"],"names":[],"mappings":"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"}