@memberjunction/ng-core-entity-forms 5.8.0 → 5.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/lib/custom/Entities/entity-form.component.d.ts +1 -1
  2. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  3. package/dist/lib/custom/Entities/entity-form.component.js +530 -484
  4. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  5. package/dist/lib/custom/Queries/query-form.component.d.ts +3 -0
  6. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/Queries/query-form.component.js +314 -276
  8. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  9. package/dist/lib/custom/custom-forms.module.d.ts +2 -1
  10. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  11. package/dist/lib/custom/custom-forms.module.js +7 -3
  12. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  13. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.d.ts.map +1 -1
  14. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +61 -35
  15. package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
  16. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.d.ts.map +1 -1
  17. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +24 -6
  18. package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
  19. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts +10 -0
  20. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -0
  21. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +137 -0
  22. package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -0
  23. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts +10 -0
  24. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts.map +1 -0
  25. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +103 -0
  26. package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -0
  27. package/dist/lib/generated/generated-forms.module.d.ts +119 -117
  28. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  29. package/dist/lib/generated/generated-forms.module.js +48 -42
  30. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  31. package/package.json +30 -30
@@ -20,23 +20,24 @@ import * as i5 from "@progress/kendo-angular-dropdowns";
20
20
  import * as i6 from "@progress/kendo-angular-buttons";
21
21
  import * as i7 from "@memberjunction/ng-base-forms";
22
22
  import * as i8 from "@memberjunction/ng-code-editor";
23
- import * as i9 from "./query-run-dialog.component";
24
- import * as i10 from "./query-category-dialog.component";
23
+ import * as i9 from "@memberjunction/ng-shared-generic";
24
+ import * as i10 from "./query-run-dialog.component";
25
+ import * as i11 from "./query-category-dialog.component";
25
26
  const _c0 = ["sqlEditor"];
26
27
  const _forTrack0 = ($index, $item) => $item.name;
27
28
  const _forTrack1 = ($index, $item) => $item.ID || $index;
28
29
  const _forTrack2 = ($index, $item) => $item.ID;
29
- function MJQueryFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
30
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
30
31
  const _r2 = i0.ɵɵgetCurrentView();
31
- i0.ɵɵelementStart(0, "kendo-textbox", 40);
32
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_9_Template_kendo_textbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.record.Name, $event) || (ctx_r2.record.Name = $event); return i0.ɵɵresetView($event); });
32
+ i0.ɵɵelementStart(0, "kendo-textbox", 41);
33
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_8_Template_kendo_textbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.record.Name, $event) || (ctx_r2.record.Name = $event); return i0.ɵɵresetView($event); });
33
34
  i0.ɵɵelementEnd();
34
35
  } if (rf & 2) {
35
36
  const ctx_r2 = i0.ɵɵnextContext(2);
36
37
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.record.Name);
37
38
  } }
38
- function MJQueryFormComponentExtended_Conditional_1_Conditional_10_Template(rf, ctx) { if (rf & 1) {
39
- i0.ɵɵelementStart(0, "h4", 12);
39
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_9_Template(rf, ctx) { if (rf & 1) {
40
+ i0.ɵɵelementStart(0, "h4", 11);
40
41
  i0.ɵɵtext(1);
41
42
  i0.ɵɵelementEnd();
42
43
  } if (rf & 2) {
@@ -44,28 +45,28 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_10_Template(rf,
44
45
  i0.ɵɵadvance();
45
46
  i0.ɵɵtextInterpolate(ctx_r2.record.Name || "Untitled Query");
46
47
  } }
47
- function MJQueryFormComponentExtended_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
48
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_11_Template(rf, ctx) { if (rf & 1) {
48
49
  const _r4 = i0.ɵɵgetCurrentView();
49
- i0.ɵɵelementStart(0, "button", 41);
50
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.runQuery()); });
51
- i0.ɵɵelement(1, "i", 42);
50
+ i0.ɵɵelementStart(0, "button", 42);
51
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_11_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.runQuery()); });
52
+ i0.ɵɵelement(1, "i", 43);
52
53
  i0.ɵɵtext(2, " Run ");
53
54
  i0.ɵɵelementEnd();
54
55
  } if (rf & 2) {
55
56
  const ctx_r2 = i0.ɵɵnextContext(2);
56
- i0.ɵɵproperty("themeColor", "primary")("size", "large")("disabled", ctx_r2.EditMode || ctx_r2.record.Status !== "Approved" || !ctx_r2.record.SQL || ctx_r2.record.SQL.trim().length === 0);
57
+ i0.ɵɵproperty("themeColor", "primary")("size", "large")("disabled", ctx_r2.EditMode || !ctx_r2.record.SQL || ctx_r2.record.SQL.trim().length === 0);
57
58
  } }
58
- function MJQueryFormComponentExtended_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
59
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
59
60
  const _r5 = i0.ɵɵgetCurrentView();
60
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 43);
61
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_17_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.record.CategoryID, $event) || (ctx_r2.record.CategoryID = $event); return i0.ɵɵresetView($event); });
61
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 44);
62
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_16_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.record.CategoryID, $event) || (ctx_r2.record.CategoryID = $event); return i0.ɵɵresetView($event); });
62
63
  i0.ɵɵelementEnd();
63
64
  } if (rf & 2) {
64
65
  const ctx_r2 = i0.ɵɵnextContext(2);
65
66
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.record.CategoryID);
66
67
  i0.ɵɵproperty("data", ctx_r2.categoryOptions)("valuePrimitive", true);
67
68
  } }
68
- function MJQueryFormComponentExtended_Conditional_1_Conditional_18_Template(rf, ctx) { if (rf & 1) {
69
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
69
70
  i0.ɵɵelementStart(0, "span", 18);
70
71
  i0.ɵɵtext(1);
71
72
  i0.ɵɵelementEnd();
@@ -74,56 +75,41 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_18_Template(rf,
74
75
  i0.ɵɵadvance();
75
76
  i0.ɵɵtextInterpolate(ctx_r2.getCategoryPath() || "Uncategorized");
76
77
  } }
77
- function MJQueryFormComponentExtended_Conditional_1_Conditional_22_Template(rf, ctx) { if (rf & 1) {
78
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_21_Template(rf, ctx) { if (rf & 1) {
78
79
  const _r6 = i0.ɵɵgetCurrentView();
79
- i0.ɵɵelementStart(0, "kendo-dropdownlist", 44);
80
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_22_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.record.Status, $event) || (ctx_r2.record.Status = $event); return i0.ɵɵresetView($event); });
80
+ i0.ɵɵelementStart(0, "kendo-dropdownlist", 45);
81
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_21_Template_kendo_dropdownlist_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.record.Status, $event) || (ctx_r2.record.Status = $event); return i0.ɵɵresetView($event); });
81
82
  i0.ɵɵelementEnd();
82
83
  } if (rf & 2) {
83
84
  const ctx_r2 = i0.ɵɵnextContext(2);
84
85
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.record.Status);
85
86
  i0.ɵɵproperty("data", ctx_r2.statusOptions)("valuePrimitive", true);
86
87
  } }
87
- function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_1_Template(rf, ctx) { if (rf & 1) {
88
- i0.ɵɵelement(0, "i", 46);
89
- } }
90
- function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_2_Template(rf, ctx) { if (rf & 1) {
91
- i0.ɵɵelement(0, "i", 47);
92
- } }
93
- function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_3_Template(rf, ctx) { if (rf & 1) {
94
- i0.ɵɵelement(0, "i", 48);
95
- } }
96
- function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
97
- i0.ɵɵelementStart(0, "span", 45);
98
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_1_Template, 1, 0, "i", 46);
99
- i0.ɵɵconditionalCreate(2, MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_2_Template, 1, 0, "i", 47);
100
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_3_Template, 1, 0, "i", 48);
101
- i0.ɵɵtext(4);
88
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_22_Template(rf, ctx) { if (rf & 1) {
89
+ i0.ɵɵelementStart(0, "span", 46);
90
+ i0.ɵɵelement(1, "i", 47);
91
+ i0.ɵɵtext(2);
102
92
  i0.ɵɵelementEnd();
103
93
  } if (rf & 2) {
104
94
  const ctx_r2 = i0.ɵɵnextContext(2);
105
95
  i0.ɵɵstyleProp("background", ctx_r2.getStatusBadgeColor());
106
96
  i0.ɵɵadvance();
107
- i0.ɵɵconditional(ctx_r2.record.Status === "Approved" ? 1 : -1);
108
- i0.ɵɵadvance();
109
- i0.ɵɵconditional(ctx_r2.record.Status === "Pending" ? 2 : -1);
110
- i0.ɵɵadvance();
111
- i0.ɵɵconditional(ctx_r2.record.Status === "Rejected" ? 3 : -1);
97
+ i0.ɵɵclassMap(ctx_r2.getStatusBannerIcon());
112
98
  i0.ɵɵadvance();
113
99
  i0.ɵɵtextInterpolate1(" ", ctx_r2.record.Status || "Unknown", " ");
114
100
  } }
115
- function MJQueryFormComponentExtended_Conditional_1_Conditional_24_Conditional_1_Template(rf, ctx) { if (rf & 1) {
101
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_1_Template(rf, ctx) { if (rf & 1) {
116
102
  const _r7 = i0.ɵɵgetCurrentView();
117
- i0.ɵɵelementStart(0, "kendo-textarea", 51);
118
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_24_Conditional_1_Template_kendo_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.record.Description, $event) || (ctx_r2.record.Description = $event); return i0.ɵɵresetView($event); });
103
+ i0.ɵɵelementStart(0, "kendo-textarea", 50);
104
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_1_Template_kendo_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r2 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r2.record.Description, $event) || (ctx_r2.record.Description = $event); return i0.ɵɵresetView($event); });
119
105
  i0.ɵɵelementEnd();
120
106
  } if (rf & 2) {
121
107
  const ctx_r2 = i0.ɵɵnextContext(3);
122
108
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.record.Description);
123
109
  i0.ɵɵproperty("rows", 2);
124
110
  } }
125
- function MJQueryFormComponentExtended_Conditional_1_Conditional_24_Conditional_2_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelementStart(0, "p", 50);
111
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_2_Template(rf, ctx) { if (rf & 1) {
112
+ i0.ɵɵelementStart(0, "p", 49);
127
113
  i0.ɵɵtext(1);
128
114
  i0.ɵɵelementEnd();
129
115
  } if (rf & 2) {
@@ -131,18 +117,39 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_24_Conditional_2
131
117
  i0.ɵɵadvance();
132
118
  i0.ɵɵtextInterpolate(ctx_r2.record.Description);
133
119
  } }
134
- function MJQueryFormComponentExtended_Conditional_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
135
- i0.ɵɵelementStart(0, "div");
136
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_24_Conditional_1_Template, 1, 2, "kendo-textarea", 49)(2, MJQueryFormComponentExtended_Conditional_1_Conditional_24_Conditional_2_Template, 2, 1, "p", 50);
120
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
121
+ i0.ɵɵelementStart(0, "div", 21);
122
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_1_Template, 1, 2, "kendo-textarea", 48)(2, MJQueryFormComponentExtended_Conditional_1_Conditional_23_Conditional_2_Template, 2, 1, "p", 49);
137
123
  i0.ɵɵelementEnd();
138
124
  } if (rf & 2) {
139
125
  const ctx_r2 = i0.ɵɵnextContext(2);
140
126
  i0.ɵɵadvance();
141
127
  i0.ɵɵconditional(ctx_r2.EditMode ? 1 : 2);
142
128
  } }
129
+ function MJQueryFormComponentExtended_Conditional_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
130
+ i0.ɵɵelementStart(0, "div", 51);
131
+ i0.ɵɵelement(1, "i", 47);
132
+ i0.ɵɵelementStart(2, "span");
133
+ i0.ɵɵtext(3, " This query has status ");
134
+ i0.ɵɵelementStart(4, "strong");
135
+ i0.ɵɵtext(5);
136
+ i0.ɵɵelementEnd();
137
+ i0.ɵɵtext(6);
138
+ i0.ɵɵelementEnd()();
139
+ } if (rf & 2) {
140
+ const ctx_r2 = i0.ɵɵnextContext(2);
141
+ i0.ɵɵstyleProp("border-left-color", ctx_r2.getStatusBadgeColor());
142
+ i0.ɵɵadvance();
143
+ i0.ɵɵclassMap(ctx_r2.getStatusBannerIcon());
144
+ i0.ɵɵstyleProp("color", ctx_r2.getStatusBadgeColor());
145
+ i0.ɵɵadvance(4);
146
+ i0.ɵɵtextInterpolate(ctx_r2.record.Status);
147
+ i0.ɵɵadvance();
148
+ i0.ɵɵtextInterpolate1(". ", ctx_r2.getStatusBannerMessage(), " ");
149
+ } }
143
150
  function MJQueryFormComponentExtended_Conditional_1_ng_template_27_Conditional_4_Template(rf, ctx) { if (rf & 1) {
144
151
  i0.ɵɵelementStart(0, "span", 55);
145
- i0.ɵɵelement(1, "i", 60);
152
+ i0.ɵɵelement(1, "i", 59);
146
153
  i0.ɵɵtext(2, " Defined ");
147
154
  i0.ɵɵelementEnd();
148
155
  } }
@@ -156,10 +163,10 @@ function MJQueryFormComponentExtended_Conditional_1_ng_template_27_Template(rf,
156
163
  i0.ɵɵelementStart(5, "button", 56);
157
164
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_ng_template_27_Template_button_click_5_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.toggleFiltersHelp(); return i0.ɵɵresetView($event.stopPropagation()); });
158
165
  i0.ɵɵelement(6, "i", 57);
159
- i0.ɵɵelementStart(7, "span", 58);
166
+ i0.ɵɵelementStart(7, "span");
160
167
  i0.ɵɵtext(8, "Filters Help");
161
168
  i0.ɵɵelementEnd();
162
- i0.ɵɵelement(9, "i", 59);
169
+ i0.ɵɵelement(9, "i", 58);
163
170
  i0.ɵɵelementEnd()();
164
171
  } if (rf & 2) {
165
172
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -169,44 +176,44 @@ function MJQueryFormComponentExtended_Conditional_1_ng_template_27_Template(rf,
169
176
  i0.ɵɵproperty("ngClass", ctx_r2.showFiltersHelp ? "fa-chevron-up" : "fa-chevron-down");
170
177
  } }
171
178
  function MJQueryFormComponentExtended_Conditional_1_Conditional_31_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
172
- i0.ɵɵelementStart(0, "div", 68);
179
+ i0.ɵɵelementStart(0, "div", 67);
173
180
  i0.ɵɵtext(1);
174
181
  i0.ɵɵelementEnd();
175
182
  } if (rf & 2) {
176
183
  const filter_r9 = i0.ɵɵnextContext().$implicit;
177
184
  i0.ɵɵadvance();
178
- i0.ɵɵtextInterpolate1(" ", filter_r9.notes, " ");
185
+ i0.ɵɵtextInterpolate(filter_r9.notes);
179
186
  } }
180
187
  function MJQueryFormComponentExtended_Conditional_1_Conditional_31_For_6_Template(rf, ctx) { if (rf & 1) {
181
- i0.ɵɵelementStart(0, "div", 64)(1, "div", 65);
188
+ i0.ɵɵelementStart(0, "div", 63)(1, "div", 64);
182
189
  i0.ɵɵtext(2);
183
190
  i0.ɵɵelementEnd();
184
- i0.ɵɵelementStart(3, "div", 66);
191
+ i0.ɵɵelementStart(3, "div", 65);
185
192
  i0.ɵɵtext(4);
186
193
  i0.ɵɵelementEnd();
187
- i0.ɵɵelementStart(5, "div", 67);
194
+ i0.ɵɵelementStart(5, "div", 66);
188
195
  i0.ɵɵtext(6);
189
196
  i0.ɵɵelementEnd();
190
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_1_Conditional_31_For_6_Conditional_7_Template, 2, 1, "div", 68);
197
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_1_Conditional_31_For_6_Conditional_7_Template, 2, 1, "div", 67);
191
198
  i0.ɵɵelementEnd();
192
199
  } if (rf & 2) {
193
200
  const filter_r9 = ctx.$implicit;
194
201
  i0.ɵɵadvance(2);
195
- i0.ɵɵtextInterpolate1(" ", filter_r9.name, " ");
202
+ i0.ɵɵtextInterpolate(filter_r9.name);
196
203
  i0.ɵɵadvance(2);
197
- i0.ɵɵtextInterpolate1(" ", filter_r9.description, " ");
204
+ i0.ɵɵtextInterpolate(filter_r9.description);
198
205
  i0.ɵɵadvance(2);
199
- i0.ɵɵtextInterpolate1(" ", filter_r9.exampleSyntax, " ");
206
+ i0.ɵɵtextInterpolate(filter_r9.exampleSyntax);
200
207
  i0.ɵɵadvance();
201
208
  i0.ɵɵconditional(filter_r9.notes ? 7 : -1);
202
209
  } }
