@memberjunction/ng-dashboards 2.69.1 → 2.71.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,12 +2,14 @@ import { Component, Output, EventEmitter, Input } from '@angular/core';
2
2
  import { Subject, BehaviorSubject } from 'rxjs';
3
3
  import { takeUntil, debounceTime, distinctUntilChanged } from 'rxjs/operators';
4
4
  import { Metadata, RunView } from '@memberjunction/core';
5
+ import { MJNotificationService } from '@memberjunction/ng-notifications';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@memberjunction/ng-shared";
7
8
  import * as i2 from "@memberjunction/ng-ai-test-harness";
8
- import * as i3 from "@angular/forms";
9
- import * as i4 from "@progress/kendo-angular-layout";
10
- import * as i5 from "./model-prompt-priority-matrix.component";
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";
11
13
  const _forTrack0 = ($index, $item) => $item.ID;
12
14
  function PromptManagementV2Component_Conditional_1_Template(rf, ctx) { if (rf & 1) {
13
15
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3);
@@ -27,88 +29,96 @@ function PromptManagementV2Component_Conditional_2_Conditional_7_Template(rf, ct
27
29
  function PromptManagementV2Component_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
28
30
  i0.ɵɵtext(0, " Show Filters ");
29
31
  } }
30
- function PromptManagementV2Component_Conditional_2_Conditional_23_For_26_Template(rf, ctx) { if (rf & 1) {
31
- i0.ɵɵelementStart(0, "option", 42);
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);
37
+ i0.ɵɵtext(2, " New Prompt ");
38
+ i0.ɵɵelementEnd();
39
+ } }
40
+ function PromptManagementV2Component_Conditional_2_Conditional_21_For_26_Template(rf, ctx) { if (rf & 1) {
41
+ i0.ɵɵelementStart(0, "option", 43);
32
42
  i0.ɵɵtext(1);
33
43
  i0.ɵɵelementEnd();
34
44
  } if (rf & 2) {
35
- const category_r4 = ctx.$implicit;
36
- i0.ɵɵproperty("value", category_r4.ID);
45
+ const category_r5 = ctx.$implicit;
46
+ i0.ɵɵproperty("value", category_r5.ID);
37
47
  i0.ɵɵadvance();
38
- i0.ɵɵtextInterpolate(category_r4.Name);
48
+ i0.ɵɵtextInterpolate(category_r5.Name);
39
49
  } }
40
- function PromptManagementV2Component_Conditional_2_Conditional_23_For_35_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelementStart(0, "option", 42);
50
+ function PromptManagementV2Component_Conditional_2_Conditional_21_For_35_Template(rf, ctx) { if (rf & 1) {
51
+ i0.ɵɵelementStart(0, "option", 43);
42
52
  i0.ɵɵtext(1);
43
53
  i0.ɵɵelementEnd();
44
54
  } if (rf & 2) {
45
- const type_r5 = ctx.$implicit;
46
- i0.ɵɵproperty("value", type_r5.ID);
55
+ const type_r6 = ctx.$implicit;
56
+ i0.ɵɵproperty("value", type_r6.ID);
47
57
  i0.ɵɵadvance();
48
- i0.ɵɵtextInterpolate(type_r5.Name);
58
+ i0.ɵɵtextInterpolate(type_r6.Name);
49
59
  } }
50
- function PromptManagementV2Component_Conditional_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
51
- const _r3 = i0.ɵɵgetCurrentView();
52
- i0.ɵɵelementStart(0, "kendo-splitter-pane", 24)(1, "div", 27)(2, "div", 28)(3, "h3");
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");
53
63
  i0.ɵɵtext(4, "Prompt Filters");
54
64
  i0.ɵɵelementEnd();
55
- i0.ɵɵelementStart(5, "div", 29)(6, "span", 30);
65
+ i0.ɵɵelementStart(5, "div", 30)(6, "span", 31);
56
66
  i0.ɵɵtext(7);
57
67
  i0.ɵɵelementEnd();
58
- i0.ɵɵelementStart(8, "span", 31);
68
+ i0.ɵɵelementStart(8, "span", 32);
59
69
  i0.ɵɵtext(9);
60
70
  i0.ɵɵelementEnd()();
61
- i0.ɵɵelementStart(10, "button", 32);
62
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_23_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.toggleFilterPanel()); });
63
- i0.ɵɵelement(11, "span", 33);
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);
64
74
  i0.ɵɵelementEnd()();
65
- i0.ɵɵelementStart(12, "div", 34)(13, "div", 35)(14, "label", 36);
66
- i0.ɵɵelement(15, "span", 37);
75
+ i0.ɵɵelementStart(12, "div", 35)(13, "div", 36)(14, "label", 37);
76
+ i0.ɵɵelement(15, "span", 38);
67
77
  i0.ɵɵtext(16, " Name ");
68
78
  i0.ɵɵelementEnd();
69
- i0.ɵɵelementStart(17, "input", 38);
70
- i0.ɵɵlistener("input", function PromptManagementV2Component_Conditional_2_Conditional_23_Template_input_input_17_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSearchChange($event.target.value)); });
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)); });
71
81
  i0.ɵɵelementEnd()();
