@memberjunction/ng-core-entity-forms 6.2.1 → 6.3.0-edge.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 (204) hide show
  1. package/README.md +5 -6
  2. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
  4. package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
  6. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
  7. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
  8. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  15. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
  16. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
  17. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
  18. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
  19. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
  20. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
  21. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
  22. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  23. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
  24. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  25. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
  26. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
  27. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
  29. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  30. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
  31. package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
  32. package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
  33. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
  35. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  36. package/dist/lib/custom/Actions/action-form.component.js +502 -453
  37. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  38. package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
  39. package/dist/lib/custom/Companies/company-header.panel.js +3 -3
  40. package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
  41. package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
  42. package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
  43. package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
  44. package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
  45. package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
  46. package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
  47. package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
  48. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  49. package/dist/lib/custom/Entities/entity-form.component.js +836 -801
  50. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  51. package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
  52. package/dist/lib/custom/Files/file-form.component.js +2 -2
  53. package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
  54. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  55. package/dist/lib/custom/Lists/list-form.component.js +355 -338
  56. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  57. package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
  58. package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
  59. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
  60. package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
  61. package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
  62. package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
  63. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
  64. package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
  65. package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
  66. package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
  67. package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
  68. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  69. package/dist/lib/custom/Queries/query-form.component.js +493 -444
  70. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
  72. package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
  73. package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
  74. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  75. package/dist/lib/custom/Templates/templates-form.component.js +118 -74
  76. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  77. package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
  78. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Tests/test-form.component.js +471 -451
  80. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  81. package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
  82. package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
  83. package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
  84. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
  86. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  87. package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
  88. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
  90. package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
  94. package/dist/lib/custom/Users/user-header.panel.js +3 -3
  95. package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
  97. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
  99. package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  104. package/dist/lib/custom/custom-forms.module.d.ts +1 -1
  105. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.js +7 -1
  107. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  108. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  109. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
  110. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  111. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  112. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
  113. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
  115. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
  116. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
  117. package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
  118. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
  119. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
  120. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
  121. package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
  122. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
  123. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  124. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
  125. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
  126. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
  127. package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
  128. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
  129. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
  130. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
  131. package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
  132. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  133. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
  134. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  135. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
  136. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
  137. package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
  140. package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
  142. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
  143. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
  144. package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
  145. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
  146. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
  147. package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
  149. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
  150. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
  151. package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
  152. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  153. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
  154. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  155. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  156. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
  157. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  158. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
  159. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
  160. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
  161. package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
  162. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
  163. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
  164. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
  165. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
  166. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
  167. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
  168. package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
  169. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
  170. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
  171. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
  172. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
  173. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
  174. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
  175. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
  176. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
  177. package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
  178. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
  179. package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
  180. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  181. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
  182. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  183. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
  184. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
  185. package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
  186. package/dist/lib/generated/generated-forms.module.d.ts +452 -443
  187. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  188. package/dist/lib/generated/generated-forms.module.js +27 -0
  189. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  190. package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
  191. package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
  192. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
  193. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
  194. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
  195. package/dist/lib/shared/components/template-editor.component.js +2 -2
  196. package/dist/lib/shared/phone-hero.d.ts +17 -0
  197. package/dist/lib/shared/phone-hero.d.ts.map +1 -0
  198. package/dist/lib/shared/phone-hero.js +30 -0
  199. package/dist/lib/shared/phone-hero.js.map +1 -0
  200. package/dist/lib/shared/phone-sections-state.d.ts +28 -0
  201. package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
  202. package/dist/lib/shared/phone-sections-state.js +38 -0
  203. package/dist/lib/shared/phone-sections-state.js.map +1 -0
  204. package/package.json +50 -50
@@ -15,6 +15,8 @@ import { EditorMarkersFor, ExtractionSeverityOf, HideUnreadableFieldRows, SaveRe
15
15
  import { NavigationService } from '@memberjunction/ng-shared';
16
16
  import { MJConfirmService } from '@memberjunction/ng-ui-components';
17
17
  import { Subject } from 'rxjs';
18
+ import { JoinHeroSummary } from '../../shared/phone-hero';
19
+ import { PhoneSectionsState } from '../../shared/phone-sections-state';
18
20
  import * as i0 from "@angular/core";
19
21
  import * as i1 from "@angular/common";
20
22
  import * as i2 from "@angular/forms";
@@ -34,14 +36,14 @@ const _forTrack1 = ($index, $item) => $item.ID;
34
36
  const _forTrack2 = ($index, $item) => $item.ID || $index;
35
37
  function MJQueryFormComponentExtended_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
36
38
  i0.ɵɵelementStart(0, "div", 4);
37
- i0.ɵɵelement(1, "i", 50);
39
+ i0.ɵɵelement(1, "i", 58);
38
40
  i0.ɵɵelementStart(2, "span");
39
41
  i0.ɵɵtext(3, "Saving...");
40
42
  i0.ɵɵelementEnd()();
41
43
  } }
42
44
  function MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
43
45
  const _r3 = i0.ɵɵgetCurrentView();
44
- i0.ɵɵelementStart(0, "input", 51);
46
+ i0.ɵɵelementStart(0, "input", 59);
45
47
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
46
48
  i0.ɵɵelementEnd();
47
49
  } if (rf & 2) {
@@ -49,19 +51,26 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template(rf, c
49
51
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
50
52
  } }
51
53
  function MJQueryFormComponentExtended_Conditional_0_Conditional_10_Template(rf, ctx) { if (rf & 1) {
52
- i0.ɵɵelementStart(0, "h4", 11);
54
+ i0.ɵɵelementStart(0, "h4", 60);
53
55
  i0.ɵɵtext(1);
54
56
  i0.ɵɵelementEnd();
57
+ i0.ɵɵelementStart(2, "span", 61);
58
+ i0.ɵɵtext(3);
59
+ i0.ɵɵelementEnd();
55
60
  } if (rf & 2) {
56
61
  const ctx_r1 = i0.ɵɵnextContext(2);
57
62
  i0.ɵɵadvance();
58
63
  i0.ɵɵtextInterpolate(ctx_r1.record.Name || "Untitled Query");
64
+ i0.ɵɵadvance();
65
+ i0.ɵɵstyleProp("background", ctx_r1.getStatusBadgeColor());
66
+ i0.ɵɵadvance();
67
+ i0.ɵɵtextInterpolate(ctx_r1.record.Status || "Unknown");
59
68
  } }
60
69
  function MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
61
70
  const _r4 = i0.ɵɵgetCurrentView();
62
- i0.ɵɵelementStart(0, "button", 52);
71
+ i0.ɵɵelementStart(0, "button", 62);
63
72
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.runQuery()); });
64
- i0.ɵɵelement(1, "i", 53);
73
+ i0.ɵɵelement(1, "i", 63);
65
74
  i0.ɵɵtext(2, " Run ");
66
75
  i0.ɵɵelementEnd();
67
76
  } if (rf & 2) {
@@ -70,21 +79,21 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template(rf,
70
79
  } }
71
80
  function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template(rf, ctx) { if (rf & 1) {
72
81
  const _r6 = i0.ɵɵgetCurrentView();
73
- i0.ɵɵelementStart(0, "button", 58);
82
+ i0.ɵɵelementStart(0, "button", 68);
74
83
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editSelectedCategory()); });
75
- i0.ɵɵelement(1, "i", 59);
84
+ i0.ɵɵelement(1, "i", 69);
76
85
  i0.ɵɵelementEnd();
77
86
  } }
78
87
  function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
79
88
  const _r5 = i0.ɵɵgetCurrentView();
80
- i0.ɵɵelementStart(0, "div", 17)(1, "mj-tree-dropdown", 54);
89
+ i0.ɵɵelementStart(0, "div", 16)(1, "mj-tree-dropdown", 64);
81
90
  i0.ɵɵlistener("ValueChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template_mj_tree_dropdown_ValueChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnCategoryTreeChange($event)); });
82
91
  i0.ɵɵelementEnd();
83
- i0.ɵɵelementStart(2, "button", 55);
92
+ i0.ɵɵelementStart(2, "button", 65);
84
93
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createCategory()); });
85
- i0.ɵɵelement(3, "i", 56);
94
+ i0.ɵɵelement(3, "i", 66);
86
95
  i0.ɵɵelementEnd();
87
- i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template, 2, 0, "button", 57);
96
+ i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template, 2, 0, "button", 67);
88
97
  i0.ɵɵelementEnd();
89
98
  } if (rf & 2) {
90
99
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -94,7 +103,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template(rf,
94
103
  i0.ɵɵconditional(ctx_r1.record.CategoryID ? 4 : -1);
95
104
  } }
96
105
  function MJQueryFormComponentExtended_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
97
- i0.ɵɵelementStart(0, "span", 18);
106
+ i0.ɵɵelementStart(0, "span", 17);
98
107
  i0.ɵɵtext(1);
99
108
  i0.ɵɵelementEnd();
100
109
  } if (rf & 2) {
@@ -104,7 +113,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_18_Template(rf,
104
113
  } }
105
114
  function MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template(rf, ctx) { if (rf & 1) {
106
115
  const _r7 = i0.ɵɵgetCurrentView();
107
- i0.ɵɵelementStart(0, "mj-dropdown", 60);
116
+ i0.ɵɵelementStart(0, "mj-dropdown", 70);
108
117
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
109
118
  i0.ɵɵelementEnd();
110
119
  } if (rf & 2) {
@@ -113,8 +122,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template(rf,
113
122
  i0.ɵɵproperty("Data", ctx_r1.statusOptions)("ValuePrimitive", true);
114
123
  } }
115
124
  function MJQueryFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
116
- i0.ɵɵelementStart(0, "span", 61);
117
- i0.ɵɵelement(1, "i", 62);
125
+ i0.ɵɵelementStart(0, "span", 71);
126
+ i0.ɵɵelement(1, "i", 72);
118
127
  i0.ɵɵtext(2);
119
128
  i0.ɵɵelementEnd();
120
129
  } if (rf & 2) {
@@ -127,20 +136,20 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_23_Template(rf,
127
136
  } }
128
137
  function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template(rf, ctx) { if (rf & 1) {
129
138
  const _r8 = i0.ɵɵgetCurrentView();
130
- i0.ɵɵelementStart(0, "button", 65);
139
+ i0.ɵɵelementStart(0, "button", 75);
131
140
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenRefreshDialog()); });
132
- i0.ɵɵelement(1, "i", 66);
141
+ i0.ɵɵelement(1, "i", 76);
133
142
  i0.ɵɵtext(2, " Refresh metadata ");
134
143
  i0.ɵɵelementEnd();
135
144
  } }
136
145
  function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template(rf, ctx) { if (rf & 1) {
137
- i0.ɵɵelementStart(0, "div", 15)(1, "label", 16);
146
+ i0.ɵɵelementStart(0, "div", 14)(1, "label", 15);
138
147
  i0.ɵɵtext(2, "Metadata");
139
148
  i0.ɵɵelementEnd();
140
- i0.ɵɵelementStart(3, "div", 17)(4, "span", 63);
149
+ i0.ɵɵelementStart(3, "div", 16)(4, "span", 73);
141
150
  i0.ɵɵtext(5);
142
151
  i0.ɵɵelementEnd();
143
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template, 3, 0, "button", 64);
152
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template, 3, 0, "button", 74);
144
153
  i0.ɵɵelementEnd()();
145
154
  } if (rf & 2) {
146
155
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -154,7 +163,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template(rf,
154
163
  } }
155
164
  function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
156
165
  const _r9 = i0.ɵɵgetCurrentView();
157
- i0.ɵɵelementStart(0, "textarea", 69);
166
+ i0.ɵɵelementStart(0, "textarea", 79);
158
167
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
159
168
  i0.ɵɵtext(1, " ");
160
169
  i0.ɵɵelementEnd();
@@ -163,7 +172,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1
163
172
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Description);
164
173
  } }
165
174
  function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelementStart(0, "p", 68);
175
+ i0.ɵɵelementStart(0, "p", 78);
167
176
  i0.ɵɵtext(1);
168
177
  i0.ɵɵelementEnd();
169
178
  } if (rf & 2) {
@@ -173,7 +182,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_2
173
182
  } }
174
183
  function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
175
184
  i0.ɵɵelementStart(0, "div", 21);
176
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template, 2, 1, "textarea", 67)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_2_Template, 2, 1, "p", 68);
185
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template, 2, 1, "textarea", 77)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_2_Template, 2, 1, "p", 78);
177
186
  i0.ɵɵelementEnd();
178
187
  } if (rf & 2) {
179
188
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -181,7 +190,22 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template(rf,
181
190
  i0.ɵɵconditional(ctx_r1.EditMode ? 1 : 2);
182
191
  } }
183
192
  function MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
184
- i0.ɵɵelementStart(0, "mj-alert", 22)(1, "span");
193
+ const _r10 = i0.ɵɵgetCurrentView();
194
+ i0.ɵɵelementStart(0, "button", 80);
195
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleHeroDetails()); });
196
+ i0.ɵɵelementStart(1, "span", 81);
197
+ i0.ɵɵtext(2);
198
+ i0.ɵɵelementEnd();
199
+ i0.ɵɵelement(3, "i", 82);
200
+ i0.ɵɵelementEnd();
201
+ } if (rf & 2) {
202
+ const ctx_r1 = i0.ɵɵnextContext(2);
203
+ i0.ɵɵattribute("aria-expanded", ctx_r1.HeroDetailsOpen);
204
+ i0.ɵɵadvance(2);
205
+ i0.ɵɵtextInterpolate(ctx_r1.HeroSummary);
206
+ } }
207
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
208
+ i0.ɵɵelementStart(0, "mj-alert", 23)(1, "span");
185
209
  i0.ɵɵtext(2, " This query has status ");
186
210
  i0.ɵɵelementStart(3, "strong");
187
211
  i0.ɵɵtext(4);
@@ -195,142 +219,142 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template(rf,
195
219
  i0.ɵɵadvance();
196
220
  i0.ɵɵtextInterpolate1(". ", ctx_r1.getStatusBannerMessage(), " ");
197
221
  } }
198
- function MJQueryFormComponentExtended_Conditional_0_ng_template_29_Conditional_4_Template(rf, ctx) { if (rf & 1) {
199
- i0.ɵɵelementStart(0, "span", 73);
222
+ function MJQueryFormComponentExtended_Conditional_0_ng_template_31_Conditional_4_Template(rf, ctx) { if (rf & 1) {
223
+ i0.ɵɵelementStart(0, "span", 86);
200
224
  i0.ɵɵtext(1, "\u2014 Defined");
201
225
  i0.ɵɵelementEnd();
202
226
  } }
203
- function MJQueryFormComponentExtended_Conditional_0_ng_template_29_Template(rf, ctx) { if (rf & 1) {
204
- i0.ɵɵelementStart(0, "span", 70)(1, "span", 71);
205
- i0.ɵɵelement(2, "i", 72);
227
+ function MJQueryFormComponentExtended_Conditional_0_ng_template_31_Template(rf, ctx) { if (rf & 1) {
228
+ i0.ɵɵelementStart(0, "span", 83)(1, "span", 84);
229
+ i0.ɵɵelement(2, "i", 85);
206
230
  i0.ɵɵtext(3, " SQL ");
207
- i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_ng_template_29_Conditional_4_Template, 2, 0, "span", 73);
231
+ i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_ng_template_31_Conditional_4_Template, 2, 0, "span", 86);
208
232
  i0.ɵɵelementEnd()();
209
233
  } if (rf & 2) {
210
234
  const ctx_r1 = i0.ɵɵnextContext(2);
211
235
  i0.ɵɵadvance(4);
212
236
  i0.ɵɵconditional(ctx_r1.record.SQL ? 4 : -1);
213
237
  } }
214
- function MJQueryFormComponentExtended_Conditional_0_Conditional_37_Template(rf, ctx) { if (rf & 1) {
215
- const _r10 = i0.ɵɵgetCurrentView();
216
- i0.ɵɵelementStart(0, "mj-query-diagnostics", 74);
217
- i0.ɵɵlistener("LocationClick", function MJQueryFormComponentExtended_Conditional_0_Conditional_37_Template_mj_query_diagnostics_LocationClick_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDiagnosticLocationClick($event)); });
238
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template(rf, ctx) { if (rf & 1) {
239
+ const _r11 = i0.ɵɵgetCurrentView();
240
+ i0.ɵɵelementStart(0, "mj-query-diagnostics", 87);
241
+ i0.ɵɵlistener("LocationClick", function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template_mj_query_diagnostics_LocationClick_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDiagnosticLocationClick($event)); });
218
242
  i0.ɵɵelementEnd();
219
243
  } if (rf & 2) {
220
244
  const ctx_r1 = i0.ɵɵnextContext(2);
221
245
  i0.ɵɵproperty("Headline", ctx_r1.SaveDiagnosticsHeadline)("Diagnostics", ctx_r1.SaveDiagnostics)("LocationsClickable", true);
222
246
  } }
223
- function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Template(rf, ctx) { if (rf & 1) {
224
- const _r11 = i0.ɵɵgetCurrentView();
225
- i0.ɵɵelementStart(0, "mj-query-diagnostics", 75);
226
- i0.ɵɵlistener("LocationClick", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Template_mj_query_diagnostics_LocationClick_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDiagnosticLocationClick($event)); });
247
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
248
+ const _r12 = i0.ɵɵgetCurrentView();
249
+ i0.ɵɵelementStart(0, "mj-query-diagnostics", 88);
250
+ i0.ɵɵlistener("LocationClick", function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template_mj_query_diagnostics_LocationClick_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDiagnosticLocationClick($event)); });
227
251
  i0.ɵɵelementEnd();
228
252
  } if (rf & 2) {
229
253
  const ctx_r1 = i0.ɵɵnextContext(2);
230
254
  i0.ɵɵproperty("Headline", "Last metadata extraction: " + ctx_r1.ExtractionStatusLabel)("Diagnostics", ctx_r1.ExtractionDiagnostics)("Severity", ctx_r1.ExtractionSeverity)("LocationsClickable", true);
231
255
  } }
232
- function MJQueryFormComponentExtended_Conditional_0_Conditional_41_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
233
- i0.ɵɵelementStart(0, "div", 83);
256
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
257
+ i0.ɵɵelementStart(0, "div", 96);
234
258
  i0.ɵɵtext(1);
235
259
  i0.ɵɵelementEnd();
236
260
  } if (rf & 2) {
237
- const filter_r12 = i0.ɵɵnextContext().$implicit;
261
+ const filter_r13 = i0.ɵɵnextContext().$implicit;
238
262
  i0.ɵɵadvance();
239
- i0.ɵɵtextInterpolate(filter_r12.notes);
263
+ i0.ɵɵtextInterpolate(filter_r13.notes);
240
264
  } }
241
- function MJQueryFormComponentExtended_Conditional_0_Conditional_41_For_6_Template(rf, ctx) { if (rf & 1) {
242
- i0.ɵɵelementStart(0, "div", 79)(1, "div", 80);
265
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "div", 92)(1, "div", 93);
243
267
  i0.ɵɵtext(2);
244
268
  i0.ɵɵelementEnd();
245
- i0.ɵɵelementStart(3, "div", 81);
269
+ i0.ɵɵelementStart(3, "div", 94);
246
270
  i0.ɵɵtext(4);
247
271
  i0.ɵɵelementEnd();
248
- i0.ɵɵelementStart(5, "div", 82);
272
+ i0.ɵɵelementStart(5, "div", 95);
249
273
  i0.ɵɵtext(6);
250
274
  i0.ɵɵelementEnd();
251
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_41_For_6_Conditional_7_Template, 2, 1, "div", 83);
275
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Conditional_7_Template, 2, 1, "div", 96);
252
276
  i0.ɵɵelementEnd();
