@memberjunction/ng-dashboards 2.42.0 → 2.43.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.
@@ -20,6 +20,8 @@ import * as i3 from "@progress/kendo-angular-layout";
20
20
  import * as i4 from "@memberjunction/ng-container-directives";
21
21
  import * as i5 from "@memberjunction/ng-code-editor";
22
22
  import * as i6 from "./prompt-filter-panel.component";
23
+ import * as i7 from "./model-prompt-priority-matrix.component";
24
+ import * as i8 from "./prompt-version-control.component";
23
25
  const _forTrack0 = ($index, $item) => $item.prompt.ID || $index;
24
26
  const _forTrack1 = ($index, $item) => $item.ID;
25
27
  function PromptManagementComponent_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
@@ -28,31 +30,31 @@ function PromptManagementComponent_Conditional_1_Conditional_5_Template(rf, ctx)
28
30
  function PromptManagementComponent_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
29
31
  i0.ɵɵtext(0, " Show Filters ");
30
32
  } }
31
- function PromptManagementComponent_Conditional_1_Conditional_19_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelementStart(0, "div", 18)(1, "div", 21)(2, "div", 22);
33
- i0.ɵɵelement(3, "div", 23)(4, "div", 23)(5, "div", 23);
33
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_5_Template(rf, ctx) { if (rf & 1) {
34
+ i0.ɵɵelementStart(0, "div", 28)(1, "div", 31)(2, "div", 32);
35
+ i0.ɵɵelement(3, "div", 33)(4, "div", 33)(5, "div", 33);
34
36
  i0.ɵɵelementEnd();
35
- i0.ɵɵelementStart(6, "div", 24);
37
+ i0.ɵɵelementStart(6, "div", 34);
36
38
  i0.ɵɵtext(7);
37
39
  i0.ɵɵelementEnd()()();
38
40
  } if (rf & 2) {
39
- const ctx_r1 = i0.ɵɵnextContext(2);
41
+ const ctx_r1 = i0.ɵɵnextContext(3);
40
42
  i0.ɵɵadvance(7);
41
43
  i0.ɵɵtextInterpolate(ctx_r1.loadingMessage);
42
44
  } }
43
- function PromptManagementComponent_Conditional_1_Conditional_20_Template(rf, ctx) { if (rf & 1) {
44
- i0.ɵɵelementStart(0, "div", 19)(1, "p", 25);
45
- i0.ɵɵelement(2, "i", 26);
45
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_6_Template(rf, ctx) { if (rf & 1) {
46
+ i0.ɵɵelementStart(0, "div", 29)(1, "p", 35);
47
+ i0.ɵɵelement(2, "i", 36);
46
48
  i0.ɵɵtext(3);
47
49
  i0.ɵɵelementEnd()();
48
50
  } if (rf & 2) {
49
- const ctx_r1 = i0.ɵɵnextContext(2);
51
+ const ctx_r1 = i0.ɵɵnextContext(3);
50
52
  i0.ɵɵadvance(3);
51
53
  i0.ɵɵtextInterpolate1(" ", ctx_r1.error, " ");
52
54
  } }
53
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_1_Template(rf, ctx) { if (rf & 1) {
54
- i0.ɵɵelementStart(0, "div", 27);
55
- i0.ɵɵelement(1, "i", 29);
55
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
56
+ i0.ɵɵelementStart(0, "div", 37);
57
+ i0.ɵɵelement(1, "i", 39);
56
58
  i0.ɵɵelementStart(2, "h3");
57
59
  i0.ɵɵtext(3, "No prompts found");
58
60
  i0.ɵɵelementEnd();
@@ -60,137 +62,180 @@ function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_1_Te
60
62
  i0.ɵɵtext(5, "No prompts match your current filters. Try adjusting your search criteria or create a new prompt.");
61
63
  i0.ɵɵelementEnd()();
62
64
  } }
63
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
64
- i0.ɵɵelementStart(0, "span", 39);
65
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
66
+ i0.ɵɵelementStart(0, "span", 49);
65
67
  i0.ɵɵtext(1);
66
68
  i0.ɵɵelementEnd();
67
69
  } if (rf & 2) {
68
- const promptWithTemplate_r4 = i0.ɵɵnextContext().$implicit;
70
+ const promptWithTemplate_r5 = i0.ɵɵnextContext().$implicit;
69
71
  i0.ɵɵadvance();
70
- i0.ɵɵtextInterpolate1("\u2022 ", promptWithTemplate_r4.type.Name, "");
72
+ i0.ɵɵtextInterpolate1("\u2022 ", promptWithTemplate_r5.type.Name, "");
71
73
  } }
72
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
73
- i0.ɵɵelementStart(0, "p", 41);
74
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
75
+ i0.ɵɵelementStart(0, "p", 51);
74
76
  i0.ɵɵtext(1);
75
77
  i0.ɵɵelementEnd();
76
78
  } if (rf & 2) {
77
- const promptWithTemplate_r4 = i0.ɵɵnextContext().$implicit;
79
+ const promptWithTemplate_r5 = i0.ɵɵnextContext().$implicit;
78
80
  i0.ɵɵadvance();
79
- i0.ɵɵtextInterpolate(promptWithTemplate_r4.prompt.Description);
81
+ i0.ɵɵtextInterpolate(promptWithTemplate_r5.prompt.Description);
80
82
  } }
81
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵelementStart(0, "p", 42);
83
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
84
+ i0.ɵɵelementStart(0, "p", 52);
83
85
  i0.ɵɵtext(1, "No description provided");
84
86
  i0.ɵɵelementEnd();
85
87
  } }
86
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
87
- i0.ɵɵelementStart(0, "div", 54)(1, "small");
88
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
89
+ i0.ɵɵelementStart(0, "div", 64)(1, "small");
88
90
  i0.ɵɵtext(2);
89
91
  i0.ɵɵelementEnd()();
90
92
  } if (rf & 2) {
91
- const promptWithTemplate_r4 = i0.ɵɵnextContext(2).$implicit;
93
+ const promptWithTemplate_r5 = i0.ɵɵnextContext(2).$implicit;
92
94
  i0.ɵɵadvance(2);
93
- i0.ɵɵtextInterpolate1(" Template content: ", (promptWithTemplate_r4.templateContent.TemplateText || "").length, " characters ");
95
+ i0.ɵɵtextInterpolate1(" Template content: ", (promptWithTemplate_r5.templateContent.TemplateText || "").length, " characters ");
94
96
  } }
95
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
96
- i0.ɵɵelementStart(0, "div", 52);
97
- i0.ɵɵelement(1, "i", 53);
97
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
98
+ i0.ɵɵelementStart(0, "div", 62);
99
+ i0.ɵɵelement(1, "i", 63);
98
100
  i0.ɵɵelementStart(2, "span");
99
101
  i0.ɵɵtext(3);
100
102
  i0.ɵɵelementEnd()();
101
- i0.ɵɵtemplate(4, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_18_Conditional_4_Template, 3, 1, "div", 54);
103
+ i0.ɵɵtemplate(4, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_18_Conditional_4_Template, 3, 1, "div", 64);
102
104
  } if (rf & 2) {
103
- const promptWithTemplate_r4 = i0.ɵɵnextContext().$implicit;
105
+ const promptWithTemplate_r5 = i0.ɵɵnextContext().$implicit;
104
106
  i0.ɵɵadvance(3);
105
- i0.ɵɵtextInterpolate(promptWithTemplate_r4.template.Name);
107
+ i0.ɵɵtextInterpolate(promptWithTemplate_r5.template.Name);
106
108
  i0.ɵɵadvance();
107
- i0.ɵɵconditional(promptWithTemplate_r4.templateContent ? 4 : -1);
109
+ i0.ɵɵconditional(promptWithTemplate_r5.templateContent ? 4 : -1);
108
110
  } }
109
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
110
- i0.ɵɵelementStart(0, "div", 44);
111
- i0.ɵɵelement(1, "i", 53);
111
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelementStart(0, "div", 54);
113
+ i0.ɵɵelement(1, "i", 63);
112
114
  i0.ɵɵelementStart(2, "span");
113
115
  i0.ɵɵtext(3, "No template assigned");
114
116
  i0.ɵɵelementEnd()();
115
117
  } }
116
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
117
- const _r3 = i0.ɵɵgetCurrentView();
118
- i0.ɵɵelementStart(0, "div", 31);
119
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Template_div_click_0_listener() { const promptWithTemplate_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.viewPrompt(promptWithTemplate_r4)); });
120
- i0.ɵɵelementStart(1, "div", 32)(2, "div", 33)(3, "div", 34);
118
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
119
+ const _r4 = i0.ɵɵgetCurrentView();
120
+ i0.ɵɵelementStart(0, "div", 41);
121
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Template_div_click_0_listener() { const promptWithTemplate_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.viewPrompt(promptWithTemplate_r5)); });
122
+ i0.ɵɵelementStart(1, "div", 42)(2, "div", 43)(3, "div", 44);
121
123
  i0.ɵɵelement(4, "i");
122
124
  i0.ɵɵelementEnd();
123
- i0.ɵɵelementStart(5, "div", 35)(6, "h4", 36);
125
+ i0.ɵɵelementStart(5, "div", 45)(6, "h4", 46);
124
126
  i0.ɵɵtext(7);
125
127
  i0.ɵɵelementEnd();
126
- i0.ɵɵelementStart(8, "div", 37)(9, "span", 38);
128
+ i0.ɵɵelementStart(8, "div", 47)(9, "span", 48);
127
129
  i0.ɵɵtext(10);
128
130
  i0.ɵɵelementEnd();
129
- i0.ɵɵtemplate(11, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_11_Template, 2, 1, "span", 39);
131
+ i0.ɵɵtemplate(11, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_11_Template, 2, 1, "span", 49);
130
132
  i0.ɵɵelementEnd()()();
131
133
  i0.ɵɵelementStart(12, "div");
132
134
  i0.ɵɵtext(13);
133
135
  i0.ɵɵelementEnd()();
134
- i0.ɵɵelementStart(14, "div", 40);
135
- i0.ɵɵtemplate(15, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_15_Template, 2, 1, "p", 41)(16, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_16_Template, 2, 0, "p", 42);
136
- i0.ɵɵelementStart(17, "div", 43);
137
- i0.ɵɵtemplate(18, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_18_Template, 5, 2)(19, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Conditional_19_Template, 4, 0, "div", 44);
136
+ i0.ɵɵelementStart(14, "div", 50);
137
+ i0.ɵɵtemplate(15, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_15_Template, 2, 1, "p", 51)(16, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_16_Template, 2, 0, "p", 52);
138
+ i0.ɵɵelementStart(17, "div", 53);
139
+ i0.ɵɵtemplate(18, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_18_Template, 5, 2)(19, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Conditional_19_Template, 4, 0, "div", 54);
138
140
  i0.ɵɵelementEnd()();
139
- i0.ɵɵelementStart(20, "div", 45);
140
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Template_div_click_20_listener($event) { i0.ɵɵrestoreView(_r3); return i0.ɵɵresetView($event.stopPropagation()); });
141
- i0.ɵɵelementStart(21, "button", 46);
142
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Template_button_click_21_listener() { const promptWithTemplate_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.viewPrompt(promptWithTemplate_r4)); });
143
- i0.ɵɵelement(22, "i", 47);
141
+ i0.ɵɵelementStart(20, "div", 55);
142
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Template_div_click_20_listener($event) { i0.ɵɵrestoreView(_r4); return i0.ɵɵresetView($event.stopPropagation()); });
143
+ i0.ɵɵelementStart(21, "button", 56);
144
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Template_button_click_21_listener() { const promptWithTemplate_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.viewPrompt(promptWithTemplate_r5)); });
145
+ i0.ɵɵelement(22, "i", 57);
144
146
  i0.ɵɵtext(23, " View ");
145
147
  i0.ɵɵelementEnd();
146
- i0.ɵɵelementStart(24, "button", 48);
147
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Template_button_click_24_listener() { const promptWithTemplate_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.editPrompt(promptWithTemplate_r4)); });
148
- i0.ɵɵelement(25, "i", 49);
148
+ i0.ɵɵelementStart(24, "button", 58);
149
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Template_button_click_24_listener() { const promptWithTemplate_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.editPrompt(promptWithTemplate_r5)); });
150
+ i0.ɵɵelement(25, "i", 59);
149
151
  i0.ɵɵtext(26, " Edit ");
150
152
  i0.ɵɵelementEnd();
151
- i0.ɵɵelementStart(27, "button", 50);
152
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Template_button_click_27_listener() { const promptWithTemplate_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deletePrompt(promptWithTemplate_r4)); });
153
- i0.ɵɵelement(28, "i", 51);
153
+ i0.ɵɵelementStart(27, "button", 60);
154
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Template_button_click_27_listener() { const promptWithTemplate_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.deletePrompt(promptWithTemplate_r5)); });
155
+ i0.ɵɵelement(28, "i", 61);
154
156
  i0.ɵɵtext(29, " Delete ");
155
157
  i0.ɵɵelementEnd()()();
156
158
  } if (rf & 2) {
157
- const promptWithTemplate_r4 = ctx.$implicit;
158
- const ctx_r1 = i0.ɵɵnextContext(4);
159
+ const promptWithTemplate_r5 = ctx.$implicit;
160
+ const ctx_r1 = i0.ɵɵnextContext(5);
159
161
  i0.ɵɵadvance(4);
160
162
  i0.ɵɵclassMap(ctx_r1.getPromptIcon());
161
163
  i0.ɵɵadvance(3);
162
- i0.ɵɵtextInterpolate(promptWithTemplate_r4.prompt.Name);
164
+ i0.ɵɵtextInterpolate(promptWithTemplate_r5.prompt.Name);
163
165
  i0.ɵɵadvance(3);
164
- i0.ɵɵtextInterpolate(ctx_r1.getCategoryName(promptWithTemplate_r4.prompt.CategoryID));
166
+ i0.ɵɵtextInterpolate(ctx_r1.getCategoryName(promptWithTemplate_r5.prompt.CategoryID));
165
167
  i0.ɵɵadvance();
166
- i0.ɵɵconditional(promptWithTemplate_r4.type ? 11 : -1);
168
+ i0.ɵɵconditional(promptWithTemplate_r5.type ? 11 : -1);
167
169
  i0.ɵɵadvance();
168
- i0.ɵɵclassMapInterpolate1("status-badge status-", promptWithTemplate_r4.prompt.Status.toLowerCase(), "");
170
+ i0.ɵɵclassMapInterpolate1("status-badge status-", promptWithTemplate_r5.prompt.Status.toLowerCase(), "");
169
171
  i0.ɵɵadvance();
170
- i0.ɵɵtextInterpolate1(" ", promptWithTemplate_r4.prompt.Status, " ");
172
+ i0.ɵɵtextInterpolate1(" ", promptWithTemplate_r5.prompt.Status, " ");
171
173
  i0.ɵɵadvance(2);
172
- i0.ɵɵconditional(promptWithTemplate_r4.prompt.Description ? 15 : 16);
174
+ i0.ɵɵconditional(promptWithTemplate_r5.prompt.Description ? 15 : 16);
173
175
  i0.ɵɵadvance(3);
174
- i0.ɵɵconditional(promptWithTemplate_r4.template ? 18 : 19);
176
+ i0.ɵɵconditional(promptWithTemplate_r5.template ? 18 : 19);
175
177
  } }
176
- function PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_Template(rf, ctx) { if (rf & 1) {
177
- i0.ɵɵelementStart(0, "div", 28);
178
- i0.ɵɵrepeaterCreate(1, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_For_2_Template, 30, 11, "div", 30, _forTrack0);
178
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
179
+ i0.ɵɵelementStart(0, "div", 38);
180
+ i0.ɵɵrepeaterCreate(1, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_For_2_Template, 30, 11, "div", 40, _forTrack0);
179
181
  i0.ɵɵelementEnd();
180
182
  } if (rf & 2) {
181
- const ctx_r1 = i0.ɵɵnextContext(3);
183
+ const ctx_r1 = i0.ɵɵnextContext(4);
182
184
  i0.ɵɵadvance();
183
185
  i0.ɵɵrepeater(ctx_r1.filteredPrompts);
184
186
  } }