72
- i0.ɵɵelementStart(18, "div", 35)(19, "label", 36);
73
- i0.ɵɵelement(20, "span", 39);
82
+ i0.ɵɵelementStart(18, "div", 36)(19, "label", 37);
83
+ i0.ɵɵelement(20, "span", 40);
74
84
  i0.ɵɵtext(21, " Category ");
75
85
  i0.ɵɵelementEnd();
76
- i0.ɵɵelementStart(22, "select", 40);
77
- i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_23_Template_select_change_22_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCategoryChange($event.target.value)); });
78
- i0.ɵɵelementStart(23, "option", 41);
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);
79
89
  i0.ɵɵtext(24, "All Categories");
80
90
  i0.ɵɵelementEnd();
81
- i0.ɵɵrepeaterCreate(25, PromptManagementV2Component_Conditional_2_Conditional_23_For_26_Template, 2, 2, "option", 42, _forTrack0);
91
+ i0.ɵɵrepeaterCreate(25, PromptManagementV2Component_Conditional_2_Conditional_21_For_26_Template, 2, 2, "option", 43, _forTrack0);
82
92
  i0.ɵɵelementEnd()();
83
- i0.ɵɵelementStart(27, "div", 35)(28, "label", 36);
84
- i0.ɵɵelement(29, "span", 43);
93
+ i0.ɵɵelementStart(27, "div", 36)(28, "label", 37);
94
+ i0.ɵɵelement(29, "span", 44);
85
95
  i0.ɵɵtext(30, " Type ");
86
96
  i0.ɵɵelementEnd();
87
- i0.ɵɵelementStart(31, "select", 40);
88
- i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_23_Template_select_change_31_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onTypeChange($event.target.value)); });
89
- i0.ɵɵelementStart(32, "option", 41);
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);
90
100
  i0.ɵɵtext(33, "All Types");
91
101
  i0.ɵɵelementEnd();
92
- i0.ɵɵrepeaterCreate(34, PromptManagementV2Component_Conditional_2_Conditional_23_For_35_Template, 2, 2, "option", 42, _forTrack0);
102
+ i0.ɵɵrepeaterCreate(34, PromptManagementV2Component_Conditional_2_Conditional_21_For_35_Template, 2, 2, "option", 43, _forTrack0);
93
103
  i0.ɵɵelementEnd()();
94
- i0.ɵɵelementStart(36, "div", 35)(37, "label", 36);
95
- i0.ɵɵelement(38, "span", 44);
104
+ i0.ɵɵelementStart(36, "div", 36)(37, "label", 37);
105
+ i0.ɵɵelement(38, "span", 45);
96
106
  i0.ɵɵtext(39, " Status ");
97
107
  i0.ɵɵelementEnd();
98
- i0.ɵɵelementStart(40, "select", 40);
99
- i0.ɵɵlistener("change", function PromptManagementV2Component_Conditional_2_Conditional_23_Template_select_change_40_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onStatusChange($event.target.value)); });
100
- i0.ɵɵelementStart(41, "option", 41);
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);
101
111
  i0.ɵɵtext(42, "All Statuses");
102
112
  i0.ɵɵelementEnd();
103
- i0.ɵɵelementStart(43, "option", 45);
113
+ i0.ɵɵelementStart(43, "option", 46);
104
114
  i0.ɵɵtext(44, "Active");
105
115
  i0.ɵɵelementEnd();
106
- i0.ɵɵelementStart(45, "option", 46);
116
+ i0.ɵɵelementStart(45, "option", 47);
107
117
  i0.ɵɵtext(46, "Inactive");
108
118
  i0.ɵɵelementEnd()()();
109
- i0.ɵɵelementStart(47, "div", 47)(48, "button", 48);
110
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_23_Template_button_click_48_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.clearFilters()); });
111
- i0.ɵɵelement(49, "span", 49);
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);
112
122
  i0.ɵɵtext(50, " Reset Filters ");
113
123
  i0.ɵɵelementEnd()()()()();
114
124
  } if (rf & 2) {
@@ -130,158 +140,179 @@ function PromptManagementV2Component_Conditional_2_Conditional_23_Template(rf, c
130
140
  i0.ɵɵadvance(6);
131
141
  i0.ɵɵproperty("value", ctx_r0.selectedStatus);
132
142
  } }
133
- function PromptManagementV2Component_Conditional_2_Conditional_26_Conditional_6_Template(rf, ctx) { if (rf & 1) {
134
- const _r6 = i0.ɵɵgetCurrentView();
135
- i0.ɵɵelementStart(0, "button", 52);
136
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_26_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.createNewPrompt()); });
137
- i0.ɵɵelement(1, "i", 22);
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);
138
148
  i0.ɵɵtext(2, " Create First Prompt ");
139
149
  i0.ɵɵelementEnd();
140
150
  } }
141
- function PromptManagementV2Component_Conditional_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
142
- i0.ɵɵelementStart(0, "div", 26);
143
- i0.ɵɵelement(1, "i", 50);
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);
144
154
  i0.ɵɵelementStart(2, "h3");
145
155
  i0.ɵɵtext(3, "No prompts found");