253
277
  } if (rf & 2) {
254
- const filter_r12 = ctx.$implicit;
278
+ const filter_r13 = ctx.$implicit;
255
279
  i0.ɵɵadvance(2);
256
- i0.ɵɵtextInterpolate(filter_r12.name);
280
+ i0.ɵɵtextInterpolate(filter_r13.name);
257
281
  i0.ɵɵadvance(2);
258
- i0.ɵɵtextInterpolate(filter_r12.description);
282
+ i0.ɵɵtextInterpolate(filter_r13.description);
259
283
  i0.ɵɵadvance(2);
260
- i0.ɵɵtextInterpolate(filter_r12.exampleSyntax);
284
+ i0.ɵɵtextInterpolate(filter_r13.exampleSyntax);
261
285
  i0.ɵɵadvance();
262
- i0.ɵɵconditional(filter_r12.notes ? 7 : -1);
286
+ i0.ɵɵconditional(filter_r13.notes ? 7 : -1);
263
287
  } }
264
- function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Template(rf, ctx) { if (rf & 1) {
265
- i0.ɵɵelementStart(0, "div", 34)(1, "h6", 76);
266
- i0.ɵɵelement(2, "i", 77);
288
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
289
+ i0.ɵɵelementStart(0, "div", 36)(1, "h6", 89);
290
+ i0.ɵɵelement(2, "i", 90);
267
291
  i0.ɵɵtext(3, " Available SQL Filters for Parameterized Queries ");
268
292
  i0.ɵɵelementEnd();
269
- i0.ɵɵelementStart(4, "div", 78);
270
- i0.ɵɵrepeaterCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_41_For_6_Template, 8, 4, "div", 79, _forTrack0);
293
+ i0.ɵɵelementStart(4, "div", 91);
294
+ i0.ɵɵrepeaterCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Template, 8, 4, "div", 92, _forTrack0);
271
295
  i0.ɵɵelementEnd()();
272
296
  } if (rf & 2) {
273
297
  const ctx_r1 = i0.ɵɵnextContext(2);
274
298
  i0.ɵɵadvance(5);
275
299
  i0.ɵɵrepeater(ctx_r1.sqlFilters);
276
300
  } }
277
- function MJQueryFormComponentExtended_Conditional_0_Conditional_42_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
278
- i0.ɵɵelementStart(0, "span", 73);
301
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
302
+ i0.ɵɵelementStart(0, "span", 86);
279
303
  i0.ɵɵtext(1, "\u2014 Documented");
280
304
  i0.ɵɵelementEnd();
281
305
  } }
282
- function MJQueryFormComponentExtended_Conditional_0_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
283
- i0.ɵɵelementStart(0, "span", 71);
284
- i0.ɵɵelement(1, "i", 85);
306
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Template(rf, ctx) { if (rf & 1) {
307
+ i0.ɵɵelementStart(0, "span", 84);
308
+ i0.ɵɵelement(1, "i", 99);
285
309
  i0.ɵɵtext(2, " Technical Description ");
286
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_42_ng_template_1_Conditional_3_Template, 2, 0, "span", 73);
310
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Conditional_3_Template, 2, 0, "span", 86);
287
311
  i0.ɵɵelementEnd();
288
312
  } if (rf & 2) {
289
313
  const ctx_r1 = i0.ɵɵnextContext(3);
290
314
  i0.ɵɵadvance(3);
291
315
  i0.ɵɵconditional(ctx_r1.record.TechnicalDescription ? 3 : -1);
292
316
  } }
293
- function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
294
- i0.ɵɵelementStart(0, "div", 87)(1, "div", 88);
295
- i0.ɵɵelement(2, "i", 89);
317
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
318
+ i0.ɵɵelementStart(0, "div", 101)(1, "div", 102);
319
+ i0.ɵɵelement(2, "i", 103);
296
320
  i0.ɵɵtext(3, " Preview ");
297
321
  i0.ɵɵelementEnd();
298
- i0.ɵɵelement(4, "mj-markdown", 90);
322
+ i0.ɵɵelement(4, "mj-markdown", 104);
299
323
  i0.ɵɵelementEnd();
300
324
  } if (rf & 2) {
301
325
  const ctx_r1 = i0.ɵɵnextContext(4);
302
326
  i0.ɵɵadvance(4);
303
327
  i0.ɵɵproperty("data", ctx_r1.record.TechnicalDescription || "")("enableMermaid", true)("enableHighlight", true)("enableCollapsibleHeadings", false)("enableSmartypants", true);
304
328
  } }
305
- function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Conditional_3_Template(rf, ctx) { if (rf & 1) {
306
- const _r14 = i0.ɵɵgetCurrentView();
307
- i0.ɵɵelementStart(0, "textarea", 86);
308
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Conditional_3_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TechnicalDescription, $event) || (ctx_r1.record.TechnicalDescription = $event); return i0.ɵɵresetView($event); });
329
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
330
+ const _r15 = i0.ɵɵgetCurrentView();
331
+ i0.ɵɵelementStart(0, "textarea", 100);
332
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TechnicalDescription, $event) || (ctx_r1.record.TechnicalDescription = $event); return i0.ɵɵresetView($event); });
309
333
  i0.ɵɵtext(1, " ");
310
334
  i0.ɵɵelementEnd();
311
- i0.ɵɵconditionalCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_42_Conditional_3_Conditional_2_Template, 5, 5, "div", 87);
335
+ i0.ɵɵconditionalCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Conditional_2_Template, 5, 5, "div", 101);
312
336
  } if (rf & 2) {
313
337
  const ctx_r1 = i0.ɵɵnextContext(3);
314
338
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.TechnicalDescription);
315
339
  i0.ɵɵadvance(2);
316
340
  i0.ɵɵconditional(ctx_r1.record.TechnicalDescription ? 2 : -1);
317
341
  } }
318
- function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Conditional_4_Template(rf, ctx) { if (rf & 1) {
319
- i0.ɵɵelementStart(0, "div", 84);
320
- i0.ɵɵelement(1, "mj-markdown", 90);
342
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
343
+ i0.ɵɵelementStart(0, "div", 98);
344
+ i0.ɵɵelement(1, "mj-markdown", 104);
321
345
  i0.ɵɵelementEnd();
322
346
  } if (rf & 2) {
323
347
  const ctx_r1 = i0.ɵɵnextContext(3);
324
348
  i0.ɵɵadvance();
325
349
  i0.ɵɵproperty("data", ctx_r1.record.TechnicalDescription || "")("enableMermaid", true)("enableHighlight", true)("enableCollapsibleHeadings", false)("enableSmartypants", true);
326
350
  } }
327
- function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
328
- const _r13 = i0.ɵɵgetCurrentView();
329
- i0.ɵɵelementStart(0, "mj-accordion-panel", 24);
330
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.technicalDescriptionPanelExpanded, $event) || (ctx_r1.technicalDescriptionPanelExpanded = $event); return i0.ɵɵresetView($event); });
331
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_42_ng_template_1_Template, 4, 1, "ng-template", 25);
332
- i0.ɵɵelementStart(2, "div", 36);
333
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_42_Conditional_3_Template, 3, 2)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_42_Conditional_4_Template, 2, 5, "div", 84);
351
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template(rf, ctx) { if (rf & 1) {
352
+ const _r14 = i0.ɵɵgetCurrentView();
353
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 97);
354
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.technicalDescriptionPanelExpanded, $event) || (ctx_r1.technicalDescriptionPanelExpanded = $event); return i0.ɵɵresetView($event); });
355
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Template, 4, 1, "ng-template", 27);
356
+ i0.ɵɵelementStart(2, "div", 43);
357
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template, 3, 2)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Template, 2, 5, "div", 98);
334
358
  i0.ɵɵelementEnd()();
335
359
  } if (rf & 2) {
336
360
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -338,8 +362,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template(rf,
338
362
  i0.ɵɵadvance(3);
339
363
  i0.ɵɵconditional(ctx_r1.EditMode ? 3 : 4);
340
364
  } }
341
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
342
- i0.ɵɵelementStart(0, "span", 93);
365
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
366
+ i0.ɵɵelementStart(0, "span", 108);
343
367
  i0.ɵɵtext(1);
344
368
  i0.ɵɵelementEnd();
345
369
  } if (rf & 2) {
@@ -347,44 +371,44 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1
347
371
  i0.ɵɵadvance();
348
372
  i0.ɵɵtextInterpolate(ctx_r1.queryParameters.length);
349
373
  } }
350
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Template(rf, ctx) { if (rf & 1) {
351
- i0.ɵɵelementStart(0, "span", 71);
352
- i0.ɵɵelement(1, "i", 92);
374
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
375
+ i0.ɵɵelementStart(0, "span", 84);
376
+ i0.ɵɵelement(1, "i", 107);
353
377
  i0.ɵɵtext(2, " Parameters ");
354
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Conditional_3_Template, 2, 1, "span", 93);
378
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Conditional_3_Template, 2, 1, "span", 108);
355
379
  i0.ɵɵelementEnd();
356
380
  } if (rf & 2) {
357
381
  const ctx_r1 = i0.ɵɵnextContext(3);
358
382
  i0.ɵɵadvance(3);
359
383
  i0.ɵɵconditional(ctx_r1.queryParameters.length > 0 ? 3 : -1);
360
384
  } }
361
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_3_Template(rf, ctx) { if (rf & 1) {
362
- i0.ɵɵelementStart(0, "div", 91);
363
- i0.ɵɵelement(1, "mj-loading", 94);
385
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_3_Template(rf, ctx) { if (rf & 1) {
386
+ i0.ɵɵelementStart(0, "div", 106);
387
+ i0.ɵɵelement(1, "mj-loading", 109);
364
388
  i0.ɵɵelementEnd();
365
389
  } }
366
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
367
- const _r16 = i0.ɵɵgetCurrentView();
368
- i0.ɵɵelementStart(0, "mj-empty-state", 96);
369
- i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addParameter()); });
390
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
391
+ const _r17 = i0.ɵɵgetCurrentView();
392
+ i0.ɵɵelementStart(0, "mj-empty-state", 111);
393
+ i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addParameter()); });
370
394
  i0.ɵɵelementEnd();
371
395
  } if (rf & 2) {
372
396
  const ctx_r1 = i0.ɵɵnextContext(4);
373
397
  i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Parameter" : "");
374
398
  } }
375
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
376
- const _r18 = i0.ɵɵgetCurrentView();
377
- i0.ɵɵelementStart(0, "div", 97)(1, "button", 99);
378
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addParameter()); });
379
- i0.ɵɵelement(2, "i", 56);
399
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
400
+ const _r19 = i0.ɵɵgetCurrentView();
401
+ i0.ɵɵelementStart(0, "div", 112)(1, "button", 114);
402
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addParameter()); });
403
+ i0.ɵɵelement(2, "i", 66);
380
404
  i0.ɵɵtext(3, " Add Parameter ");
381
405
  i0.ɵɵelementEnd()();
382
406
  } }
383
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
384
- const _r17 = i0.ɵɵgetCurrentView();
385
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 97);
386
- i0.ɵɵelementStart(1, "mj-query-parameters-grid", 98);
387
- i0.ɵɵlistener("Remove", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template_mj_query_parameters_grid_Remove_1_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter($event)); })("Changed", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template_mj_query_parameters_grid_Changed_1_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChildRowChanged()); });
407
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
408
+ const _r18 = i0.ɵɵgetCurrentView();
409
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 112);
410
+ i0.ɵɵelementStart(1, "mj-query-parameters-grid", 113);
411
+ i0.ɵɵlistener("Remove", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template_mj_query_parameters_grid_Remove_1_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter($event)); })("Changed", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template_mj_query_parameters_grid_Changed_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChildRowChanged()); });
388
412
  i0.ɵɵelementEnd();
389
413
  } if (rf & 2) {
390
414
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -392,19 +416,19 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4
392
416
  i0.ɵɵadvance();
393
417
  i0.ɵɵproperty("Parameters", ctx_r1.queryParameters)("EditMode", ctx_r1.EditMode);
394
418
  } }
395
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
396
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 95)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 2, 3);
419
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Template(rf, ctx) { if (rf & 1) {
420
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 110)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template, 2, 3);
397
421
  } if (rf & 2) {
398
422
  const ctx_r1 = i0.ɵɵnextContext(3);
399
423
  i0.ɵɵconditional(ctx_r1.queryParameters.length === 0 ? 0 : 1);
400
424
  } }
401
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
402
- const _r15 = i0.ɵɵgetCurrentView();
403
- i0.ɵɵelementStart(0, "mj-accordion-panel", 24);
404
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.parametersPanelExpanded, $event) || (ctx_r1.parametersPanelExpanded = $event); return i0.ɵɵresetView($event); });
405
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Template, 4, 1, "ng-template", 25);
406
- i0.ɵɵelementStart(2, "div", 36);
407
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_3_Template, 2, 0, "div", 91)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 2, 1);
425
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template(rf, ctx) { if (rf & 1) {
426
+ const _r16 = i0.ɵɵgetCurrentView();
427
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 105);
428
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.parametersPanelExpanded, $event) || (ctx_r1.parametersPanelExpanded = $event); return i0.ɵɵresetView($event); });
429
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template, 4, 1, "ng-template", 27);
430
+ i0.ɵɵelementStart(2, "div", 43);
431
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Template, 2, 1);
408
432
  i0.ɵɵelementEnd()();
409
433
  } if (rf & 2) {
410
434
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -412,8 +436,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template(rf,
412
436
  i0.ɵɵadvance(3);
413
437
  i0.ɵɵconditional(ctx_r1.isLoadingParameters ? 3 : 4);
414
438
  } }
415
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
416
- i0.ɵɵelementStart(0, "span", 93);
439
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
440
+ i0.ɵɵelementStart(0, "span", 108);
417
441
  i0.ɵɵtext(1);
418
442
  i0.ɵɵelementEnd();
419
443
  } if (rf & 2) {
@@ -421,44 +445,44 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1
421
445
  i0.ɵɵadvance();
422
446
  i0.ɵɵtextInterpolate(ctx_r1.queryFields.length);
423
447
  } }
424
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Template(rf, ctx) { if (rf & 1) {
425
- i0.ɵɵelementStart(0, "span", 71);
426
- i0.ɵɵelement(1, "i", 100);
448
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template(rf, ctx) { if (rf & 1) {
449
+ i0.ɵɵelementStart(0, "span", 84);
450
+ i0.ɵɵelement(1, "i", 116);
427
451
  i0.ɵɵtext(2, " Fields ");
428
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Conditional_3_Template, 2, 1, "span", 93);
452
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Conditional_3_Template, 2, 1, "span", 108);
429
453
  i0.ɵɵelementEnd();
430
454
  } if (rf & 2) {
431
455
  const ctx_r1 = i0.ɵɵnextContext(3);
432
456
  i0.ɵɵadvance(3);
433
457
  i0.ɵɵconditional(ctx_r1.queryFields.length > 0 ? 3 : -1);
434
458
  } }
435
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
436
- i0.ɵɵelementStart(0, "div", 91);
437
- i0.ɵɵelement(1, "mj-loading", 101);
459
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_3_Template(rf, ctx) { if (rf & 1) {
460
+ i0.ɵɵelementStart(0, "div", 106);
461
+ i0.ɵɵelement(1, "mj-loading", 117);
438
462
  i0.ɵɵelementEnd();
439
463
  } }
440
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
441
- const _r20 = i0.ɵɵgetCurrentView();
442
- i0.ɵɵelementStart(0, "mj-empty-state", 103);
443
- i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addField()); });
464
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
465
+ const _r21 = i0.ɵɵgetCurrentView();
466
+ i0.ɵɵelementStart(0, "mj-empty-state", 119);
467
+ i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addField()); });
444
468
  i0.ɵɵelementEnd();
445
469
  } if (rf & 2) {
446
470
  const ctx_r1 = i0.ɵɵnextContext(4);
447
471
  i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Field" : "");
448
472
  } }
449
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
450
- const _r22 = i0.ɵɵgetCurrentView();
451
- i0.ɵɵelementStart(0, "div", 97)(1, "button", 99);
452
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addField()); });
453
- i0.ɵɵelement(2, "i", 56);
473
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
474
+ const _r23 = i0.ɵɵgetCurrentView();
475
+ i0.ɵɵelementStart(0, "div", 112)(1, "button", 114);
476
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addField()); });
477
+ i0.ɵɵelement(2, "i", 66);
454
478
  i0.ɵɵtext(3, " Add Field ");
455
479
  i0.ɵɵelementEnd()();
456
480
  } }
457
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
458
- const _r21 = i0.ɵɵgetCurrentView();
459
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 97);
460
- i0.ɵɵelementStart(1, "mj-query-fields-grid", 104);
461
- i0.ɵɵlistener("Remove", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Template_mj_query_fields_grid_Remove_1_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteField($event)); })("OpenSourceField", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Template_mj_query_fields_grid_OpenSourceField_1_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnOpenSourceField($event)); })("Changed", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Template_mj_query_fields_grid_Changed_1_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChildRowChanged()); });
481
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
482
+ const _r22 = i0.ɵɵgetCurrentView();
483
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 112);
484
+ i0.ɵɵelementStart(1, "mj-query-fields-grid", 120);
485
+ i0.ɵɵlistener("Remove", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template_mj_query_fields_grid_Remove_1_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteField($event)); })("OpenSourceField", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template_mj_query_fields_grid_OpenSourceField_1_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnOpenSourceField($event)); })("Changed", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template_mj_query_fields_grid_Changed_1_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChildRowChanged()); });
462
486
  i0.ɵɵelementEnd();
463
487
  } if (rf & 2) {
464
488
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -466,19 +490,19 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4
466
490
  i0.ɵɵadvance();
467
491
  i0.ɵɵproperty("Fields", ctx_r1.queryFields)("EditMode", ctx_r1.EditMode);
468
492
  } }
469
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
470
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 102)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Conditional_1_Template, 2, 3);
493
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Template(rf, ctx) { if (rf & 1) {
494
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 118)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template, 2, 3);
471
495
  } if (rf & 2) {
472
496
  const ctx_r1 = i0.ɵɵnextContext(3);
473
497
  i0.ɵɵconditional(ctx_r1.queryFields.length === 0 ? 0 : 1);
474
498
  } }
475
- function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template(rf, ctx) { if (rf & 1) {
476
- const _r19 = i0.ɵɵgetCurrentView();
477
- i0.ɵɵelementStart(0, "mj-accordion-panel", 24);
478
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.fieldsPanelExpanded, $event) || (ctx_r1.fieldsPanelExpanded = $event); return i0.ɵɵresetView($event); });
479
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Template, 4, 1, "ng-template", 25);
480
- i0.ɵɵelementStart(2, "div", 36);
481
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template, 2, 0, "div", 91)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Template, 2, 1);
499
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template(rf, ctx) { if (rf & 1) {
500
+ const _r20 = i0.ɵɵgetCurrentView();
501
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 115);
502
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.fieldsPanelExpanded, $event) || (ctx_r1.fieldsPanelExpanded = $event); return i0.ɵɵresetView($event); });
503
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template, 4, 1, "ng-template", 27);
504
+ i0.ɵɵelementStart(2, "div", 43);
505
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Template, 2, 1);
482
506
  i0.ɵɵelementEnd()();
483
507
  } if (rf & 2) {
484
508
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -486,11 +510,11 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template(rf,
486
510
  i0.ɵɵadvance(3);
487
511
  i0.ɵɵconditional(ctx_r1.isLoadingFields ? 3 : 4);
488
512
  } }
489
- function MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
490
- i0.ɵɵelementStart(0, "span", 71);
491
- i0.ɵɵelement(1, "i", 108);
513
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template(rf, ctx) { if (rf & 1) {
514
+ i0.ɵɵelementStart(0, "span", 84);
515
+ i0.ɵɵelement(1, "i", 125);
492
516
  i0.ɵɵtext(2, " Dependent Queries ");
493
- i0.ɵɵelementStart(3, "span", 93);
517
+ i0.ɵɵelementStart(3, "span", 108);
494
518
  i0.ɵɵtext(4);
495
519
  i0.ɵɵelementEnd()();
496
520
  } if (rf & 2) {
@@ -498,67 +522,67 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1
498
522
  i0.ɵɵadvance(4);
499
523
  i0.ɵɵtextInterpolate(ctx_r1.DependentQueries.length);
500
524
  } }
