@memberjunction/ng-dashboards 2.121.0 → 2.122.1

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 (203) hide show
  1. package/dist/AI/components/agents/agent-configuration.component.d.ts +23 -11
  2. package/dist/AI/components/agents/agent-configuration.component.d.ts.map +1 -1
  3. package/dist/AI/components/agents/agent-configuration.component.js +122 -95
  4. package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
  5. package/dist/AI/components/agents/agent-editor.component.js +88 -90
  6. package/dist/AI/components/agents/agent-editor.component.js.map +1 -1
  7. package/dist/AI/components/agents/agent-filter-panel.component.js +2 -2
  8. package/dist/AI/components/execution-monitoring.component.d.ts +23 -10
  9. package/dist/AI/components/execution-monitoring.component.d.ts.map +1 -1
  10. package/dist/AI/components/execution-monitoring.component.js +143 -124
  11. package/dist/AI/components/execution-monitoring.component.js.map +1 -1
  12. package/dist/AI/components/models/model-management-v2.component.d.ts +17 -13
  13. package/dist/AI/components/models/model-management-v2.component.d.ts.map +1 -1
  14. package/dist/AI/components/models/model-management-v2.component.js +248 -266
  15. package/dist/AI/components/models/model-management-v2.component.js.map +1 -1
  16. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +76 -78
  17. package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -1
  18. package/dist/AI/components/prompts/prompt-filter-panel.component.js +2 -2
  19. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts +17 -15
  20. package/dist/AI/components/prompts/prompt-management-v2.component.d.ts.map +1 -1
  21. package/dist/AI/components/prompts/prompt-management-v2.component.js +372 -397
  22. package/dist/AI/components/prompts/prompt-management-v2.component.js.map +1 -1
  23. package/dist/AI/components/prompts/prompt-version-control.component.js +100 -102
  24. package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -1
  25. package/dist/AI/components/system/system-config-filter-panel.component.js +2 -2
  26. package/dist/AI/components/system/system-configuration.component.d.ts +17 -10
  27. package/dist/AI/components/system/system-configuration.component.d.ts.map +1 -1
  28. package/dist/AI/components/system/system-configuration.component.js +82 -61
  29. package/dist/AI/components/system/system-configuration.component.js.map +1 -1
  30. package/dist/AI/components/widgets/kpi-card.component.d.ts.map +1 -1
  31. package/dist/AI/components/widgets/kpi-card.component.js +11 -7
  32. package/dist/AI/components/widgets/kpi-card.component.js.map +1 -1
  33. package/dist/AI/index.d.ts +4 -0
  34. package/dist/AI/index.d.ts.map +1 -1
  35. package/dist/AI/index.js +6 -1
  36. package/dist/AI/index.js.map +1 -1
  37. package/dist/Actions/components/actions-list-view.component.js +9 -9
  38. package/dist/Actions/components/actions-list-view.component.js.map +1 -1
  39. package/dist/Actions/components/actions-overview.component.d.ts +16 -13
  40. package/dist/Actions/components/actions-overview.component.d.ts.map +1 -1
  41. package/dist/Actions/components/actions-overview.component.js +62 -48
  42. package/dist/Actions/components/actions-overview.component.js.map +1 -1
  43. package/dist/Actions/components/categories-list-view.component.js +9 -9
  44. package/dist/Actions/components/categories-list-view.component.js.map +1 -1
  45. package/dist/Actions/components/code-management.component.d.ts +17 -7
  46. package/dist/Actions/components/code-management.component.d.ts.map +1 -1
  47. package/dist/Actions/components/code-management.component.js +45 -12
  48. package/dist/Actions/components/code-management.component.js.map +1 -1
  49. package/dist/Actions/components/entity-integration.component.d.ts +17 -7
  50. package/dist/Actions/components/entity-integration.component.d.ts.map +1 -1
  51. package/dist/Actions/components/entity-integration.component.js +45 -12
  52. package/dist/Actions/components/entity-integration.component.js.map +1 -1
  53. package/dist/Actions/components/execution-monitoring.component.d.ts +16 -10
  54. package/dist/Actions/components/execution-monitoring.component.d.ts.map +1 -1
  55. package/dist/Actions/components/execution-monitoring.component.js +56 -30
  56. package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
  57. package/dist/Actions/components/scheduled-actions.component.d.ts +17 -7
  58. package/dist/Actions/components/scheduled-actions.component.d.ts.map +1 -1
  59. package/dist/Actions/components/scheduled-actions.component.js +45 -12
  60. package/dist/Actions/components/scheduled-actions.component.js.map +1 -1
  61. package/dist/Actions/components/security-permissions.component.d.ts +17 -7
  62. package/dist/Actions/components/security-permissions.component.d.ts.map +1 -1
  63. package/dist/Actions/components/security-permissions.component.js +45 -12
  64. package/dist/Actions/components/security-permissions.component.js.map +1 -1
  65. package/dist/Actions/index.d.ts +6 -1
  66. package/dist/Actions/index.d.ts.map +1 -1
  67. package/dist/Actions/index.js +9 -1
  68. package/dist/Actions/index.js.map +1 -1
  69. package/dist/ComponentStudio/component-studio-dashboard.component.d.ts +1 -1
  70. package/dist/ComponentStudio/component-studio-dashboard.component.js +8 -8
  71. package/dist/ComponentStudio/component-studio-dashboard.component.js.map +1 -1
  72. package/dist/ComponentStudio/components/artifact-load-dialog.component.js +52 -57
  73. package/dist/ComponentStudio/components/artifact-load-dialog.component.js.map +1 -1
  74. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js +8 -9
  75. package/dist/ComponentStudio/components/artifact-selection-dialog.component.js.map +1 -1
  76. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts +107 -0
  77. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.d.ts.map +1 -0
  78. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js +553 -0
  79. package/dist/DataExplorer/components/navigation-panel/navigation-panel.component.js.map +1 -0
  80. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts +179 -0
  81. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.d.ts.map +1 -0
  82. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js +814 -0
  83. package/dist/DataExplorer/components/view-config-panel/view-config-panel.component.js.map +1 -0
  84. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts +151 -0
  85. package/dist/DataExplorer/components/view-selector/view-selector.component.d.ts.map +1 -0
  86. package/dist/DataExplorer/components/view-selector/view-selector.component.js +480 -0
  87. package/dist/DataExplorer/components/view-selector/view-selector.component.js.map +1 -0
  88. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts +439 -0
  89. package/dist/DataExplorer/data-explorer-dashboard.component.d.ts.map +1 -0
  90. package/dist/DataExplorer/data-explorer-dashboard.component.js +2129 -0
  91. package/dist/DataExplorer/data-explorer-dashboard.component.js.map +1 -0
  92. package/dist/DataExplorer/index.d.ts +5 -0
  93. package/dist/DataExplorer/index.d.ts.map +1 -0
  94. package/dist/DataExplorer/index.js +10 -0
  95. package/dist/DataExplorer/index.js.map +1 -0
  96. package/dist/DataExplorer/models/explorer-state.interface.d.ts +183 -0
  97. package/dist/DataExplorer/models/explorer-state.interface.d.ts.map +1 -0
  98. package/dist/DataExplorer/models/explorer-state.interface.js +31 -0
  99. package/dist/DataExplorer/models/explorer-state.interface.js.map +1 -0
  100. package/dist/DataExplorer/services/explorer-state.service.d.ts +232 -0
  101. package/dist/DataExplorer/services/explorer-state.service.d.ts.map +1 -0
  102. package/dist/DataExplorer/services/explorer-state.service.js +912 -0
  103. package/dist/DataExplorer/services/explorer-state.service.js.map +1 -0
  104. package/dist/EntityAdmin/components/entity-details.component.d.ts.map +1 -1
  105. package/dist/EntityAdmin/components/entity-details.component.js +11 -13
  106. package/dist/EntityAdmin/components/entity-details.component.js.map +1 -1
  107. package/dist/EntityAdmin/components/entity-filter-panel.component.js +2 -2
  108. package/dist/EntityAdmin/components/erd-composite.component.js +2 -2
  109. package/dist/EntityAdmin/components/erd-diagram.component.js +2 -2
  110. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +1 -1
  111. package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
  112. package/dist/EntityAdmin/entity-admin-dashboard.component.js +14 -15
  113. package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
  114. package/dist/Home/home-dashboard.component.d.ts +122 -0
  115. package/dist/Home/home-dashboard.component.d.ts.map +1 -0
  116. package/dist/Home/home-dashboard.component.js +698 -0
  117. package/dist/Home/home-dashboard.component.js.map +1 -0
  118. package/dist/Scheduling/components/index.d.ts +11 -0
  119. package/dist/Scheduling/components/index.d.ts.map +1 -0
  120. package/dist/Scheduling/components/index.js +13 -0
  121. package/dist/Scheduling/components/index.js.map +1 -0
  122. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts +20 -0
  123. package/dist/Scheduling/components/scheduling-health-resource.component.d.ts.map +1 -0
  124. package/dist/Scheduling/components/scheduling-health-resource.component.js +55 -0
  125. package/dist/Scheduling/components/scheduling-health-resource.component.js.map +1 -0
  126. package/dist/Scheduling/components/scheduling-health.component.js +7 -8
  127. package/dist/Scheduling/components/scheduling-health.component.js.map +1 -1
  128. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts +20 -0
  129. package/dist/Scheduling/components/scheduling-history-resource.component.d.ts.map +1 -0
  130. package/dist/Scheduling/components/scheduling-history-resource.component.js +55 -0
  131. package/dist/Scheduling/components/scheduling-history-resource.component.js.map +1 -0
  132. package/dist/Scheduling/components/scheduling-history.component.js +7 -8
  133. package/dist/Scheduling/components/scheduling-history.component.js.map +1 -1
  134. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts +20 -0
  135. package/dist/Scheduling/components/scheduling-jobs-resource.component.d.ts.map +1 -0
  136. package/dist/Scheduling/components/scheduling-jobs-resource.component.js +55 -0
  137. package/dist/Scheduling/components/scheduling-jobs-resource.component.js.map +1 -0
  138. package/dist/Scheduling/components/scheduling-jobs.component.js +7 -8
  139. package/dist/Scheduling/components/scheduling-jobs.component.js.map +1 -1
  140. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts +20 -0
  141. package/dist/Scheduling/components/scheduling-monitor-resource.component.d.ts.map +1 -0
  142. package/dist/Scheduling/components/scheduling-monitor-resource.component.js +55 -0
  143. package/dist/Scheduling/components/scheduling-monitor-resource.component.js.map +1 -0
  144. package/dist/Scheduling/components/scheduling-monitoring.component.js +7 -8
  145. package/dist/Scheduling/components/scheduling-monitoring.component.js.map +1 -1
  146. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts +20 -0
  147. package/dist/Scheduling/components/scheduling-types-resource.component.d.ts.map +1 -0
  148. package/dist/Scheduling/components/scheduling-types-resource.component.js +55 -0
  149. package/dist/Scheduling/components/scheduling-types-resource.component.js.map +1 -0
  150. package/dist/Scheduling/components/scheduling-types.component.js +7 -8
  151. package/dist/Scheduling/components/scheduling-types.component.js.map +1 -1
  152. package/dist/Scheduling/scheduling-dashboard.component.d.ts +1 -1
  153. package/dist/Scheduling/scheduling-dashboard.component.js +3 -3
  154. package/dist/Testing/components/index.d.ts +11 -0
  155. package/dist/Testing/components/index.d.ts.map +1 -0
  156. package/dist/Testing/components/index.js +13 -0
  157. package/dist/Testing/components/index.js.map +1 -0
  158. package/dist/Testing/components/testing-analytics-resource.component.d.ts +20 -0
  159. package/dist/Testing/components/testing-analytics-resource.component.d.ts.map +1 -0
  160. package/dist/Testing/components/testing-analytics-resource.component.js +55 -0
  161. package/dist/Testing/components/testing-analytics-resource.component.js.map +1 -0
  162. package/dist/Testing/components/testing-execution-resource.component.d.ts +20 -0
  163. package/dist/Testing/components/testing-execution-resource.component.d.ts.map +1 -0
  164. package/dist/Testing/components/testing-execution-resource.component.js +55 -0
  165. package/dist/Testing/components/testing-execution-resource.component.js.map +1 -0
  166. package/dist/Testing/components/testing-execution.component.js +3 -3
  167. package/dist/Testing/components/testing-execution.component.js.map +1 -1
  168. package/dist/Testing/components/testing-feedback-resource.component.d.ts +20 -0
  169. package/dist/Testing/components/testing-feedback-resource.component.d.ts.map +1 -0
  170. package/dist/Testing/components/testing-feedback-resource.component.js +55 -0
  171. package/dist/Testing/components/testing-feedback-resource.component.js.map +1 -0
  172. package/dist/Testing/components/testing-overview-resource.component.d.ts +20 -0
  173. package/dist/Testing/components/testing-overview-resource.component.d.ts.map +1 -0
  174. package/dist/Testing/components/testing-overview-resource.component.js +55 -0
  175. package/dist/Testing/components/testing-overview-resource.component.js.map +1 -0
  176. package/dist/Testing/components/testing-version-resource.component.d.ts +20 -0
  177. package/dist/Testing/components/testing-version-resource.component.d.ts.map +1 -0
  178. package/dist/Testing/components/testing-version-resource.component.js +55 -0
  179. package/dist/Testing/components/testing-version-resource.component.js.map +1 -0
  180. package/dist/Testing/testing-dashboard.component.d.ts +1 -1
  181. package/dist/Testing/testing-dashboard.component.js +23 -25
  182. package/dist/Testing/testing-dashboard.component.js.map +1 -1
  183. package/dist/module.d.ts +83 -66
  184. package/dist/module.d.ts.map +1 -1
  185. package/dist/module.js +137 -19
  186. package/dist/module.js.map +1 -1
  187. package/dist/public-api.d.ts +6 -4
  188. package/dist/public-api.d.ts.map +1 -1
  189. package/dist/public-api.js +41 -13
  190. package/dist/public-api.js.map +1 -1
  191. package/package.json +26 -14
  192. package/dist/AI/ai-dashboard.component.d.ts +0 -62
  193. package/dist/AI/ai-dashboard.component.d.ts.map +0 -1
  194. package/dist/AI/ai-dashboard.component.js +0 -338
  195. package/dist/AI/ai-dashboard.component.js.map +0 -1
  196. package/dist/Actions/actions-management-dashboard.component.d.ts +0 -52
  197. package/dist/Actions/actions-management-dashboard.component.d.ts.map +0 -1
  198. package/dist/Actions/actions-management-dashboard.component.js +0 -308
  199. package/dist/Actions/actions-management-dashboard.component.js.map +0 -1
  200. package/dist/generic/base-dashboard.d.ts +0 -65
  201. package/dist/generic/base-dashboard.d.ts.map +0 -1
  202. package/dist/generic/base-dashboard.js +0 -74
  203. package/dist/generic/base-dashboard.js.map +0 -1
@@ -1,358 +1,296 @@
1
- import { Component, Output, EventEmitter, Input } from '@angular/core';
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
2
8
  import { Subject, BehaviorSubject } from 'rxjs';
3
9
  import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
- import { Metadata, RunView } from '@memberjunction/core';
10
+ import { Metadata, RunView, CompositeKey } from '@memberjunction/core';
11
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
5
12
  import { MJNotificationService } from '@memberjunction/ng-notifications';
13
+ import { RegisterClass } from '@memberjunction/global';
6
14
  import * as i0 from "@angular/core";
7
15
  import * as i1 from "@memberjunction/ng-shared";
8
16
  import * as i2 from "@memberjunction/ng-ai-test-harness";