146
156
  i0.ɵɵelementEnd();
147
157
  i0.ɵɵelementStart(4, "p");
148
158
  i0.ɵɵtext(5);
149
159
  i0.ɵɵelementEnd();
150
- i0.ɵɵtemplate(6, PromptManagementV2Component_Conditional_2_Conditional_26_Conditional_6_Template, 3, 0, "button", 51);
160
+ i0.ɵɵtemplate(6, PromptManagementV2Component_Conditional_2_Conditional_24_Conditional_6_Template, 3, 0, "button", 52);
151
161
  i0.ɵɵelementEnd();
152
162
  } if (rf & 2) {
153
163
  const ctx_r0 = i0.ɵɵnextContext(2);
154
164
  i0.ɵɵadvance(5);
155
165
  i0.ɵɵtextInterpolate(ctx_r0.hasActiveFilters ? "Try adjusting your filters" : "Create your first AI prompt to get started");
156
166
  i0.ɵɵadvance();
157
- i0.ɵɵconditional(!ctx_r0.hasActiveFilters ? 6 : -1);
167
+ i0.ɵɵconditional(!ctx_r0.hasActiveFilters && ctx_r0.UserCanCreatePrompts ? 6 : -1);
158
168
  } }
159
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_7_Template(rf, ctx) { if (rf & 1) {
160
- i0.ɵɵelementStart(0, "p", 62);
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);
161
171
  i0.ɵɵtext(1);
162
172
  i0.ɵɵelementEnd();
163
173
  } if (rf & 2) {
164
- const prompt_r8 = i0.ɵɵnextContext().$implicit;
174
+ const prompt_r9 = i0.ɵɵnextContext().$implicit;
165
175
  i0.ɵɵadvance();
166
- i0.ɵɵtextInterpolate(prompt_r8.Description);
176
+ i0.ɵɵtextInterpolate(prompt_r9.Description);
167
177
  } }
168
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Conditional_22_Template(rf, ctx) { if (rf & 1) {
169
- i0.ɵɵelement(0, "i", 76);
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);
170
180
  i0.ɵɵtext(1, " Yes ");
171
181
  } }
172
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Conditional_23_Template(rf, ctx) { if (rf & 1) {
173
- i0.ɵɵelement(0, "i", 77);
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);
174
184
  i0.ɵɵtext(1, " No ");
175
185
  } }
176
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
177
- const _r9 = i0.ɵɵgetCurrentView();
178
- i0.ɵɵelementStart(0, "div", 64)(1, "div", 65)(2, "div", 66)(3, "span", 67);
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 ");
192
+ 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 ");
197
+ i0.ɵɵelementEnd();
198
+ } if (rf & 2) {
199
+ const prompt_r9 = i0.ɵɵnextContext(2).$implicit;
200
+ i0.ɵɵproperty("disabled", prompt_r9.Status !== "Active");
201
+ } }
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);
179
204
  i0.ɵɵtext(4, "Category");
180
205
  i0.ɵɵelementEnd();
181
- i0.ɵɵelementStart(5, "span", 68);
206
+ i0.ɵɵelementStart(5, "span", 69);
182
207
  i0.ɵɵtext(6);
183
208
  i0.ɵɵelementEnd()();
184
- i0.ɵɵelementStart(7, "div", 66)(8, "span", 67);
209
+ i0.ɵɵelementStart(7, "div", 67)(8, "span", 68);
185
210
  i0.ɵɵtext(9, "Type");
186
211
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(10, "span", 68);
212
+ i0.ɵɵelementStart(10, "span", 69);
188
213
  i0.ɵɵtext(11);
189
214
  i0.ɵɵelementEnd()();
190
- i0.ɵɵelementStart(12, "div", 66)(13, "span", 67);
215
+ i0.ɵɵelementStart(12, "div", 67)(13, "span", 68);
191
216
  i0.ɵɵtext(14, "Status");
192
217
  i0.ɵɵelementEnd();
193
- i0.ɵɵelementStart(15, "span", 69);
218
+ i0.ɵɵelementStart(15, "span", 70);
194
219
  i0.ɵɵtext(16);
195
220
  i0.ɵɵelementEnd()()();
196
- i0.ɵɵelementStart(17, "div", 70)(18, "div", 66)(19, "span", 67);
221
+ i0.ɵɵelementStart(17, "div", 71)(18, "div", 67)(19, "span", 68);
197
222
  i0.ɵɵtext(20, "Template");
198
223
  i0.ɵɵelementEnd();
199
- i0.ɵɵelementStart(21, "span", 68);
200
- i0.ɵɵtemplate(22, PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Conditional_22_Template, 2, 0)(23, PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Conditional_23_Template, 2, 0);
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);
201
226
  i0.ɵɵelementEnd()();
202
- i0.ɵɵelementStart(24, "div", 66)(25, "span", 67);
227
+ i0.ɵɵelementStart(24, "div", 67)(25, "span", 68);
203
228
  i0.ɵɵtext(26, "Contents");
204
229
  i0.ɵɵelementEnd();