501
- function MJQueryFormComponentExtended_Conditional_0_Conditional_45_For_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
502
- i0.ɵɵelementStart(0, "div", 114)(1, "span", 118);
503
- i0.ɵɵelement(2, "i", 119);
525
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
526
+ i0.ɵɵelementStart(0, "div", 131)(1, "span", 135);
527
+ i0.ɵɵelement(2, "i", 136);
504
528
  i0.ɵɵtext(3);
505
529
  i0.ɵɵelementEnd()();
506
530
  } if (rf & 2) {
507
- const dep_r25 = i0.ɵɵnextContext().$implicit;
531
+ const dep_r26 = i0.ɵɵnextContext().$implicit;
508
532
  i0.ɵɵadvance(3);
509
- i0.ɵɵtextInterpolate1(" ", dep_r25.ReferencePath, " ");
533
+ i0.ɵɵtextInterpolate1(" ", dep_r26.ReferencePath, " ");
510
534
  } }
511
- function MJQueryFormComponentExtended_Conditional_0_Conditional_45_For_10_Conditional_7_Template(rf, ctx) { if (rf & 1) {
512
- i0.ɵɵelementStart(0, "div", 114)(1, "span", 118)(2, "strong");
535
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_7_Template(rf, ctx) { if (rf & 1) {
536
+ i0.ɵɵelementStart(0, "div", 131)(1, "span", 135)(2, "strong");
513
537
  i0.ɵɵtext(3, "Alias:");
514
538
  i0.ɵɵelementEnd();
515
- i0.ɵɵelementStart(4, "code", 120);
539
+ i0.ɵɵelementStart(4, "code", 137);
516
540
  i0.ɵɵtext(5);
517
541
  i0.ɵɵelementEnd()()();
518
542
  } if (rf & 2) {
519
- const dep_r25 = i0.ɵɵnextContext().$implicit;
543
+ const dep_r26 = i0.ɵɵnextContext().$implicit;
520
544
  i0.ɵɵadvance(5);
521
- i0.ɵɵtextInterpolate(dep_r25.Alias);
522
- } }
523
- function MJQueryFormComponentExtended_Conditional_0_Conditional_45_For_10_Template(rf, ctx) { if (rf & 1) {
524
- const _r24 = i0.ɵɵgetCurrentView();
525
- i0.ɵɵelementStart(0, "div", 109);
526
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_For_10_Template_div_click_0_listener() { const dep_r25 = i0.ɵɵrestoreView(_r24).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onDependentQueryClick(dep_r25)); });
527
- i0.ɵɵelementStart(1, "div", 110)(2, "div", 111);
528
- i0.ɵɵelement(3, "i", 112);
545
+ i0.ɵɵtextInterpolate(dep_r26.Alias);
546
+ } }
547
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Template(rf, ctx) { if (rf & 1) {
548
+ const _r25 = i0.ɵɵgetCurrentView();
549
+ i0.ɵɵelementStart(0, "div", 126);
550
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Template_div_click_0_listener() { const dep_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onDependentQueryClick(dep_r26)); });
551
+ i0.ɵɵelementStart(1, "div", 127)(2, "div", 128);
552
+ i0.ɵɵelement(3, "i", 129);
529
553
  i0.ɵɵtext(4);
530
554
  i0.ɵɵelementEnd()();
531
- i0.ɵɵelementStart(5, "div", 113);
532
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_45_For_10_Conditional_6_Template, 4, 1, "div", 114);
533
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_45_For_10_Conditional_7_Template, 6, 1, "div", 114);
555
+ i0.ɵɵelementStart(5, "div", 130);
556
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_6_Template, 4, 1, "div", 131);
557
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_7_Template, 6, 1, "div", 131);
534
558
  i0.ɵɵelementEnd();
535
- i0.ɵɵelementStart(8, "div", 115)(9, "span", 116);
536
- i0.ɵɵelement(10, "i", 117);
559
+ i0.ɵɵelementStart(8, "div", 132)(9, "span", 133);
560
+ i0.ɵɵelement(10, "i", 134);
537
561
  i0.ɵɵtext(11, " Open ");
538
562
  i0.ɵɵelementEnd()()();
539
563
  } if (rf & 2) {
540
- const dep_r25 = ctx.$implicit;
564
+ const dep_r26 = ctx.$implicit;
541
565
  i0.ɵɵadvance(4);
542
- i0.ɵɵtextInterpolate1(" ", dep_r25.Query, " ");
566
+ i0.ɵɵtextInterpolate1(" ", dep_r26.Query, " ");
543
567
  i0.ɵɵadvance(2);
544
- i0.ɵɵconditional(dep_r25.ReferencePath ? 6 : -1);
568
+ i0.ɵɵconditional(dep_r26.ReferencePath ? 6 : -1);
545
569
  i0.ɵɵadvance();
546
- i0.ɵɵconditional(dep_r25.Alias ? 7 : -1);
570
+ i0.ɵɵconditional(dep_r26.Alias ? 7 : -1);
547
571
  } }
548
- function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template(rf, ctx) { if (rf & 1) {
549
- const _r23 = i0.ɵɵgetCurrentView();
550
- i0.ɵɵelementStart(0, "mj-accordion-panel", 24);
551
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.dependentsPanelExpanded, $event) || (ctx_r1.dependentsPanelExpanded = $event); return i0.ɵɵresetView($event); });
552
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template, 5, 1, "ng-template", 25);
553
- i0.ɵɵelementStart(2, "div", 36)(3, "div", 105);
572
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_47_Template(rf, ctx) { if (rf & 1) {
573
+ const _r24 = i0.ɵɵgetCurrentView();
574
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 121);
575
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_47_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.dependentsPanelExpanded, $event) || (ctx_r1.dependentsPanelExpanded = $event); return i0.ɵɵresetView($event); });
576
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template, 5, 1, "ng-template", 27);
577
+ i0.ɵɵelementStart(2, "div", 43)(3, "div", 122);
554
578
  i0.ɵɵtext(4, " These queries reference this query via ");
555
579
  i0.ɵɵelementStart(5, "code");
556
580
  i0.ɵɵtext(6);
557
581
  i0.ɵɵelementEnd();
558
582
  i0.ɵɵtext(7, " composition syntax. ");
559
583
  i0.ɵɵelementEnd();
560
- i0.ɵɵelementStart(8, "div", 106);
561
- i0.ɵɵrepeaterCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_45_For_10_Template, 12, 3, "div", 107, _forTrack1);
584
+ i0.ɵɵelementStart(8, "div", 123);
585
+ i0.ɵɵrepeaterCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Template, 12, 3, "div", 124, _forTrack1);
562
586
  i0.ɵɵelementEnd()()();
563
587
  } if (rf & 2) {
564
588
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -568,8 +592,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template(rf,
568
592
  i0.ɵɵadvance(3);
569
593
  i0.ɵɵrepeater(ctx_r1.DependentQueries);
570
594
  } }
571
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
572
- i0.ɵɵelementStart(0, "span", 93);
595
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
596
+ i0.ɵɵelementStart(0, "span", 108);
573
597
  i0.ɵɵtext(1);
574
598
  i0.ɵɵelementEnd();
575
599
  } if (rf & 2) {
@@ -577,109 +601,109 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1
577
601
  i0.ɵɵadvance();
578
602
  i0.ɵɵtextInterpolate(ctx_r1.queryEntities.length);
579
603
  } }
580
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template(rf, ctx) { if (rf & 1) {
581
- i0.ɵɵelementStart(0, "span", 71);
582
- i0.ɵɵelement(1, "i", 121);
604
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Template(rf, ctx) { if (rf & 1) {
605
+ i0.ɵɵelementStart(0, "span", 84);
606
+ i0.ɵɵelement(1, "i", 139);
583
607
  i0.ɵɵtext(2, " Entities ");
584
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Conditional_3_Template, 2, 1, "span", 93);
608
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Conditional_3_Template, 2, 1, "span", 108);
585
609
  i0.ɵɵelementEnd();
586
610
  } if (rf & 2) {
587
611
  const ctx_r1 = i0.ɵɵnextContext(3);
588
612
  i0.ɵɵadvance(3);
589
613
  i0.ɵɵconditional(ctx_r1.queryEntities.length > 0 ? 3 : -1);
590
614
  } }
591
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_3_Template(rf, ctx) { if (rf & 1) {
592
- i0.ɵɵelementStart(0, "div", 91);
593
- i0.ɵɵelement(1, "mj-loading", 122);
615
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_3_Template(rf, ctx) { if (rf & 1) {
616
+ i0.ɵɵelementStart(0, "div", 106);
617
+ i0.ɵɵelement(1, "mj-loading", 140);
594
618
  i0.ɵɵelementEnd();
595
619
  } }
596
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
597
- const _r27 = i0.ɵɵgetCurrentView();
598
- i0.ɵɵelementStart(0, "mj-empty-state", 124);
599
- i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addEntity()); });
620
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
621
+ const _r28 = i0.ɵɵgetCurrentView();
622
+ i0.ɵɵelementStart(0, "mj-empty-state", 142);
623
+ i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addEntity()); });
600
624
  i0.ɵɵelementEnd();
601
625
  } if (rf & 2) {
602
626
  const ctx_r1 = i0.ɵɵnextContext(4);
603
627
  i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Entity" : "");
604
628
  } }
605
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
606
- const _r28 = i0.ɵɵgetCurrentView();
607
- i0.ɵɵelementStart(0, "div", 97)(1, "button", 99);
608
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addEntity()); });
609
- i0.ɵɵelement(2, "i", 56);
629
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
630
+ const _r29 = i0.ɵɵgetCurrentView();
631
+ i0.ɵɵelementStart(0, "div", 112)(1, "button", 114);
632
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addEntity()); });
633
+ i0.ɵɵelement(2, "i", 66);
610
634
  i0.ɵɵtext(3, " Add Entity ");
611
635
  i0.ɵɵelementEnd()();
612
636
  } }
613
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
614
- const _r29 = i0.ɵɵgetCurrentView();
615
- i0.ɵɵelementStart(0, "div", 127)(1, "mj-dropdown", 129);
616
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_5_Template_mj_dropdown_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r29); const entity_r30 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(entity_r30.EntityID, $event) || (entity_r30.EntityID = $event); return i0.ɵɵresetView($event); });
637
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
638
+ const _r30 = i0.ɵɵgetCurrentView();
639
+ i0.ɵɵelementStart(0, "div", 145)(1, "mj-dropdown", 147);
640
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_5_Template_mj_dropdown_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r30); const entity_r31 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(entity_r31.EntityID, $event) || (entity_r31.EntityID = $event); return i0.ɵɵresetView($event); });
617
641
  i0.ɵɵelementEnd()();
618
642
  } if (rf & 2) {
619
- const ctx_r30 = i0.ɵɵnextContext();
620
- const entity_r30 = ctx_r30.$implicit;
621
- const $index_r32 = ctx_r30.$index;
643
+ const ctx_r31 = i0.ɵɵnextContext();
644
+ const entity_r31 = ctx_r31.$implicit;
645
+ const $index_r33 = ctx_r31.$index;
622
646
  const ctx_r1 = i0.ɵɵnextContext(5);
623
647
  i0.ɵɵadvance();
624
- i0.ɵɵtwoWayProperty("ngModel", entity_r30.EntityID);
625
- i0.ɵɵproperty("name", "entity_" + (entity_r30.ID || $index_r32))("Data", ctx_r1.getEntityOptions())("ValuePrimitive", true);
648
+ i0.ɵɵtwoWayProperty("ngModel", entity_r31.EntityID);
649
+ i0.ɵɵproperty("name", "entity_" + (entity_r31.ID || $index_r33))("Data", ctx_r1.getEntityOptions())("ValuePrimitive", true);
626
650
  } }
627
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
628
- i0.ɵɵelementStart(0, "span", 131)(1, "strong");
651
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
652
+ i0.ɵɵelementStart(0, "span", 149)(1, "strong");
629
653
  i0.ɵɵtext(2, "Detected by:");
630
654
  i0.ɵɵelementEnd();
631
655
  i0.ɵɵtext(3);
632
656
  i0.ɵɵelementEnd();
633
657
  } if (rf & 2) {
634
- const entity_r30 = i0.ɵɵnextContext(2).$implicit;
658
+ const entity_r31 = i0.ɵɵnextContext(2).$implicit;
635
659
  i0.ɵɵadvance(3);
636
- i0.ɵɵtextInterpolate1(" ", entity_r30.DetectionMethod, " ");
660
+ i0.ɵɵtextInterpolate1(" ", entity_r31.DetectionMethod, " ");
637
661
  } }
638
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
639
- i0.ɵɵelementStart(0, "div", 113)(1, "div", 114)(2, "span", 118);
640
- i0.ɵɵelement(3, "i", 130);
662
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
663
+ i0.ɵɵelementStart(0, "div", 130)(1, "div", 131)(2, "span", 135);
664
+ i0.ɵɵelement(3, "i", 148);
641
665
  i0.ɵɵtext(4, " Data Source ");
642
666
  i0.ɵɵelementEnd();
643
- i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_6_Conditional_5_Template, 4, 1, "span", 131);
667
+ i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Conditional_5_Template, 4, 1, "span", 149);
644
668
  i0.ɵɵelementEnd()();
645
669
  } if (rf & 2) {
646
- const entity_r30 = i0.ɵɵnextContext().$implicit;
670
+ const entity_r31 = i0.ɵɵnextContext().$implicit;
647
671
  i0.ɵɵadvance(5);
648
- i0.ɵɵconditional(entity_r30.DetectionMethod ? 5 : -1);
672
+ i0.ɵɵconditional(entity_r31.DetectionMethod ? 5 : -1);
649
673
  } }
650
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
651
- const _r33 = i0.ɵɵgetCurrentView();
652
- i0.ɵɵelementStart(0, "div", 128)(1, "button", 132);
653
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r33); const entity_r30 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.deleteEntity(entity_r30)); });
654
- i0.ɵɵelement(2, "i", 133);
674
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
675
+ const _r34 = i0.ɵɵgetCurrentView();
676
+ i0.ɵɵelementStart(0, "div", 146)(1, "button", 150);
677
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r34); const entity_r31 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.deleteEntity(entity_r31)); });
678
+ i0.ɵɵelement(2, "i", 151);
655
679
  i0.ɵɵelementEnd()();
656
680
  } }
657
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
658
- i0.ɵɵelementStart(0, "div", 125)(1, "div", 110)(2, "div", 111);
659
- i0.ɵɵelement(3, "i", 126);
681
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
682
+ i0.ɵɵelementStart(0, "div", 143)(1, "div", 127)(2, "div", 128);
683
+ i0.ɵɵelement(3, "i", 144);
660
684
  i0.ɵɵtext(4);
661
685
  i0.ɵɵelementEnd();
662
- i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_5_Template, 2, 4, "div", 127);
686
+ i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_5_Template, 2, 4, "div", 145);
663
687
  i0.ɵɵelementEnd();
664
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 6, 1, "div", 113);
665
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Conditional_7_Template, 3, 0, "div", 128);
688
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 6, 1, "div", 130);
689
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_7_Template, 3, 0, "div", 146);
666
690
  i0.ɵɵelementEnd();
667
691
  } if (rf & 2) {
668
- const entity_r30 = ctx.$implicit;
692
+ const entity_r31 = ctx.$implicit;
669
693
  const ctx_r1 = i0.ɵɵnextContext(5);
670
694
  i0.ɵɵadvance(4);
671
- i0.ɵɵtextInterpolate1(" ", entity_r30.Entity || "Select Entity...", " ");
695
+ i0.ɵɵtextInterpolate1(" ", entity_r31.Entity || "Select Entity...", " ");
672
696
  i0.ɵɵadvance();
673
697
  i0.ɵɵconditional(ctx_r1.EditMode ? 5 : -1);
674
698
  i0.ɵɵadvance();
675
- i0.ɵɵconditional(!ctx_r1.EditMode && entity_r30.Entity ? 6 : -1);
699
+ i0.ɵɵconditional(!ctx_r1.EditMode && entity_r31.Entity ? 6 : -1);
676
700
  i0.ɵɵadvance();
677
701
  i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
678
702
  } }
679
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
680
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 97);
681
- i0.ɵɵelementStart(1, "div", 106);
682
- i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_For_3_Template, 8, 4, "div", 125, _forTrack2);
703
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
704
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 112);
705
+ i0.ɵɵelementStart(1, "div", 123);
706
+ i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Template, 8, 4, "div", 143, _forTrack2);
683
707
  i0.ɵɵelementEnd();
684
708
  } if (rf & 2) {
685
709
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -687,19 +711,19 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4
687
711
  i0.ɵɵadvance(2);
688
712
  i0.ɵɵrepeater(ctx_r1.queryEntities);
689
713
  } }
690
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Template(rf, ctx) { if (rf & 1) {
691
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 123)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template, 4, 1);
714
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Template(rf, ctx) { if (rf & 1) {
715
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 141)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Template, 4, 1);
692
716
  } if (rf & 2) {
693
717
  const ctx_r1 = i0.ɵɵnextContext(3);
694
718
  i0.ɵɵconditional(ctx_r1.queryEntities.length === 0 ? 0 : 1);
695
719
  } }
696
- function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template(rf, ctx) { if (rf & 1) {
697
- const _r26 = i0.ɵɵgetCurrentView();
698
- i0.ɵɵelementStart(0, "mj-accordion-panel", 24);
699
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r26); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.entitiesPanelExpanded, $event) || (ctx_r1.entitiesPanelExpanded = $event); return i0.ɵɵresetView($event); });
700
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template, 4, 1, "ng-template", 25);
701
- i0.ɵɵelementStart(2, "div", 36);
702
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_3_Template, 2, 0, "div", 91)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Template, 2, 1);
720
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Template(rf, ctx) { if (rf & 1) {
721
+ const _r27 = i0.ɵɵgetCurrentView();
722
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 138);
723
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.entitiesPanelExpanded, $event) || (ctx_r1.entitiesPanelExpanded = $event); return i0.ɵɵresetView($event); });
724
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Template, 4, 1, "ng-template", 27);
725
+ i0.ɵɵelementStart(2, "div", 43);
726
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Template, 2, 1);
703
727
  i0.ɵɵelementEnd()();
704
728
  } if (rf & 2) {
705
729
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -707,92 +731,92 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template(rf,
707
731
  i0.ɵɵadvance(3);
708
732
  i0.ɵɵconditional(ctx_r1.isLoadingEntities ? 3 : 4);
709
733
  } }
710
- function MJQueryFormComponentExtended_Conditional_0_ng_template_48_Template(rf, ctx) { if (rf & 1) {
711
- i0.ɵɵelementStart(0, "span", 71);
712
- i0.ɵɵelement(1, "i", 134);
734
+ function MJQueryFormComponentExtended_Conditional_0_ng_template_50_Template(rf, ctx) { if (rf & 1) {
735
+ i0.ɵɵelementStart(0, "span", 84);
736
+ i0.ɵɵelement(1, "i", 152);
713
737
  i0.ɵɵtext(2, " Details ");
714
738
  i0.ɵɵelementEnd();
715
739
  } }
716
- function MJQueryFormComponentExtended_Conditional_0_Conditional_55_Template(rf, ctx) { if (rf & 1) {
717
- const _r34 = i0.ɵɵgetCurrentView();
718
- i0.ɵɵelementStart(0, "mj-switch", 135);
719
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_55_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Reusable, $event) || (ctx_r1.record.Reusable = $event); return i0.ɵɵresetView($event); });
740
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_57_Template(rf, ctx) { if (rf & 1) {
741
+ const _r35 = i0.ɵɵgetCurrentView();
742
+ i0.ɵɵelementStart(0, "mj-switch", 153);
743
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_57_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Reusable, $event) || (ctx_r1.record.Reusable = $event); return i0.ɵɵresetView($event); });
720
744
  i0.ɵɵelementEnd();