9
- import * as i3 from "@angular/router";
10
- import * as i4 from "@angular/forms";
11
- import * as i5 from "@progress/kendo-angular-layout";
12
- import * as i6 from "./model-prompt-priority-matrix.component";
17
+ import * as i3 from "@angular/forms";
18
+ import * as i4 from "@progress/kendo-angular-layout";
19
+ import * as i5 from "@memberjunction/ng-shared-generic";
13
20
  const _forTrack0 = ($index, $item) => $item.ID;
14
- function PromptManagementV2Component_Conditional_1_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3);
16
- i0.ɵɵelement(3, "div", 4)(4, "div", 4)(5, "div", 4);
17
- i0.ɵɵelementEnd();
18
- i0.ɵɵelementStart(6, "div", 5);
19
- i0.ɵɵtext(7);
20
- i0.ɵɵelementEnd()()();
21
- } if (rf & 2) {
22
- const ctx_r0 = i0.ɵɵnextContext();
23
- i0.ɵɵadvance(7);
24
- i0.ɵɵtextInterpolate(ctx_r0.currentLoadingMessage);
25
- } }
26
- function PromptManagementV2Component_Conditional_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
21
+ function PromptManagementV2Component_Conditional_8_Template(rf, ctx) { if (rf & 1) {
27
22
  i0.ɵɵtext(0, " Hide Filters ");
28
23
  } }
29
- function PromptManagementV2Component_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
24
+ function PromptManagementV2Component_Conditional_9_Template(rf, ctx) { if (rf & 1) {
30
25
  i0.ɵɵtext(0, " Show Filters ");
31
26
  } }
32
- function PromptManagementV2Component_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
33
- const _r3 = i0.ɵɵgetCurrentView();
34
- i0.ɵɵelementStart(0, "button", 26);
35
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_19_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.createNewPrompt()); });
36
- i0.ɵɵelement(1, "i", 27);
27
+ function PromptManagementV2Component_Conditional_18_Template(rf, ctx) { if (rf & 1) {
28
+ const _r1 = i0.ɵɵgetCurrentView();
29
+ i0.ɵɵelementStart(0, "button", 44);
30
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_18_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.createNewPrompt()); });
31
+ i0.ɵɵelement(1, "i", 45);
37
32
  i0.ɵɵtext(2, " New Prompt ");
38
33
  i0.ɵɵelementEnd();
39
34
  } }
40
- function PromptManagementV2Component_Conditional_2_Conditional_21_For_26_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelementStart(0, "option", 43);
35
+ function PromptManagementV2Component_For_47_Template(rf, ctx) { if (rf & 1) {
36
+ i0.ɵɵelementStart(0, "option", 33);
42
37
  i0.ɵɵtext(1);
43
38
  i0.ɵɵelementEnd();
44
39
  } if (rf & 2) {
45
- const category_r5 = ctx.$implicit;
46
- i0.ɵɵproperty("value", category_r5.ID);
40
+ const category_r3 = ctx.$implicit;
41
+ i0.ɵɵproperty("value", category_r3.ID);
47
42
  i0.ɵɵadvance();
48
- i0.ɵɵtextInterpolate(category_r5.Name);
43
+ i0.ɵɵtextInterpolate(category_r3.Name);
49
44
  } }
50
- function PromptManagementV2Component_Conditional_2_Conditional_21_For_35_Template(rf, ctx) { if (rf & 1) {
51
- i0.ɵɵelementStart(0, "option", 43);
45
+ function PromptManagementV2Component_For_56_Template(rf, ctx) { if (rf & 1) {
46
+ i0.ɵɵelementStart(0, "option", 33);
52
47
  i0.ɵɵtext(1);
53
48
  i0.ɵɵelementEnd();
54
49
  } if (rf & 2) {
55
- const type_r6 = ctx.$implicit;
56
- i0.ɵɵproperty("value", type_r6.ID);
50
+ const type_r4 = ctx.$implicit;
51
+ i0.ɵɵproperty("value", type_r4.ID);
57
52
  i0.ɵɵadvance();
58
- i0.ɵɵtextInterpolate(type_r6.Name);
53
+ i0.ɵɵtextInterpolate(type_r4.Name);
59
54
  } }
60
- function PromptManagementV2Component_Conditional_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
61
- const _r4 = i0.ɵɵgetCurrentView();
62
- i0.ɵɵelementStart(0, "kendo-splitter-pane", 23)(1, "div", 28)(2, "div", 29)(3, "h3");
63
- i0.ɵɵtext(4, "Prompt Filters");
64
- i0.ɵɵelementEnd();
65
- i0.ɵɵelementStart(5, "div", 30)(6, "span", 31);
66
- i0.ɵɵtext(7);
67
- i0.ɵɵelementEnd();
68
- i0.ɵɵelementStart(8, "span", 32);
69
- i0.ɵɵtext(9);
70
- i0.ɵɵelementEnd()();
71
- i0.ɵɵelementStart(10, "button", 33);
72
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.toggleFilterPanel()); });
73
- i0.ɵɵelement(11, "span", 34);
74
- i0.ɵɵelementEnd()();
75
- i0.ɵɵelementStart(12, "div", 35)(13, "div", 36)(14, "label", 37);
76
- i0.ɵɵelement(15, "span", 38);
77
- i0.ɵɵtext(16, " Name ");
78
- i0.ɵɵelementEnd();
79
- i0.ɵɵelementStart(17, "input", 39);
80
- i0.ɵɵlistener("input", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSearchChange($event.target.value)); });
81
- i0.ɵɵelementEnd()();
82
- i0.ɵɵelementStart(18, "div", 36)(19, "label", 37);
83
- i0.ɵɵelement(20, "span", 40);
84
- i0.ɵɵtext(21, " Category ");
85
- i0.ɵɵelementEnd();
86
- i0.ɵɵelementStart(22, "select", 41);
87
- i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_select_change_22_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCategoryChange($event.target.value)); });
88
- i0.ɵɵelementStart(23, "option", 42);
89
- i0.ɵɵtext(24, "All Categories");
90
- i0.ɵɵelementEnd();
91
- i0.ɵɵrepeaterCreate(25, PromptManagementV2Component_Conditional_2_Conditional_21_For_26_Template, 2, 2, "option", 43, _forTrack0);
92
- i0.ɵɵelementEnd()();
93
- i0.ɵɵelementStart(27, "div", 36)(28, "label", 37);
94
- i0.ɵɵelement(29, "span", 44);
95
- i0.ɵɵtext(30, " Type ");
96
- i0.ɵɵelementEnd();
97
- i0.ɵɵelementStart(31, "select", 41);
98
- i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_select_change_31_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onTypeChange($event.target.value)); });
99
- i0.ɵɵelementStart(32, "option", 42);
100
- i0.ɵɵtext(33, "All Types");
101
- i0.ɵɵelementEnd();
102
- i0.ɵɵrepeaterCreate(34, PromptManagementV2Component_Conditional_2_Conditional_21_For_35_Template, 2, 2, "option", 43, _forTrack0);
103
- i0.ɵɵelementEnd()();
104
- i0.ɵɵelementStart(36, "div", 36)(37, "label", 37);
105
- i0.ɵɵelement(38, "span", 45);
106
- i0.ɵɵtext(39, " Status ");
107
- i0.ɵɵelementEnd();
108
- i0.ɵɵelementStart(40, "select", 41);
109
- i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_select_change_40_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onStatusChange($event.target.value)); });
110
- i0.ɵɵelementStart(41, "option", 42);
111
- i0.ɵɵtext(42, "All Statuses");
112
- i0.ɵɵelementEnd();
113
- i0.ɵɵelementStart(43, "option", 46);
114
- i0.ɵɵtext(44, "Active");
55
+ function PromptManagementV2Component_Conditional_74_Template(rf, ctx) { if (rf & 1) {
56
+ i0.ɵɵelementStart(0, "div", 43);
57
+ i0.ɵɵelement(1, "mj-loading", 46);
115
58
  i0.ɵɵelementEnd();
116
- i0.ɵɵelementStart(45, "option", 47);
117
- i0.ɵɵtext(46, "Inactive");
118
- i0.ɵɵelementEnd()()();
119
- i0.ɵɵelementStart(47, "div", 48)(48, "button", 49);
120
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_21_Template_button_click_48_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.clearFilters()); });
121
- i0.ɵɵelement(49, "span", 50);
122
- i0.ɵɵtext(50, " Reset Filters ");
123
- i0.ɵɵelementEnd()()()()();
124
59
  } if (rf & 2) {
125
- const ctx_r0 = i0.ɵɵnextContext(2);
126
- i0.ɵɵadvance(7);
127
- i0.ɵɵtextInterpolate(ctx_r0.filteredPrompts.length);
128
- i0.ɵɵadvance(2);
129
- i0.ɵɵtextInterpolate1("of ", ctx_r0.prompts.length, "");
130
- i0.ɵɵadvance(8);
131
- i0.ɵɵproperty("value", ctx_r0.searchTerm);
132
- i0.ɵɵadvance(5);
133
- i0.ɵɵproperty("value", ctx_r0.selectedCategory);
134
- i0.ɵɵadvance(3);
135
- i0.ɵɵrepeater(ctx_r0.categories);
136
- i0.ɵɵadvance(6);
137
- i0.ɵɵproperty("value", ctx_r0.selectedType);
138
- i0.ɵɵadvance(3);
139
- i0.ɵɵrepeater(ctx_r0.types);
140
- i0.ɵɵadvance(6);
141
- i0.ɵɵproperty("value", ctx_r0.selectedStatus);
60
+ const ctx_r1 = i0.ɵɵnextContext();
61
+ i0.ɵɵadvance();
62
+ i0.ɵɵproperty("text", ctx_r1.currentLoadingMessage);
142
63
  } }
143
- function PromptManagementV2Component_Conditional_2_Conditional_24_Conditional_6_Template(rf, ctx) { if (rf & 1) {
144
- const _r7 = i0.ɵɵgetCurrentView();
145
- i0.ɵɵelementStart(0, "button", 53);
146
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_24_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.createNewPrompt()); });
147
- i0.ɵɵelement(1, "i", 27);
148
- i0.ɵɵtext(2, " Create First Prompt ");
64
+ function PromptManagementV2Component_Conditional_75_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
65
+ const _r5 = i0.ɵɵgetCurrentView();
66
+ i0.ɵɵelementStart(0, "button", 49);
67
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createNewPrompt()); });
68
+ i0.ɵɵelement(1, "i", 45);
69
+ i0.ɵɵtext(2, " Create New Prompt ");
149
70
  i0.ɵɵelementEnd();
150
71
  } }
151
- function PromptManagementV2Component_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
152
- i0.ɵɵelementStart(0, "div", 25);
153
- i0.ɵɵelement(1, "i", 51);
72
+ function PromptManagementV2Component_Conditional_75_Conditional_0_Template(rf, ctx) { if (rf & 1) {
73
+ i0.ɵɵelementStart(0, "div", 47);
74
+ i0.ɵɵelement(1, "i", 4);
154
75
  i0.ɵɵelementStart(2, "h3");
155
76
  i0.ɵɵtext(3, "No prompts found");
156
77
  i0.ɵɵelementEnd();
157
78
  i0.ɵɵelementStart(4, "p");
158
79
  i0.ɵɵtext(5);
159
80
  i0.ɵɵelementEnd();
160
- i0.ɵɵtemplate(6, PromptManagementV2Component_Conditional_2_Conditional_24_Conditional_6_Template, 3, 0, "button", 52);
81
+ i0.ɵɵtemplate(6, PromptManagementV2Component_Conditional_75_Conditional_0_Conditional_6_Template, 3, 0, "button", 48);
161
82
  i0.ɵɵelementEnd();
162
83
  } if (rf & 2) {
163
- const ctx_r0 = i0.ɵɵnextContext(2);
84
+ const ctx_r1 = i0.ɵɵnextContext(2);
164
85
  i0.ɵɵadvance(5);
165
- i0.ɵɵtextInterpolate(ctx_r0.hasActiveFilters ? "Try adjusting your filters" : "Create your first AI prompt to get started");
86
+ i0.ɵɵtextInterpolate(ctx_r1.hasActiveFilters ? "Try adjusting your filters" : "Create your first AI prompt to get started");
166
87
  i0.ɵɵadvance();
167
- i0.ɵɵconditional(!ctx_r0.hasActiveFilters && ctx_r0.UserCanCreatePrompts ? 6 : -1);
88
+ i0.ɵɵconditional(!ctx_r1.hasActiveFilters && ctx_r1.UserCanCreatePrompts ? 6 : -1);
89
+ } }
90
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
91
+ i0.ɵɵelementStart(0, "span", 60);
92
+ i0.ɵɵelement(1, "i", 70);
93
+ i0.ɵɵtext(2);
94
+ i0.ɵɵelementEnd();
95
+ } if (rf & 2) {
96
+ const prompt_r7 = i0.ɵɵnextContext().$implicit;
97
+ i0.ɵɵclassMap("status-" + prompt_r7.Status.toLowerCase());
98
+ i0.ɵɵadvance(2);
99
+ i0.ɵɵtextInterpolate1(" ", prompt_r7.Status, " ");
168
100
  } }
169
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
170
- i0.ɵɵelementStart(0, "p", 63);
101
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
102
+ i0.ɵɵelementStart(0, "p", 64);
171
103
  i0.ɵɵtext(1);
172
104
  i0.ɵɵelementEnd();
173
105
  } if (rf & 2) {
174
- const prompt_r9 = i0.ɵɵnextContext().$implicit;
106
+ const prompt_r7 = i0.ɵɵnextContext().$implicit;
175
107
  i0.ɵɵadvance();
176
- i0.ɵɵtextInterpolate(prompt_r9.Description);
108
+ i0.ɵɵtextInterpolate(prompt_r7.Description);
109
+ } }
110
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
111
+ i0.ɵɵelementStart(0, "p", 65);
112
+ i0.ɵɵtext(1, "No description provided");
113
+ i0.ɵɵelementEnd();
177
114
  } }
178
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_22_Template(rf, ctx) { if (rf & 1) {
179
- i0.ɵɵelement(0, "i", 73);
115
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_11_Template(rf, ctx) { if (rf & 1) {
116
+ i0.ɵɵelement(0, "i", 75);
180
117
  i0.ɵɵtext(1, " Yes ");
181
118
  } }
182
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_23_Template(rf, ctx) { if (rf & 1) {
183
- i0.ɵɵelement(0, "i", 74);
119
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_12_Template(rf, ctx) { if (rf & 1) {
120
+ i0.ɵɵelement(0, "i", 76);
184
121
  i0.ɵɵtext(1, " No ");
185
122
  } }
186
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_30_Template(rf, ctx) { if (rf & 1) {
187
- const _r10 = i0.ɵɵgetCurrentView();
188
- i0.ɵɵelementStart(0, "button", 75);
189
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_30_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r10); const prompt_r9 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.testPrompt(prompt_r9.ID, $event)); });
190
- i0.ɵɵelement(1, "i", 76);
191
- i0.ɵɵtext(2, " Run ");
123
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
124
+ i0.ɵɵelementStart(0, "div", 66)(1, "div", 71)(2, "div", 72)(3, "span", 73);
125
+ i0.ɵɵtext(4, "Type");
192
126
  i0.ɵɵelementEnd();
193
- i0.ɵɵelementStart(3, "button", 77);
194
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_30_Template_button_click_3_listener($event) { i0.ɵɵrestoreView(_r10); const prompt_r9 = i0.ɵɵnextContext(2).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); ctx_r0.openPrompt(prompt_r9.ID); return i0.ɵɵresetView($event.stopPropagation()); });
195
- i0.ɵɵelement(4, "i", 78);
196
- i0.ɵɵtext(5, " Open ");
127
+ i0.ɵɵelementStart(5, "span", 74);
128
+ i0.ɵɵtext(6);
129
+ i0.ɵɵelementEnd()();
130
+ i0.ɵɵelementStart(7, "div", 72)(8, "span", 73);
131
+ i0.ɵɵtext(9, "Template");
197
132
  i0.ɵɵelementEnd();