205
- i0.ɵɵelementStart(27, "span", 68);
230
+ i0.ɵɵelementStart(27, "span", 69);
206
231
  i0.ɵɵtext(28);
207
232
  i0.ɵɵelementEnd()()();
208
- i0.ɵɵelementStart(29, "div", 71)(30, "button", 72);
209
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Template_button_click_30_listener($event) { i0.ɵɵrestoreView(_r9); const prompt_r8 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.testPrompt(prompt_r8.ID, $event)); });
210
- i0.ɵɵelement(31, "i", 73);
211
- i0.ɵɵtext(32, " Run ");
212
- i0.ɵɵelementEnd();
213
- i0.ɵɵelementStart(33, "button", 74);
214
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Template_button_click_33_listener($event) { i0.ɵɵrestoreView(_r9); const prompt_r8 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(4); ctx_r0.openPrompt(prompt_r8.ID); return i0.ɵɵresetView($event.stopPropagation()); });
215
- i0.ɵɵelement(34, "i", 75);
216
- i0.ɵɵtext(35, " Open ");
217
- 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);
235
+ i0.ɵɵelementEnd()();
218
236
  } if (rf & 2) {
219
- const prompt_r8 = i0.ɵɵnextContext().$implicit;
237
+ const prompt_r9 = i0.ɵɵnextContext().$implicit;
220
238
  const ctx_r0 = i0.ɵɵnextContext(4);
221
239
  i0.ɵɵadvance(6);
222
- i0.ɵɵtextInterpolate(prompt_r8.CategoryName);
240
+ i0.ɵɵtextInterpolate(prompt_r9.CategoryName);
223
241
  i0.ɵɵadvance(5);
224
- i0.ɵɵtextInterpolate(prompt_r8.TypeName);
242
+ i0.ɵɵtextInterpolate(prompt_r9.TypeName);
225
243
  i0.ɵɵadvance(4);
226
- i0.ɵɵclassMap(ctx_r0.getStatusClass(prompt_r8.Status));
244
+ i0.ɵɵclassMap(ctx_r0.getStatusClass(prompt_r9.Status));
227
245
  i0.ɵɵadvance();
228
- i0.ɵɵtextInterpolate1(" ", prompt_r8.Status, " ");
246
+ i0.ɵɵtextInterpolate1(" ", prompt_r9.Status, " ");
229
247
  i0.ɵɵadvance(6);
230
- i0.ɵɵconditional(prompt_r8.TemplateEntity ? 22 : 23);
248
+ i0.ɵɵconditional(prompt_r9.TemplateEntity ? 22 : 23);
231
249
  i0.ɵɵadvance(6);
232
- i0.ɵɵtextInterpolate((prompt_r8.TemplateContents == null ? null : prompt_r8.TemplateContents.length) || 0);
250
+ i0.ɵɵtextInterpolate((prompt_r9.TemplateContents == null ? null : prompt_r9.TemplateContents.length) || 0);
233
251
  i0.ɵɵadvance(2);
234
- i0.ɵɵproperty("disabled", prompt_r8.Status !== "Active");
252
+ i0.ɵɵconditional(ctx_r0.UserCanReadPrompts ? 30 : -1);
235
253
  } }
236
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Template(rf, ctx) { if (rf & 1) {
237
- const _r7 = i0.ɵɵgetCurrentView();
238
- i0.ɵɵelementStart(0, "div", 57)(1, "div", 58);
239
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Template_div_click_1_listener() { const prompt_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.togglePromptExpansion(prompt_r8.ID)); });
240
- i0.ɵɵelementStart(2, "div", 59);
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);
241
259
  i0.ɵɵelement(3, "i");
242
260
  i0.ɵɵelementEnd();
243
- i0.ɵɵelementStart(4, "div", 60)(5, "h4", 61);
261
+ i0.ɵɵelementStart(4, "div", 61)(5, "h4", 62);
244
262
  i0.ɵɵtext(6);
245
263
  i0.ɵɵelementEnd();
246
- i0.ɵɵtemplate(7, PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_7_Template, 2, 1, "p", 62);
264
+ i0.ɵɵtemplate(7, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_7_Template, 2, 1, "p", 63);
247
265
  i0.ɵɵelementEnd();
248
- i0.ɵɵelement(8, "i", 63);
266
+ i0.ɵɵelement(8, "i", 64);
249
267
  i0.ɵɵelementEnd();
250
- i0.ɵɵtemplate(9, PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Conditional_9_Template, 36, 8, "div", 64);
268
+ i0.ɵɵtemplate(9, PromptManagementV2Component_Conditional_2_Conditional_25_Case_0_For_2_Conditional_9_Template, 31, 8, "div", 65);
251
269
  i0.ɵɵelementEnd();