203
210
  function MJQueryFormComponentExtended_Conditional_1_Conditional_31_Template(rf, ctx) { if (rf & 1) {
204
- i0.ɵɵelementStart(0, "div", 27)(1, "h6", 61);
205
- i0.ɵɵelement(2, "i", 62);
211
+ i0.ɵɵelementStart(0, "div", 28)(1, "h6", 60);
212
+ i0.ɵɵelement(2, "i", 61);
206
213
  i0.ɵɵtext(3, " Available SQL Filters for Parameterized Queries ");
207
214
  i0.ɵɵelementEnd();
208
- i0.ɵɵelementStart(4, "div", 63);
209
- i0.ɵɵrepeaterCreate(5, MJQueryFormComponentExtended_Conditional_1_Conditional_31_For_6_Template, 8, 4, "div", 64, _forTrack0);
215
+ i0.ɵɵelementStart(4, "div", 62);
216
+ i0.ɵɵrepeaterCreate(5, MJQueryFormComponentExtended_Conditional_1_Conditional_31_For_6_Template, 8, 4, "div", 63, _forTrack0);
210
217
  i0.ɵɵelementEnd()();
211
218
  } if (rf & 2) {
212
219
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -214,19 +221,19 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_31_Template(rf,
214
221
  i0.ɵɵrepeater(ctx_r2.sqlFilters);
215
222
  } }
216
223
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
217
- i0.ɵɵelementStart(0, "span", 72);
224
+ i0.ɵɵelementStart(0, "span", 70);
218
225
  i0.ɵɵtext(1);
219
226
  i0.ɵɵelementEnd();
220
227
  } if (rf & 2) {
221
228
  const ctx_r2 = i0.ɵɵnextContext(4);
222
229
  i0.ɵɵadvance();
223
- i0.ɵɵtextInterpolate1(" ", ctx_r2.queryParameters.length, " ");
230
+ i0.ɵɵtextInterpolate(ctx_r2.queryParameters.length);
224
231
  } }
225
232
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_ng_template_1_Template(rf, ctx) { if (rf & 1) {
226
233
  i0.ɵɵelementStart(0, "span", 53);
227
- i0.ɵɵelement(1, "i", 71);
234
+ i0.ɵɵelement(1, "i", 69);
228
235
  i0.ɵɵtext(2, " Query Parameters ");
229
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_32_ng_template_1_Conditional_3_Template, 2, 1, "span", 72);
236
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_32_ng_template_1_Conditional_3_Template, 2, 1, "span", 70);
230
237
  i0.ɵɵelementEnd();
231
238
  } if (rf & 2) {
232
239
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -234,30 +241,28 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_32_ng_template_1
234
241
  i0.ɵɵconditional(ctx_r2.queryParameters.length > 0 ? 3 : -1);
235
242
  } }
236
243
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_3_Template(rf, ctx) { if (rf & 1) {
237
- i0.ɵɵelementStart(0, "div", 70);
238
- i0.ɵɵelement(1, "i", 73);
239
- i0.ɵɵelementStart(2, "span", 74);
240
- i0.ɵɵtext(3, "Loading parameters...");
241
- i0.ɵɵelementEnd()();
244
+ i0.ɵɵelementStart(0, "div", 68);
245
+ i0.ɵɵelement(1, "mj-loading", 71);
246
+ i0.ɵɵelementEnd();
242
247
  } }
243
248
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
244
249
  const _r11 = i0.ɵɵgetCurrentView();
245
- i0.ɵɵelementStart(0, "button", 80);
250
+ i0.ɵɵelementStart(0, "button", 77);
246
251
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.addParameter()); });
247
- i0.ɵɵelement(1, "i", 81);
252
+ i0.ɵɵelement(1, "i", 78);
248
253
  i0.ɵɵtext(2, " Add First Parameter ");
249
254
  i0.ɵɵelementEnd();
250
255
  } }
251
256
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
252
- i0.ɵɵelementStart(0, "div", 75);
253
- i0.ɵɵelement(1, "i", 76);
254
- i0.ɵɵelementStart(2, "div", 77);
257
+ i0.ɵɵelementStart(0, "div", 72);
258
+ i0.ɵɵelement(1, "i", 73);
259
+ i0.ɵɵelementStart(2, "div", 74);
255
260
  i0.ɵɵtext(3, "No Parameters Defined");
256
261
  i0.ɵɵelementEnd();
257
- i0.ɵɵelementStart(4, "div", 78);
262
+ i0.ɵɵelementStart(4, "div", 75);
258
263
  i0.ɵɵtext(5, " Add parameters to make your query dynamic and reusable. ");
259
264
  i0.ɵɵelementEnd();
260
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 79);
265
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 76);
261
266
  i0.ɵɵelementEnd();
262
267
  } if (rf & 2) {
263
268
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -266,19 +271,19 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4
266
271
  } }
267
272
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
268
273
  const _r12 = i0.ɵɵgetCurrentView();
269
- i0.ɵɵelementStart(0, "div", 82)(1, "button", 80);
274
+ i0.ɵɵelementStart(0, "div", 79)(1, "button", 77);
270
275
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.addParameter()); });
271
- i0.ɵɵelement(2, "i", 81);
276
+ i0.ɵɵelement(2, "i", 78);
272
277
  i0.ɵɵtext(3, " Add Parameter ");
273
278
  i0.ɵɵelementEnd()();
274
279
  } }
275
280
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
276
- i0.ɵɵelementStart(0, "span", 90);
281
+ i0.ɵɵelementStart(0, "span", 87);
277
282
  i0.ɵɵtext(1, "Required");
278
283
  i0.ɵɵelementEnd();
279
284
  } }
280
285
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
281
- i0.ɵɵelementStart(0, "div", 92);
286
+ i0.ɵɵelementStart(0, "div", 89);
282
287
  i0.ɵɵtext(1);
283
288
  i0.ɵɵelementEnd();
284
289
  } if (rf & 2) {
@@ -287,51 +292,51 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4
287
292
  i0.ɵɵtextInterpolate(param_r14.Description);
288
293
  } }
289
294
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_14_Template(rf, ctx) { if (rf & 1) {
290
- i0.ɵɵelementStart(0, "div")(1, "strong");
295
+ i0.ɵɵelementStart(0, "span", 91)(1, "strong");
291
296
  i0.ɵɵtext(2, "Default:");
292
297
  i0.ɵɵelementEnd();
293
- i0.ɵɵelementStart(3, "code", 95);
298
+ i0.ɵɵelementStart(3, "code", 93);
294
299
  i0.ɵɵtext(4);
295
300
  i0.ɵɵelementEnd()();
296
301
  } if (rf & 2) {
297
302
  const param_r14 = i0.ɵɵnextContext().$implicit;
298
303
  i0.ɵɵadvance(4);
299
- i0.ɵɵtextInterpolate1(" ", param_r14.DefaultValue, " ");
304
+ i0.ɵɵtextInterpolate(param_r14.DefaultValue);
300
305
  } }
301
306
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_15_Template(rf, ctx) { if (rf & 1) {
302
307
  const _r15 = i0.ɵɵgetCurrentView();
303
- i0.ɵɵelementStart(0, "div", 96);
308
+ i0.ɵɵelementStart(0, "div", 94);
304
309
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_15_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r15); return i0.ɵɵresetView($event.stopPropagation()); });
305
- i0.ɵɵelementStart(1, "button", 97);
310
+ i0.ɵɵelementStart(1, "button", 95);
306
311
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_15_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r15); const param_r14 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.editParameter(param_r14)); });
307
- i0.ɵɵelement(2, "i", 98);
312
+ i0.ɵɵelement(2, "i", 96);
308
313
  i0.ɵɵelementEnd();
309
- i0.ɵɵelementStart(3, "button", 99);
314
+ i0.ɵɵelementStart(3, "button", 97);
310
315
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_15_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r15); const param_r14 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.deleteParameter(param_r14)); });
311
- i0.ɵɵelement(4, "i", 100);
316
+ i0.ɵɵelement(4, "i", 98);
312
317
  i0.ɵɵelementEnd()();
313
318
  } }
314
319
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
315
320
  const _r13 = i0.ɵɵgetCurrentView();
316
- i0.ɵɵelementStart(0, "div", 85);
321
+ i0.ɵɵelementStart(0, "div", 82);
317
322
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Template_div_click_0_listener() { const param_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.editParameter(param_r14)); });
318
- i0.ɵɵelementStart(1, "div", 86)(2, "div", 87);
319
- i0.ɵɵelement(3, "i", 88);
323
+ i0.ɵɵelementStart(1, "div", 83)(2, "div", 84);
324
+ i0.ɵɵelement(3, "i", 85);
320
325
  i0.ɵɵtext(4);
321
326
  i0.ɵɵelementEnd();
322
- i0.ɵɵelementStart(5, "div", 89);
323
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 2, 0, "span", 90);
327
+ i0.ɵɵelementStart(5, "div", 86);
328
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 2, 0, "span", 87);
324
329
  i0.ɵɵelementEnd()();
325
- i0.ɵɵelementStart(7, "div", 91);
326
- i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "div", 92);
327
- i0.ɵɵelementStart(9, "div", 93)(10, "div")(11, "strong");
330
+ i0.ɵɵelementStart(7, "div", 88);
331
+ i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "div", 89);
332
+ i0.ɵɵelementStart(9, "div", 90)(10, "span", 91)(11, "strong");
328
333
  i0.ɵɵtext(12, "Type:");
329
334
  i0.ɵɵelementEnd();
330
335
  i0.ɵɵtext(13);
331
336
  i0.ɵɵelementEnd();
332
- i0.ɵɵconditionalCreate(14, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_14_Template, 5, 1, "div");
337
+ i0.ɵɵconditionalCreate(14, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_14_Template, 5, 1, "span", 91);
333
338
  i0.ɵɵelementEnd()();
334
- i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 5, 0, "div", 94);
339
+ i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 5, 0, "div", 92);
335
340
  i0.ɵɵelementEnd();
336
341
  } if (rf & 2) {
337
342
  const param_r14 = ctx.$implicit;
@@ -351,9 +356,9 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4
351
356
  i0.ɵɵconditional(ctx_r2.EditMode ? 15 : -1);
352
357
  } }
353
358
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
354
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 82);
355
- i0.ɵɵelementStart(1, "div", 83);
356
- i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Template, 16, 8, "div", 84, _forTrack1);
359
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 79);
360
+ i0.ɵɵelementStart(1, "div", 80);
361
+ i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_For_3_Template, 16, 8, "div", 81, _forTrack1);
357
362
  i0.ɵɵelementEnd();
358
363
  } if (rf & 2) {
359
364
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -362,18 +367,18 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4
362
367
  i0.ɵɵrepeater(ctx_r2.queryParameters);
363
368
  } }
364
369
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Template(rf, ctx) { if (rf & 1) {
365
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_0_Template, 7, 1, "div", 75)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_Template, 4, 1);
370
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_0_Template, 7, 1, "div", 72)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Conditional_1_Template, 4, 1);
366
371
  } if (rf & 2) {
367
372
  const ctx_r2 = i0.ɵɵnextContext(3);
368
373
  i0.ɵɵconditional(ctx_r2.queryParameters.length === 0 ? 0 : 1);
369
374
  } }
370
375
  function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Template(rf, ctx) { if (rf & 1) {
371
376
  const _r10 = i0.ɵɵgetCurrentView();
372
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 23);
377
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 24);
373
378
  i0.ɵɵtwoWayListener("expandedChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Template_kendo_expansionpanel_expandedChange_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.parametersPanelExpanded, $event) || (ctx_r2.parametersPanelExpanded = $event); return i0.ɵɵresetView($event); });
374
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_32_ng_template_1_Template, 4, 1, "ng-template", 24);
375
- i0.ɵɵelementStart(2, "div", 69);
376
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_3_Template, 4, 0, "div", 70)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Template, 2, 1);
379
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_32_ng_template_1_Template, 4, 1, "ng-template", 25);
380
+ i0.ɵɵelementStart(2, "div", 30);
381
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_3_Template, 2, 0, "div", 68)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Conditional_4_Template, 2, 1);
377
382
  i0.ɵɵelementEnd()();
378
383
  } if (rf & 2) {
379
384
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -382,19 +387,19 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_32_Template(rf,
382
387
  i0.ɵɵconditional(ctx_r2.isLoadingParameters ? 3 : 4);
383
388
  } }
384
389
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
385
- i0.ɵɵelementStart(0, "span", 72);
390
+ i0.ɵɵelementStart(0, "span", 70);
386
391
  i0.ɵɵtext(1);
387
392
  i0.ɵɵelementEnd();
388
393
  } if (rf & 2) {
389
394
  const ctx_r2 = i0.ɵɵnextContext(4);
390
395
  i0.ɵɵadvance();
391
- i0.ɵɵtextInterpolate1(" ", ctx_r2.queryFields.length, " ");
396
+ i0.ɵɵtextInterpolate(ctx_r2.queryFields.length);
392
397
  } }
393
398
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_ng_template_1_Template(rf, ctx) { if (rf & 1) {
394
399
  i0.ɵɵelementStart(0, "span", 53);
395
- i0.ɵɵelement(1, "i", 102);
400
+ i0.ɵɵelement(1, "i", 99);
396
401
  i0.ɵɵtext(2, " Query Fields ");
397
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_33_ng_template_1_Conditional_3_Template, 2, 1, "span", 72);
402
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_33_ng_template_1_Conditional_3_Template, 2, 1, "span", 70);
398
403
  i0.ɵɵelementEnd();
399
404
  } if (rf & 2) {
400
405
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -402,28 +407,28 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_33_ng_template_1
402
407
  i0.ɵɵconditional(ctx_r2.queryFields.length > 0 ? 3 : -1);
403
408
  } }
404
409
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_3_Template(rf, ctx) { if (rf & 1) {
405
- i0.ɵɵelementStart(0, "div", 101);
406
- i0.ɵɵelement(1, "i", 103);
410
+ i0.ɵɵelementStart(0, "div", 68);
411
+ i0.ɵɵelement(1, "mj-loading", 100);
407
412
  i0.ɵɵelementEnd();
408
413
  } }
409
414
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
410
415
  const _r17 = i0.ɵɵgetCurrentView();
411
- i0.ɵɵelementStart(0, "button", 80);
416
+ i0.ɵɵelementStart(0, "button", 77);
412
417
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.addField()); });
413
- i0.ɵɵelement(1, "i", 81);
418
+ i0.ɵɵelement(1, "i", 78);
414
419
  i0.ɵɵtext(2, " Add First Field ");
415
420
  i0.ɵɵelementEnd();
416
421
  } }
417
422
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
418
- i0.ɵɵelementStart(0, "div", 75);
419
- i0.ɵɵelement(1, "i", 104);
420
- i0.ɵɵelementStart(2, "h5", 105);
423
+ i0.ɵɵelementStart(0, "div", 72);
424
+ i0.ɵɵelement(1, "i", 101);
425
+ i0.ɵɵelementStart(2, "div", 74);
421
426
  i0.ɵɵtext(3, "No Fields Defined");
422
427
  i0.ɵɵelementEnd();
423
- i0.ɵɵelementStart(4, "div", 106);
428
+ i0.ɵɵelementStart(4, "div", 75);
424
429
  i0.ɵɵtext(5, " Define output fields for your query results. ");
425
430
  i0.ɵɵelementEnd();
426
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 79);
431
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 76);
427
432
  i0.ɵɵelementEnd();
428
433
  } if (rf & 2) {
429
434
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -432,14 +437,14 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4
432
437
  } }
433
438
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
434
439
  const _r18 = i0.ɵɵgetCurrentView();
435
- i0.ɵɵelementStart(0, "div", 82)(1, "button", 80);
440
+ i0.ɵɵelementStart(0, "div", 79)(1, "button", 77);
436
441
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.addField()); });
437
- i0.ɵɵelement(2, "i", 81);
442
+ i0.ɵɵelement(2, "i", 78);
438
443
  i0.ɵɵtext(3, " Add Field ");
439
444
  i0.ɵɵelementEnd()();
440
445
  } }
441
446
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
442
- i0.ɵɵelementStart(0, "span", 110);
447
+ i0.ɵɵelementStart(0, "span", 105);
443
448
  i0.ɵɵtext(1);
444
449
  i0.ɵɵelementEnd();
445
450
  } if (rf & 2) {
@@ -448,7 +453,7 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4
448
453
  i0.ɵɵtextInterpolate1("#", field_r19.Sequence);
449
454
  } }
450
455
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_10_Template(rf, ctx) { if (rf & 1) {
451
- i0.ɵɵelementStart(0, "div", 111);
456
+ i0.ɵɵelementStart(0, "div", 89);
452
457
  i0.ɵɵtext(1);
453
458
  i0.ɵɵelementEnd();
454
459
  } if (rf & 2) {
@@ -458,28 +463,28 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4
458
463
  } }
459
464
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_15_Template(rf, ctx) { if (rf & 1) {
460
465
  const _r20 = i0.ɵɵgetCurrentView();
461
- i0.ɵɵelementStart(0, "div", 115)(1, "button", 116);
466
+ i0.ɵɵelementStart(0, "div", 107)(1, "button", 108);
462
467
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_15_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r20); const field_r19 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.deleteField(field_r19)); });
463
- i0.ɵɵelement(2, "i", 100);
468
+ i0.ɵɵelement(2, "i", 98);
464
469
  i0.ɵɵelementEnd()();
465
470
  } }
466
471
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
467
- i0.ɵɵelementStart(0, "div", 107)(1, "div", 86)(2, "div", 87);
468
- i0.ɵɵelement(3, "i", 108);
472
+ i0.ɵɵelementStart(0, "div", 102)(1, "div", 83)(2, "div", 84);
473
+ i0.ɵɵelement(3, "i", 103);
469
474
  i0.ɵɵtext(4);
470
475
  i0.ɵɵelementEnd();
471
- i0.ɵɵelementStart(5, "div", 89)(6, "span", 109);
476
+ i0.ɵɵelementStart(5, "div", 86)(6, "span", 104);
472
477
  i0.ɵɵtext(7);
473
478
  i0.ɵɵelementEnd();
474
- i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "span", 110);
479
+ i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "span", 105);
475
480
  i0.ɵɵelementEnd()();
476
- i0.ɵɵelementStart(9, "div", 91);
477
- i0.ɵɵconditionalCreate(10, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_10_Template, 2, 1, "div", 111);
478
- i0.ɵɵelementStart(11, "div", 112)(12, "span", 113);
479
- i0.ɵɵelement(13, "i", 114);
481
+ i0.ɵɵelementStart(9, "div", 88);
482
+ i0.ɵɵconditionalCreate(10, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_10_Template, 2, 1, "div", 89);
483
+ i0.ɵɵelementStart(11, "div", 90)(12, "span", 91);
484
+ i0.ɵɵelement(13, "i", 106);
480
485
  i0.ɵɵtext(14);