185
- function PromptManagementComponent_Conditional_1_Conditional_21_Template(rf, ctx) { if (rf & 1) {
186
- i0.ɵɵelementStart(0, "div", 20);
187
- i0.ɵɵtemplate(1, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_1_Template, 6, 0, "div", 27)(2, PromptManagementComponent_Conditional_1_Conditional_21_Conditional_2_Template, 3, 0, "div", 28);
187
+ function PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Template(rf, ctx) { if (rf & 1) {
188
+ i0.ɵɵelementStart(0, "div", 30);
189
+ i0.ɵɵtemplate(1, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_1_Template, 6, 0, "div", 37)(2, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Conditional_2_Template, 3, 0, "div", 38);
188
190
  i0.ɵɵelementEnd();
189
191
  } if (rf & 2) {
190
- const ctx_r1 = i0.ɵɵnextContext(2);
192
+ const ctx_r1 = i0.ɵɵnextContext(3);
191
193
  i0.ɵɵadvance();
192
194
  i0.ɵɵconditional(ctx_r1.filteredPrompts.length === 0 ? 1 : 2);
193
195
  } }
196
+ function PromptManagementComponent_Conditional_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
197
+ const _r3 = i0.ɵɵgetCurrentView();
198
+ i0.ɵɵelementStart(0, "kendo-splitter", 23);
199
+ i0.ɵɵlistener("layoutChange", function PromptManagementComponent_Conditional_1_Conditional_24_Template_kendo_splitter_layoutChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onMainSplitterChange($event)); });
200
+ i0.ɵɵelementStart(1, "kendo-splitter-pane", 24)(2, "mj-prompt-filter-panel", 25);
201
+ i0.ɵɵlistener("filtersChange", function PromptManagementComponent_Conditional_1_Conditional_24_Template_mj_prompt_filter_panel_filtersChange_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onFiltersChange($event)); })("filterChange", function PromptManagementComponent_Conditional_1_Conditional_24_Template_mj_prompt_filter_panel_filterChange_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onFilterChange()); })("resetFilters", function PromptManagementComponent_Conditional_1_Conditional_24_Template_mj_prompt_filter_panel_resetFilters_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onResetFilters()); })("closePanel", function PromptManagementComponent_Conditional_1_Conditional_24_Template_mj_prompt_filter_panel_closePanel_2_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleFilterPanel()); });
202
+ i0.ɵɵelementEnd()();
203
+ i0.ɵɵelementStart(3, "kendo-splitter-pane", 26)(4, "div", 27);
204
+ i0.ɵɵtemplate(5, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_5_Template, 8, 1, "div", 28)(6, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_6_Template, 4, 1, "div", 29)(7, PromptManagementComponent_Conditional_1_Conditional_24_Conditional_7_Template, 3, 1, "div", 30);
205
+ i0.ɵɵelementEnd()()();
206
+ } if (rf & 2) {
207
+ const ctx_r1 = i0.ɵɵnextContext(2);
208
+ i0.ɵɵadvance();
209
+ i0.ɵɵproperty("size", ctx_r1.filterPanelVisible ? "320px" : "0px")("collapsible", false)("resizable", ctx_r1.filterPanelVisible)("scrollable", false)("hidden", !ctx_r1.filterPanelVisible);
210
+ i0.ɵɵadvance();
211
+ i0.ɵɵproperty("prompts", ctx_r1.promptsWithTemplates)("filteredPrompts", ctx_r1.filteredPrompts)("categories", ctx_r1.categories)("types", ctx_r1.types)("filters", ctx_r1.currentFilters);
212
+ i0.ɵɵadvance();
213
+ i0.ɵɵproperty("resizable", true)("scrollable", false);
214
+ i0.ɵɵadvance(2);
215
+ i0.ɵɵconditional(ctx_r1.isLoading ? 5 : -1);
216
+ i0.ɵɵadvance();
217
+ i0.ɵɵconditional(ctx_r1.error ? 6 : -1);
218
+ i0.ɵɵadvance();
219
+ i0.ɵɵconditional(!ctx_r1.isLoading && !ctx_r1.error ? 7 : -1);
220
+ } }
221
+ function PromptManagementComponent_Conditional_1_Conditional_25_Template(rf, ctx) { if (rf & 1) {
222
+ const _r6 = i0.ɵɵgetCurrentView();
223
+ i0.ɵɵelementStart(0, "app-model-prompt-priority-matrix", 65);
224
+ i0.ɵɵlistener("promptSelected", function PromptManagementComponent_Conditional_1_Conditional_25_Template_app_model_prompt_priority_matrix_promptSelected_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onPromptSelectedFromMatrix($event)); });
225
+ i0.ɵɵelementEnd();
226
+ } if (rf & 2) {
227
+ const ctx_r1 = i0.ɵɵnextContext(2);
228
+ i0.ɵɵproperty("selectedPrompts", ctx_r1.promptsForMatrix);
229
+ } }
230
+ function PromptManagementComponent_Conditional_1_Conditional_26_Template(rf, ctx) { if (rf & 1) {
231
+ const _r7 = i0.ɵɵgetCurrentView();
232
+ i0.ɵɵelementStart(0, "app-prompt-version-control", 66);
233
+ i0.ɵɵlistener("versionSelected", function PromptManagementComponent_Conditional_1_Conditional_26_Template_app_prompt_version_control_versionSelected_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onVersionSelected($event)); });
234
+ i0.ɵɵelementEnd();
235
+ } if (rf & 2) {
236
+ const ctx_r1 = i0.ɵɵnextContext(2);
237
+ i0.ɵɵproperty("prompt", (ctx_r1.selectedPrompt == null ? null : ctx_r1.selectedPrompt.prompt) || null);
238
+ } }
194
239
  function PromptManagementComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
195
240
  const _r1 = i0.ɵɵgetCurrentView();
196
241
  i0.ɵɵelementStart(0, "div", 2)(1, "div", 4)(2, "div", 5)(3, "button", 6);
@@ -206,43 +251,53 @@ function PromptManagementComponent_Conditional_1_Template(rf, ctx) { if (rf & 1)
206
251
  i0.ɵɵelement(11, "i", 11);
207
252
  i0.ɵɵtext(12, " New Prompt ");
208
253
  i0.ɵɵelementEnd()()();
209
- i0.ɵɵelementStart(13, "div", 12)(14, "kendo-splitter", 13);
210
- i0.ɵɵlistener("layoutChange", function PromptManagementComponent_Conditional_1_Template_kendo_splitter_layoutChange_14_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onMainSplitterChange($event)); });
211
- i0.ɵɵelementStart(15, "kendo-splitter-pane", 14)(16, "mj-prompt-filter-panel", 15);
212
- i0.ɵɵlistener("filtersChange", function PromptManagementComponent_Conditional_1_Template_mj_prompt_filter_panel_filtersChange_16_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFiltersChange($event)); })("filterChange", function PromptManagementComponent_Conditional_1_Template_mj_prompt_filter_panel_filterChange_16_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onFilterChange()); })("resetFilters", function PromptManagementComponent_Conditional_1_Template_mj_prompt_filter_panel_resetFilters_16_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onResetFilters()); })("closePanel", function PromptManagementComponent_Conditional_1_Template_mj_prompt_filter_panel_closePanel_16_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFilterPanel()); });
254
+ i0.ɵɵelementStart(13, "div", 12)(14, "button", 13);
255
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setSubView("list")); });
256
+ i0.ɵɵelement(15, "i", 14);
257
+ i0.ɵɵtext(16, " List View ");
258
+ i0.ɵɵelementEnd();
259
+ i0.ɵɵelementStart(17, "button", 15);
260
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Template_button_click_17_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setSubView("priority-matrix")); });
261
+ i0.ɵɵelement(18, "i", 16);
262
+ i0.ɵɵtext(19, " Priority Matrix ");
263
+ i0.ɵɵelementEnd();
264
+ i0.ɵɵelementStart(20, "button", 17);
265
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_1_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setSubView("version-control")); });
266
+ i0.ɵɵelement(21, "i", 18);
267
+ i0.ɵɵtext(22, " Version Control ");
268
+ i0.ɵɵelementEnd()();
269
+ i0.ɵɵelementStart(23, "div", 19);
270
+ i0.ɵɵtemplate(24, PromptManagementComponent_Conditional_1_Conditional_24_Template, 8, 15, "kendo-splitter", 20)(25, PromptManagementComponent_Conditional_1_Conditional_25_Template, 1, 1, "app-model-prompt-priority-matrix", 21)(26, PromptManagementComponent_Conditional_1_Conditional_26_Template, 1, 1, "app-prompt-version-control", 22);
213
271
  i0.ɵɵelementEnd()();
214
- i0.ɵɵelementStart(17, "kendo-splitter-pane", 16)(18, "div", 17);
215
- i0.ɵɵtemplate(19, PromptManagementComponent_Conditional_1_Conditional_19_Template, 8, 1, "div", 18)(20, PromptManagementComponent_Conditional_1_Conditional_20_Template, 4, 1, "div", 19)(21, PromptManagementComponent_Conditional_1_Conditional_21_Template, 3, 1, "div", 20);
216
- i0.ɵɵelementEnd()()()()();
217
272
  } if (rf & 2) {
218
273
  const ctx_r1 = i0.ɵɵnextContext();
219
274
  i0.ɵɵadvance(5);
220
275
  i0.ɵɵconditional(ctx_r1.filterPanelVisible ? 5 : 6);
221
276
  i0.ɵɵadvance(3);
222
277
  i0.ɵɵtextInterpolate1("", ctx_r1.filteredPrompts.length, " prompts");
223
- i0.ɵɵadvance(7);
224
- i0.ɵɵproperty("size", ctx_r1.filterPanelVisible ? "320px" : "0px")("collapsible", false)("resizable", ctx_r1.filterPanelVisible)("scrollable", false)("hidden", !ctx_r1.filterPanelVisible);
225
- i0.ɵɵadvance();
226
- i0.ɵɵproperty("prompts", ctx_r1.promptsWithTemplates)("filteredPrompts", ctx_r1.filteredPrompts)("categories", ctx_r1.categories)("types", ctx_r1.types)("filters", ctx_r1.currentFilters);
227
- i0.ɵɵadvance();
228
- i0.ɵɵproperty("resizable", true)("scrollable", false);
229
- i0.ɵɵadvance(2);
230
- i0.ɵɵconditional(ctx_r1.isLoading ? 19 : -1);
278
+ i0.ɵɵadvance(6);
279
+ i0.ɵɵclassProp("active", ctx_r1.currentSubView === "list");
280
+ i0.ɵɵadvance(3);
281
+ i0.ɵɵclassProp("active", ctx_r1.currentSubView === "priority-matrix");
282
+ i0.ɵɵadvance(3);
283
+ i0.ɵɵclassProp("active", ctx_r1.currentSubView === "version-control");
284
+ i0.ɵɵadvance(4);
285
+ i0.ɵɵconditional(ctx_r1.currentSubView === "list" ? 24 : -1);
231
286
  i0.ɵɵadvance();
232
- i0.ɵɵconditional(ctx_r1.error ? 20 : -1);
287
+ i0.ɵɵconditional(ctx_r1.currentSubView === "priority-matrix" ? 25 : -1);
233
288
  i0.ɵɵadvance();
234
- i0.ɵɵconditional(!ctx_r1.isLoading && !ctx_r1.error ? 21 : -1);
289
+ i0.ɵɵconditional(ctx_r1.currentSubView === "version-control" ? 26 : -1);
235
290
  } }
236
291
  function PromptManagementComponent_Conditional_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
237
292
  i0.ɵɵelement(0, "i", 11);
238
293
  i0.ɵɵtext(1, " Create New Prompt ");
239
294
  } }
240
295
  function PromptManagementComponent_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
241
- i0.ɵɵelement(0, "i", 49);
296
+ i0.ɵɵelement(0, "i", 59);
242
297
  i0.ɵɵtext(1, " Edit Prompt ");
243
298
  } }
244
299
  function PromptManagementComponent_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
245
- i0.ɵɵelement(0, "i", 47);
300
+ i0.ɵɵelement(0, "i", 57);
246
301
  i0.ɵɵtext(1, " View Prompt ");
247
302
  } }
248
303
  function PromptManagementComponent_Conditional_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
@@ -256,29 +311,29 @@ function PromptManagementComponent_Conditional_2_Conditional_11_Template(rf, ctx
256
311
  i0.ɵɵtextInterpolate1(" ", ctx_r1.selectedPrompt.prompt.Status, " ");
257
312
  } }
258
313
  function PromptManagementComponent_Conditional_2_Conditional_13_Template(rf, ctx) { if (rf & 1) {
259
- const _r6 = i0.ɵɵgetCurrentView();
314
+ const _r9 = i0.ɵɵgetCurrentView();
260
315
  i0.ɵɵelementStart(0, "button", 10);
261
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleEdit()); });
262
- i0.ɵɵelement(1, "i", 49);
316
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_13_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleEdit()); });
317
+ i0.ɵɵelement(1, "i", 59);
263
318
  i0.ɵɵtext(2, " Edit ");
264
319
  i0.ɵɵelementEnd();
265
320
  } }
266
321
  function PromptManagementComponent_Conditional_2_Conditional_14_Conditional_4_Template(rf, ctx) { if (rf & 1) {
267
- i0.ɵɵelement(0, "span", 82);
322
+ i0.ɵɵelement(0, "span", 94);
268
323
  } }
269
324
  function PromptManagementComponent_Conditional_2_Conditional_14_Conditional_5_Template(rf, ctx) { if (rf & 1) {
270
- i0.ɵɵelement(0, "i", 83);
325
+ i0.ɵɵelement(0, "i", 95);
271
326
  } }
272
327
  function PromptManagementComponent_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
273
- const _r7 = i0.ɵɵgetCurrentView();
328
+ const _r10 = i0.ɵɵgetCurrentView();
274
329
  i0.ɵɵelementStart(0, "button", 10);
275
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleEdit()); });
276
- i0.ɵɵelement(1, "i", 80);
330
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_14_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleEdit()); });
331
+ i0.ɵɵelement(1, "i", 92);
277
332
  i0.ɵɵtext(2, " Cancel ");
278
333
  i0.ɵɵelementEnd();
279
- i0.ɵɵelementStart(3, "button", 81);
280
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.savePrompt()); });
281
- i0.ɵɵtemplate(4, PromptManagementComponent_Conditional_2_Conditional_14_Conditional_4_Template, 1, 0, "span", 82)(5, PromptManagementComponent_Conditional_2_Conditional_14_Conditional_5_Template, 1, 0, "i", 83);
334
+ i0.ɵɵelementStart(3, "button", 93);
335
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.savePrompt()); });
336
+ i0.ɵɵtemplate(4, PromptManagementComponent_Conditional_2_Conditional_14_Conditional_4_Template, 1, 0, "span", 94)(5, PromptManagementComponent_Conditional_2_Conditional_14_Conditional_5_Template, 1, 0, "i", 95);
282
337
  i0.ɵɵtext(6, " Save ");
283
338
  i0.ɵɵelementEnd();
284
339
  } if (rf & 2) {
@@ -289,17 +344,17 @@ function PromptManagementComponent_Conditional_2_Conditional_14_Template(rf, ctx
289
344
  i0.ɵɵconditional(ctx_r1.isLoading ? 4 : 5);
290
345
  } }
291
346
  function PromptManagementComponent_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
292
- const _r8 = i0.ɵɵgetCurrentView();
293
- i0.ɵɵelementStart(0, "input", 84);
294
- i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_24_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.Name, $event) || (ctx_r1.selectedPrompt.prompt.Name = $event); return i0.ɵɵresetView($event); });
295
- i0.ɵɵlistener("input", function PromptManagementComponent_Conditional_2_Conditional_24_Template_input_input_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
347
+ const _r11 = i0.ɵɵgetCurrentView();
348
+ i0.ɵɵelementStart(0, "input", 96);
349
+ i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_24_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.Name, $event) || (ctx_r1.selectedPrompt.prompt.Name = $event); return i0.ɵɵresetView($event); });
350
+ i0.ɵɵlistener("input", function PromptManagementComponent_Conditional_2_Conditional_24_Template_input_input_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
296
351
  i0.ɵɵelementEnd();
297
352
  } if (rf & 2) {
298
353
  const ctx_r1 = i0.ɵɵnextContext(2);
299
354
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedPrompt.prompt.Name);
300
355
  } }
301
356
  function PromptManagementComponent_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
302
- i0.ɵɵelementStart(0, "div", 70);
357
+ i0.ɵɵelementStart(0, "div", 82);
303
358
  i0.ɵɵtext(1);
304
359
  i0.ɵɵelementEnd();