133
+ i0.ɵɵelementStart(10, "span", 74);
134
+ i0.ɵɵtemplate(11, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_11_Template, 2, 0)(12, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Conditional_12_Template, 2, 0);
135
+ i0.ɵɵelementEnd()()()();
198
136
  } if (rf & 2) {
199
- const prompt_r9 = i0.ɵɵnextContext(2).$implicit;
200
- i0.ɵɵproperty("disabled", prompt_r9.Status !== "Active");
137
+ const prompt_r7 = i0.ɵɵnextContext().$implicit;
138
+ i0.ɵɵadvance(6);
139
+ i0.ɵɵtextInterpolate(prompt_r7.TypeName);
140
+ i0.ɵɵadvance(5);
141
+ i0.ɵɵconditional(prompt_r7.TemplateEntity ? 11 : 12);
201
142
  } }
202
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
203
- i0.ɵɵelementStart(0, "div", 65)(1, "div", 66)(2, "div", 67)(3, "span", 68);
204
- i0.ɵɵtext(4, "Category");
143
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
144
+ const _r8 = i0.ɵɵgetCurrentView();
145
+ i0.ɵɵelementStart(0, "button", 77);
146
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_19_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r8); const prompt_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.openPrompt(prompt_r7.ID); return i0.ɵɵresetView($event.stopPropagation()); });
147
+ i0.ɵɵelement(1, "i", 78);
148
+ i0.ɵɵtext(2, " Open ");
205
149
  i0.ɵɵelementEnd();
206
- i0.ɵɵelementStart(5, "span", 69);
207
- i0.ɵɵtext(6);
208
- i0.ɵɵelementEnd()();
209
- i0.ɵɵelementStart(7, "div", 67)(8, "span", 68);
210
- i0.ɵɵtext(9, "Type");
150
+ } }
151
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
152
+ const _r9 = i0.ɵɵgetCurrentView();
153
+ i0.ɵɵelementStart(0, "button", 79);
154
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_20_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r9); const prompt_r7 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testPrompt(prompt_r7.ID, $event)); });
155
+ i0.ɵɵelement(1, "i", 80);
156
+ i0.ɵɵtext(2, " Run ");
157
+ i0.ɵɵelementEnd();
158
+ } }
159
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
160
+ const _r6 = i0.ɵɵgetCurrentView();
161
+ i0.ɵɵelementStart(0, "div", 53)(1, "div", 54);
162
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Template_div_click_1_listener() { const prompt_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.togglePromptExpansion(prompt_r7.ID)); });
163
+ i0.ɵɵelementStart(2, "div", 55)(3, "div", 56);
164
+ i0.ɵɵelement(4, "i");
165
+ i0.ɵɵelementEnd();
166
+ i0.ɵɵelementStart(5, "div", 57)(6, "h4", 58);
167
+ i0.ɵɵtext(7);
211
168
  i0.ɵɵelementEnd();
212
- i0.ɵɵelementStart(10, "span", 69);
169
+ i0.ɵɵelementStart(8, "div", 59)(9, "span", 60);
170
+ i0.ɵɵelement(10, "i", 30);
213
171
  i0.ɵɵtext(11);
214
- i0.ɵɵelementEnd()();
215
- i0.ɵɵelementStart(12, "div", 67)(13, "span", 68);
216
- i0.ɵɵtext(14, "Status");
217
172
  i0.ɵɵelementEnd();
218
- i0.ɵɵelementStart(15, "span", 70);
219
- i0.ɵɵtext(16);
173
+ i0.ɵɵtemplate(12, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_12_Template, 3, 3, "span", 61);
220
174
  i0.ɵɵelementEnd()()();
221
- i0.ɵɵelementStart(17, "div", 71)(18, "div", 67)(19, "span", 68);
222
- i0.ɵɵtext(20, "Template");
175
+ i0.ɵɵelement(13, "i", 62);
223
176
  i0.ɵɵelementEnd();
224
- i0.ɵɵelementStart(21, "span", 69);
225
- i0.ɵɵtemplate(22, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_22_Template, 2, 0)(23, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_23_Template, 2, 0);
226
- i0.ɵɵelementEnd()();
227
- i0.ɵɵelementStart(24, "div", 67)(25, "span", 68);
228
- i0.ɵɵtext(26, "Contents");
177
+ i0.ɵɵelementStart(14, "div", 63);
178
+ i0.ɵɵtemplate(15, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_15_Template, 2, 1, "p", 64)(16, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_16_Template, 2, 0, "p", 65)(17, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_17_Template, 13, 2, "div", 66);
229
179
  i0.ɵɵelementEnd();
230
- i0.ɵɵelementStart(27, "span", 69);
231
- i0.ɵɵtext(28);
232
- i0.ɵɵelementEnd()()();
233
- i0.ɵɵelementStart(29, "div", 72);
234
- i0.ɵɵtemplate(30, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Conditional_30_Template, 6, 1);
180
+ i0.ɵɵelementStart(18, "div", 67);
181
+ i0.ɵɵtemplate(19, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_19_Template, 3, 0, "button", 68)(20, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Conditional_20_Template, 3, 0, "button", 69);
235
182
  i0.ɵɵelementEnd()();
236
183
  } if (rf & 2) {
237
- const prompt_r9 = i0.ɵɵnextContext().$implicit;
238
- const ctx_r0 = i0.ɵɵnextContext(4);
239
- i0.ɵɵadvance(6);
240
- i0.ɵɵtextInterpolate(prompt_r9.CategoryName);
241
- i0.ɵɵadvance(5);
242
- i0.ɵɵtextInterpolate(prompt_r9.TypeName);
184
+ const prompt_r7 = ctx.$implicit;
185
+ const ctx_r1 = i0.ɵɵnextContext(4);
186
+ i0.ɵɵclassProp("expanded", ctx_r1.expandedPromptId === prompt_r7.ID);
187
+ i0.ɵɵadvance(4);
188
+ i0.ɵɵclassMap(ctx_r1.getPromptIcon(prompt_r7));
189
+ i0.ɵɵadvance(3);
190
+ i0.ɵɵtextInterpolate(prompt_r7.Name);
243
191
  i0.ɵɵadvance(4);
244
- i0.ɵɵclassMap(ctx_r0.getStatusClass(prompt_r9.Status));
192
+ i0.ɵɵtextInterpolate1(" ", prompt_r7.CategoryName, " ");
245
193
  i0.ɵɵadvance();
246
- i0.ɵɵtextInterpolate1(" ", prompt_r9.Status, " ");
247
- i0.ɵɵadvance(6);
248
- i0.ɵɵconditional(prompt_r9.TemplateEntity ? 22 : 23);
249
- i0.ɵɵadvance(6);
250
- i0.ɵɵtextInterpolate((prompt_r9.TemplateContents == null ? null : prompt_r9.TemplateContents.length) || 0);
194
+ i0.ɵɵconditional(prompt_r7.Status ? 12 : -1);
195
+ i0.ɵɵadvance();
196
+ i0.ɵɵclassProp("rotated", ctx_r1.expandedPromptId === prompt_r7.ID);
197
+ i0.ɵɵadvance(2);
198
+ i0.ɵɵconditional(prompt_r7.Description ? 15 : 16);
251
199
  i0.ɵɵadvance(2);
252
- i0.ɵɵconditional(ctx_r0.UserCanReadPrompts ? 30 : -1);
200
+ i0.ɵɵconditional(ctx_r1.expandedPromptId === prompt_r7.ID ? 17 : -1);
201
+ i0.ɵɵadvance(2);
202
+ i0.ɵɵconditional(ctx_r1.UserCanReadPrompts ? 19 : -1);
203
+ i0.ɵɵadvance();
204
+ i0.ɵɵconditional(prompt_r7.Status === "Active" && ctx_r1.UserCanReadPrompts ? 20 : -1);
253
205
  } }
254
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template(rf, ctx) { if (rf & 1) {
255
- const _r8 = i0.ɵɵgetCurrentView();
256
- i0.ɵɵelementStart(0, "div", 58)(1, "div", 59);
257
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template_div_click_1_listener() { const prompt_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.togglePromptExpansion(prompt_r9.ID)); });
258
- i0.ɵɵelementStart(2, "div", 60);
259
- i0.ɵɵelement(3, "i");
260
- i0.ɵɵelementEnd();
261
- i0.ɵɵelementStart(4, "div", 61)(5, "h4", 62);
262
- i0.ɵɵtext(6);
263
- i0.ɵɵelementEnd();
264
- i0.ɵɵtemplate(7, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_7_Template, 2, 1, "p", 63);
265
- i0.ɵɵelementEnd();
266
- i0.ɵɵelement(8, "i", 64);
267
- i0.ɵɵelementEnd();
268
- i0.ɵɵtemplate(9, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Template, 31, 8, "div", 65);
206
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
207
+ i0.ɵɵelementStart(0, "div", 50);
208
+ i0.ɵɵrepeaterCreate(1, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_For_2_Template, 21, 13, "div", 52, _forTrack0);
269
209
  i0.ɵɵelementEnd();
270
210
  } if (rf & 2) {
271
- const prompt_r9 = ctx.$implicit;
272
- const ctx_r0 = i0.ɵɵnextContext(4);
273
- i0.ɵɵclassProp("expanded", ctx_r0.expandedPromptId === prompt_r9.ID);
274
- i0.ɵɵadvance(3);
275
- i0.ɵɵclassMap(ctx_r0.getPromptIcon(prompt_r9));
276
- i0.ɵɵadvance(3);
277
- i0.ɵɵtextInterpolate(prompt_r9.Name || "Unnamed Prompt");
278
- i0.ɵɵadvance();
279
- i0.ɵɵconditional(prompt_r9.Description ? 7 : -1);
211
+ const ctx_r1 = i0.ɵɵnextContext(3);
280
212
  i0.ɵɵadvance();
281
- i0.ɵɵclassProp("rotated", ctx_r0.expandedPromptId === prompt_r9.ID);
282
- i0.ɵɵadvance();
283
- i0.ɵɵconditional(ctx_r0.expandedPromptId === prompt_r9.ID ? 9 : -1);
213
+ i0.ɵɵrepeater(ctx_r1.filteredPrompts);
284
214
  } }
285
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_Template(rf, ctx) { if (rf & 1) {
286
- i0.ɵɵelementStart(0, "div", 54);
287
- i0.ɵɵrepeaterCreate(1, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Template, 10, 9, "div", 57, _forTrack0);
215
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_8_Template(rf, ctx) { if (rf & 1) {
216
+ i0.ɵɵelementStart(0, "div", 84);
217
+ i0.ɵɵtext(1);
288
218
  i0.ɵɵelementEnd();
289
219
  } if (rf & 2) {
290
- const ctx_r0 = i0.ɵɵnextContext(3);
220
+ const prompt_r10 = i0.ɵɵnextContext().$implicit;
291
221
  i0.ɵɵadvance();
292
- i0.ɵɵrepeater(ctx_r0.filteredPrompts);
222
+ i0.ɵɵtextInterpolate(prompt_r10.Description);
293
223
  } }
294
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
295
- i0.ɵɵelement(0, "i", 73);
224
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_17_Template(rf, ctx) { if (rf & 1) {
225
+ i0.ɵɵelement(0, "i", 86);
296
226
  } }
297
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
298
- i0.ɵɵelement(0, "i", 74);
227
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_18_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelement(0, "i", 87);
299
229
  } }
300
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_16_Template(rf, ctx) { if (rf & 1) {
230
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_21_Template(rf, ctx) { if (rf & 1) {
301
231
  const _r11 = i0.ɵɵgetCurrentView();
302
- i0.ɵɵelementStart(0, "button", 82);
303
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_16_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r11); const prompt_r12 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.testPrompt(prompt_r12.ID, $event)); });
304
- i0.ɵɵelement(1, "i", 76);
232
+ i0.ɵɵelementStart(0, "button", 91);
233
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const prompt_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.openPrompt(prompt_r10.ID)); });
234
+ i0.ɵɵelement(1, "i", 78);
305
235
  i0.ɵɵelementEnd();
306
- i0.ɵɵelementStart(2, "button", 83);
307
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_16_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r11); const prompt_r12 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.openPrompt(prompt_r12.ID)); });
308
- i0.ɵɵelement(3, "i", 78);
236
+ } }
237
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_22_Template(rf, ctx) { if (rf & 1) {
238
+ const _r12 = i0.ɵɵgetCurrentView();
239
+ i0.ɵɵelementStart(0, "button", 92);
240
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_22_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r12); const prompt_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.testPrompt(prompt_r10.ID, $event)); });
241
+ i0.ɵɵelement(1, "i", 80);
309
242
  i0.ɵɵelementEnd();
310
- } if (rf & 2) {
311
- const prompt_r12 = i0.ɵɵnextContext().$implicit;
312
- i0.ɵɵproperty("disabled", prompt_r12.Status !== "Active");
313
243
  } }
314
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Template(rf, ctx) { if (rf & 1) {
315
- i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 80);
316
- i0.ɵɵelement(3, "i");
317
- i0.ɵɵtext(4);
318
- i0.ɵɵelementEnd()();
319
- i0.ɵɵelementStart(5, "td");
320
- i0.ɵɵtext(6);
244
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Template(rf, ctx) { if (rf & 1) {
245
+ i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 82)(3, "div", 83);
246
+ i0.ɵɵelement(4, "i");
321
247
  i0.ɵɵelementEnd();
322
- i0.ɵɵelementStart(7, "td");
323
- i0.ɵɵtext(8);
248
+ i0.ɵɵelementStart(5, "div")(6, "div", 58);
249
+ i0.ɵɵtext(7);
324
250
  i0.ɵɵelementEnd();
325
- i0.ɵɵelementStart(9, "td")(10, "span", 81);
326
- i0.ɵɵtext(11);
327
- i0.ɵɵelementEnd()();
328
- i0.ɵɵelementStart(12, "td");
329
- i0.ɵɵtemplate(13, PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_13_Template, 1, 0, "i", 73)(14, PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_14_Template, 1, 0, "i", 74);
251
+ i0.ɵɵtemplate(8, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_8_Template, 2, 1, "div", 84);
252
+ i0.ɵɵelementEnd()()();
253
+ i0.ɵɵelementStart(9, "td");
254
+ i0.ɵɵtext(10);
255
+ i0.ɵɵelementEnd();
256
+ i0.ɵɵelementStart(11, "td");
257
+ i0.ɵɵtext(12);
330
258
  i0.ɵɵelementEnd();
331
- i0.ɵɵelementStart(15, "td");
332
- i0.ɵɵtemplate(16, PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_16_Template, 4, 1);
259
+ i0.ɵɵelementStart(13, "td")(14, "span", 85);
260
+ i0.ɵɵtext(15);
333
261
  i0.ɵɵelementEnd()();
262
+ i0.ɵɵelementStart(16, "td");
263
+ i0.ɵɵtemplate(17, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_17_Template, 1, 0, "i", 86)(18, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_18_Template, 1, 0, "i", 87);
264
+ i0.ɵɵelementEnd();
265
+ i0.ɵɵelementStart(19, "td")(20, "div", 88);
266
+ i0.ɵɵtemplate(21, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_21_Template, 2, 0, "button", 89)(22, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Conditional_22_Template, 2, 0, "button", 90);
267
+ i0.ɵɵelementEnd()()();
334
268
  } if (rf & 2) {
335
- const prompt_r12 = ctx.$implicit;
336
- const ctx_r0 = i0.ɵɵnextContext(4);
269
+ const prompt_r10 = ctx.$implicit;
270
+ const ctx_r1 = i0.ɵɵnextContext(4);
271
+ i0.ɵɵadvance(4);
272
+ i0.ɵɵclassMap(ctx_r1.getPromptIcon(prompt_r10));
337
273
  i0.ɵɵadvance(3);
338
- i0.ɵɵclassMap(ctx_r0.getPromptIcon(prompt_r12));
274
+ i0.ɵɵtextInterpolate(prompt_r10.Name);
339
275
  i0.ɵɵadvance();
340
- i0.ɵɵtextInterpolate1(" ", prompt_r12.Name, " ");
276
+ i0.ɵɵconditional(prompt_r10.Description ? 8 : -1);
341
277
  i0.ɵɵadvance(2);
342
- i0.ɵɵtextInterpolate(prompt_r12.CategoryName);
278
+ i0.ɵɵtextInterpolate(prompt_r10.CategoryName);
343
279
  i0.ɵɵadvance(2);
344
- i0.ɵɵtextInterpolate(prompt_r12.TypeName);
280
+ i0.ɵɵtextInterpolate(prompt_r10.TypeName);
345
281
  i0.ɵɵadvance(2);
346
- i0.ɵɵclassMap(ctx_r0.getStatusClass(prompt_r12.Status));
282
+ i0.ɵɵclassMap("status-" + (prompt_r10.Status || "unknown").toLowerCase());
347
283
  i0.ɵɵadvance();
348
- i0.ɵɵtextInterpolate1(" ", prompt_r12.Status, " ");
284
+ i0.ɵɵtextInterpolate1(" ", prompt_r10.Status || "Unknown", " ");
349
285
  i0.ɵɵadvance(2);
350
- i0.ɵɵconditional(prompt_r12.TemplateEntity ? 13 : 14);
351
- i0.ɵɵadvance(3);
352
- i0.ɵɵconditional(ctx_r0.UserCanReadPrompts ? 16 : -1);
286
+ i0.ɵɵconditional(prompt_r10.TemplateEntity ? 17 : 18);
287
+ i0.ɵɵadvance(4);
288
+ i0.ɵɵconditional(ctx_r1.UserCanReadPrompts ? 21 : -1);
289
+ i0.ɵɵadvance();
290
+ i0.ɵɵconditional(prompt_r10.Status === "Active" && ctx_r1.UserCanReadPrompts ? 22 : -1);
353
291
  } }