481
486
  i0.ɵɵelementEnd()()();
482
- i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 3, 0, "div", 115);
487
+ i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 3, 0, "div", 107);
483
488
  i0.ɵɵelementEnd();
484
489
  } if (rf & 2) {
485
490
  const field_r19 = ctx.$implicit;
@@ -498,9 +503,9 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4
498
503
  i0.ɵɵconditional(ctx_r2.EditMode ? 15 : -1);
499
504
  } }
500
505
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
501
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 82);
502
- i0.ɵɵelementStart(1, "div", 83);
503
- i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Template, 16, 6, "div", 107, _forTrack2);
506
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 79);
507
+ i0.ɵɵelementStart(1, "div", 80);
508
+ i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_For_3_Template, 16, 6, "div", 102, _forTrack2);
504
509
  i0.ɵɵelementEnd();
505
510
  } if (rf & 2) {
506
511
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -509,18 +514,18 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4
509
514
  i0.ɵɵrepeater(ctx_r2.queryFields);
510
515
  } }
511
516
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Template(rf, ctx) { if (rf & 1) {
512
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_0_Template, 7, 1, "div", 75)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_Template, 4, 1);
517
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_0_Template, 7, 1, "div", 72)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Conditional_1_Template, 4, 1);
513
518
  } if (rf & 2) {
514
519
  const ctx_r2 = i0.ɵɵnextContext(3);
515
520
  i0.ɵɵconditional(ctx_r2.queryFields.length === 0 ? 0 : 1);
516
521
  } }
517
522
  function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Template(rf, ctx) { if (rf & 1) {
518
523
  const _r16 = i0.ɵɵgetCurrentView();
519
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 23);
524
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 24);
520
525
  i0.ɵɵtwoWayListener("expandedChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Template_kendo_expansionpanel_expandedChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.fieldsPanelExpanded, $event) || (ctx_r2.fieldsPanelExpanded = $event); return i0.ɵɵresetView($event); });
521
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_33_ng_template_1_Template, 4, 1, "ng-template", 24);
522
- i0.ɵɵelementStart(2, "div", 69);
523
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_3_Template, 2, 0, "div", 101)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Template, 2, 1);
526
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_33_ng_template_1_Template, 4, 1, "ng-template", 25);
527
+ i0.ɵɵelementStart(2, "div", 30);
528
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_3_Template, 2, 0, "div", 68)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Conditional_4_Template, 2, 1);
524
529
  i0.ɵɵelementEnd()();
525
530
  } if (rf & 2) {
526
531
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -529,19 +534,19 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_33_Template(rf,
529
534
  i0.ɵɵconditional(ctx_r2.isLoadingFields ? 3 : 4);
530
535
  } }
531
536
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
532
- i0.ɵɵelementStart(0, "span", 72);
537
+ i0.ɵɵelementStart(0, "span", 70);
533
538
  i0.ɵɵtext(1);
534
539
  i0.ɵɵelementEnd();
535
540
  } if (rf & 2) {
536
541
  const ctx_r2 = i0.ɵɵnextContext(4);
537
542
  i0.ɵɵadvance();
538
- i0.ɵɵtextInterpolate1(" ", ctx_r2.queryEntities.length, " ");
543
+ i0.ɵɵtextInterpolate(ctx_r2.queryEntities.length);
539
544
  } }
540
545
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_ng_template_1_Template(rf, ctx) { if (rf & 1) {
541
546
  i0.ɵɵelementStart(0, "span", 53);
542
- i0.ɵɵelement(1, "i", 117);
547
+ i0.ɵɵelement(1, "i", 109);
543
548
  i0.ɵɵtext(2, " Query Entities ");
544
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_34_ng_template_1_Conditional_3_Template, 2, 1, "span", 72);
549
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_34_ng_template_1_Conditional_3_Template, 2, 1, "span", 70);
545
550
  i0.ɵɵelementEnd();
546
551
  } if (rf & 2) {
547
552
  const ctx_r2 = i0.ɵɵnextContext(3);
@@ -549,28 +554,28 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_34_ng_template_1
549
554
  i0.ɵɵconditional(ctx_r2.queryEntities.length > 0 ? 3 : -1);
550
555
  } }
551
556
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_3_Template(rf, ctx) { if (rf & 1) {
552
- i0.ɵɵelementStart(0, "div", 101);
553
- i0.ɵɵelement(1, "i", 103);
557
+ i0.ɵɵelementStart(0, "div", 68);
558
+ i0.ɵɵelement(1, "mj-loading", 110);
554
559
  i0.ɵɵelementEnd();
555
560
  } }
556
561
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
557
562
  const _r22 = i0.ɵɵgetCurrentView();
558
- i0.ɵɵelementStart(0, "button", 80);
563
+ i0.ɵɵelementStart(0, "button", 77);
559
564
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.addEntity()); });
560
- i0.ɵɵelement(1, "i", 81);
565
+ i0.ɵɵelement(1, "i", 78);
561
566
  i0.ɵɵtext(2, " Add First Entity ");
562
567
  i0.ɵɵelementEnd();
563
568
  } }
564
569
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
565
- i0.ɵɵelementStart(0, "div", 75);
566
- i0.ɵɵelement(1, "i", 118);
567
- i0.ɵɵelementStart(2, "h5", 105);
570
+ i0.ɵɵelementStart(0, "div", 72);
571
+ i0.ɵɵelement(1, "i", 111);
572
+ i0.ɵɵelementStart(2, "div", 74);
568
573
  i0.ɵɵtext(3, "No Entities Tracked");
569
574
  i0.ɵɵelementEnd();
570
- i0.ɵɵelementStart(4, "div", 106);
575
+ i0.ɵɵelementStart(4, "div", 75);
571
576
  i0.ɵɵtext(5, " Track which entities this query uses for documentation. ");
572
577
  i0.ɵɵelementEnd();
573
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 79);
578
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 76);
574
579
  i0.ɵɵelementEnd();
575
580
  } if (rf & 2) {
576
581
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -579,15 +584,15 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4
579
584
  } }
580
585
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
581
586
  const _r23 = i0.ɵɵgetCurrentView();
582
- i0.ɵɵelementStart(0, "div", 82)(1, "button", 80);
587
+ i0.ɵɵelementStart(0, "div", 79)(1, "button", 77);
583
588
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r23); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.addEntity()); });
584
- i0.ɵɵelement(2, "i", 81);
589
+ i0.ɵɵelement(2, "i", 78);
585
590
  i0.ɵɵtext(3, " Add Entity ");
586
591
  i0.ɵɵelementEnd()();
587
592
  } }
588
593
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
589
594
  const _r24 = i0.ɵɵgetCurrentView();
590
- i0.ɵɵelementStart(0, "div", 120)(1, "kendo-dropdownlist", 121);
595
+ i0.ɵɵelementStart(0, "div", 113)(1, "kendo-dropdownlist", 114);
591
596
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_5_Template_kendo_dropdownlist_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r24); const entity_r25 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(entity_r25.EntityID, $event) || (entity_r25.EntityID = $event); return i0.ɵɵresetView($event); });
592
597
  i0.ɵɵelementEnd()();
593
598
  } if (rf & 2) {
@@ -598,27 +603,27 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4
598
603
  i0.ɵɵproperty("name", "entity_" + entity_r25.ID)("data", ctx_r2.getEntityOptions())("valuePrimitive", true);
599
604
  } }
600
605
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
601
- i0.ɵɵelementStart(0, "div", 91)(1, "div", 112)(2, "span", 113);
602
- i0.ɵɵelement(3, "i", 122);
606
+ i0.ɵɵelementStart(0, "div", 88)(1, "div", 90)(2, "span", 91);
607
+ i0.ɵɵelement(3, "i", 115);
603
608
  i0.ɵɵtext(4, " Data Source ");
604
609
  i0.ɵɵelementEnd()()();
605
610
  } }
606
611
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
607
612
  const _r26 = i0.ɵɵgetCurrentView();
608
- i0.ɵɵelementStart(0, "div", 115)(1, "button", 123);
613
+ i0.ɵɵelementStart(0, "div", 107)(1, "button", 116);
609
614
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r26); const entity_r25 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.deleteEntity(entity_r25)); });
610
- i0.ɵɵelement(2, "i", 100);
615
+ i0.ɵɵelement(2, "i", 98);
611
616
  i0.ɵɵelementEnd()();
612
617
  } }
613
618
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
614
- i0.ɵɵelementStart(0, "div", 107)(1, "div", 86)(2, "div", 87);
615
- i0.ɵɵelement(3, "i", 119);
619
+ i0.ɵɵelementStart(0, "div", 102)(1, "div", 83)(2, "div", 84);
620
+ i0.ɵɵelement(3, "i", 112);
616
621
  i0.ɵɵtext(4);
617
622
  i0.ɵɵelementEnd();
618
- i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_5_Template, 2, 4, "div", 120);
623
+ i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_5_Template, 2, 4, "div", 113);
619
624
  i0.ɵɵelementEnd();
620
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 5, 0, "div", 91);
621
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_7_Template, 3, 0, "div", 115);
625
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 5, 0, "div", 88);
626
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Conditional_7_Template, 3, 0, "div", 107);
622
627
  i0.ɵɵelementEnd();
623
628
  } if (rf & 2) {
624
629
  const entity_r25 = ctx.$implicit;
@@ -633,9 +638,9 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4
633
638
  i0.ɵɵconditional(ctx_r2.EditMode ? 7 : -1);
634
639
  } }
635
640
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
636
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 82);
637
- i0.ɵɵelementStart(1, "div", 83);
638
- i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Template, 8, 4, "div", 107, _forTrack2);
641
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 79);
642
+ i0.ɵɵelementStart(1, "div", 80);
643
+ i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_For_3_Template, 8, 4, "div", 102, _forTrack2);
639
644
  i0.ɵɵelementEnd();
640
645
  } if (rf & 2) {
641
646
  const ctx_r2 = i0.ɵɵnextContext(4);
@@ -644,18 +649,18 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4
644
649
  i0.ɵɵrepeater(ctx_r2.queryEntities);
645
650
  } }
646
651
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Template(rf, ctx) { if (rf & 1) {
647
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_0_Template, 7, 1, "div", 75)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_Template, 4, 1);
652
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_0_Template, 7, 1, "div", 72)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Conditional_1_Template, 4, 1);
648
653
  } if (rf & 2) {
649
654
  const ctx_r2 = i0.ɵɵnextContext(3);
650
655
  i0.ɵɵconditional(ctx_r2.queryEntities.length === 0 ? 0 : 1);
651
656
  } }
652
657
  function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Template(rf, ctx) { if (rf & 1) {
653
658
  const _r21 = i0.ɵɵgetCurrentView();
654
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 23);
659
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 24);
655
660
  i0.ɵɵtwoWayListener("expandedChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Template_kendo_expansionpanel_expandedChange_0_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.entitiesPanelExpanded, $event) || (ctx_r2.entitiesPanelExpanded = $event); return i0.ɵɵresetView($event); });
656
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_34_ng_template_1_Template, 4, 1, "ng-template", 24);
657
- i0.ɵɵelementStart(2, "div", 69);
658
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_3_Template, 2, 0, "div", 101)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Template, 2, 1);
661
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_34_ng_template_1_Template, 4, 1, "ng-template", 25);
662
+ i0.ɵɵelementStart(2, "div", 30);
663
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_3_Template, 2, 0, "div", 68)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Conditional_4_Template, 2, 1);
659
664
  i0.ɵɵelementEnd()();
660
665
  } if (rf & 2) {
661
666
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -665,13 +670,13 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_34_Template(rf,
665
670
  } }
666
671
  function MJQueryFormComponentExtended_Conditional_1_ng_template_36_Template(rf, ctx) { if (rf & 1) {
667
672
  i0.ɵɵelementStart(0, "span", 53);
668
- i0.ɵɵelement(1, "i", 124);
673
+ i0.ɵɵelement(1, "i", 117);
669
674
  i0.ɵɵtext(2, " Query Details ");
670
675
  i0.ɵɵelementEnd();
671
676
  } }
672
677
  function MJQueryFormComponentExtended_Conditional_1_Conditional_43_Template(rf, ctx) { if (rf & 1) {
673
678
  const _r27 = i0.ɵɵgetCurrentView();
674
- i0.ɵɵelementStart(0, "kendo-switch", 125);
679
+ i0.ɵɵelementStart(0, "kendo-switch", 118);
675
680
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_43_Template_kendo_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.record.UsesTemplate, $event) || (ctx_r2.record.UsesTemplate = $event); return i0.ɵɵresetView($event); });
676
681
  i0.ɵɵelementEnd();
677
682
  } if (rf & 2) {
@@ -679,20 +684,20 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_43_Template(rf,
679
684
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.record.UsesTemplate);
680
685
  } }
681
686
  function MJQueryFormComponentExtended_Conditional_1_Conditional_44_Conditional_1_Template(rf, ctx) { if (rf & 1) {
682
- i0.ɵɵelementStart(0, "span", 126);
683
- i0.ɵɵelement(1, "i", 60);
687
+ i0.ɵɵelementStart(0, "span", 119);
688
+ i0.ɵɵelement(1, "i", 59);
684
689
  i0.ɵɵtext(2, " Uses Templates");
685
690
  i0.ɵɵelementEnd();
686
691
  } }
687
692
  function MJQueryFormComponentExtended_Conditional_1_Conditional_44_Conditional_2_Template(rf, ctx) { if (rf & 1) {
688
- i0.ɵɵelementStart(0, "span", 74);
689
- i0.ɵɵelement(1, "i", 127);
693
+ i0.ɵɵelementStart(0, "span", 120);
694
+ i0.ɵɵelement(1, "i", 121);
690
695
  i0.ɵɵtext(2, " No Templates");
691
696
  i0.ɵɵelementEnd();
692
697
  } }
693
698
  function MJQueryFormComponentExtended_Conditional_1_Conditional_44_Template(rf, ctx) { if (rf & 1) {
694
- i0.ɵɵelementStart(0, "div", 35);
695
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_44_Conditional_1_Template, 3, 0, "span", 126)(2, MJQueryFormComponentExtended_Conditional_1_Conditional_44_Conditional_2_Template, 3, 0, "span", 74);
699
+ i0.ɵɵelementStart(0, "div", 36);
700
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_44_Conditional_1_Template, 3, 0, "span", 119)(2, MJQueryFormComponentExtended_Conditional_1_Conditional_44_Conditional_2_Template, 3, 0, "span", 120);
696
701
  i0.ɵɵelementEnd();
697
702
  } if (rf & 2) {
698
703
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -700,11 +705,11 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_44_Template(rf,
700
705
  i0.ɵɵconditional(ctx_r2.record.UsesTemplate ? 1 : 2);
701
706
  } }
702
707
  function MJQueryFormComponentExtended_Conditional_1_Conditional_57_Template(rf, ctx) { if (rf & 1) {
703
- i0.ɵɵelementStart(0, "div", 31)(1, "label", 32);
704
- i0.ɵɵelement(2, "i", 128);
708
+ i0.ɵɵelementStart(0, "div", 32)(1, "label", 33);
709
+ i0.ɵɵelement(2, "i", 122);
705
710
  i0.ɵɵtext(3, " Quality Rank ");
706
711
  i0.ɵɵelementEnd();
707
- i0.ɵɵelementStart(4, "div", 35);
712
+ i0.ɵɵelementStart(4, "div", 36);
708
713
  i0.ɵɵtext(5);
709
714
  i0.ɵɵelementEnd()();
710
715
  } if (rf & 2) {
@@ -714,52 +719,52 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_57_Template(rf,
714
719
  } }
715
720
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Template(rf, ctx) { if (rf & 1) {
716
721
  i0.ɵɵelementStart(0, "span", 53);
717
- i0.ɵɵelement(1, "i", 129);
722
+ i0.ɵɵelement(1, "i", 123);
718
723
  i0.ɵɵtext(2, " Query Permissions ");
719
724
  i0.ɵɵelementEnd();
720
725
  } }
721
726
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_3_Template(rf, ctx) { if (rf & 1) {
722
- i0.ɵɵelementStart(0, "div", 101);
723
- i0.ɵɵelement(1, "i", 103);
727
+ i0.ɵɵelementStart(0, "div", 68);
728
+ i0.ɵɵelement(1, "mj-loading", 124);
724
729
  i0.ɵɵelementEnd();
725
730
  } }
726
731
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
727
- i0.ɵɵelementStart(0, "div", 75);
728
- i0.ɵɵelement(1, "i", 130);
729
- i0.ɵɵelementStart(2, "h5", 105);
732
+ i0.ɵɵelementStart(0, "div", 72);
733
+ i0.ɵɵelement(1, "i", 125);
734
+ i0.ɵɵelementStart(2, "div", 74);
730
735
  i0.ɵɵtext(3, "No Permissions Set");
731
736
  i0.ɵɵelementEnd();
732
- i0.ɵɵelementStart(4, "div", 131);
737
+ i0.ɵɵelementStart(4, "div", 75);
733
738
  i0.ɵɵtext(5, " This query uses default permissions. ");
734
739
  i0.ɵɵelementEnd()();
735
740
  } }
736
741
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
737
- i0.ɵɵelement(0, "mj-explorer-entity-data-grid", 132);
742
+ i0.ɵɵelement(0, "mj-explorer-entity-data-grid", 126);
738
743
  } if (rf & 2) {
739
744
  const ctx_r2 = i0.ɵɵnextContext(5);
740
745
  i0.ɵɵproperty("Params", ctx_r2.BuildRelationshipViewParamsByEntityName("MJ: Query Permissions", "QueryID"))("NewRecordValues", ctx_r2.NewRecordValues("MJ: Query Permissions"))("AllowLoad", true)("ShowToolbar", false);
741
746
  } }