721
- i0.ɵɵelementStart(1, "div", 136);
745
+ i0.ɵɵelementStart(1, "div", 154);
722
746
  i0.ɵɵtext(2, "Allow other queries to reference this query using composition syntax");
723
747
  i0.ɵɵelementEnd();
724
748
  } if (rf & 2) {
725
749
  const ctx_r1 = i0.ɵɵnextContext(2);
726
750
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Reusable);
727
751
  } }
728
- function MJQueryFormComponentExtended_Conditional_0_Conditional_56_Conditional_1_Template(rf, ctx) { if (rf & 1) {
729
- i0.ɵɵelementStart(0, "span", 137);
730
- i0.ɵɵelement(1, "i", 139);
752
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_1_Template(rf, ctx) { if (rf & 1) {
753
+ i0.ɵɵelementStart(0, "span", 155);
754
+ i0.ɵɵelement(1, "i", 157);
731
755
  i0.ɵɵtext(2, " Reusable");
732
756
  i0.ɵɵelementEnd();
733
757
  } }
734
- function MJQueryFormComponentExtended_Conditional_0_Conditional_56_Conditional_2_Template(rf, ctx) { if (rf & 1) {
735
- i0.ɵɵelementStart(0, "span", 138);
736
- i0.ɵɵelement(1, "i", 140);
758
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Template(rf, ctx) { if (rf & 1) {
759
+ i0.ɵɵelementStart(0, "span", 156);
760
+ i0.ɵɵelement(1, "i", 158);
737
761
  i0.ɵɵtext(2, " Not Reusable");
738
762
  i0.ɵɵelementEnd();
739
763
  } }
740
- function MJQueryFormComponentExtended_Conditional_0_Conditional_56_Template(rf, ctx) { if (rf & 1) {
741
- i0.ɵɵelementStart(0, "div", 41);
742
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_56_Conditional_1_Template, 3, 0, "span", 137)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_56_Conditional_2_Template, 3, 0, "span", 138);
764
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Template(rf, ctx) { if (rf & 1) {
765
+ i0.ɵɵelementStart(0, "div", 48);
766
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Template, 3, 0, "span", 156);
743
767
  i0.ɵɵelementEnd();
744
768
  } if (rf & 2) {
745
769
  const ctx_r1 = i0.ɵɵnextContext(2);
746
770
  i0.ɵɵadvance();
747
771
  i0.ɵɵconditional(ctx_r1.record.Reusable ? 1 : 2);
748
772
  } }
749
- function MJQueryFormComponentExtended_Conditional_0_Conditional_61_Template(rf, ctx) { if (rf & 1) {
750
- const _r35 = i0.ɵɵgetCurrentView();
751
- i0.ɵɵelementStart(0, "mj-switch", 141);
752
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_61_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheEnabled, $event) || (ctx_r1.record.CacheEnabled = $event); return i0.ɵɵresetView($event); });
773
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template(rf, ctx) { if (rf & 1) {
774
+ const _r36 = i0.ɵɵgetCurrentView();
775
+ i0.ɵɵelementStart(0, "mj-switch", 159);
776
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheEnabled, $event) || (ctx_r1.record.CacheEnabled = $event); return i0.ɵɵresetView($event); });
753
777
  i0.ɵɵelementEnd();
754
- i0.ɵɵelementStart(1, "div", 136);
778
+ i0.ɵɵelementStart(1, "div", 154);
755
779
  i0.ɵɵtext(2, "Cache query results in memory to reduce database load on repeated runs");
756
780
  i0.ɵɵelementEnd();
757
781
  } if (rf & 2) {
758
782
  const ctx_r1 = i0.ɵɵnextContext(2);
759
783
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CacheEnabled);
760
784
  } }
761
- function MJQueryFormComponentExtended_Conditional_0_Conditional_62_Conditional_1_Template(rf, ctx) { if (rf & 1) {
762
- i0.ɵɵelementStart(0, "span", 137);
763
- i0.ɵɵelement(1, "i", 139);
785
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_1_Template(rf, ctx) { if (rf & 1) {
786
+ i0.ɵɵelementStart(0, "span", 155);
787
+ i0.ɵɵelement(1, "i", 157);
764
788
  i0.ɵɵtext(2, " Caching On");
765
789
  i0.ɵɵelementEnd();
766
790
  } }
767
- function MJQueryFormComponentExtended_Conditional_0_Conditional_62_Conditional_2_Template(rf, ctx) { if (rf & 1) {
768
- i0.ɵɵelementStart(0, "span", 138);
769
- i0.ɵɵelement(1, "i", 140);
791
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_2_Template(rf, ctx) { if (rf & 1) {
792
+ i0.ɵɵelementStart(0, "span", 156);
793
+ i0.ɵɵelement(1, "i", 158);
770
794
  i0.ɵɵtext(2, " Caching Off");
771
795
  i0.ɵɵelementEnd();
772
796
  } }
773
- function MJQueryFormComponentExtended_Conditional_0_Conditional_62_Template(rf, ctx) { if (rf & 1) {
774
- i0.ɵɵelementStart(0, "div", 41);
775
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_62_Conditional_1_Template, 3, 0, "span", 137)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_62_Conditional_2_Template, 3, 0, "span", 138);
797
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_64_Template(rf, ctx) { if (rf & 1) {
798
+ i0.ɵɵelementStart(0, "div", 48);
799
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_2_Template, 3, 0, "span", 156);
776
800
  i0.ɵɵelementEnd();
777
801
  } if (rf & 2) {
778
802
  const ctx_r1 = i0.ɵɵnextContext(2);
779
803
  i0.ɵɵadvance();
780
804
  i0.ɵɵconditional(ctx_r1.record.CacheEnabled ? 1 : 2);
781
805
  } }
782
- function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Conditional_4_Template(rf, ctx) { if (rf & 1) {
783
- const _r36 = i0.ɵɵgetCurrentView();
784
- i0.ɵɵelementStart(0, "input", 143);
785
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Conditional_4_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheTTLMinutes, $event) || (ctx_r1.record.CacheTTLMinutes = $event); return i0.ɵɵresetView($event); });
806
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_4_Template(rf, ctx) { if (rf & 1) {
807
+ const _r37 = i0.ɵɵgetCurrentView();
808
+ i0.ɵɵelementStart(0, "input", 161);
809
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_4_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheTTLMinutes, $event) || (ctx_r1.record.CacheTTLMinutes = $event); return i0.ɵɵresetView($event); });
786
810
  i0.ɵɵelementEnd();
787
- i0.ɵɵelementStart(1, "div", 136);
811
+ i0.ɵɵelementStart(1, "div", 154);
788
812
  i0.ɵɵtext(2, "How long cached results remain valid. Leave blank for default TTL.");
789
813
  i0.ɵɵelementEnd();
790
814
  } if (rf & 2) {
791
815
  const ctx_r1 = i0.ɵɵnextContext(3);
792
816
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CacheTTLMinutes);
793
817
  } }
794
- function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Conditional_5_Template(rf, ctx) { if (rf & 1) {
795
- i0.ɵɵelementStart(0, "div", 41);
818
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_5_Template(rf, ctx) { if (rf & 1) {
819
+ i0.ɵɵelementStart(0, "div", 48);
796
820
  i0.ɵɵtext(1);
797
821
  i0.ɵɵelementEnd();
798
822
  } if (rf & 2) {
@@ -800,87 +824,87 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Conditional_5
800
824
  i0.ɵɵadvance();
801
825
  i0.ɵɵtextInterpolate(ctx_r1.record.CacheTTLMinutes != null ? ctx_r1.record.CacheTTLMinutes + " min" : "Default");
802
826
  } }
803
- function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template(rf, ctx) { if (rf & 1) {
804
- i0.ɵɵelementStart(0, "div", 38)(1, "label", 39);
805
- i0.ɵɵelement(2, "i", 142);
827
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Template(rf, ctx) { if (rf & 1) {
828
+ i0.ɵɵelementStart(0, "div", 45)(1, "label", 46);
829
+ i0.ɵɵelement(2, "i", 160);
806
830
  i0.ɵɵtext(3, " Cache TTL (Minutes) ");
807
831
  i0.ɵɵelementEnd();
808
- i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_63_Conditional_4_Template, 3, 1)(5, MJQueryFormComponentExtended_Conditional_0_Conditional_63_Conditional_5_Template, 2, 1, "div", 41);
832
+ i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_4_Template, 3, 1)(5, MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_5_Template, 2, 1, "div", 48);
809
833
  i0.ɵɵelementEnd();
810
834
  } if (rf & 2) {
811
835
  const ctx_r1 = i0.ɵɵnextContext(2);
812
836
  i0.ɵɵadvance(4);
813
837
  i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
814
838
  } }
815
- function MJQueryFormComponentExtended_Conditional_0_Conditional_68_Template(rf, ctx) { if (rf & 1) {
816
- const _r37 = i0.ɵɵgetCurrentView();
817
- i0.ɵɵelementStart(0, "mj-switch", 144);
818
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_68_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.AuditQueryRuns, $event) || (ctx_r1.record.AuditQueryRuns = $event); return i0.ɵɵresetView($event); });
839
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_70_Template(rf, ctx) { if (rf & 1) {
840
+ const _r38 = i0.ɵɵgetCurrentView();
841
+ i0.ɵɵelementStart(0, "mj-switch", 162);
842
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_70_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.AuditQueryRuns, $event) || (ctx_r1.record.AuditQueryRuns = $event); return i0.ɵɵresetView($event); });
819
843
  i0.ɵɵelementEnd();
820
- i0.ɵɵelementStart(1, "div", 136);
844
+ i0.ɵɵelementStart(1, "div", 154);
821
845
  i0.ɵɵtext(2, "Log all executions of this query to the Audit Log for tracking and compliance");
822
846
  i0.ɵɵelementEnd();
823
847
  } if (rf & 2) {
824
848
  const ctx_r1 = i0.ɵɵnextContext(2);
825
849
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.AuditQueryRuns);
826
850
  } }
827
- function MJQueryFormComponentExtended_Conditional_0_Conditional_69_Conditional_1_Template(rf, ctx) { if (rf & 1) {
828
- i0.ɵɵelementStart(0, "span", 137);
829
- i0.ɵɵelement(1, "i", 139);
851
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_1_Template(rf, ctx) { if (rf & 1) {
852
+ i0.ɵɵelementStart(0, "span", 155);
853
+ i0.ɵɵelement(1, "i", 157);
830
854
  i0.ɵɵtext(2, " Auditing On");
831
855
  i0.ɵɵelementEnd();
832
856
  } }
833
- function MJQueryFormComponentExtended_Conditional_0_Conditional_69_Conditional_2_Template(rf, ctx) { if (rf & 1) {
834
- i0.ɵɵelementStart(0, "span", 138);
835
- i0.ɵɵelement(1, "i", 140);
857
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_2_Template(rf, ctx) { if (rf & 1) {
858
+ i0.ɵɵelementStart(0, "span", 156);
859
+ i0.ɵɵelement(1, "i", 158);
836
860
  i0.ɵɵtext(2, " Auditing Off");
837
861
  i0.ɵɵelementEnd();
838
862
  } }
839
- function MJQueryFormComponentExtended_Conditional_0_Conditional_69_Template(rf, ctx) { if (rf & 1) {
840
- i0.ɵɵelementStart(0, "div", 41);
841
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_69_Conditional_1_Template, 3, 0, "span", 137)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_69_Conditional_2_Template, 3, 0, "span", 138);
863
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
864
+ i0.ɵɵelementStart(0, "div", 48);
865
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_2_Template, 3, 0, "span", 156);
842
866
  i0.ɵɵelementEnd();
843
867
  } if (rf & 2) {
844
868
  const ctx_r1 = i0.ɵɵnextContext(2);
845
869
  i0.ɵɵadvance();
846
870
  i0.ɵɵconditional(ctx_r1.record.AuditQueryRuns ? 1 : 2);
847
871
  } }
848
- function MJQueryFormComponentExtended_Conditional_0_Conditional_74_Template(rf, ctx) { if (rf & 1) {
849
- const _r38 = i0.ɵɵgetCurrentView();
850
- i0.ɵɵelementStart(0, "mj-switch", 145);
851
- i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_74_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UsesTemplate, $event) || (ctx_r1.record.UsesTemplate = $event); return i0.ɵɵresetView($event); });
872
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_76_Template(rf, ctx) { if (rf & 1) {
873
+ const _r39 = i0.ɵɵgetCurrentView();
874
+ i0.ɵɵelementStart(0, "mj-switch", 163);
875
+ i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_76_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UsesTemplate, $event) || (ctx_r1.record.UsesTemplate = $event); return i0.ɵɵresetView($event); });
852
876
  i0.ɵɵelementEnd();
853
877
  } if (rf & 2) {
854
878
  const ctx_r1 = i0.ɵɵnextContext(2);
855
879
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.UsesTemplate);
856
880
  } }
857
- function MJQueryFormComponentExtended_Conditional_0_Conditional_75_Conditional_1_Template(rf, ctx) { if (rf & 1) {
858
- i0.ɵɵelementStart(0, "span", 137);
859
- i0.ɵɵelement(1, "i", 139);
881
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_1_Template(rf, ctx) { if (rf & 1) {
882
+ i0.ɵɵelementStart(0, "span", 155);
883
+ i0.ɵɵelement(1, "i", 157);
860
884
  i0.ɵɵtext(2, " Uses Templates");
861
885
  i0.ɵɵelementEnd();
862
886
  } }
863
- function MJQueryFormComponentExtended_Conditional_0_Conditional_75_Conditional_2_Template(rf, ctx) { if (rf & 1) {
864
- i0.ɵɵelementStart(0, "span", 138);
865
- i0.ɵɵelement(1, "i", 140);
887
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_2_Template(rf, ctx) { if (rf & 1) {
888
+ i0.ɵɵelementStart(0, "span", 156);
889
+ i0.ɵɵelement(1, "i", 158);
866
890
  i0.ɵɵtext(2, " No Templates");
867
891
  i0.ɵɵelementEnd();
868
892
  } }
869
- function MJQueryFormComponentExtended_Conditional_0_Conditional_75_Template(rf, ctx) { if (rf & 1) {
870
- i0.ɵɵelementStart(0, "div", 41);
871
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_75_Conditional_1_Template, 3, 0, "span", 137)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_75_Conditional_2_Template, 3, 0, "span", 138);
893
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_77_Template(rf, ctx) { if (rf & 1) {
894
+ i0.ɵɵelementStart(0, "div", 48);
895
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_2_Template, 3, 0, "span", 156);
872
896
  i0.ɵɵelementEnd();
873
897
  } if (rf & 2) {
874
898
  const ctx_r1 = i0.ɵɵnextContext(2);
875
899
  i0.ɵɵadvance();
876
900
  i0.ɵɵconditional(ctx_r1.record.UsesTemplate ? 1 : 2);
877
901
  } }
878
- function MJQueryFormComponentExtended_Conditional_0_Conditional_88_Template(rf, ctx) { if (rf & 1) {
879
- i0.ɵɵelementStart(0, "div", 38)(1, "label", 39);
880
- i0.ɵɵelement(2, "i", 146);
902
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
903
+ i0.ɵɵelementStart(0, "div", 45)(1, "label", 46);
904
+ i0.ɵɵelement(2, "i", 164);
881
905
  i0.ɵɵtext(3, " Quality Rank ");
882
906
  i0.ɵɵelementEnd();
883
- i0.ɵɵelementStart(4, "div", 41);
907
+ i0.ɵɵelementStart(4, "div", 48);
884
908
  i0.ɵɵtext(5);
885
909
  i0.ɵɵelementEnd()();
886
910
  } if (rf & 2) {
@@ -888,72 +912,72 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_88_Template(rf,
888
912
  i0.ɵɵadvance(5);
889
913
  i0.ɵɵtextInterpolate1("", ctx_r1.record.QualityRank, "/10");
890
914
  } }
891
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template(rf, ctx) { if (rf & 1) {
892
- i0.ɵɵelementStart(0, "span", 71);
893
- i0.ɵɵelement(1, "i", 147);
915
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template(rf, ctx) { if (rf & 1) {
916
+ i0.ɵɵelementStart(0, "span", 84);
917
+ i0.ɵɵelement(1, "i", 166);
894
918
  i0.ɵɵtext(2, " Permissions ");
895
919
  i0.ɵɵelementEnd();
896
920
  } }
897
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_3_Template(rf, ctx) { if (rf & 1) {
898
- i0.ɵɵelementStart(0, "div", 91);
899
- i0.ɵɵelement(1, "mj-loading", 148);
921
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template(rf, ctx) { if (rf & 1) {
922
+ i0.ɵɵelementStart(0, "div", 106);
923
+ i0.ɵɵelement(1, "mj-loading", 167);
900
924
  i0.ɵɵelementEnd();
901
925
  } }
902
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
903
- i0.ɵɵelement(0, "mj-empty-state", 149);
926
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
927
+ i0.ɵɵelement(0, "mj-empty-state", 168);
904
928
  } }
905
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
906
- i0.ɵɵelement(0, "mj-explorer-entity-data-grid", 150);
929
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
930
+ i0.ɵɵelement(0, "mj-explorer-entity-data-grid", 169);
907
931
  } if (rf & 2) {
908
932
  const ctx_r1 = i0.ɵɵnextContext(5);
909
933
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: Query Permissions", "QueryID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: Query Permissions"))("AllowLoad", true)("ShowToolbar", false);
910
934
  } }
911
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
912
- i0.ɵɵelementStart(0, "div", 152);
913
- i0.ɵɵelement(1, "i", 153);
914
- i0.ɵɵelementStart(2, "div", 154)(3, "div", 155);
935
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
936
+ i0.ɵɵelementStart(0, "div", 171);
937
+ i0.ɵɵelement(1, "i", 172);
938
+ i0.ɵɵelementStart(2, "div", 173)(3, "div", 174);
915
939
  i0.ɵɵtext(4);
916
940
  i0.ɵɵelementEnd();
917
- i0.ɵɵelementStart(5, "div", 156);
941
+ i0.ɵɵelementStart(5, "div", 175);
918
942
  i0.ɵɵtext(6, "Role Permission");
919
943
  i0.ɵɵelementEnd()();
920
- i0.ɵɵelementStart(7, "span", 157);
921
- i0.ɵɵelement(8, "i", 53);
944
+ i0.ɵɵelementStart(7, "span", 176);
945
+ i0.ɵɵelement(8, "i", 63);
922
946
  i0.ɵɵtext(9, " Can Execute ");
923
947
  i0.ɵɵelementEnd()();
924
948
  } if (rf & 2) {
925
- const permission_r40 = ctx.$implicit;
949
+ const permission_r41 = ctx.$implicit;
926
950
  i0.ɵɵadvance(4);
927
- i0.ɵɵtextInterpolate(permission_r40.Role);
951
+ i0.ɵɵtextInterpolate(permission_r41.Role);
928
952
  } }
929
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
930
- i0.ɵɵelementStart(0, "div", 151);
931
- i0.ɵɵrepeaterCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Conditional_1_For_2_Template, 10, 1, "div", 152, _forTrack1);
953
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
954
+ i0.ɵɵelementStart(0, "div", 170);
955
+ i0.ɵɵrepeaterCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_For_2_Template, 10, 1, "div", 171, _forTrack1);
932
956
  i0.ɵɵelementEnd();
933
957
  } if (rf & 2) {
934
958
  const ctx_r1 = i0.ɵɵnextContext(5);
935
959
  i0.ɵɵadvance();
936
960
  i0.ɵɵrepeater(ctx_r1.queryPermissions);
937
961
  } }