252
270
  } if (rf & 2) {
253
- const prompt_r8 = ctx.$implicit;
271
+ const prompt_r9 = ctx.$implicit;
254
272
  const ctx_r0 = i0.ɵɵnextContext(4);
255
- i0.ɵɵclassProp("expanded", ctx_r0.expandedPromptId === prompt_r8.ID);
273
+ i0.ɵɵclassProp("expanded", ctx_r0.expandedPromptId === prompt_r9.ID);
256
274
  i0.ɵɵadvance(3);
257
- i0.ɵɵclassMap(ctx_r0.getPromptIcon(prompt_r8));
275
+ i0.ɵɵclassMap(ctx_r0.getPromptIcon(prompt_r9));
258
276
  i0.ɵɵadvance(3);
259
- i0.ɵɵtextInterpolate(prompt_r8.Name || "Unnamed Prompt");
277
+ i0.ɵɵtextInterpolate(prompt_r9.Name || "Unnamed Prompt");
260
278
  i0.ɵɵadvance();
261
- i0.ɵɵconditional(prompt_r8.Description ? 7 : -1);
279
+ i0.ɵɵconditional(prompt_r9.Description ? 7 : -1);
262
280
  i0.ɵɵadvance();
263
- i0.ɵɵclassProp("rotated", ctx_r0.expandedPromptId === prompt_r8.ID);
281
+ i0.ɵɵclassProp("rotated", ctx_r0.expandedPromptId === prompt_r9.ID);
264
282
  i0.ɵɵadvance();
265
- i0.ɵɵconditional(ctx_r0.expandedPromptId === prompt_r8.ID ? 9 : -1);
283
+ i0.ɵɵconditional(ctx_r0.expandedPromptId === prompt_r9.ID ? 9 : -1);
266
284
  } }
267
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_Template(rf, ctx) { if (rf & 1) {
268
- i0.ɵɵelementStart(0, "div", 53);
269
- i0.ɵɵrepeaterCreate(1, PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_For_2_Template, 10, 9, "div", 56, _forTrack0);
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);
270
288
  i0.ɵɵelementEnd();
271
289
  } if (rf & 2) {
272
290
  const ctx_r0 = i0.ɵɵnextContext(3);
273
291
  i0.ɵɵadvance();
274
292
  i0.ɵɵrepeater(ctx_r0.filteredPrompts);
275
293
  } }
276
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Conditional_13_Template(rf, ctx) { if (rf & 1) {
277
- i0.ɵɵelement(0, "i", 76);
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);
278
296
  } }
279
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Conditional_14_Template(rf, ctx) { if (rf & 1) {
280
- i0.ɵɵelement(0, "i", 77);
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);
281
299
  } }
282
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Template(rf, ctx) { if (rf & 1) {
283
- const _r10 = i0.ɵɵgetCurrentView();
284
- i0.ɵɵelementStart(0, "tr")(1, "td")(2, "div", 79);
300
+ function PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Conditional_16_Template(rf, ctx) { if (rf & 1) {
301
+ 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);
305
+ 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);
309
+ i0.ɵɵelementEnd();
310
+ } if (rf & 2) {
311
+ const prompt_r12 = i0.ɵɵnextContext().$implicit;
312
+ i0.ɵɵproperty("disabled", prompt_r12.Status !== "Active");
313
+ } }
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);
285
316
  i0.ɵɵelement(3, "i");
286
317
  i0.ɵɵtext(4);
287
318
  i0.ɵɵelementEnd()();
@@ -291,42 +322,37 @@ function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_
291
322
  i0.ɵɵelementStart(7, "td");
292
323
  i0.ɵɵtext(8);
293
324
  i0.ɵɵelementEnd();
294
- i0.ɵɵelementStart(9, "td")(10, "span", 80);
325
+ i0.ɵɵelementStart(9, "td")(10, "span", 81);
295
326
  i0.ɵɵtext(11);
296
327
  i0.ɵɵelementEnd()();
297
328
  i0.ɵɵelementStart(12, "td");
298
- i0.ɵɵtemplate(13, PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Conditional_13_Template, 1, 0, "i", 76)(14, PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Conditional_14_Template, 1, 0, "i", 77);
299
- i0.ɵɵelementEnd();
300
- i0.ɵɵelementStart(15, "td")(16, "button", 81);
301
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Template_button_click_16_listener($event) { const prompt_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.testPrompt(prompt_r11.ID, $event)); });
302
- i0.ɵɵelement(17, "i", 73);
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);
303
330
  i0.ɵɵelementEnd();
