@memberjunction/ng-dashboards 2.42.0 → 2.42.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts +92 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.d.ts.map +1 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js +954 -0
- package/dist/AI/components/prompts/model-prompt-priority-matrix.component.js.map +1 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts +5 -0
- package/dist/AI/components/prompts/prompt-management.component.d.ts.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +278 -200
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts +108 -0
- package/dist/AI/components/prompts/prompt-version-control.component.d.ts.map +1 -0
- package/dist/AI/components/prompts/prompt-version-control.component.js +1205 -0
- package/dist/AI/components/prompts/prompt-version-control.component.js.map +1 -0
- package/dist/module.d.ts +14 -12
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +8 -2
- package/dist/module.js.map +1 -1
- package/package.json +6 -6
|
@@ -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
|
|
32
|
-
i0.ɵɵelementStart(0, "div",
|
|
33
|
-
i0.ɵɵelement(3, "div",
|
|
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",
|
|
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(
|
|
41
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
40
42
|
i0.ɵɵadvance(7);
|
|
41
43
|
i0.ɵɵtextInterpolate(ctx_r1.loadingMessage);
|
|
42
44
|
} }
|
|
43
|
-
function
|
|
44
|
-
i0.ɵɵelementStart(0, "div",
|
|
45
|
-
i0.ɵɵelement(2, "i",
|
|
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(
|
|
51
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
50
52
|
i0.ɵɵadvance(3);
|
|
51
53
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.error, " ");
|
|
52
54
|
} }
|
|
53
|
-
function
|
|
54
|
-
i0.ɵɵelementStart(0, "div",
|
|
55
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
64
|
-
i0.ɵɵelementStart(0, "span",
|
|
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
|
|
70
|
+
const promptWithTemplate_r5 = i0.ɵɵnextContext().$implicit;
|
|
69
71
|
i0.ɵɵadvance();
|
|
70
|
-
i0.ɵɵtextInterpolate1("\u2022 ",
|
|
72
|
+
i0.ɵɵtextInterpolate1("\u2022 ", promptWithTemplate_r5.type.Name, "");
|
|
71
73
|
} }
|
|
72
|
-
function
|
|
73
|
-
i0.ɵɵelementStart(0, "p",
|
|
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
|
|
79
|
+
const promptWithTemplate_r5 = i0.ɵɵnextContext().$implicit;
|
|
78
80
|
i0.ɵɵadvance();
|
|
79
|
-
i0.ɵɵtextInterpolate(
|
|
81
|
+
i0.ɵɵtextInterpolate(promptWithTemplate_r5.prompt.Description);
|
|
80
82
|
} }
|
|
81
|
-
function
|
|
82
|
-
i0.ɵɵelementStart(0, "p",
|
|
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
|
|
87
|
-
i0.ɵɵelementStart(0, "div",
|
|
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
|
|
93
|
+
const promptWithTemplate_r5 = i0.ɵɵnextContext(2).$implicit;
|
|
92
94
|
i0.ɵɵadvance(2);
|
|
93
|
-
i0.ɵɵtextInterpolate1(" Template content: ", (
|
|
95
|
+
i0.ɵɵtextInterpolate1(" Template content: ", (promptWithTemplate_r5.templateContent.TemplateText || "").length, " characters ");
|
|
94
96
|
} }
|
|
95
|
-
function
|
|
96
|
-
i0.ɵɵelementStart(0, "div",
|
|
97
|
-
i0.ɵɵelement(1, "i",
|
|
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,
|
|
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
|
|
105
|
+
const promptWithTemplate_r5 = i0.ɵɵnextContext().$implicit;
|
|
104
106
|
i0.ɵɵadvance(3);
|
|
105
|
-
i0.ɵɵtextInterpolate(
|
|
107
|
+
i0.ɵɵtextInterpolate(promptWithTemplate_r5.template.Name);
|
|
106
108
|
i0.ɵɵadvance();
|
|
107
|
-
i0.ɵɵconditional(
|
|
109
|
+
i0.ɵɵconditional(promptWithTemplate_r5.templateContent ? 4 : -1);
|
|
108
110
|
} }
|
|
109
|
-
function
|
|
110
|
-
i0.ɵɵelementStart(0, "div",
|
|
111
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
117
|
-
const
|
|
118
|
-
i0.ɵɵelementStart(0, "div",
|
|
119
|
-
i0.ɵɵlistener("click", function
|
|
120
|
-
i0.ɵɵelementStart(1, "div",
|
|
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",
|
|
125
|
+
i0.ɵɵelementStart(5, "div", 45)(6, "h4", 46);
|
|
124
126
|
i0.ɵɵtext(7);
|
|
125
127
|
i0.ɵɵelementEnd();
|
|
126
|
-
i0.ɵɵelementStart(8, "div",
|
|
128
|
+
i0.ɵɵelementStart(8, "div", 47)(9, "span", 48);
|
|
127
129
|
i0.ɵɵtext(10);
|
|
128
130
|
i0.ɵɵelementEnd();
|
|
129
|
-
i0.ɵɵtemplate(11,
|
|
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",
|
|
135
|
-
i0.ɵɵtemplate(15,
|
|
136
|
-
i0.ɵɵelementStart(17, "div",
|
|
137
|
-
i0.ɵɵtemplate(18,
|
|
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",
|
|
140
|
-
i0.ɵɵlistener("click", function
|
|
141
|
-
i0.ɵɵelementStart(21, "button",
|
|
142
|
-
i0.ɵɵlistener("click", function
|
|
143
|
-
i0.ɵɵelement(22, "i",
|
|
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",
|
|
147
|
-
i0.ɵɵlistener("click", function
|
|
148
|
-
i0.ɵɵelement(25, "i",
|
|
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",
|
|
152
|
-
i0.ɵɵlistener("click", function
|
|
153
|
-
i0.ɵɵelement(28, "i",
|
|
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
|
|
158
|
-
const ctx_r1 = i0.ɵɵnextContext(
|
|
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(
|
|
164
|
+
i0.ɵɵtextInterpolate(promptWithTemplate_r5.prompt.Name);
|
|
163
165
|
i0.ɵɵadvance(3);
|
|
164
|
-
i0.ɵɵtextInterpolate(ctx_r1.getCategoryName(
|
|
166
|
+
i0.ɵɵtextInterpolate(ctx_r1.getCategoryName(promptWithTemplate_r5.prompt.CategoryID));
|
|
165
167
|
i0.ɵɵadvance();
|
|
166
|
-
i0.ɵɵconditional(
|
|
168
|
+
i0.ɵɵconditional(promptWithTemplate_r5.type ? 11 : -1);
|
|
167
169
|
i0.ɵɵadvance();
|
|
168
|
-
i0.ɵɵclassMapInterpolate1("status-badge status-",
|
|
170
|
+
i0.ɵɵclassMapInterpolate1("status-badge status-", promptWithTemplate_r5.prompt.Status.toLowerCase(), "");
|
|
169
171
|
i0.ɵɵadvance();
|
|
170
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
172
|
+
i0.ɵɵtextInterpolate1(" ", promptWithTemplate_r5.prompt.Status, " ");
|
|
171
173
|
i0.ɵɵadvance(2);
|
|
172
|
-
i0.ɵɵconditional(
|
|
174
|
+
i0.ɵɵconditional(promptWithTemplate_r5.prompt.Description ? 15 : 16);
|
|
173
175
|
i0.ɵɵadvance(3);
|
|
174
|
-
i0.ɵɵconditional(
|
|
176
|
+
i0.ɵɵconditional(promptWithTemplate_r5.template ? 18 : 19);
|
|
175
177
|
} }
|
|
176
|
-
function
|
|
177
|
-
i0.ɵɵelementStart(0, "div",
|
|
178
|
-
i0.ɵɵrepeaterCreate(1,
|
|
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(
|
|
183
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
182
184
|
i0.ɵɵadvance();
|
|
183
185
|
i0.ɵɵrepeater(ctx_r1.filteredPrompts);
|
|
184
186
|
} }
|
|
185
|
-
function
|
|
186
|
-
i0.ɵɵelementStart(0, "div",
|
|
187
|
-
i0.ɵɵtemplate(1,
|
|
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(
|
|
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, "
|
|
210
|
-
i0.ɵɵlistener("
|
|
211
|
-
i0.ɵɵ
|
|
212
|
-
i0.ɵɵ
|
|
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(
|
|
224
|
-
i0.ɵɵ
|
|
225
|
-
i0.ɵɵadvance();
|
|
226
|
-
i0.ɵɵ
|
|
227
|
-
i0.ɵɵadvance();
|
|
228
|
-
i0.ɵɵ
|
|
229
|
-
i0.ɵɵadvance(
|
|
230
|
-
i0.ɵɵconditional(ctx_r1.
|
|
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.
|
|
287
|
+
i0.ɵɵconditional(ctx_r1.currentSubView === "priority-matrix" ? 25 : -1);
|
|
233
288
|
i0.ɵɵadvance();
|
|
234
|
-
i0.ɵɵconditional(
|
|
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",
|
|
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",
|
|
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
|
|
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(
|
|
262
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
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",
|
|
325
|
+
i0.ɵɵelement(0, "i", 95);
|
|
271
326
|
} }
|
|
272
327
|
function PromptManagementComponent_Conditional_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
273
|
-
const
|
|
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(
|
|
276
|
-
i0.ɵɵelement(1, "i",
|
|
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",
|
|
280
|
-
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_14_Template_button_click_3_listener() { i0.ɵɵrestoreView(
|
|
281
|
-
i0.ɵɵtemplate(4, PromptManagementComponent_Conditional_2_Conditional_14_Conditional_4_Template, 1, 0, "span",
|
|
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
|
|
293
|
-
i0.ɵɵelementStart(0, "input",
|
|
294
|
-
i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_24_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
295
|
-
i0.ɵɵlistener("input", function PromptManagementComponent_Conditional_2_Conditional_24_Template_input_input_0_listener() { i0.ɵɵrestoreView(
|
|
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",
|
|
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
|
|
312
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
313
|
-
i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_29_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
314
|
-
i0.ɵɵlistener("input", function PromptManagementComponent_Conditional_2_Conditional_29_Template_textarea_input_0_listener() { i0.ɵɵrestoreView(
|
|
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",
|
|
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",
|
|
385
|
+
i0.ɵɵelementStart(0, "option", 101);
|
|
331
386
|
i0.ɵɵtext(1);
|
|
332
387
|
i0.ɵɵelementEnd();
|
|
333
388
|
} if (rf & 2) {
|
|
334
|
-
const
|
|
335
|
-
i0.ɵɵproperty("value",
|
|
389
|
+
const category_r14 = ctx.$implicit;
|
|
390
|
+
i0.ɵɵproperty("value", category_r14.ID);
|
|
336
391
|
i0.ɵɵadvance();
|
|
337
|
-
i0.ɵɵtextInterpolate(
|
|
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
|
|
341
|
-
i0.ɵɵelementStart(0, "select",
|
|
342
|
-
i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
343
|
-
i0.ɵɵlistener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_0_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
344
|
-
i0.ɵɵelementStart(1, "option",
|
|
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",
|
|
348
|
-
i0.ɵɵelementStart(5, "option",
|
|
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
|
|
359
|
-
i0.ɵɵelementStart(0, "div",
|
|
360
|
-
i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(
|
|
361
|
-
i0.ɵɵlistener("keyup", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_input_keyup_1_listener($event) { i0.ɵɵrestoreView(
|
|
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",
|
|
364
|
-
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_button_click_4_listener() { i0.ɵɵrestoreView(
|
|
365
|
-
i0.ɵɵelement(5, "i",
|
|
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",
|
|
368
|
-
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Conditional_34_Conditional_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(
|
|
369
|
-
i0.ɵɵelement(7, "i",
|
|
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",
|
|
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",
|
|
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",
|
|
447
|
+
i0.ɵɵelementStart(0, "option", 101);
|
|
393
448
|
i0.ɵɵtext(1);
|
|
394
449
|
i0.ɵɵelementEnd();
|
|
395
450
|
} if (rf & 2) {
|
|
396
|
-
const
|
|
397
|
-
i0.ɵɵproperty("value",
|
|
451
|
+
const type_r17 = ctx.$implicit;
|
|
452
|
+
i0.ɵɵproperty("value", type_r17.ID);
|
|
398
453
|
i0.ɵɵadvance();
|
|
399
|
-
i0.ɵɵtextInterpolate(
|
|
454
|
+
i0.ɵɵtextInterpolate(type_r17.Name);
|
|
400
455
|
} }
|
|
401
456
|
function PromptManagementComponent_Conditional_2_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
402
|
-
const
|
|
403
|
-
i0.ɵɵelementStart(0, "select",
|
|
404
|
-
i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_39_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
405
|
-
i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Conditional_39_Template_select_change_0_listener() { i0.ɵɵrestoreView(
|
|
406
|
-
i0.ɵɵelementStart(1, "option",
|
|
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",
|
|
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",
|
|
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
|
|
428
|
-
i0.ɵɵelementStart(0, "select",
|
|
429
|
-
i0.ɵɵtwoWayListener("ngModelChange", function PromptManagementComponent_Conditional_2_Conditional_44_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(
|
|
430
|
-
i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Conditional_44_Template_select_change_0_listener() { i0.ɵɵrestoreView(
|
|
431
|
-
i0.ɵɵelementStart(1, "option",
|
|
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",
|
|
489
|
+
i0.ɵɵelementStart(3, "option", 108);
|
|
435
490
|
i0.ɵɵtext(4, "Pending");
|
|
436
491
|
i0.ɵɵelementEnd();
|
|
437
|
-
i0.ɵɵelementStart(5, "option",
|
|
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",
|
|
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",
|
|
533
|
+
i0.ɵɵelementStart(0, "div", 85)(1, "h4");
|
|
479
534
|
i0.ɵɵtext(2, "Template Information");
|
|
480
535
|
i0.ɵɵelementEnd();
|
|
481
|
-
i0.ɵɵelementStart(3, "div",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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
|
|
546
|
-
i0.ɵɵelementStart(0, "div", 3)(1, "div",
|
|
547
|
-
i0.ɵɵlistener("click", function PromptManagementComponent_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(
|
|
548
|
-
i0.ɵɵelement(4, "i",
|
|
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",
|
|
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",
|
|
609
|
+
i0.ɵɵtemplate(11, PromptManagementComponent_Conditional_2_Conditional_11_Template, 2, 4, "div", 72);
|
|
555
610
|
i0.ɵɵelementEnd();
|
|
556
|
-
i0.ɵɵelementStart(12, "div",
|
|
557
|
-
i0.ɵɵtemplate(13, PromptManagementComponent_Conditional_2_Conditional_13_Template, 3, 0, "button",
|
|
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",
|
|
560
|
-
i0.ɵɵlistener("layoutChange", function PromptManagementComponent_Conditional_2_Template_kendo_splitter_layoutChange_16_listener($event) { i0.ɵɵrestoreView(
|
|
561
|
-
i0.ɵɵelementStart(17, "kendo-splitter-pane",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
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",
|
|
595
|
-
i0.ɵɵtemplate(53, PromptManagementComponent_Conditional_2_Conditional_53_Template, 3, 1)(54, PromptManagementComponent_Conditional_2_Conditional_54_Template, 2, 0, "span",
|
|
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",
|
|
598
|
-
i0.ɵɵlistener("change", function PromptManagementComponent_Conditional_2_Template_mj_code_editor_change_56_listener($event) { i0.ɵɵrestoreView(
|
|
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",
|
|
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,
|
|
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: [{
|