938
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
939
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Conditional_0_Template, 1, 4, "mj-explorer-entity-data-grid", 150)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Conditional_1_Template, 3, 0, "div", 151);
962
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
963
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_0_Template, 1, 4, "mj-explorer-entity-data-grid", 169)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_Template, 3, 0, "div", 170);
940
964
  } if (rf & 2) {
941
965
  const ctx_r1 = i0.ɵɵnextContext(4);
942
966
  i0.ɵɵconditional(ctx_r1.EditMode ? 0 : 1);
943
967
  } }
944
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Template(rf, ctx) { if (rf & 1) {
945
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_0_Template, 1, 0, "mj-empty-state", 149)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Conditional_1_Template, 2, 1);
968
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template(rf, ctx) { if (rf & 1) {
969
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_0_Template, 1, 0, "mj-empty-state", 168)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Template, 2, 1);
946
970
  } if (rf & 2) {
947
971
  const ctx_r1 = i0.ɵɵnextContext(3);
948
972
  i0.ɵɵconditional(ctx_r1.queryPermissions.length === 0 && !ctx_r1.EditMode ? 0 : 1);
949
973
  } }
950
- function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Template(rf, ctx) { if (rf & 1) {
951
- const _r39 = i0.ɵɵgetCurrentView();
952
- i0.ɵɵelementStart(0, "mj-accordion-panel", 24);
953
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_89_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.permissionsPanelExpanded, $event) || (ctx_r1.permissionsPanelExpanded = $event); return i0.ɵɵresetView($event); });
954
- i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_89_ng_template_1_Template, 3, 0, "ng-template", 25);
955
- i0.ɵɵelementStart(2, "div", 36);
956
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_3_Template, 2, 0, "div", 91)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Conditional_4_Template, 2, 1);
974
+ function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Template(rf, ctx) { if (rf & 1) {
975
+ const _r40 = i0.ɵɵgetCurrentView();
976
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 165);
977
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r40); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.permissionsPanelExpanded, $event) || (ctx_r1.permissionsPanelExpanded = $event); return i0.ɵɵresetView($event); });
978
+ i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template, 3, 0, "ng-template", 27);
979
+ i0.ɵɵelementStart(2, "div", 43);
980
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template, 2, 1);
957
981
  i0.ɵɵelementEnd()();
958
982
  } if (rf & 2) {
959
983
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -969,102 +993,106 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
969
993
  i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_3_Template, 4, 0, "div", 4);
970
994
  i0.ɵɵelementStart(4, "div", 5)(5, "div", 6)(6, "div", 7)(7, "div", 8);
971
995
  i0.ɵɵelement(8, "i", 9);
972
- i0.ɵɵconditionalCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template, 1, 1, "input", 10)(10, MJQueryFormComponentExtended_Conditional_0_Conditional_10_Template, 2, 1, "h4", 11);
996
+ i0.ɵɵconditionalCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template, 1, 1, "input", 10)(10, MJQueryFormComponentExtended_Conditional_0_Conditional_10_Template, 4, 4);
973
997
  i0.ɵɵelementEnd();
974
- i0.ɵɵelementStart(11, "div", 12);
975
- i0.ɵɵconditionalCreate(12, MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template, 3, 1, "button", 13);
998
+ i0.ɵɵelementStart(11, "div", 11);
999
+ i0.ɵɵconditionalCreate(12, MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template, 3, 1, "button", 12);
976
1000
  i0.ɵɵelementEnd()();
977
- i0.ɵɵelementStart(13, "div", 14)(14, "div", 15)(15, "label", 16);
1001
+ i0.ɵɵelementStart(13, "div", 13)(14, "div", 14)(15, "label", 15);
978
1002
  i0.ɵɵtext(16, "Category");
979
1003
  i0.ɵɵelementEnd();
980
- i0.ɵɵconditionalCreate(17, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template, 5, 8, "div", 17)(18, MJQueryFormComponentExtended_Conditional_0_Conditional_18_Template, 2, 1, "span", 18);
1004
+ i0.ɵɵconditionalCreate(17, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template, 5, 8, "div", 16)(18, MJQueryFormComponentExtended_Conditional_0_Conditional_18_Template, 2, 1, "span", 17);
981
1005
  i0.ɵɵelementEnd();
982
- i0.ɵɵelementStart(19, "div", 15)(20, "label", 16);
1006
+ i0.ɵɵelementStart(19, "div", 18)(20, "label", 15);
983
1007
  i0.ɵɵtext(21, "Status");
984
1008
  i0.ɵɵelementEnd();
985
1009
  i0.ɵɵconditionalCreate(22, MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template, 1, 3, "mj-dropdown", 19)(23, MJQueryFormComponentExtended_Conditional_0_Conditional_23_Template, 3, 5, "span", 20);
986
1010
  i0.ɵɵelementEnd();
987
- i0.ɵɵconditionalCreate(24, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template, 7, 5, "div", 15);
1011
+ i0.ɵɵconditionalCreate(24, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template, 7, 5, "div", 14);
988
1012
  i0.ɵɵelementEnd();
989
1013
  i0.ɵɵconditionalCreate(25, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template, 3, 1, "div", 21);
1014
+ i0.ɵɵelementEnd();
1015
+ i0.ɵɵconditionalCreate(26, MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template, 4, 2, "button", 22);
1016
+ i0.ɵɵelementEnd();
1017
+ i0.ɵɵconditionalCreate(27, MJQueryFormComponentExtended_Conditional_0_Conditional_27_Template, 6, 2, "mj-alert", 23);
1018
+ i0.ɵɵelementStart(28, "div", 24)(29, "mj-accordion-sections", 25);
1019
+ i0.ɵɵlistener("ActiveKeyChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_sections_ActiveKeyChange_29_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Phone.Pick($event)); });
1020
+ i0.ɵɵelementStart(30, "mj-accordion-panel", 26);
1021
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_30_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.sqlPanelExpanded, $event) || (ctx_r1.sqlPanelExpanded = $event); return i0.ɵɵresetView($event); });
1022
+ i0.ɵɵtemplate(31, MJQueryFormComponentExtended_Conditional_0_ng_template_31_Template, 5, 1, "ng-template", 27);
1023
+ i0.ɵɵelementStart(32, "div", 28)(33, "button", 29);
1024
+ i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFiltersHelp()); });
1025
+ i0.ɵɵelement(34, "i", 30);
1026
+ i0.ɵɵelementStart(35, "span");
1027
+ i0.ɵɵtext(36, "Filters Help");
1028
+ i0.ɵɵelementEnd();
1029
+ i0.ɵɵelement(37, "i", 31);
990
1030
  i0.ɵɵelementEnd()();
991
- i0.ɵɵconditionalCreate(26, MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template, 6, 2, "mj-alert", 22);
992
- i0.ɵɵelementStart(27, "div", 23)(28, "mj-accordion-panel", 24);
993
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_28_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.sqlPanelExpanded, $event) || (ctx_r1.sqlPanelExpanded = $event); return i0.ɵɵresetView($event); });
994
- i0.ɵɵtemplate(29, MJQueryFormComponentExtended_Conditional_0_ng_template_29_Template, 5, 1, "ng-template", 25);
995
- i0.ɵɵelementStart(30, "div", 26)(31, "button", 27);
996
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFiltersHelp()); });
997
- i0.ɵɵelement(32, "i", 28);
998
- i0.ɵɵelementStart(33, "span");
999
- i0.ɵɵtext(34, "Filters Help");
1000
- i0.ɵɵelementEnd();
1001
- i0.ɵɵelement(35, "i", 29);
1002
- i0.ɵɵelementEnd()();
1003
- i0.ɵɵelementStart(36, "div", 30);
1004
- i0.ɵɵconditionalCreate(37, MJQueryFormComponentExtended_Conditional_0_Conditional_37_Template, 1, 3, "mj-query-diagnostics", 31);
1005
- i0.ɵɵelementStart(38, "mj-code-editor", 32, 1);
1006
- i0.ɵɵlistener("change", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_change_38_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSQLChange($event)); })("CompositionTokenClick", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_CompositionTokenClick_38_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCompositionTokenClick($event)); });
1031
+ i0.ɵɵelementStart(38, "div", 32);
1032
+ i0.ɵɵconditionalCreate(39, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template, 1, 3, "mj-query-diagnostics", 33);
1033
+ i0.ɵɵelementStart(40, "mj-code-editor", 34, 1);
1034
+ i0.ɵɵlistener("change", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_change_40_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSQLChange($event)); })("CompositionTokenClick", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_CompositionTokenClick_40_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCompositionTokenClick($event)); });
1007
1035
  i0.ɵɵelementEnd();
1008
- i0.ɵɵconditionalCreate(40, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Template, 1, 4, "mj-query-diagnostics", 33);
1009
- i0.ɵɵconditionalCreate(41, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Template, 7, 0, "div", 34);
1036
+ i0.ɵɵconditionalCreate(42, MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template, 1, 4, "mj-query-diagnostics", 35);
1037
+ i0.ɵɵconditionalCreate(43, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template, 7, 0, "div", 36);
1010
1038
  i0.ɵɵelementEnd()();
1011
- i0.ɵɵconditionalCreate(42, MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template, 5, 2, "mj-accordion-panel", 35);
1012
- i0.ɵɵconditionalCreate(43, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template, 5, 2, "mj-accordion-panel", 35);
1013
- i0.ɵɵconditionalCreate(44, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template, 5, 2, "mj-accordion-panel", 35);
1014
- i0.ɵɵconditionalCreate(45, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template, 11, 2, "mj-accordion-panel", 35);
1015
- i0.ɵɵconditionalCreate(46, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template, 5, 2, "mj-accordion-panel", 35);
1016
- i0.ɵɵelementStart(47, "mj-accordion-panel", 24);
1017
- i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_47_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.detailsPanelExpanded, $event) || (ctx_r1.detailsPanelExpanded = $event); return i0.ɵɵresetView($event); });
1018
- i0.ɵɵtemplate(48, MJQueryFormComponentExtended_Conditional_0_ng_template_48_Template, 3, 0, "ng-template", 25);
1019
- i0.ɵɵelementStart(49, "div", 36)(50, "div", 37)(51, "div", 38)(52, "label", 39);
1020
- i0.ɵɵelement(53, "i", 40);
1021
- i0.ɵɵtext(54, " Reusable ");
1039
+ i0.ɵɵconditionalCreate(44, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template, 5, 2, "mj-accordion-panel", 37);
1040
+ i0.ɵɵconditionalCreate(45, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template, 5, 2, "mj-accordion-panel", 38);
1041
+ i0.ɵɵconditionalCreate(46, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template, 5, 2, "mj-accordion-panel", 39);
1042
+ i0.ɵɵconditionalCreate(47, MJQueryFormComponentExtended_Conditional_0_Conditional_47_Template, 11, 2, "mj-accordion-panel", 40);
1043
+ i0.ɵɵconditionalCreate(48, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Template, 5, 2, "mj-accordion-panel", 41);
1044
+ i0.ɵɵelementStart(49, "mj-accordion-panel", 42);
1045
+ i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_49_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.detailsPanelExpanded, $event) || (ctx_r1.detailsPanelExpanded = $event); return i0.ɵɵresetView($event); });
1046
+ i0.ɵɵtemplate(50, MJQueryFormComponentExtended_Conditional_0_ng_template_50_Template, 3, 0, "ng-template", 27);
1047
+ i0.ɵɵelementStart(51, "div", 43)(52, "div", 44)(53, "div", 45)(54, "label", 46);
1048
+ i0.ɵɵelement(55, "i", 47);
1049
+ i0.ɵɵtext(56, " Reusable ");
1022
1050
  i0.ɵɵelementEnd();
1023
- i0.ɵɵconditionalCreate(55, MJQueryFormComponentExtended_Conditional_0_Conditional_55_Template, 3, 1)(56, MJQueryFormComponentExtended_Conditional_0_Conditional_56_Template, 3, 1, "div", 41);
1051
+ i0.ɵɵconditionalCreate(57, MJQueryFormComponentExtended_Conditional_0_Conditional_57_Template, 3, 1)(58, MJQueryFormComponentExtended_Conditional_0_Conditional_58_Template, 3, 1, "div", 48);
1024
1052
  i0.ɵɵelementEnd();
1025
- i0.ɵɵelementStart(57, "div", 38)(58, "label", 39);
1026
- i0.ɵɵelement(59, "i", 42);
1027
- i0.ɵɵtext(60, " Cache Enabled ");
1053
+ i0.ɵɵelementStart(59, "div", 45)(60, "label", 46);
1054
+ i0.ɵɵelement(61, "i", 49);
1055
+ i0.ɵɵtext(62, " Cache Enabled ");
1028
1056
  i0.ɵɵelementEnd();
1029
- i0.ɵɵconditionalCreate(61, MJQueryFormComponentExtended_Conditional_0_Conditional_61_Template, 3, 1)(62, MJQueryFormComponentExtended_Conditional_0_Conditional_62_Template, 3, 1, "div", 41);
1057
+ i0.ɵɵconditionalCreate(63, MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template, 3, 1)(64, MJQueryFormComponentExtended_Conditional_0_Conditional_64_Template, 3, 1, "div", 48);
1030
1058
  i0.ɵɵelementEnd();
1031
- i0.ɵɵconditionalCreate(63, MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template, 6, 1, "div", 38);
1032
- i0.ɵɵelementStart(64, "div", 38)(65, "label", 39);
1033
- i0.ɵɵelement(66, "i", 43);
1034
- i0.ɵɵtext(67, " Audit Runs ");
1059
+ i0.ɵɵconditionalCreate(65, MJQueryFormComponentExtended_Conditional_0_Conditional_65_Template, 6, 1, "div", 45);
1060
+ i0.ɵɵelementStart(66, "div", 45)(67, "label", 46);
1061
+ i0.ɵɵelement(68, "i", 50);
1062
+ i0.ɵɵtext(69, " Audit Runs ");
1035
1063
  i0.ɵɵelementEnd();
1036
- i0.ɵɵconditionalCreate(68, MJQueryFormComponentExtended_Conditional_0_Conditional_68_Template, 3, 1)(69, MJQueryFormComponentExtended_Conditional_0_Conditional_69_Template, 3, 1, "div", 41);
1064
+ i0.ɵɵconditionalCreate(70, MJQueryFormComponentExtended_Conditional_0_Conditional_70_Template, 3, 1)(71, MJQueryFormComponentExtended_Conditional_0_Conditional_71_Template, 3, 1, "div", 48);
1037
1065
  i0.ɵɵelementEnd();
1038
- i0.ɵɵelementStart(70, "div", 38)(71, "label", 39);
1039
- i0.ɵɵelement(72, "i", 44);
1040
- i0.ɵɵtext(73, " Template Usage ");
1066
+ i0.ɵɵelementStart(72, "div", 45)(73, "label", 46);
1067
+ i0.ɵɵelement(74, "i", 51);
1068
+ i0.ɵɵtext(75, " Template Usage ");
1041
1069
  i0.ɵɵelementEnd();
1042
- i0.ɵɵconditionalCreate(74, MJQueryFormComponentExtended_Conditional_0_Conditional_74_Template, 1, 1, "mj-switch", 45)(75, MJQueryFormComponentExtended_Conditional_0_Conditional_75_Template, 3, 1, "div", 41);
1070
+ i0.ɵɵconditionalCreate(76, MJQueryFormComponentExtended_Conditional_0_Conditional_76_Template, 1, 1, "mj-switch", 52)(77, MJQueryFormComponentExtended_Conditional_0_Conditional_77_Template, 3, 1, "div", 48);
1043
1071
  i0.ɵɵelementEnd();
1044
- i0.ɵɵelementStart(76, "div", 38)(77, "label", 39);
1045
- i0.ɵɵelement(78, "i", 46);
1046
- i0.ɵɵtext(79, " Created ");
1072
+ i0.ɵɵelementStart(78, "div", 45)(79, "label", 46);
1073
+ i0.ɵɵelement(80, "i", 53);
1074
+ i0.ɵɵtext(81, " Created ");
1047
1075
  i0.ɵɵelementEnd();
1048
- i0.ɵɵelementStart(80, "div", 41);
1049
- i0.ɵɵtext(81);
1076
+ i0.ɵɵelementStart(82, "div", 48);
1077
+ i0.ɵɵtext(83);
1050
1078
  i0.ɵɵelementEnd()();
1051
- i0.ɵɵelementStart(82, "div", 38)(83, "label", 39);
1052
- i0.ɵɵelement(84, "i", 47);
1053
- i0.ɵɵtext(85, " Last Updated ");
1079
+ i0.ɵɵelementStart(84, "div", 45)(85, "label", 46);
1080
+ i0.ɵɵelement(86, "i", 54);
1081
+ i0.ɵɵtext(87, " Last Updated ");
1054
1082
  i0.ɵɵelementEnd();
1055
- i0.ɵɵelementStart(86, "div", 41);
1056
- i0.ɵɵtext(87);
1083
+ i0.ɵɵelementStart(88, "div", 48);
1084
+ i0.ɵɵtext(89);
1057
1085
  i0.ɵɵelementEnd()();
1058
- i0.ɵɵconditionalCreate(88, MJQueryFormComponentExtended_Conditional_0_Conditional_88_Template, 6, 1, "div", 38);
1059
- i0.ɵɵelementEnd()()();
1060
- i0.ɵɵconditionalCreate(89, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Template, 5, 2, "mj-accordion-panel", 35);
1086
+ i0.ɵɵconditionalCreate(90, MJQueryFormComponentExtended_Conditional_0_Conditional_90_Template, 6, 1, "div", 45);
1061
1087
  i0.ɵɵelementEnd()()();
1062
- i0.ɵɵelementStart(90, "mj-query-refresh-dialog", 48);
1063
- i0.ɵɵlistener("Closed", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_refresh_dialog_Closed_90_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRefreshDialogClosed()); })("Applied", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_refresh_dialog_Applied_90_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRefreshApplied($event)); });
1088
+ i0.ɵɵconditionalCreate(91, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Template, 5, 2, "mj-accordion-panel", 55);
1089
+ i0.ɵɵelementEnd()()()();
1090
+ i0.ɵɵelementStart(92, "mj-query-refresh-dialog", 56);
1091
+ i0.ɵɵlistener("Closed", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_refresh_dialog_Closed_92_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRefreshDialogClosed()); })("Applied", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_refresh_dialog_Applied_92_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRefreshApplied($event)); });
1064
1092
  i0.ɵɵelementEnd();
1065
- i0.ɵɵelementStart(91, "mj-query-run-dialog", 49);
1066
- i0.ɵɵtwoWayListener("isVisibleChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_run_dialog_isVisibleChange_91_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.showRunDialog, $event) || (ctx_r1.showRunDialog = $event); return i0.ɵɵresetView($event); });
1067
- i0.ɵɵlistener("onClose", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_run_dialog_onClose_91_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onRunDialogClose()); });
1093
+ i0.ɵɵelementStart(93, "mj-query-run-dialog", 57);
1094
+ i0.ɵɵtwoWayListener("isVisibleChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_run_dialog_isVisibleChange_93_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.showRunDialog, $event) || (ctx_r1.showRunDialog = $event); return i0.ɵɵresetView($event); });
1095
+ i0.ɵɵlistener("onClose", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_run_dialog_onClose_93_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onRunDialogClose()); });
1068
1096
  i0.ɵɵelementEnd();