354
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_Template(rf, ctx) { if (rf & 1) {
355
- i0.ɵɵelementStart(0, "div", 55)(1, "table", 79)(2, "thead")(3, "tr")(4, "th");
292
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
293
+ i0.ɵɵelementStart(0, "div", 51)(1, "table", 81)(2, "thead")(3, "tr")(4, "th");
356
294
  i0.ɵɵtext(5, "Name");
357
295
  i0.ɵɵelementEnd();
358
296
  i0.ɵɵelementStart(6, "th");
@@ -371,97 +309,41 @@ function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_Templat
371
309
  i0.ɵɵtext(15, "Actions");
372
310
  i0.ɵɵelementEnd()()();
373
311
  i0.ɵɵelementStart(16, "tbody");
374
- i0.ɵɵrepeaterCreate(17, PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Template, 17, 10, "tr", null, _forTrack0);
312
+ i0.ɵɵrepeaterCreate(17, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_For_18_Template, 23, 12, "tr", null, _forTrack0);
375
313
  i0.ɵɵelementEnd()()();
376
314
  } if (rf & 2) {
377
- const ctx_r0 = i0.ɵɵnextContext(3);
315
+ const ctx_r1 = i0.ɵɵnextContext(3);
378
316
  i0.ɵɵadvance(17);
379
- i0.ɵɵrepeater(ctx_r0.filteredPrompts);
317
+ i0.ɵɵrepeater(ctx_r1.filteredPrompts);
380
318
  } }
381
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
382
- const _r13 = i0.ɵɵgetCurrentView();
383
- i0.ɵɵelementStart(0, "app-model-prompt-priority-matrix", 85);
384
- i0.ɵɵlistener("promptSelected", function PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Conditional_1_Template_app_model_prompt_priority_matrix_promptSelected_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.openPrompt($event.ID)); });
385
- i0.ɵɵelementEnd();
319
+ function PromptManagementV2Component_Conditional_75_Conditional_1_Template(rf, ctx) { if (rf & 1) {
320
+ i0.ɵɵtemplate(0, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_0_Template, 3, 0, "div", 50)(1, PromptManagementV2Component_Conditional_75_Conditional_1_Conditional_1_Template, 19, 0, "div", 51);
386
321
  } if (rf & 2) {
387
- const ctx_r0 = i0.ɵɵnextContext(4);
388
- i0.ɵɵproperty("selectedPrompts", ctx_r0.filteredPromptsAsEntities);
389
- } }
390
- function PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Template(rf, ctx) { if (rf & 1) {
391
- i0.ɵɵelementStart(0, "div", 56);
392
- i0.ɵɵtemplate(1, PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Conditional_1_Template, 1, 1, "app-model-prompt-priority-matrix", 84);
393
- i0.ɵɵelementEnd();
394
- } if (rf & 2) {
395
- const ctx_r0 = i0.ɵɵnextContext(3);
322
+ const ctx_r1 = i0.ɵɵnextContext(2);
323
+ i0.ɵɵconditional(ctx_r1.viewMode === "grid" ? 0 : -1);
396
324
  i0.ɵɵadvance();
397
- i0.ɵɵconditional(ctx_r0.UserCanReadPrompts ? 1 : -1);
325
+ i0.ɵɵconditional(ctx_r1.viewMode === "list" ? 1 : -1);
398
326
  } }
399
- function PromptManagementV2Component_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
400
- i0.ɵɵtemplate(0, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_Template, 3, 0, "div", 54)(1, PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_Template, 19, 0, "div", 55)(2, PromptManagementV2Component_Conditional_2_Conditional_25_Case_2_Template, 2, 1, "div", 56);
327
+ function PromptManagementV2Component_Conditional_75_Template(rf, ctx) { if (rf & 1) {
328
+ i0.ɵɵtemplate(0, PromptManagementV2Component_Conditional_75_Conditional_0_Template, 7, 2, "div", 47)(1, PromptManagementV2Component_Conditional_75_Conditional_1_Template, 2, 2);
401
329
  } if (rf & 2) {
402
- let tmp_2_0;
403
- const ctx_r0 = i0.ɵɵnextContext(2);
404
- i0.ɵɵconditional((tmp_2_0 = ctx_r0.viewMode) === "grid" ? 0 : tmp_2_0 === "list" ? 1 : tmp_2_0 === "priority-matrix" ? 2 : -1);
330
+ const ctx_r1 = i0.ɵɵnextContext();
331
+ i0.ɵɵconditional(ctx_r1.filteredPrompts.length === 0 ? 0 : 1);
405
332
  } }