305
360
  } if (rf & 2) {
@@ -308,17 +363,17 @@ function PromptManagementComponent_Conditional_2_Conditional_25_Template(rf, ctx
308
363
  i0.ɵɵtextInterpolate(ctx_r1.selectedPrompt.prompt.Name);
309
364
  } }
310
365
  function PromptManagementComponent_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
311
- const _r9 = i0.ɵɵgetCurrentView();
312
- i0.ɵɵelementStart(0, "textarea", 85);
313
- i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_29_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.Description, $event) || (ctx_r1.selectedPrompt.prompt.Description = $event); return i0.ɵɵresetView($event); });
314
- i0.ɵɵlistener("input", function PromptManagementComponent_Conditional_2_Conditional_29_Template_textarea_input_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
366
+ const _r12 = i0.ɵɵgetCurrentView();
367
+ i0.ɵɵelementStart(0, "textarea", 97);
368
+ i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_29_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.Description, $event) || (ctx_r1.selectedPrompt.prompt.Description = $event); return i0.ɵɵresetView($event); });
369
+ i0.ɵɵlistener("input", function PromptManagementComponent_Conditional_2_Conditional_29_Template_textarea_input_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
315
370
  i0.ɵɵelementEnd();
316
371
  } if (rf & 2) {
317
372
  const ctx_r1 = i0.ɵɵnextContext(2);
318
373
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedPrompt.prompt.Description);
319
374
  } }
320
375
  function PromptManagementComponent_Conditional_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
321
- i0.ɵɵelementStart(0, "div", 70);
376
+ i0.ɵɵelementStart(0, "div", 82);
322
377
  i0.ɵɵtext(1);
323
378
  i0.ɵɵelementEnd();
324
379
  } if (rf & 2) {
@@ -327,25 +382,25 @@ function PromptManagementComponent_Conditional_2_Conditional_30_Template(rf, ctx
327
382
  i0.ɵɵtextInterpolate1(" ", ctx_r1.selectedPrompt.prompt.Description || "No description provided", " ");
328
383
  } }
329
384
  function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_For_4_Template(rf, ctx) { if (rf & 1) {
330
- i0.ɵɵelementStart(0, "option", 89);
385
+ i0.ɵɵelementStart(0, "option", 101);
331
386
  i0.ɵɵtext(1);
332
387
  i0.ɵɵelementEnd();
333
388
  } if (rf & 2) {
334
- const category_r11 = ctx.$implicit;
335
- i0.ɵɵproperty("value", category_r11.ID);
389
+ const category_r14 = ctx.$implicit;
390
+ i0.ɵɵproperty("value", category_r14.ID);
336
391
  i0.ɵɵadvance();
337
- i0.ɵɵtextInterpolate(category_r11.Name);
392
+ i0.ɵɵtextInterpolate(category_r14.Name);
338
393
  } }
339
394
  function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template(rf, ctx) { if (rf & 1) {
340
- const _r10 = i0.ɵɵgetCurrentView();
341
- i0.ɵɵelementStart(0, "select", 87);
342
- i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.CategoryID, $event) || (ctx_r1.selectedPrompt.prompt.CategoryID = $event); return i0.ɵɵresetView($event); });
343
- i0.ɵɵlistener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryChange($event)); });
344
- i0.ɵɵelementStart(1, "option", 88);
395
+ const _r13 = i0.ɵɵgetCurrentView();
396
+ i0.ɵɵelementStart(0, "select", 99);
397
+ i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.CategoryID, $event) || (ctx_r1.selectedPrompt.prompt.CategoryID = $event); return i0.ɵɵresetView($event); });
398
+ i0.ɵɵlistener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCategoryChange($event)); });
399
+ i0.ɵɵelementStart(1, "option", 100);
345
400
  i0.ɵɵtext(2, "Select category...");
346
401
  i0.ɵɵelementEnd();
347
- i0.ɵɵrepeaterCreate(3, PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_For_4_Template, 2, 2, "option", 89, _forTrack1);
348
- i0.ɵɵelementStart(5, "option", 90);
402
+ i0.ɵɵrepeaterCreate(3, PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_For_4_Template, 2, 2, "option", 101, _forTrack1);
403
+ i0.ɵɵelementStart(5, "option", 102);
349
404
  i0.ɵɵtext(6, "+ Create New Category");
350
405
  i0.ɵɵelementEnd()();
351
406
  } if (rf & 2) {
@@ -355,18 +410,18 @@ function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Te
355
410
  i0.ɵɵrepeater(ctx_r1.categories);
356
411
  } }
357
412
  function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template(rf, ctx) { if (rf & 1) {
358
- const _r12 = i0.ɵɵgetCurrentView();
359
- i0.ɵɵelementStart(0, "div", 86)(1, "input", 91, 0);
360
- i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.newCategoryName, $event) || (ctx_r1.newCategoryName = $event); return i0.ɵɵresetView($event); });
361
- i0.ɵɵlistener("keyup", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_input_keyup_1_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCreateNewCategoryKeyup($event)); });
413
+ const _r15 = i0.ɵɵgetCurrentView();
414
+ i0.ɵɵelementStart(0, "div", 98)(1, "input", 103, 0);
415
+ i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.newCategoryName, $event) || (ctx_r1.newCategoryName = $event); return i0.ɵɵresetView($event); });
416
+ i0.ɵɵlistener("keyup", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_input_keyup_1_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onCreateNewCategoryKeyup($event)); });
362
417
  i0.ɵɵelementEnd();
363
- i0.ɵɵelementStart(3, "div", 92)(4, "button", 48);
364
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createAndSelectNewCategory()); });
365
- i0.ɵɵelement(5, "i", 93);
418
+ i0.ɵɵelementStart(3, "div", 104)(4, "button", 58);
419
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.createAndSelectNewCategory()); });
420
+ i0.ɵɵelement(5, "i", 105);
366
421
  i0.ɵɵelementEnd();
367
- i0.ɵɵelementStart(6, "button", 46);
368
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.cancelNewCategory()); });
369
- i0.ɵɵelement(7, "i", 80);
422
+ i0.ɵɵelementStart(6, "button", 56);
423
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.cancelNewCategory()); });
424
+ i0.ɵɵelement(7, "i", 92);
370
425
  i0.ɵɵelementEnd()()();
371
426
  } if (rf & 2) {
372
427
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -374,13 +429,13 @@ function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Te
374
429
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.newCategoryName);
375
430
  } }
376
431
  function PromptManagementComponent_Conditional_2_Conditional_34_Template(rf, ctx) { if (rf & 1) {
377
- i0.ɵɵtemplate(0, PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template, 7, 1, "select", 72)(1, PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template, 8, 1, "div", 86);
432
+ i0.ɵɵtemplate(0, PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template, 7, 1, "select", 84)(1, PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template, 8, 1, "div", 98);
378
433
  } if (rf & 2) {
379
434
  const ctx_r1 = i0.ɵɵnextContext(2);
380
435
  i0.ɵɵconditional(!ctx_r1.showNewCategoryInput ? 0 : 1);
381
436
  } }
382
437
  function PromptManagementComponent_Conditional_2_Conditional_35_Template(rf, ctx) { if (rf & 1) {
383
- i0.ɵɵelementStart(0, "div", 70);
438
+ i0.ɵɵelementStart(0, "div", 82);
384
439
  i0.ɵɵtext(1);
385
440
  i0.ɵɵelementEnd();
386
441
  } if (rf & 2) {
@@ -389,24 +444,24 @@ function PromptManagementComponent_Conditional_2_Conditional_35_Template(rf, ctx
389
444
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getCategoryName(ctx_r1.selectedPrompt.prompt.CategoryID), " ");
390
445
  } }
391
446
  function PromptManagementComponent_Conditional_2_Conditional_39_For_4_Template(rf, ctx) { if (rf & 1) {
392
- i0.ɵɵelementStart(0, "option", 89);
447
+ i0.ɵɵelementStart(0, "option", 101);
393
448
  i0.ɵɵtext(1);
394
449
  i0.ɵɵelementEnd();
395
450
  } if (rf & 2) {
396
- const type_r14 = ctx.$implicit;
397
- i0.ɵɵproperty("value", type_r14.ID);
451
+ const type_r17 = ctx.$implicit;
452
+ i0.ɵɵproperty("value", type_r17.ID);
398
453
  i0.ɵɵadvance();
399
- i0.ɵɵtextInterpolate(type_r14.Name);
454
+ i0.ɵɵtextInterpolate(type_r17.Name);
400
455
  } }
401
456
  function PromptManagementComponent_Conditional_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
402
- const _r13 = i0.ɵɵgetCurrentView();
403
- i0.ɵɵelementStart(0, "select", 94);
404
- i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_39_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.TypeID, $event) || (ctx_r1.selectedPrompt.prompt.TypeID = $event); return i0.ɵɵresetView($event); });
405
- i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Conditional_39_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
406
- i0.ɵɵelementStart(1, "option", 88);
457
+ const _r16 = i0.ɵɵgetCurrentView();
458
+ i0.ɵɵelementStart(0, "select", 106);
459
+ i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_39_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.TypeID, $event) || (ctx_r1.selectedPrompt.prompt.TypeID = $event); return i0.ɵɵresetView($event); });
460
+ i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Conditional_39_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
461
+ i0.ɵɵelementStart(1, "option", 100);
407
462
  i0.ɵɵtext(2, "Select type...");
408
463
  i0.ɵɵelementEnd();
409
- i0.ɵɵrepeaterCreate(3, PromptManagementComponent_Conditional_2_Conditional_39_For_4_Template, 2, 2, "option", 89, _forTrack1);
464
+ i0.ɵɵrepeaterCreate(3, PromptManagementComponent_Conditional_2_Conditional_39_For_4_Template, 2, 2, "option", 101, _forTrack1);
410
465
  i0.ɵɵelementEnd();
411
466
  } if (rf & 2) {
412
467
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -415,7 +470,7 @@ function PromptManagementComponent_Conditional_2_Conditional_39_Template(rf, ctx
415
470
  i0.ɵɵrepeater(ctx_r1.types);
416
471
  } }
417
472
  function PromptManagementComponent_Conditional_2_Conditional_40_Template(rf, ctx) { if (rf & 1) {
418
- i0.ɵɵelementStart(0, "div", 70);
473
+ i0.ɵɵelementStart(0, "div", 82);
419
474
  i0.ɵɵtext(1);
420
475
  i0.ɵɵelementEnd();
421
476
  } if (rf & 2) {
@@ -424,17 +479,17 @@ function PromptManagementComponent_Conditional_2_Conditional_40_Template(rf, ctx
424
479
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getTypeName(ctx_r1.selectedPrompt.prompt.TypeID), " ");
425
480
  } }
426
481
  function PromptManagementComponent_Conditional_2_Conditional_44_Template(rf, ctx) { if (rf & 1) {
427
- const _r15 = i0.ɵɵgetCurrentView();
428
- i0.ɵɵelementStart(0, "select", 94);
429
- i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_44_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.Status, $event) || (ctx_r1.selectedPrompt.prompt.Status = $event); return i0.ɵɵresetView($event); });
430
- i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Conditional_44_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
431
- i0.ɵɵelementStart(1, "option", 95);
482
+ const _r18 = i0.ɵɵgetCurrentView();
483
+ i0.ɵɵelementStart(0, "select", 106);
484
+ i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_44_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.selectedPrompt.prompt.Status, $event) || (ctx_r1.selectedPrompt.prompt.Status = $event); return i0.ɵɵresetView($event); });
485
+ i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Conditional_44_Template_select_change_0_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.isDirty = true); });
486
+ i0.ɵɵelementStart(1, "option", 107);
432
487
  i0.ɵɵtext(2, "Active");
433
488
  i0.ɵɵelementEnd();
434
- i0.ɵɵelementStart(3, "option", 96);
489
+ i0.ɵɵelementStart(3, "option", 108);
435
490
  i0.ɵɵtext(4, "Pending");
436
491
  i0.ɵɵelementEnd();
437
- i0.ɵɵelementStart(5, "option", 97);
492
+ i0.ɵɵelementStart(5, "option", 109);
438
493
  i0.ɵɵtext(6, "Disabled");
439
494
  i0.ɵɵelementEnd()();
440
495
  } if (rf & 2) {
@@ -442,7 +497,7 @@ function PromptManagementComponent_Conditional_2_Conditional_44_Template(rf, ctx
442
497
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.selectedPrompt.prompt.Status);
443
498
  } }
444
499
  function PromptManagementComponent_Conditional_2_Conditional_45_Template(rf, ctx) { if (rf & 1) {
445
- i0.ɵɵelementStart(0, "div", 70)(1, "span");
500
+ i0.ɵɵelementStart(0, "div", 82)(1, "span");
446
501
  i0.ɵɵtext(2);
447
502
  i0.ɵɵelementEnd()();
448
503
  } if (rf & 2) {
@@ -475,10 +530,10 @@ function PromptManagementComponent_Conditional_2_Conditional_46_Conditional_9_Te
475
530
  i0.ɵɵtextInterpolate1(" ", (ctx_r1.selectedPrompt.templateContent.TemplateText || "").length, " characters");
476
531
  } }
477
532
  function PromptManagementComponent_Conditional_2_Conditional_46_Template(rf, ctx) { if (rf & 1) {
478
- i0.ɵɵelementStart(0, "div", 73)(1, "h4");
533
+ i0.ɵɵelementStart(0, "div", 85)(1, "h4");
479
534
  i0.ɵɵtext(2, "Template Information");
480
535
  i0.ɵɵelementEnd();
481
- i0.ɵɵelementStart(3, "div", 98)(4, "div")(5, "strong");
536
+ i0.ɵɵelementStart(3, "div", 110)(4, "div")(5, "strong");
482
537
  i0.ɵɵtext(6, "Template:");
483
538
  i0.ɵɵelementEnd();
484
539
  i0.ɵɵtext(7);
@@ -495,40 +550,40 @@ function PromptManagementComponent_Conditional_2_Conditional_46_Template(rf, ctx
495
550
  i0.ɵɵconditional(ctx_r1.selectedPrompt.templateContent ? 9 : -1);
496
551
  } }
497
552
  function PromptManagementComponent_Conditional_2_Conditional_53_Conditional_2_Template(rf, ctx) { if (rf & 1) {
498
- i0.ɵɵelementStart(0, "span", 100);
553
+ i0.ɵɵelementStart(0, "span", 112);
499
554
  i0.ɵɵtext(1, "Unsaved Changes");
500
555
  i0.ɵɵelementEnd();
501
556
  } }
502
557
  function PromptManagementComponent_Conditional_2_Conditional_53_Template(rf, ctx) { if (rf & 1) {
503
- i0.ɵɵelementStart(0, "span", 99);
558
+ i0.ɵɵelementStart(0, "span", 111);
504
559
  i0.ɵɵtext(1, "Nunjucks Template");
505
560
  i0.ɵɵelementEnd();
506
- i0.ɵɵtemplate(2, PromptManagementComponent_Conditional_2_Conditional_53_Conditional_2_Template, 2, 0, "span", 100);
561
+ i0.ɵɵtemplate(2, PromptManagementComponent_Conditional_2_Conditional_53_Conditional_2_Template, 2, 0, "span", 112);
507
562
  } if (rf & 2) {
508
563
  const ctx_r1 = i0.ɵɵnextContext(2);
509
564
  i0.ɵɵadvance(2);
510
565
  i0.ɵɵconditional(ctx_r1.isDirty ? 2 : -1);
511
566
  } }
512
567
  function PromptManagementComponent_Conditional_2_Conditional_54_Template(rf, ctx) { if (rf & 1) {
513
- i0.ɵɵelementStart(0, "span", 76);
568
+ i0.ɵɵelementStart(0, "span", 88);
514
569
  i0.ɵɵtext(1, "Read Only");
515
570
  i0.ɵɵelementEnd();
516
571
  } }
517
572
  function PromptManagementComponent_Conditional_2_Conditional_57_Template(rf, ctx) { if (rf & 1) {
518
- i0.ɵɵelementStart(0, "div", 79)(1, "div", 101)(2, "h5");
573
+ i0.ɵɵelementStart(0, "div", 91)(1, "div", 113)(2, "h5");
519
574
  i0.ɵɵtext(3, "Nunjucks Template Syntax");
520
575
  i0.ɵɵelementEnd();
521
- i0.ɵɵelementStart(4, "div", 102)(5, "div", 103)(6, "code");
576
+ i0.ɵɵelementStart(4, "div", 114)(5, "div", 115)(6, "code");
522
577
  i0.ɵɵtext(7);
523
578
  i0.ɵɵelementEnd();
524
579
  i0.ɵɵtext(8, " - Variable output ");
525
580
  i0.ɵɵelementEnd();
526
- i0.ɵɵelementStart(9, "div", 103)(10, "code");
581
+ i0.ɵɵelementStart(9, "div", 115)(10, "code");
527
582
  i0.ɵɵtext(11);
528
583
  i0.ɵɵelementEnd();
529
584
  i0.ɵɵtext(12, " - Conditionals ");
530
585
  i0.ɵɵelementEnd();
531
- i0.ɵɵelementStart(13, "div", 103)(14, "code");
586
+ i0.ɵɵelementStart(13, "div", 115)(14, "code");
532
587
  i0.ɵɵtext(15);
533
588
  i0.ɵɵelementEnd();
534
589
  i0.ɵɵtext(16, " - Loops ");
@@ -542,62 +597,62 @@ function PromptManagementComponent_Conditional_2_Conditional_57_Template(rf, ctx
542
597
  i0.ɵɵtextInterpolate("{% for item in items %} ... {% endfor %}");
543
598
  } }
544
599
  function PromptManagementComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
545
- const _r5 = i0.ɵɵgetCurrentView();
546
- i0.ɵɵelementStart(0, "div", 3)(1, "div", 55)(2, "div", 56)(3, "button", 57);
547
- i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.backToList()); });
548
- i0.ɵɵelement(4, "i", 58);
600
+ const _r8 = i0.ɵɵgetCurrentView();
601
+ i0.ɵɵelementStart(0, "div", 3)(1, "div", 67)(2, "div", 68)(3, "button", 69);
602
+ i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.backToList()); });
603
+ i0.ɵɵelement(4, "i", 70);
549
604
  i0.ɵɵtext(5, " Back to Prompts ");