1069
1097
  } if (rf & 2) {
1070
1098
  const ctx_r1 = i0.ɵɵnextContext();
@@ -1072,7 +1100,7 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
1072
1100
  i0.ɵɵadvance(3);
1073
1101
  i0.ɵɵconditional(ctx_r1.IsSaving ? 3 : -1);
1074
1102
  i0.ɵɵadvance();
1075
- i0.ɵɵclassProp("content-saving", ctx_r1.IsSaving);
1103
+ i0.ɵɵclassProp("content-saving", ctx_r1.IsSaving)("hero-view", !ctx_r1.EditMode)("hero-compact", !ctx_r1.EditMode && !ctx_r1.HeroDetailsOpen);
1076
1104
  i0.ɵɵadvance(5);
1077
1105
  i0.ɵɵconditional(ctx_r1.EditMode ? 9 : 10);
1078
1106
  i0.ɵɵadvance(3);
@@ -1086,51 +1114,55 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
1086
1114
  i0.ɵɵadvance();
1087
1115
  i0.ɵɵconditional(ctx_r1.EditMode || ctx_r1.record.Description ? 25 : -1);
1088
1116
  i0.ɵɵadvance();
1089
- i0.ɵɵconditional(ctx_r1.record.Status && ctx_r1.record.Status !== "Approved" && !ctx_r1.EditMode ? 26 : -1);
1117
+ i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.HeroSummary ? 26 : -1);
1118
+ i0.ɵɵadvance();
1119
+ i0.ɵɵconditional(ctx_r1.record.Status && ctx_r1.record.Status !== "Approved" && !ctx_r1.EditMode ? 27 : -1);
1090
1120
  i0.ɵɵadvance();
1091
1121
  i0.ɵɵclassProp("content-saving", ctx_r1.IsSaving);
1092
1122
  i0.ɵɵadvance();
1123
+ i0.ɵɵproperty("Enabled", ctx_r1.Phone.IsPhone)("ActiveKey", ctx_r1.Phone.Section);
1124
+ i0.ɵɵadvance();
1093
1125
  i0.ɵɵtwoWayProperty("Expanded", ctx_r1.sqlPanelExpanded);
1094
1126
  i0.ɵɵadvance(7);
1095
1127
  i0.ɵɵproperty("ngClass", ctx_r1.showFiltersHelp ? "fa-chevron-up" : "fa-chevron-down");
1096
1128
  i0.ɵɵadvance(2);
1097
- i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length > 0 || ctx_r1.SaveDiagnosticsHeadline ? 37 : -1);
1129
+ i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length > 0 || ctx_r1.SaveDiagnosticsHeadline ? 39 : -1);
1098
1130
  i0.ɵɵadvance();
1099
1131
  i0.ɵɵproperty("language", "sql");
1100
1132
  i0.ɵɵadvance(2);
1101
- i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length === 0 && ctx_r1.ExtractionDiagnostics.length > 0 ? 40 : -1);
1133
+ i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length === 0 && ctx_r1.ExtractionDiagnostics.length > 0 ? 42 : -1);
1102
1134
  i0.ɵɵadvance();
1103
- i0.ɵɵconditional(ctx_r1.showFiltersHelp ? 41 : -1);
1135
+ i0.ɵɵconditional(ctx_r1.showFiltersHelp ? 43 : -1);
1104
1136
  i0.ɵɵadvance();
1105
- i0.ɵɵconditional(ctx_r1.record.TechnicalDescription || ctx_r1.EditMode ? 42 : -1);
1137
+ i0.ɵɵconditional(ctx_r1.record.TechnicalDescription || ctx_r1.EditMode ? 44 : -1);
1106
1138
  i0.ɵɵadvance();
1107
- i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 43 : -1);
1139
+ i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 45 : -1);
1108
1140
  i0.ɵɵadvance();
1109
- i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 44 : -1);
1141
+ i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 46 : -1);
1110
1142
  i0.ɵɵadvance();
1111
- i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.DependentQueries.length > 0 ? 45 : -1);
1143
+ i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.DependentQueries.length > 0 ? 47 : -1);
1112
1144
  i0.ɵɵadvance();
1113
- i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 46 : -1);
1145
+ i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 48 : -1);
1114
1146
  i0.ɵɵadvance();
1115
1147
  i0.ɵɵtwoWayProperty("Expanded", ctx_r1.detailsPanelExpanded);
1116
1148
  i0.ɵɵadvance(8);
1117
- i0.ɵɵconditional(ctx_r1.EditMode ? 55 : 56);
1149
+ i0.ɵɵconditional(ctx_r1.EditMode ? 57 : 58);
1118
1150
  i0.ɵɵadvance(6);
1119
- i0.ɵɵconditional(ctx_r1.EditMode ? 61 : 62);
1151
+ i0.ɵɵconditional(ctx_r1.EditMode ? 63 : 64);
1120
1152
  i0.ɵɵadvance(2);
1121
- i0.ɵɵconditional(ctx_r1.record.CacheEnabled ? 63 : -1);
1153
+ i0.ɵɵconditional(ctx_r1.record.CacheEnabled ? 65 : -1);
1122
1154
  i0.ɵɵadvance(5);
1123
- i0.ɵɵconditional(ctx_r1.EditMode ? 68 : 69);
1155
+ i0.ɵɵconditional(ctx_r1.EditMode ? 70 : 71);
1124
1156
  i0.ɵɵadvance(6);
1125
- i0.ɵɵconditional(ctx_r1.EditMode ? 74 : 75);
1157
+ i0.ɵɵconditional(ctx_r1.EditMode ? 76 : 77);
1126
1158
  i0.ɵɵadvance(7);
1127
1159
  i0.ɵɵtextInterpolate(ctx_r1.formatDate(ctx_r1.record.__mj_CreatedAt));
1128
1160
  i0.ɵɵadvance(6);
1129
1161
  i0.ɵɵtextInterpolate(ctx_r1.formatDate(ctx_r1.record.__mj_UpdatedAt));
1130
1162
  i0.ɵɵadvance();
1131
- i0.ɵɵconditional(ctx_r1.record.QualityRank != null ? 88 : -1);
1163
+ i0.ɵɵconditional(ctx_r1.record.QualityRank != null ? 90 : -1);
1132
1164
  i0.ɵɵadvance();
1133
- i0.ɵɵconditional(ctx_r1.record.IsSaved ? 89 : -1);
1165
+ i0.ɵɵconditional(ctx_r1.record.IsSaved ? 91 : -1);
1134
1166
  i0.ɵɵadvance();
1135
1167
  i0.ɵɵproperty("Visible", ctx_r1.ShowRefreshDialog)("Scope", ctx_r1.RefreshScope)("ScopeLabel", ctx_r1.RefreshScopeLabel)("AllowSkipDryRun", true)("Provider", ctx_r1.ProviderToUse);
1136
1168
  i0.ɵɵadvance();
@@ -1140,6 +1172,10 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
1140
1172
  let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJQueryFormComponent {
1141
1173
  constructor() {
1142
1174
  super(...arguments);
1175
+ /** Phone width shows the stacked accordions as sections behind one picker (design call 7A). */
1176
+ this.Phone = new PhoneSectionsState(() => this.cdr.markForCheck());
1177
+ /** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */
1178
+ this.HeroDetailsOpen = false;
1143
1179
  this.QueryParameters = [];
1144
1180
  this.QueryFields = [];
1145
1181
  this.QueryEntities = [];
@@ -1206,6 +1242,18 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1206
1242
  // ─── Refresh metadata ───────────────────────────────────────────────────────
1207
1243
  this.ShowRefreshDialog = false;
1208
1244
  }
1245
+ /** Toggles the phone hero between its compact identity row and the full hero. */
1246
+ ToggleHeroDetails() {
1247
+ this.HeroDetailsOpen = !this.HeroDetailsOpen;
1248
+ this.cdr.markForCheck();
1249
+ }
1250
+ /** The phone hero's one-line summary of what the compact hero leaves out. */
1251
+ get HeroSummary() {
1252
+ return JoinHeroSummary([
1253
+ this.CategoryPathDisplay || 'Uncategorized',
1254
+ this.record.IsSaved ? `Metadata: ${this.ExtractionStatusLabel}` : null,
1255
+ ]);
1256
+ }
1209
1257
  /** @deprecated Use {@link QueryParameters}. */
1210
1258
  get queryParameters() {
1211
1259
  return this.QueryParameters;
@@ -1459,6 +1507,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1459
1507
  }
1460
1508
  ngOnDestroy() {
1461
1509
  super.ngOnDestroy();
1510
+ this.Phone.Stop();
1462
1511
  this.destroy$.next();
1463
1512
  this.destroy$.complete();
1464
1513
  }
@@ -2305,11 +2354,11 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
2305
2354
  } if (rf & 2) {
2306
2355
  let _t;
2307
2356
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.SqlEditor = _t.first);
2308
- } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["form", "ngForm"], ["sqlEditor", ""], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "IsSaving", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "saving-overlay"], [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, "mj-input", "query-name-input", 3, "ngModel"], [1, "query-name-display"], [1, "query-header-actions"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", 3, "disabled"], [1, "query-meta-row"], [1, "query-meta-item"], [1, "meta-label"], [1, "meta-dropdown-row"], [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"], ["Variant", "warning"], [1, "query-content"], [1, "query-panel", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "sql-panel-toolbar", 2, "display", "flex", "justify-content", "flex-end", "padding", "4px 0 8px"], ["type", "button", "mjButton", "", "variant", "flat", "title", "Show/hide SQL filters help", 1, "filters-help-btn", 3, "click"], [1, "fa-solid", "fa-question-circle"], [1, "fa-solid", 3, "ngClass"], [1, "sql-panel-content"], ["Severity", "error", 1, "save-diagnostics", 3, "Headline", "Diagnostics", "LocationsClickable"], [1, "sql-editor", 3, "change", "CompositionTokenClick", "language"], [1, "extraction-diagnostics", 3, "Headline", "Diagnostics", "Severity", "LocationsClickable"], [1, "filters-help"], [1, "query-panel", 3, "Expanded"], [1, "panel-body"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-puzzle-piece"], [1, "detail-value"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-clipboard-list"], [1, "fa-solid", "fa-file-code"], ["name", "usesTemplate", 3, "ngModel"], [1, "fa-solid", "fa-calendar-plus"], [1, "fa-solid", "fa-calendar-check"], [3, "Closed", "Applied", "Visible", "Scope", "ScopeLabel", "AllowSkipDryRun", "Provider"], [3, "isVisibleChange", "onClose", "query", "parameters", "isVisible"], [1, "fa-solid", "fa-spinner", "fa-spin", "saving-spinner"], ["name", "queryName", "placeholder", "Enter query name...", 1, "mj-input", "query-name-input", 3, "ngModelChange", "ngModel"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], [1, "meta-dropdown", 3, "ValueChange", "BranchConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch", "Clearable"], ["mjButton", "", "variant", "icon", "title", "New category", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "icon", "title", "Edit category"], ["mjButton", "", "variant", "icon", "title", "Edit category", 3, "click"], [1, "fa-solid", "fa-pen"], ["name", "status", "TextField", "text", "ValueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "status-pill"], [1, "fa-solid"], [1, "extraction-badge", 3, "title"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn", 3, "click"], [1, "fa-solid", "fa-rotate"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModel"], [1, "query-description-text"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModelChange", "ngModel"], [1, "panel-title-row"], [1, "panel-title"], [1, "fa-solid", "fa-code", "panel-icon", "sql-icon"], [1, "panel-badge", "defined"], ["Severity", "error", 1, "save-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "LocationsClickable"], [1, "extraction-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "Severity", "LocationsClickable"], [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, "technical-description-view"], [1, "fa-solid", "fa-book", "panel-icon"], ["name", "technicalDescription", "rows", "8", "placeholder", "Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.", 1, "mj-input", "technical-description-textarea", 3, "ngModelChange", "ngModel"], [1, "technical-description-preview"], [1, "preview-label"], [1, "fa-solid", "fa-eye"], [3, "data", "enableMermaid", "enableHighlight", "enableCollapsibleHeadings", "enableSmartypants"], [1, "panel-loading"], [1, "fa-solid", "fa-sliders", "panel-icon"], [1, "panel-badge", "count"], ["text", "Loading parameters..."], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "panel-toolbar"], [3, "Remove", "Changed", "Parameters", "EditMode"], ["type", "button", 1, "add-item-btn", 3, "click"], [1, "fa-solid", "fa-table", "panel-icon"], ["text", "Loading fields..."], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [3, "Remove", "OpenSourceField", "Changed", "Fields", "EditMode"], [1, "dependents-description"], [1, "card-grid"], [1, "item-card", "dependent-card"], [1, "fa-solid", "fa-arrow-left", "panel-icon", "dependents-icon"], [1, "item-card", "dependent-card", 3, "click"], [1, "item-card-header"], [1, "item-name"], [1, "fa-solid", "fa-arrow-left", "item-name-icon", "dependent-query-icon"], [1, "item-card-body"], [1, "item-meta"], [1, "item-card-footer"], [1, "open-link"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "meta-tag"], [1, "fa-solid", "fa-link"], [1, "meta-code"], [1, "fa-solid", "fa-database", "panel-icon"], ["text", "Loading entities..."], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "item-card"], [1, "fa-solid", "fa-table", "item-name-icon", "entity-icon"], [1, "entity-dropdown-wrapper"], [1, "item-card-actions"], ["TextField", "text", "ValueField", "id", "Placeholder", "Select entity...", 1, "entity-dropdown", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], [1, "fa-solid", "fa-database"], ["title", "How this entity link was detected", 1, "meta-tag"], ["type", "button", "title", "Delete entity", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-info-circle", "panel-icon"], ["name", "reusable", 3, "ngModelChange", "ngModel"], [1, "detail-hint"], [1, "detail-tag", "positive"], [1, "detail-tag", "neutral"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-times"], ["name", "cacheEnabled", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-clock"], ["type", "number", "name", "cacheTTLMinutes", "min", "1", "placeholder", "Default", 1, "mj-input", "detail-input-narrow", 3, "ngModelChange", "ngModel"], ["name", "auditQueryRuns", 3, "ngModelChange", "ngModel"], ["name", "usesTemplate", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-shield-alt", "panel-icon"], ["text", "Loading permissions..."], ["Icon", "fa-solid fa-shield-halved", "Title", "No Permissions Set", "Message", "This query uses default permissions."], [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) {
2309
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Template, 92, 46);
2357
+ } }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["form", "ngForm"], ["sqlEditor", ""], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "IsSaving", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "saving-overlay"], [1, "query-header", "phone-hero"], [1, "query-header-content"], [1, "query-header-top", "phone-hero-top"], [1, "query-name-section"], [1, "fa-solid", "fa-database", "query-title-icon"], ["name", "queryName", "placeholder", "Enter query name...", 1, "mj-input", "query-name-input", 3, "ngModel"], [1, "query-header-actions", "phone-hero-actions"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", "phone-hero-run", 3, "disabled"], [1, "query-meta-row", "phone-hero-detail"], [1, "query-meta-item"], [1, "meta-label"], [1, "meta-dropdown-row"], [1, "meta-value"], [1, "query-meta-item", "phone-hero-hide"], ["name", "status", "TextField", "text", "ValueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModel", "Data", "ValuePrimitive"], [1, "status-pill", 3, "background"], [1, "query-description-row", "phone-hero-detail"], ["type", "button", 1, "phone-hero-summary"], ["Variant", "warning"], [1, "query-content"], [3, "ActiveKeyChange", "Enabled", "ActiveKey"], ["SectionKey", "sql", "SectionTitle", "SQL", "SectionIcon", "fa-solid fa-code", 1, "query-panel", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "sql-panel-toolbar", 2, "display", "flex", "justify-content", "flex-end", "padding", "4px 0 8px"], ["type", "button", "mjButton", "", "variant", "flat", "title", "Show/hide SQL filters help", 1, "filters-help-btn", 3, "click"], [1, "fa-solid", "fa-question-circle"], [1, "fa-solid", 3, "ngClass"], [1, "sql-panel-content"], ["Severity", "error", 1, "save-diagnostics", 3, "Headline", "Diagnostics", "LocationsClickable"], [1, "sql-editor", 3, "change", "CompositionTokenClick", "language"], [1, "extraction-diagnostics", 3, "Headline", "Diagnostics", "Severity", "LocationsClickable"], [1, "filters-help"], ["SectionKey", "description", "SectionTitle", "Technical Description", "SectionIcon", "fa-solid fa-book", 1, "query-panel", 3, "Expanded"], ["SectionKey", "parameters", "SectionTitle", "Parameters", "SectionIcon", "fa-solid fa-sliders", 1, "query-panel", 3, "Expanded"], ["SectionKey", "fields", "SectionTitle", "Fields", "SectionIcon", "fa-solid fa-table", 1, "query-panel", 3, "Expanded"], ["SectionKey", "dependents", "SectionTitle", "Dependent Queries", "SectionIcon", "fa-solid fa-arrow-left", 1, "query-panel", 3, "Expanded"], ["SectionKey", "entities", "SectionTitle", "Entities", "SectionIcon", "fa-solid fa-database", 1, "query-panel", 3, "Expanded"], ["SectionKey", "details", "SectionTitle", "Details", "SectionIcon", "fa-solid fa-info-circle", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "panel-body"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-puzzle-piece"], [1, "detail-value"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-clipboard-list"], [1, "fa-solid", "fa-file-code"], ["name", "usesTemplate", 3, "ngModel"], [1, "fa-solid", "fa-calendar-plus"], [1, "fa-solid", "fa-calendar-check"], ["SectionKey", "permissions", "SectionTitle", "Permissions", "SectionIcon", "fa-solid fa-shield-alt", 1, "query-panel", 3, "Expanded"], [3, "Closed", "Applied", "Visible", "Scope", "ScopeLabel", "AllowSkipDryRun", "Provider"], [3, "isVisibleChange", "onClose", "query", "parameters", "isVisible"], [1, "fa-solid", "fa-spinner", "fa-spin", "saving-spinner"], ["name", "queryName", "placeholder", "Enter query name...", 1, "mj-input", "query-name-input", 3, "ngModelChange", "ngModel"], [1, "query-name-display"], [1, "status-pill", "phone-hero-only"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", "phone-hero-run", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], [1, "meta-dropdown", 3, "ValueChange", "BranchConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch", "Clearable"], ["mjButton", "", "variant", "icon", "title", "New category", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "icon", "title", "Edit category"], ["mjButton", "", "variant", "icon", "title", "Edit category", 3, "click"], [1, "fa-solid", "fa-pen"], ["name", "status", "TextField", "text", "ValueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "status-pill"], [1, "fa-solid"], [1, "extraction-badge", 3, "title"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn", 3, "click"], [1, "fa-solid", "fa-rotate"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModel"], [1, "query-description-text"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModelChange", "ngModel"], ["type", "button", 1, "phone-hero-summary", 3, "click"], [1, "phone-hero-summary-text"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"], [1, "panel-title-row"], [1, "panel-title"], [1, "fa-solid", "fa-code", "panel-icon", "sql-icon"], [1, "panel-badge", "defined"], ["Severity", "error", 1, "save-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "LocationsClickable"], [1, "extraction-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "Severity", "LocationsClickable"], [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"], ["SectionKey", "description", "SectionTitle", "Technical Description", "SectionIcon", "fa-solid fa-book", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "technical-description-view"], [1, "fa-solid", "fa-book", "panel-icon"], ["name", "technicalDescription", "rows", "8", "placeholder", "Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.", 1, "mj-input", "technical-description-textarea", 3, "ngModelChange", "ngModel"], [1, "technical-description-preview"], [1, "preview-label"], [1, "fa-solid", "fa-eye"], [3, "data", "enableMermaid", "enableHighlight", "enableCollapsibleHeadings", "enableSmartypants"], ["SectionKey", "parameters", "SectionTitle", "Parameters", "SectionIcon", "fa-solid fa-sliders", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "panel-loading"], [1, "fa-solid", "fa-sliders", "panel-icon"], [1, "panel-badge", "count"], ["text", "Loading parameters..."], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "panel-toolbar"], [3, "Remove", "Changed", "Parameters", "EditMode"], ["type", "button", 1, "add-item-btn", 3, "click"], ["SectionKey", "fields", "SectionTitle", "Fields", "SectionIcon", "fa-solid fa-table", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "fa-solid", "fa-table", "panel-icon"], ["text", "Loading fields..."], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [3, "Remove", "OpenSourceField", "Changed", "Fields", "EditMode"], ["SectionKey", "dependents", "SectionTitle", "Dependent Queries", "SectionIcon", "fa-solid fa-arrow-left", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "dependents-description"], [1, "card-grid"], [1, "item-card", "dependent-card"], [1, "fa-solid", "fa-arrow-left", "panel-icon", "dependents-icon"], [1, "item-card", "dependent-card", 3, "click"], [1, "item-card-header"], [1, "item-name"], [1, "fa-solid", "fa-arrow-left", "item-name-icon", "dependent-query-icon"], [1, "item-card-body"], [1, "item-meta"], [1, "item-card-footer"], [1, "open-link"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "meta-tag"], [1, "fa-solid", "fa-link"], [1, "meta-code"], ["SectionKey", "entities", "SectionTitle", "Entities", "SectionIcon", "fa-solid fa-database", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "fa-solid", "fa-database", "panel-icon"], ["text", "Loading entities..."], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "item-card"], [1, "fa-solid", "fa-table", "item-name-icon", "entity-icon"], [1, "entity-dropdown-wrapper"], [1, "item-card-actions"], ["TextField", "text", "ValueField", "id", "Placeholder", "Select entity...", 1, "entity-dropdown", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], [1, "fa-solid", "fa-database"], ["title", "How this entity link was detected", 1, "meta-tag"], ["type", "button", "title", "Delete entity", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-info-circle", "panel-icon"], ["name", "reusable", 3, "ngModelChange", "ngModel"], [1, "detail-hint"], [1, "detail-tag", "positive"], [1, "detail-tag", "neutral"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-times"], ["name", "cacheEnabled", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-clock"], ["type", "number", "name", "cacheTTLMinutes", "min", "1", "placeholder", "Default", 1, "mj-input", "detail-input-narrow", 3, "ngModelChange", "ngModel"], ["name", "auditQueryRuns", 3, "ngModelChange", "ngModel"], ["name", "usesTemplate", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-star"], ["SectionKey", "permissions", "SectionTitle", "Permissions", "SectionIcon", "fa-solid fa-shield-alt", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "fa-solid", "fa-shield-alt", "panel-icon"], ["text", "Loading permissions..."], ["Icon", "fa-solid fa-shield-halved", "Title", "No Permissions Set", "Message", "This query uses default permissions."], [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) {
2358
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Template, 94, 53);
2310
2359
  } if (rf & 2) {
2311
2360
  i0.ɵɵconditional(ctx.record ? 0 : -1);
2312
- } }, dependencies: [i1.NgClass, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.MinValidator, i2.NgModel, i2.NgForm, i3.MJEmptyStateComponent, i3.MJAlertComponent, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJDropdownComponent, i3.MJSwitchComponent, i4.MjRecordFormContainerComponent, i4.ExplorerEntityDataGridComponent, i5.CodeEditorComponent, i6.QueryFieldsGridComponent, i7.QueryParametersGridComponent, i8.QueryDiagnosticsComponent, i8.QueryRefreshDialogComponent, i9.LoadingComponent, i10.MarkdownComponent, i11.TreeDropdownComponent, i12.QueryRunDialogComponent], styles: [".k-pane[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface);\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: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\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.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@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.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\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@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: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\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: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\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: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\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.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\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 var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\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: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\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 var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\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.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}", "\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n\n\n.saving-overlay[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving[_ngcontent-%COMP%] {\n pointer-events: none;\n opacity: 0.6;\n}\n\n\n\n\n\n.query-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\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: var(--mj-text-inverse, white);\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.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: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\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: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\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: var(--mj-text-xs);\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: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n\n\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: var(--mj-bg-surface-card);\n}\n\n\n\n\n\n.query-panel[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !important;\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 opacity: 0.7;\n}\n\n.sql-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n .mj-accordion-panel--expanded .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: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n .mj-accordion-panel--expanded .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: var(--mj-text-xs);\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.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 var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n\n.filters-help[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-shadow-md);\n}\n\n.filter-name[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n font-style: italic;\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-warning);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\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: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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: var(--mj-text-xs);\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: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\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: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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.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: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow[_ngcontent-%COMP%] {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.permission-role[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n\n\n\n\n\n\n\n\n.add-item-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\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: var(--mj-text-sm);\n}\n\n.add-item-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n\n\n.technical-description-textarea[_ngcontent-%COMP%] {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview[_ngcontent-%COMP%] {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view[_ngcontent-%COMP%] {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n\n.dependents-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.dependents-description[_ngcontent-%COMP%] {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card[_ngcontent-%COMP%] {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer[_ngcontent-%COMP%] {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover .open-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary-hover);\n}\n\n\n.meta-dropdown-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row[_ngcontent-%COMP%] .meta-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n\n\n.extraction-badge[_ngcontent-%COMP%] {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped[_ngcontent-%COMP%], \n.extraction-badge--none[_ngcontent-%COMP%] { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics[_ngcontent-%COMP%] {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-3);\n}\n\n\n.query-header[_ngcontent-%COMP%] .extraction-badge[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}"] }); }
2361
+ } }, dependencies: [i1.NgClass, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.MinValidator, i2.NgModel, i2.NgForm, i3.MJEmptyStateComponent, i3.MJAlertComponent, i3.MJAccordionSectionsComponent, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJDropdownComponent, i3.MJSwitchComponent, i4.MjRecordFormContainerComponent, i4.ExplorerEntityDataGridComponent, i5.CodeEditorComponent, i6.QueryFieldsGridComponent, i7.QueryParametersGridComponent, i8.QueryDiagnosticsComponent, i8.QueryRefreshDialogComponent, i9.LoadingComponent, i10.MarkdownComponent, i11.TreeDropdownComponent, i12.QueryRunDialogComponent], styles: [".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: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\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.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.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@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.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\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@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: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\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: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\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: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\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.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\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 var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\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: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\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 var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\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.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}", "\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n\n\n.saving-overlay[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving[_ngcontent-%COMP%] {\n pointer-events: none;\n opacity: 0.6;\n}\n\n\n\n\n\n.query-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\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: var(--mj-text-inverse, white);\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.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: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\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: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\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: var(--mj-text-xs);\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: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n\n\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: var(--mj-bg-surface-card);\n}\n\n\n\n\n\n.query-panel[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !important;\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 opacity: 0.7;\n}\n\n.sql-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n .mj-accordion-panel--expanded .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: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n .mj-accordion-panel--expanded .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: var(--mj-text-xs);\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.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 var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n\n.filters-help[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-shadow-md);\n}\n\n.filter-name[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n font-style: italic;\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-warning);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\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: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\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: var(--mj-text-xs);\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: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\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: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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.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: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow[_ngcontent-%COMP%] {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.permission-role[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n\n\n\n\n\n\n\n\n.add-item-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\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: var(--mj-text-sm);\n}\n\n.add-item-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n\n\n.technical-description-textarea[_ngcontent-%COMP%] {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview[_ngcontent-%COMP%] {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view[_ngcontent-%COMP%] {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n\n.dependents-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.dependents-description[_ngcontent-%COMP%] {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card[_ngcontent-%COMP%] {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer[_ngcontent-%COMP%] {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover .open-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary-hover);\n}\n\n\n.meta-dropdown-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row[_ngcontent-%COMP%] .meta-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n\n\n.extraction-badge[_ngcontent-%COMP%] {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped[_ngcontent-%COMP%], \n.extraction-badge--none[_ngcontent-%COMP%] { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics[_ngcontent-%COMP%] {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-3);\n}\n\n\n.query-header[_ngcontent-%COMP%] .extraction-badge[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}\n\n\n@media (max-width: 768px) {\n .query-meta-item[_ngcontent-%COMP%], \n .meta-dropdown-row[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .query-content[_ngcontent-%COMP%] {\n padding: 12px 0;\n background: transparent;\n }\n\n \n .query-name-section[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n row-gap: 4px;\n }\n\n .query-name-display[_ngcontent-%COMP%] {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n \n .query-name-section[_ngcontent-%COMP%] .status-pill.phone-hero-only[_ngcontent-%COMP%] {\n flex-shrink: 0;\n padding: 2px 8px;\n font-size: var(--mj-text-xs);\n }\n\n \n\n\n .query-header.phone-hero[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n color: var(--mj-text-primary); \n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-header-content[_ngcontent-%COMP%] {\n padding: 0;\n gap: 8px;\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-title-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-name-display[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .meta-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .meta-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-description-text[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n }\n\n \n\n\n .query-header.phone-hero[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%] {\n min-height: 44px;\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n.phone-hero-summary[_ngcontent-%COMP%], \n.phone-hero-only[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero[_ngcontent-%COMP%] {\n padding: 12px !important;\n }\n\n \n .phone-hero.hero-compact[_ngcontent-%COMP%] .phone-hero-detail[_ngcontent-%COMP%], \n .phone-hero.hero-view[_ngcontent-%COMP%] .phone-hero-hide[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .phone-hero-only[_ngcontent-%COMP%] {\n display: inline-flex;\n }\n\n \n .phone-hero[_ngcontent-%COMP%] .phone-hero-stats[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status[_ngcontent-%COMP%] {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n \n .phone-hero-status[data-status=\"running\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"][_ngcontent-%COMP%] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .phone-hero[_ngcontent-%COMP%] .phone-hero-run[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n \n\n .phone-hero-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"][_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transition: none;\n }\n}"] }); }
2313
2362
  };