304
- i0.ɵɵelementStart(18, "button", 82);
305
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Template_button_click_18_listener() { const prompt_r11 = i0.ɵɵrestoreView(_r10).$implicit; const ctx_r0 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r0.openPrompt(prompt_r11.ID)); });
306
- i0.ɵɵelement(19, "i", 75);
307
- 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);
333
+ i0.ɵɵelementEnd()();
308
334
  } if (rf & 2) {
309
- const prompt_r11 = ctx.$implicit;
335
+ const prompt_r12 = ctx.$implicit;
310
336
  const ctx_r0 = i0.ɵɵnextContext(4);
311
337
  i0.ɵɵadvance(3);
312
- i0.ɵɵclassMap(ctx_r0.getPromptIcon(prompt_r11));
338
+ i0.ɵɵclassMap(ctx_r0.getPromptIcon(prompt_r12));
313
339
  i0.ɵɵadvance();
314
- i0.ɵɵtextInterpolate1(" ", prompt_r11.Name, " ");
340
+ i0.ɵɵtextInterpolate1(" ", prompt_r12.Name, " ");
315
341
  i0.ɵɵadvance(2);
316
- i0.ɵɵtextInterpolate(prompt_r11.CategoryName);
342
+ i0.ɵɵtextInterpolate(prompt_r12.CategoryName);
317
343
  i0.ɵɵadvance(2);
318
- i0.ɵɵtextInterpolate(prompt_r11.TypeName);
344
+ i0.ɵɵtextInterpolate(prompt_r12.TypeName);
319
345
  i0.ɵɵadvance(2);
320
- i0.ɵɵclassMap(ctx_r0.getStatusClass(prompt_r11.Status));
346
+ i0.ɵɵclassMap(ctx_r0.getStatusClass(prompt_r12.Status));
321
347
  i0.ɵɵadvance();
322
- i0.ɵɵtextInterpolate1(" ", prompt_r11.Status, " ");
348
+ i0.ɵɵtextInterpolate1(" ", prompt_r12.Status, " ");
323
349
  i0.ɵɵadvance(2);
324
- i0.ɵɵconditional(prompt_r11.TemplateEntity ? 13 : 14);
350
+ i0.ɵɵconditional(prompt_r12.TemplateEntity ? 13 : 14);
325
351
  i0.ɵɵadvance(3);
326
- i0.ɵɵproperty("disabled", prompt_r11.Status !== "Active");
352
+ i0.ɵɵconditional(ctx_r0.UserCanReadPrompts ? 16 : -1);
327
353
  } }
328
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_Template(rf, ctx) { if (rf & 1) {
329
- i0.ɵɵelementStart(0, "div", 54)(1, "table", 78)(2, "thead")(3, "tr")(4, "th");
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");
330
356
  i0.ɵɵtext(5, "Name");
331
357
  i0.ɵɵelementEnd();
332
358
  i0.ɵɵelementStart(6, "th");
@@ -345,25 +371,33 @@ function PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_Templat
345
371
  i0.ɵɵtext(15, "Actions");
346
372
  i0.ɵɵelementEnd()()();
347
373
  i0.ɵɵelementStart(16, "tbody");
348
- i0.ɵɵrepeaterCreate(17, PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_For_18_Template, 20, 10, "tr", null, _forTrack0);
374
+ i0.ɵɵrepeaterCreate(17, PromptManagementV2Component_Conditional_2_Conditional_25_Case_1_For_18_Template, 17, 10, "tr", null, _forTrack0);
349
375
  i0.ɵɵelementEnd()()();
350
376
  } if (rf & 2) {
351
377
  const ctx_r0 = i0.ɵɵnextContext(3);
352
378
  i0.ɵɵadvance(17);
353
379
  i0.ɵɵrepeater(ctx_r0.filteredPrompts);
354
380
  } }
355
- function PromptManagementV2Component_Conditional_2_Conditional_27_Case_2_Template(rf, ctx) { if (rf & 1) {
356
- const _r12 = i0.ɵɵgetCurrentView();
357
- i0.ɵɵelementStart(0, "div", 55)(1, "app-model-prompt-priority-matrix", 83);
358
- i0.ɵɵlistener("promptSelected", function PromptManagementV2Component_Conditional_2_Conditional_27_Case_2_Template_app_model_prompt_priority_matrix_promptSelected_1_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r0.openPrompt($event.ID)); });
359
- i0.ɵɵelementEnd()();
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();
386
+ } 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();
360
394
  } if (rf & 2) {
361
395
  const ctx_r0 = i0.ɵɵnextContext(3);
362
396
  i0.ɵɵadvance();
363
- i0.ɵɵproperty("selectedPrompts", ctx_r0.filteredPromptsAsEntities);
397
+ i0.ɵɵconditional(ctx_r0.UserCanReadPrompts ? 1 : -1);
364
398
  } }
365
- function PromptManagementV2Component_Conditional_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
366
- i0.ɵɵtemplate(0, PromptManagementV2Component_Conditional_2_Conditional_27_Case_0_Template, 3, 0, "div", 53)(1, PromptManagementV2Component_Conditional_2_Conditional_27_Case_1_Template, 19, 0, "div", 54)(2, PromptManagementV2Component_Conditional_2_Conditional_27_Case_2_Template, 2, 1, "div", 55);
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);
367
401
  } if (rf & 2) {
368
402
  let tmp_2_0;
369
403
  const ctx_r0 = i0.ɵɵnextContext(2);
@@ -395,15 +429,12 @@ function PromptManagementV2Component_Conditional_2_Template(rf, ctx) { if (rf &
395
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")); });
396
430
  i0.ɵɵelement(18, "i", 20);
397
431
  i0.ɵɵelementEnd()();
398
- i0.ɵɵelementStart(19, "button", 21);
399
- i0.ɵɵlistener("click", function PromptManagementV2Component_Conditional_2_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.createNewPrompt()); });
400
- i0.ɵɵelement(20, "i", 22);
401
- i0.ɵɵtext(21, " New Prompt ");
402
- i0.ɵɵelementEnd()()();
403
- i0.ɵɵelementStart(22, "kendo-splitter", 23);
404
- i0.ɵɵtemplate(23, PromptManagementV2Component_Conditional_2_Conditional_23_Template, 51, 6, "kendo-splitter-pane", 24);
405
- i0.ɵɵelementStart(24, "kendo-splitter-pane")(25, "div", 25);
406
- i0.ɵɵtemplate(26, PromptManagementV2Component_Conditional_2_Conditional_26_Template, 7, 2, "div", 26)(27, PromptManagementV2Component_Conditional_2_Conditional_27_Template, 3, 1);
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);
407
438
  i0.ɵɵelementEnd()()();