742
747
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
743
- i0.ɵɵelementStart(0, "div", 134)(1, "div", 9);
744
- i0.ɵɵelement(2, "i", 135);
745
- i0.ɵɵelementStart(3, "div", 136)(4, "div", 137);
746
- i0.ɵɵtext(5);
748
+ i0.ɵɵelementStart(0, "div", 128);
749
+ i0.ɵɵelement(1, "i", 129);
750
+ i0.ɵɵelementStart(2, "div", 130)(3, "div", 131);
751
+ i0.ɵɵtext(4);
747
752
  i0.ɵɵelementEnd();
748
- i0.ɵɵelementStart(6, "div", 138);
749
- i0.ɵɵtext(7, " Role Permission ");
753
+ i0.ɵɵelementStart(5, "div", 132);
754
+ i0.ɵɵtext(6, "Role Permission");
755
+ i0.ɵɵelementEnd()();
756
+ i0.ɵɵelementStart(7, "span", 133);
757
+ i0.ɵɵelement(8, "i", 43);
758
+ i0.ɵɵtext(9, " Can Execute ");
750
759
  i0.ɵɵelementEnd()();
751
- i0.ɵɵelementStart(8, "div", 139)(9, "span", 140);
752
- i0.ɵɵelement(10, "i", 42);
753
- i0.ɵɵtext(11, " Can Execute ");
754
- i0.ɵɵelementEnd()()()();
755
760
  } if (rf & 2) {
756
761
  const permission_r29 = ctx.$implicit;
757
- i0.ɵɵadvance(5);
758
- i0.ɵɵtextInterpolate1(" ", permission_r29.Role, " ");
762
+ i0.ɵɵadvance(4);
763
+ i0.ɵɵtextInterpolate(permission_r29.Role);
759
764
  } }
760
765
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
761
- i0.ɵɵelementStart(0, "div", 133);
762
- i0.ɵɵrepeaterCreate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_1_For_2_Template, 12, 1, "div", 134, _forTrack2);
766
+ i0.ɵɵelementStart(0, "div", 127);
767
+ i0.ɵɵrepeaterCreate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_1_For_2_Template, 10, 1, "div", 128, _forTrack2);
763
768
  i0.ɵɵelementEnd();
764
769
  } if (rf & 2) {
765
770
  const ctx_r2 = i0.ɵɵnextContext(5);
@@ -767,24 +772,24 @@ function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4
767
772
  i0.ɵɵrepeater(ctx_r2.queryPermissions);
768
773
  } }
769
774
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
770
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_0_Template, 1, 4, "mj-explorer-entity-data-grid", 132)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_1_Template, 3, 0, "div", 133);
775
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_0_Template, 1, 4, "mj-explorer-entity-data-grid", 126)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Conditional_1_Template, 3, 0, "div", 127);
771
776
  } if (rf & 2) {
772
777
  const ctx_r2 = i0.ɵɵnextContext(4);
773
778
  i0.ɵɵconditional(ctx_r2.EditMode ? 0 : 1);
774
779
  } }
775
780
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Template(rf, ctx) { if (rf & 1) {
776
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_0_Template, 6, 0, "div", 75)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Template, 2, 1);
781
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_0_Template, 6, 0, "div", 72)(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Conditional_1_Template, 2, 1);
777
782
  } if (rf & 2) {
778
783
  const ctx_r2 = i0.ɵɵnextContext(3);
779
784
  i0.ɵɵconditional(ctx_r2.queryPermissions.length === 0 && !ctx_r2.EditMode ? 0 : 1);
780
785
  } }
781
786
  function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Template(rf, ctx) { if (rf & 1) {
782
787
  const _r28 = i0.ɵɵgetCurrentView();
783
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 23);
788
+ i0.ɵɵelementStart(0, "kendo-expansionpanel", 24);
784
789
  i0.ɵɵtwoWayListener("expandedChange", function MJQueryFormComponentExtended_Conditional_1_Conditional_58_Template_kendo_expansionpanel_expandedChange_0_listener($event) { i0.ɵɵrestoreView(_r28); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.permissionsPanelExpanded, $event) || (ctx_r2.permissionsPanelExpanded = $event); return i0.ɵɵresetView($event); });
785
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Template, 3, 0, "ng-template", 24);
786
- i0.ɵɵelementStart(2, "div", 69);
787
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_3_Template, 2, 0, "div", 101)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Template, 2, 1);
790
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_1_Conditional_58_ng_template_1_Template, 3, 0, "ng-template", 25);
791
+ i0.ɵɵelementStart(2, "div", 30);
792
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_3_Template, 2, 0, "div", 68)(4, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Conditional_4_Template, 2, 1);
788
793
  i0.ɵɵelementEnd()();
789
794
  } if (rf & 2) {
790
795
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -796,68 +801,69 @@ function MJQueryFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf &
796
801
  const _r1 = i0.ɵɵgetCurrentView();
797
802
  i0.ɵɵelementStart(0, "form", 3, 0);
798
803
  i0.ɵɵelement(2, "mj-form-toolbar", 4);
799
- i0.ɵɵelementStart(3, "div", 5)(4, "div", 6)(5, "div", 7)(6, "div", 8)(7, "div", 9);
800
- i0.ɵɵelement(8, "i", 10);
801
- i0.ɵɵconditionalCreate(9, MJQueryFormComponentExtended_Conditional_1_Conditional_9_Template, 1, 1, "kendo-textbox", 11)(10, MJQueryFormComponentExtended_Conditional_1_Conditional_10_Template, 2, 1, "h4", 12);
802
- i0.ɵɵelementEnd()();
803
- i0.ɵɵelementStart(11, "div", 13);
804
- i0.ɵɵconditionalCreate(12, MJQueryFormComponentExtended_Conditional_1_Conditional_12_Template, 3, 3, "button", 14);
804
+ i0.ɵɵelementStart(3, "div", 5)(4, "div", 6)(5, "div", 7)(6, "div", 8);
805
+ i0.ɵɵelement(7, "i", 9);
806
+ i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_1_Conditional_8_Template, 1, 1, "kendo-textbox", 10)(9, MJQueryFormComponentExtended_Conditional_1_Conditional_9_Template, 2, 1, "h4", 11);
807
+ i0.ɵɵelementEnd();
808
+ i0.ɵɵelementStart(10, "div", 12);
809
+ i0.ɵɵconditionalCreate(11, MJQueryFormComponentExtended_Conditional_1_Conditional_11_Template, 3, 3, "button", 13);
805
810
  i0.ɵɵelementEnd()();
806
- i0.ɵɵelementStart(13, "div", 15)(14, "div", 9)(15, "label", 16);
807
- i0.ɵɵtext(16, "Category:");
811
+ i0.ɵɵelementStart(12, "div", 14)(13, "div", 15)(14, "label", 16);
812
+ i0.ɵɵtext(15, "Category");
808
813
  i0.ɵɵelementEnd();
809
- i0.ɵɵconditionalCreate(17, MJQueryFormComponentExtended_Conditional_1_Conditional_17_Template, 1, 3, "kendo-dropdownlist", 17)(18, MJQueryFormComponentExtended_Conditional_1_Conditional_18_Template, 2, 1, "span", 18);
814
+ i0.ɵɵconditionalCreate(16, MJQueryFormComponentExtended_Conditional_1_Conditional_16_Template, 1, 3, "kendo-dropdownlist", 17)(17, MJQueryFormComponentExtended_Conditional_1_Conditional_17_Template, 2, 1, "span", 18);
810
815
  i0.ɵɵelementEnd();
811
- i0.ɵɵelementStart(19, "div", 9)(20, "label", 19);
812
- i0.ɵɵtext(21, "Status:");
816
+ i0.ɵɵelementStart(18, "div", 15)(19, "label", 16);
817
+ i0.ɵɵtext(20, "Status");
813
818
  i0.ɵɵelementEnd();
814
- i0.ɵɵconditionalCreate(22, MJQueryFormComponentExtended_Conditional_1_Conditional_22_Template, 1, 3, "kendo-dropdownlist", 20)(23, MJQueryFormComponentExtended_Conditional_1_Conditional_23_Template, 5, 6, "span", 21);
819
+ i0.ɵɵconditionalCreate(21, MJQueryFormComponentExtended_Conditional_1_Conditional_21_Template, 1, 3, "kendo-dropdownlist", 19)(22, MJQueryFormComponentExtended_Conditional_1_Conditional_22_Template, 3, 5, "span", 20);
815
820
  i0.ɵɵelementEnd()();
816
- i0.ɵɵconditionalCreate(24, MJQueryFormComponentExtended_Conditional_1_Conditional_24_Template, 3, 1, "div");
821
+ i0.ɵɵconditionalCreate(23, MJQueryFormComponentExtended_Conditional_1_Conditional_23_Template, 3, 1, "div", 21);
817
822
  i0.ɵɵelementEnd()();
818
- i0.ɵɵelementStart(25, "div", 22)(26, "kendo-expansionpanel", 23);
823
+ i0.ɵɵconditionalCreate(24, MJQueryFormComponentExtended_Conditional_1_Conditional_24_Template, 7, 8, "div", 22);
824
+ i0.ɵɵelementStart(25, "div", 23)(26, "kendo-expansionpanel", 24);
819
825
  i0.ɵɵtwoWayListener("expandedChange", function MJQueryFormComponentExtended_Conditional_1_Template_kendo_expansionpanel_expandedChange_26_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.sqlPanelExpanded, $event) || (ctx_r2.sqlPanelExpanded = $event); return i0.ɵɵresetView($event); });
820
- i0.ɵɵtemplate(27, MJQueryFormComponentExtended_Conditional_1_ng_template_27_Template, 10, 2, "ng-template", 24);
821
- i0.ɵɵelementStart(28, "div", 25)(29, "mj-code-editor", 26, 1);
826
+ i0.ɵɵtemplate(27, MJQueryFormComponentExtended_Conditional_1_ng_template_27_Template, 10, 2, "ng-template", 25);
827
+ i0.ɵɵelementStart(28, "div", 26)(29, "mj-code-editor", 27, 1);
822
828
  i0.ɵɵlistener("change", function MJQueryFormComponentExtended_Conditional_1_Template_mj_code_editor_change_29_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onSQLChange($event)); });
823
829
  i0.ɵɵelementEnd();
824
- i0.ɵɵconditionalCreate(31, MJQueryFormComponentExtended_Conditional_1_Conditional_31_Template, 7, 0, "div", 27);
830
+ i0.ɵɵconditionalCreate(31, MJQueryFormComponentExtended_Conditional_1_Conditional_31_Template, 7, 0, "div", 28);
825
831
  i0.ɵɵelementEnd()();
826
- i0.ɵɵconditionalCreate(32, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Template, 5, 2, "kendo-expansionpanel", 28);
827
- i0.ɵɵconditionalCreate(33, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Template, 5, 2, "kendo-expansionpanel", 28);
828
- i0.ɵɵconditionalCreate(34, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Template, 5, 2, "kendo-expansionpanel", 28);
829
- i0.ɵɵelementStart(35, "kendo-expansionpanel", 23);
832
+ i0.ɵɵconditionalCreate(32, MJQueryFormComponentExtended_Conditional_1_Conditional_32_Template, 5, 2, "kendo-expansionpanel", 29);
833
+ i0.ɵɵconditionalCreate(33, MJQueryFormComponentExtended_Conditional_1_Conditional_33_Template, 5, 2, "kendo-expansionpanel", 29);
834
+ i0.ɵɵconditionalCreate(34, MJQueryFormComponentExtended_Conditional_1_Conditional_34_Template, 5, 2, "kendo-expansionpanel", 29);
835
+ i0.ɵɵelementStart(35, "kendo-expansionpanel", 24);
830
836
  i0.ɵɵtwoWayListener("expandedChange", function MJQueryFormComponentExtended_Conditional_1_Template_kendo_expansionpanel_expandedChange_35_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.detailsPanelExpanded, $event) || (ctx_r2.detailsPanelExpanded = $event); return i0.ɵɵresetView($event); });
831
- i0.ɵɵtemplate(36, MJQueryFormComponentExtended_Conditional_1_ng_template_36_Template, 3, 0, "ng-template", 24);
832
- i0.ɵɵelementStart(37, "div", 29)(38, "div", 30)(39, "div", 31)(40, "label", 32);
833
- i0.ɵɵelement(41, "i", 33);
837
+ i0.ɵɵtemplate(36, MJQueryFormComponentExtended_Conditional_1_ng_template_36_Template, 3, 0, "ng-template", 25);
838
+ i0.ɵɵelementStart(37, "div", 30)(38, "div", 31)(39, "div", 32)(40, "label", 33);
839
+ i0.ɵɵelement(41, "i", 34);
834
840
  i0.ɵɵtext(42, " Template Usage ");
835
841
  i0.ɵɵelementEnd();
836
- i0.ɵɵconditionalCreate(43, MJQueryFormComponentExtended_Conditional_1_Conditional_43_Template, 1, 1, "kendo-switch", 34)(44, MJQueryFormComponentExtended_Conditional_1_Conditional_44_Template, 3, 1, "div", 35);
842
+ i0.ɵɵconditionalCreate(43, MJQueryFormComponentExtended_Conditional_1_Conditional_43_Template, 1, 1, "kendo-switch", 35)(44, MJQueryFormComponentExtended_Conditional_1_Conditional_44_Template, 3, 1, "div", 36);
837
843
  i0.ɵɵelementEnd();
838
- i0.ɵɵelementStart(45, "div", 31)(46, "label", 32);
839
- i0.ɵɵelement(47, "i", 36);
844
+ i0.ɵɵelementStart(45, "div", 32)(46, "label", 33);
845
+ i0.ɵɵelement(47, "i", 37);
840
846
  i0.ɵɵtext(48, " Created ");
841
847
  i0.ɵɵelementEnd();
842
- i0.ɵɵelementStart(49, "div", 35);
848
+ i0.ɵɵelementStart(49, "div", 36);
843
849
  i0.ɵɵtext(50);
844
850
  i0.ɵɵelementEnd()();
845
- i0.ɵɵelementStart(51, "div", 31)(52, "label", 32);
846
- i0.ɵɵelement(53, "i", 37);
851
+ i0.ɵɵelementStart(51, "div", 32)(52, "label", 33);
852
+ i0.ɵɵelement(53, "i", 38);
847
853
  i0.ɵɵtext(54, " Last Updated ");
848
854
  i0.ɵɵelementEnd();
849
- i0.ɵɵelementStart(55, "div", 35);
855
+ i0.ɵɵelementStart(55, "div", 36);
850
856
  i0.ɵɵtext(56);
851
857
  i0.ɵɵelementEnd()();
852
- i0.ɵɵconditionalCreate(57, MJQueryFormComponentExtended_Conditional_1_Conditional_57_Template, 6, 1, "div", 31);
858
+ i0.ɵɵconditionalCreate(57, MJQueryFormComponentExtended_Conditional_1_Conditional_57_Template, 6, 1, "div", 32);
853
859
  i0.ɵɵelementEnd()()();
854
- i0.ɵɵconditionalCreate(58, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Template, 5, 2, "kendo-expansionpanel", 28);
860
+ i0.ɵɵconditionalCreate(58, MJQueryFormComponentExtended_Conditional_1_Conditional_58_Template, 5, 2, "kendo-expansionpanel", 29);
855
861
  i0.ɵɵelementEnd()();
856
- i0.ɵɵelementStart(59, "mj-query-run-dialog", 38);
862
+ i0.ɵɵelementStart(59, "mj-query-run-dialog", 39);
857
863
  i0.ɵɵtwoWayListener("isVisibleChange", function MJQueryFormComponentExtended_Conditional_1_Template_mj_query_run_dialog_isVisibleChange_59_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.showRunDialog, $event) || (ctx_r2.showRunDialog = $event); return i0.ɵɵresetView($event); });
858
864
  i0.ɵɵlistener("onClose", function MJQueryFormComponentExtended_Conditional_1_Template_mj_query_run_dialog_onClose_59_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onRunDialogClose()); });
859
865
  i0.ɵɵelementEnd();
860
- i0.ɵɵelementStart(60, "mj-query-category-dialog", 39);
866
+ i0.ɵɵelementStart(60, "mj-query-category-dialog", 40);
861
867
  i0.ɵɵtwoWayListener("isVisibleChange", function MJQueryFormComponentExtended_Conditional_1_Template_mj_query_category_dialog_isVisibleChange_60_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.showCategoryDialog, $event) || (ctx_r2.showCategoryDialog = $event); return i0.ɵɵresetView($event); });
862
868
  i0.ɵɵlistener("onCategoryCreated", function MJQueryFormComponentExtended_Conditional_1_Template_mj_query_category_dialog_onCategoryCreated_60_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onCategoryCreated($event)); });
863
869
  i0.ɵɵelementEnd();
@@ -865,16 +871,18 @@ function MJQueryFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf &
865
871
  const ctx_r2 = i0.ɵɵnextContext();
866
872
  i0.ɵɵadvance(2);
867
873
  i0.ɵɵproperty("Form", ctx_r2);
868
- i0.ɵɵadvance(7);
869
- i0.ɵɵconditional(ctx_r2.EditMode ? 9 : 10);
874
+ i0.ɵɵadvance(6);
875
+ i0.ɵɵconditional(ctx_r2.EditMode ? 8 : 9);
870
876
  i0.ɵɵadvance(3);
871
- i0.ɵɵconditional(ctx_r2.record.ID ? 12 : -1);
877
+ i0.ɵɵconditional(ctx_r2.record.ID ? 11 : -1);
872
878
  i0.ɵɵadvance(5);