550
605
  i0.ɵɵelementEnd()();
551
- i0.ɵɵelementStart(6, "div", 59)(7, "h2");
606
+ i0.ɵɵelementStart(6, "div", 71)(7, "h2");
552
607
  i0.ɵɵtemplate(8, PromptManagementComponent_Conditional_2_Conditional_8_Template, 2, 0)(9, PromptManagementComponent_Conditional_2_Conditional_9_Template, 2, 0)(10, PromptManagementComponent_Conditional_2_Conditional_10_Template, 2, 0);
553
608
  i0.ɵɵelementEnd();
554
- i0.ɵɵtemplate(11, PromptManagementComponent_Conditional_2_Conditional_11_Template, 2, 4, "div", 60);
609
+ i0.ɵɵtemplate(11, PromptManagementComponent_Conditional_2_Conditional_11_Template, 2, 4, "div", 72);
555
610
  i0.ɵɵelementEnd();
556
- i0.ɵɵelementStart(12, "div", 61);
557
- i0.ɵɵtemplate(13, PromptManagementComponent_Conditional_2_Conditional_13_Template, 3, 0, "button", 62)(14, PromptManagementComponent_Conditional_2_Conditional_14_Template, 7, 2);
611
+ i0.ɵɵelementStart(12, "div", 73);
612
+ i0.ɵɵtemplate(13, PromptManagementComponent_Conditional_2_Conditional_13_Template, 3, 0, "button", 74)(14, PromptManagementComponent_Conditional_2_Conditional_14_Template, 7, 2);
558
613
  i0.ɵɵelementEnd()();
559
- i0.ɵɵelementStart(15, "div", 63)(16, "kendo-splitter", 64);
560
- i0.ɵɵlistener("layoutChange", function PromptManagementComponent_Conditional_2_Template_kendo_splitter_layoutChange_16_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEditorSplitterChange($event)); });
561
- i0.ɵɵelementStart(17, "kendo-splitter-pane", 65)(18, "div", 66)(19, "h3");
614
+ i0.ɵɵelementStart(15, "div", 75)(16, "kendo-splitter", 76);
615
+ i0.ɵɵlistener("layoutChange", function PromptManagementComponent_Conditional_2_Template_kendo_splitter_layoutChange_16_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEditorSplitterChange($event)); });
616
+ i0.ɵɵelementStart(17, "kendo-splitter-pane", 77)(18, "div", 78)(19, "h3");
562
617
  i0.ɵɵtext(20, "Prompt Details");
563
618
  i0.ɵɵelementEnd();
564
- i0.ɵɵelementStart(21, "div", 67)(22, "label", 68);
619
+ i0.ɵɵelementStart(21, "div", 79)(22, "label", 80);
565
620
  i0.ɵɵtext(23, "Name *");
566
621
  i0.ɵɵelementEnd();
567
- i0.ɵɵtemplate(24, PromptManagementComponent_Conditional_2_Conditional_24_Template, 1, 1, "input", 69)(25, PromptManagementComponent_Conditional_2_Conditional_25_Template, 2, 1, "div", 70);
622
+ i0.ɵɵtemplate(24, PromptManagementComponent_Conditional_2_Conditional_24_Template, 1, 1, "input", 81)(25, PromptManagementComponent_Conditional_2_Conditional_25_Template, 2, 1, "div", 82);
568
623
  i0.ɵɵelementEnd();
569
- i0.ɵɵelementStart(26, "div", 67)(27, "label", 68);
624
+ i0.ɵɵelementStart(26, "div", 79)(27, "label", 80);
570
625
  i0.ɵɵtext(28, "Description");
571
626
  i0.ɵɵelementEnd();
572
- i0.ɵɵtemplate(29, PromptManagementComponent_Conditional_2_Conditional_29_Template, 1, 1, "textarea", 71)(30, PromptManagementComponent_Conditional_2_Conditional_30_Template, 2, 1, "div", 70);
627
+ i0.ɵɵtemplate(29, PromptManagementComponent_Conditional_2_Conditional_29_Template, 1, 1, "textarea", 83)(30, PromptManagementComponent_Conditional_2_Conditional_30_Template, 2, 1, "div", 82);
573
628
  i0.ɵɵelementEnd();
574
- i0.ɵɵelementStart(31, "div", 67)(32, "label", 68);
629
+ i0.ɵɵelementStart(31, "div", 79)(32, "label", 80);
575
630
  i0.ɵɵtext(33, "Category");
576
631
  i0.ɵɵelementEnd();
577
- i0.ɵɵtemplate(34, PromptManagementComponent_Conditional_2_Conditional_34_Template, 2, 1)(35, PromptManagementComponent_Conditional_2_Conditional_35_Template, 2, 1, "div", 70);
632
+ i0.ɵɵtemplate(34, PromptManagementComponent_Conditional_2_Conditional_34_Template, 2, 1)(35, PromptManagementComponent_Conditional_2_Conditional_35_Template, 2, 1, "div", 82);
578
633
  i0.ɵɵelementEnd();
579
- i0.ɵɵelementStart(36, "div", 67)(37, "label", 68);
634
+ i0.ɵɵelementStart(36, "div", 79)(37, "label", 80);
580
635
  i0.ɵɵtext(38, "Type");
581
636
  i0.ɵɵelementEnd();
582
- i0.ɵɵtemplate(39, PromptManagementComponent_Conditional_2_Conditional_39_Template, 5, 1, "select", 72)(40, PromptManagementComponent_Conditional_2_Conditional_40_Template, 2, 1, "div", 70);
637
+ i0.ɵɵtemplate(39, PromptManagementComponent_Conditional_2_Conditional_39_Template, 5, 1, "select", 84)(40, PromptManagementComponent_Conditional_2_Conditional_40_Template, 2, 1, "div", 82);
583
638
  i0.ɵɵelementEnd();
584
- i0.ɵɵelementStart(41, "div", 67)(42, "label", 68);
639
+ i0.ɵɵelementStart(41, "div", 79)(42, "label", 80);
585
640
  i0.ɵɵtext(43, "Status");
586
641
  i0.ɵɵelementEnd();
587
- i0.ɵɵtemplate(44, PromptManagementComponent_Conditional_2_Conditional_44_Template, 7, 1, "select", 72)(45, PromptManagementComponent_Conditional_2_Conditional_45_Template, 3, 4, "div", 70);
642
+ i0.ɵɵtemplate(44, PromptManagementComponent_Conditional_2_Conditional_44_Template, 7, 1, "select", 84)(45, PromptManagementComponent_Conditional_2_Conditional_45_Template, 3, 4, "div", 82);
588
643
  i0.ɵɵelementEnd();
589
- i0.ɵɵtemplate(46, PromptManagementComponent_Conditional_2_Conditional_46_Template, 10, 3, "div", 73);
644
+ i0.ɵɵtemplate(46, PromptManagementComponent_Conditional_2_Conditional_46_Template, 10, 3, "div", 85);
590
645
  i0.ɵɵelementEnd()();
591
- i0.ɵɵelementStart(47, "kendo-splitter-pane", 16)(48, "div", 74)(49, "div", 55)(50, "h3");
646
+ i0.ɵɵelementStart(47, "kendo-splitter-pane", 26)(48, "div", 86)(49, "div", 67)(50, "h3");
592
647
  i0.ɵɵtext(51, "Template Content");
593
648
  i0.ɵɵelementEnd();
594
- i0.ɵɵelementStart(52, "div", 75);
595
- i0.ɵɵtemplate(53, PromptManagementComponent_Conditional_2_Conditional_53_Template, 3, 1)(54, PromptManagementComponent_Conditional_2_Conditional_54_Template, 2, 0, "span", 76);
649
+ i0.ɵɵelementStart(52, "div", 87);
650
+ i0.ɵɵtemplate(53, PromptManagementComponent_Conditional_2_Conditional_53_Template, 3, 1)(54, PromptManagementComponent_Conditional_2_Conditional_54_Template, 2, 0, "span", 88);
596
651
  i0.ɵɵelementEnd()();
597
- i0.ɵɵelementStart(55, "div", 77)(56, "mj-code-editor", 78);
598
- i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Template_mj_code_editor_change_56_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEditorContentChange($event)); });
652
+ i0.ɵɵelementStart(55, "div", 89)(56, "mj-code-editor", 90);
653
+ i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Template_mj_code_editor_change_56_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onEditorContentChange($event)); });
599
654
  i0.ɵɵelementEnd()();
600
- i0.ɵɵtemplate(57, PromptManagementComponent_Conditional_2_Conditional_57_Template, 17, 3, "div", 79);
655
+ i0.ɵɵtemplate(57, PromptManagementComponent_Conditional_2_Conditional_57_Template, 17, 3, "div", 91);
601
656
  i0.ɵɵelementEnd()()()()();