406
- function PromptManagementV2Component_Conditional_2_Template(rf, ctx) { if (rf & 1) {
407
- const _r2 = i0.ɵɵgetCurrentView();
408
- i0.ɵɵelementStart(0, "div", 6)(1, "div", 7)(2, "h2", 8);
409
- i0.ɵɵelement(3, "i", 9);
410
- i0.ɵɵtext(4, " AI Prompts ");
411
- i0.ɵɵelementEnd();
412
- i0.ɵɵelementStart(5, "button", 10);
413
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.toggleFilters()); });
414
- i0.ɵɵelement(6, "i", 11);
415
- i0.ɵɵtemplate(7, PromptManagementV2Component_Conditional_2_Conditional_7_Template, 1, 0)(8, PromptManagementV2Component_Conditional_2_Conditional_8_Template, 1, 0);
416
- i0.ɵɵelementEnd();
417
- i0.ɵɵelementStart(9, "span", 12);
418
- i0.ɵɵtext(10);
419
- i0.ɵɵelementEnd()();
420
- i0.ɵɵelementStart(11, "div", 13)(12, "div", 14)(13, "button", 15);
421
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("grid")); });
422
- i0.ɵɵelement(14, "i", 16);
423
- i0.ɵɵelementEnd();
424
- i0.ɵɵelementStart(15, "button", 17);
425
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("list")); });
426
- i0.ɵɵelement(16, "i", 18);
427
- i0.ɵɵelementEnd();
428
- i0.ɵɵelementStart(17, "button", 19);
429
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.setViewMode("priority-matrix")); });
430
- i0.ɵɵelement(18, "i", 20);
431
- i0.ɵɵelementEnd()();
432
- i0.ɵɵtemplate(19, PromptManagementV2Component_Conditional_2_Conditional_19_Template, 3, 0, "button", 21);
433
- i0.ɵɵelementEnd()();
434
- i0.ɵɵelementStart(20, "kendo-splitter", 22);
435
- i0.ɵɵtemplate(21, PromptManagementV2Component_Conditional_2_Conditional_21_Template, 51, 6, "kendo-splitter-pane", 23);
436
- i0.ɵɵelementStart(22, "kendo-splitter-pane")(23, "div", 24);
437
- i0.ɵɵtemplate(24, PromptManagementV2Component_Conditional_2_Conditional_24_Template, 7, 2, "div", 25)(25, PromptManagementV2Component_Conditional_2_Conditional_25_Template, 3, 1);
438
- i0.ɵɵelementEnd()()();
439
- } if (rf & 2) {
440
- const ctx_r0 = i0.ɵɵnextContext();
441
- i0.ɵɵadvance(7);
442
- i0.ɵɵconditional(ctx_r0.showFilters ? 7 : 8);
443
- i0.ɵɵadvance(3);
444
- i0.ɵɵtextInterpolate1("", ctx_r0.filteredPrompts.length, " prompts");
445
- i0.ɵɵadvance(3);
446
- i0.ɵɵclassProp("active", ctx_r0.viewMode === "grid");
447
- i0.ɵɵadvance(2);
448
- i0.ɵɵclassProp("active", ctx_r0.viewMode === "list");
449
- i0.ɵɵadvance(2);
450
- i0.ɵɵclassProp("active", ctx_r0.viewMode === "priority-matrix");
451
- i0.ɵɵadvance(2);
452
- i0.ɵɵconditional(ctx_r0.UserCanCreatePrompts ? 19 : -1);
453
- i0.ɵɵadvance(2);
454
- i0.ɵɵconditional(ctx_r0.showFilters ? 21 : -1);
455
- i0.ɵɵadvance(3);
456
- i0.ɵɵconditional(ctx_r0.filteredPrompts.length === 0 ? 24 : 25);
457
- } }
458
- export class PromptManagementV2Component {
333
+ /**
334
+ * Tree-shaking prevention function - ensures component is included in builds
335
+ */
336
+ export function LoadAIPromptsResource() {
337
+ // Force inclusion in production builds
338
+ }
339
+ /**
340
+ * AI Prompts Resource - displays AI prompt management
341
+ * Extends BaseResourceComponent to work with the resource type system
342
+ */
343
+ let PromptManagementV2Component = class PromptManagementV2Component extends BaseResourceComponent {
459
344
  sharedService;
460
345
  testHarnessService;
461
- router;
462
- openEntityRecord = new EventEmitter();
463
- stateChange = new EventEmitter();
464
- initialState = null;
346
+ navigationService;
465
347
  // View state
466
348
  viewMode = 'grid';
467
349
  isLoading = true;
@@ -559,17 +441,18 @@ export class PromptManagementV2Component {
559
441
  clearPermissionCache() {
560
442
  this._permissionCache.clear();
561
443
  }
562
- constructor(sharedService, testHarnessService, router) {
444
+ constructor(sharedService, testHarnessService, navigationService) {
445
+ super();
563
446
  this.sharedService = sharedService;
564
447
  this.testHarnessService = testHarnessService;
565
- this.router = router;
448
+ this.navigationService = navigationService;
566
449
  }
567
450
  ngOnInit() {
568
451
  this.setupSearchListener();
569
452
  this.startLoadingMessages();
570
453
  this.loadInitialData();
571
- if (this.initialState) {
572
- this.applyInitialState(this.initialState);
454
+ if (this.Data?.Configuration) {
455
+ this.applyInitialState(this.Data.Configuration);
573
456
  }
574
457
  }
575
458
  ngOnDestroy() {
@@ -644,7 +527,6 @@ export class PromptManagementV2Component {
644
527
  });
645
528
  this.filteredPrompts = [...this.prompts];
646
529
  this.applyFilters();
647
- this.emitStateChange();
648
530
  }
649
531
  catch (error) {
650
532
  console.error('Error loading prompt data:', error);
@@ -655,6 +537,7 @@ export class PromptManagementV2Component {
655
537
  if (this.loadingMessageInterval) {
656
538
  clearInterval(this.loadingMessageInterval);
657
539
  }
540
+ this.NotifyLoadComplete();
658
541
  }
659
542
  }
660
543
  applyInitialState(state) {
@@ -676,16 +559,13 @@ export class PromptManagementV2Component {
676
559
  }
677
560
  toggleFilters() {
678
561
  this.showFilters = !this.showFilters;
679
- this.emitStateChange();
680
562
  }
681
563
  toggleFilterPanel() {
682
564
  this.showFilters = !this.showFilters;
683
- this.emitStateChange();
684
565
  }
685
566
  setViewMode(mode) {
686
567
  this.viewMode = mode;
687
568
  this.expandedPromptId = null;
688
- this.emitStateChange();
689
569
  }
690
570
  togglePromptExpansion(promptId) {
691
571
  this.expandedPromptId = this.expandedPromptId === promptId ? null : promptId;
@@ -720,7 +600,6 @@ export class PromptManagementV2Component {
720
600
  }
721
601
  return true;
722
602
  });
723
- this.emitStateChange();
724
603
  }
725
604
  onCategoryChange(categoryId) {
726
605
  this.selectedCategory = categoryId;
@@ -735,10 +614,8 @@ export class PromptManagementV2Component {
735
614
  this.applyFilters();
736
615
  }
737
616
  openPrompt(promptId) {
738
- this.openEntityRecord.emit({
739
- entityName: 'AI Prompts',
740
- recordId: promptId
741
- });
617
+ const compositeKey = new CompositeKey([{ FieldName: 'ID', Value: promptId }]);
618
+ this.navigationService.OpenEntityRecord('AI Prompts', compositeKey);
742
619
  }
743
620
  testPrompt(promptId, event) {
744
621
  if (event) {
@@ -752,21 +629,9 @@ export class PromptManagementV2Component {
752
629
  this.selectedPromptForTest = null;
753
630
  }
754
631
  createNewPrompt() {
755
- try {
756
- // Navigate to new record form using the MemberJunction pattern
757
- // Empty third parameter means new record
758
- this.router.navigate(['resource', 'record', ''], // Empty record ID = new record
759
- {
760
- queryParams: {
761
- Entity: 'AI Prompts'
762
- // Could add NewRecordValues here for pre-populated defaults if needed
763
- }
764
- });
765
- }
766
- catch (error) {
767
- console.error('Error navigating to new prompt form:', error);
768
- MJNotificationService.Instance.CreateSimpleNotification('Error opening new prompt form', 'error', 3000);
769
- }
632
+ // Use the standard MemberJunction pattern to open a new AI Prompt form
633
+ // Empty CompositeKey indicates a new record
634
+ this.navigationService.OpenEntityRecord('AI Prompts', new CompositeKey([]));
770
635
  }
771
636
  getPromptIcon(prompt) {
772
637
  if (prompt.TypeName?.toLowerCase().includes('system')) {
@@ -783,17 +648,6 @@ export class PromptManagementV2Component {
783
648
  getStatusClass(status) {
784
649
  return status === 'Active' ? 'active' : 'inactive';
785
650
  }
786
- emitStateChange() {
787
- this.stateChange.emit({
788
- viewMode: this.viewMode,
789
- showFilters: this.showFilters,
790
- searchTerm: this.searchTerm,
791
- selectedCategory: this.selectedCategory,
792
- selectedType: this.selectedType,
793
- selectedStatus: this.selectedStatus,
794
- promptCount: this.filteredPrompts.length
795
- });
796
- }
797
651
  get hasActiveFilters() {
798
652
  return this.searchTerm !== '' ||
799
653
  this.selectedCategory !== 'all' ||
@@ -812,25 +666,146 @@ export class PromptManagementV2Component {
812
666
  this.searchSubject.next('');
813
667
  this.applyFilters();
814
668
  }
815
- static ɵfac = function PromptManagementV2Component_Factory(t) { return new (t || PromptManagementV2Component)(i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.AITestHarnessDialogService), i0.ɵɵdirectiveInject(i3.Router)); };
816
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptManagementV2Component, selectors: [["app-prompt-management-v2"]], inputs: { initialState: "initialState" }, outputs: { openEntityRecord: "openEntityRecord", stateChange: "stateChange" }, decls: 3, vars: 1, consts: [[1, "prompt-management-v2"], [1, "loading-container"], [1, "loading-content"], [1, "loading-spinner"], [1, "spinner-ring"], [1, "loading-text"], [1, "dashboard-header", 2, "display", "flex !important", "justify-content", "space-between !important", "align-items", "center !important", "padding", "16px 24px !important", "background", "white !important"], [1, "header-info", 2, "display", "flex !important", "align-items", "center !important", "gap", "16px !important", "flex", "1 !important"], [1, "dashboard-title", 2, "margin", "0 !important", "display", "flex !important", "align-items", "center !important", "gap", "8px !important"], [1, "fa-solid", "fa-message"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "item-count"], [1, "header-controls", 2, "display", "flex !important", "align-items", "center !important", "gap", "16px !important"], [1, "view-toggle"], ["type", "button", "title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grip"], ["type", "button", "title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["type", "button", "title", "Priority Matrix", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-chart-scatter"], ["type", "button", "title", "Create New Prompt", 1, "control-btn", "primary"], ["orientation", "horizontal"], ["size", "320", "min", "250", "max", "400"], [1, "content-area"], [1, "empty-state"], ["type", "button", "title", "Create New Prompt", 1, "control-btn", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "filter-panel"], [1, "filter-panel-header"], [1, "filter-summary-inline"], [1, "summary-value"], [1, "summary-label"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "filter-content"], [1, "filter-group"], [1, "filter-label"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search prompts...", 1, "filter-input", 3, "input", "value"], [1, "fa-solid", "fa-folder"], [1, "filter-select", 3, "change", "value"], ["value", "all"], [3, "value"], [1, "fa-solid", "fa-tag"], [1, "fa-solid", "fa-toggle-on"], ["value", "active"], ["value", "inactive"], [1, "filter-actions"], ["title", "Reset all filters", 1, "reset-btn", 3, "click"], [1, "fa-solid", "fa-undo"], [1, "fa-solid", "fa-comment-dots", "fa-4x"], [1, "primary-action"], [1, "primary-action", 3, "click"], [1, "prompt-grid"], [1, "prompt-list"], [1, "priority-matrix-container"], [1, "prompt-card", 3, "expanded"], [1, "prompt-card"], [1, "card-header", 3, "click"], [1, "card-icon"], [1, "card-info"], [1, "prompt-name"], [1, "card-description"], [1, "fa-solid", "fa-chevron-down", "expand-icon"], [1, "card-content"], [1, "stats-grid"], [1, "stat"], [1, "stat-label"], [1, "stat-value"], [1, "stat-value", "status-badge"], [1, "stats-grid", 2, "margin-top", "12px"], [1, "card-footer"], [1, "fa-solid", "fa-check-circle", "text-success"], [1, "fa-solid", "fa-times-circle", "text-muted"], ["title", "Run Prompt", 1, "action-button", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], ["title", "Edit Prompt", 1, "action-button", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], [1, "data-table"], [1, "name-cell"], [1, "status-badge"], ["title", "Run Prompt", 1, "action-button", "small", "primary", 3, "click", "disabled"], ["title", "Edit Prompt", 1, "action-button", "small", 3, "click"], [3, "selectedPrompts"], [3, "promptSelected", "selectedPrompts"]], template: function PromptManagementV2Component_Template(rf, ctx) { if (rf & 1) {
817
- i0.ɵɵelementStart(0, "div", 0);
818
- i0.ɵɵtemplate(1, PromptManagementV2Component_Conditional_1_Template, 8, 1, "div", 1)(2, PromptManagementV2Component_Conditional_2_Template, 26, 11);
669
+ // BaseResourceComponent abstract method implementations
670
+ async GetResourceDisplayName(data) {
671
+ return 'Prompts';
672
+ }
673
+ async GetResourceIconClass(data) {
674
+ return 'fa-solid fa-comment-dots';
675
+ }
676
+ static ɵfac = function PromptManagementV2Component_Factory(t) { return new (t || PromptManagementV2Component)(i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.AITestHarnessDialogService), i0.ɵɵdirectiveInject(i1.NavigationService)); };
677
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptManagementV2Component, selectors: [["app-prompt-management-v2"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 76, vars: 22, consts: [[1, "prompt-management-container"], [1, "dashboard-header"], [1, "header-info"], [1, "dashboard-title"], [1, "fa-solid", "fa-message"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "item-count"], [1, "header-controls"], [1, "view-toggle"], ["type", "button", "title", "Grid View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-grip"], ["type", "button", "title", "List View", 1, "view-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["type", "button", "title", "Create New Prompt", 1, "control-btn", "primary"], [1, "main-content"], ["orientation", "horizontal", 1, "main-splitter"], [3, "size", "collapsible", "resizable", "scrollable", "hidden"], [1, "filter-panel"], [1, "filter-panel-header"], [1, "filter-summary-inline"], [1, "summary-value"], [1, "summary-label"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-times"], [1, "filter-content"], [1, "filter-group"], [1, "filter-label"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search prompts...", 1, "filter-input", 3, "input", "value"], [1, "fa-solid", "fa-folder"], [1, "filter-select", 3, "change", "value"], ["value", "all"], [3, "value"], [1, "fa-solid", "fa-tag"], [1, "fa-solid", "fa-toggle-on"], ["value", "active"], ["value", "inactive"], [1, "filter-actions"], ["title", "Reset all filters", 1, "reset-btn", 3, "click"], [1, "fa-solid", "fa-undo"], [3, "resizable", "scrollable"], [1, "prompts-content"], [1, "loading-container"], ["type", "button", "title", "Create New Prompt", 1, "control-btn", "primary", 3, "click"], [1, "fa-solid", "fa-plus"], ["size", "large", 3, "text"], [1, "empty-state"], ["type", "button", 1, "empty-state-btn"], ["type", "button", 1, "empty-state-btn", 3, "click"], [1, "prompts-grid"], [1, "prompts-list"], [1, "prompt-card", 3, "expanded"], [1, "prompt-card"], [1, "card-header", 3, "click"], [1, "prompt-info"], [1, "prompt-icon"], [1, "prompt-details"], [1, "prompt-name"], [1, "prompt-meta"], [1, "meta-item"], [1, "meta-item", 3, "class"], [1, "fa-solid", "fa-chevron-down", "expand-icon"], [1, "card-body"], [1, "prompt-description"], [1, "prompt-description", "text-muted"], [1, "expanded-content"], [1, "card-actions"], ["type", "button", "title", "Open Prompt", 1, "action-btn"], ["type", "button", "title", "Run Prompt", 1, "action-btn", "action-btn-primary"], [1, "fa-solid", "fa-circle", 2, "font-size", "8px"], [1, "prompt-stats"], [1, "stat-item"], [1, "stat-label"], [1, "stat-value"], [1, "fa-solid", "fa-check", 2, "color", "#28a745"], [1, "fa-solid", "fa-times", 2, "color", "#dc3545"], ["type", "button", "title", "Open Prompt", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-external-link-alt"], ["type", "button", "title", "Run Prompt", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-play"], [1, "prompts-table"], [1, "prompt-name-cell"], [1, "prompt-icon-small"], [1, "prompt-description-small"], [1, "status-badge"], [1, "fa-solid", "fa-check-circle", 2, "color", "#28a745"], [1, "fa-solid", "fa-times-circle", 2, "color", "#6c757d"], [1, "table-actions"], ["type", "button", "title", "Open Prompt", 1, "action-btn-small"], ["type", "button", "title", "Run Prompt", 1, "action-btn-small", "primary"], ["type", "button", "title", "Open Prompt", 1, "action-btn-small", 3, "click"], ["type", "button", "title", "Run Prompt", 1, "action-btn-small", "primary", 3, "click"]], template: function PromptManagementV2Component_Template(rf, ctx) { if (rf & 1) {
678
+ i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2)(3, "h2", 3);
679
+ i0.ɵɵelement(4, "i", 4);
680
+ i0.ɵɵtext(5, " AI Prompts ");
681
+ i0.ɵɵelementEnd();
682
+ i0.ɵɵelementStart(6, "button", 5);
683
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_6_listener() { return ctx.toggleFilters(); });
684
+ i0.ɵɵelement(7, "i", 6);
685
+ i0.ɵɵtemplate(8, PromptManagementV2Component_Conditional_8_Template, 1, 0)(9, PromptManagementV2Component_Conditional_9_Template, 1, 0);
686
+ i0.ɵɵelementEnd();
687
+ i0.ɵɵelementStart(10, "span", 7);
688
+ i0.ɵɵtext(11);
689
+ i0.ɵɵelementEnd()();
690
+ i0.ɵɵelementStart(12, "div", 8)(13, "div", 9)(14, "button", 10);
691
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_14_listener() { return ctx.setViewMode("grid"); });
692
+ i0.ɵɵelement(15, "i", 11);
693
+ i0.ɵɵelementEnd();
694
+ i0.ɵɵelementStart(16, "button", 12);
695
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_16_listener() { return ctx.setViewMode("list"); });
696
+ i0.ɵɵelement(17, "i", 13);
697
+ i0.ɵɵelementEnd()();
698
+ i0.ɵɵtemplate(18, PromptManagementV2Component_Conditional_18_Template, 3, 0, "button", 14);
699
+ i0.ɵɵelementEnd()();
700
+ i0.ɵɵelementStart(19, "div", 15)(20, "kendo-splitter", 16)(21, "kendo-splitter-pane", 17)(22, "div", 18)(23, "div", 19)(24, "h3");
701
+ i0.ɵɵtext(25, "Prompt Filters");
702
+ i0.ɵɵelementEnd();
703
+ i0.ɵɵelementStart(26, "div", 20)(27, "span", 21);
704
+ i0.ɵɵtext(28);
705
+ i0.ɵɵelementEnd();
706
+ i0.ɵɵelementStart(29, "span", 22);
707
+ i0.ɵɵtext(30);
708
+ i0.ɵɵelementEnd()();
709
+ i0.ɵɵelementStart(31, "button", 23);
710
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_31_listener() { return ctx.toggleFilterPanel(); });
711
+ i0.ɵɵelement(32, "i", 24);
712
+ i0.ɵɵelementEnd()();
713
+ i0.ɵɵelementStart(33, "div", 25)(34, "div", 26)(35, "label", 27);
714
+ i0.ɵɵelement(36, "i", 28);
715
+ i0.ɵɵtext(37, " Name ");
819
716
  i0.ɵɵelementEnd();
717
+ i0.ɵɵelementStart(38, "input", 29);
718
+ i0.ɵɵlistener("input", function PromptManagementV2Component_Template_input_input_38_listener($event) { return ctx.onSearchChange($event.target.value); });
719
+ i0.ɵɵelementEnd()();
720
+ i0.ɵɵelementStart(39, "div", 26)(40, "label", 27);
721
+ i0.ɵɵelement(41, "i", 30);
722
+ i0.ɵɵtext(42, " Category ");
723
+ i0.ɵɵelementEnd();
724
+ i0.ɵɵelementStart(43, "select", 31);
725
+ i0.ɵɵlistener("change", function PromptManagementV2Component_Template_select_change_43_listener($event) { return ctx.onCategoryChange($event.target.value); });
726
+ i0.ɵɵelementStart(44, "option", 32);
727
+ i0.ɵɵtext(45, "All Categories");
728
+ i0.ɵɵelementEnd();
729
+ i0.ɵɵrepeaterCreate(46, PromptManagementV2Component_For_47_Template, 2, 2, "option", 33, _forTrack0);
730
+ i0.ɵɵelementEnd()();
731
+ i0.ɵɵelementStart(48, "div", 26)(49, "label", 27);
732
+ i0.ɵɵelement(50, "i", 34);
733
+ i0.ɵɵtext(51, " Type ");
734
+ i0.ɵɵelementEnd();
735
+ i0.ɵɵelementStart(52, "select", 31);
736
+ i0.ɵɵlistener("change", function PromptManagementV2Component_Template_select_change_52_listener($event) { return ctx.onTypeChange($event.target.value); });
737
+ i0.ɵɵelementStart(53, "option", 32);
738
+ i0.ɵɵtext(54, "All Types");
739
+ i0.ɵɵelementEnd();
740
+ i0.ɵɵrepeaterCreate(55, PromptManagementV2Component_For_56_Template, 2, 2, "option", 33, _forTrack0);
741
+ i0.ɵɵelementEnd()();
742
+ i0.ɵɵelementStart(57, "div", 26)(58, "label", 27);
743
+ i0.ɵɵelement(59, "i", 35);
744
+ i0.ɵɵtext(60, " Status ");
745
+ i0.ɵɵelementEnd();
746
+ i0.ɵɵelementStart(61, "select", 31);
747
+ i0.ɵɵlistener("change", function PromptManagementV2Component_Template_select_change_61_listener($event) { return ctx.onStatusChange($event.target.value); });
748
+ i0.ɵɵelementStart(62, "option", 32);
749
+ i0.ɵɵtext(63, "All Statuses");
750
+ i0.ɵɵelementEnd();
751
+ i0.ɵɵelementStart(64, "option", 36);
752
+ i0.ɵɵtext(65, "Active");
753
+ i0.ɵɵelementEnd();
754
+ i0.ɵɵelementStart(66, "option", 37);
755
+ i0.ɵɵtext(67, "Inactive");
756
+ i0.ɵɵelementEnd()()();
757
+ i0.ɵɵelementStart(68, "div", 38)(69, "button", 39);
758
+ i0.ɵɵlistener("click", function PromptManagementV2Component_Template_button_click_69_listener() { return ctx.clearFilters(); });
759
+ i0.ɵɵelement(70, "i", 40);
760
+ i0.ɵɵtext(71, " Reset Filters ");
761
+ i0.ɵɵelementEnd()()()()();
762
+ i0.ɵɵelementStart(72, "kendo-splitter-pane", 41)(73, "div", 42);
763
+ i0.ɵɵtemplate(74, PromptManagementV2Component_Conditional_74_Template, 2, 1, "div", 43)(75, PromptManagementV2Component_Conditional_75_Template, 2, 1);
764
+ i0.ɵɵelementEnd()()()()();
820
765
  } if (rf & 2) {
766
+ i0.ɵɵadvance(8);
767
+ i0.ɵɵconditional(ctx.showFilters ? 8 : 9);
768
+ i0.ɵɵadvance(3);
769
+ i0.ɵɵtextInterpolate1("", ctx.filteredPrompts.length, " prompts");
770
+ i0.ɵɵadvance(3);
771
+ i0.ɵɵclassProp("active", ctx.viewMode === "grid");
772
+ i0.ɵɵadvance(2);
773
+ i0.ɵɵclassProp("active", ctx.viewMode === "list");
774
+ i0.ɵɵadvance(2);
775
+ i0.ɵɵconditional(ctx.UserCanCreatePrompts ? 18 : -1);
776
+ i0.ɵɵadvance(3);
777
+ i0.ɵɵproperty("size", ctx.showFilters ? "320px" : "0px")("collapsible", false)("resizable", ctx.showFilters)("scrollable", false)("hidden", !ctx.showFilters);
778
+ i0.ɵɵadvance(7);
779
+ i0.ɵɵtextInterpolate(ctx.filteredPrompts.length);
780
+ i0.ɵɵadvance(2);
781
+ i0.ɵɵtextInterpolate1("of ", ctx.prompts.length, "");
782
+ i0.ɵɵadvance(8);
783
+ i0.ɵɵproperty("value", ctx.searchTerm);
784
+ i0.ɵɵadvance(5);
785
+ i0.ɵɵproperty("value", ctx.selectedCategory);
786
+ i0.ɵɵadvance(3);
787
+ i0.ɵɵrepeater(ctx.categories);
788
+ i0.ɵɵadvance(6);
789
+ i0.ɵɵproperty("value", ctx.selectedType);
790
+ i0.ɵɵadvance(3);
791
+ i0.ɵɵrepeater(ctx.types);
792
+ i0.ɵɵadvance(6);
793
+ i0.ɵɵproperty("value", ctx.selectedStatus);
794
+ i0.ɵɵadvance(11);
795
+ i0.ɵɵproperty("resizable", true)("scrollable", true);
796
+ i0.ɵɵadvance(2);
797
+ i0.ɵɵconditional(ctx.isLoading ? 74 : -1);
821
798
  i0.ɵɵadvance();
822
- i0.ɵɵconditional(ctx.isLoading ? 1 : 2);
823
- } }, dependencies: [i4.NgSelectOption, i4.ɵNgSelectMultipleOption, i5.SplitterComponent, i5.SplitterPaneComponent, i6.ModelPromptPriorityMatrixComponent], styles: [".prompt-management-v2[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n background-color: #f5f7fa;\n}\n\n//[_ngcontent-%COMP%] Loading[_ngcontent-%COMP%] state\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background-color: #f5f7fa;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n position: relative;\n width: 80px;\n height: 80px;\n margin: 0 auto 20px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-top-color: #17a2b8;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_spin 1.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;\n \n &:nth-child(2) {\n animation-delay: 0.15s;\n width: 70%;\n height: 70%;\n top: 15%;\n left: 15%;\n border-top-color: #28a745;\n }\n \n &:nth-child(3) {\n animation-delay: 0.3s;\n width: 40%;\n height: 40%;\n top: 30%;\n left: 30%;\n border-top-color: #ffc107;\n }\n}\n\n@keyframes _ngcontent-%COMP%_spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 16px;\n animation: _ngcontent-%COMP%_pulse 2s ease-in-out infinite;\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 0.6; }\n 50% { opacity: 1; }\n}\n\n//[_ngcontent-%COMP%] Dashboard[_ngcontent-%COMP%] Header\n.dashboard-header[_ngcontent-%COMP%] {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #17a2b8;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n//[_ngcontent-%COMP%] View[_ngcontent-%COMP%] Toggle\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0,0,0,0.08);\n}\n\n//[_ngcontent-%COMP%] Control[_ngcontent-%COMP%] Buttons\n.control-btn[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 10px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: #138496;\n border-color: #117a8b;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n//[_ngcontent-%COMP%] Splitter[_ngcontent-%COMP%] content\nkendo-splitter[_ngcontent-%COMP%] {\n flex: 1;\n background-color: #f5f7fa;\n margin-top: 8px;\n}\n\n//[_ngcontent-%COMP%] Filter[_ngcontent-%COMP%] panel\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: white;\n border-right: 1px solid #e0e0e0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n flex: 1;\n }\n \n .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 12px;\n font-size: 12px;\n \n .summary-value {\n font-weight: 600;\n color: #2196f3;\n }\n \n .summary-label {\n color: #666;\n }\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n color: #666;\n border-radius: 3px;\n transition: all 0.2s;\n \n &:hover {\n background: #f0f0f0;\n color: #333;\n }\n \n .fa-solid {\n font-size: 12px;\n }\n }\n}\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 12px;\n}\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n \n .filter-label {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n \n .fa-solid {\n font-size: 11px;\n color: #2196f3;\n width: 12px;\n }\n }\n}\n\n.filter-input[_ngcontent-%COMP%], .filter-select[_ngcontent-%COMP%] {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 12px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n}\n\n.filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n \n .reset-btn {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 12px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.2s;\n box-sizing: border-box;\n \n &:hover {\n background: #e9ecef;\n border-color: #ccc;\n color: #333;\n }\n \n .fa-solid {\n font-size: 11px;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Content[_ngcontent-%COMP%] area\n.content-area[_ngcontent-%COMP%] {\n height: 100%;\n padding: 24px;\n overflow-y: auto;\n background: #f5f7fa;\n}\n\n//[_ngcontent-%COMP%] Empty[_ngcontent-%COMP%] state\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: #6c757d;\n \n i {\n margin-bottom: 24px;\n opacity: 0.3;\n }\n \n h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 16px;\n }\n}\n\n//[_ngcontent-%COMP%] Grid[_ngcontent-%COMP%] view\n.prompt-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n .expand-icon {\n transform: rotate(180deg);\n }\n }\n}\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 20px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n}\n\n.card-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n background-color: #e3f2fd;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 16px;\n flex-shrink: 0;\n \n i {\n font-size: 24px;\n color: #17a2b8;\n }\n}\n\n.card-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n\n .card-description {\n margin: 0;\n font-size: 13px;\n color: #6c757d;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n line-height: 1.4;\n }\n}\n\n\n.expand-icon[_ngcontent-%COMP%] {\n color: #adb5bd;\n transition: transform 0.3s ease;\n margin-left: 12px;\n}\n\n.card-content[_ngcontent-%COMP%] {\n padding: 0 20px 20px;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.description-section[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n \n h5 {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n color: #495057;\n line-height: 1.6;\n }\n}\n\n.stats-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.stat[_ngcontent-%COMP%] {\n text-align: center;\n \n .stat-label {\n display: block;\n font-size: 12px;\n color: #6c757d;\n margin-bottom: 4px;\n }\n \n .stat-value {\n display: block;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n }\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n \n &.active {\n background-color: #d4edda;\n color: #155724;\n }\n \n &.inactive {\n background-color: #f8d7da;\n color: #721c24;\n }\n}\n\n.card-footer[_ngcontent-%COMP%] {\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n display: flex;\n gap: 8px;\n}\n\n.action-button[_ngcontent-%COMP%] {\n padding: 6px 12px;\n background-color: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n color: #495057;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n background-color: #e9ecef;\n border-color: #adb5bd;\n color: #212529;\n }\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n \n &:hover {\n transform: none;\n box-shadow: none;\n background: #17a2b8;\n }\n }\n }\n \n &.small {\n padding: 4px 8px;\n font-size: 12px;\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n }\n }\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n}\n\n//[_ngcontent-%COMP%] List[_ngcontent-%COMP%] view\n.prompt-list[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.data-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n \n thead {\n background-color: #f8f9fa;\n \n tr {\n border-bottom: 2px solid #dee2e6;\n }\n \n th {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n }\n \n tbody {\n tr {\n border-bottom: 1px solid #e9ecef;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:last-child {\n border-bottom: none;\n }\n }\n \n td {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n }\n }\n}\n\n.name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #2c3e50;\n \n i {\n color: #17a2b8;\n }\n}\n\n//[_ngcontent-%COMP%] Priority[_ngcontent-%COMP%] matrix[_ngcontent-%COMP%] container\n.priority-matrix-container[_ngcontent-%COMP%] {\n height: 100%;\n background-color: white;\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n\n//[_ngcontent-%COMP%] Responsive\n@media[_ngcontent-%COMP%] (max-width[_ngcontent-%COMP%]: 768px)[_ngcontent-%COMP%] {\n .prompt-header {\n flex-wrap: wrap;\n gap: 16px;\n }\n \n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n \n .prompt-grid {\n grid-template-columns: 1fr;\n }\n \n .stats-grid {\n grid-template-columns: 1fr;\n }\n}\n\n//[_ngcontent-%COMP%] Text[_ngcontent-%COMP%] utility[_ngcontent-%COMP%] classes\n.text-success[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.text-muted[_ngcontent-%COMP%] {\n color: #6c757d;\n}"] });
824
- }
799
+ i0.ɵɵconditional(!ctx.isLoading ? 75 : -1);
800
+ } }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.SplitterComponent, i4.SplitterPaneComponent, i5.LoadingComponent], styles: ["\n\n.prompt-management-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f5f7fa;\n}\n\n\n\n.dashboard-header[_ngcontent-%COMP%] {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #17a2b8;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn[_ngcontent-%COMP%]:hover {\n color: #495057;\n}\n\n.view-btn.active[_ngcontent-%COMP%] {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.control-btn.primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.main-splitter[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n}\n\n\n\n.filter-panel[_ngcontent-%COMP%] {\n height: 100%;\n background: white;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header[_ngcontent-%COMP%] {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n}\n.filter-panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: baseline;\n gap: 4px;\n font-size: 12px;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-value[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #17a2b8;\n}\n.filter-panel-header[_ngcontent-%COMP%] .filter-summary-inline[_ngcontent-%COMP%] .summary-label[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n.filter-panel-header[_ngcontent-%COMP%] .close-btn[_ngcontent-%COMP%]:hover {\n background: #f0f0f0;\n color: #333;\n}\n\n.filter-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.filter-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.filter-group[_ngcontent-%COMP%] .filter-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #17a2b8;\n}\n\n.filter-input[_ngcontent-%COMP%], \n.filter-select[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n}\n.filter-input[_ngcontent-%COMP%]:focus, \n.filter-select[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.filter-input[_ngcontent-%COMP%]::placeholder, \n.filter-select[_ngcontent-%COMP%]::placeholder {\n color: #adb5bd;\n}\n\n.filter-select[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.filter-actions[_ngcontent-%COMP%] {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 16px;\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n color: #6c757d;\n font-size: 14px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.2s;\n}\n.filter-actions[_ngcontent-%COMP%] .reset-btn[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #ced4da;\n color: #495057;\n}\n\n\n\n.prompts-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 24px;\n background: #f5f7fa;\n}\n\n\n\n.prompts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.prompt-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\n.prompt-card.expanded[_ngcontent-%COMP%] {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n}\n\n.card-header[_ngcontent-%COMP%] {\n padding: 20px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompt-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n flex: 1;\n}\n\n.prompt-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\n font-size: 20px;\n}\n\n.prompt-details[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-name[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.meta-item[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.meta-item.status-active[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.meta-item.status-pending[_ngcontent-%COMP%] {\n color: #ffc107;\n}\n\n.meta-item.status-inactive[_ngcontent-%COMP%] {\n color: #6c757d;\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #6c757d;\n transition: transform 0.3s ease;\n}\n\n.expand-icon.rotated[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n}\n\n.card-body[_ngcontent-%COMP%] {\n padding: 0 20px 20px 20px;\n}\n\n.prompt-description[_ngcontent-%COMP%] {\n margin: 16px 0 0 0;\n font-size: 14px;\n line-height: 1.6;\n color: #6c757d;\n}\n\n.prompt-description.text-muted[_ngcontent-%COMP%] {\n font-style: italic;\n color: #adb5bd;\n}\n\n\n\n.expanded-content[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #f0f4f8;\n animation: _ngcontent-%COMP%_slideDown 0.3s ease;\n}\n\n@keyframes _ngcontent-%COMP%_slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.prompt-stats[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #495057;\n font-weight: 500;\n}\n\n\n\n.card-actions[_ngcontent-%COMP%] {\n padding: 16px 20px;\n background: #f8f9fa;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 6px 16px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n\n\n.prompts-list[_ngcontent-%COMP%] {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.prompts-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.prompts-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: #f8f9fa;\n border-bottom: 2px solid #e0e6ed;\n}\n\n.prompts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompts-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n}\n\n.prompts-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n}\n\n.prompt-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon-small[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: white;\n font-size: 16px;\n}\n\n.prompt-description-small[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge.status-pending[_ngcontent-%COMP%] {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge.status-inactive[_ngcontent-%COMP%] {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.status-unknown[_ngcontent-%COMP%] {\n background: #f8f9fa;\n color: #6c757d;\n}\n\n.table-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #dee2e6;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%] {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-small.primary[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 80px 20px;\n color: #6c757d;\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 64px;\n color: #dee2e6;\n margin-bottom: 24px;\n display: block;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n color: #495057;\n font-weight: 600;\n margin-bottom: 12px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 24px;\n}\n\n.empty-state-btn[_ngcontent-%COMP%] {\n background: #17a2b8;\n color: white;\n border: none;\n padding: 10px 24px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.empty-state-btn[_ngcontent-%COMP%]:hover {\n background: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\n\n.loading-content[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n display: inline-block;\n margin-bottom: 16px;\n}\n\n.spinner-ring[_ngcontent-%COMP%] {\n display: inline-block;\n width: 40px;\n height: 40px;\n margin: 3px;\n border-radius: 50%;\n border: 3px solid #17a2b8;\n border-color: #17a2b8 transparent #17a2b8 transparent;\n animation: _ngcontent-%COMP%_spinner-ring 1.2s linear infinite;\n}\n\n@keyframes _ngcontent-%COMP%_spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.loading-text[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 14px;\n}\n\n\n\n@media (max-width: 768px) {\n .dashboard-header[_ngcontent-%COMP%] {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n .header-info[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .header-controls[_ngcontent-%COMP%] {\n justify-content: space-between;\n }\n .prompts-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n .prompt-stats[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n}"] });
801
+ };
802
+ PromptManagementV2Component = __decorate([
803
+ RegisterClass(BaseResourceComponent, 'AIPromptsResource')
804
+ ], PromptManagementV2Component);
805
+ export { PromptManagementV2Component };
825
806
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptManagementV2Component, [{
826
807
  type: Component,
827
- args: [{ selector: 'app-prompt-management-v2', template: "<div class=\"prompt-management-v2\">\n @if (isLoading) {\n <div class=\"loading-container\">\n <div class=\"loading-content\">\n <div class=\"loading-spinner\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring\"></div>\n </div>\n <div class=\"loading-text\">{{ currentLoadingMessage }}</div>\n </div>\n </div>\n } @else {\n <div class=\"dashboard-header\" style=\"display: flex !important; justify-content: space-between !important; align-items: center !important; padding: 16px 24px !important; background: white !important;\">\n <div class=\"header-info\" style=\"display: flex !important; align-items: center !important; gap: 16px !important; flex: 1 !important;\">\n <h2 class=\"dashboard-title\" style=\"margin: 0 !important; display: flex !important; align-items: center !important; gap: 8px !important;\">\n <i class=\"fa-solid fa-message\"></i>\n AI Prompts\n </h2>\n <button \n type=\"button\" \n class=\"filter-toggle-btn\"\n (click)=\"toggleFilters()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (showFilters) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ filteredPrompts.length }} prompts</span>\n </div>\n \n <div class=\"header-controls\" style=\"display: flex !important; align-items: center !important; gap: 16px !important;\">\n <div class=\"view-toggle\">\n <button \n type=\"button\" \n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button \n type=\"button\" \n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n <button \n type=\"button\" \n class=\"view-btn\"\n [class.active]=\"viewMode === 'priority-matrix'\"\n (click)=\"setViewMode('priority-matrix')\"\n title=\"Priority Matrix\">\n <i class=\"fa-solid fa-chart-scatter\"></i>\n </button>\n </div>\n \n @if (UserCanCreatePrompts) {\n <button \n type=\"button\" \n class=\"control-btn primary\"\n (click)=\"createNewPrompt()\"\n title=\"Create New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n New Prompt\n </button>\n }\n </div>\n </div>\n\n <kendo-splitter orientation=\"horizontal\">\n @if (showFilters) {\n <kendo-splitter-pane size=\"320\" min=\"250\" max=\"400\">\n <div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>Prompt Filters</h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredPrompts.length }}</span>\n <span class=\"summary-label\">of {{ prompts.length }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <span class=\"fa-solid fa-times\"></span>\n </button>\n </div>\n \n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-search\"></span>\n Name\n </label>\n <input \n type=\"text\"\n class=\"filter-input\"\n placeholder=\"Search prompts...\"\n [value]=\"searchTerm\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n </div>\n\n <!-- Category Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-folder\"></span>\n Category\n </label>\n <select class=\"filter-select\" [value]=\"selectedCategory\" (change)=\"onCategoryChange($any($event.target).value)\">\n <option value=\"all\">All Categories</option>\n @for (category of categories; track category.ID) {\n <option [value]=\"category.ID\">{{ category.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Type Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-tag\"></span>\n Type\n </label>\n <select class=\"filter-select\" [value]=\"selectedType\" (change)=\"onTypeChange($any($event.target).value)\">\n <option value=\"all\">All Types</option>\n @for (type of types; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Status Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <span class=\"fa-solid fa-toggle-on\"></span>\n Status\n </label>\n <select class=\"filter-select\" [value]=\"selectedStatus\" (change)=\"onStatusChange($any($event.target).value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n </select>\n </div>\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button class=\"reset-btn\" (click)=\"clearFilters()\" title=\"Reset all filters\">\n <span class=\"fa-solid fa-undo\"></span>\n Reset Filters\n </button>\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n }\n\n <kendo-splitter-pane>\n <div class=\"content-area\">\n @if (filteredPrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots fa-4x\"></i>\n <h3>No prompts found</h3>\n <p>{{ hasActiveFilters ? 'Try adjusting your filters' : 'Create your first AI prompt to get started' }}</p>\n @if (!hasActiveFilters && UserCanCreatePrompts) {\n <button class=\"primary-action\" (click)=\"createNewPrompt()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create First Prompt\n </button>\n }\n </div>\n } @else {\n @switch (viewMode) {\n @case ('grid') {\n <div class=\"prompt-grid\">\n @for (prompt of filteredPrompts; track prompt.ID) {\n <div class=\"prompt-card\" [class.expanded]=\"expandedPromptId === prompt.ID\">\n <div class=\"card-header\" (click)=\"togglePromptExpansion(prompt.ID)\">\n <div class=\"card-icon\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n </div>\n <div class=\"card-info\">\n <h4 class=\"prompt-name\">{{ prompt.Name || 'Unnamed Prompt' }}</h4>\n @if (prompt.Description) {\n <p class=\"card-description\">{{ prompt.Description }}</p>\n }\n </div>\n <i class=\"fa-solid fa-chevron-down expand-icon\" [class.rotated]=\"expandedPromptId === prompt.ID\"></i>\n </div>\n\n @if (expandedPromptId === prompt.ID) {\n <div class=\"card-content\">\n <div class=\"stats-grid\">\n <div class=\"stat\">\n <span class=\"stat-label\">Category</span>\n <span class=\"stat-value\">{{ prompt.CategoryName }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"stat-label\">Type</span>\n <span class=\"stat-value\">{{ prompt.TypeName }}</span>\n </div>\n <div class=\"stat\">\n <span class=\"stat-label\">Status</span>\n <span class=\"stat-value status-badge\" [class]=\"getStatusClass(prompt.Status)\">\n {{ prompt.Status }}\n </span>\n </div>\n </div>\n\n <div class=\"stats-grid\" style=\"margin-top: 12px;\">\n <div class=\"stat\">\n <span class=\"stat-label\">Template</span>\n <span class=\"stat-value\">\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check-circle text-success\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times-circle text-muted\"></i> No\n }\n </span>\n </div>\n <div class=\"stat\">\n <span class=\"stat-label\">Contents</span>\n <span class=\"stat-value\">{{ prompt.TemplateContents?.length || 0 }}</span>\n </div>\n </div>\n\n <div class=\"card-footer\">\n @if (UserCanReadPrompts) {\n <button class=\"action-button primary\" (click)=\"testPrompt(prompt.ID, $event)\" [disabled]=\"prompt.Status !== 'Active'\" title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n <button class=\"action-button\" (click)=\"openPrompt(prompt.ID); $event.stopPropagation()\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n \n @case ('list') {\n <div class=\"prompt-list\">\n <table class=\"data-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Category</th>\n <th>Type</th>\n <th>Status</th>\n <th>Template</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (prompt of filteredPrompts; track prompt.ID) {\n <tr>\n <td>\n <div class=\"name-cell\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n {{ prompt.Name }}\n </div>\n </td>\n <td>{{ prompt.CategoryName }}</td>\n <td>{{ prompt.TypeName }}</td>\n <td>\n <span class=\"status-badge\" [class]=\"getStatusClass(prompt.Status)\">\n {{ prompt.Status }}\n </span>\n </td>\n <td>\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check-circle text-success\"></i>\n } @else {\n <i class=\"fa-solid fa-times-circle text-muted\"></i>\n }\n </td>\n <td>\n @if (UserCanReadPrompts) {\n <button class=\"action-button small primary\" (click)=\"testPrompt(prompt.ID, $event)\" [disabled]=\"prompt.Status !== 'Active'\" title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n <button class=\"action-button small\" (click)=\"openPrompt(prompt.ID)\" title=\"Edit Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n \n @case ('priority-matrix') {\n <div class=\"priority-matrix-container\">\n @if (UserCanReadPrompts) {\n <app-model-prompt-priority-matrix \n [selectedPrompts]=\"filteredPromptsAsEntities\"\n (promptSelected)=\"openPrompt($event.ID)\">\n </app-model-prompt-priority-matrix>\n }\n </div>\n }\n }\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n }\n</div>\n\n<!-- AI Prompt Test Harness - Now handled by service with minimize support -->", styles: [".prompt-management-v2 {\n height: 100%;\n display: flex;\n flex-direction: column;\n background-color: #f5f7fa;\n}\n\n// Loading state\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n background-color: #f5f7fa;\n}\n\n.loading-content {\n text-align: center;\n}\n\n.loading-spinner {\n position: relative;\n width: 80px;\n height: 80px;\n margin: 0 auto 20px;\n}\n\n.spinner-ring {\n position: absolute;\n width: 100%;\n height: 100%;\n border: 3px solid transparent;\n border-top-color: #17a2b8;\n border-radius: 50%;\n animation: spin 1.5s cubic-bezier(0.68, -0.55, 0.265, 1.55) infinite;\n \n &:nth-child(2) {\n animation-delay: 0.15s;\n width: 70%;\n height: 70%;\n top: 15%;\n left: 15%;\n border-top-color: #28a745;\n }\n \n &:nth-child(3) {\n animation-delay: 0.3s;\n width: 40%;\n height: 40%;\n top: 30%;\n left: 30%;\n border-top-color: #ffc107;\n }\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.loading-text {\n color: #6c757d;\n font-size: 16px;\n animation: pulse 2s ease-in-out infinite;\n}\n\n@keyframes pulse {\n 0%, 100% { opacity: 0.6; }\n 50% { opacity: 1; }\n}\n\n// Dashboard Header\n.dashboard-header {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0,0,0,0.04);\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title i {\n color: #17a2b8;\n}\n\n.filter-toggle-btn {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n// View Toggle\n.view-toggle {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn:hover {\n color: #495057;\n}\n\n.view-btn.active {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0,0,0,0.08);\n}\n\n// Control Buttons\n.control-btn {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 10px 20px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.control-btn.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary:hover {\n background: #138496;\n border-color: #117a8b;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n// Splitter content\nkendo-splitter {\n flex: 1;\n background-color: #f5f7fa;\n margin-top: 8px;\n}\n\n// Filter panel\n.filter-panel {\n height: 100%;\n background: white;\n border-right: 1px solid #e0e0e0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n \n h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n flex: 1;\n }\n \n .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n margin-right: 12px;\n font-size: 12px;\n \n .summary-value {\n font-weight: 600;\n color: #2196f3;\n }\n \n .summary-label {\n color: #666;\n }\n }\n \n .close-btn {\n background: none;\n border: none;\n padding: 4px;\n cursor: pointer;\n color: #666;\n border-radius: 3px;\n transition: all 0.2s;\n \n &:hover {\n background: #f0f0f0;\n color: #333;\n }\n \n .fa-solid {\n font-size: 12px;\n }\n }\n}\n\n.filter-content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 12px;\n}\n\n.filter-group {\n margin-bottom: 20px;\n \n .filter-label {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 6px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n \n .fa-solid {\n font-size: 11px;\n color: #2196f3;\n width: 12px;\n }\n }\n}\n\n.filter-input, .filter-select {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 12px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n \n &::placeholder {\n color: #999;\n }\n}\n\n.filter-select {\n cursor: pointer;\n}\n\n.filter-actions {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n \n .reset-btn {\n width: calc(100% - 4px);\n max-width: 100%;\n padding: 8px 12px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n color: #666;\n font-size: 12px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n transition: all 0.2s;\n box-sizing: border-box;\n \n &:hover {\n background: #e9ecef;\n border-color: #ccc;\n color: #333;\n }\n \n .fa-solid {\n font-size: 11px;\n }\n }\n}\n\n// Content area\n.content-area {\n height: 100%;\n padding: 24px;\n overflow-y: auto;\n background: #f5f7fa;\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: 100%;\n text-align: center;\n color: #6c757d;\n \n i {\n margin-bottom: 24px;\n opacity: 0.3;\n }\n \n h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 16px;\n }\n}\n\n// Grid view\n.prompt-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n .expand-icon {\n transform: rotate(180deg);\n }\n }\n}\n\n.card-header {\n display: flex;\n align-items: center;\n padding: 20px;\n cursor: pointer;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n}\n\n.card-icon {\n width: 48px;\n height: 48px;\n background-color: #e3f2fd;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 16px;\n flex-shrink: 0;\n \n i {\n font-size: 24px;\n color: #17a2b8;\n }\n}\n\n.card-info {\n flex: 1;\n min-width: 0;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n }\n\n .card-description {\n margin: 0;\n font-size: 13px;\n color: #6c757d;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n line-height: 1.4;\n }\n}\n\n\n.expand-icon {\n color: #adb5bd;\n transition: transform 0.3s ease;\n margin-left: 12px;\n}\n\n.card-content {\n padding: 0 20px 20px;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.description-section {\n margin-bottom: 16px;\n \n h5 {\n margin: 0 0 8px 0;\n font-size: 13px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n color: #495057;\n line-height: 1.6;\n }\n}\n\n.stats-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 16px;\n margin-bottom: 16px;\n}\n\n.stat {\n text-align: center;\n \n .stat-label {\n display: block;\n font-size: 12px;\n color: #6c757d;\n margin-bottom: 4px;\n }\n \n .stat-value {\n display: block;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n }\n}\n\n.status-badge {\n display: inline-block;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n font-weight: 500;\n \n &.active {\n background-color: #d4edda;\n color: #155724;\n }\n \n &.inactive {\n background-color: #f8d7da;\n color: #721c24;\n }\n}\n\n.card-footer {\n padding-top: 16px;\n border-top: 1px solid #e9ecef;\n display: flex;\n gap: 8px;\n}\n\n.action-button {\n padding: 6px 12px;\n background-color: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n color: #495057;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n background-color: #e9ecef;\n border-color: #adb5bd;\n color: #212529;\n }\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n \n &:hover {\n transform: none;\n box-shadow: none;\n background: #17a2b8;\n }\n }\n }\n \n &.small {\n padding: 4px 8px;\n font-size: 12px;\n \n &.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n \n &:hover:not(:disabled) {\n background: #1485a3;\n border-color: #1485a3;\n }\n }\n }\n \n &:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n }\n}\n\n// List view\n.prompt-list {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.data-table {\n width: 100%;\n border-collapse: collapse;\n \n thead {\n background-color: #f8f9fa;\n \n tr {\n border-bottom: 2px solid #dee2e6;\n }\n \n th {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n }\n \n tbody {\n tr {\n border-bottom: 1px solid #e9ecef;\n transition: background-color 0.2s ease;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:last-child {\n border-bottom: none;\n }\n }\n \n td {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n }\n }\n}\n\n.name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n color: #2c3e50;\n \n i {\n color: #17a2b8;\n }\n}\n\n// Priority matrix container\n.priority-matrix-container {\n height: 100%;\n background-color: white;\n border-radius: 12px;\n padding: 24px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n\n// Responsive\n@media (max-width: 768px) {\n .prompt-header {\n flex-wrap: wrap;\n gap: 16px;\n }\n \n .header-right {\n width: 100%;\n justify-content: space-between;\n }\n \n .prompt-grid {\n grid-template-columns: 1fr;\n }\n \n .stats-grid {\n grid-template-columns: 1fr;\n }\n}\n\n// Text utility classes\n.text-success {\n color: #28a745;\n}\n\n.text-muted {\n color: #6c757d;\n}"] }]
828
- }], () => [{ type: i1.SharedService }, { type: i2.AITestHarnessDialogService }, { type: i3.Router }], { openEntityRecord: [{
829
- type: Output
830
- }], stateChange: [{
831
- type: Output
832
- }], initialState: [{
833
- type: Input
834
- }] }); })();
835
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementV2Component, { className: "PromptManagementV2Component", filePath: "src/AI/components/prompts/prompt-management-v2.component.ts", lineNumber: 24 }); })();
808
+ args: [{ selector: 'app-prompt-management-v2', template: "<div class=\"prompt-management-container\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <h2 class=\"dashboard-title\">\n <i class=\"fa-solid fa-message\"></i>\n AI Prompts\n </h2>\n <button\n type=\"button\"\n class=\"filter-toggle-btn\"\n (click)=\"toggleFilters()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (showFilters) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"item-count\">{{ filteredPrompts.length }} prompts</span>\n </div>\n\n <div class=\"header-controls\">\n <div class=\"view-toggle\">\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'grid'\"\n (click)=\"setViewMode('grid')\"\n title=\"Grid View\">\n <i class=\"fa-solid fa-grip\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view-btn\"\n [class.active]=\"viewMode === 'list'\"\n (click)=\"setViewMode('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n\n @if (UserCanCreatePrompts) {\n <button\n type=\"button\"\n class=\"control-btn primary\"\n (click)=\"createNewPrompt()\"\n title=\"Create New Prompt\">\n <i class=\"fa-solid fa-plus\"></i>\n New Prompt\n </button>\n }\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\">\n <kendo-splitter\n class=\"main-splitter\"\n orientation=\"horizontal\">\n\n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane\n [size]=\"showFilters ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"showFilters\"\n [scrollable]=\"false\"\n [hidden]=\"!showFilters\">\n <div class=\"filter-panel\">\n <div class=\"filter-panel-header\">\n <h3>Prompt Filters</h3>\n <div class=\"filter-summary-inline\">\n <span class=\"summary-value\">{{ filteredPrompts.length }}</span>\n <span class=\"summary-label\">of {{ prompts.length }}</span>\n </div>\n <button class=\"close-btn\" (click)=\"toggleFilterPanel()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n\n <div class=\"filter-content\">\n <!-- Search Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-search\"></i>\n Name\n </label>\n <input\n type=\"text\"\n class=\"filter-input\"\n placeholder=\"Search prompts...\"\n [value]=\"searchTerm\"\n (input)=\"onSearchChange($any($event.target).value)\"\n />\n </div>\n\n <!-- Category Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-folder\"></i>\n Category\n </label>\n <select class=\"filter-select\" [value]=\"selectedCategory\" (change)=\"onCategoryChange($any($event.target).value)\">\n <option value=\"all\">All Categories</option>\n @for (category of categories; track category.ID) {\n <option [value]=\"category.ID\">{{ category.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Type Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-tag\"></i>\n Type\n </label>\n <select class=\"filter-select\" [value]=\"selectedType\" (change)=\"onTypeChange($any($event.target).value)\">\n <option value=\"all\">All Types</option>\n @for (type of types; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n </div>\n\n <!-- Status Filter -->\n <div class=\"filter-group\">\n <label class=\"filter-label\">\n <i class=\"fa-solid fa-toggle-on\"></i>\n Status\n </label>\n <select class=\"filter-select\" [value]=\"selectedStatus\" (change)=\"onStatusChange($any($event.target).value)\">\n <option value=\"all\">All Statuses</option>\n <option value=\"active\">Active</option>\n <option value=\"inactive\">Inactive</option>\n </select>\n </div>\n\n <!-- Reset Button -->\n <div class=\"filter-actions\">\n <button class=\"reset-btn\" (click)=\"clearFilters()\" title=\"Reset all filters\">\n <i class=\"fa-solid fa-undo\"></i>\n Reset Filters\n </button>\n </div>\n </div>\n </div>\n </kendo-splitter-pane>\n\n <!-- Prompts List Panel -->\n <kendo-splitter-pane\n [resizable]=\"true\"\n [scrollable]=\"true\">\n <div class=\"prompts-content\">\n <!-- Loading State -->\n @if (isLoading) {\n <div class=\"loading-container\">\n <mj-loading [text]=\"currentLoadingMessage\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Prompts Display -->\n @if (!isLoading) {\n @if (filteredPrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-message\"></i>\n <h3>No prompts found</h3>\n <p>{{ hasActiveFilters ? 'Try adjusting your filters' : 'Create your first AI prompt to get started' }}</p>\n @if (!hasActiveFilters && UserCanCreatePrompts) {\n <button\n type=\"button\"\n class=\"empty-state-btn\"\n (click)=\"createNewPrompt()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Prompt\n </button>\n }\n </div>\n } @else {\n <!-- Grid View -->\n @if (viewMode === 'grid') {\n <div class=\"prompts-grid\">\n @for (prompt of filteredPrompts; track prompt.ID) {\n <div class=\"prompt-card\" [class.expanded]=\"expandedPromptId === prompt.ID\">\n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"togglePromptExpansion(prompt.ID)\">\n <div class=\"prompt-info\">\n <div class=\"prompt-icon\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n </div>\n <div class=\"prompt-details\">\n <h4 class=\"prompt-name\">{{ prompt.Name }}</h4>\n <div class=\"prompt-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ prompt.CategoryName }}\n </span>\n @if (prompt.Status) {\n <span class=\"meta-item\" [class]=\"'status-' + prompt.Status.toLowerCase()\">\n <i class=\"fa-solid fa-circle\" style=\"font-size: 8px;\"></i>\n {{ prompt.Status }}\n </span>\n }\n </div>\n </div>\n </div>\n\n <i class=\"fa-solid fa-chevron-down expand-icon\"\n [class.rotated]=\"expandedPromptId === prompt.ID\"></i>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (prompt.Description) {\n <p class=\"prompt-description\">{{ prompt.Description }}</p>\n } @else {\n <p class=\"prompt-description text-muted\">No description provided</p>\n }\n\n <!-- Expandable Content -->\n @if (expandedPromptId === prompt.ID) {\n <div class=\"expanded-content\">\n <div class=\"prompt-stats\">\n <div class=\"stat-item\">\n <span class=\"stat-label\">Type</span>\n <span class=\"stat-value\">{{ prompt.TypeName }}</span>\n </div>\n <div class=\"stat-item\">\n <span class=\"stat-label\">Template</span>\n <span class=\"stat-value\">\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check\" style=\"color: #28a745;\"></i> Yes\n } @else {\n <i class=\"fa-solid fa-times\" style=\"color: #dc3545;\"></i> No\n }\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\">\n @if (UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn\"\n (click)=\"openPrompt(prompt.ID); $event.stopPropagation()\"\n title=\"Open Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n Open\n </button>\n }\n\n @if (prompt.Status === 'Active' && UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn action-btn-primary\"\n (click)=\"testPrompt(prompt.ID, $event)\"\n title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n Run\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (viewMode === 'list') {\n <div class=\"prompts-list\">\n <table class=\"prompts-table\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Category</th>\n <th>Type</th>\n <th>Status</th>\n <th>Template</th>\n <th>Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (prompt of filteredPrompts; track prompt.ID) {\n <tr>\n <td>\n <div class=\"prompt-name-cell\">\n <div class=\"prompt-icon-small\">\n <i [class]=\"getPromptIcon(prompt)\"></i>\n </div>\n <div>\n <div class=\"prompt-name\">{{ prompt.Name }}</div>\n @if (prompt.Description) {\n <div class=\"prompt-description-small\">{{ prompt.Description }}</div>\n }\n </div>\n </div>\n </td>\n <td>{{ prompt.CategoryName }}</td>\n <td>{{ prompt.TypeName }}</td>\n <td>\n <span class=\"status-badge\" [class]=\"'status-' + (prompt.Status || 'unknown').toLowerCase()\">\n {{ prompt.Status || 'Unknown' }}\n </span>\n </td>\n <td>\n @if (prompt.TemplateEntity) {\n <i class=\"fa-solid fa-check-circle\" style=\"color: #28a745;\"></i>\n } @else {\n <i class=\"fa-solid fa-times-circle\" style=\"color: #6c757d;\"></i>\n }\n </td>\n <td>\n <div class=\"table-actions\">\n @if (UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn-small\"\n (click)=\"openPrompt(prompt.ID)\"\n title=\"Open Prompt\">\n <i class=\"fa-solid fa-external-link-alt\"></i>\n </button>\n }\n @if (prompt.Status === 'Active' && UserCanReadPrompts) {\n <button\n type=\"button\"\n class=\"action-btn-small primary\"\n (click)=\"testPrompt(prompt.ID, $event)\"\n title=\"Run Prompt\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n }\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n</div>\n", styles: ["/* Prompt Management Component - Modern Design */\n.prompt-management-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: #f5f7fa;\n}\n\n/* Dashboard Header */\n.dashboard-header {\n background: white;\n padding: 16px 24px;\n border-bottom: 1px solid #e0e6ed;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.04);\n}\n\n.header-info {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.dashboard-title {\n margin: 0;\n font-size: 20px;\n font-weight: 600;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dashboard-title i {\n color: #17a2b8;\n}\n\n.filter-toggle-btn {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.filter-toggle-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n}\n\n.item-count {\n color: #6c757d;\n font-size: 14px;\n font-weight: 500;\n}\n\n.header-controls {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n background: #f8f9fa;\n border-radius: 6px;\n padding: 2px;\n border: 1px solid #dee2e6;\n}\n\n.view-btn {\n background: transparent;\n border: none;\n padding: 6px 12px;\n border-radius: 4px;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n font-size: 16px;\n}\n\n.view-btn:hover {\n color: #495057;\n}\n\n.view-btn.active {\n background: white;\n color: #17a2b8;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.control-btn {\n background: white;\n border: 1px solid #dee2e6;\n padding: 8px 16px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.control-btn:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.control-btn.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.control-btn.primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n/* Main Content */\n.main-content {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n\n.main-splitter {\n flex: 1;\n min-height: 0;\n}\n\n/* Filter Panel */\n.filter-panel {\n height: 100%;\n background: white;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.filter-panel-header {\n padding: 16px;\n border-bottom: 1px solid #f0f0f0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n flex-shrink: 0;\n}\n.filter-panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n}\n.filter-panel-header .filter-summary-inline {\n display: flex;\n align-items: baseline;\n gap: 4px;\n font-size: 12px;\n}\n.filter-panel-header .filter-summary-inline .summary-value {\n font-weight: 600;\n color: #17a2b8;\n}\n.filter-panel-header .filter-summary-inline .summary-label {\n color: #6c757d;\n}\n.filter-panel-header .close-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n cursor: pointer;\n color: #6c757d;\n border-radius: 4px;\n transition: all 0.2s;\n}\n.filter-panel-header .close-btn:hover {\n background: #f0f0f0;\n color: #333;\n}\n\n.filter-content {\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n}\n\n.filter-group {\n margin-bottom: 20px;\n}\n.filter-group .filter-label {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n.filter-group .filter-label i {\n font-size: 12px;\n color: #17a2b8;\n}\n\n.filter-input,\n.filter-select {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n font-size: 14px;\n background: white;\n transition: border-color 0.2s;\n box-sizing: border-box;\n}\n.filter-input:focus,\n.filter-select:focus {\n outline: none;\n border-color: #17a2b8;\n}\n.filter-input::placeholder,\n.filter-select::placeholder {\n color: #adb5bd;\n}\n\n.filter-select {\n cursor: pointer;\n}\n\n.filter-actions {\n margin-top: 24px;\n padding-top: 16px;\n border-top: 1px solid #f0f0f0;\n}\n.filter-actions .reset-btn {\n width: 100%;\n padding: 10px 16px;\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 6px;\n color: #6c757d;\n font-size: 14px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: all 0.2s;\n}\n.filter-actions .reset-btn:hover {\n background: #e9ecef;\n border-color: #ced4da;\n color: #495057;\n}\n\n/* Prompts Content */\n.prompts-content {\n height: 100%;\n overflow-y: auto;\n padding: 24px;\n background: #f5f7fa;\n}\n\n/* Grid View */\n.prompts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(380px, 1fr));\n gap: 20px;\n}\n\n.prompt-card {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n transition: all 0.3s ease;\n overflow: hidden;\n}\n\n.prompt-card:hover {\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);\n transform: translateY(-2px);\n}\n\n.prompt-card.expanded {\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.12);\n}\n\n.card-header {\n padding: 20px;\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n cursor: pointer;\n user-select: none;\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompt-info {\n display: flex;\n gap: 16px;\n flex: 1;\n}\n\n.prompt-icon {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon i {\n color: white;\n font-size: 20px;\n}\n\n.prompt-details {\n flex: 1;\n min-width: 0;\n}\n\n.prompt-name {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: #2c3e50;\n margin-bottom: 6px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.prompt-meta {\n display: flex;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.meta-item {\n font-size: 13px;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-item i {\n font-size: 12px;\n}\n\n.meta-item.status-active {\n color: #28a745;\n}\n\n.meta-item.status-pending {\n color: #ffc107;\n}\n\n.meta-item.status-inactive {\n color: #6c757d;\n}\n\n.expand-icon {\n font-size: 14px;\n color: #6c757d;\n transition: transform 0.3s ease;\n}\n\n.expand-icon.rotated {\n transform: rotate(180deg);\n}\n\n.card-body {\n padding: 0 20px 20px 20px;\n}\n\n.prompt-description {\n margin: 16px 0 0 0;\n font-size: 14px;\n line-height: 1.6;\n color: #6c757d;\n}\n\n.prompt-description.text-muted {\n font-style: italic;\n color: #adb5bd;\n}\n\n/* Expanded Content */\n.expanded-content {\n margin-top: 16px;\n padding-top: 16px;\n border-top: 1px solid #f0f4f8;\n animation: slideDown 0.3s ease;\n}\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n.prompt-stats {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 16px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.stat-label {\n font-size: 12px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.stat-value {\n font-size: 14px;\n color: #495057;\n font-weight: 500;\n}\n\n/* Card Actions */\n.card-actions {\n padding: 16px 20px;\n background: #f8f9fa;\n border-top: 1px solid #e0e6ed;\n display: flex;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.action-btn {\n background: white;\n border: 1px solid #dee2e6;\n padding: 6px 16px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n/* List View */\n.prompts-list {\n background: white;\n border-radius: 12px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n border: 1px solid #e0e6ed;\n overflow: hidden;\n}\n\n.prompts-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.prompts-table thead {\n background: #f8f9fa;\n border-bottom: 2px solid #e0e6ed;\n}\n\n.prompts-table th {\n padding: 12px 16px;\n text-align: left;\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.prompts-table tbody tr {\n border-bottom: 1px solid #f0f4f8;\n}\n\n.prompts-table tbody tr:hover {\n background: #f8f9fa;\n}\n\n.prompts-table td {\n padding: 16px;\n font-size: 14px;\n color: #495057;\n}\n\n.prompt-name-cell {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.prompt-icon-small {\n width: 36px;\n height: 36px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n background: #17a2b8;\n}\n\n.prompt-icon-small i {\n color: white;\n font-size: 16px;\n}\n\n.prompt-description-small {\n font-size: 13px;\n color: #6c757d;\n margin-top: 2px;\n}\n\n.status-badge {\n display: inline-flex;\n align-items: center;\n padding: 4px 12px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: #d4edda;\n color: #155724;\n}\n\n.status-badge.status-pending {\n background: #fff3cd;\n color: #856404;\n}\n\n.status-badge.status-inactive {\n background: #e2e3e5;\n color: #383d41;\n}\n\n.status-badge.status-unknown {\n background: #f8f9fa;\n color: #6c757d;\n}\n\n.table-actions {\n display: flex;\n gap: 8px;\n}\n\n.action-btn-small {\n background: white;\n border: 1px solid #dee2e6;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 12px;\n color: #495057;\n cursor: pointer;\n transition: all 0.2s ease;\n}\n\n.action-btn-small:hover {\n background: #f8f9fa;\n border-color: #ced4da;\n}\n\n.action-btn-small.primary {\n background: #17a2b8;\n border-color: #17a2b8;\n color: white;\n}\n\n.action-btn-small.primary:hover {\n background: #1485a3;\n border-color: #1485a3;\n}\n\n/* Empty State */\n.empty-state {\n text-align: center;\n padding: 80px 20px;\n color: #6c757d;\n}\n\n.empty-state i {\n font-size: 64px;\n color: #dee2e6;\n margin-bottom: 24px;\n display: block;\n}\n\n.empty-state h3 {\n color: #495057;\n font-weight: 600;\n margin-bottom: 12px;\n}\n\n.empty-state p {\n font-size: 15px;\n line-height: 1.6;\n max-width: 400px;\n margin: 0 auto 24px;\n}\n\n.empty-state-btn {\n background: #17a2b8;\n color: white;\n border: none;\n padding: 10px 24px;\n border-radius: 6px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease;\n display: inline-flex;\n align-items: center;\n gap: 8px;\n}\n\n.empty-state-btn:hover {\n background: #1485a3;\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(23, 162, 184, 0.3);\n}\n\n/* Loading State */\n.loading-container {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 400px;\n}\n\n.loading-content {\n text-align: center;\n}\n\n.loading-spinner {\n display: inline-block;\n margin-bottom: 16px;\n}\n\n.spinner-ring {\n display: inline-block;\n width: 40px;\n height: 40px;\n margin: 3px;\n border-radius: 50%;\n border: 3px solid #17a2b8;\n border-color: #17a2b8 transparent #17a2b8 transparent;\n animation: spinner-ring 1.2s linear infinite;\n}\n\n@keyframes spinner-ring {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n.loading-text {\n color: #6c757d;\n font-size: 14px;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .dashboard-header {\n flex-direction: column;\n gap: 16px;\n align-items: stretch;\n }\n .header-info {\n justify-content: space-between;\n }\n .header-controls {\n justify-content: space-between;\n }\n .prompts-grid {\n grid-template-columns: 1fr;\n }\n .prompt-stats {\n grid-template-columns: 1fr;\n }\n}\n"] }]
809
+ }], () => [{ type: i1.SharedService }, { type: i2.AITestHarnessDialogService }, { type: i1.NavigationService }], null); })();
810
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementV2Component, { className: "PromptManagementV2Component", filePath: "src/AI/components/prompts/prompt-management-v2.component.ts", lineNumber: 36 }); })();
836
811
  //# sourceMappingURL=prompt-management-v2.component.js.map