873
- i0.ɵɵconditional(ctx_r2.EditMode ? 17 : 18);
879
+ i0.ɵɵconditional(ctx_r2.EditMode ? 16 : 17);
874
880
  i0.ɵɵadvance(5);
875
- i0.ɵɵconditional(ctx_r2.EditMode ? 22 : 23);
881
+ i0.ɵɵconditional(ctx_r2.EditMode ? 21 : 22);
876
882
  i0.ɵɵadvance(2);
877
- i0.ɵɵconditional(ctx_r2.EditMode || ctx_r2.record.Description ? 24 : -1);
883
+ i0.ɵɵconditional(ctx_r2.EditMode || ctx_r2.record.Description ? 23 : -1);
884
+ i0.ɵɵadvance();
885
+ i0.ɵɵconditional(ctx_r2.record.Status && ctx_r2.record.Status !== "Approved" && !ctx_r2.EditMode ? 24 : -1);
878
886
  i0.ɵɵadvance(2);
879
887
  i0.ɵɵtwoWayProperty("expanded", ctx_r2.sqlPanelExpanded);
880
888
  i0.ɵɵadvance(3);
@@ -933,7 +941,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
933
941
  ];
934
942
  this.categories = [];
935
943
  this.categoryTreeData = [];
936
- // Status options
944
+ // Status options — matches MJQueryEntity.Status type from database CHECK constraint
937
945
  this.statusOptions = [
938
946
  { text: 'Pending', value: 'Pending' },
939
947
  { text: 'Approved', value: 'Approved' },
@@ -945,9 +953,13 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
945
953
  this.sqlFilters = RUN_QUERY_SQL_FILTERS;
946
954
  this.destroy$ = new Subject();
947
955
  this.isUpdatingEditorValue = false;
956
+ this.isInitialLoad = true;
948
957
  }
949
958
  async ngOnInit() {
950
959
  await super.ngOnInit();
960
+ // During init, suppress per-method detectChanges to avoid NG0100.
961
+ // We do one unified detectChanges after everything completes.
962
+ this.isInitialLoad = true;
951
963
  // Load categories first to ensure they're available for the dropdown
952
964
  await this.loadCategories();
953
965
  // Then load other data in parallel
@@ -957,7 +969,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
957
969
  this.loadQueryEntities(),
958
970
  this.loadQueryPermissions()
959
971
  ]);
960
- // Ensure form is properly initialized after all data is loaded
972
+ this.isInitialLoad = false;
961
973
  this.cdr.detectChanges();
962
974
  }
963
975
  ngOnDestroy() {
@@ -1027,6 +1039,8 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1027
1039
  }
1028
1040
  finally {
1029
1041
  this.isLoadingParameters = false;
1042
+ if (!this.isInitialLoad)
1043
+ this.cdr.detectChanges();
1030
1044
  }
1031
1045
  }
1032
1046
  }
@@ -1050,6 +1064,8 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1050
1064
  }
1051
1065
  finally {
1052
1066
  this.isLoadingFields = false;
1067
+ if (!this.isInitialLoad)
1068
+ this.cdr.detectChanges();
1053
1069
  }
1054
1070
  }
1055
1071
  }
@@ -1074,6 +1090,8 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1074
1090
  }
1075
1091
  finally {
1076
1092
  this.isLoadingEntities = false;
1093
+ if (!this.isInitialLoad)
1094
+ this.cdr.detectChanges();
1077
1095
  }
1078
1096
  }
1079
1097
  }
@@ -1097,6 +1115,8 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1097
1115
  }
1098
1116
  finally {
1099
1117
  this.isLoadingPermissions = false;
1118
+ if (!this.isInitialLoad)
1119
+ this.cdr.detectChanges();
1100
1120
  }
1101
1121
  }
1102
1122
  }
@@ -1120,8 +1140,9 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1120
1140
  ];
1121
1141
  // Build tree data after options are set
1122
1142
  this.categoryTreeData = this.buildCategoryTree(this.categories);
1123
- // Trigger change detection to update the view
1124
- this.cdr.detectChanges();
1143
+ // Trigger change detection to update the view (skip during init)
1144
+ if (!this.isInitialLoad)
1145
+ this.cdr.detectChanges();
1125
1146
  }
1126
1147
  }
1127
1148
  catch (error) {
@@ -1248,11 +1269,15 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1248
1269
  return;
1249
1270
  }
1250
1271
  }
1272
+ // Warn if query is not approved
1273
+ if (this.record.Status !== 'Approved') {
1274
+ console.warn(`Executing query '${this.record.Name}' with status '${this.record.Status}'. Query has not been approved.`);
1275
+ }
1251
1276
  // Reload parameters in case they were updated
1252
1277
  await this.loadQueryParameters();
1253
- this.cdr.detectChanges();
1254
- // Show the run dialog
1278
+ // Show the run dialog — set before detectChanges to avoid NG0100
1255
1279
  this.showRunDialog = true;
1280
+ this.cdr.detectChanges();
1256
1281
  }