602
657
  } if (rf & 2) {
603
658
  const ctx_r1 = i0.ɵɵnextContext();
@@ -648,6 +703,7 @@ export class PromptManagementComponent {
648
703
  this.loadingMessage = 'Loading prompts...';
649
704
  this.error = null;
650
705
  this.currentView = 'list';
706
+ this.currentSubView = 'list';
651
707
  this.selectedPrompt = null;
652
708
  this.isEditing = false;
653
709
  this.isDirty = false;
@@ -1101,6 +1157,7 @@ export class PromptManagementComponent {
1101
1157
  var _a;
1102
1158
  const state = {
1103
1159
  currentView: this.currentView,
1160
+ currentSubView: this.currentSubView,
1104
1161
  selectedPromptId: ((_a = this.selectedPrompt) === null || _a === void 0 ? void 0 : _a.prompt.ID) || null,
1105
1162
  isEditing: this.isEditing,
1106
1163
  promptDetailsPanelWidth: this.promptDetailsPanelWidth,
@@ -1291,11 +1348,32 @@ export class PromptManagementComponent {
1291
1348
  return 'No Type';
1292
1349
  return ((_a = this.types.find(t => t.ID === typeId)) === null || _a === void 0 ? void 0 : _a.Name) || 'Unknown Type';
1293
1350
  }
1351
+ setSubView(subView) {
1352
+ this.currentSubView = subView;
1353
+ this.emitStateChange();
1354
+ }
1355
+ onPromptSelectedFromMatrix(prompt) {
1356
+ const promptWithTemplate = this.promptsWithTemplates.find(p => p.prompt.ID === prompt.ID);
1357
+ if (promptWithTemplate) {
1358
+ this.viewPrompt(promptWithTemplate);
1359
+ }
1360
+ }
1361
+ onVersionSelected(version) {
1362
+ // Handle version selection from version control component
1363
+ console.log('Version selected:', version);
1364
+ if (version && this.selectedPrompt) {
1365
+ this.editorContent = version.content || '';
1366
+ this.isDirty = true;
1367
+ }
1368
+ }
1369
+ get promptsForMatrix() {
1370
+ return this.filteredPrompts.map(p => p.prompt);
1371
+ }
1294
1372
  }
1295
1373
  PromptManagementComponent.ɵfac = function PromptManagementComponent_Factory(t) { return new (t || PromptManagementComponent)(i0.ɵɵdirectiveInject(i1.MJNotificationService)); };
1296
- PromptManagementComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptManagementComponent, selectors: [["app-prompt-management"]], outputs: { openEntityRecord: "openEntityRecord", stateChange: "stateChange" }, decls: 3, vars: 4, consts: [["newCategoryInput", ""], ["mjFillContainer", "", 1, "prompt-management-container", 3, "rightMargin", "bottomMargin"], [1, "list-view"], [1, "editor-view"], [1, "dashboard-header"], [1, "header-info"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "prompt-count"], [1, "header-controls"], ["type", "button", 1, "control-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "main-content"], ["orientation", "horizontal", "mjFillContainer", "", 1, "main-splitter", 3, "layoutChange"], [3, "size", "collapsible", "resizable", "scrollable", "hidden"], [3, "filtersChange", "filterChange", "resetFilters", "closePanel", "prompts", "filteredPrompts", "categories", "types", "filters"], [3, "resizable", "scrollable"], [1, "prompts-content"], [1, "loading-container"], [1, "error-container"], [1, "prompts-list"], [1, "loading-content"], [1, "loading-spinner"], [1, "spinner-ring"], [1, "loading-text"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "empty-state"], [1, "prompts-grid"], [1, "fa-solid", "fa-comment-dots"], [1, "prompt-card"], [1, "prompt-card", 3, "click"], [1, "card-header"], [1, "prompt-info"], [1, "prompt-icon"], [1, "prompt-details"], [1, "prompt-name"], [1, "prompt-meta"], [1, "prompt-category"], [1, "prompt-type"], [1, "card-body"], [1, "prompt-description"], [1, "prompt-description", "text-muted"], [1, "template-info"], [1, "template-item", "text-muted"], [1, "card-actions", 3, "click"], ["type", "button", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-eye"], ["type", "button", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-edit"], ["type", "button", 1, "action-btn", "action-btn-danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "template-item"], [1, "fa-solid", "fa-file-code"], [1, "template-content-info"], [1, "editor-header"], [1, "breadcrumb-section"], ["type", "button", 1, "back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "editor-title"], [3, "class"], [1, "editor-actions"], ["type", "button", 1, "control-btn"], [1, "editor-content"], ["orientation", "horizontal", "mjFillContainer", "", 1, "editor-splitter", 3, "layoutChange"], [3, "collapsible", "resizable", "scrollable"], [1, "prompt-details-panel"], [1, "form-field"], [1, "field-label"], ["type", "text", "placeholder", "Enter prompt name", 1, "field-input", 3, "ngModel"], [1, "field-value"], ["placeholder", "Enter prompt description", 1, "field-textarea", 3, "ngModel"], [1, "field-select", 3, "ngModel"], [1, "template-info-section"], [1, "template-editor-panel"], [1, "editor-info"], [1, "editor-badge", "editor-badge-secondary"], [1, "editor-container"], [3, "change", "value", "languages", "language", "placeholder", "lineWrapping", "highlightWhitespace", "indentWithTab", "indentUnit", "readonly"], [1, "editor-help"], [1, "fa-solid", "fa-times"], ["type", "button", 1, "control-btn", "control-btn-primary", 3, "click", "disabled"], [1, "loading-spinner-sm"], [1, "fa-solid", "fa-save"], ["type", "text", "placeholder", "Enter prompt name", 1, "field-input", 3, "ngModelChange", "input", "ngModel"], ["placeholder", "Enter prompt description", 1, "field-textarea", 3, "ngModelChange", "input", "ngModel"], [1, "new-category-container"], [1, "field-select", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], ["value", "new", 1, "new-category-option"], ["type", "text", "placeholder", "Enter new category name", 1, "field-input", 3, "ngModelChange", "keyup", "ngModel"], [1, "new-category-actions"], [1, "fa-solid", "fa-check"], [1, "field-select", 3, "ngModelChange", "change", "ngModel"], ["value", "Active"], ["value", "Pending"], ["value", "Disabled"], [1, "template-details"], [1, "editor-badge", "editor-badge-info"], [1, "editor-badge", "editor-badge-warning"], [1, "help-section"], [1, "syntax-examples"], [1, "syntax-item"]], template: function PromptManagementComponent_Template(rf, ctx) { if (rf & 1) {
1374
+ PromptManagementComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PromptManagementComponent, selectors: [["app-prompt-management"]], outputs: { openEntityRecord: "openEntityRecord", stateChange: "stateChange" }, decls: 3, vars: 4, consts: [["newCategoryInput", ""], ["mjFillContainer", "", 1, "prompt-management-container", 3, "rightMargin", "bottomMargin"], [1, "list-view"], [1, "editor-view"], [1, "dashboard-header"], [1, "header-info"], ["type", "button", "title", "Toggle Filters", 1, "filter-toggle-btn", 3, "click"], [1, "fa-solid", "fa-filter"], [1, "prompt-count"], [1, "header-controls"], ["type", "button", 1, "control-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "sub-navigation"], ["type", "button", "title", "List View", 1, "sub-nav-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["type", "button", "title", "Priority Matrix", 1, "sub-nav-btn", 3, "click"], [1, "fa-solid", "fa-th"], ["type", "button", "title", "Version Control", 1, "sub-nav-btn", 3, "click"], [1, "fa-solid", "fa-code-branch"], [1, "main-content"], ["orientation", "horizontal", "mjFillContainer", "", 1, "main-splitter"], ["mjFillContainer", "", 3, "selectedPrompts"], ["mjFillContainer", "", 3, "prompt"], ["orientation", "horizontal", "mjFillContainer", "", 1, "main-splitter", 3, "layoutChange"], [3, "size", "collapsible", "resizable", "scrollable", "hidden"], [3, "filtersChange", "filterChange", "resetFilters", "closePanel", "prompts", "filteredPrompts", "categories", "types", "filters"], [3, "resizable", "scrollable"], [1, "prompts-content"], [1, "loading-container"], [1, "error-container"], [1, "prompts-list"], [1, "loading-content"], [1, "loading-spinner"], [1, "spinner-ring"], [1, "loading-text"], [1, "error-message"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "empty-state"], [1, "prompts-grid"], [1, "fa-solid", "fa-comment-dots"], [1, "prompt-card"], [1, "prompt-card", 3, "click"], [1, "card-header"], [1, "prompt-info"], [1, "prompt-icon"], [1, "prompt-details"], [1, "prompt-name"], [1, "prompt-meta"], [1, "prompt-category"], [1, "prompt-type"], [1, "card-body"], [1, "prompt-description"], [1, "prompt-description", "text-muted"], [1, "template-info"], [1, "template-item", "text-muted"], [1, "card-actions", 3, "click"], ["type", "button", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-eye"], ["type", "button", 1, "action-btn", "action-btn-primary", 3, "click"], [1, "fa-solid", "fa-edit"], ["type", "button", 1, "action-btn", "action-btn-danger", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "template-item"], [1, "fa-solid", "fa-file-code"], [1, "template-content-info"], ["mjFillContainer", "", 3, "promptSelected", "selectedPrompts"], ["mjFillContainer", "", 3, "versionSelected", "prompt"], [1, "editor-header"], [1, "breadcrumb-section"], ["type", "button", 1, "back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "editor-title"], [3, "class"], [1, "editor-actions"], ["type", "button", 1, "control-btn"], [1, "editor-content"], ["orientation", "horizontal", "mjFillContainer", "", 1, "editor-splitter", 3, "layoutChange"], [3, "collapsible", "resizable", "scrollable"], [1, "prompt-details-panel"], [1, "form-field"], [1, "field-label"], ["type", "text", "placeholder", "Enter prompt name", 1, "field-input", 3, "ngModel"], [1, "field-value"], ["placeholder", "Enter prompt description", 1, "field-textarea", 3, "ngModel"], [1, "field-select", 3, "ngModel"], [1, "template-info-section"], [1, "template-editor-panel"], [1, "editor-info"], [1, "editor-badge", "editor-badge-secondary"], [1, "editor-container"], [3, "change", "value", "languages", "language", "placeholder", "lineWrapping", "highlightWhitespace", "indentWithTab", "indentUnit", "readonly"], [1, "editor-help"], [1, "fa-solid", "fa-times"], ["type", "button", 1, "control-btn", "control-btn-primary", 3, "click", "disabled"], [1, "loading-spinner-sm"], [1, "fa-solid", "fa-save"], ["type", "text", "placeholder", "Enter prompt name", 1, "field-input", 3, "ngModelChange", "input", "ngModel"], ["placeholder", "Enter prompt description", 1, "field-textarea", 3, "ngModelChange", "input", "ngModel"], [1, "new-category-container"], [1, "field-select", 3, "ngModelChange", "ngModel"], ["value", ""], [3, "value"], ["value", "new", 1, "new-category-option"], ["type", "text", "placeholder", "Enter new category name", 1, "field-input", 3, "ngModelChange", "keyup", "ngModel"], [1, "new-category-actions"], [1, "fa-solid", "fa-check"], [1, "field-select", 3, "ngModelChange", "change", "ngModel"], ["value", "Active"], ["value", "Pending"], ["value", "Disabled"], [1, "template-details"], [1, "editor-badge", "editor-badge-info"], [1, "editor-badge", "editor-badge-warning"], [1, "help-section"], [1, "syntax-examples"], [1, "syntax-item"]], template: function PromptManagementComponent_Template(rf, ctx) { if (rf & 1) {
1297
1375
  i0.ɵɵelementStart(0, "div", 1);
1298
- i0.ɵɵtemplate(1, PromptManagementComponent_Conditional_1_Template, 22, 17, "div", 2)(2, PromptManagementComponent_Conditional_2_Template, 58, 25, "div", 3);
1376
+ i0.ɵɵtemplate(1, PromptManagementComponent_Conditional_1_Template, 27, 11, "div", 2)(2, PromptManagementComponent_Conditional_2_Template, 58, 25, "div", 3);
1299
1377
  i0.ɵɵelementEnd();
1300
1378
  } if (rf & 2) {
1301
1379
  i0.ɵɵproperty("rightMargin", 8)("bottomMargin", 8);
@@ -1303,10 +1381,10 @@ PromptManagementComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: P
1303
1381
  i0.ɵɵconditional(ctx.currentView === "list" ? 1 : -1);
1304
1382
  i0.ɵɵadvance();
1305
1383
  i0.ɵɵconditional(ctx.currentView === "editor" && ctx.selectedPrompt ? 2 : -1);
1306
- } }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.SplitterComponent, i3.SplitterPaneComponent, i4.FillContainer, i5.CodeEditorComponent, i6.PromptFilterPanelComponent], styles: [".prompt-management-container[_ngcontent-%COMP%] {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .filter-toggle-btn {\n padding: 6px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n color: #555;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n \n .prompt-count {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &.control-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Filters[_ngcontent-%COMP%] now[_ngcontent-%COMP%] handled[_ngcontent-%COMP%] by[_ngcontent-%COMP%] filter[_ngcontent-%COMP%] panel[_ngcontent-%COMP%] component\n\n.loading-container[_ngcontent-%COMP%], .error-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.error-message[_ngcontent-%COMP%] {\n color: #d32f2f;\n font-weight: 500;\n \n .fa-solid {\n margin-right: 8px;\n }\n}\n\n.loading-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n display: inline-block;\n position: relative;\n width: 40px;\n height: 40px;\n \n .spinner-ring {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 32px;\n height: 32px;\n margin: 4px;\n border: 3px solid #2196f3;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_loading-spin 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: #2196f3 transparent transparent transparent;\n \n &:nth-child(1) { animation-delay: -0.45s; }\n &:nth-child(2) { animation-delay: -0.3s; }\n &:nth-child(3) { animation-delay: -0.15s; }\n }\n}\n\n@keyframes _ngcontent-%COMP%_loading-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: #666;\n \n .fa-solid {\n font-size: 48px;\n margin-bottom: 16px;\n color: #ccc;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n font-size: 18px;\n font-weight: 500;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.prompts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n transition: all 0.2s ease;\n height: fit-content;\n cursor: pointer;\n \n &:hover {\n border-color: #2196f3;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.1);\n transform: translateY(-1px);\n }\n \n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 12px;\n \n .prompt-info {\n display: flex;\n gap: 12px;\n flex: 1;\n \n .prompt-icon {\n color: #2196f3;\n font-size: 20px;\n margin-top: 2px;\n }\n \n .prompt-details {\n flex: 1;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n }\n \n .prompt-meta {\n font-size: 12px;\n color: #666;\n \n .prompt-type {\n margin-left: 8px;\n }\n }\n }\n }\n }\n \n .card-body {\n margin-bottom: 12px;\n \n .prompt-description {\n margin-bottom: 12px;\n color: #555;\n font-size: 13px;\n line-height: 1.4;\n }\n \n .template-info {\n .template-item {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n font-size: 12px;\n color: #666;\n \n .fa-solid {\n margin-right: 6px;\n color: #999;\n }\n }\n \n .template-content-info {\n font-size: 11px;\n color: #999;\n }\n }\n }\n \n .card-actions {\n display: flex;\n gap: 8px;\n border-top: 1px solid #f0f0f0;\n padding-top: 12px;\n \n .action-btn {\n padding: 6px 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f5f5f5;\n border-color: #bbb;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &.action-btn-danger {\n background-color: #f44336;\n border-color: #f44336;\n color: white;\n \n &:hover {\n background-color: #d32f2f;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Editor[_ngcontent-%COMP%] View\n.editor-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.editor-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e0e0e0;\n \n .breadcrumb-section {\n .back-btn {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n text-decoration: underline;\n }\n }\n }\n \n .editor-title {\n flex: 1;\n margin: 0 20px;\n \n h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n }\n}\n\n.editor-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.editor-splitter[_ngcontent-%COMP%] {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompt-details-panel[_ngcontent-%COMP%], .template-editor-panel[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n height: 100%;\n overflow-y: auto;\n \n h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 8px;\n }\n}\n\n.form-field[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n \n .field-label {\n display: block;\n margin-bottom: 4px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n }\n \n .field-input, .field-select {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-textarea {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n resize: vertical;\n min-height: 60px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-value {\n padding: 6px 8px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n font-size: 12px;\n color: #555;\n }\n}\n\n.template-editor-panel[_ngcontent-%COMP%] {\n .editor-container {\n margin-bottom: 16px;\n \n .code-editor {\n width: 100%;\n min-height: 300px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 8px;\n background: #f8f9fa;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .code-display {\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n background: #f8f9fa;\n max-height: 400px;\n overflow-y: auto;\n \n pre {\n margin: 0;\n padding: 12px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n line-height: 1.4;\n color: #333;\n \n code {\n background: none;\n padding: 0;\n font-size: inherit;\n color: inherit;\n }\n }\n }\n }\n \n .editor-help {\n .help-section {\n h5 {\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 8px;\n color: #333;\n }\n \n .syntax-examples {\n .syntax-item {\n margin-bottom: 6px;\n padding: 6px 8px;\n background: #f0f0f0;\n border-radius: 3px;\n font-size: 11px;\n \n code {\n background: #e0e0e0;\n padding: 2px 4px;\n border-radius: 2px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n margin-right: 8px;\n }\n }\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] CodeMirror[_ngcontent-%COMP%] overrides\n.CodeMirror[_ngcontent-%COMP%] {\n border: 1px solid #ddd !important;\n border-radius: 3px !important;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px !important;\n}\n\n.CodeMirror-focused[_ngcontent-%COMP%] {\n border-color: #2196f3 !important;\n}\n\n//[_ngcontent-%COMP%] Status[_ngcontent-%COMP%] badges\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n \n &.status-active {\n background: #e8f5e8;\n color: #2e7d32;\n }\n \n &.status-pending {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.status-disabled {\n background: #ffebee;\n color: #c62828;\n }\n}\n\n//[_ngcontent-%COMP%] Editor[_ngcontent-%COMP%] badges\n.editor-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n margin-left: 8px;\n \n &.editor-badge-info {\n background: #e3f2fd;\n color: #1976d2;\n }\n \n &.editor-badge-warning {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.editor-badge-secondary {\n background: #f5f5f5;\n color: #666;\n }\n}\n\n//[_ngcontent-%COMP%] New[_ngcontent-%COMP%] category[_ngcontent-%COMP%] creation\n.new-category-container[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n align-items: center;\n \n .field-input {\n flex: 1;\n }\n \n .new-category-actions {\n display: flex;\n gap: 2px;\n \n .action-btn {\n padding: 4px 6px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n \n &:hover {\n background-color: #f5f5f5;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n.new-category-option[_ngcontent-%COMP%] {\n color: #2196f3;\n font-style: italic;\n}\n\n//[_ngcontent-%COMP%] CodeMirror[_ngcontent-%COMP%] 6[_ngcontent-%COMP%] styling\nmj-code-editor[_ngcontent-%COMP%] {\n display: block;\n border: 1px solid #ddd;\n border-radius: 3px;\n overflow: hidden;\n min-height: 300px;\n \n .cm-editor {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px;\n }\n \n .cm-focused {\n outline: none !important;\n }\n \n .cm-editor.cm-focused {\n border-color: #2196f3;\n }\n}\n\n//[_ngcontent-%COMP%] List[_ngcontent-%COMP%] View[_ngcontent-%COMP%] Layout\n.list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter[_ngcontent-%COMP%] {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompts-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n}"] });
1384
+ } }, dependencies: [i2.NgSelectOption, i2.ɵNgSelectMultipleOption, i2.DefaultValueAccessor, i2.SelectControlValueAccessor, i2.NgControlStatus, i2.NgModel, i3.SplitterComponent, i3.SplitterPaneComponent, i4.FillContainer, i5.CodeEditorComponent, i6.PromptFilterPanelComponent, i7.ModelPromptPriorityMatrixComponent, i8.PromptVersionControlComponent], styles: [".prompt-management-container[_ngcontent-%COMP%] {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .filter-toggle-btn {\n padding: 6px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n color: #555;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n \n .prompt-count {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &.control-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Filters[_ngcontent-%COMP%] now[_ngcontent-%COMP%] handled[_ngcontent-%COMP%] by[_ngcontent-%COMP%] filter[_ngcontent-%COMP%] panel[_ngcontent-%COMP%] component\n\n.loading-container[_ngcontent-%COMP%], .error-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.error-message[_ngcontent-%COMP%] {\n color: #d32f2f;\n font-weight: 500;\n \n .fa-solid {\n margin-right: 8px;\n }\n}\n\n.loading-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner[_ngcontent-%COMP%] {\n display: inline-block;\n position: relative;\n width: 40px;\n height: 40px;\n \n .spinner-ring {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 32px;\n height: 32px;\n margin: 4px;\n border: 3px solid #2196f3;\n border-radius: 50%;\n animation: _ngcontent-%COMP%_loading-spin 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: #2196f3 transparent transparent transparent;\n \n &:nth-child(1) { animation-delay: -0.45s; }\n &:nth-child(2) { animation-delay: -0.3s; }\n &:nth-child(3) { animation-delay: -0.15s; }\n }\n}\n\n@keyframes _ngcontent-%COMP%_loading-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.empty-state[_ngcontent-%COMP%] {\n text-align: center;\n padding: 60px 20px;\n color: #666;\n \n .fa-solid {\n font-size: 48px;\n margin-bottom: 16px;\n color: #ccc;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n font-size: 18px;\n font-weight: 500;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.prompts-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.prompt-card[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n transition: all 0.2s ease;\n height: fit-content;\n cursor: pointer;\n \n &:hover {\n border-color: #2196f3;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.1);\n transform: translateY(-1px);\n }\n \n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 12px;\n \n .prompt-info {\n display: flex;\n gap: 12px;\n flex: 1;\n \n .prompt-icon {\n color: #2196f3;\n font-size: 20px;\n margin-top: 2px;\n }\n \n .prompt-details {\n flex: 1;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n }\n \n .prompt-meta {\n font-size: 12px;\n color: #666;\n \n .prompt-type {\n margin-left: 8px;\n }\n }\n }\n }\n }\n \n .card-body {\n margin-bottom: 12px;\n \n .prompt-description {\n margin-bottom: 12px;\n color: #555;\n font-size: 13px;\n line-height: 1.4;\n }\n \n .template-info {\n .template-item {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n font-size: 12px;\n color: #666;\n \n .fa-solid {\n margin-right: 6px;\n color: #999;\n }\n }\n \n .template-content-info {\n font-size: 11px;\n color: #999;\n }\n }\n }\n \n .card-actions {\n display: flex;\n gap: 8px;\n border-top: 1px solid #f0f0f0;\n padding-top: 12px;\n \n .action-btn {\n padding: 6px 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f5f5f5;\n border-color: #bbb;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &.action-btn-danger {\n background-color: #f44336;\n border-color: #f44336;\n color: white;\n \n &:hover {\n background-color: #d32f2f;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Editor[_ngcontent-%COMP%] View\n.editor-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.editor-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e0e0e0;\n \n .breadcrumb-section {\n .back-btn {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n text-decoration: underline;\n }\n }\n }\n \n .editor-title {\n flex: 1;\n margin: 0 20px;\n \n h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n }\n}\n\n.editor-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.editor-splitter[_ngcontent-%COMP%] {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompt-details-panel[_ngcontent-%COMP%], .template-editor-panel[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n height: 100%;\n overflow-y: auto;\n \n h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 8px;\n }\n}\n\n.form-field[_ngcontent-%COMP%] {\n margin-bottom: 16px;\n \n .field-label {\n display: block;\n margin-bottom: 4px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n }\n \n .field-input, .field-select {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-textarea {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n resize: vertical;\n min-height: 60px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-value {\n padding: 6px 8px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n font-size: 12px;\n color: #555;\n }\n}\n\n.template-editor-panel[_ngcontent-%COMP%] {\n .editor-container {\n margin-bottom: 16px;\n \n .code-editor {\n width: 100%;\n min-height: 300px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 8px;\n background: #f8f9fa;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .code-display {\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n background: #f8f9fa;\n max-height: 400px;\n overflow-y: auto;\n \n pre {\n margin: 0;\n padding: 12px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n line-height: 1.4;\n color: #333;\n \n code {\n background: none;\n padding: 0;\n font-size: inherit;\n color: inherit;\n }\n }\n }\n }\n \n .editor-help {\n .help-section {\n h5 {\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 8px;\n color: #333;\n }\n \n .syntax-examples {\n .syntax-item {\n margin-bottom: 6px;\n padding: 6px 8px;\n background: #f0f0f0;\n border-radius: 3px;\n font-size: 11px;\n \n code {\n background: #e0e0e0;\n padding: 2px 4px;\n border-radius: 2px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n margin-right: 8px;\n }\n }\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] CodeMirror[_ngcontent-%COMP%] overrides\n.CodeMirror[_ngcontent-%COMP%] {\n border: 1px solid #ddd !important;\n border-radius: 3px !important;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px !important;\n}\n\n.CodeMirror-focused[_ngcontent-%COMP%] {\n border-color: #2196f3 !important;\n}\n\n//[_ngcontent-%COMP%] Status[_ngcontent-%COMP%] badges\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n \n &.status-active {\n background: #e8f5e8;\n color: #2e7d32;\n }\n \n &.status-pending {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.status-disabled {\n background: #ffebee;\n color: #c62828;\n }\n}\n\n//[_ngcontent-%COMP%] Editor[_ngcontent-%COMP%] badges\n.editor-badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n margin-left: 8px;\n \n &.editor-badge-info {\n background: #e3f2fd;\n color: #1976d2;\n }\n \n &.editor-badge-warning {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.editor-badge-secondary {\n background: #f5f5f5;\n color: #666;\n }\n}\n\n//[_ngcontent-%COMP%] New[_ngcontent-%COMP%] category[_ngcontent-%COMP%] creation\n.new-category-container[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n align-items: center;\n \n .field-input {\n flex: 1;\n }\n \n .new-category-actions {\n display: flex;\n gap: 2px;\n \n .action-btn {\n padding: 4px 6px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n \n &:hover {\n background-color: #f5f5f5;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n.new-category-option[_ngcontent-%COMP%] {\n color: #2196f3;\n font-style: italic;\n}\n\n//[_ngcontent-%COMP%] CodeMirror[_ngcontent-%COMP%] 6[_ngcontent-%COMP%] styling\nmj-code-editor[_ngcontent-%COMP%] {\n display: block;\n border: 1px solid #ddd;\n border-radius: 3px;\n overflow: hidden;\n min-height: 300px;\n \n .cm-editor {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px;\n }\n \n .cm-focused {\n outline: none !important;\n }\n \n .cm-editor.cm-focused {\n border-color: #2196f3;\n }\n}\n\n//[_ngcontent-%COMP%] List[_ngcontent-%COMP%] View[_ngcontent-%COMP%] Layout\n.list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.sub-navigation[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n padding: 8px 0;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n\n .sub-nav-btn {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n color: #555;\n font-weight: 500;\n\n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n\n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n box-shadow: 0 2px 4px rgba(33, 150, 243, 0.2);\n }\n\n .fa-solid {\n font-size: 11px;\n }\n }\n}\n\n.main-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter[_ngcontent-%COMP%] {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompts-content[_ngcontent-%COMP%] {\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n}"] });
1307
1385
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PromptManagementComponent, [{
1308
1386
  type: Component,
1309
- args: [{ selector: 'app-prompt-management', template: "<div class=\"prompt-management-container\" mjFillContainer [rightMargin]=\"8\" [bottomMargin]=\"8\">\n <!-- List View -->\n @if (currentView === 'list') {\n <div class=\"list-view\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <button \n type=\"button\" \n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (filterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"prompt-count\">{{ filteredPrompts.length }} prompts</span>\n </div>\n \n <div class=\"header-controls\">\n <button \n type=\"button\" \n class=\"control-btn\"\n (click)=\"createNewPrompt()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Prompt\n </button>\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\">\n <kendo-splitter \n class=\"main-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onMainSplitterChange($event)\"\n mjFillContainer>\n \n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane \n [size]=\"filterPanelVisible ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"filterPanelVisible\"\n [scrollable]=\"false\"\n [hidden]=\"!filterPanelVisible\">\n <mj-prompt-filter-panel\n [prompts]=\"promptsWithTemplates\"\n [filteredPrompts]=\"filteredPrompts\"\n [categories]=\"categories\"\n [types]=\"types\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-prompt-filter-panel>\n </kendo-splitter-pane>\n \n <!-- Prompts List Panel -->\n <kendo-splitter-pane \n [resizable]=\"true\"\n [scrollable]=\"false\">\n <div class=\"prompts-content\">\n\n <!-- Loading State -->\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\">{{ loadingMessage }}</div>\n </div>\n </div>\n }\n\n <!-- Error State -->\n @if (error) {\n <div class=\"error-container\">\n <p class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </p>\n </div>\n }\n\n <!-- Prompts List -->\n @if (!isLoading && !error) {\n <div class=\"prompts-list\">\n @if (filteredPrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <h3>No prompts found</h3>\n <p>No prompts match your current filters. Try adjusting your search criteria or create a new prompt.</p>\n </div>\n } @else {\n <div class=\"prompts-grid\">\n @for (promptWithTemplate of filteredPrompts; track promptWithTemplate.prompt.ID || $index) {\n <div class=\"prompt-card\" (click)=\"viewPrompt(promptWithTemplate)\">\n <!-- Card Header -->\n <div class=\"card-header\">\n <div class=\"prompt-info\">\n <div class=\"prompt-icon\">\n <i [class]=\"getPromptIcon()\"></i>\n </div>\n <div class=\"prompt-details\">\n <h4 class=\"prompt-name\">{{ promptWithTemplate.prompt.Name }}</h4>\n <div class=\"prompt-meta\">\n <span class=\"prompt-category\">{{ getCategoryName(promptWithTemplate.prompt.CategoryID) }}</span>\n @if (promptWithTemplate.type) {\n <span class=\"prompt-type\">\u2022 {{ promptWithTemplate.type.Name }}</span>\n }\n </div>\n </div>\n </div>\n \n <div class=\"status-badge status-{{ promptWithTemplate.prompt.Status.toLowerCase() }}\">\n {{ promptWithTemplate.prompt.Status }}\n </div>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (promptWithTemplate.prompt.Description) {\n <p class=\"prompt-description\">{{ promptWithTemplate.prompt.Description }}</p>\n } @else {\n <p class=\"prompt-description text-muted\">No description provided</p>\n }\n \n <!-- Template Info -->\n <div class=\"template-info\">\n @if (promptWithTemplate.template) {\n <div class=\"template-item\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>{{ promptWithTemplate.template.Name }}</span>\n </div>\n @if (promptWithTemplate.templateContent) {\n <div class=\"template-content-info\">\n <small>\n Template content: {{ (promptWithTemplate.templateContent.TemplateText || '').length }} characters\n </small>\n </div>\n }\n } @else {\n <div class=\"template-item text-muted\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>No template assigned</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button \n type=\"button\" \n class=\"action-btn\"\n (click)=\"viewPrompt(promptWithTemplate)\">\n <i class=\"fa-solid fa-eye\"></i>\n View\n </button>\n \n <button \n type=\"button\" \n class=\"action-btn action-btn-primary\"\n (click)=\"editPrompt(promptWithTemplate)\">\n <i class=\"fa-solid fa-edit\"></i>\n Edit\n </button>\n \n <button \n type=\"button\" \n class=\"action-btn action-btn-danger\"\n (click)=\"deletePrompt(promptWithTemplate)\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n </div>\n }\n\n <!-- Editor View -->\n @if (currentView === 'editor' && selectedPrompt) {\n <div class=\"editor-view\">\n <!-- Editor Header -->\n <div class=\"editor-header\">\n <div class=\"breadcrumb-section\">\n <button \n type=\"button\" \n class=\"back-btn\"\n (click)=\"backToList()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Prompts\n </button>\n </div>\n \n <div class=\"editor-title\">\n <h2>\n @if (isEditing && !selectedPrompt.prompt.ID) {\n <i class=\"fa-solid fa-plus\"></i>\n Create New Prompt\n } @else if (isEditing) {\n <i class=\"fa-solid fa-edit\"></i>\n Edit Prompt\n } @else {\n <i class=\"fa-solid fa-eye\"></i>\n View Prompt\n }\n </h2>\n \n @if (selectedPrompt.prompt.ID) {\n <div class=\"status-badge status-{{ selectedPrompt.prompt.Status.toLowerCase() }}\">\n {{ selectedPrompt.prompt.Status }}\n </div>\n }\n </div>\n \n <div class=\"editor-actions\">\n @if (!isEditing) {\n <button \n type=\"button\" \n class=\"control-btn\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid fa-edit\"></i>\n Edit\n </button>\n } @else {\n <button \n type=\"button\" \n class=\"control-btn\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n \n <button \n type=\"button\" \n class=\"control-btn control-btn-primary\"\n (click)=\"savePrompt()\"\n [disabled]=\"isLoading\">\n @if (isLoading) {\n <span class=\"loading-spinner-sm\"></span>\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n }\n Save\n </button>\n }\n </div>\n </div>\n\n <!-- Editor Content -->\n <div class=\"editor-content\">\n <kendo-splitter \n class=\"editor-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onEditorSplitterChange($event)\"\n mjFillContainer>\n \n <!-- Prompt Details Panel -->\n <kendo-splitter-pane \n [collapsible]=\"false\"\n [resizable]=\"true\"\n [scrollable]=\"true\">\n <div class=\"prompt-details-panel\">\n <h3>Prompt Details</h3>\n \n <!-- Name -->\n <div class=\"form-field\">\n <label class=\"field-label\">Name *</label>\n @if (isEditing) {\n <input \n type=\"text\" \n class=\"field-input\"\n [(ngModel)]=\"selectedPrompt.prompt.Name\"\n placeholder=\"Enter prompt name\"\n (input)=\"isDirty = true\">\n } @else {\n <div class=\"field-value\">{{ selectedPrompt.prompt.Name }}</div>\n }\n </div>\n \n <!-- Description -->\n <div class=\"form-field\">\n <label class=\"field-label\">Description</label>\n @if (isEditing) {\n <textarea \n class=\"field-textarea\"\n [(ngModel)]=\"selectedPrompt.prompt.Description\"\n placeholder=\"Enter prompt description\"\n (input)=\"isDirty = true\"></textarea>\n } @else {\n <div class=\"field-value\">\n {{ selectedPrompt.prompt.Description || 'No description provided' }}\n </div>\n }\n </div>\n \n <!-- Category -->\n <div class=\"form-field\">\n <label class=\"field-label\">Category</label>\n @if (isEditing) {\n @if (!showNewCategoryInput) {\n <select \n class=\"field-select\"\n [(ngModel)]=\"selectedPrompt.prompt.CategoryID\"\n (ngModelChange)=\"onCategoryChange($event)\">\n <option value=\"\">Select category...</option>\n @for (category of categories; track category.ID) {\n <option [value]=\"category.ID\">{{ category.Name }}</option>\n }\n <option value=\"new\" class=\"new-category-option\">+ Create New Category</option>\n </select>\n } @else {\n <div class=\"new-category-container\">\n <input \n type=\"text\" \n class=\"field-input\"\n [(ngModel)]=\"newCategoryName\"\n placeholder=\"Enter new category name\"\n (keyup)=\"onCreateNewCategoryKeyup($event)\"\n #newCategoryInput>\n <div class=\"new-category-actions\">\n <button \n type=\"button\" \n class=\"action-btn action-btn-primary\"\n (click)=\"createAndSelectNewCategory()\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button \n type=\"button\" \n class=\"action-btn\"\n (click)=\"cancelNewCategory()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n }\n } @else {\n <div class=\"field-value\">\n {{ getCategoryName(selectedPrompt.prompt.CategoryID) }}\n </div>\n }\n </div>\n \n <!-- Type -->\n <div class=\"form-field\">\n <label class=\"field-label\">Type</label>\n @if (isEditing) {\n <select \n class=\"field-select\"\n [(ngModel)]=\"selectedPrompt.prompt.TypeID\"\n (change)=\"isDirty = true\">\n <option value=\"\">Select type...</option>\n @for (type of types; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n } @else {\n <div class=\"field-value\">\n {{ getTypeName(selectedPrompt.prompt.TypeID) }}\n </div>\n }\n </div>\n \n <!-- Status -->\n <div class=\"form-field\">\n <label class=\"field-label\">Status</label>\n @if (isEditing) {\n <select \n class=\"field-select\"\n [(ngModel)]=\"selectedPrompt.prompt.Status\"\n (change)=\"isDirty = true\">\n <option value=\"Active\">Active</option>\n <option value=\"Pending\">Pending</option>\n <option value=\"Disabled\">Disabled</option>\n </select>\n } @else {\n <div class=\"field-value\">\n <span class=\"status-badge status-{{ selectedPrompt.prompt.Status.toLowerCase() }}\">\n {{ selectedPrompt.prompt.Status }}\n </span>\n </div>\n }\n </div>\n \n <!-- Template Info -->\n @if (selectedPrompt.template) {\n <div class=\"template-info-section\">\n <h4>Template Information</h4>\n <div class=\"template-details\">\n <div><strong>Template:</strong> {{ selectedPrompt.template.Name }}</div>\n @if (selectedPrompt.template.Description) {\n <div><strong>Description:</strong> {{ selectedPrompt.template.Description }}</div>\n }\n @if (selectedPrompt.templateContent) {\n <div><strong>Content Length:</strong> {{ (selectedPrompt.templateContent.TemplateText || '').length }} characters</div>\n }\n </div>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n \n <!-- Template Editor Panel -->\n <kendo-splitter-pane \n [resizable]=\"true\"\n [scrollable]=\"true\">\n <div class=\"template-editor-panel\">\n <div class=\"editor-header\">\n <h3>Template Content</h3>\n <div class=\"editor-info\">\n @if (isEditing) {\n <span class=\"editor-badge editor-badge-info\">Nunjucks Template</span>\n @if (isDirty) {\n <span class=\"editor-badge editor-badge-warning\">Unsaved Changes</span>\n }\n } @else {\n <span class=\"editor-badge editor-badge-secondary\">Read Only</span>\n }\n </div>\n </div>\n \n <div class=\"editor-container\">\n <mj-code-editor\n [value]=\"editorContent\"\n [languages]=\"supportedLanguages\"\n [language]=\"editorLanguage\"\n [placeholder]=\"'Enter your Nunjucks template here...'\"\n [lineWrapping]=\"true\"\n [highlightWhitespace]=\"false\"\n [indentWithTab]=\"true\"\n [indentUnit]=\"' '\"\n [readonly]=\"!isEditing\"\n (change)=\"onEditorContentChange($event)\">\n </mj-code-editor>\n </div>\n \n <!-- Editor Help -->\n @if (isEditing) {\n <div class=\"editor-help\">\n <div class=\"help-section\">\n <h5>Nunjucks Template Syntax</h5>\n <div class=\"syntax-examples\">\n <div class=\"syntax-item\">\n <code>{{ \"{{ variable }}\" }}</code> - Variable output\n </div>\n <div class=\"syntax-item\">\n <code>{{ \"{% if condition %} ... {% endif %}\" }}</code> - Conditionals\n </div>\n <div class=\"syntax-item\">\n <code>{{ \"{% for item in items %} ... {% endfor %}\" }}</code> - Loops\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n </div>\n }\n</div>", styles: [".prompt-management-container {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .filter-toggle-btn {\n padding: 6px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n color: #555;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n \n .prompt-count {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &.control-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n// Filters now handled by filter panel component\n\n.loading-container, .error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.error-message {\n color: #d32f2f;\n font-weight: 500;\n \n .fa-solid {\n margin-right: 8px;\n }\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner {\n display: inline-block;\n position: relative;\n width: 40px;\n height: 40px;\n \n .spinner-ring {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 32px;\n height: 32px;\n margin: 4px;\n border: 3px solid #2196f3;\n border-radius: 50%;\n animation: loading-spin 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: #2196f3 transparent transparent transparent;\n \n &:nth-child(1) { animation-delay: -0.45s; }\n &:nth-child(2) { animation-delay: -0.3s; }\n &:nth-child(3) { animation-delay: -0.15s; }\n }\n}\n\n@keyframes loading-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.empty-state {\n text-align: center;\n padding: 60px 20px;\n color: #666;\n \n .fa-solid {\n font-size: 48px;\n margin-bottom: 16px;\n color: #ccc;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n font-size: 18px;\n font-weight: 500;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.prompts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.prompt-card {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n transition: all 0.2s ease;\n height: fit-content;\n cursor: pointer;\n \n &:hover {\n border-color: #2196f3;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.1);\n transform: translateY(-1px);\n }\n \n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 12px;\n \n .prompt-info {\n display: flex;\n gap: 12px;\n flex: 1;\n \n .prompt-icon {\n color: #2196f3;\n font-size: 20px;\n margin-top: 2px;\n }\n \n .prompt-details {\n flex: 1;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n }\n \n .prompt-meta {\n font-size: 12px;\n color: #666;\n \n .prompt-type {\n margin-left: 8px;\n }\n }\n }\n }\n }\n \n .card-body {\n margin-bottom: 12px;\n \n .prompt-description {\n margin-bottom: 12px;\n color: #555;\n font-size: 13px;\n line-height: 1.4;\n }\n \n .template-info {\n .template-item {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n font-size: 12px;\n color: #666;\n \n .fa-solid {\n margin-right: 6px;\n color: #999;\n }\n }\n \n .template-content-info {\n font-size: 11px;\n color: #999;\n }\n }\n }\n \n .card-actions {\n display: flex;\n gap: 8px;\n border-top: 1px solid #f0f0f0;\n padding-top: 12px;\n \n .action-btn {\n padding: 6px 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f5f5f5;\n border-color: #bbb;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &.action-btn-danger {\n background-color: #f44336;\n border-color: #f44336;\n color: white;\n \n &:hover {\n background-color: #d32f2f;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n// Editor View\n.editor-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.editor-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e0e0e0;\n \n .breadcrumb-section {\n .back-btn {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n text-decoration: underline;\n }\n }\n }\n \n .editor-title {\n flex: 1;\n margin: 0 20px;\n \n h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n }\n}\n\n.editor-content {\n flex: 1;\n overflow: hidden;\n}\n\n.editor-splitter {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompt-details-panel, .template-editor-panel {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n height: 100%;\n overflow-y: auto;\n \n h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 8px;\n }\n}\n\n.form-field {\n margin-bottom: 16px;\n \n .field-label {\n display: block;\n margin-bottom: 4px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n }\n \n .field-input, .field-select {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-textarea {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n resize: vertical;\n min-height: 60px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-value {\n padding: 6px 8px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n font-size: 12px;\n color: #555;\n }\n}\n\n.template-editor-panel {\n .editor-container {\n margin-bottom: 16px;\n \n .code-editor {\n width: 100%;\n min-height: 300px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 8px;\n background: #f8f9fa;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .code-display {\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n background: #f8f9fa;\n max-height: 400px;\n overflow-y: auto;\n \n pre {\n margin: 0;\n padding: 12px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n line-height: 1.4;\n color: #333;\n \n code {\n background: none;\n padding: 0;\n font-size: inherit;\n color: inherit;\n }\n }\n }\n }\n \n .editor-help {\n .help-section {\n h5 {\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 8px;\n color: #333;\n }\n \n .syntax-examples {\n .syntax-item {\n margin-bottom: 6px;\n padding: 6px 8px;\n background: #f0f0f0;\n border-radius: 3px;\n font-size: 11px;\n \n code {\n background: #e0e0e0;\n padding: 2px 4px;\n border-radius: 2px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n margin-right: 8px;\n }\n }\n }\n }\n }\n}\n\n// CodeMirror overrides\n.CodeMirror {\n border: 1px solid #ddd !important;\n border-radius: 3px !important;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px !important;\n}\n\n.CodeMirror-focused {\n border-color: #2196f3 !important;\n}\n\n// Status badges\n.status-badge {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n \n &.status-active {\n background: #e8f5e8;\n color: #2e7d32;\n }\n \n &.status-pending {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.status-disabled {\n background: #ffebee;\n color: #c62828;\n }\n}\n\n// Editor badges\n.editor-badge {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n margin-left: 8px;\n \n &.editor-badge-info {\n background: #e3f2fd;\n color: #1976d2;\n }\n \n &.editor-badge-warning {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.editor-badge-secondary {\n background: #f5f5f5;\n color: #666;\n }\n}\n\n// New category creation\n.new-category-container {\n display: flex;\n gap: 4px;\n align-items: center;\n \n .field-input {\n flex: 1;\n }\n \n .new-category-actions {\n display: flex;\n gap: 2px;\n \n .action-btn {\n padding: 4px 6px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n \n &:hover {\n background-color: #f5f5f5;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n.new-category-option {\n color: #2196f3;\n font-style: italic;\n}\n\n// CodeMirror 6 styling\nmj-code-editor {\n display: block;\n border: 1px solid #ddd;\n border-radius: 3px;\n overflow: hidden;\n min-height: 300px;\n \n .cm-editor {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px;\n }\n \n .cm-focused {\n outline: none !important;\n }\n \n .cm-editor.cm-focused {\n border-color: #2196f3;\n }\n}\n\n// List View Layout\n.list-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.main-content {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompts-content {\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n}"] }]
1387
+ args: [{ selector: 'app-prompt-management', template: "<div class=\"prompt-management-container\" mjFillContainer [rightMargin]=\"8\" [bottomMargin]=\"8\">\n <!-- List View -->\n @if (currentView === 'list') {\n <div class=\"list-view\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-info\">\n <button \n type=\"button\" \n class=\"filter-toggle-btn\"\n (click)=\"toggleFilterPanel()\"\n title=\"Toggle Filters\">\n <i class=\"fa-solid fa-filter\"></i>\n @if (filterPanelVisible) {\n Hide Filters\n } @else {\n Show Filters\n }\n </button>\n <span class=\"prompt-count\">{{ filteredPrompts.length }} prompts</span>\n </div>\n \n <div class=\"header-controls\">\n <button \n type=\"button\" \n class=\"control-btn\"\n (click)=\"createNewPrompt()\">\n <i class=\"fa-solid fa-plus\"></i>\n New Prompt\n </button>\n </div>\n </div>\n\n <!-- Sub Navigation -->\n <div class=\"sub-navigation\">\n <button \n type=\"button\" \n class=\"sub-nav-btn\"\n [class.active]=\"currentSubView === 'list'\"\n (click)=\"setSubView('list')\"\n title=\"List View\">\n <i class=\"fa-solid fa-list\"></i>\n List View\n </button>\n <button \n type=\"button\" \n class=\"sub-nav-btn\"\n [class.active]=\"currentSubView === 'priority-matrix'\"\n (click)=\"setSubView('priority-matrix')\"\n title=\"Priority Matrix\">\n <i class=\"fa-solid fa-th\"></i>\n Priority Matrix\n </button>\n <button \n type=\"button\" \n class=\"sub-nav-btn\"\n [class.active]=\"currentSubView === 'version-control'\"\n (click)=\"setSubView('version-control')\"\n title=\"Version Control\">\n <i class=\"fa-solid fa-code-branch\"></i>\n Version Control\n </button>\n </div>\n\n <!-- Main Content with Splitter -->\n <div class=\"main-content\">\n <!-- List View Content -->\n @if (currentSubView === 'list') {\n <kendo-splitter \n class=\"main-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onMainSplitterChange($event)\"\n mjFillContainer>\n \n <!-- Filter Panel (Left) -->\n <kendo-splitter-pane \n [size]=\"filterPanelVisible ? '320px' : '0px'\"\n [collapsible]=\"false\"\n [resizable]=\"filterPanelVisible\"\n [scrollable]=\"false\"\n [hidden]=\"!filterPanelVisible\">\n <mj-prompt-filter-panel\n [prompts]=\"promptsWithTemplates\"\n [filteredPrompts]=\"filteredPrompts\"\n [categories]=\"categories\"\n [types]=\"types\"\n [filters]=\"currentFilters\"\n (filtersChange)=\"onFiltersChange($event)\"\n (filterChange)=\"onFilterChange()\"\n (resetFilters)=\"onResetFilters()\"\n (closePanel)=\"toggleFilterPanel()\">\n </mj-prompt-filter-panel>\n </kendo-splitter-pane>\n \n <!-- Prompts List Panel -->\n <kendo-splitter-pane \n [resizable]=\"true\"\n [scrollable]=\"false\">\n <div class=\"prompts-content\">\n\n <!-- Loading State -->\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\">{{ loadingMessage }}</div>\n </div>\n </div>\n }\n\n <!-- Error State -->\n @if (error) {\n <div class=\"error-container\">\n <p class=\"error-message\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n {{ error }}\n </p>\n </div>\n }\n\n <!-- Prompts List -->\n @if (!isLoading && !error) {\n <div class=\"prompts-list\">\n @if (filteredPrompts.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-comment-dots\"></i>\n <h3>No prompts found</h3>\n <p>No prompts match your current filters. Try adjusting your search criteria or create a new prompt.</p>\n </div>\n } @else {\n <div class=\"prompts-grid\">\n @for (promptWithTemplate of filteredPrompts; track promptWithTemplate.prompt.ID || $index) {\n <div class=\"prompt-card\" (click)=\"viewPrompt(promptWithTemplate)\">\n <!-- Card Header -->\n <div class=\"card-header\">\n <div class=\"prompt-info\">\n <div class=\"prompt-icon\">\n <i [class]=\"getPromptIcon()\"></i>\n </div>\n <div class=\"prompt-details\">\n <h4 class=\"prompt-name\">{{ promptWithTemplate.prompt.Name }}</h4>\n <div class=\"prompt-meta\">\n <span class=\"prompt-category\">{{ getCategoryName(promptWithTemplate.prompt.CategoryID) }}</span>\n @if (promptWithTemplate.type) {\n <span class=\"prompt-type\">\u2022 {{ promptWithTemplate.type.Name }}</span>\n }\n </div>\n </div>\n </div>\n \n <div class=\"status-badge status-{{ promptWithTemplate.prompt.Status.toLowerCase() }}\">\n {{ promptWithTemplate.prompt.Status }}\n </div>\n </div>\n\n <!-- Card Body -->\n <div class=\"card-body\">\n @if (promptWithTemplate.prompt.Description) {\n <p class=\"prompt-description\">{{ promptWithTemplate.prompt.Description }}</p>\n } @else {\n <p class=\"prompt-description text-muted\">No description provided</p>\n }\n \n <!-- Template Info -->\n <div class=\"template-info\">\n @if (promptWithTemplate.template) {\n <div class=\"template-item\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>{{ promptWithTemplate.template.Name }}</span>\n </div>\n @if (promptWithTemplate.templateContent) {\n <div class=\"template-content-info\">\n <small>\n Template content: {{ (promptWithTemplate.templateContent.TemplateText || '').length }} characters\n </small>\n </div>\n }\n } @else {\n <div class=\"template-item text-muted\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>No template assigned</span>\n </div>\n }\n </div>\n </div>\n\n <!-- Card Actions -->\n <div class=\"card-actions\" (click)=\"$event.stopPropagation()\">\n <button \n type=\"button\" \n class=\"action-btn\"\n (click)=\"viewPrompt(promptWithTemplate)\">\n <i class=\"fa-solid fa-eye\"></i>\n View\n </button>\n \n <button \n type=\"button\" \n class=\"action-btn action-btn-primary\"\n (click)=\"editPrompt(promptWithTemplate)\">\n <i class=\"fa-solid fa-edit\"></i>\n Edit\n </button>\n \n <button \n type=\"button\" \n class=\"action-btn action-btn-danger\"\n (click)=\"deletePrompt(promptWithTemplate)\">\n <i class=\"fa-solid fa-trash\"></i>\n Delete\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n }\n\n\n <!-- Priority Matrix View -->\n @if (currentSubView === 'priority-matrix') {\n <app-model-prompt-priority-matrix\n [selectedPrompts]=\"promptsForMatrix\"\n (promptSelected)=\"onPromptSelectedFromMatrix($event)\"\n mjFillContainer>\n </app-model-prompt-priority-matrix>\n }\n\n <!-- Version Control View -->\n @if (currentSubView === 'version-control') {\n <app-prompt-version-control\n [prompt]=\"selectedPrompt?.prompt || null\"\n (versionSelected)=\"onVersionSelected($event)\"\n mjFillContainer>\n </app-prompt-version-control>\n }\n </div>\n </div>\n }\n\n <!-- Editor View -->\n @if (currentView === 'editor' && selectedPrompt) {\n <div class=\"editor-view\">\n <!-- Editor Header -->\n <div class=\"editor-header\">\n <div class=\"breadcrumb-section\">\n <button \n type=\"button\" \n class=\"back-btn\"\n (click)=\"backToList()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Prompts\n </button>\n </div>\n \n <div class=\"editor-title\">\n <h2>\n @if (isEditing && !selectedPrompt.prompt.ID) {\n <i class=\"fa-solid fa-plus\"></i>\n Create New Prompt\n } @else if (isEditing) {\n <i class=\"fa-solid fa-edit\"></i>\n Edit Prompt\n } @else {\n <i class=\"fa-solid fa-eye\"></i>\n View Prompt\n }\n </h2>\n \n @if (selectedPrompt.prompt.ID) {\n <div class=\"status-badge status-{{ selectedPrompt.prompt.Status.toLowerCase() }}\">\n {{ selectedPrompt.prompt.Status }}\n </div>\n }\n </div>\n \n <div class=\"editor-actions\">\n @if (!isEditing) {\n <button \n type=\"button\" \n class=\"control-btn\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid fa-edit\"></i>\n Edit\n </button>\n } @else {\n <button \n type=\"button\" \n class=\"control-btn\"\n (click)=\"toggleEdit()\">\n <i class=\"fa-solid fa-times\"></i>\n Cancel\n </button>\n \n <button \n type=\"button\" \n class=\"control-btn control-btn-primary\"\n (click)=\"savePrompt()\"\n [disabled]=\"isLoading\">\n @if (isLoading) {\n <span class=\"loading-spinner-sm\"></span>\n } @else {\n <i class=\"fa-solid fa-save\"></i>\n }\n Save\n </button>\n }\n </div>\n </div>\n\n <!-- Editor Content -->\n <div class=\"editor-content\">\n <kendo-splitter \n class=\"editor-splitter\"\n orientation=\"horizontal\"\n (layoutChange)=\"onEditorSplitterChange($event)\"\n mjFillContainer>\n \n <!-- Prompt Details Panel -->\n <kendo-splitter-pane \n [collapsible]=\"false\"\n [resizable]=\"true\"\n [scrollable]=\"true\">\n <div class=\"prompt-details-panel\">\n <h3>Prompt Details</h3>\n \n <!-- Name -->\n <div class=\"form-field\">\n <label class=\"field-label\">Name *</label>\n @if (isEditing) {\n <input \n type=\"text\" \n class=\"field-input\"\n [(ngModel)]=\"selectedPrompt.prompt.Name\"\n placeholder=\"Enter prompt name\"\n (input)=\"isDirty = true\">\n } @else {\n <div class=\"field-value\">{{ selectedPrompt.prompt.Name }}</div>\n }\n </div>\n \n <!-- Description -->\n <div class=\"form-field\">\n <label class=\"field-label\">Description</label>\n @if (isEditing) {\n <textarea \n class=\"field-textarea\"\n [(ngModel)]=\"selectedPrompt.prompt.Description\"\n placeholder=\"Enter prompt description\"\n (input)=\"isDirty = true\"></textarea>\n } @else {\n <div class=\"field-value\">\n {{ selectedPrompt.prompt.Description || 'No description provided' }}\n </div>\n }\n </div>\n \n <!-- Category -->\n <div class=\"form-field\">\n <label class=\"field-label\">Category</label>\n @if (isEditing) {\n @if (!showNewCategoryInput) {\n <select \n class=\"field-select\"\n [(ngModel)]=\"selectedPrompt.prompt.CategoryID\"\n (ngModelChange)=\"onCategoryChange($event)\">\n <option value=\"\">Select category...</option>\n @for (category of categories; track category.ID) {\n <option [value]=\"category.ID\">{{ category.Name }}</option>\n }\n <option value=\"new\" class=\"new-category-option\">+ Create New Category</option>\n </select>\n } @else {\n <div class=\"new-category-container\">\n <input \n type=\"text\" \n class=\"field-input\"\n [(ngModel)]=\"newCategoryName\"\n placeholder=\"Enter new category name\"\n (keyup)=\"onCreateNewCategoryKeyup($event)\"\n #newCategoryInput>\n <div class=\"new-category-actions\">\n <button \n type=\"button\" \n class=\"action-btn action-btn-primary\"\n (click)=\"createAndSelectNewCategory()\">\n <i class=\"fa-solid fa-check\"></i>\n </button>\n <button \n type=\"button\" \n class=\"action-btn\"\n (click)=\"cancelNewCategory()\">\n <i class=\"fa-solid fa-times\"></i>\n </button>\n </div>\n </div>\n }\n } @else {\n <div class=\"field-value\">\n {{ getCategoryName(selectedPrompt.prompt.CategoryID) }}\n </div>\n }\n </div>\n \n <!-- Type -->\n <div class=\"form-field\">\n <label class=\"field-label\">Type</label>\n @if (isEditing) {\n <select \n class=\"field-select\"\n [(ngModel)]=\"selectedPrompt.prompt.TypeID\"\n (change)=\"isDirty = true\">\n <option value=\"\">Select type...</option>\n @for (type of types; track type.ID) {\n <option [value]=\"type.ID\">{{ type.Name }}</option>\n }\n </select>\n } @else {\n <div class=\"field-value\">\n {{ getTypeName(selectedPrompt.prompt.TypeID) }}\n </div>\n }\n </div>\n \n <!-- Status -->\n <div class=\"form-field\">\n <label class=\"field-label\">Status</label>\n @if (isEditing) {\n <select \n class=\"field-select\"\n [(ngModel)]=\"selectedPrompt.prompt.Status\"\n (change)=\"isDirty = true\">\n <option value=\"Active\">Active</option>\n <option value=\"Pending\">Pending</option>\n <option value=\"Disabled\">Disabled</option>\n </select>\n } @else {\n <div class=\"field-value\">\n <span class=\"status-badge status-{{ selectedPrompt.prompt.Status.toLowerCase() }}\">\n {{ selectedPrompt.prompt.Status }}\n </span>\n </div>\n }\n </div>\n \n <!-- Template Info -->\n @if (selectedPrompt.template) {\n <div class=\"template-info-section\">\n <h4>Template Information</h4>\n <div class=\"template-details\">\n <div><strong>Template:</strong> {{ selectedPrompt.template.Name }}</div>\n @if (selectedPrompt.template.Description) {\n <div><strong>Description:</strong> {{ selectedPrompt.template.Description }}</div>\n }\n @if (selectedPrompt.templateContent) {\n <div><strong>Content Length:</strong> {{ (selectedPrompt.templateContent.TemplateText || '').length }} characters</div>\n }\n </div>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n \n <!-- Template Editor Panel -->\n <kendo-splitter-pane \n [resizable]=\"true\"\n [scrollable]=\"true\">\n <div class=\"template-editor-panel\">\n <div class=\"editor-header\">\n <h3>Template Content</h3>\n <div class=\"editor-info\">\n @if (isEditing) {\n <span class=\"editor-badge editor-badge-info\">Nunjucks Template</span>\n @if (isDirty) {\n <span class=\"editor-badge editor-badge-warning\">Unsaved Changes</span>\n }\n } @else {\n <span class=\"editor-badge editor-badge-secondary\">Read Only</span>\n }\n </div>\n </div>\n \n <div class=\"editor-container\">\n <mj-code-editor\n [value]=\"editorContent\"\n [languages]=\"supportedLanguages\"\n [language]=\"editorLanguage\"\n [placeholder]=\"'Enter your Nunjucks template here...'\"\n [lineWrapping]=\"true\"\n [highlightWhitespace]=\"false\"\n [indentWithTab]=\"true\"\n [indentUnit]=\"' '\"\n [readonly]=\"!isEditing\"\n (change)=\"onEditorContentChange($event)\">\n </mj-code-editor>\n </div>\n \n <!-- Editor Help -->\n @if (isEditing) {\n <div class=\"editor-help\">\n <div class=\"help-section\">\n <h5>Nunjucks Template Syntax</h5>\n <div class=\"syntax-examples\">\n <div class=\"syntax-item\">\n <code>{{ \"{{ variable }}\" }}</code> - Variable output\n </div>\n <div class=\"syntax-item\">\n <code>{{ \"{% if condition %} ... {% endif %}\" }}</code> - Conditionals\n </div>\n <div class=\"syntax-item\">\n <code>{{ \"{% for item in items %} ... {% endfor %}\" }}</code> - Loops\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n </div>\n </div>\n }\n</div>", styles: [".prompt-management-container {\n overflow: hidden;\n padding: 4px;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.dashboard-header {\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-shrink: 0;\n \n .header-info {\n flex: 1;\n display: flex;\n align-items: center;\n gap: 12px;\n }\n \n .filter-toggle-btn {\n padding: 6px 10px;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n color: #555;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n \n .prompt-count {\n font-size: 12px;\n color: #2196f3;\n font-weight: 600;\n background: rgba(33, 150, 243, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n border: 1px solid rgba(33, 150, 243, 0.2);\n }\n \n .header-controls {\n display: flex;\n gap: 8px;\n \n .control-btn {\n padding: 8px 12px;\n border: 1px solid #ccc;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n }\n \n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n }\n \n &.control-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n \n &:hover {\n background-color: white;\n border-color: #ccc;\n }\n }\n \n .fa-solid {\n font-size: 14px;\n }\n }\n }\n}\n\n// Filters now handled by filter panel component\n\n.loading-container, .error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n background: #fafafa;\n flex: 1;\n \n p {\n color: #666;\n font-size: 14px;\n }\n}\n\n.error-message {\n color: #d32f2f;\n font-weight: 500;\n \n .fa-solid {\n margin-right: 8px;\n }\n}\n\n.loading-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.loading-spinner {\n display: inline-block;\n position: relative;\n width: 40px;\n height: 40px;\n \n .spinner-ring {\n box-sizing: border-box;\n display: block;\n position: absolute;\n width: 32px;\n height: 32px;\n margin: 4px;\n border: 3px solid #2196f3;\n border-radius: 50%;\n animation: loading-spin 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n border-color: #2196f3 transparent transparent transparent;\n \n &:nth-child(1) { animation-delay: -0.45s; }\n &:nth-child(2) { animation-delay: -0.3s; }\n &:nth-child(3) { animation-delay: -0.15s; }\n }\n}\n\n@keyframes loading-spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.empty-state {\n text-align: center;\n padding: 60px 20px;\n color: #666;\n \n .fa-solid {\n font-size: 48px;\n margin-bottom: 16px;\n color: #ccc;\n }\n \n h3 {\n margin: 0 0 8px 0;\n color: #333;\n font-size: 18px;\n font-weight: 500;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n }\n}\n\n.prompts-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n flex: 1;\n overflow-y: auto;\n}\n\n.prompt-card {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n transition: all 0.2s ease;\n height: fit-content;\n cursor: pointer;\n \n &:hover {\n border-color: #2196f3;\n box-shadow: 0 2px 8px rgba(33, 150, 243, 0.1);\n transform: translateY(-1px);\n }\n \n .card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 12px;\n \n .prompt-info {\n display: flex;\n gap: 12px;\n flex: 1;\n \n .prompt-icon {\n color: #2196f3;\n font-size: 20px;\n margin-top: 2px;\n }\n \n .prompt-details {\n flex: 1;\n \n .prompt-name {\n margin: 0 0 4px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n }\n \n .prompt-meta {\n font-size: 12px;\n color: #666;\n \n .prompt-type {\n margin-left: 8px;\n }\n }\n }\n }\n }\n \n .card-body {\n margin-bottom: 12px;\n \n .prompt-description {\n margin-bottom: 12px;\n color: #555;\n font-size: 13px;\n line-height: 1.4;\n }\n \n .template-info {\n .template-item {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n font-size: 12px;\n color: #666;\n \n .fa-solid {\n margin-right: 6px;\n color: #999;\n }\n }\n \n .template-content-info {\n font-size: 11px;\n color: #999;\n }\n }\n }\n \n .card-actions {\n display: flex;\n gap: 8px;\n border-top: 1px solid #f0f0f0;\n padding-top: 12px;\n \n .action-btn {\n padding: 6px 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 11px;\n display: flex;\n align-items: center;\n gap: 4px;\n transition: all 0.2s;\n \n &:hover {\n background-color: #f5f5f5;\n border-color: #bbb;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n &.action-btn-danger {\n background-color: #f44336;\n border-color: #f44336;\n color: white;\n \n &:hover {\n background-color: #d32f2f;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n// Editor View\n.editor-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.editor-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n padding-bottom: 16px;\n border-bottom: 1px solid #e0e0e0;\n \n .breadcrumb-section {\n .back-btn {\n background: none;\n border: none;\n color: #2196f3;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n \n &:hover {\n text-decoration: underline;\n }\n }\n }\n \n .editor-title {\n flex: 1;\n margin: 0 20px;\n \n h2 {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n }\n}\n\n.editor-content {\n flex: 1;\n overflow: hidden;\n}\n\n.editor-splitter {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompt-details-panel, .template-editor-panel {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n padding: 16px;\n height: 100%;\n overflow-y: auto;\n \n h3 {\n margin: 0 0 16px 0;\n font-size: 16px;\n font-weight: 500;\n color: #333;\n border-bottom: 1px solid #f0f0f0;\n padding-bottom: 8px;\n }\n}\n\n.form-field {\n margin-bottom: 16px;\n \n .field-label {\n display: block;\n margin-bottom: 4px;\n font-size: 12px;\n font-weight: 500;\n color: #555;\n }\n \n .field-input, .field-select {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-textarea {\n width: 100%;\n padding: 6px 8px;\n border: 1px solid #ddd;\n border-radius: 3px;\n font-size: 12px;\n resize: vertical;\n min-height: 60px;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .field-value {\n padding: 6px 8px;\n background: #f8f9fa;\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n font-size: 12px;\n color: #555;\n }\n}\n\n.template-editor-panel {\n .editor-container {\n margin-bottom: 16px;\n \n .code-editor {\n width: 100%;\n min-height: 300px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n border: 1px solid #ddd;\n border-radius: 3px;\n padding: 8px;\n background: #f8f9fa;\n \n &:focus {\n outline: none;\n border-color: #2196f3;\n }\n }\n \n .code-display {\n border: 1px solid #e0e0e0;\n border-radius: 3px;\n background: #f8f9fa;\n max-height: 400px;\n overflow-y: auto;\n \n pre {\n margin: 0;\n padding: 12px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n font-size: 12px;\n line-height: 1.4;\n color: #333;\n \n code {\n background: none;\n padding: 0;\n font-size: inherit;\n color: inherit;\n }\n }\n }\n }\n \n .editor-help {\n .help-section {\n h5 {\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 8px;\n color: #333;\n }\n \n .syntax-examples {\n .syntax-item {\n margin-bottom: 6px;\n padding: 6px 8px;\n background: #f0f0f0;\n border-radius: 3px;\n font-size: 11px;\n \n code {\n background: #e0e0e0;\n padding: 2px 4px;\n border-radius: 2px;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;\n margin-right: 8px;\n }\n }\n }\n }\n }\n}\n\n// CodeMirror overrides\n.CodeMirror {\n border: 1px solid #ddd !important;\n border-radius: 3px !important;\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px !important;\n}\n\n.CodeMirror-focused {\n border-color: #2196f3 !important;\n}\n\n// Status badges\n.status-badge {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n text-transform: uppercase;\n \n &.status-active {\n background: #e8f5e8;\n color: #2e7d32;\n }\n \n &.status-pending {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.status-disabled {\n background: #ffebee;\n color: #c62828;\n }\n}\n\n// Editor badges\n.editor-badge {\n padding: 2px 6px;\n border-radius: 3px;\n font-size: 10px;\n font-weight: 500;\n margin-left: 8px;\n \n &.editor-badge-info {\n background: #e3f2fd;\n color: #1976d2;\n }\n \n &.editor-badge-warning {\n background: #fff3e0;\n color: #f57c00;\n }\n \n &.editor-badge-secondary {\n background: #f5f5f5;\n color: #666;\n }\n}\n\n// New category creation\n.new-category-container {\n display: flex;\n gap: 4px;\n align-items: center;\n \n .field-input {\n flex: 1;\n }\n \n .new-category-actions {\n display: flex;\n gap: 2px;\n \n .action-btn {\n padding: 4px 6px;\n border: 1px solid #ddd;\n border-radius: 3px;\n background: white;\n cursor: pointer;\n font-size: 10px;\n display: flex;\n align-items: center;\n justify-content: center;\n min-width: 24px;\n height: 24px;\n \n &:hover {\n background-color: #f5f5f5;\n }\n \n &.action-btn-primary {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n \n &:hover {\n background-color: #1976d2;\n }\n }\n \n .fa-solid {\n font-size: 10px;\n }\n }\n }\n}\n\n.new-category-option {\n color: #2196f3;\n font-style: italic;\n}\n\n// CodeMirror 6 styling\nmj-code-editor {\n display: block;\n border: 1px solid #ddd;\n border-radius: 3px;\n overflow: hidden;\n min-height: 300px;\n \n .cm-editor {\n font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace !important;\n font-size: 12px !important;\n min-height: 300px;\n }\n \n .cm-focused {\n outline: none !important;\n }\n \n .cm-editor.cm-focused {\n border-color: #2196f3;\n }\n}\n\n// List View Layout\n.list-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n}\n\n.sub-navigation {\n display: flex;\n gap: 8px;\n margin-bottom: 16px;\n padding: 8px 0;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n\n .sub-nav-btn {\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n background: white;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: all 0.2s;\n color: #555;\n font-weight: 500;\n\n &:hover {\n background-color: #f0f0f0;\n border-color: #2196f3;\n color: #2196f3;\n }\n\n &.active {\n background-color: #2196f3;\n border-color: #2196f3;\n color: white;\n box-shadow: 0 2px 4px rgba(33, 150, 243, 0.2);\n }\n\n .fa-solid {\n font-size: 11px;\n }\n }\n}\n\n.main-content {\n flex: 1;\n overflow: hidden;\n}\n\n.main-splitter {\n height: 100%;\n \n .k-pane {\n overflow: hidden;\n }\n}\n\n.prompts-content {\n height: 100%;\n overflow-y: auto;\n padding: 0 16px;\n}"] }]
1310
1388
  }], () => [{ type: i1.MJNotificationService }], { openEntityRecord: [{
1311
1389
  type: Output
1312
1390
  }], stateChange: [{