408
439
  } if (rf & 2) {
409
440
  const ctx_r0 = i0.ɵɵnextContext();
@@ -417,14 +448,17 @@ function PromptManagementV2Component_Conditional_2_Template(rf, ctx) { if (rf &
417
448
  i0.ɵɵclassProp("active", ctx_r0.viewMode === "list");
418
449
  i0.ɵɵadvance(2);
419
450
  i0.ɵɵclassProp("active", ctx_r0.viewMode === "priority-matrix");
420
- i0.ɵɵadvance(6);
421
- i0.ɵɵconditional(ctx_r0.showFilters ? 23 : -1);
451
+ i0.ɵɵadvance(2);
452
+ i0.ɵɵconditional(ctx_r0.UserCanCreatePrompts ? 19 : -1);
453
+ i0.ɵɵadvance(2);
454
+ i0.ɵɵconditional(ctx_r0.showFilters ? 21 : -1);
422
455
  i0.ɵɵadvance(3);
423
- i0.ɵɵconditional(ctx_r0.filteredPrompts.length === 0 ? 26 : 27);
456
+ i0.ɵɵconditional(ctx_r0.filteredPrompts.length === 0 ? 24 : 25);
424
457
  } }
425
458
  export class PromptManagementV2Component {
426
459
  sharedService;
427
460
  testHarnessService;
461
+ router;
428
462
  openEntityRecord = new EventEmitter();
429
463
  stateChange = new EventEmitter();
430
464
  initialState = null;
@@ -456,9 +490,79 @@ export class PromptManagementV2Component {
456
490
  loadingMessageInterval;
457
491
  destroy$ = new Subject();
458
492
  selectedPromptForTest = null;
459
- constructor(sharedService, testHarnessService) {
493
+ // === Permission Checks ===
494
+ /** Cache for permission checks to avoid repeated calculations */
495
+ _permissionCache = new Map();
496
+ _metadata = new Metadata();
497
+ /** Check if user can create AI Prompts */
498
+ get UserCanCreatePrompts() {
499
+ return this.checkEntityPermission('AI Prompts', 'Create');
500
+ }
501
+ /** Check if user can read AI Prompts */
502
+ get UserCanReadPrompts() {
503
+ return this.checkEntityPermission('AI Prompts', 'Read');
504
+ }
505
+ /** Check if user can update AI Prompts */
506
+ get UserCanUpdatePrompts() {
507
+ return this.checkEntityPermission('AI Prompts', 'Update');
508
+ }
509
+ /** Check if user can delete AI Prompts */
510
+ get UserCanDeletePrompts() {
511
+ return this.checkEntityPermission('AI Prompts', 'Delete');
512
+ }
513
+ /**
514
+ * Helper method to check entity permissions with caching
515
+ * @param entityName - The name of the entity to check permissions for
516
+ * @param permissionType - The type of permission to check (Create, Read, Update, Delete)
517
+ * @returns boolean indicating if user has the permission
518
+ */
519
+ checkEntityPermission(entityName, permissionType) {
520
+ const cacheKey = `${entityName}_${permissionType}`;
521
+ if (this._permissionCache.has(cacheKey)) {
522
+ return this._permissionCache.get(cacheKey);
523
+ }
524
+ try {
525
+ const entityInfo = this._metadata.Entities.find(e => e.Name === entityName);
526
+ if (!entityInfo) {
527
+ console.warn(`Entity '${entityName}' not found for permission check`);
528
+ this._permissionCache.set(cacheKey, false);
529
+ return false;
530
+ }
531
+ const userPermissions = entityInfo.GetUserPermisions(this._metadata.CurrentUser);
532
+ let hasPermission = false;
533
+ switch (permissionType) {
534
+ case 'Create':
535
+ hasPermission = userPermissions.CanCreate;
536
+ break;
537
+ case 'Read':
538
+ hasPermission = userPermissions.CanRead;
539
+ break;
540
+ case 'Update':
541
+ hasPermission = userPermissions.CanUpdate;
542
+ break;
543
+ case 'Delete':
544
+ hasPermission = userPermissions.CanDelete;
545
+ break;
546
+ }
547
+ this._permissionCache.set(cacheKey, hasPermission);
548
+ return hasPermission;
549
+ }
550
+ catch (error) {
551
+ console.error(`Error checking ${permissionType} permission for ${entityName}:`, error);
552
+ this._permissionCache.set(cacheKey, false);
553
+ return false;
554
+ }
555
+ }
556
+ /**
557
+ * Clears the permission cache. Call this when user context changes or permissions are updated.
558
+ */
559
+ clearPermissionCache() {
560
+ this._permissionCache.clear();
561
+ }
562
+ constructor(sharedService, testHarnessService, router) {
460
563
  this.sharedService = sharedService;
461
564
  this.testHarnessService = testHarnessService;
565
+ this.router = router;
462
566
  }
463
567
  ngOnInit() {
464
568
  this.setupSearchListener();
@@ -544,7 +648,7 @@ export class PromptManagementV2Component {
544
648
  }
545
649
  catch (error) {
546
650
  console.error('Error loading prompt data:', error);
547
- this.sharedService.CreateSimpleNotification('Error loading prompts', 'error', 3000);
651
+ MJNotificationService.Instance.CreateSimpleNotification('Error loading prompts', 'error', 3000);
548
652
  }
549
653
  finally {
550
654
  this.isLoading = false;
@@ -647,26 +751,21 @@ export class PromptManagementV2Component {
647
751
  // No longer needed - window manages its own closure
648
752
  this.selectedPromptForTest = null;
649
753
  }
650
- async createNewPrompt() {
754
+ createNewPrompt() {
651
755
  try {
652
- const md = new Metadata();
653
- const newPrompt = await md.GetEntityObject('AI Prompts');
654
- if (newPrompt) {
655
- newPrompt.Name = 'New Prompt';
656
- newPrompt.Status = 'Active';
657
- if (await newPrompt.Save()) {
658
- this.openEntityRecord.emit({
659
- entityName: 'AI Prompts',
660
- recordId: newPrompt.ID
661
- });
662
- // Reload the data
663
- await this.loadInitialData();
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
664
763
  }
665
- }
764
+ });
666
765
  }
667
766
  catch (error) {
668
- console.error('Error creating new prompt:', error);
669
- this.sharedService.CreateSimpleNotification('Error creating prompt', 'error', 3000);
767
+ console.error('Error navigating to new prompt form:', error);
768
+ MJNotificationService.Instance.CreateSimpleNotification('Error opening new prompt form', 'error', 3000);
670
769
  }
671
770
  }
672
771
  getPromptIcon(prompt) {
@@ -713,25 +812,25 @@ export class PromptManagementV2Component {
713
812
  this.searchSubject.next('');
714
813
  this.applyFilters();
715
814
  }
716
- static ɵfac = function PromptManagementV2Component_Factory(t) { return new (t || PromptManagementV2Component)(i0.ɵɵdirectiveInject(i1.SharedService), i0.ɵɵdirectiveInject(i2.AITestHarnessDialogService)); };
717
- 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", 3, "click"], [1, "fa-solid", "fa-plus"], ["orientation", "horizontal"], ["size", "320", "min", "250", "max", "400"], [1, "content-area"], [1, "empty-state"], [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"], ["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, "fa-solid", "fa-check-circle", "text-success"], [1, "fa-solid", "fa-times-circle", "text-muted"], [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, "promptSelected", "selectedPrompts"]], template: function PromptManagementV2Component_Template(rf, ctx) { if (rf & 1) {
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) {
718
817
  i0.ɵɵelementStart(0, "div", 0);
719
- i0.ɵɵtemplate(1, PromptManagementV2Component_Conditional_1_Template, 8, 1, "div", 1)(2, PromptManagementV2Component_Conditional_2_Template, 28, 10);
818
+ i0.ɵɵtemplate(1, PromptManagementV2Component_Conditional_1_Template, 8, 1, "div", 1)(2, PromptManagementV2Component_Conditional_2_Template, 26, 11);
720
819
  i0.ɵɵelementEnd();
721
820
  } if (rf & 2) {
722
821
  i0.ɵɵadvance();
723
822
  i0.ɵɵconditional(ctx.isLoading ? 1 : 2);
724
- } }, dependencies: [i3.NgSelectOption, i3.ɵNgSelectMultipleOption, i4.SplitterComponent, i4.SplitterPaneComponent, i5.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}"] });
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}"] });
725
824
  }
726
825
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptManagementV2Component, [{
727
826
  type: Component,
728
- 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 <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 </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) {\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 <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 </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 <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 </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n \n @case ('priority-matrix') {\n <div class=\"priority-matrix-container\">\n <app-model-prompt-priority-matrix \n [selectedPrompts]=\"filteredPromptsAsEntities\"\n (promptSelected)=\"openPrompt($event.ID)\">\n </app-model-prompt-priority-matrix>\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}"] }]
729
- }], () => [{ type: i1.SharedService }, { type: i2.AITestHarnessDialogService }], { openEntityRecord: [{
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: [{
730
829
  type: Output
731
830
  }], stateChange: [{
732
831
  type: Output
733
832
  }], initialState: [{
734
833
  type: Input
735
834
  }] }); })();
736
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementV2Component, { className: "PromptManagementV2Component", filePath: "src/AI/components/prompts/prompt-management-v2.component.ts", lineNumber: 22 }); })();
835
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PromptManagementV2Component, { className: "PromptManagementV2Component", filePath: "src/AI/components/prompts/prompt-management-v2.component.ts", lineNumber: 24 }); })();
737
836
  //# sourceMappingURL=prompt-management-v2.component.js.map