2314
2363
  MJQueryFormComponentExtended = __decorate([
2315
2364
  RegisterClass(BaseFormComponent, 'MJ: Queries')
@@ -2317,10 +2366,10 @@ MJQueryFormComponentExtended = __decorate([
2317
2366
  export { MJQueryFormComponentExtended };
2318
2367
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJQueryFormComponentExtended, [{
2319
2368
  type: Component,
2320
- args: [{ standalone: false, selector: 'mj-query-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [IsSaving]=\"IsSaving\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Saving Overlay -->\n @if (IsSaving) {\n <div class=\"saving-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin saving-spinner\"></i>\n <span>Saving...</span>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"query-header\" [class.content-saving]=\"IsSaving\">\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 <input class=\"mj-input query-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\" />\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 mjButton\n variant=\"primary\"\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 <div class=\"meta-dropdown-row\">\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"CategoryIDAsKey\"\n [SelectableTypes]=\"'branch'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Select category...'\"\n [EnableSearch]=\"true\"\n [Clearable]=\"true\"\n (ValueChange)=\"OnCategoryTreeChange($event)\"\n class=\"meta-dropdown\">\n </mj-tree-dropdown>\n <button mjButton variant=\"icon\" title=\"New category\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (record.CategoryID) {\n <button mjButton variant=\"icon\" title=\"Edit category\" (click)=\"editSelectedCategory()\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n } @else {\n <span class=\"meta-value\">{{ categoryPathDisplay || '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 <mj-dropdown\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 </mj-dropdown>\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\n <!-- Metadata extraction status -->\n @if (record.IsSaved) {\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Metadata</label>\n <div class=\"meta-dropdown-row\">\n <span class=\"extraction-badge\" [class]=\"'extraction-badge ' + ExtractionStatusClass\"\n [title]=\"'Last metadata extraction: ' + ExtractionStatusLabel\">\n {{ ExtractionStatusLabel }}\n </span>\n @if (CanRefreshMetadata) {\n <button mjButton Variant=\"outline\" Size=\"sm\" type=\"button\" class=\"refresh-metadata-btn\"\n (click)=\"OpenRefreshDialog()\" title=\"Re-derive the fields, parameters and entities from the SQL and the database server\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh metadata\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div class=\"query-description-row\">\n @if (EditMode) {\n <textarea class=\"mj-input query-description-input\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n rows=\"2\"\n placeholder=\"Enter query description...\">\n </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 <mj-alert Variant=\"warning\">\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </mj-alert>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" [class.content-saving]=\"IsSaving\">\n\n <!-- SQL Query Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\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\">&mdash; Defined</span>\n }\n </span>\n </span>\n </ng-template>\n\n <div class=\"sql-panel-toolbar\" style=\"display: flex; justify-content: flex-end; padding: 4px 0 8px;\">\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n (click)=\"toggleFiltersHelp()\"\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 </div>\n\n <div class=\"sql-panel-content\">\n @if (SaveDiagnostics.length > 0 || SaveDiagnosticsHeadline) {\n <mj-query-diagnostics class=\"save-diagnostics\"\n [Headline]=\"SaveDiagnosticsHeadline\"\n [Diagnostics]=\"SaveDiagnostics\"\n Severity=\"error\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n (CompositionTokenClick)=\"onCompositionTokenClick($event)\"\n [language]=\"'sql'\"\n class=\"sql-editor\">\n </mj-code-editor>\n\n @if (SaveDiagnostics.length === 0 && ExtractionDiagnostics.length > 0) {\n <mj-query-diagnostics class=\"extraction-diagnostics\"\n [Headline]=\"'Last metadata extraction: ' + ExtractionStatusLabel\"\n [Diagnostics]=\"ExtractionDiagnostics\"\n [Severity]=\"ExtractionSeverity\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\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 </mj-accordion-panel>\n\n <!-- Technical Description Panel -->\n @if (record.TechnicalDescription || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"technicalDescriptionPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-book panel-icon\"></i>\n Technical Description\n @if (record.TechnicalDescription) {\n <span class=\"panel-badge defined\">&mdash; Documented</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (EditMode) {\n <textarea class=\"mj-input technical-description-textarea\"\n [(ngModel)]=\"record.TechnicalDescription\"\n name=\"technicalDescription\"\n rows=\"8\"\n placeholder=\"Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.\">\n </textarea>\n @if (record.TechnicalDescription) {\n <div class=\"technical-description-preview\">\n <div class=\"preview-label\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n } @else {\n <div class=\"technical-description-view\">\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Parameters Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-sliders\"\n Title=\"No Parameters Defined\"\n Message=\"Parameters are found in the SQL when you save. Add one here to describe it before it is used.\"\n [ActionText]=\"EditMode ? 'Add First Parameter' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addParameter()\" />\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 <mj-query-parameters-grid\n [Parameters]=\"queryParameters\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteParameter($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-table\"\n Title=\"No Fields Defined\"\n Message=\"Output fields are described by the database server when you save. Add one here to annotate it.\"\n [ActionText]=\"EditMode ? 'Add First Field' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addField()\" />\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 <mj-query-fields-grid\n [Fields]=\"queryFields\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteField($event)\"\n (OpenSourceField)=\"OnOpenSourceField($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Dependent Queries Panel -->\n @if (record.IsSaved && DependentQueries.length > 0) {\n <mj-accordion-panel\n [(Expanded)]=\"dependentsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-arrow-left panel-icon dependents-icon\"></i>\n Dependent Queries\n <span class=\"panel-badge count\">{{ DependentQueries.length }}</span>\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"dependents-description\">\n These queries reference this query via <code>{{\"{{query:\\\"...\\\"}}\"}} </code> composition syntax.\n </div>\n <div class=\"card-grid\">\n @for (dep of DependentQueries; track dep.ID) {\n <div class=\"item-card dependent-card\" (click)=\"onDependentQueryClick(dep)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-arrow-left item-name-icon dependent-query-icon\"></i>\n {{ dep.Query }}\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (dep.ReferencePath) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-link\"></i> {{ dep.ReferencePath }}\n </span>\n </div>\n }\n @if (dep.Alias) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Alias:</strong> <code class=\"meta-code\">{{ dep.Alias }}</code>\n </span>\n </div>\n }\n </div>\n <div class=\"item-card-footer\">\n <span class=\"open-link\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-database\"\n Title=\"No Entities Tracked\"\n Message=\"Track which entities this query uses for documentation.\"\n [ActionText]=\"EditMode ? 'Add First Entity' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addEntity()\" />\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 || $index) {\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 <mj-dropdown\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + (entity.ID || $index)\"\n [Data]=\"getEntityOptions()\"\n TextField=\"text\"\n ValueField=\"id\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </mj-dropdown>\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 @if (entity.DetectionMethod) {\n <span class=\"meta-tag\" title=\"How this entity link was detected\">\n <strong>Detected by:</strong> {{ entity.DetectionMethod }}\n </span>\n }\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 </mj-accordion-panel>\n }\n\n <!-- Details Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\n <!-- Reusable -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-puzzle-piece\"></i> Reusable\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.Reusable\" name=\"reusable\"></mj-switch>\n <div class=\"detail-hint\">Allow other queries to reference this query using composition syntax</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.Reusable) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Reusable</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Not Reusable</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache Enabled -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-bolt\"></i> Cache Enabled\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.CacheEnabled\" name=\"cacheEnabled\"></mj-switch>\n <div class=\"detail-hint\">Cache query results in memory to reduce database load on repeated runs</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.CacheEnabled) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Caching On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Caching Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache TTL -->\n @if (record.CacheEnabled) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clock\"></i> Cache TTL (Minutes)\n </label>\n @if (EditMode) {\n <input class=\"mj-input detail-input-narrow\"\n type=\"number\"\n [(ngModel)]=\"record.CacheTTLMinutes\"\n name=\"cacheTTLMinutes\"\n min=\"1\"\n placeholder=\"Default\" />\n <div class=\"detail-hint\">How long cached results remain valid. Leave blank for default TTL.</div>\n } @else {\n <div class=\"detail-value\">{{ record.CacheTTLMinutes != null ? record.CacheTTLMinutes + ' min' : 'Default' }}</div>\n }\n </div>\n }\n\n <!-- Audit Query Runs -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clipboard-list\"></i> Audit Runs\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.AuditQueryRuns\" name=\"auditQueryRuns\"></mj-switch>\n <div class=\"detail-hint\">Log all executions of this query to the Audit Log for tracking and compliance</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.AuditQueryRuns) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Auditing On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Auditing Off</span>\n }\n </div>\n }\n </div>\n\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 <mj-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></mj-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 </mj-accordion-panel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-shield-halved\"\n Title=\"No Permissions Set\"\n Message=\"This query uses default permissions.\" />\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 </mj-accordion-panel>\n }\n\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Refresh metadata: always a dry run first unless the user turned that off -->\n<mj-query-refresh-dialog\n [Visible]=\"ShowRefreshDialog\"\n [Scope]=\"RefreshScope\"\n [ScopeLabel]=\"RefreshScopeLabel\"\n [AllowSkipDryRun]=\"true\"\n [Provider]=\"ProviderToUse\"\n (Closed)=\"OnRefreshDialogClosed()\"\n (Applied)=\"OnRefreshApplied($event)\" />\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", styles: [".k-pane {\n background-color: var(--mj-bg-surface);\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: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\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.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@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: var(--mj-bg-surface);\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: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\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: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\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: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\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: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\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 var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\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: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\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 var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\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: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\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: var(--mj-status-warning);\n color: var(--mj-text-primary);\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: var(--mj-status-success);\n color: var(--mj-text-inverse);\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: var(--mj-text-muted);\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 Saving Overlay\n ======================================== */\n\n.saving-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving {\n pointer-events: none;\n opacity: 0.6;\n}\n\n/* ========================================\n Header Section \u2014 matches Query Browser gradient\n ======================================== */\n\n.query-header {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\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: var(--mj-text-inverse, white);\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: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\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: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill i {\n font-size: var(--mj-text-xs);\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: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n/* ========================================\n Status Warning Banner\n ======================================== */\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: var(--mj-bg-surface-card);\n}\n\n/* ========================================\n Accordion Panel Overrides \u2014 Modern Style\n ======================================== */\n\n.query-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n::ng-deep .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n::ng-deep .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n::ng-deep .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n::ng-deep .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !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 opacity: 0.7;\n}\n\n.sql-icon {\n color: var(--mj-brand-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .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: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n::ng-deep .mj-accordion-panel--expanded .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: var(--mj-text-xs);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n/* Filters Help */\n.filters-help {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-shadow-md);\n}\n\n.filter-name {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required {\n border-left: 3px solid var(--mj-status-warning);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon {\n color: var(--mj-status-success);\n}\n\n.item-badges {\n display: flex;\n gap: 6px;\n}\n\n.item-badge {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n}\n\n.item-description {\n margin-bottom: 8px;\n}\n\n.item-meta {\n display: flex;\n gap: 16px;\n font-size: var(--mj-text-xs);\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code {\n background: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\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: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info {\n flex: 1;\n}\n\n.permission-role {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n/* ========================================\n Empty State\n ======================================== */\n\n/* ========================================\n Buttons\n ======================================== */\n\n.add-item-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\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: var(--mj-text-sm);\n}\n\n.add-item-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\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\n/* ========================================\n Technical Description Panel\n ======================================== */\n\n.technical-description-textarea {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n/* Dependent Queries */\n.dependents-icon {\n color: var(--mj-status-warning);\n}\n\n.dependents-description {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description code {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card:hover .open-link {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Category selector row: tree-dropdown + create/edit icon buttons */\n.meta-dropdown-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row .meta-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n/* \u2500\u2500\u2500 Metadata extraction status \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.extraction-badge {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped,\n.extraction-badge--none { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics {\n margin-top: var(--mj-space-3);\n}\n\n/* The header sits on the brand colour: a light pill and a light outline button stay readable. */\n.query-header .extraction-badge {\n background: var(--mj-bg-surface);\n}\n\n.query-header button.refresh-metadata-btn {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header button.refresh-metadata-btn:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}\n"] }]
2369
+ args: [{ standalone: false, selector: 'mj-query-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [IsSaving]=\"IsSaving\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Saving Overlay -->\n @if (IsSaving) {\n <div class=\"saving-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin saving-spinner\"></i>\n <span>Saving...</span>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"query-header phone-hero\" [class.content-saving]=\"IsSaving\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\">\n <div class=\"query-header-content\">\n <!-- Top Row: Name and Run Button -->\n <div class=\"query-header-top phone-hero-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 <input class=\"mj-input query-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\" />\n } @else {\n <h4 class=\"query-name-display\">{{ record.Name || 'Untitled Query' }}</h4>\n <span class=\"status-pill phone-hero-only\" [style.background]=\"getStatusBadgeColor()\">{{ record.Status || 'Unknown' }}</span>\n }\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"query-header-actions phone-hero-actions\">\n @if (record.ID) {\n <button mjButton\n variant=\"primary\"\n [disabled]=\"EditMode || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\"\n class=\"run-query-btn phone-hero-run\">\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 phone-hero-detail\">\n <!-- Category -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Category</label>\n @if (EditMode) {\n <div class=\"meta-dropdown-row\">\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"CategoryIDAsKey\"\n [SelectableTypes]=\"'branch'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Select category...'\"\n [EnableSearch]=\"true\"\n [Clearable]=\"true\"\n (ValueChange)=\"OnCategoryTreeChange($event)\"\n class=\"meta-dropdown\">\n </mj-tree-dropdown>\n <button mjButton variant=\"icon\" title=\"New category\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (record.CategoryID) {\n <button mjButton variant=\"icon\" title=\"Edit category\" (click)=\"editSelectedCategory()\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n } @else {\n <span class=\"meta-value\">{{ categoryPathDisplay || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div class=\"query-meta-item phone-hero-hide\">\n <label class=\"meta-label\">Status</label>\n @if (EditMode) {\n <mj-dropdown\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 </mj-dropdown>\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\n <!-- Metadata extraction status -->\n @if (record.IsSaved) {\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Metadata</label>\n <div class=\"meta-dropdown-row\">\n <span class=\"extraction-badge\" [class]=\"'extraction-badge ' + ExtractionStatusClass\"\n [title]=\"'Last metadata extraction: ' + ExtractionStatusLabel\">\n {{ ExtractionStatusLabel }}\n </span>\n @if (CanRefreshMetadata) {\n <button mjButton Variant=\"outline\" Size=\"sm\" type=\"button\" class=\"refresh-metadata-btn\"\n (click)=\"OpenRefreshDialog()\" title=\"Re-derive the fields, parameters and entities from the SQL and the database server\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh metadata\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div class=\"query-description-row phone-hero-detail\">\n @if (EditMode) {\n <textarea class=\"mj-input query-description-input\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n rows=\"2\"\n placeholder=\"Enter query description...\">\n </textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <mj-alert Variant=\"warning\">\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </mj-alert>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" [class.content-saving]=\"IsSaving\">\n <!-- Phone: one section at a time behind a picker; desktop keeps the accordions -->\n <mj-accordion-sections [Enabled]=\"Phone.IsPhone\" [ActiveKey]=\"Phone.Section\" (ActiveKeyChange)=\"Phone.Pick($event)\">\n\n <!-- SQL Query Panel -->\n <mj-accordion-panel SectionKey=\"sql\" SectionTitle=\"SQL\" SectionIcon=\"fa-solid fa-code\"\n [(Expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\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\">&mdash; Defined</span>\n }\n </span>\n </span>\n </ng-template>\n\n <div class=\"sql-panel-toolbar\" style=\"display: flex; justify-content: flex-end; padding: 4px 0 8px;\">\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n (click)=\"toggleFiltersHelp()\"\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 </div>\n\n <div class=\"sql-panel-content\">\n @if (SaveDiagnostics.length > 0 || SaveDiagnosticsHeadline) {\n <mj-query-diagnostics class=\"save-diagnostics\"\n [Headline]=\"SaveDiagnosticsHeadline\"\n [Diagnostics]=\"SaveDiagnostics\"\n Severity=\"error\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n (CompositionTokenClick)=\"onCompositionTokenClick($event)\"\n [language]=\"'sql'\"\n class=\"sql-editor\">\n </mj-code-editor>\n\n @if (SaveDiagnostics.length === 0 && ExtractionDiagnostics.length > 0) {\n <mj-query-diagnostics class=\"extraction-diagnostics\"\n [Headline]=\"'Last metadata extraction: ' + ExtractionStatusLabel\"\n [Diagnostics]=\"ExtractionDiagnostics\"\n [Severity]=\"ExtractionSeverity\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\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 </mj-accordion-panel>\n\n <!-- Technical Description Panel -->\n @if (record.TechnicalDescription || EditMode) {\n <mj-accordion-panel SectionKey=\"description\" SectionTitle=\"Technical Description\" SectionIcon=\"fa-solid fa-book\"\n [(Expanded)]=\"technicalDescriptionPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-book panel-icon\"></i>\n Technical Description\n @if (record.TechnicalDescription) {\n <span class=\"panel-badge defined\">&mdash; Documented</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (EditMode) {\n <textarea class=\"mj-input technical-description-textarea\"\n [(ngModel)]=\"record.TechnicalDescription\"\n name=\"technicalDescription\"\n rows=\"8\"\n placeholder=\"Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.\">\n </textarea>\n @if (record.TechnicalDescription) {\n <div class=\"technical-description-preview\">\n <div class=\"preview-label\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n } @else {\n <div class=\"technical-description-view\">\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Parameters Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel SectionKey=\"parameters\" SectionTitle=\"Parameters\" SectionIcon=\"fa-solid fa-sliders\"\n [(Expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-sliders\"\n Title=\"No Parameters Defined\"\n Message=\"Parameters are found in the SQL when you save. Add one here to describe it before it is used.\"\n [ActionText]=\"EditMode ? 'Add First Parameter' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addParameter()\" />\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 <mj-query-parameters-grid\n [Parameters]=\"queryParameters\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteParameter($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel SectionKey=\"fields\" SectionTitle=\"Fields\" SectionIcon=\"fa-solid fa-table\"\n [(Expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-table\"\n Title=\"No Fields Defined\"\n Message=\"Output fields are described by the database server when you save. Add one here to annotate it.\"\n [ActionText]=\"EditMode ? 'Add First Field' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addField()\" />\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 <mj-query-fields-grid\n [Fields]=\"queryFields\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteField($event)\"\n (OpenSourceField)=\"OnOpenSourceField($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Dependent Queries Panel -->\n @if (record.IsSaved && DependentQueries.length > 0) {\n <mj-accordion-panel SectionKey=\"dependents\" SectionTitle=\"Dependent Queries\" SectionIcon=\"fa-solid fa-arrow-left\"\n [(Expanded)]=\"dependentsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-arrow-left panel-icon dependents-icon\"></i>\n Dependent Queries\n <span class=\"panel-badge count\">{{ DependentQueries.length }}</span>\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"dependents-description\">\n These queries reference this query via <code>{{\"{{query:\\\"...\\\"}}\"}} </code> composition syntax.\n </div>\n <div class=\"card-grid\">\n @for (dep of DependentQueries; track dep.ID) {\n <div class=\"item-card dependent-card\" (click)=\"onDependentQueryClick(dep)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-arrow-left item-name-icon dependent-query-icon\"></i>\n {{ dep.Query }}\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (dep.ReferencePath) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-link\"></i> {{ dep.ReferencePath }}\n </span>\n </div>\n }\n @if (dep.Alias) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Alias:</strong> <code class=\"meta-code\">{{ dep.Alias }}</code>\n </span>\n </div>\n }\n </div>\n <div class=\"item-card-footer\">\n <span class=\"open-link\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel SectionKey=\"entities\" SectionTitle=\"Entities\" SectionIcon=\"fa-solid fa-database\"\n [(Expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-database\"\n Title=\"No Entities Tracked\"\n Message=\"Track which entities this query uses for documentation.\"\n [ActionText]=\"EditMode ? 'Add First Entity' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addEntity()\" />\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 || $index) {\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 <mj-dropdown\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + (entity.ID || $index)\"\n [Data]=\"getEntityOptions()\"\n TextField=\"text\"\n ValueField=\"id\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </mj-dropdown>\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 @if (entity.DetectionMethod) {\n <span class=\"meta-tag\" title=\"How this entity link was detected\">\n <strong>Detected by:</strong> {{ entity.DetectionMethod }}\n </span>\n }\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 </mj-accordion-panel>\n }\n\n <!-- Details Panel -->\n <mj-accordion-panel SectionKey=\"details\" SectionTitle=\"Details\" SectionIcon=\"fa-solid fa-info-circle\"\n [(Expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\n <!-- Reusable -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-puzzle-piece\"></i> Reusable\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.Reusable\" name=\"reusable\"></mj-switch>\n <div class=\"detail-hint\">Allow other queries to reference this query using composition syntax</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.Reusable) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Reusable</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Not Reusable</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache Enabled -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-bolt\"></i> Cache Enabled\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.CacheEnabled\" name=\"cacheEnabled\"></mj-switch>\n <div class=\"detail-hint\">Cache query results in memory to reduce database load on repeated runs</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.CacheEnabled) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Caching On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Caching Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache TTL -->\n @if (record.CacheEnabled) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clock\"></i> Cache TTL (Minutes)\n </label>\n @if (EditMode) {\n <input class=\"mj-input detail-input-narrow\"\n type=\"number\"\n [(ngModel)]=\"record.CacheTTLMinutes\"\n name=\"cacheTTLMinutes\"\n min=\"1\"\n placeholder=\"Default\" />\n <div class=\"detail-hint\">How long cached results remain valid. Leave blank for default TTL.</div>\n } @else {\n <div class=\"detail-value\">{{ record.CacheTTLMinutes != null ? record.CacheTTLMinutes + ' min' : 'Default' }}</div>\n }\n </div>\n }\n\n <!-- Audit Query Runs -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clipboard-list\"></i> Audit Runs\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.AuditQueryRuns\" name=\"auditQueryRuns\"></mj-switch>\n <div class=\"detail-hint\">Log all executions of this query to the Audit Log for tracking and compliance</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.AuditQueryRuns) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Auditing On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Auditing Off</span>\n }\n </div>\n }\n </div>\n\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 <mj-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></mj-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 </mj-accordion-panel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"permissions\" SectionTitle=\"Permissions\" SectionIcon=\"fa-solid fa-shield-alt\"\n [(Expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n 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 <mj-empty-state Icon=\"fa-solid fa-shield-halved\"\n Title=\"No Permissions Set\"\n Message=\"This query uses default permissions.\" />\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 </mj-accordion-panel>\n }\n </mj-accordion-sections>\n\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Refresh metadata: always a dry run first unless the user turned that off -->\n<mj-query-refresh-dialog\n [Visible]=\"ShowRefreshDialog\"\n [Scope]=\"RefreshScope\"\n [ScopeLabel]=\"RefreshScopeLabel\"\n [AllowSkipDryRun]=\"true\"\n [Provider]=\"ProviderToUse\"\n (Closed)=\"OnRefreshDialogClosed()\"\n (Applied)=\"OnRefreshApplied($event)\" />\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", styles: [".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: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\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.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@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: var(--mj-bg-surface);\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: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\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: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\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: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\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: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\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 var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\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: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\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 var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\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: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\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: var(--mj-status-warning);\n color: var(--mj-text-primary);\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: var(--mj-status-success);\n color: var(--mj-text-inverse);\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: var(--mj-text-muted);\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 Saving Overlay\n ======================================== */\n\n.saving-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving {\n pointer-events: none;\n opacity: 0.6;\n}\n\n/* ========================================\n Header Section \u2014 matches Query Browser gradient\n ======================================== */\n\n.query-header {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\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: var(--mj-text-inverse, white);\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: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\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: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill i {\n font-size: var(--mj-text-xs);\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: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n/* ========================================\n Status Warning Banner\n ======================================== */\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: var(--mj-bg-surface-card);\n}\n\n/* ========================================\n Accordion Panel Overrides \u2014 Modern Style\n ======================================== */\n\n.query-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n::ng-deep .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n::ng-deep .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n::ng-deep .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n::ng-deep .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !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 opacity: 0.7;\n}\n\n.sql-icon {\n color: var(--mj-brand-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .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: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n::ng-deep .mj-accordion-panel--expanded .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: var(--mj-text-xs);\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 var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n/* Filters Help */\n.filters-help {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\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: var(--mj-shadow-md);\n}\n\n.filter-name {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\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: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required {\n border-left: 3px solid var(--mj-status-warning);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon {\n color: var(--mj-status-success);\n}\n\n.item-badges {\n display: flex;\n gap: 6px;\n}\n\n.item-badge {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n}\n\n.item-description {\n margin-bottom: 8px;\n}\n\n.item-meta {\n display: flex;\n gap: 16px;\n font-size: var(--mj-text-xs);\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code {\n background: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\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: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\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: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\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: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\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: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info {\n flex: 1;\n}\n\n.permission-role {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n/* ========================================\n Empty State\n ======================================== */\n\n/* ========================================\n Buttons\n ======================================== */\n\n.add-item-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\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: var(--mj-text-sm);\n}\n\n.add-item-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\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\n/* ========================================\n Technical Description Panel\n ======================================== */\n\n.technical-description-textarea {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n/* Dependent Queries */\n.dependents-icon {\n color: var(--mj-status-warning);\n}\n\n.dependents-description {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description code {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card:hover .open-link {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Category selector row: tree-dropdown + create/edit icon buttons */\n.meta-dropdown-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row .meta-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n/* \u2500\u2500\u2500 Metadata extraction status \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.extraction-badge {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped,\n.extraction-badge--none { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics {\n margin-top: var(--mj-space-3);\n}\n\n/* The header sits on the brand colour: a light pill and a light outline button stay readable. */\n.query-header .extraction-badge {\n background: var(--mj-bg-surface);\n}\n\n.query-header button.refresh-metadata-btn {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header button.refresh-metadata-btn:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}\n\n/* Phone (375px): the metadata rows wrap instead of clipping their trailing button. */\n@media (max-width: 768px) {\n .query-meta-item,\n .meta-dropdown-row {\n flex-wrap: wrap;\n }\n}\n\n/* Phone: sections sit on the page's 12px gutter, so the content area drops its side padding\n (it would indent every section twice). */\n@media (max-width: 768px) {\n .query-content {\n padding: 12px 0;\n background: transparent;\n }\n\n /* The identity row shows the whole name on a phone instead of an ellipsis */\n .query-name-section {\n flex-wrap: wrap;\n row-gap: 4px;\n }\n\n .query-name-display {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n /* The identity row's status chip is compact, like the other phone heroes' */\n .query-name-section .status-pill.phone-hero-only {\n flex-shrink: 0;\n padding: 2px 8px;\n font-size: var(--mj-text-xs);\n }\n\n /* The phone hero matches the other forms' heroes (Actions, AI Prompts, Templates): a card\n surface with a bottom rule and the standard text tokens, in place of the desktop brand bar.\n The phone hero's own 12px is the only gutter. */\n .query-header.phone-hero {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n color: var(--mj-text-primary); /* the summary line inherits this; white would vanish in light theme */\n }\n\n .query-header.phone-hero .query-header-content {\n padding: 0;\n gap: 8px;\n }\n\n .query-header.phone-hero .query-title-icon {\n color: var(--mj-brand-primary);\n }\n\n .query-header.phone-hero .query-name-display {\n color: var(--mj-text-secondary);\n }\n\n .query-header.phone-hero .meta-label {\n color: var(--mj-text-muted);\n }\n\n .query-header.phone-hero .meta-value {\n color: var(--mj-text-primary);\n }\n\n .query-header.phone-hero .query-description-text {\n color: var(--mj-text-secondary);\n }\n\n /* The desktop rule above styles this button for the brand bar (inverse text); on the card\n surface that text vanishes, so it takes the standard secondary-on-surface pair. Size=\"sm\"\n is 34px tall; a touch target is 44px, like the hero's Run. */\n .query-header.phone-hero button.refresh-metadata-btn {\n min-height: 44px;\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n }\n\n .query-header.phone-hero button.refresh-metadata-btn:hover {\n background: var(--mj-bg-surface-hover);\n }\n}\n", "/* ============================================\n PHONE HERO (design call 6A), shared by the custom forms that own a hero.\n Under 768px the hero keeps icon, name, status and the primary action. Anything tagged\n .phone-hero-detail hides while the hero is compact and comes back when the summary line is\n tapped. Edit mode is untouched: the host only gets .hero-compact / .hero-view in view mode.\n Host: .phone-hero [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\"\n Tags: .phone-hero-detail hidden while compact\n .phone-hero-hide hidden in view mode (said elsewhere on the phone hero)\n .phone-hero-only shown only on phones\n .phone-hero-top a title + action row that stacks\n .phone-hero-actions / .phone-hero-run the primary action, full width at 44px\n .phone-hero-stats a metric row that reflows to a 2-up grid when the hero is expanded\n .phone-hero-status a status chip in the identity row (with .phone-hero-only)\n ============================================ */\n.phone-hero-summary,\n.phone-hero-only {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero {\n padding: 12px !important;\n }\n\n /* !important: several heroes carry inline display/padding styles on these rows */\n .phone-hero.hero-compact .phone-hero-detail,\n .phone-hero.hero-view .phone-hero-hide {\n display: none !important;\n }\n\n .phone-hero-only {\n display: inline-flex;\n }\n\n /* Lower specificity than the compact rule above, so a compact hero still hides it */\n .phone-hero .phone-hero-stats {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n /* data-status comes from RunStatusKind(); the -text / -bg pairs keep contrast in both themes */\n .phone-hero-status[data-status=\"running\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions {\n width: 100%;\n }\n\n .phone-hero .phone-hero-run {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n /* Inherits the hero's text colour, so it reads on light heroes and on the brand-blue\n Queries hero alike; a muted token would be grey on blue. */\n .phone-hero-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary > i {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"] > i {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary > i {\n transition: none;\n }\n}\n"] }]
2321
2370
  }], null, { SqlEditor: [{
2322
2371
  type: ViewChild,
2323
2372
  args: ['sqlEditor']
2324
2373
  }] }); })();
2325
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJQueryFormComponentExtended, { className: "MJQueryFormComponentExtended", filePath: "src/lib/custom/Queries/query-form.component.ts", lineNumber: 30 }); })();
2374
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJQueryFormComponentExtended, { className: "MJQueryFormComponentExtended", filePath: "src/lib/custom/Queries/query-form.component.ts", lineNumber: 32 }); })();
2326
2375
  //# sourceMappingURL=query-form.component.js.map