1257
1282
  /**
1258
1283
  * Handle run dialog close
@@ -1405,14 +1430,27 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1405
1430
  }
1406
1431
  getStatusBadgeColor() {
1407
1432
  switch (this.record?.Status) {
1408
- case 'Approved':
1409
- return '#28a745';
1410
- case 'Pending':
1411
- return '#ffc107';
1412
- case 'Rejected':
1413
- return '#dc3545';
1414
- default:
1415
- return '#6c757d';
1433
+ case 'Approved': return '#28a745';
1434
+ case 'Pending': return '#f59e0b';
1435
+ case 'Rejected': return '#dc3545';
1436
+ case 'Expired': return '#6c757d';
1437
+ default: return '#6c757d';
1438
+ }
1439
+ }
1440
+ getStatusBannerIcon() {
1441
+ switch (this.record?.Status) {
1442
+ case 'Pending': return 'fa-clock';
1443
+ case 'Rejected': return 'fa-times-circle';
1444
+ case 'Expired': return 'fa-archive';
1445
+ default: return 'fa-info-circle';
1446
+ }
1447
+ }
1448
+ getStatusBannerMessage() {
1449
+ switch (this.record?.Status) {
1450
+ case 'Pending': return 'It can be executed for testing but has not yet been approved.';
1451
+ case 'Rejected': return 'It was rejected and may need revision before approval.';
1452
+ case 'Expired': return 'It has expired and is no longer in active use.';
1453
+ default: return '';
1416
1454
  }
1417
1455
  }
1418
1456
  /**
@@ -1530,14 +1568,14 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1530
1568
  } if (rf & 2) {
1531
1569
  let _t;
1532
1570
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sqlEditor = _t.first);
1533
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [["form", "ngForm"], ["sqlEditor", ""], [1, "record-form-container", 2, "height", "100%", "display", "flex", "flex-direction", "column"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [3, "Form"], [1, "query-header", 2, "flex-shrink", "0", "background", "#f8f9fa", "border-bottom", "1px solid #dee2e6", "padding", "20px"], [2, "display", "flex", "flex-direction", "column", "gap", "16px"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "gap", "20px"], [2, "flex", "1", "min-width", "0"], [2, "display", "flex", "align-items", "center", "gap", "12px"], [1, "fa-solid", "fa-database", 2, "color", "#17a2b8", "font-size", "1.4em"], ["name", "queryName", "placeholder", "Enter query name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModel"], [2, "margin", "0", "color", "#495057", "font-weight", "600", "flex", "1"], [1, "action-buttons", 2, "display", "flex", "gap", "8px", "align-items", "center"], ["kendoButton", "", "title", "Run Query", 3, "themeColor", "size", "disabled"], [2, "display", "grid", "grid-template-columns", "1fr auto", "gap", "24px", "align-items", "center"], [2, "font-weight", "600", "color", "#495057", "min-width", "80px"], ["name", "categoryId", "textField", "text", "valueField", "value", "placeholder", "Select category...", 2, "flex", "1", 3, "ngModel", "data", "valuePrimitive"], [2, "color", "#495057"], [2, "font-weight", "600", "color", "#495057", "min-width", "50px"], ["name", "status", "textField", "text", "valueField", "value", 2, "flex", "1", 3, "ngModel", "data", "valuePrimitive"], [1, "badge", 2, "color", "white", "padding", "6px 12px", "border-radius", "12px", "font-size", "0.85em", 3, "background"], [1, "query-content", 2, "flex", "1", "min-height", "0", "padding", "20px", "overflow-y", "auto", "background", "#f5f7fa"], [2, "margin-bottom", "16px", 3, "expandedChange", "expanded"], ["kendoExpansionPanelTitleDirective", ""], [2, "display", "flex", "flex-direction", "column"], [2, "flex", "1", "height", "400px", "border", "1px solid #ced4da", "border-radius", "4px", 3, "change", "language"], [1, "filters-help", 2, "background", "#f8f9fa", "border", "1px solid #dee2e6", "border-radius", "6px", "padding", "16px", "margin-top", "16px"], [2, "margin-bottom", "16px", 3, "expanded"], [2, "padding", "20px"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-file-code"], ["name", "usesTemplate", 3, "ngModel"], [1, "detail-value"], [1, "fa-solid", "fa-calendar-plus"], [1, "fa-solid", "fa-calendar-check"], [3, "isVisibleChange", "onClose", "query", "parameters", "isVisible"], [3, "isVisibleChange", "onCategoryCreated", "isVisible"], ["name", "queryName", "placeholder", "Enter query name...", 2, "font-size", "1.2em", "font-weight", "600", "min-width", "300px", "flex", "1", 3, "ngModelChange", "ngModel"], ["kendoButton", "", "title", "Run Query", 3, "click", "themeColor", "size", "disabled"], [1, "fa-solid", "fa-play"], ["name", "categoryId", "textField", "text", "valueField", "value", "placeholder", "Select category...", 2, "flex", "1", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], ["name", "status", "textField", "text", "valueField", "value", 2, "flex", "1", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [1, "badge", 2, "color", "white", "padding", "6px 12px", "border-radius", "12px", "font-size", "0.85em"], [1, "fa-solid", "fa-check-circle"], [1, "fa-solid", "fa-clock"], [1, "fa-solid", "fa-times-circle"], ["name", "description", "placeholder", "Enter query description...", 2, "width", "100%", 3, "ngModel", "rows"], [2, "margin", "0", "color", "#6c757d", "font-size", "0.9em", "line-height", "1.4"], ["name", "description", "placeholder", "Enter query description...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "rows"], [2, "display", "flex", "align-items", "center", "justify-content", "space-between", "width", "100%"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [1, "fa-solid", "fa-code", 2, "color", "#17a2b8"], [1, "badge", 2, "background", "#28a745", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], ["type", "button", "kendoButton", "", "fillMode", "flat", "size", "small", "title", "Show/hide SQL filters help", 2, "margin-right", "8px", 3, "click"], [1, "fa-solid", "fa-question-circle"], [2, "margin-left", "4px"], [1, "fa-solid", 2, "margin-left", "4px", 3, "ngClass"], [1, "fa-solid", "fa-check"], [2, "margin", "0 0 12px 0", "color", "#495057", "font-weight", "600"], [1, "fa-solid", "fa-filter"], [2, "display", "grid", "grid-template-columns", "repeat(auto-fit, minmax(300px, 1fr))", "gap", "12px"], [1, "filter-card", 2, "background", "white", "border", "1px solid #e9ecef", "border-radius", "4px", "padding", "12px"], [2, "font-family", "'Courier New', monospace", "font-weight", "bold", "color", "#007bff", "margin-bottom", "4px"], [2, "font-size", "0.85em", "color", "#495057", "margin-bottom", "8px"], [2, "font-family", "'Courier New', monospace", "font-size", "0.8em", "background", "#f1f3f4", "padding", "6px", "border-radius", "3px", "margin-bottom", "4px"], [2, "font-size", "0.75em", "color", "#6c757d", "font-style", "italic"], [2, "padding", "16px 0"], [2, "display", "flex", "align-items", "center", "justify-content", "center", "padding", "40px"], [1, "fa-solid", "fa-sliders", 2, "color", "#6c757d"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "color", "#6c757d", "margin-right", "12px"], [2, "color", "#6c757d"], [1, "empty-state"], [1, "fa-solid", "fa-sliders", "empty-state-icon"], [1, "empty-state-title"], [1, "empty-state-text"], ["type", "button", 1, "add-param-btn"], ["type", "button", 1, "add-param-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [2, "display", "flex", "justify-content", "flex-end", "margin-bottom", "16px", "padding", "0 20px"], [1, "parameters-grid"], [1, "param-card", 3, "required"], [1, "param-card", 3, "click"], [1, "param-card-header"], [1, "param-name"], [1, "fa-solid", "fa-at", 2, "color", "#007bff"], [1, "param-badges"], [1, "param-badge", "required"], [1, "param-card-body"], [2, "margin-bottom", "8px"], [2, "display", "flex", "gap", "16px", "font-size", "0.85em"], [1, "param-actions"], [2, "background", "#f1f3f4", "padding", "2px 4px", "border-radius", "3px"], [1, "param-actions", 3, "click"], ["type", "button", "title", "Edit parameter", 1, "param-action-btn", 3, "click"], [1, "fa-solid", "fa-pen"], ["type", "button", "title", "Delete parameter", 1, "param-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [2, "display", "flex", "justify-content", "center", "padding", "40px"], [1, "fa-solid", "fa-table", 2, "color", "#6c757d"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "2em", "color", "#007bff"], [1, "fa-solid", "fa-table", 2, "font-size", "3em", "color", "#dee2e6", "margin-bottom", "12px"], [2, "color", "#6c757d", "margin-bottom", "8px"], [2, "color", "#adb5bd", "margin-bottom", "16px"], [1, "param-card"], [1, "fa-solid", "fa-columns", 2, "color", "#17a2b8"], [1, "param-badge", 2, "background", "#e3f2fd", "color", "#1976d2"], [1, "param-badge", 2, "background", "#f3e5f5", "color", "#7b1fa2"], [1, "param-description"], [1, "param-meta"], [1, "meta-item"], [1, "fa-solid", "fa-code"], [1, "param-card-actions"], ["type", "button", "title", "Delete field", 1, "action-btn", "danger", 3, "click"], [1, "fa-solid", "fa-database", 2, "color", "#6c757d"], [1, "fa-solid", "fa-database", 2, "font-size", "3em", "color", "#dee2e6", "margin-bottom", "12px"], [1, "fa-solid", "fa-table", 2, "color", "#28a745"], [2, "flex", "1", "margin-left", "12px"], ["textField", "text", "valueField", "id", "placeholder", "Select entity...", 2, "width", "100%", 3, "ngModelChange", "ngModel", "name", "data", "valuePrimitive"], [1, "fa-solid", "fa-database"], ["type", "button", "title", "Delete entity", 1, "action-btn", "danger", 3, "click"], [1, "fa-solid", "fa-info-circle", 2, "color", "#6c757d"], ["name", "usesTemplate", 3, "ngModelChange", "ngModel"], [2, "color", "#28a745"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-shield-alt", 2, "color", "#6c757d"], [1, "fa-solid", "fa-shield-alt", 2, "font-size", "3em", "color", "#dee2e6", "margin-bottom", "12px"], [2, "color", "#adb5bd"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "permissions-display"], [1, "permission-card", 2, "background", "#f8f9fa", "border", "1px solid #dee2e6", "border-radius", "8px", "padding", "16px", "margin-bottom", "12px"], [1, "fa-solid", "fa-users", 2, "font-size", "1.5em", "color", "#6c757d"], [2, "flex", "1"], [2, "font-weight", "600", "color", "#495057"], [2, "font-size", "0.85em", "color", "#6c757d"], [2, "display", "flex", "gap", "8px"], [1, "permission-badge", 2, "background", "#6f42c1", "color", "white", "padding", "4px 8px", "border-radius", "4px", "font-size", "0.8em"]], template: function MJQueryFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1571
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [["form", "ngForm"], ["sqlEditor", ""], [1, "record-form-container", 2, "height", "100%", "display", "flex", "flex-direction", "column"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [3, "Form"], [1, "query-header"], [1, "query-header-content"], [1, "query-header-top"], [1, "query-name-section"], [1, "fa-solid", "fa-database", "query-title-icon"], ["name", "queryName", "placeholder", "Enter query name...", 1, "query-name-input", 3, "ngModel"], [1, "query-name-display"], [1, "query-header-actions"], ["kendoButton", "", "title", "Run Query", 1, "run-query-btn", 3, "themeColor", "size", "disabled"], [1, "query-meta-row"], [1, "query-meta-item"], [1, "meta-label"], ["name", "categoryId", "textField", "text", "valueField", "value", "placeholder", "Select category...", 1, "meta-dropdown", 3, "ngModel", "data", "valuePrimitive"], [1, "meta-value"], ["name", "status", "textField", "text", "valueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModel", "data", "valuePrimitive"], [1, "status-pill", 3, "background"], [1, "query-description-row"], [1, "status-warning-banner", 3, "border-left-color"], [1, "query-content"], [1, "query-panel", 3, "expandedChange", "expanded"], ["kendoExpansionPanelTitleDirective", ""], [1, "sql-panel-content"], [1, "sql-editor", 3, "change", "language"], [1, "filters-help"], [1, "query-panel", 3, "expanded"], [1, "panel-body"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-file-code"], ["name", "usesTemplate", 3, "ngModel"], [1, "detail-value"], [1, "fa-solid", "fa-calendar-plus"], [1, "fa-solid", "fa-calendar-check"], [3, "isVisibleChange", "onClose", "query", "parameters", "isVisible"], [3, "isVisibleChange", "onCategoryCreated", "isVisible"], ["name", "queryName", "placeholder", "Enter query name...", 1, "query-name-input", 3, "ngModelChange", "ngModel"], ["kendoButton", "", "title", "Run Query", 1, "run-query-btn", 3, "click", "themeColor", "size", "disabled"], [1, "fa-solid", "fa-play"], ["name", "categoryId", "textField", "text", "valueField", "value", "placeholder", "Select category...", 1, "meta-dropdown", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], ["name", "status", "textField", "text", "valueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModelChange", "ngModel", "data", "valuePrimitive"], [1, "status-pill"], [1, "fa-solid"], ["name", "description", "placeholder", "Enter query description...", 1, "query-description-input", 3, "ngModel", "rows"], [1, "query-description-text"], ["name", "description", "placeholder", "Enter query description...", 1, "query-description-input", 3, "ngModelChange", "ngModel", "rows"], [1, "status-warning-banner"], [1, "panel-title-row"], [1, "panel-title"], [1, "fa-solid", "fa-code", "panel-icon", "sql-icon"], [1, "panel-badge", "defined"], ["type", "button", "kendoButton", "", "fillMode", "flat", "size", "small", "title", "Show/hide SQL filters help", 1, "filters-help-btn", 3, "click"], [1, "fa-solid", "fa-question-circle"], [1, "fa-solid", 3, "ngClass"], [1, "fa-solid", "fa-check"], [1, "filters-help-title"], [1, "fa-solid", "fa-filter"], [1, "filters-grid"], [1, "filter-card"], [1, "filter-name"], [1, "filter-description"], [1, "filter-syntax"], [1, "filter-notes"], [1, "panel-loading"], [1, "fa-solid", "fa-sliders", "panel-icon"], [1, "panel-badge", "count"], ["text", "Loading parameters..."], [1, "empty-state"], [1, "fa-solid", "fa-sliders", "empty-state-icon"], [1, "empty-state-title"], [1, "empty-state-text"], ["type", "button", 1, "add-item-btn"], ["type", "button", 1, "add-item-btn", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "panel-toolbar"], [1, "card-grid"], [1, "item-card", 3, "required"], [1, "item-card", 3, "click"], [1, "item-card-header"], [1, "item-name"], [1, "fa-solid", "fa-at", "item-name-icon", "param-icon"], [1, "item-badges"], [1, "item-badge", "required"], [1, "item-card-body"], [1, "item-description"], [1, "item-meta"], [1, "meta-tag"], [1, "item-actions"], [1, "meta-code"], [1, "item-actions", 3, "click"], ["type", "button", "title", "Edit parameter", 1, "item-action-btn", 3, "click"], [1, "fa-solid", "fa-pen"], ["type", "button", "title", "Delete parameter", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-table", "panel-icon"], ["text", "Loading fields..."], [1, "fa-solid", "fa-table", "empty-state-icon"], [1, "item-card"], [1, "fa-solid", "fa-columns", "item-name-icon", "field-icon"], [1, "item-badge", "type"], [1, "item-badge", "sequence"], [1, "fa-solid", "fa-code"], [1, "item-card-actions"], ["type", "button", "title", "Delete field", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-database", "panel-icon"], ["text", "Loading entities..."], [1, "fa-solid", "fa-database", "empty-state-icon"], [1, "fa-solid", "fa-table", "item-name-icon", "entity-icon"], [1, "entity-dropdown-wrapper"], ["textField", "text", "valueField", "id", "placeholder", "Select entity...", 1, "entity-dropdown", 3, "ngModelChange", "ngModel", "name", "data", "valuePrimitive"], [1, "fa-solid", "fa-database"], ["type", "button", "title", "Delete entity", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-info-circle", "panel-icon"], ["name", "usesTemplate", 3, "ngModelChange", "ngModel"], [1, "detail-tag", "positive"], [1, "detail-tag", "neutral"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-shield-alt", "panel-icon"], ["text", "Loading permissions..."], [1, "fa-solid", "fa-shield-alt", "empty-state-icon"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "permissions-list"], [1, "permission-card"], [1, "fa-solid", "fa-users", "permission-icon"], [1, "permission-info"], [1, "permission-role"], [1, "permission-type"], [1, "permission-badge"]], template: function MJQueryFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1534
1572
  i0.ɵɵelementStart(0, "div", 2);
1535
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_1_Template, 61, 22);
1573
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_1_Template, 61, 23);
1536
1574
  i0.ɵɵelementEnd();
1537
1575
  } if (rf & 2) {
1538
1576
  i0.ɵɵadvance();
1539
1577
  i0.ɵɵconditional(ctx.record ? 1 : -1);
1540
- } }, dependencies: [i1.NgClass, i2.ɵNgNoValidate, i2.NgControlStatus, i2.NgControlStatusGroup, i2.NgModel, i2.NgForm, i3.ExpansionPanelComponent, i3.ExpansionPanelTitleDirective, i4.TextBoxComponent, i4.TextAreaComponent, i4.SwitchComponent, i5.DropDownListComponent, i6.ButtonComponent, i7.MjFormToolbarComponent, i7.ExplorerEntityDataGridComponent, i8.CodeEditorComponent, i9.QueryRunDialogComponent, i10.QueryCategoryDialogComponent], styles: [".k-pane[_ngcontent-%COMP%] {\n background-color: #F5F6FA;\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n} \n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: #9ca3af;\n}", "\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n.sql-editor-container[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.filters-help[_ngcontent-%COMP%] .filter-card[_ngcontent-%COMP%] {\n transition: transform 0.2s ease;\n}\n\n.filters-help[_ngcontent-%COMP%] .filter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n}\n\n.toolbar-actions[_ngcontent-%COMP%] {\n margin-left: auto;\n}\n\n.query-header[_ngcontent-%COMP%] {\n border-bottom: 2px solid #dee2e6;\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n .query-content kendo-expansionpanel {\n border: none !important;\n border-radius: 12px !important;\n margin-bottom: 16px !important;\n box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;\n background: white !important;\n overflow: hidden !important;\n}\n\n .query-content .k-expander-header {\n background: white !important;\n border: none !important;\n padding: 16px 20px !important;\n border-radius: 12px !important;\n color: #2c3e50 !important;\n font-weight: 600 !important;\n font-size: 16px !important;\n transition: all 0.2s ease !important;\n}\n\n .query-content .k-expander-header:hover {\n background: #f8f9fa !important;\n}\n\n\n\n .query-content kendo-expansionpanel[aria-expanded=\"true\"] .k-expander-header {\n background: #2196f3 !important;\n color: white !important;\n border-radius: 12px 12px 0 0 !important;\n}\n\n\n\n .query-content .k-expander-content {\n padding: 0 !important;\n border: none !important;\n background: white !important;\n border-radius: 0 0 12px 12px !important;\n}\n\n\n\n .query-content .k-expander-header .fa-solid {\n transition: transform 0.2s ease !important;\n}\n\n .query-content kendo-expansionpanel[aria-expanded=\"true\"] .k-expander-header .fa-chevron-down {\n transform: rotate(180deg) !important;\n}\n\n\n\n.parameters-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n padding: 20px;\n}\n\n.param-card[_ngcontent-%COMP%] {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s;\n cursor: pointer;\n position: relative;\n}\n\n.param-card[_ngcontent-%COMP%]:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0,123,255,0.1);\n transform: translateY(-1px);\n}\n\n.param-card.required[_ngcontent-%COMP%] {\n border-color: #ffc107;\n}\n\n.param-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 12px;\n}\n\n.param-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 1.1em;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.param-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n}\n\n.param-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 600;\n color: white;\n}\n\n.param-badge.required[_ngcontent-%COMP%] {\n background: #ffc107;\n}\n\n.param-badge.array[_ngcontent-%COMP%] {\n background: #9c27b0;\n}\n\n.param-card-body[_ngcontent-%COMP%] {\n color: #6c757d;\n font-size: 0.9em;\n}\n\n.param-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n right: 12px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.param-card[_ngcontent-%COMP%]:hover .param-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.param-action-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n color: #6c757d;\n transition: all 0.2s;\n}\n\n.param-action-btn[_ngcontent-%COMP%]:hover {\n background: #f8f9fa;\n color: #007bff;\n}\n\n.param-action-btn.delete[_ngcontent-%COMP%]:hover {\n background: #fff5f5;\n color: #dc3545;\n}\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 0.85em;\n font-weight: 600;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 1em;\n color: #2c3e50;\n}\n\n\n\n.category-selector[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.category-tree-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.add-category-btn[_ngcontent-%COMP%] {\n background: #28a745;\n color: white;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.add-category-btn[_ngcontent-%COMP%]:hover {\n background: #218838;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(40,167,69,0.2);\n}\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: #6c757d;\n}\n\n.empty-state-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state-title[_ngcontent-%COMP%] {\n font-size: 1.2em;\n font-weight: 600;\n margin-bottom: 8px;\n color: #495057;\n}\n\n.empty-state-text[_ngcontent-%COMP%] {\n font-size: 0.9em;\n margin-bottom: 20px;\n}\n\n.add-param-btn[_ngcontent-%COMP%] {\n background: #007bff;\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.add-param-btn[_ngcontent-%COMP%]:hover {\n background: #0056b3;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,123,255,0.2);\n}"] }); }
1578
+ } }, dependencies: [i1.NgClass, i2.ɵNgNoValidate, i2.NgControlStatus, i2.NgControlStatusGroup, i2.NgModel, i2.NgForm, i3.ExpansionPanelComponent, i3.ExpansionPanelTitleDirective, i4.TextBoxComponent, i4.TextAreaComponent, i4.SwitchComponent, i5.DropDownListComponent, i6.ButtonComponent, i7.MjFormToolbarComponent, i7.ExplorerEntityDataGridComponent, i8.CodeEditorComponent, i9.LoadingComponent, i10.QueryRunDialogComponent, i11.QueryCategoryDialogComponent], styles: [".k-pane[_ngcontent-%COMP%] {\n background-color: #F5F6FA;\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n} \n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: #9ca3af;\n}", "\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n\n\n\n.query-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: linear-gradient(135deg, #5c6bc0 0%, #3949ab 100%);\n border-bottom: none;\n padding: 0;\n}\n\n.query-header-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 20px;\n}\n\n.query-header-top[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.query-name-section[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-title-icon[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.85);\n font-size: 1.3em;\n flex-shrink: 0;\n}\n\n.query-name-input[_ngcontent-%COMP%] {\n font-size: 1.2em;\n font-weight: 600;\n min-width: 300px;\n flex: 1;\n}\n\n.query-name-display[_ngcontent-%COMP%] {\n margin: 0;\n color: #fff;\n font-weight: 600;\n font-size: 1.2em;\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.query-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.run-query-btn[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n\n\n.query-meta-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.query-meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: rgba(255, 255, 255, 0.75);\n font-size: 13px;\n min-width: 60px;\n}\n\n.meta-value[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.95);\n font-size: 14px;\n}\n\n.meta-dropdown[_ngcontent-%COMP%] {\n min-width: 200px;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 14px;\n color: #fff;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n\n\n.query-description-row[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n\n.query-description-input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.query-description-text[_ngcontent-%COMP%] {\n margin: 0;\n color: rgba(255, 255, 255, 0.8);\n font-size: 13px;\n line-height: 1.4;\n}\n\n\n\n\n\n\n.status-warning-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n margin: 0;\n background: #fff8e1;\n border-left: 4px solid #f59e0b;\n font-size: 13px;\n color: #5d4037;\n flex-shrink: 0;\n}\n\n.status-warning-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.status-warning-banner[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n\n\n\n\n\n.query-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: #f5f5f5;\n}\n\n\n\n\n\n\n.query-panel[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n .query-content kendo-expansionpanel {\n border: none !important;\n border-radius: 8px !important;\n margin-bottom: 12px !important;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08) !important;\n background: white !important;\n overflow: hidden !important;\n}\n\n .query-content .k-expander-header {\n background: white !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: 8px !important;\n color: #333 !important;\n font-weight: 600 !important;\n font-size: 14px !important;\n transition: background 0.15s ease !important;\n}\n\n .query-content .k-expander-header:hover {\n background: #f8f9fa !important;\n}\n\n .query-content kendo-expansionpanel[aria-expanded=\"true\"] .k-expander-header {\n background: #5c6bc0 !important;\n color: white !important;\n border-radius: 8px 8px 0 0 !important;\n}\n\n .query-content .k-expander-content {\n padding: 0 !important;\n border: none !important;\n background: white !important;\n border-radius: 0 0 8px 8px !important;\n}\n\n\n\n\n\n\n.panel-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n opacity: 0.7;\n}\n\n.sql-icon[_ngcontent-%COMP%] {\n color: #5c6bc0;\n}\n\n kendo-expansionpanel[aria-expanded=\"true\"] .panel-icon {\n color: rgba(255, 255, 255, 0.85) !important;\n opacity: 1;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.panel-badge.defined[_ngcontent-%COMP%] {\n background: #28a745;\n color: white;\n}\n\n.panel-badge.count[_ngcontent-%COMP%] {\n background: #5c6bc0;\n color: white;\n}\n\n kendo-expansionpanel[aria-expanded=\"true\"] .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n kendo-expansionpanel[aria-expanded=\"true\"] .panel-badge.defined {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n.filters-help-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 8px;\n font-size: 12px;\n}\n\n\n\n\n\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n\n\n\n\n\n.sql-panel-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor[_ngcontent-%COMP%] {\n flex: 1;\n height: 400px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n margin: 16px;\n}\n\n\n\n.filters-help[_ngcontent-%COMP%] {\n background: #fafafa;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: #333;\n font-weight: 600;\n font-size: 14px;\n}\n\n.filters-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 10px;\n}\n\n.filter-card[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: 12px;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.filter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-name[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: #5c6bc0;\n margin-bottom: 4px;\n}\n\n.filter-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #555;\n margin-bottom: 6px;\n}\n\n.filter-syntax[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-size: 11px;\n background: #f5f5f5;\n padding: 6px;\n border-radius: 4px;\n margin-bottom: 4px;\n}\n\n.filter-notes[_ngcontent-%COMP%] {\n font-size: 11px;\n color: #888;\n font-style: italic;\n}\n\n\n\n\n\n\n.card-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 12px;\n padding: 0 20px 20px;\n}\n\n.item-card[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card[_ngcontent-%COMP%]:hover {\n border-color: #5c6bc0;\n box-shadow: 0 2px 8px rgba(92, 107, 192, 0.12);\n}\n\n.item-card.required[_ngcontent-%COMP%] {\n border-left: 3px solid #f59e0b;\n}\n\n.item-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 10px;\n}\n\n.item-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.item-name-icon.param-icon[_ngcontent-%COMP%] {\n color: #5c6bc0;\n}\n\n.item-name-icon.field-icon[_ngcontent-%COMP%] {\n color: #5c6bc0;\n}\n\n.item-name-icon.entity-icon[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.item-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n}\n\n.item-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n color: white;\n}\n\n.item-badge.required[_ngcontent-%COMP%] {\n background: #f59e0b;\n}\n\n.item-badge.type[_ngcontent-%COMP%] {\n background: #e8eaf6;\n color: #3949ab;\n}\n\n.item-badge.sequence[_ngcontent-%COMP%] {\n background: #f3e5f5;\n color: #7b1fa2;\n}\n\n.item-card-body[_ngcontent-%COMP%] {\n color: #666;\n font-size: 13px;\n}\n\n.item-description[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.item-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: 12px;\n}\n\n.meta-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code[_ngcontent-%COMP%] {\n background: #f5f5f5;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 11px;\n}\n\n\n\n.item-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 10px;\n right: 10px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.item-card[_ngcontent-%COMP%]:hover .item-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.item-card-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-top: 8px;\n}\n\n.item-action-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n color: #888;\n transition: all 0.15s ease;\n}\n\n.item-action-btn[_ngcontent-%COMP%]:hover {\n background: #f0f0f0;\n color: #5c6bc0;\n}\n\n.item-action-btn.delete[_ngcontent-%COMP%]:hover {\n background: #fff5f5;\n color: #dc3545;\n}\n\n\n\n.entity-dropdown-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: #888;\n display: flex;\n align-items: center;\n gap: 6px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: #333;\n}\n\n.detail-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n}\n\n.detail-tag.positive[_ngcontent-%COMP%] {\n color: #28a745;\n}\n\n.detail-tag.neutral[_ngcontent-%COMP%] {\n color: #888;\n}\n\n\n\n\n\n\n.permissions-list[_ngcontent-%COMP%] {\n padding: 0 20px;\n}\n\n.permission-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n background: #fafafa;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 1.3em;\n color: #5c6bc0;\n}\n\n.permission-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.permission-role[_ngcontent-%COMP%] {\n font-weight: 600;\n color: #333;\n font-size: 14px;\n}\n\n.permission-type[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #888;\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: #5c6bc0;\n color: white;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n text-align: center;\n color: #888;\n}\n\n.empty-state-icon[_ngcontent-%COMP%] {\n font-size: 40px;\n margin-bottom: 14px;\n opacity: 0.25;\n color: #333;\n}\n\n.empty-state-title[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n margin-bottom: 6px;\n color: #555;\n}\n\n.empty-state-text[_ngcontent-%COMP%] {\n font-size: 13px;\n margin-bottom: 16px;\n color: #888;\n}\n\n\n\n\n\n\n.add-item-btn[_ngcontent-%COMP%] {\n background: #5c6bc0;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n font-size: 13px;\n}\n\n.add-item-btn[_ngcontent-%COMP%]:hover {\n background: #3949ab;\n box-shadow: 0 2px 6px rgba(92, 107, 192, 0.3);\n}\n\n\n\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}"] }); }
1541
1579
  };
1542
1580
  MJQueryFormComponentExtended = __decorate([
1543
1581
  RegisterClass(BaseFormComponent, 'MJ: Queries')
@@ -1545,7 +1583,7 @@ MJQueryFormComponentExtended = __decorate([
1545
1583
  export { MJQueryFormComponentExtended };
1546
1584
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJQueryFormComponentExtended, [{
1547
1585
  type: Component,
1548
- args: [{ standalone: false, selector: 'mj-query-form', template: "<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"query-header\" style=\"flex-shrink: 0; background: #f8f9fa; border-bottom: 1px solid #dee2e6; padding: 20px;\">\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n\n <!-- Top Row: Name and Run Button -->\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;\">\n <!-- Left: Query Name -->\n <div style=\"flex: 1; min-width: 0;\">\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <i class=\"fa-solid fa-database\" style=\"color: #17a2b8; font-size: 1.4em;\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\"\n style=\"font-size: 1.2em; font-weight: 600; min-width: 300px; flex: 1;\">\n </kendo-textbox>\n } @else {\n <h4 style=\"margin: 0; color: #495057; font-weight: 600; flex: 1;\">{{ record.Name || 'Untitled Query' }}</h4>\n }\n </div>\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"action-buttons\" style=\"display: flex; gap: 8px; align-items: center;\">\n @if (record.ID) {\n <button kendoButton\n [themeColor]=\"'primary'\"\n [size]=\"'large'\"\n [disabled]=\"EditMode || record.Status !== 'Approved' || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n\n <!-- Second Row: Category and Status -->\n <div style=\"display: grid; grid-template-columns: 1fr auto; gap: 24px; align-items: center;\">\n <!-- Category -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: #495057; min-width: 80px;\">Category:</label>\n @if (EditMode) {\n <kendo-dropdownlist\n [(ngModel)]=\"record.CategoryID\"\n name=\"categoryId\"\n [data]=\"categoryOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select category...\"\n style=\"flex: 1;\">\n </kendo-dropdownlist>\n } @else {\n <span style=\"color: #495057;\">{{ getCategoryPath() || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: #495057; min-width: 50px;\">Status:</label>\n @if (EditMode) {\n <kendo-dropdownlist\n [(ngModel)]=\"record.Status\"\n name=\"status\"\n [data]=\"statusOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n style=\"flex: 1;\">\n </kendo-dropdownlist>\n } @else {\n <span class=\"badge\"\n [style.background]=\"getStatusBadgeColor()\"\n style=\"color: white; padding: 6px 12px; border-radius: 12px; font-size: 0.85em;\">\n @if (record.Status === 'Approved') {\n <i class=\"fa-solid fa-check-circle\"></i>\n }\n @if (record.Status === 'Pending') {\n <i class=\"fa-solid fa-clock\"></i>\n }\n @if (record.Status === 'Rejected') {\n <i class=\"fa-solid fa-times-circle\"></i>\n }\n {{ record.Status || 'Unknown' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div>\n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter query description...\"\n style=\"width: 100%;\">\n </kendo-textarea>\n } @else {\n <p style=\"margin: 0; color: #6c757d; font-size: 0.9em; line-height: 1.4;\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" style=\"flex: 1; min-height: 0; padding: 20px; overflow-y: auto; background: #f5f7fa;\">\n\n <!-- SQL Query Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"sqlPanelExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; justify-content: space-between; width: 100%;\">\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-code\" style=\"color: #17a2b8;\"></i>\n SQL\n @if (record.SQL) {\n <span class=\"badge\" style=\"background: #28a745; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n <i class=\"fa-solid fa-check\"></i> Defined\n </span>\n }\n </span>\n <button type=\"button\"\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"toggleFiltersHelp(); $event.stopPropagation()\"\n title=\"Show/hide SQL filters help\"\n style=\"margin-right: 8px;\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <span style=\"margin-left: 4px;\">Filters Help</span>\n <i class=\"fa-solid\" [ngClass]=\"showFiltersHelp ? 'fa-chevron-up' : 'fa-chevron-down'\" style=\"margin-left: 4px;\"></i>\n </button>\n </span>\n </ng-template>\n\n <div style=\"display: flex; flex-direction: column;\">\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n [language]=\"'sql'\"\n style=\"flex: 1; height: 400px; border: 1px solid #ced4da; border-radius: 4px;\">\n </mj-code-editor>\n\n <!-- SQL Filters Help (Below Editor) -->\n @if (showFiltersHelp) {\n <div class=\"filters-help\" style=\"background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 6px; padding: 16px; margin-top: 16px;\">\n <h6 style=\"margin: 0 0 12px 0; color: #495057; font-weight: 600;\">\n <i class=\"fa-solid fa-filter\"></i> Available SQL Filters for Parameterized Queries\n </h6>\n\n <div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 12px;\">\n @for (filter of sqlFilters; track filter.name) {\n <div class=\"filter-card\" style=\"background: white; border: 1px solid #e9ecef; border-radius: 4px; padding: 12px;\">\n <div style=\"font-family: 'Courier New', monospace; font-weight: bold; color: #007bff; margin-bottom: 4px;\">\n {{ filter.name }}\n </div>\n <div style=\"font-size: 0.85em; color: #495057; margin-bottom: 8px;\">\n {{ filter.description }}\n </div>\n <div style=\"font-family: 'Courier New', monospace; font-size: 0.8em; background: #f1f3f4; padding: 6px; border-radius: 3px; margin-bottom: 4px;\">\n {{ filter.exampleSyntax }}\n </div>\n @if (filter.notes) {\n <div style=\"font-size: 0.75em; color: #6c757d; font-style: italic;\">\n {{ filter.notes }}\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Parameters Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"parametersPanelExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: #6c757d;\"></i>\n Query Parameters\n @if (queryParameters.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ queryParameters.length }}\n </span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingParameters) {\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; color: #6c757d; margin-right: 12px;\"></i>\n <span style=\"color: #6c757d;\">Loading parameters...</span>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Parameters Defined</div>\n <div class=\"empty-state-text\">\n Add parameters to make your query dynamic and reusable.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n <!-- Parameters Header with Add Button -->\n @if (EditMode) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 16px; padding: 0 20px;\">\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n\n <!-- Parameters Grid -->\n <div class=\"parameters-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"param-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"param-card-header\">\n <div class=\"param-name\">\n <i class=\"fa-solid fa-at\" style=\"color: #007bff;\"></i>\n {{ param.Name }}\n </div>\n <div class=\"param-badges\">\n @if (param.IsRequired) {\n <span class=\"param-badge required\">Required</span>\n }\n </div>\n </div>\n\n <div class=\"param-card-body\">\n @if (param.Description) {\n <div style=\"margin-bottom: 8px;\">{{ param.Description }}</div>\n }\n\n <div style=\"display: flex; gap: 16px; font-size: 0.85em;\">\n <div>\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </div>\n @if (param.DefaultValue) {\n <div>\n <strong>Default:</strong>\n <code style=\"background: #f1f3f4; padding: 2px 4px; border-radius: 3px;\">\n {{ param.DefaultValue }}\n </code>\n </div>\n }\n </div>\n </div>\n\n @if (EditMode) {\n <div class=\"param-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"param-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"param-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"fieldsPanelExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table\" style=\"color: #6c757d;\"></i>\n Query Fields\n @if (queryFields.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ queryFields.length }}\n </span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingFields) {\n <div style=\"display: flex; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; color: #007bff;\"></i>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-table\" style=\"font-size: 3em; color: #dee2e6; margin-bottom: 12px;\"></i>\n <h5 style=\"color: #6c757d; margin-bottom: 8px;\">No Fields Defined</h5>\n <div style=\"color: #adb5bd; margin-bottom: 16px;\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n <!-- Fields Header with Add Button -->\n @if (EditMode) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 16px; padding: 0 20px;\">\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n\n <!-- Fields Grid -->\n <div class=\"parameters-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"param-card\">\n <div class=\"param-card-header\">\n <div class=\"param-name\">\n <i class=\"fa-solid fa-columns\" style=\"color: #17a2b8;\"></i>\n {{ field.Name }}\n </div>\n <div class=\"param-badges\">\n <span class=\"param-badge\" style=\"background: #e3f2fd; color: #1976d2;\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"param-badge\" style=\"background: #f3e5f5; color: #7b1fa2;\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n\n <div class=\"param-card-body\">\n @if (field.Description) {\n <div class=\"param-description\">{{ field.Description }}</div>\n }\n <div class=\"param-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n\n @if (EditMode) {\n <div class=\"param-card-actions\">\n <button type=\"button\" class=\"action-btn danger\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"entitiesPanelExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-database\" style=\"color: #6c757d;\"></i>\n Query Entities\n @if (queryEntities.length > 0) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ queryEntities.length }}\n </span>\n }\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingEntities) {\n <div style=\"display: flex; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; color: #007bff;\"></i>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database\" style=\"font-size: 3em; color: #dee2e6; margin-bottom: 12px;\"></i>\n <h5 style=\"color: #6c757d; margin-bottom: 8px;\">No Entities Tracked</h5>\n <div style=\"color: #adb5bd; margin-bottom: 16px;\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n <!-- Entities Header with Add Button -->\n @if (EditMode) {\n <div style=\"display: flex; justify-content: flex-end; margin-bottom: 16px; padding: 0 20px;\">\n <button type=\"button\" class=\"add-param-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n\n <!-- Entities Grid -->\n <div class=\"parameters-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"param-card\">\n <div class=\"param-card-header\">\n <div class=\"param-name\">\n <i class=\"fa-solid fa-table\" style=\"color: #28a745;\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div style=\"flex: 1; margin-left: 12px;\">\n <kendo-dropdownlist\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + entity.ID\"\n [data]=\"getEntityOptions()\"\n textField=\"text\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select entity...\"\n style=\"width: 100%;\">\n </kendo-dropdownlist>\n </div>\n }\n </div>\n\n @if (!EditMode && entity.Entity) {\n <div class=\"param-card-body\">\n <div class=\"param-meta\">\n <span class=\"meta-item\">\n <i class=\"fa-solid fa-database\"></i> Data Source\n </span>\n </div>\n </div>\n }\n\n @if (EditMode) {\n <div class=\"param-card-actions\">\n <button type=\"button\" class=\"action-btn danger\" (click)=\"deleteEntity(entity)\" title=\"Delete entity\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Details Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"detailsPanelExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-info-circle\" style=\"color: #6c757d;\"></i>\n Query Details\n </span>\n </ng-template>\n\n <div style=\"padding: 20px;\">\n <div class=\"details-grid\">\n <!-- Uses Template -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-file-code\"></i> Template Usage\n </label>\n @if (EditMode) {\n <kendo-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></kendo-switch>\n } @else {\n <div class=\"detail-value\">\n @if (record.UsesTemplate) {\n <span style=\"color: #28a745;\"><i class=\"fa-solid fa-check\"></i> Uses Templates</span>\n } @else {\n <span style=\"color: #6c757d;\"><i class=\"fa-solid fa-times\"></i> No Templates</span>\n }\n </div>\n }\n </div>\n\n <!-- Created Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-plus\"></i> Created\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_CreatedAt) }}</div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-check\"></i> Last Updated\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_UpdatedAt) }}</div>\n </div>\n\n <!-- Quality Rank -->\n @if (record.QualityRank != null) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-star\"></i> Quality Rank\n </label>\n <div class=\"detail-value\">{{ record.QualityRank }}/10</div>\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"permissionsPanelExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-shield-alt\" style=\"color: #6c757d;\"></i>\n Query Permissions\n </span>\n </ng-template>\n\n <div style=\"padding: 16px 0;\">\n @if (isLoadingPermissions) {\n <div style=\"display: flex; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 2em; color: #007bff;\"></i>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt\" style=\"font-size: 3em; color: #dee2e6; margin-bottom: 12px;\"></i>\n <h5 style=\"color: #6c757d; margin-bottom: 8px;\">No Permissions Set</h5>\n <div style=\"color: #adb5bd;\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <!-- Edit Mode: Use the standard grid -->\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <!-- Read Mode: Nice card-based display -->\n <div class=\"permissions-display\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\" style=\"background: #f8f9fa; border: 1px solid #dee2e6; border-radius: 8px; padding: 16px; margin-bottom: 12px;\">\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <i class=\"fa-solid fa-users\" style=\"font-size: 1.5em; color: #6c757d;\"></i>\n <div style=\"flex: 1;\">\n <div style=\"font-weight: 600; color: #495057;\">\n {{ permission.Role }}\n </div>\n <div style=\"font-size: 0.85em; color: #6c757d;\">\n Role Permission\n </div>\n </div>\n <div style=\"display: flex; gap: 8px;\">\n <span class=\"permission-badge\" style=\"background: #6f42c1; color: white; padding: 4px 8px; border-radius: 4px; font-size: 0.8em;\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n </div>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </form>\n\n <!-- Query Run Dialog -->\n <mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n </mj-query-run-dialog>\n\n <!-- Category Creation Dialog -->\n <mj-query-category-dialog\n [(isVisible)]=\"showCategoryDialog\"\n (onCategoryCreated)=\"onCategoryCreated($event)\">\n </mj-query-category-dialog>\n }\n</div>", styles: [".k-pane {\n background-color: #F5F6FA;\n}\n\n.content-margin {\n margin: 10px;\n} \n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n/* .record-form .record-form-row:nth-child(odd) {\n background-color: #f2f2f2; \n} */\n\n/* \n.record-form .record-form-row:nth-child(even) {\n background-color: #ffffff; \n} */\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header .collapse-icon {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity .collapsible-header {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity .collapsible-title i {\n color: #3b82f6;\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls .section-search::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: #9ca3af;\n}\n", "/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n/* Override the shared record-form min-height so flex layout works properly */\n.record-form {\n min-height: 0 !important;\n}\n\n.sql-editor-container {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.filters-help .filter-card {\n transition: transform 0.2s ease;\n}\n\n.filters-help .filter-card:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 8px rgba(0,0,0,0.1);\n}\n\n.toolbar-actions {\n margin-left: auto;\n}\n\n.query-header {\n border-bottom: 2px solid #dee2e6;\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Modern Expansion Panel Styling */\n::ng-deep .query-content kendo-expansionpanel {\n border: none !important;\n border-radius: 12px !important;\n margin-bottom: 16px !important;\n box-shadow: 0 2px 8px rgba(0,0,0,0.06) !important;\n background: white !important;\n overflow: hidden !important;\n}\n\n::ng-deep .query-content .k-expander-header {\n background: white !important;\n border: none !important;\n padding: 16px 20px !important;\n border-radius: 12px !important;\n color: #2c3e50 !important;\n font-weight: 600 !important;\n font-size: 16px !important;\n transition: all 0.2s ease !important;\n}\n\n::ng-deep .query-content .k-expander-header:hover {\n background: #f8f9fa !important;\n}\n\n/* Expanded state header */\n::ng-deep .query-content kendo-expansionpanel[aria-expanded=\"true\"] .k-expander-header {\n background: #2196f3 !important;\n color: white !important;\n border-radius: 12px 12px 0 0 !important;\n}\n\n/* Content area */\n::ng-deep .query-content .k-expander-content {\n padding: 0 !important;\n border: none !important;\n background: white !important;\n border-radius: 0 0 12px 12px !important;\n}\n\n/* Icon in header */\n::ng-deep .query-content .k-expander-header .fa-solid {\n transition: transform 0.2s ease !important;\n}\n\n::ng-deep .query-content kendo-expansionpanel[aria-expanded=\"true\"] .k-expander-header .fa-chevron-down {\n transform: rotate(180deg) !important;\n}\n\n/* Parameter Cards */\n.parameters-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(350px, 1fr));\n gap: 16px;\n padding: 20px;\n}\n\n.param-card {\n background: white;\n border: 2px solid #e9ecef;\n border-radius: 8px;\n padding: 16px;\n transition: all 0.2s;\n cursor: pointer;\n position: relative;\n}\n\n.param-card:hover {\n border-color: #007bff;\n box-shadow: 0 2px 8px rgba(0,123,255,0.1);\n transform: translateY(-1px);\n}\n\n.param-card.required {\n border-color: #ffc107;\n}\n\n.param-card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 12px;\n}\n\n.param-name {\n font-weight: 600;\n font-size: 1.1em;\n color: #2c3e50;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.param-badges {\n display: flex;\n gap: 6px;\n}\n\n.param-badge {\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 0.75em;\n font-weight: 600;\n color: white;\n}\n\n.param-badge.required {\n background: #ffc107;\n}\n\n.param-badge.array {\n background: #9c27b0;\n}\n\n.param-card-body {\n color: #6c757d;\n font-size: 0.9em;\n}\n\n.param-actions {\n position: absolute;\n top: 12px;\n right: 12px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.2s;\n}\n\n.param-card:hover .param-actions {\n opacity: 1;\n}\n\n.param-action-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n color: #6c757d;\n transition: all 0.2s;\n}\n\n.param-action-btn:hover {\n background: #f8f9fa;\n color: #007bff;\n}\n\n.param-action-btn.delete:hover {\n background: #fff5f5;\n color: #dc3545;\n}\n\n/* Details Section */\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 20px;\n padding: 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label {\n font-size: 0.85em;\n font-weight: 600;\n color: #6c757d;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.detail-value {\n font-size: 1em;\n color: #2c3e50;\n}\n\n/* Category Tree Dropdown */\n.category-selector {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.category-tree-dropdown {\n flex: 1;\n}\n\n.add-category-btn {\n background: #28a745;\n color: white;\n border: none;\n padding: 8px 12px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n\n.add-category-btn:hover {\n background: #218838;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(40,167,69,0.2);\n}\n\n/* Empty State */\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n text-align: center;\n color: #6c757d;\n}\n\n.empty-state-icon {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state-title {\n font-size: 1.2em;\n font-weight: 600;\n margin-bottom: 8px;\n color: #495057;\n}\n\n.empty-state-text {\n font-size: 0.9em;\n margin-bottom: 20px;\n}\n\n.add-param-btn {\n background: #007bff;\n color: white;\n border: none;\n padding: 10px 20px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.add-param-btn:hover {\n background: #0056b3;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(0,123,255,0.2);\n}"] }]
1586
+ args: [{ standalone: false, selector: 'mj-query-form', template: "<div class=\"record-form-container\" style=\"height: 100%; display: flex; flex-direction: column;\">\n @if (record) {\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n <mj-form-toolbar [Form]=\"this\"></mj-form-toolbar>\n\n <!-- Header Section -->\n <div class=\"query-header\">\n <div class=\"query-header-content\">\n <!-- Top Row: Name and Run Button -->\n <div class=\"query-header-top\">\n <!-- Left: Query Name -->\n <div class=\"query-name-section\">\n <i class=\"fa-solid fa-database query-title-icon\"></i>\n @if (EditMode) {\n <kendo-textbox [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\"\n class=\"query-name-input\">\n </kendo-textbox>\n } @else {\n <h4 class=\"query-name-display\">{{ record.Name || 'Untitled Query' }}</h4>\n }\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"query-header-actions\">\n @if (record.ID) {\n <button kendoButton\n [themeColor]=\"'primary'\"\n [size]=\"'large'\"\n [disabled]=\"EditMode || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\"\n class=\"run-query-btn\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n\n <!-- Second Row: Category and Status -->\n <div class=\"query-meta-row\">\n <!-- Category -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Category</label>\n @if (EditMode) {\n <kendo-dropdownlist\n [(ngModel)]=\"record.CategoryID\"\n name=\"categoryId\"\n [data]=\"categoryOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select category...\"\n class=\"meta-dropdown\">\n </kendo-dropdownlist>\n } @else {\n <span class=\"meta-value\">{{ getCategoryPath() || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Status</label>\n @if (EditMode) {\n <kendo-dropdownlist\n [(ngModel)]=\"record.Status\"\n name=\"status\"\n [data]=\"statusOptions\"\n textField=\"text\"\n valueField=\"value\"\n [valuePrimitive]=\"true\"\n class=\"meta-dropdown status-dropdown\">\n </kendo-dropdownlist>\n } @else {\n <span class=\"status-pill\"\n [style.background]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"></i>\n {{ record.Status || 'Unknown' }}\n </span>\n }\n </div>\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div class=\"query-description-row\">\n @if (EditMode) {\n <kendo-textarea [(ngModel)]=\"record.Description\"\n name=\"description\"\n [rows]=\"2\"\n placeholder=\"Enter query description...\"\n class=\"query-description-input\">\n </kendo-textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <div class=\"status-warning-banner\" [style.border-left-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"\n [style.color]=\"getStatusBadgeColor()\"></i>\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </div>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\">\n\n <!-- SQL Query Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title-row\">\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code panel-icon sql-icon\"></i>\n SQL\n @if (record.SQL) {\n <span class=\"panel-badge defined\">\n <i class=\"fa-solid fa-check\"></i> Defined\n </span>\n }\n </span>\n <button type=\"button\"\n kendoButton\n fillMode=\"flat\"\n size=\"small\"\n (click)=\"toggleFiltersHelp(); $event.stopPropagation()\"\n title=\"Show/hide SQL filters help\"\n class=\"filters-help-btn\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <span>Filters Help</span>\n <i class=\"fa-solid\" [ngClass]=\"showFiltersHelp ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n </span>\n </ng-template>\n\n <div class=\"sql-panel-content\">\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n [language]=\"'sql'\"\n class=\"sql-editor\">\n </mj-code-editor>\n\n <!-- SQL Filters Help (Below Editor) -->\n @if (showFiltersHelp) {\n <div class=\"filters-help\">\n <h6 class=\"filters-help-title\">\n <i class=\"fa-solid fa-filter\"></i> Available SQL Filters for Parameterized Queries\n </h6>\n <div class=\"filters-grid\">\n @for (filter of sqlFilters; track filter.name) {\n <div class=\"filter-card\">\n <div class=\"filter-name\">{{ filter.name }}</div>\n <div class=\"filter-description\">{{ filter.description }}</div>\n <div class=\"filter-syntax\">{{ filter.exampleSyntax }}</div>\n @if (filter.notes) {\n <div class=\"filter-notes\">{{ filter.notes }}</div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </kendo-expansionpanel>\n\n <!-- Parameters Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n Query Parameters\n @if (queryParameters.length > 0) {\n <span class=\"panel-badge count\">{{ queryParameters.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingParameters) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading parameters...\"></mj-loading>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Parameters Defined</div>\n <div class=\"empty-state-text\">\n Add parameters to make your query dynamic and reusable.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"item-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-at item-name-icon param-icon\"></i>\n {{ param.Name }}\n </div>\n <div class=\"item-badges\">\n @if (param.IsRequired) {\n <span class=\"item-badge required\">Required</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (param.Description) {\n <div class=\"item-description\">{{ param.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </span>\n @if (param.DefaultValue) {\n <span class=\"meta-tag\">\n <strong>Default:</strong>\n <code class=\"meta-code\">{{ param.DefaultValue }}</code>\n </span>\n }\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"item-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n Query Fields\n @if (queryFields.length > 0) {\n <span class=\"panel-badge count\">{{ queryFields.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingFields) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading fields...\"></mj-loading>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-table empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Fields Defined</div>\n <div class=\"empty-state-text\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-columns item-name-icon field-icon\"></i>\n {{ field.Name }}\n </div>\n <div class=\"item-badges\">\n <span class=\"item-badge type\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"item-badge sequence\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (field.Description) {\n <div class=\"item-description\">{{ field.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n Query Entities\n @if (queryEntities.length > 0) {\n <span class=\"panel-badge count\">{{ queryEntities.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingEntities) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading entities...\"></mj-loading>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-database empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Entities Tracked</div>\n <div class=\"empty-state-text\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <kendo-dropdownlist\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + entity.ID\"\n [data]=\"getEntityOptions()\"\n textField=\"text\"\n valueField=\"id\"\n [valuePrimitive]=\"true\"\n placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </kendo-dropdownlist>\n </div>\n }\n </div>\n @if (!EditMode && entity.Entity) {\n <div class=\"item-card-body\">\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-database\"></i> Data Source\n </span>\n </div>\n </div>\n }\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteEntity(entity)\" title=\"Delete entity\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n\n <!-- Details Panel -->\n <kendo-expansionpanel\n [(expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Query Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\n <!-- Uses Template -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-file-code\"></i> Template Usage\n </label>\n @if (EditMode) {\n <kendo-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></kendo-switch>\n } @else {\n <div class=\"detail-value\">\n @if (record.UsesTemplate) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Uses Templates</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> No Templates</span>\n }\n </div>\n }\n </div>\n\n <!-- Created Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-plus\"></i> Created\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_CreatedAt) }}</div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-check\"></i> Last Updated\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_UpdatedAt) }}</div>\n </div>\n\n <!-- Quality Rank -->\n @if (record.QualityRank != null) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-star\"></i> Quality Rank\n </label>\n <div class=\"detail-value\">{{ record.QualityRank }}/10</div>\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <kendo-expansionpanel\n [(expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n Query Permissions\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingPermissions) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Permissions Set</div>\n <div class=\"empty-state-text\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </kendo-expansionpanel>\n }\n </div>\n </form>\n\n <!-- Query Run Dialog -->\n <mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n </mj-query-run-dialog>\n\n <!-- Category Creation Dialog -->\n <mj-query-category-dialog\n [(isVisible)]=\"showCategoryDialog\"\n (onCategoryCreated)=\"onCategoryCreated($event)\">\n </mj-query-category-dialog>\n }\n</div>\n", styles: [".k-pane {\n background-color: #F5F6FA;\n}\n\n.content-margin {\n margin: 10px;\n} \n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n/* .record-form .record-form-row:nth-child(odd) {\n background-color: #f2f2f2; \n} */\n\n/* \n.record-form .record-form-row:nth-child(even) {\n background-color: #ffffff; \n} */\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header .collapse-icon {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity .collapsible-header {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity .collapsible-title i {\n color: #3b82f6;\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls .section-search::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: #9ca3af;\n}\n", "/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n/* Override the shared record-form min-height so flex layout works properly */\n.record-form {\n min-height: 0 !important;\n}\n\n/* ========================================\n Header Section \u2014 matches Query Browser gradient\n ======================================== */\n\n.query-header {\n flex-shrink: 0;\n background: linear-gradient(135deg, #5c6bc0 0%, #3949ab 100%);\n border-bottom: none;\n padding: 0;\n}\n\n.query-header-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 20px;\n}\n\n.query-header-top {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.query-name-section {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-title-icon {\n color: rgba(255, 255, 255, 0.85);\n font-size: 1.3em;\n flex-shrink: 0;\n}\n\n.query-name-input {\n font-size: 1.2em;\n font-weight: 600;\n min-width: 300px;\n flex: 1;\n}\n\n.query-name-display {\n margin: 0;\n color: #fff;\n font-weight: 600;\n font-size: 1.2em;\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.query-header-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.run-query-btn {\n white-space: nowrap;\n}\n\n/* Meta row (category + status) */\n.query-meta-row {\n display: flex;\n gap: 24px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.query-meta-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.meta-label {\n font-weight: 500;\n color: rgba(255, 255, 255, 0.75);\n font-size: 13px;\n min-width: 60px;\n}\n\n.meta-value {\n color: rgba(255, 255, 255, 0.95);\n font-size: 14px;\n}\n\n.meta-dropdown {\n min-width: 200px;\n}\n\n.status-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: 14px;\n color: #fff;\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill i {\n font-size: 12px;\n}\n\n/* Description row */\n.query-description-row {\n margin-top: 2px;\n}\n\n.query-description-input {\n width: 100%;\n}\n\n.query-description-text {\n margin: 0;\n color: rgba(255, 255, 255, 0.8);\n font-size: 13px;\n line-height: 1.4;\n}\n\n/* ========================================\n Status Warning Banner\n ======================================== */\n\n.status-warning-banner {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n margin: 0;\n background: #fff8e1;\n border-left: 4px solid #f59e0b;\n font-size: 13px;\n color: #5d4037;\n flex-shrink: 0;\n}\n\n.status-warning-banner i {\n font-size: 16px;\n flex-shrink: 0;\n}\n\n.status-warning-banner strong {\n font-weight: 600;\n}\n\n/* ========================================\n Main Content Area\n ======================================== */\n\n.query-content {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: #f5f5f5;\n}\n\n/* ========================================\n Expansion Panel Overrides \u2014 Modern Style\n ======================================== */\n\n.query-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .query-content kendo-expansionpanel {\n border: none !important;\n border-radius: 8px !important;\n margin-bottom: 12px !important;\n box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08) !important;\n background: white !important;\n overflow: hidden !important;\n}\n\n::ng-deep .query-content .k-expander-header {\n background: white !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: 8px !important;\n color: #333 !important;\n font-weight: 600 !important;\n font-size: 14px !important;\n transition: background 0.15s ease !important;\n}\n\n::ng-deep .query-content .k-expander-header:hover {\n background: #f8f9fa !important;\n}\n\n::ng-deep .query-content kendo-expansionpanel[aria-expanded=\"true\"] .k-expander-header {\n background: #5c6bc0 !important;\n color: white !important;\n border-radius: 8px 8px 0 0 !important;\n}\n\n::ng-deep .query-content .k-expander-content {\n padding: 0 !important;\n border: none !important;\n background: white !important;\n border-radius: 0 0 8px 8px !important;\n}\n\n/* ========================================\n Panel Title & Badges\n ======================================== */\n\n.panel-title-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-icon {\n font-size: 14px;\n opacity: 0.7;\n}\n\n.sql-icon {\n color: #5c6bc0;\n}\n\n::ng-deep kendo-expansionpanel[aria-expanded=\"true\"] .panel-icon {\n color: rgba(255, 255, 255, 0.85) !important;\n opacity: 1;\n}\n\n.panel-badge {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n}\n\n.panel-badge.defined {\n background: #28a745;\n color: white;\n}\n\n.panel-badge.count {\n background: #5c6bc0;\n color: white;\n}\n\n::ng-deep kendo-expansionpanel[aria-expanded=\"true\"] .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n::ng-deep kendo-expansionpanel[aria-expanded=\"true\"] .panel-badge.defined {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n.filters-help-btn {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 8px;\n font-size: 12px;\n}\n\n/* ========================================\n Panel Body & Loading\n ======================================== */\n\n.panel-body {\n padding: 16px 0;\n}\n\n.panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n/* ========================================\n SQL Panel\n ======================================== */\n\n.sql-panel-content {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor {\n flex: 1;\n height: 400px;\n border: 1px solid #e0e0e0;\n border-radius: 4px;\n margin: 16px;\n}\n\n/* Filters Help */\n.filters-help {\n background: #fafafa;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title {\n margin: 0 0 12px 0;\n color: #333;\n font-weight: 600;\n font-size: 14px;\n}\n\n.filters-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 10px;\n}\n\n.filter-card {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n padding: 12px;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.filter-card:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n}\n\n.filter-name {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: #5c6bc0;\n margin-bottom: 4px;\n}\n\n.filter-description {\n font-size: 12px;\n color: #555;\n margin-bottom: 6px;\n}\n\n.filter-syntax {\n font-family: 'Courier New', monospace;\n font-size: 11px;\n background: #f5f5f5;\n padding: 6px;\n border-radius: 4px;\n margin-bottom: 4px;\n}\n\n.filter-notes {\n font-size: 11px;\n color: #888;\n font-style: italic;\n}\n\n/* ========================================\n Card Grid (Parameters, Fields, Entities)\n ======================================== */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 12px;\n padding: 0 20px 20px;\n}\n\n.item-card {\n background: white;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card:hover {\n border-color: #5c6bc0;\n box-shadow: 0 2px 8px rgba(92, 107, 192, 0.12);\n}\n\n.item-card.required {\n border-left: 3px solid #f59e0b;\n}\n\n.item-card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 10px;\n}\n\n.item-name {\n font-weight: 600;\n font-size: 14px;\n color: #333;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon {\n font-size: 14px;\n}\n\n.item-name-icon.param-icon {\n color: #5c6bc0;\n}\n\n.item-name-icon.field-icon {\n color: #5c6bc0;\n}\n\n.item-name-icon.entity-icon {\n color: #28a745;\n}\n\n.item-badges {\n display: flex;\n gap: 6px;\n}\n\n.item-badge {\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n color: white;\n}\n\n.item-badge.required {\n background: #f59e0b;\n}\n\n.item-badge.type {\n background: #e8eaf6;\n color: #3949ab;\n}\n\n.item-badge.sequence {\n background: #f3e5f5;\n color: #7b1fa2;\n}\n\n.item-card-body {\n color: #666;\n font-size: 13px;\n}\n\n.item-description {\n margin-bottom: 8px;\n}\n\n.item-meta {\n display: flex;\n gap: 16px;\n font-size: 12px;\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code {\n background: #f5f5f5;\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 11px;\n}\n\n/* Card actions (edit/delete) */\n.item-actions {\n position: absolute;\n top: 10px;\n right: 10px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.item-card:hover .item-actions {\n opacity: 1;\n}\n\n.item-card-actions {\n display: flex;\n justify-content: flex-end;\n margin-top: 8px;\n}\n\n.item-action-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n color: #888;\n transition: all 0.15s ease;\n}\n\n.item-action-btn:hover {\n background: #f0f0f0;\n color: #5c6bc0;\n}\n\n.item-action-btn.delete:hover {\n background: #fff5f5;\n color: #dc3545;\n}\n\n/* Entity dropdown in card */\n.entity-dropdown-wrapper {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown {\n width: 100%;\n}\n\n/* ========================================\n Details Grid\n ======================================== */\n\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label {\n font-size: 12px;\n font-weight: 600;\n color: #888;\n display: flex;\n align-items: center;\n gap: 6px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: 14px;\n color: #333;\n}\n\n.detail-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 13px;\n}\n\n.detail-tag.positive {\n color: #28a745;\n}\n\n.detail-tag.neutral {\n color: #888;\n}\n\n/* ========================================\n Permissions\n ======================================== */\n\n.permissions-list {\n padding: 0 20px;\n}\n\n.permission-card {\n display: flex;\n align-items: center;\n gap: 14px;\n background: #fafafa;\n border: 1px solid #e0e0e0;\n border-radius: 8px;\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon {\n font-size: 1.3em;\n color: #5c6bc0;\n}\n\n.permission-info {\n flex: 1;\n}\n\n.permission-role {\n font-weight: 600;\n color: #333;\n font-size: 14px;\n}\n\n.permission-type {\n font-size: 12px;\n color: #888;\n}\n\n.permission-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: #5c6bc0;\n color: white;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* ========================================\n Empty State\n ======================================== */\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n text-align: center;\n color: #888;\n}\n\n.empty-state-icon {\n font-size: 40px;\n margin-bottom: 14px;\n opacity: 0.25;\n color: #333;\n}\n\n.empty-state-title {\n font-size: 15px;\n font-weight: 600;\n margin-bottom: 6px;\n color: #555;\n}\n\n.empty-state-text {\n font-size: 13px;\n margin-bottom: 16px;\n color: #888;\n}\n\n/* ========================================\n Buttons\n ======================================== */\n\n.add-item-btn {\n background: #5c6bc0;\n color: white;\n border: none;\n padding: 8px 16px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n font-size: 13px;\n}\n\n.add-item-btn:hover {\n background: #3949ab;\n box-shadow: 0 2px 6px rgba(92, 107, 192, 0.3);\n}\n\n/* ========================================\n Badge (reused across components)\n ======================================== */\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n"] }]
1549
1587
  }], null, { sqlEditor: [{
1550
1588
  type: ViewChild,
1551
1589
  args: ['sqlEditor']