@memberjunction/ng-core-entity-forms 5.43.0 → 5.45.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 (328) hide show
  1. package/dist/__tests__/model-prediction.logic.test.d.ts +2 -0
  2. package/dist/__tests__/model-prediction.logic.test.d.ts.map +1 -0
  3. package/dist/__tests__/model-prediction.logic.test.js +140 -0
  4. package/dist/__tests__/model-prediction.logic.test.js.map +1 -0
  5. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +79 -105
  6. package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js +7 -10
  8. package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.js.map +1 -1
  9. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  10. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +46 -51
  11. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +2 -0
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +300 -378
  15. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  16. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +22 -29
  17. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +15 -17
  19. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  20. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +27 -34
  21. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +11 -0
  23. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +48 -47
  25. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +438 -454
  27. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  28. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +48 -51
  29. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  30. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +253 -282
  31. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  32. package/dist/lib/custom/Actions/action-execution-log-form.component.js +24 -33
  33. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  34. package/dist/lib/custom/Actions/action-form.component.js +263 -311
  35. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  36. package/dist/lib/custom/Entities/entity-form.component.d.ts +6 -0
  37. package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
  38. package/dist/lib/custom/Entities/entity-form.component.js +475 -493
  39. package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
  40. package/dist/lib/custom/Lists/list-form.component.d.ts +1 -0
  41. package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
  42. package/dist/lib/custom/Lists/list-form.component.js +126 -175
  43. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  44. package/dist/lib/custom/Queries/query-form.component.d.ts +1 -0
  45. package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
  46. package/dist/lib/custom/Queries/query-form.component.js +196 -252
  47. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  48. package/dist/lib/custom/Queries/query-run-dialog.component.js +19 -23
  49. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  50. package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js +23 -24
  51. package/dist/lib/custom/SearchScopes/searchscopeprovider-form.component.js.map +1 -1
  52. package/dist/lib/custom/Templates/template-param-dialog.component.js +14 -23
  53. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  54. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +1 -0
  55. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  56. package/dist/lib/custom/Templates/template-params-grid.component.js +5 -3
  57. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  58. package/dist/lib/custom/Templates/templates-form.component.d.ts +2 -1
  59. package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
  60. package/dist/lib/custom/Templates/templates-form.component.js +10 -4
  61. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  62. package/dist/lib/custom/Tests/test-form.component.d.ts +2 -1
  63. package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
  64. package/dist/lib/custom/Tests/test-form.component.js +105 -133
  65. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  66. package/dist/lib/custom/Tests/test-run-form.component.js +187 -205
  67. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  68. package/dist/lib/custom/Tests/test-suite-form.component.d.ts +10 -1
  69. package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
  70. package/dist/lib/custom/Tests/test-suite-form.component.js +417 -492
  71. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  72. package/dist/lib/custom/Tests/test-suite-run-form.component.js +100 -126
  73. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  74. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +166 -184
  75. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  76. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts +15 -1
  77. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.d.ts.map +1 -1
  78. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js +283 -158
  79. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-detail.component.js.map +1 -1
  80. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts +10 -0
  81. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.d.ts.map +1 -1
  82. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js +80 -26
  83. package/dist/lib/custom/ai-agent-run/ai-agent-run-step-node.component.js.map +1 -1
  84. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  85. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +11 -18
  86. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  87. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +0 -2
  88. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  89. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +263 -258
  90. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  91. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts +108 -0
  92. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.d.ts.map +1 -0
  93. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js +665 -0
  94. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.component.js.map +1 -0
  95. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts +94 -0
  96. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.d.ts.map +1 -0
  97. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js +257 -0
  98. package/dist/lib/custom/ai-agent-run/flow/agent-run-flow.model.js.map +1 -0
  99. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts +38 -0
  100. package/dist/lib/custom/ai-agent-run/flow/constellation.component.d.ts.map +1 -0
  101. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js +200 -0
  102. package/dist/lib/custom/ai-agent-run/flow/constellation.component.js.map +1 -0
  103. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts +44 -0
  104. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.d.ts.map +1 -0
  105. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js +180 -0
  106. package/dist/lib/custom/ai-agent-run/flow/flame-cascade.component.js.map +1 -0
  107. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts +12 -0
  108. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.d.ts.map +1 -0
  109. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js +46 -0
  110. package/dist/lib/custom/ai-agent-run/flow/flow-svg.util.js.map +1 -0
  111. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts +64 -0
  112. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.d.ts.map +1 -0
  113. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js +267 -0
  114. package/dist/lib/custom/ai-agent-run/flow/flowchart.component.js.map +1 -0
  115. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts +53 -0
  116. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.d.ts.map +1 -0
  117. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js +111 -0
  118. package/dist/lib/custom/ai-agent-run/flow/pan-zoom.js.map +1 -0
  119. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts +42 -0
  120. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.d.ts.map +1 -0
  121. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js +193 -0
  122. package/dist/lib/custom/ai-agent-run/flow/subway-lines.component.js.map +1 -0
  123. package/dist/lib/custom/custom-forms.module.d.ts +58 -51
  124. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  125. package/dist/lib/custom/custom-forms.module.js +52 -13
  126. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  127. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +2 -0
  128. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  129. package/dist/lib/custom/shared/entity-selector-dialog.component.js +25 -25
  130. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  131. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  132. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +302 -216
  133. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  134. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js +25 -21
  135. package/dist/lib/generated/Entities/MJAIAgentChannel/mjaiagentchannel.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.d.ts.map +1 -1
  137. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js +152 -78
  138. package/dist/lib/generated/Entities/MJAIAgentRun/mjaiagentrun.form.component.js.map +1 -1
  139. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js +23 -21
  140. package/dist/lib/generated/Entities/MJAIAgentRunStep/mjaiagentrunstep.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.d.ts.map +1 -1
  142. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js +56 -34
  143. package/dist/lib/generated/Entities/MJAIAgentSession/mjaiagentsession.form.component.js.map +1 -1
  144. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts +10 -0
  145. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.d.ts.map +1 -0
  146. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js +66 -0
  147. package/dist/lib/generated/Entities/MJAIAgentSkill/mjaiagentskill.form.component.js.map +1 -0
  148. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.d.ts.map +1 -1
  149. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +55 -19
  150. package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
  151. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
  152. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +46 -10
  153. package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
  154. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts +10 -0
  155. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.d.ts.map +1 -0
  156. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js +169 -0
  157. package/dist/lib/generated/Entities/MJAISkill/mjaiskill.form.component.js.map +1 -0
  158. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts +10 -0
  159. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.d.ts.map +1 -0
  160. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js +64 -0
  161. package/dist/lib/generated/Entities/MJAISkillAction/mjaiskillaction.form.component.js.map +1 -0
  162. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts +10 -0
  163. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.d.ts.map +1 -0
  164. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js +82 -0
  165. package/dist/lib/generated/Entities/MJAISkillPermission/mjaiskillpermission.form.component.js.map +1 -0
  166. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts +10 -0
  167. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.d.ts.map +1 -0
  168. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js +64 -0
  169. package/dist/lib/generated/Entities/MJAISkillSubAgent/mjaiskillsubagent.form.component.js.map +1 -0
  170. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
  171. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +35 -17
  172. package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
  173. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.d.ts.map +1 -1
  174. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js +23 -5
  175. package/dist/lib/generated/Entities/MJActionExecutionLog/mjactionexecutionlog.form.component.js.map +1 -1
  176. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.d.ts.map +1 -1
  177. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js +78 -52
  178. package/dist/lib/generated/Entities/MJApplication/mjapplication.form.component.js.map +1 -1
  179. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.d.ts.map +1 -1
  180. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js +25 -7
  181. package/dist/lib/generated/Entities/MJCollection/mjcollection.form.component.js.map +1 -1
  182. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js +11 -7
  183. package/dist/lib/generated/Entities/MJCollectionArtifact/mjcollectionartifact.form.component.js.map +1 -1
  184. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.d.ts.map +1 -1
  185. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +105 -47
  186. package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
  187. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.d.ts.map +1 -1
  188. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js +73 -59
  189. package/dist/lib/generated/Entities/MJConversationDetail/mjconversationdetail.form.component.js.map +1 -1
  190. package/dist/lib/generated/Entities/MJConversationWidgetInstance/mjconversationwidgetinstance.form.component.d.ts +10 -0
  191. package/dist/lib/generated/Entities/MJConversationWidgetInstance/mjconversationwidgetinstance.form.component.d.ts.map +1 -0
  192. package/dist/lib/generated/Entities/MJConversationWidgetInstance/mjconversationwidgetinstance.form.component.js +86 -0
  193. package/dist/lib/generated/Entities/MJConversationWidgetInstance/mjconversationwidgetinstance.form.component.js.map +1 -0
  194. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.d.ts.map +1 -1
  195. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +30 -12
  196. package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
  197. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.d.ts.map +1 -1
  198. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js +27 -9
  199. package/dist/lib/generated/Entities/MJCredentialType/mjcredentialtype.form.component.js.map +1 -1
  200. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  201. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +24 -4
  202. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  203. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
  204. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +490 -412
  205. package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
  206. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.d.ts.map +1 -1
  207. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +47 -29
  208. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  209. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.d.ts.map +1 -1
  210. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js +29 -11
  211. package/dist/lib/generated/Entities/MJEnvironment/mjenvironment.form.component.js.map +1 -1
  212. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts +10 -0
  213. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.d.ts.map +1 -0
  214. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js +99 -0
  215. package/dist/lib/generated/Entities/MJExperiment/mjexperiment.form.component.js.map +1 -0
  216. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts +10 -0
  217. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.d.ts.map +1 -0
  218. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js +101 -0
  219. package/dist/lib/generated/Entities/MJExperimentSession/mjexperimentsession.form.component.js.map +1 -0
  220. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts +10 -0
  221. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.d.ts.map +1 -0
  222. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js +115 -0
  223. package/dist/lib/generated/Entities/MJExperimentSessionIteration/mjexperimentsessioniteration.form.component.js.map +1 -0
  224. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.d.ts +10 -0
  225. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.d.ts.map +1 -0
  226. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.js +113 -0
  227. package/dist/lib/generated/Entities/MJExternalDataSource/mjexternaldatasource.form.component.js.map +1 -0
  228. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.d.ts +10 -0
  229. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.d.ts.map +1 -0
  230. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.js +95 -0
  231. package/dist/lib/generated/Entities/MJExternalDataSourceType/mjexternaldatasourcetype.form.component.js.map +1 -0
  232. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
  233. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +63 -9
  234. package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
  235. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
  236. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +32 -14
  237. package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
  238. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts +10 -0
  239. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.d.ts.map +1 -0
  240. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js +161 -0
  241. package/dist/lib/generated/Entities/MJMLAlgorithm/mjmlalgorithm.form.component.js.map +1 -0
  242. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts +10 -0
  243. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.d.ts.map +1 -0
  244. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js +89 -0
  245. package/dist/lib/generated/Entities/MJMLAlgorithmUseCase/mjmlalgorithmusecase.form.component.js.map +1 -0
  246. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts +10 -0
  247. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.d.ts.map +1 -0
  248. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js +76 -0
  249. package/dist/lib/generated/Entities/MJMLAlgorithmUseCaseRanking/mjmlalgorithmusecaseranking.form.component.js.map +1 -0
  250. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts +10 -0
  251. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -0
  252. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +141 -0
  253. package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -0
  254. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts +10 -0
  255. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.d.ts.map +1 -0
  256. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js +88 -0
  257. package/dist/lib/generated/Entities/MJMLModelScoringBinding/mjmlmodelscoringbinding.form.component.js.map +1 -0
  258. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts +10 -0
  259. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -0
  260. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +143 -0
  261. package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -0
  262. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts +10 -0
  263. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.d.ts.map +1 -0
  264. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +110 -0
  265. package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -0
  266. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.d.ts.map +1 -1
  267. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js +54 -24
  268. package/dist/lib/generated/Entities/MJOpenApp/mjopenapp.form.component.js.map +1 -1
  269. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.d.ts.map +1 -1
  270. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js +54 -46
  271. package/dist/lib/generated/Entities/MJQuery/mjquery.form.component.js.map +1 -1
  272. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
  273. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +24 -6
  274. package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
  275. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.d.ts.map +1 -1
  276. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js +54 -18
  277. package/dist/lib/generated/Entities/MJRole/mjrole.form.component.js.map +1 -1
  278. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js +8 -6
  279. package/dist/lib/generated/Entities/MJSchemaInfo/mjschemainfo.form.component.js.map +1 -1
  280. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts +10 -0
  281. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.d.ts.map +1 -0
  282. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js +78 -0
  283. package/dist/lib/generated/Entities/MJScopedPromptPart/mjscopedpromptpart.form.component.js.map +1 -0
  284. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.d.ts.map +1 -1
  285. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js +30 -12
  286. package/dist/lib/generated/Entities/MJTemplate/mjtemplate.form.component.js.map +1 -1
  287. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.d.ts.map +1 -1
  288. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js +181 -109
  289. package/dist/lib/generated/Entities/MJUser/mjuser.form.component.js.map +1 -1
  290. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.d.ts +10 -0
  291. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.d.ts.map +1 -0
  292. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js +169 -0
  293. package/dist/lib/generated/Entities/MJUserRoutine/mjuserroutine.form.component.js.map +1 -0
  294. package/dist/lib/generated/Entities/MJUserRoutineRecipient/mjuserroutinerecipient.form.component.d.ts +10 -0
  295. package/dist/lib/generated/Entities/MJUserRoutineRecipient/mjuserroutinerecipient.form.component.d.ts.map +1 -0
  296. package/dist/lib/generated/Entities/MJUserRoutineRecipient/mjuserroutinerecipient.form.component.js +82 -0
  297. package/dist/lib/generated/Entities/MJUserRoutineRecipient/mjuserroutinerecipient.form.component.js.map +1 -0
  298. package/dist/lib/generated/Entities/MJUserRoutineRun/mjuserroutinerun.form.component.d.ts +10 -0
  299. package/dist/lib/generated/Entities/MJUserRoutineRun/mjuserroutinerun.form.component.d.ts.map +1 -0
  300. package/dist/lib/generated/Entities/MJUserRoutineRun/mjuserroutinerun.form.component.js +100 -0
  301. package/dist/lib/generated/Entities/MJUserRoutineRun/mjuserroutinerun.form.component.js.map +1 -0
  302. package/dist/lib/generated/generated-forms.module.d.ts +362 -335
  303. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  304. package/dist/lib/generated/generated-forms.module.js +299 -203
  305. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  306. package/dist/lib/panels/ai-agents/agent-realtime.panel.js +44 -44
  307. package/dist/lib/panels/ai-agents/agent-realtime.panel.js.map +1 -1
  308. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts +43 -0
  309. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.d.ts.map +1 -0
  310. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js +240 -0
  311. package/dist/lib/panels/ai-skill-sharing/ai-skill-sharing-panel.component.js.map +1 -0
  312. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +69 -0
  313. package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -0
  314. package/dist/lib/panels/model-predictions/model-prediction.logic.js +130 -0
  315. package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -0
  316. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts +83 -0
  317. package/dist/lib/panels/model-predictions/model-prediction.panel.d.ts.map +1 -0
  318. package/dist/lib/panels/model-predictions/model-prediction.panel.js +293 -0
  319. package/dist/lib/panels/model-predictions/model-prediction.panel.js.map +1 -0
  320. package/dist/lib/shared/components/template-editor.component.d.ts +4 -2
  321. package/dist/lib/shared/components/template-editor.component.d.ts.map +1 -1
  322. package/dist/lib/shared/components/template-editor.component.js +10 -9
  323. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  324. package/package.json +38 -37
  325. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts +0 -82
  326. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.d.ts.map +0 -1
  327. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +0 -1033
  328. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +0 -1
@@ -12,6 +12,7 @@ import { MJQueryFormComponent } from '../../generated/Entities/MJQuery/mjquery.f
12
12
  import { RUN_QUERY_SQL_FILTERS, CompositeKey } from '@memberjunction/core';
13
13
  import { MJNotificationService } from '@memberjunction/ng-notifications';
14
14
  import { NavigationService } from '@memberjunction/ng-shared';
15
+ import { MJConfirmService } from '@memberjunction/ng-ui-components';
15
16
  import { Subject } from 'rxjs';
16
17
  import * as i0 from "@angular/core";
17
18
  import * as i1 from "@angular/common";
@@ -149,36 +150,30 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template(rf,
149
150
  i0.ɵɵconditional(ctx_r1.EditMode ? 1 : 2);
150
151
  } }
151
152
  function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
152
- i0.ɵɵelementStart(0, "div", 63);
153
- i0.ɵɵelement(1, "i", 59);
154
- i0.ɵɵelementStart(2, "span");
155
- i0.ɵɵtext(3, " This query has status ");
156
- i0.ɵɵelementStart(4, "strong");
157
- i0.ɵɵtext(5);
153
+ i0.ɵɵelementStart(0, "mj-alert", 22)(1, "span");
154
+ i0.ɵɵtext(2, " This query has status ");
155
+ i0.ɵɵelementStart(3, "strong");
156
+ i0.ɵɵtext(4);
158
157
  i0.ɵɵelementEnd();
159
- i0.ɵɵtext(6);
158
+ i0.ɵɵtext(5);
160
159
  i0.ɵɵelementEnd()();
161
160
  } if (rf & 2) {
162
161
  const ctx_r1 = i0.ɵɵnextContext(2);
163
- i0.ɵɵstyleProp("border-left-color", ctx_r1.getStatusBadgeColor());
164
- i0.ɵɵadvance();
165
- i0.ɵɵclassMap(ctx_r1.getStatusBannerIcon());
166
- i0.ɵɵstyleProp("color", ctx_r1.getStatusBadgeColor());
167
162
  i0.ɵɵadvance(4);
168
163
  i0.ɵɵtextInterpolate(ctx_r1.record.Status);
169
164
  i0.ɵɵadvance();
170
165
  i0.ɵɵtextInterpolate1(". ", ctx_r1.getStatusBannerMessage(), " ");
171
166
  } }
172
167
  function MJQueryFormComponentExtended_Conditional_0_ng_template_28_Conditional_4_Template(rf, ctx) { if (rf & 1) {
173
- i0.ɵɵelementStart(0, "span", 67);
168
+ i0.ɵɵelementStart(0, "span", 66);
174
169
  i0.ɵɵtext(1, "\u2014 Defined");
175
170
  i0.ɵɵelementEnd();
176
171
  } }
177
172
  function MJQueryFormComponentExtended_Conditional_0_ng_template_28_Template(rf, ctx) { if (rf & 1) {
178
- i0.ɵɵelementStart(0, "span", 64)(1, "span", 65);
179
- i0.ɵɵelement(2, "i", 66);
173
+ i0.ɵɵelementStart(0, "span", 63)(1, "span", 64);
174
+ i0.ɵɵelement(2, "i", 65);
180
175
  i0.ɵɵtext(3, " SQL ");
181
- i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_ng_template_28_Conditional_4_Template, 2, 0, "span", 67);
176
+ i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_ng_template_28_Conditional_4_Template, 2, 0, "span", 66);
182
177
  i0.ɵɵelementEnd()();
183
178
  } if (rf & 2) {
184
179
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -186,7 +181,7 @@ function MJQueryFormComponentExtended_Conditional_0_ng_template_28_Template(rf,
186
181
  i0.ɵɵconditional(ctx_r1.record.SQL ? 4 : -1);
187
182
  } }
188
183
  function MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
189
- i0.ɵɵelementStart(0, "div", 75);
184
+ i0.ɵɵelementStart(0, "div", 74);
190
185
  i0.ɵɵtext(1);
191
186
  i0.ɵɵelementEnd();
192
187
  } if (rf & 2) {
@@ -195,16 +190,16 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Conditi
195
190
  i0.ɵɵtextInterpolate(filter_r9.notes);
196
191
  } }
197
192
  function MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Template(rf, ctx) { if (rf & 1) {
198
- i0.ɵɵelementStart(0, "div", 71)(1, "div", 72);
193
+ i0.ɵɵelementStart(0, "div", 70)(1, "div", 71);
199
194
  i0.ɵɵtext(2);
200
195
  i0.ɵɵelementEnd();
201
- i0.ɵɵelementStart(3, "div", 73);
196
+ i0.ɵɵelementStart(3, "div", 72);
202
197
  i0.ɵɵtext(4);
203
198
  i0.ɵɵelementEnd();
204
- i0.ɵɵelementStart(5, "div", 74);
199
+ i0.ɵɵelementStart(5, "div", 73);
205
200
  i0.ɵɵtext(6);
206
201
  i0.ɵɵelementEnd();
207
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Conditional_7_Template, 2, 1, "div", 75);
202
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Conditional_7_Template, 2, 1, "div", 74);
208
203
  i0.ɵɵelementEnd();
209
204
  } if (rf & 2) {
210
205
  const filter_r9 = ctx.$implicit;
@@ -218,12 +213,12 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Templat
218
213
  i0.ɵɵconditional(filter_r9.notes ? 7 : -1);
219
214
  } }
220
215
  function MJQueryFormComponentExtended_Conditional_0_Conditional_38_Template(rf, ctx) { if (rf & 1) {
221
- i0.ɵɵelementStart(0, "div", 32)(1, "h6", 68);
222
- i0.ɵɵelement(2, "i", 69);
216
+ i0.ɵɵelementStart(0, "div", 32)(1, "h6", 67);
217
+ i0.ɵɵelement(2, "i", 68);
223
218
  i0.ɵɵtext(3, " Available SQL Filters for Parameterized Queries ");
224
219
  i0.ɵɵelementEnd();
225
- i0.ɵɵelementStart(4, "div", 70);
226
- i0.ɵɵrepeaterCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Template, 8, 4, "div", 71, _forTrack0);
220
+ i0.ɵɵelementStart(4, "div", 69);
221
+ i0.ɵɵrepeaterCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_38_For_6_Template, 8, 4, "div", 70, _forTrack0);
227
222
  i0.ɵɵelementEnd()();
228
223
  } if (rf & 2) {
229
224
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -231,15 +226,15 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_38_Template(rf,
231
226
  i0.ɵɵrepeater(ctx_r1.sqlFilters);
232
227
  } }
233
228
  function MJQueryFormComponentExtended_Conditional_0_Conditional_39_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
234
- i0.ɵɵelementStart(0, "span", 67);
229
+ i0.ɵɵelementStart(0, "span", 66);
235
230
  i0.ɵɵtext(1, "\u2014 Documented");
236
231
  i0.ɵɵelementEnd();
237
232
  } }
238
233
  function MJQueryFormComponentExtended_Conditional_0_Conditional_39_ng_template_1_Template(rf, ctx) { if (rf & 1) {
239
- i0.ɵɵelementStart(0, "span", 65);
240
- i0.ɵɵelement(1, "i", 77);
234
+ i0.ɵɵelementStart(0, "span", 64);
235
+ i0.ɵɵelement(1, "i", 76);
241
236
  i0.ɵɵtext(2, " Technical Description ");
242
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_39_ng_template_1_Conditional_3_Template, 2, 0, "span", 67);
237
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_39_ng_template_1_Conditional_3_Template, 2, 0, "span", 66);
243
238
  i0.ɵɵelementEnd();
244
239
  } if (rf & 2) {
245
240
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -247,11 +242,11 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_39_ng_template_1
247
242
  i0.ɵɵconditional(ctx_r1.record.TechnicalDescription ? 3 : -1);
248
243
  } }
249
244
  function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
250
- i0.ɵɵelementStart(0, "div", 79)(1, "div", 80);
251
- i0.ɵɵelement(2, "i", 81);
245
+ i0.ɵɵelementStart(0, "div", 78)(1, "div", 79);
246
+ i0.ɵɵelement(2, "i", 80);
252
247
  i0.ɵɵtext(3, " Preview ");
253
248
  i0.ɵɵelementEnd();
254
- i0.ɵɵelement(4, "mj-markdown", 82);
249
+ i0.ɵɵelement(4, "mj-markdown", 81);
255
250
  i0.ɵɵelementEnd();
256
251
  } if (rf & 2) {
257
252
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -260,11 +255,11 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3
260
255
  } }
261
256
  function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Template(rf, ctx) { if (rf & 1) {
262
257
  const _r11 = i0.ɵɵgetCurrentView();
263
- i0.ɵɵelementStart(0, "textarea", 78);
258
+ i0.ɵɵelementStart(0, "textarea", 77);
264
259
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TechnicalDescription, $event) || (ctx_r1.record.TechnicalDescription = $event); return i0.ɵɵresetView($event); });
265
260
  i0.ɵɵtext(1, " ");
266
261
  i0.ɵɵelementEnd();
267
- i0.ɵɵconditionalCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Conditional_2_Template, 5, 5, "div", 79);
262
+ i0.ɵɵconditionalCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Conditional_2_Template, 5, 5, "div", 78);
268
263
  } if (rf & 2) {
269
264
  const ctx_r1 = i0.ɵɵnextContext(3);
270
265
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.TechnicalDescription);
@@ -272,8 +267,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3
272
267
  i0.ɵɵconditional(ctx_r1.record.TechnicalDescription ? 2 : -1);
273
268
  } }
274
269
  function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Template(rf, ctx) { if (rf & 1) {
275
- i0.ɵɵelementStart(0, "div", 76);
276
- i0.ɵɵelement(1, "mj-markdown", 82);
270
+ i0.ɵɵelementStart(0, "div", 75);
271
+ i0.ɵɵelement(1, "mj-markdown", 81);
277
272
  i0.ɵɵelementEnd();
278
273
  } if (rf & 2) {
279
274
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -286,7 +281,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template(rf,
286
281
  i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.technicalDescriptionPanelExpanded, $event) || (ctx_r1.technicalDescriptionPanelExpanded = $event); return i0.ɵɵresetView($event); });
287
282
  i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_39_ng_template_1_Template, 4, 1, "ng-template", 25);
288
283
  i0.ɵɵelementStart(2, "div", 34);
289
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Template, 3, 2)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Template, 2, 5, "div", 76);
284
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_3_Template, 3, 2)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Conditional_4_Template, 2, 5, "div", 75);
290
285
  i0.ɵɵelementEnd()();
291
286
  } if (rf & 2) {
292
287
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -295,7 +290,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template(rf,
295
290
  i0.ɵɵconditional(ctx_r1.EditMode ? 3 : 4);
296
291
  } }
297
292
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
298
- i0.ɵɵelementStart(0, "span", 85);
293
+ i0.ɵɵelementStart(0, "span", 84);
299
294
  i0.ɵɵtext(1);
300
295
  i0.ɵɵelementEnd();
301
296
  } if (rf & 2) {
@@ -304,10 +299,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_ng_template_1
304
299
  i0.ɵɵtextInterpolate(ctx_r1.queryParameters.length);
305
300
  } }
306
301
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_ng_template_1_Template(rf, ctx) { if (rf & 1) {
307
- i0.ɵɵelementStart(0, "span", 65);
308
- i0.ɵɵelement(1, "i", 84);
302
+ i0.ɵɵelementStart(0, "span", 64);
303
+ i0.ɵɵelement(1, "i", 83);
309
304
  i0.ɵɵtext(2, " Parameters ");
310
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_40_ng_template_1_Conditional_3_Template, 2, 1, "span", 85);
305
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_40_ng_template_1_Conditional_3_Template, 2, 1, "span", 84);
311
306
  i0.ɵɵelementEnd();
312
307
  } if (rf & 2) {
313
308
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -315,49 +310,34 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_ng_template_1
315
310
  i0.ɵɵconditional(ctx_r1.queryParameters.length > 0 ? 3 : -1);
316
311
  } }
317
312
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_3_Template(rf, ctx) { if (rf & 1) {
318
- i0.ɵɵelementStart(0, "div", 83);
319
- i0.ɵɵelement(1, "mj-loading", 86);
320
- i0.ɵɵelementEnd();
321
- } }
322
- function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
323
- const _r13 = i0.ɵɵgetCurrentView();
324
- i0.ɵɵelementStart(0, "button", 92);
325
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addParameter()); });
326
- i0.ɵɵelement(1, "i", 53);
327
- i0.ɵɵtext(2, " Add First Parameter ");
313
+ i0.ɵɵelementStart(0, "div", 82);
314
+ i0.ɵɵelement(1, "mj-loading", 85);
328
315
  i0.ɵɵelementEnd();
329
316
  } }
330
317
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
331
- i0.ɵɵelementStart(0, "div", 87);
332
- i0.ɵɵelement(1, "i", 88);
333
- i0.ɵɵelementStart(2, "div", 89);
334
- i0.ɵɵtext(3, "No Parameters Defined");
335
- i0.ɵɵelementEnd();
336
- i0.ɵɵelementStart(4, "div", 90);
337
- i0.ɵɵtext(5, " Add parameters to make your query dynamic and reusable. ");
338
- i0.ɵɵelementEnd();
339
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 91);
318
+ const _r13 = i0.ɵɵgetCurrentView();
319
+ i0.ɵɵelementStart(0, "mj-empty-state", 87);
320
+ i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addParameter()); });
340
321
  i0.ɵɵelementEnd();
341
322
  } if (rf & 2) {
342
323
  const ctx_r1 = i0.ɵɵnextContext(4);
343
- i0.ɵɵadvance(6);
344
- i0.ɵɵconditional(ctx_r1.EditMode ? 6 : -1);
324
+ i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Parameter" : "");
345
325
  } }
346
326
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
347
327
  const _r14 = i0.ɵɵgetCurrentView();
348
- i0.ɵɵelementStart(0, "div", 93)(1, "button", 92);
328
+ i0.ɵɵelementStart(0, "div", 88)(1, "button", 91);
349
329
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addParameter()); });
350
330
  i0.ɵɵelement(2, "i", 53);
351
331
  i0.ɵɵtext(3, " Add Parameter ");
352
332
  i0.ɵɵelementEnd()();
353
333
  } }
354
334
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
355
- i0.ɵɵelementStart(0, "span", 101);
335
+ i0.ɵɵelementStart(0, "span", 97);
356
336
  i0.ɵɵtext(1, "Required");
357
337
  i0.ɵɵelementEnd();
358
338
  } }
359
339
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
360
- i0.ɵɵelementStart(0, "div", 103);
340
+ i0.ɵɵelementStart(0, "div", 99);
361
341
  i0.ɵɵtext(1);
362
342
  i0.ɵɵelementEnd();
363
343
  } if (rf & 2) {
@@ -366,10 +346,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4
366
346
  i0.ɵɵtextInterpolate(param_r16.Description);
367
347
  } }
368
348
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_14_Template(rf, ctx) { if (rf & 1) {
369
- i0.ɵɵelementStart(0, "span", 105)(1, "strong");
349
+ i0.ɵɵelementStart(0, "span", 101)(1, "strong");
370
350
  i0.ɵɵtext(2, "Default:");
371
351
  i0.ɵɵelementEnd();
372
- i0.ɵɵelementStart(3, "code", 107);
352
+ i0.ɵɵelementStart(3, "code", 103);
373
353
  i0.ɵɵtext(4);
374
354
  i0.ɵɵelementEnd()();
375
355
  } if (rf & 2) {
@@ -379,38 +359,38 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4
379
359
  } }
380
360
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_15_Template(rf, ctx) { if (rf & 1) {
381
361
  const _r17 = i0.ɵɵgetCurrentView();
382
- i0.ɵɵelementStart(0, "div", 108);
362
+ i0.ɵɵelementStart(0, "div", 104);
383
363
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_15_Template_div_click_0_listener($event) { i0.ɵɵrestoreView(_r17); return i0.ɵɵresetView($event.stopPropagation()); });
384
- i0.ɵɵelementStart(1, "button", 109);
364
+ i0.ɵɵelementStart(1, "button", 105);
385
365
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_15_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r17); const param_r16 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.editParameter(param_r16)); });
386
366
  i0.ɵɵelement(2, "i", 56);
387
367
  i0.ɵɵelementEnd();
388
- i0.ɵɵelementStart(3, "button", 110);
368
+ i0.ɵɵelementStart(3, "button", 106);
389
369
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_15_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r17); const param_r16 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.deleteParameter(param_r16)); });
390
- i0.ɵɵelement(4, "i", 111);
370
+ i0.ɵɵelement(4, "i", 107);
391
371
  i0.ɵɵelementEnd()();
392
372
  } }
393
373
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
394
374
  const _r15 = i0.ɵɵgetCurrentView();
395
- i0.ɵɵelementStart(0, "div", 96);
375
+ i0.ɵɵelementStart(0, "div", 92);
396
376
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Template_div_click_0_listener() { const param_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.editParameter(param_r16)); });
397
- i0.ɵɵelementStart(1, "div", 97)(2, "div", 98);
398
- i0.ɵɵelement(3, "i", 99);
377
+ i0.ɵɵelementStart(1, "div", 93)(2, "div", 94);
378
+ i0.ɵɵelement(3, "i", 95);
399
379
  i0.ɵɵtext(4);
400
380
  i0.ɵɵelementEnd();
401
- i0.ɵɵelementStart(5, "div", 100);
402
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 2, 0, "span", 101);
381
+ i0.ɵɵelementStart(5, "div", 96);
382
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 2, 0, "span", 97);
403
383
  i0.ɵɵelementEnd()();
404
- i0.ɵɵelementStart(7, "div", 102);
405
- i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "div", 103);
406
- i0.ɵɵelementStart(9, "div", 104)(10, "span", 105)(11, "strong");
384
+ i0.ɵɵelementStart(7, "div", 98);
385
+ i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "div", 99);
386
+ i0.ɵɵelementStart(9, "div", 100)(10, "span", 101)(11, "strong");
407
387
  i0.ɵɵtext(12, "Type:");
408
388
  i0.ɵɵelementEnd();
409
389
  i0.ɵɵtext(13);
410
390
  i0.ɵɵelementEnd();
411
- i0.ɵɵconditionalCreate(14, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_14_Template, 5, 1, "span", 105);
391
+ i0.ɵɵconditionalCreate(14, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_14_Template, 5, 1, "span", 101);
412
392
  i0.ɵɵelementEnd()();
413
- i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 5, 0, "div", 106);
393
+ i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 5, 0, "div", 102);
414
394
  i0.ɵɵelementEnd();
415
395
  } if (rf & 2) {
416
396
  const param_r16 = ctx.$implicit;
@@ -430,9 +410,9 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4
430
410
  i0.ɵɵconditional(ctx_r1.EditMode ? 15 : -1);
431
411
  } }
432
412
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
433
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 93);
434
- i0.ɵɵelementStart(1, "div", 94);
435
- i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Template, 16, 8, "div", 95, _forTrack1);
413
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 88);
414
+ i0.ɵɵelementStart(1, "div", 89);
415
+ i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_For_3_Template, 16, 8, "div", 90, _forTrack1);
436
416
  i0.ɵɵelementEnd();
437
417
  } if (rf & 2) {
438
418
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -441,7 +421,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4
441
421
  i0.ɵɵrepeater(ctx_r1.queryParameters);
442
422
  } }
443
423
  function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Template(rf, ctx) { if (rf & 1) {
444
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_0_Template, 7, 1, "div", 87)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_Template, 4, 1);
424
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 86)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Conditional_1_Template, 4, 1);
445
425
  } if (rf & 2) {
446
426
  const ctx_r1 = i0.ɵɵnextContext(3);
447
427
  i0.ɵɵconditional(ctx_r1.queryParameters.length === 0 ? 0 : 1);
@@ -452,7 +432,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Template(rf,
452
432
  i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.parametersPanelExpanded, $event) || (ctx_r1.parametersPanelExpanded = $event); return i0.ɵɵresetView($event); });
453
433
  i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_40_ng_template_1_Template, 4, 1, "ng-template", 25);
454
434
  i0.ɵɵelementStart(2, "div", 34);
455
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_3_Template, 2, 0, "div", 83)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Template, 2, 1);
435
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_3_Template, 2, 0, "div", 82)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_40_Conditional_4_Template, 2, 1);
456
436
  i0.ɵɵelementEnd()();
457
437
  } if (rf & 2) {
458
438
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -461,7 +441,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_40_Template(rf,
461
441
  i0.ɵɵconditional(ctx_r1.isLoadingParameters ? 3 : 4);
462
442
  } }
463
443
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
464
- i0.ɵɵelementStart(0, "span", 85);
444
+ i0.ɵɵelementStart(0, "span", 84);
465
445
  i0.ɵɵtext(1);
466
446
  i0.ɵɵelementEnd();
467
447
  } if (rf & 2) {
@@ -470,10 +450,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_ng_template_1
470
450
  i0.ɵɵtextInterpolate(ctx_r1.queryFields.length);
471
451
  } }
472
452
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_ng_template_1_Template(rf, ctx) { if (rf & 1) {
473
- i0.ɵɵelementStart(0, "span", 65);
474
- i0.ɵɵelement(1, "i", 112);
453
+ i0.ɵɵelementStart(0, "span", 64);
454
+ i0.ɵɵelement(1, "i", 108);
475
455
  i0.ɵɵtext(2, " Fields ");
476
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_41_ng_template_1_Conditional_3_Template, 2, 1, "span", 85);
456
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_41_ng_template_1_Conditional_3_Template, 2, 1, "span", 84);
477
457
  i0.ɵɵelementEnd();
478
458
  } if (rf & 2) {
479
459
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -481,44 +461,29 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_ng_template_1
481
461
  i0.ɵɵconditional(ctx_r1.queryFields.length > 0 ? 3 : -1);
482
462
  } }
483
463
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_3_Template(rf, ctx) { if (rf & 1) {
484
- i0.ɵɵelementStart(0, "div", 83);
485
- i0.ɵɵelement(1, "mj-loading", 113);
486
- i0.ɵɵelementEnd();
487
- } }
488
- function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
489
- const _r19 = i0.ɵɵgetCurrentView();
490
- i0.ɵɵelementStart(0, "button", 92);
491
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addField()); });
492
- i0.ɵɵelement(1, "i", 53);
493
- i0.ɵɵtext(2, " Add First Field ");
464
+ i0.ɵɵelementStart(0, "div", 82);
465
+ i0.ɵɵelement(1, "mj-loading", 109);
494
466
  i0.ɵɵelementEnd();
495
467
  } }
496
468
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
497
- i0.ɵɵelementStart(0, "div", 87);
498
- i0.ɵɵelement(1, "i", 114);
499
- i0.ɵɵelementStart(2, "div", 89);
500
- i0.ɵɵtext(3, "No Fields Defined");
501
- i0.ɵɵelementEnd();
502
- i0.ɵɵelementStart(4, "div", 90);
503
- i0.ɵɵtext(5, " Define output fields for your query results. ");
504
- i0.ɵɵelementEnd();
505
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 91);
469
+ const _r19 = i0.ɵɵgetCurrentView();
470
+ i0.ɵɵelementStart(0, "mj-empty-state", 111);
471
+ i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addField()); });
506
472
  i0.ɵɵelementEnd();
507
473
  } if (rf & 2) {
508
474
  const ctx_r1 = i0.ɵɵnextContext(4);
509
- i0.ɵɵadvance(6);
510
- i0.ɵɵconditional(ctx_r1.EditMode ? 6 : -1);
475
+ i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Field" : "");
511
476
  } }
512
477
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
513
478
  const _r20 = i0.ɵɵgetCurrentView();
514
- i0.ɵɵelementStart(0, "div", 93)(1, "button", 92);
479
+ i0.ɵɵelementStart(0, "div", 88)(1, "button", 91);
515
480
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addField()); });
516
481
  i0.ɵɵelement(2, "i", 53);
517
482
  i0.ɵɵtext(3, " Add Field ");
518
483
  i0.ɵɵelementEnd()();
519
484
  } }
520
485
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
521
- i0.ɵɵelementStart(0, "span", 118);
486
+ i0.ɵɵelementStart(0, "span", 115);
522
487
  i0.ɵɵtext(1);
523
488
  i0.ɵɵelementEnd();
524
489
  } if (rf & 2) {
@@ -527,7 +492,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4
527
492
  i0.ɵɵtextInterpolate1("#", field_r21.Sequence);
528
493
  } }
529
494
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_10_Template(rf, ctx) { if (rf & 1) {
530
- i0.ɵɵelementStart(0, "div", 103);
495
+ i0.ɵɵelementStart(0, "div", 99);
531
496
  i0.ɵɵtext(1);
532
497
  i0.ɵɵelementEnd();
533
498
  } if (rf & 2) {
@@ -537,28 +502,28 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4
537
502
  } }
538
503
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_15_Template(rf, ctx) { if (rf & 1) {
539
504
  const _r22 = i0.ɵɵgetCurrentView();
540
- i0.ɵɵelementStart(0, "div", 120)(1, "button", 121);
505
+ i0.ɵɵelementStart(0, "div", 117)(1, "button", 118);
541
506
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_15_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r22); const field_r21 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.deleteField(field_r21)); });
542
- i0.ɵɵelement(2, "i", 111);
507
+ i0.ɵɵelement(2, "i", 107);
543
508
  i0.ɵɵelementEnd()();
544
509
  } }
545
510
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
546
- i0.ɵɵelementStart(0, "div", 115)(1, "div", 97)(2, "div", 98);
547
- i0.ɵɵelement(3, "i", 116);
511
+ i0.ɵɵelementStart(0, "div", 112)(1, "div", 93)(2, "div", 94);
512
+ i0.ɵɵelement(3, "i", 113);
548
513
  i0.ɵɵtext(4);
549
514
  i0.ɵɵelementEnd();
550
- i0.ɵɵelementStart(5, "div", 100)(6, "span", 117);
515
+ i0.ɵɵelementStart(5, "div", 96)(6, "span", 114);
551
516
  i0.ɵɵtext(7);
552
517
  i0.ɵɵelementEnd();
553
- i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "span", 118);
518
+ i0.ɵɵconditionalCreate(8, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_8_Template, 2, 1, "span", 115);
554
519
  i0.ɵɵelementEnd()();
555
- i0.ɵɵelementStart(9, "div", 102);
556
- i0.ɵɵconditionalCreate(10, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_10_Template, 2, 1, "div", 103);
557
- i0.ɵɵelementStart(11, "div", 104)(12, "span", 105);
558
- i0.ɵɵelement(13, "i", 119);
520
+ i0.ɵɵelementStart(9, "div", 98);
521
+ i0.ɵɵconditionalCreate(10, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_10_Template, 2, 1, "div", 99);
522
+ i0.ɵɵelementStart(11, "div", 100)(12, "span", 101);
523
+ i0.ɵɵelement(13, "i", 116);
559
524
  i0.ɵɵtext(14);
560
525
  i0.ɵɵelementEnd()()();
561
- i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 3, 0, "div", 120);
526
+ i0.ɵɵconditionalCreate(15, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Conditional_15_Template, 3, 0, "div", 117);
562
527
  i0.ɵɵelementEnd();
563
528
  } if (rf & 2) {
564
529
  const field_r21 = ctx.$implicit;
@@ -577,9 +542,9 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4
577
542
  i0.ɵɵconditional(ctx_r1.EditMode ? 15 : -1);
578
543
  } }
579
544
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
580
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 93);
581
- i0.ɵɵelementStart(1, "div", 94);
582
- i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Template, 16, 6, "div", 115, _forTrack2);
545
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 88);
546
+ i0.ɵɵelementStart(1, "div", 89);
547
+ i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_For_3_Template, 16, 6, "div", 112, _forTrack2);
583
548
  i0.ɵɵelementEnd();
584
549
  } if (rf & 2) {
585
550
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -588,7 +553,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4
588
553
  i0.ɵɵrepeater(ctx_r1.queryFields);
589
554
  } }
590
555
  function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Template(rf, ctx) { if (rf & 1) {
591
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_0_Template, 7, 1, "div", 87)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_Template, 4, 1);
556
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 110)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Conditional_1_Template, 4, 1);
592
557
  } if (rf & 2) {
593
558
  const ctx_r1 = i0.ɵɵnextContext(3);
594
559
  i0.ɵɵconditional(ctx_r1.queryFields.length === 0 ? 0 : 1);
@@ -599,7 +564,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Template(rf,
599
564
  i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.fieldsPanelExpanded, $event) || (ctx_r1.fieldsPanelExpanded = $event); return i0.ɵɵresetView($event); });
600
565
  i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_41_ng_template_1_Template, 4, 1, "ng-template", 25);
601
566
  i0.ɵɵelementStart(2, "div", 34);
602
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_3_Template, 2, 0, "div", 83)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Template, 2, 1);
567
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_3_Template, 2, 0, "div", 82)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_41_Conditional_4_Template, 2, 1);
603
568
  i0.ɵɵelementEnd()();
604
569
  } if (rf & 2) {
605
570
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -608,10 +573,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_41_Template(rf,
608
573
  i0.ɵɵconditional(ctx_r1.isLoadingFields ? 3 : 4);
609
574
  } }
610
575
  function MJQueryFormComponentExtended_Conditional_0_Conditional_42_ng_template_1_Template(rf, ctx) { if (rf & 1) {
611
- i0.ɵɵelementStart(0, "span", 65);
612
- i0.ɵɵelement(1, "i", 124);
576
+ i0.ɵɵelementStart(0, "span", 64);
577
+ i0.ɵɵelement(1, "i", 121);
613
578
  i0.ɵɵtext(2, " Dependent Queries ");
614
- i0.ɵɵelementStart(3, "span", 85);
579
+ i0.ɵɵelementStart(3, "span", 84);
615
580
  i0.ɵɵtext(4);
616
581
  i0.ɵɵelementEnd()();
617
582
  } if (rf & 2) {
@@ -620,8 +585,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_ng_template_1
620
585
  i0.ɵɵtextInterpolate(ctx_r1.DependentQueries.length);
621
586
  } }
622
587
  function MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
623
- i0.ɵɵelementStart(0, "div", 104)(1, "span", 105);
624
- i0.ɵɵelement(2, "i", 130);
588
+ i0.ɵɵelementStart(0, "div", 100)(1, "span", 101);
589
+ i0.ɵɵelement(2, "i", 127);
625
590
  i0.ɵɵtext(3);
626
591
  i0.ɵɵelementEnd()();
627
592
  } if (rf & 2) {
@@ -630,10 +595,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Condit
630
595
  i0.ɵɵtextInterpolate1(" ", dep_r25.ReferencePath, " ");
631
596
  } }
632
597
  function MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Conditional_7_Template(rf, ctx) { if (rf & 1) {
633
- i0.ɵɵelementStart(0, "div", 104)(1, "span", 105)(2, "strong");
598
+ i0.ɵɵelementStart(0, "div", 100)(1, "span", 101)(2, "strong");
634
599
  i0.ɵɵtext(3, "Alias:");
635
600
  i0.ɵɵelementEnd();
636
- i0.ɵɵelementStart(4, "code", 107);
601
+ i0.ɵɵelementStart(4, "code", 103);
637
602
  i0.ɵɵtext(5);
638
603
  i0.ɵɵelementEnd()()();
639
604
  } if (rf & 2) {
@@ -643,18 +608,18 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Condit
643
608
  } }
644
609
  function MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Template(rf, ctx) { if (rf & 1) {
645
610
  const _r24 = i0.ɵɵgetCurrentView();
646
- i0.ɵɵelementStart(0, "div", 125);
611
+ i0.ɵɵelementStart(0, "div", 122);
647
612
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_42_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)); });
648
- i0.ɵɵelementStart(1, "div", 97)(2, "div", 98);
649
- i0.ɵɵelement(3, "i", 126);
613
+ i0.ɵɵelementStart(1, "div", 93)(2, "div", 94);
614
+ i0.ɵɵelement(3, "i", 123);
650
615
  i0.ɵɵtext(4);
651
616
  i0.ɵɵelementEnd()();
652
- i0.ɵɵelementStart(5, "div", 102);
653
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Conditional_6_Template, 4, 1, "div", 104);
654
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Conditional_7_Template, 6, 1, "div", 104);
617
+ i0.ɵɵelementStart(5, "div", 98);
618
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Conditional_6_Template, 4, 1, "div", 100);
619
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Conditional_7_Template, 6, 1, "div", 100);
655
620
  i0.ɵɵelementEnd();
656
- i0.ɵɵelementStart(8, "div", 127)(9, "span", 128);
657
- i0.ɵɵelement(10, "i", 129);
621
+ i0.ɵɵelementStart(8, "div", 124)(9, "span", 125);
622
+ i0.ɵɵelement(10, "i", 126);
658
623
  i0.ɵɵtext(11, " Open ");
659
624
  i0.ɵɵelementEnd()()();
660
625
  } if (rf & 2) {
@@ -671,15 +636,15 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template(rf,
671
636
  i0.ɵɵelementStart(0, "mj-accordion-panel", 24);
672
637
  i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_42_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); });
673
638
  i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_42_ng_template_1_Template, 5, 1, "ng-template", 25);
674
- i0.ɵɵelementStart(2, "div", 34)(3, "div", 122);
639
+ i0.ɵɵelementStart(2, "div", 34)(3, "div", 119);
675
640
  i0.ɵɵtext(4, " These queries reference this query via ");
676
641
  i0.ɵɵelementStart(5, "code");
677
642
  i0.ɵɵtext(6);
678
643
  i0.ɵɵelementEnd();
679
644
  i0.ɵɵtext(7, " composition syntax. ");
680
645
  i0.ɵɵelementEnd();
681
- i0.ɵɵelementStart(8, "div", 94);
682
- i0.ɵɵrepeaterCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Template, 12, 3, "div", 123, _forTrack2);
646
+ i0.ɵɵelementStart(8, "div", 89);
647
+ i0.ɵɵrepeaterCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_42_For_10_Template, 12, 3, "div", 120, _forTrack2);
683
648
  i0.ɵɵelementEnd()()();
684
649
  } if (rf & 2) {
685
650
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -690,7 +655,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template(rf,
690
655
  i0.ɵɵrepeater(ctx_r1.DependentQueries);
691
656
  } }
692
657
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
693
- i0.ɵɵelementStart(0, "span", 85);
658
+ i0.ɵɵelementStart(0, "span", 84);
694
659
  i0.ɵɵtext(1);
695
660
  i0.ɵɵelementEnd();
696
661
  } if (rf & 2) {
@@ -699,10 +664,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1
699
664
  i0.ɵɵtextInterpolate(ctx_r1.queryEntities.length);
700
665
  } }
701
666
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Template(rf, ctx) { if (rf & 1) {
702
- i0.ɵɵelementStart(0, "span", 65);
703
- i0.ɵɵelement(1, "i", 131);
667
+ i0.ɵɵelementStart(0, "span", 64);
668
+ i0.ɵɵelement(1, "i", 128);
704
669
  i0.ɵɵtext(2, " Entities ");
705
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Conditional_3_Template, 2, 1, "span", 85);
670
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Conditional_3_Template, 2, 1, "span", 84);
706
671
  i0.ɵɵelementEnd();
707
672
  } if (rf & 2) {
708
673
  const ctx_r1 = i0.ɵɵnextContext(3);
@@ -710,37 +675,22 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1
710
675
  i0.ɵɵconditional(ctx_r1.queryEntities.length > 0 ? 3 : -1);
711
676
  } }
712
677
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_3_Template(rf, ctx) { if (rf & 1) {
713
- i0.ɵɵelementStart(0, "div", 83);
714
- i0.ɵɵelement(1, "mj-loading", 132);
715
- i0.ɵɵelementEnd();
716
- } }
717
- function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
718
- const _r27 = i0.ɵɵgetCurrentView();
719
- i0.ɵɵelementStart(0, "button", 92);
720
- i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addEntity()); });
721
- i0.ɵɵelement(1, "i", 53);
722
- i0.ɵɵtext(2, " Add First Entity ");
678
+ i0.ɵɵelementStart(0, "div", 82);
679
+ i0.ɵɵelement(1, "mj-loading", 129);
723
680
  i0.ɵɵelementEnd();
724
681
  } }
725
682
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
726
- i0.ɵɵelementStart(0, "div", 87);
727
- i0.ɵɵelement(1, "i", 133);
728
- i0.ɵɵelementStart(2, "div", 89);
729
- i0.ɵɵtext(3, "No Entities Tracked");
730
- i0.ɵɵelementEnd();
731
- i0.ɵɵelementStart(4, "div", 90);
732
- i0.ɵɵtext(5, " Track which entities this query uses for documentation. ");
733
- i0.ɵɵelementEnd();
734
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Conditional_6_Template, 3, 0, "button", 91);
683
+ const _r27 = i0.ɵɵgetCurrentView();
684
+ i0.ɵɵelementStart(0, "mj-empty-state", 131);
685
+ i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_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()); });
735
686
  i0.ɵɵelementEnd();
736
687
  } if (rf & 2) {
737
688
  const ctx_r1 = i0.ɵɵnextContext(4);
738
- i0.ɵɵadvance(6);
739
- i0.ɵɵconditional(ctx_r1.EditMode ? 6 : -1);
689
+ i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Entity" : "");
740
690
  } }
741
691
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
742
692
  const _r28 = i0.ɵɵgetCurrentView();
743
- i0.ɵɵelementStart(0, "div", 93)(1, "button", 92);
693
+ i0.ɵɵelementStart(0, "div", 88)(1, "button", 91);
744
694
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_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()); });
745
695
  i0.ɵɵelement(2, "i", 53);
746
696
  i0.ɵɵtext(3, " Add Entity ");
@@ -748,7 +698,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4
748
698
  } }
749
699
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
750
700
  const _r29 = i0.ɵɵgetCurrentView();
751
- i0.ɵɵelementStart(0, "div", 135)(1, "mj-dropdown", 136);
701
+ i0.ɵɵelementStart(0, "div", 133)(1, "mj-dropdown", 134);
752
702
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_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); });
753
703
  i0.ɵɵelementEnd()();
754
704
  } if (rf & 2) {
@@ -759,27 +709,27 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4
759
709
  i0.ɵɵproperty("name", "entity_" + entity_r30.ID)("Data", ctx_r1.getEntityOptions())("ValuePrimitive", true);
760
710
  } }
761
711
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
762
- i0.ɵɵelementStart(0, "div", 102)(1, "div", 104)(2, "span", 105);
763
- i0.ɵɵelement(3, "i", 137);
712
+ i0.ɵɵelementStart(0, "div", 98)(1, "div", 100)(2, "span", 101);
713
+ i0.ɵɵelement(3, "i", 135);
764
714
  i0.ɵɵtext(4, " Data Source ");
765
715
  i0.ɵɵelementEnd()()();
766
716
  } }
767
717
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
768
718
  const _r31 = i0.ɵɵgetCurrentView();
769
- i0.ɵɵelementStart(0, "div", 120)(1, "button", 138);
719
+ i0.ɵɵelementStart(0, "div", 117)(1, "button", 136);
770
720
  i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r31); const entity_r30 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.deleteEntity(entity_r30)); });
771
- i0.ɵɵelement(2, "i", 111);
721
+ i0.ɵɵelement(2, "i", 107);
772
722
  i0.ɵɵelementEnd()();
773
723
  } }
774
724
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
775
- i0.ɵɵelementStart(0, "div", 115)(1, "div", 97)(2, "div", 98);
776
- i0.ɵɵelement(3, "i", 134);
725
+ i0.ɵɵelementStart(0, "div", 112)(1, "div", 93)(2, "div", 94);
726
+ i0.ɵɵelement(3, "i", 132);
777
727
  i0.ɵɵtext(4);
778
728
  i0.ɵɵelementEnd();
779
- i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_5_Template, 2, 4, "div", 135);
729
+ i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_5_Template, 2, 4, "div", 133);
780
730
  i0.ɵɵelementEnd();
781
- i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 5, 0, "div", 102);
782
- i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_7_Template, 3, 0, "div", 120);
731
+ i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 5, 0, "div", 98);
732
+ i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Conditional_7_Template, 3, 0, "div", 117);
783
733
  i0.ɵɵelementEnd();
784
734
  } if (rf & 2) {
785
735
  const entity_r30 = ctx.$implicit;
@@ -794,9 +744,9 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4
794
744
  i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
795
745
  } }
796
746
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
797
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 93);
798
- i0.ɵɵelementStart(1, "div", 94);
799
- i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Template, 8, 4, "div", 115, _forTrack2);
747
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 88);
748
+ i0.ɵɵelementStart(1, "div", 89);
749
+ i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_For_3_Template, 8, 4, "div", 112, _forTrack2);
800
750
  i0.ɵɵelementEnd();
801
751
  } if (rf & 2) {
802
752
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -805,7 +755,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4
805
755
  i0.ɵɵrepeater(ctx_r1.queryEntities);
806
756
  } }
807
757
  function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template(rf, ctx) { if (rf & 1) {
808
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Template, 7, 1, "div", 87)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1);
758
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 130)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Conditional_1_Template, 4, 1);
809
759
  } if (rf & 2) {
810
760
  const ctx_r1 = i0.ɵɵnextContext(3);
811
761
  i0.ɵɵconditional(ctx_r1.queryEntities.length === 0 ? 0 : 1);
@@ -816,7 +766,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template(rf,
816
766
  i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_43_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); });
817
767
  i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1_Template, 4, 1, "ng-template", 25);
818
768
  i0.ɵɵelementStart(2, "div", 34);
819
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_3_Template, 2, 0, "div", 83)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 2, 1);
769
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_3_Template, 2, 0, "div", 82)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4_Template, 2, 1);
820
770
  i0.ɵɵelementEnd()();
821
771
  } if (rf & 2) {
822
772
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -825,17 +775,17 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template(rf,
825
775
  i0.ɵɵconditional(ctx_r1.isLoadingEntities ? 3 : 4);
826
776
  } }
827
777
  function MJQueryFormComponentExtended_Conditional_0_ng_template_45_Template(rf, ctx) { if (rf & 1) {
828
- i0.ɵɵelementStart(0, "span", 65);
829
- i0.ɵɵelement(1, "i", 139);
778
+ i0.ɵɵelementStart(0, "span", 64);
779
+ i0.ɵɵelement(1, "i", 137);
830
780
  i0.ɵɵtext(2, " Details ");
831
781
  i0.ɵɵelementEnd();
832
782
  } }
833
783
  function MJQueryFormComponentExtended_Conditional_0_Conditional_52_Template(rf, ctx) { if (rf & 1) {
834
784
  const _r32 = i0.ɵɵgetCurrentView();
835
- i0.ɵɵelementStart(0, "mj-switch", 140);
785
+ i0.ɵɵelementStart(0, "mj-switch", 138);
836
786
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_52_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Reusable, $event) || (ctx_r1.record.Reusable = $event); return i0.ɵɵresetView($event); });
837
787
  i0.ɵɵelementEnd();
838
- i0.ɵɵelementStart(1, "div", 141);
788
+ i0.ɵɵelementStart(1, "div", 139);
839
789
  i0.ɵɵtext(2, "Allow other queries to reference this query using composition syntax");
840
790
  i0.ɵɵelementEnd();
841
791
  } if (rf & 2) {
@@ -843,20 +793,20 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_52_Template(rf,
843
793
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Reusable);
844
794
  } }
845
795
  function MJQueryFormComponentExtended_Conditional_0_Conditional_53_Conditional_1_Template(rf, ctx) { if (rf & 1) {
846
- i0.ɵɵelementStart(0, "span", 142);
847
- i0.ɵɵelement(1, "i", 144);
796
+ i0.ɵɵelementStart(0, "span", 140);
797
+ i0.ɵɵelement(1, "i", 142);
848
798
  i0.ɵɵtext(2, " Reusable");
849
799
  i0.ɵɵelementEnd();
850
800
  } }
851
801
  function MJQueryFormComponentExtended_Conditional_0_Conditional_53_Conditional_2_Template(rf, ctx) { if (rf & 1) {
852
- i0.ɵɵelementStart(0, "span", 143);
853
- i0.ɵɵelement(1, "i", 145);
802
+ i0.ɵɵelementStart(0, "span", 141);
803
+ i0.ɵɵelement(1, "i", 143);
854
804
  i0.ɵɵtext(2, " Not Reusable");
855
805
  i0.ɵɵelementEnd();
856
806
  } }
857
807
  function MJQueryFormComponentExtended_Conditional_0_Conditional_53_Template(rf, ctx) { if (rf & 1) {
858
808
  i0.ɵɵelementStart(0, "div", 39);
859
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_53_Conditional_1_Template, 3, 0, "span", 142)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_53_Conditional_2_Template, 3, 0, "span", 143);
809
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_53_Conditional_1_Template, 3, 0, "span", 140)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_53_Conditional_2_Template, 3, 0, "span", 141);
860
810
  i0.ɵɵelementEnd();
861
811
  } if (rf & 2) {
862
812
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -865,10 +815,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_53_Template(rf,
865
815
  } }
866
816
  function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Template(rf, ctx) { if (rf & 1) {
867
817
  const _r33 = i0.ɵɵgetCurrentView();
868
- i0.ɵɵelementStart(0, "mj-switch", 146);
818
+ i0.ɵɵelementStart(0, "mj-switch", 144);
869
819
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r33); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheEnabled, $event) || (ctx_r1.record.CacheEnabled = $event); return i0.ɵɵresetView($event); });
870
820
  i0.ɵɵelementEnd();
871
- i0.ɵɵelementStart(1, "div", 141);
821
+ i0.ɵɵelementStart(1, "div", 139);
872
822
  i0.ɵɵtext(2, "Cache query results in memory to reduce database load on repeated runs");
873
823
  i0.ɵɵelementEnd();
874
824
  } if (rf & 2) {
@@ -876,20 +826,20 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Template(rf,
876
826
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CacheEnabled);
877
827
  } }
878
828
  function MJQueryFormComponentExtended_Conditional_0_Conditional_59_Conditional_1_Template(rf, ctx) { if (rf & 1) {
879
- i0.ɵɵelementStart(0, "span", 142);
880
- i0.ɵɵelement(1, "i", 144);
829
+ i0.ɵɵelementStart(0, "span", 140);
830
+ i0.ɵɵelement(1, "i", 142);
881
831
  i0.ɵɵtext(2, " Caching On");
882
832
  i0.ɵɵelementEnd();
883
833
  } }
884
834
  function MJQueryFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Template(rf, ctx) { if (rf & 1) {
885
- i0.ɵɵelementStart(0, "span", 143);
886
- i0.ɵɵelement(1, "i", 145);
835
+ i0.ɵɵelementStart(0, "span", 141);
836
+ i0.ɵɵelement(1, "i", 143);
887
837
  i0.ɵɵtext(2, " Caching Off");
888
838
  i0.ɵɵelementEnd();
889
839
  } }
890
840
  function MJQueryFormComponentExtended_Conditional_0_Conditional_59_Template(rf, ctx) { if (rf & 1) {
891
841
  i0.ɵɵelementStart(0, "div", 39);
892
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_59_Conditional_1_Template, 3, 0, "span", 142)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Template, 3, 0, "span", 143);
842
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_59_Conditional_1_Template, 3, 0, "span", 140)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Template, 3, 0, "span", 141);
893
843
  i0.ɵɵelementEnd();
894
844
  } if (rf & 2) {
895
845
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -898,10 +848,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_59_Template(rf,
898
848
  } }
899
849
  function MJQueryFormComponentExtended_Conditional_0_Conditional_60_Conditional_4_Template(rf, ctx) { if (rf & 1) {
900
850
  const _r34 = i0.ɵɵgetCurrentView();
901
- i0.ɵɵelementStart(0, "input", 148);
851
+ i0.ɵɵelementStart(0, "input", 146);
902
852
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_60_Conditional_4_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r34); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheTTLMinutes, $event) || (ctx_r1.record.CacheTTLMinutes = $event); return i0.ɵɵresetView($event); });
903
853
  i0.ɵɵelementEnd();
904
- i0.ɵɵelementStart(1, "div", 141);
854
+ i0.ɵɵelementStart(1, "div", 139);
905
855
  i0.ɵɵtext(2, "How long cached results remain valid. Leave blank for default TTL.");
906
856
  i0.ɵɵelementEnd();
907
857
  } if (rf & 2) {
@@ -919,7 +869,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_60_Conditional_5
919
869
  } }
920
870
  function MJQueryFormComponentExtended_Conditional_0_Conditional_60_Template(rf, ctx) { if (rf & 1) {
921
871
  i0.ɵɵelementStart(0, "div", 36)(1, "label", 37);
922
- i0.ɵɵelement(2, "i", 147);
872
+ i0.ɵɵelement(2, "i", 145);
923
873
  i0.ɵɵtext(3, " Cache TTL (Minutes) ");
924
874
  i0.ɵɵelementEnd();
925
875
  i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_60_Conditional_4_Template, 3, 1)(5, MJQueryFormComponentExtended_Conditional_0_Conditional_60_Conditional_5_Template, 2, 1, "div", 39);
@@ -931,10 +881,10 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_60_Template(rf,
931
881
  } }
932
882
  function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Template(rf, ctx) { if (rf & 1) {
933
883
  const _r35 = i0.ɵɵgetCurrentView();
934
- i0.ɵɵelementStart(0, "mj-switch", 149);
884
+ i0.ɵɵelementStart(0, "mj-switch", 147);
935
885
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.AuditQueryRuns, $event) || (ctx_r1.record.AuditQueryRuns = $event); return i0.ɵɵresetView($event); });
936
886
  i0.ɵɵelementEnd();
937
- i0.ɵɵelementStart(1, "div", 141);
887
+ i0.ɵɵelementStart(1, "div", 139);
938
888
  i0.ɵɵtext(2, "Log all executions of this query to the Audit Log for tracking and compliance");
939
889
  i0.ɵɵelementEnd();
940
890
  } if (rf & 2) {
@@ -942,20 +892,20 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Template(rf,
942
892
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.AuditQueryRuns);
943
893
  } }
944
894
  function MJQueryFormComponentExtended_Conditional_0_Conditional_66_Conditional_1_Template(rf, ctx) { if (rf & 1) {
945
- i0.ɵɵelementStart(0, "span", 142);
946
- i0.ɵɵelement(1, "i", 144);
895
+ i0.ɵɵelementStart(0, "span", 140);
896
+ i0.ɵɵelement(1, "i", 142);
947
897
  i0.ɵɵtext(2, " Auditing On");
948
898
  i0.ɵɵelementEnd();
949
899
  } }
950
900
  function MJQueryFormComponentExtended_Conditional_0_Conditional_66_Conditional_2_Template(rf, ctx) { if (rf & 1) {
951
- i0.ɵɵelementStart(0, "span", 143);
952
- i0.ɵɵelement(1, "i", 145);
901
+ i0.ɵɵelementStart(0, "span", 141);
902
+ i0.ɵɵelement(1, "i", 143);
953
903
  i0.ɵɵtext(2, " Auditing Off");
954
904
  i0.ɵɵelementEnd();
955
905
  } }
956
906
  function MJQueryFormComponentExtended_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
957
907
  i0.ɵɵelementStart(0, "div", 39);
958
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_66_Conditional_1_Template, 3, 0, "span", 142)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_66_Conditional_2_Template, 3, 0, "span", 143);
908
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_66_Conditional_1_Template, 3, 0, "span", 140)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_66_Conditional_2_Template, 3, 0, "span", 141);
959
909
  i0.ɵɵelementEnd();
960
910
  } if (rf & 2) {
961
911
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -964,7 +914,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_66_Template(rf,
964
914
  } }
965
915
  function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
966
916
  const _r36 = i0.ɵɵgetCurrentView();
967
- i0.ɵɵelementStart(0, "mj-switch", 150);
917
+ i0.ɵɵelementStart(0, "mj-switch", 148);
968
918
  i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UsesTemplate, $event) || (ctx_r1.record.UsesTemplate = $event); return i0.ɵɵresetView($event); });
969
919
  i0.ɵɵelementEnd();
970
920
  } if (rf & 2) {
@@ -972,20 +922,20 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Template(rf,
972
922
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.UsesTemplate);
973
923
  } }
974
924
  function MJQueryFormComponentExtended_Conditional_0_Conditional_72_Conditional_1_Template(rf, ctx) { if (rf & 1) {
975
- i0.ɵɵelementStart(0, "span", 142);
976
- i0.ɵɵelement(1, "i", 144);
925
+ i0.ɵɵelementStart(0, "span", 140);
926
+ i0.ɵɵelement(1, "i", 142);
977
927
  i0.ɵɵtext(2, " Uses Templates");
978
928
  i0.ɵɵelementEnd();
979
929
  } }
980
930
  function MJQueryFormComponentExtended_Conditional_0_Conditional_72_Conditional_2_Template(rf, ctx) { if (rf & 1) {
981
- i0.ɵɵelementStart(0, "span", 143);
982
- i0.ɵɵelement(1, "i", 145);
931
+ i0.ɵɵelementStart(0, "span", 141);
932
+ i0.ɵɵelement(1, "i", 143);
983
933
  i0.ɵɵtext(2, " No Templates");
984
934
  i0.ɵɵelementEnd();
985
935
  } }
986
936
  function MJQueryFormComponentExtended_Conditional_0_Conditional_72_Template(rf, ctx) { if (rf & 1) {
987
937
  i0.ɵɵelementStart(0, "div", 39);
988
- i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_72_Conditional_1_Template, 3, 0, "span", 142)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_72_Conditional_2_Template, 3, 0, "span", 143);
938
+ i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_72_Conditional_1_Template, 3, 0, "span", 140)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_72_Conditional_2_Template, 3, 0, "span", 141);
989
939
  i0.ɵɵelementEnd();
990
940
  } if (rf & 2) {
991
941
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -994,7 +944,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_72_Template(rf,
994
944
  } }
995
945
  function MJQueryFormComponentExtended_Conditional_0_Conditional_85_Template(rf, ctx) { if (rf & 1) {
996
946
  i0.ɵɵelementStart(0, "div", 36)(1, "label", 37);
997
- i0.ɵɵelement(2, "i", 151);
947
+ i0.ɵɵelement(2, "i", 149);
998
948
  i0.ɵɵtext(3, " Quality Rank ");
999
949
  i0.ɵɵelementEnd();
1000
950
  i0.ɵɵelementStart(4, "div", 39);
@@ -1006,42 +956,35 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_85_Template(rf,
1006
956
  i0.ɵɵtextInterpolate1("", ctx_r1.record.QualityRank, "/10");
1007
957
  } }
1008
958
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_ng_template_1_Template(rf, ctx) { if (rf & 1) {
1009
- i0.ɵɵelementStart(0, "span", 65);
1010
- i0.ɵɵelement(1, "i", 152);
959
+ i0.ɵɵelementStart(0, "span", 64);
960
+ i0.ɵɵelement(1, "i", 150);
1011
961
  i0.ɵɵtext(2, " Permissions ");
1012
962
  i0.ɵɵelementEnd();
1013
963
  } }
1014
964
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_3_Template(rf, ctx) { if (rf & 1) {
1015
- i0.ɵɵelementStart(0, "div", 83);
1016
- i0.ɵɵelement(1, "mj-loading", 153);
965
+ i0.ɵɵelementStart(0, "div", 82);
966
+ i0.ɵɵelement(1, "mj-loading", 151);
1017
967
  i0.ɵɵelementEnd();
1018
968
  } }
1019
969
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
1020
- i0.ɵɵelementStart(0, "div", 87);
1021
- i0.ɵɵelement(1, "i", 154);
1022
- i0.ɵɵelementStart(2, "div", 89);
1023
- i0.ɵɵtext(3, "No Permissions Set");
1024
- i0.ɵɵelementEnd();
1025
- i0.ɵɵelementStart(4, "div", 90);
1026
- i0.ɵɵtext(5, " This query uses default permissions. ");
1027
- i0.ɵɵelementEnd()();
970
+ i0.ɵɵelement(0, "mj-empty-state", 152);
1028
971
  } }
1029
972
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
1030
- i0.ɵɵelement(0, "mj-explorer-entity-data-grid", 155);
973
+ i0.ɵɵelement(0, "mj-explorer-entity-data-grid", 153);
1031
974
  } if (rf & 2) {
1032
975
  const ctx_r1 = i0.ɵɵnextContext(5);
1033
976
  i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: Query Permissions", "QueryID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: Query Permissions"))("AllowLoad", true)("ShowToolbar", false);
1034
977
  } }
1035
978
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
1036
- i0.ɵɵelementStart(0, "div", 157);
1037
- i0.ɵɵelement(1, "i", 158);
1038
- i0.ɵɵelementStart(2, "div", 159)(3, "div", 160);
979
+ i0.ɵɵelementStart(0, "div", 155);
980
+ i0.ɵɵelement(1, "i", 156);
981
+ i0.ɵɵelementStart(2, "div", 157)(3, "div", 158);
1039
982
  i0.ɵɵtext(4);
1040
983
  i0.ɵɵelementEnd();
1041
- i0.ɵɵelementStart(5, "div", 161);
984
+ i0.ɵɵelementStart(5, "div", 159);
1042
985
  i0.ɵɵtext(6, "Role Permission");
1043
986
  i0.ɵɵelementEnd()();
1044
- i0.ɵɵelementStart(7, "span", 162);
987
+ i0.ɵɵelementStart(7, "span", 160);
1045
988
  i0.ɵɵelement(8, "i", 50);
1046
989
  i0.ɵɵtext(9, " Can Execute ");
1047
990
  i0.ɵɵelementEnd()();
@@ -1051,8 +994,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4
1051
994
  i0.ɵɵtextInterpolate(permission_r38.Role);
1052
995
  } }
1053
996
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1054
- i0.ɵɵelementStart(0, "div", 156);
1055
- i0.ɵɵrepeaterCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_1_For_2_Template, 10, 1, "div", 157, _forTrack2);
997
+ i0.ɵɵelementStart(0, "div", 154);
998
+ i0.ɵɵrepeaterCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_1_For_2_Template, 10, 1, "div", 155, _forTrack2);
1056
999
  i0.ɵɵelementEnd();
1057
1000
  } if (rf & 2) {
1058
1001
  const ctx_r1 = i0.ɵɵnextContext(5);
@@ -1060,13 +1003,13 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4
1060
1003
  i0.ɵɵrepeater(ctx_r1.queryPermissions);
1061
1004
  } }
1062
1005
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
1063
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_0_Template, 1, 4, "mj-explorer-entity-data-grid", 155)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_1_Template, 3, 0, "div", 156);
1006
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_0_Template, 1, 4, "mj-explorer-entity-data-grid", 153)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Conditional_1_Template, 3, 0, "div", 154);
1064
1007
  } if (rf & 2) {
1065
1008
  const ctx_r1 = i0.ɵɵnextContext(4);
1066
1009
  i0.ɵɵconditional(ctx_r1.EditMode ? 0 : 1);
1067
1010
  } }
1068
1011
  function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Template(rf, ctx) { if (rf & 1) {
1069
- i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_0_Template, 6, 0, "div", 87)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Template, 2, 1);
1012
+ i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_0_Template, 1, 0, "mj-empty-state", 152)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Conditional_1_Template, 2, 1);
1070
1013
  } if (rf & 2) {
1071
1014
  const ctx_r1 = i0.ɵɵnextContext(3);
1072
1015
  i0.ɵɵconditional(ctx_r1.queryPermissions.length === 0 && !ctx_r1.EditMode ? 0 : 1);
@@ -1077,7 +1020,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Template(rf,
1077
1020
  i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_86_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.permissionsPanelExpanded, $event) || (ctx_r1.permissionsPanelExpanded = $event); return i0.ɵɵresetView($event); });
1078
1021
  i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_86_ng_template_1_Template, 3, 0, "ng-template", 25);
1079
1022
  i0.ɵɵelementStart(2, "div", 34);
1080
- i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_3_Template, 2, 0, "div", 83)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Template, 2, 1);
1023
+ i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_3_Template, 2, 0, "div", 82)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_86_Conditional_4_Template, 2, 1);
1081
1024
  i0.ɵɵelementEnd()();
1082
1025
  } if (rf & 2) {
1083
1026
  const ctx_r1 = i0.ɵɵnextContext(2);
@@ -1110,7 +1053,7 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
1110
1053
  i0.ɵɵelementEnd()();
1111
1054
  i0.ɵɵconditionalCreate(24, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template, 3, 1, "div", 21);
1112
1055
  i0.ɵɵelementEnd()();
1113
- i0.ɵɵconditionalCreate(25, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template, 7, 8, "div", 22);
1056
+ i0.ɵɵconditionalCreate(25, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template, 6, 2, "mj-alert", 22);
1114
1057
  i0.ɵɵelementStart(26, "div", 23)(27, "mj-accordion-panel", 24);
1115
1058
  i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_27_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.sqlPanelExpanded, $event) || (ctx_r1.sqlPanelExpanded = $event); return i0.ɵɵresetView($event); });
1116
1059
  i0.ɵɵtemplate(28, MJQueryFormComponentExtended_Conditional_0_ng_template_28_Template, 5, 1, "ng-template", 25);
@@ -1302,6 +1245,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1302
1245
  this.sqlFilters = RUN_QUERY_SQL_FILTERS;
1303
1246
  this.navigationService = inject(NavigationService);
1304
1247
  this.formPresenter = inject(MJFormPresenterService);
1248
+ this.confirmService = inject(MJConfirmService);
1305
1249
  this.destroy$ = new Subject();
1306
1250
  this.isUpdatingEditorValue = false;
1307
1251
  this.isInitialLoad = true;
@@ -1611,7 +1555,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1611
1555
  * Delete a parameter
1612
1556
  */
1613
1557
  async deleteParameter(param) {
1614
- if (!confirm(`Are you sure you want to delete parameter "${param.Name}"?`)) {
1558
+ if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Parameter', message: `Delete parameter "${param.Name}"?` }))) {
1615
1559
  return;
1616
1560
  }
1617
1561
  try {
@@ -1888,7 +1832,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1888
1832
  * Delete a field
1889
1833
  */
1890
1834
  async deleteField(field) {
1891
- if (!confirm(`Are you sure you want to delete field "${field.Name}"?`)) {
1835
+ if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Field', message: `Delete field "${field.Name}"?` }))) {
1892
1836
  return;
1893
1837
  }
1894
1838
  try {
@@ -1938,7 +1882,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1938
1882
  * Delete an entity
1939
1883
  */
1940
1884
  async deleteEntity(entity) {
1941
- if (!confirm(`Are you sure you want to delete entity "${entity.Entity}"?`)) {
1885
+ if (!(await this.confirmService.ConfirmDelete({ title: 'Delete Entity', message: `Delete entity "${entity.Entity}"?` }))) {
1942
1886
  return;
1943
1887
  }
1944
1888
  try {
@@ -1988,11 +1932,11 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
1988
1932
  } if (rf & 2) {
1989
1933
  let _t;
1990
1934
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sqlEditor = _t.first);
1991
- } }, 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"], [1, "status-warning-banner", 3, "border-left-color"], [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"], [1, "sql-editor", 3, "change", "CompositionTokenClick", "language"], [1, "filters-help"], [1, "query-panel", 3, "Expanded"], [1, "panel-body"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-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, "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"], ["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, "status-warning-banner"], [1, "panel-title-row"], [1, "panel-title"], [1, "fa-solid", "fa-code", "panel-icon", "sql-icon"], [1, "panel-badge", "defined"], [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..."], [1, "empty-state"], [1, "fa-solid", "fa-sliders", "empty-state-icon"], [1, "empty-state-title"], [1, "empty-state-text"], ["type", "button", 1, "add-item-btn"], ["type", "button", 1, "add-item-btn", 3, "click"], [1, "panel-toolbar"], [1, "card-grid"], [1, "item-card", 3, "required"], [1, "item-card", 3, "click"], [1, "item-card-header"], [1, "item-name"], [1, "fa-solid", "fa-at", "item-name-icon", "param-icon"], [1, "item-badges"], [1, "item-badge", "required"], [1, "item-card-body"], [1, "item-description"], [1, "item-meta"], [1, "meta-tag"], [1, "item-actions"], [1, "meta-code"], [1, "item-actions", 3, "click"], ["type", "button", "title", "Edit parameter", 1, "item-action-btn", 3, "click"], ["type", "button", "title", "Delete parameter", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-table", "panel-icon"], ["text", "Loading fields..."], [1, "fa-solid", "fa-table", "empty-state-icon"], [1, "item-card"], [1, "fa-solid", "fa-columns", "item-name-icon", "field-icon"], [1, "item-badge", "type"], [1, "item-badge", "sequence"], [1, "fa-solid", "fa-code"], [1, "item-card-actions"], ["type", "button", "title", "Delete field", 1, "item-action-btn", "delete", 3, "click"], [1, "dependents-description"], [1, "item-card", "dependent-card"], [1, "fa-solid", "fa-arrow-left", "panel-icon", "dependents-icon"], [1, "item-card", "dependent-card", 3, "click"], [1, "fa-solid", "fa-arrow-left", "item-name-icon", "dependent-query-icon"], [1, "item-card-footer"], [1, "open-link"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-database", "panel-icon"], ["text", "Loading entities..."], [1, "fa-solid", "fa-database", "empty-state-icon"], [1, "fa-solid", "fa-table", "item-name-icon", "entity-icon"], [1, "entity-dropdown-wrapper"], ["TextField", "text", "ValueField", "id", "Placeholder", "Select entity...", 1, "entity-dropdown", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], [1, "fa-solid", "fa-database"], ["type", "button", "title", "Delete entity", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-info-circle", "panel-icon"], ["name", "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..."], [1, "fa-solid", "fa-shield-alt", "empty-state-icon"], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "permissions-list"], [1, "permission-card"], [1, "fa-solid", "fa-users", "permission-icon"], [1, "permission-info"], [1, "permission-role"], [1, "permission-type"], [1, "permission-badge"]], template: function MJQueryFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
1935
+ } }, 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"], [1, "sql-editor", 3, "change", "CompositionTokenClick", "language"], [1, "filters-help"], [1, "query-panel", 3, "Expanded"], [1, "panel-body"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-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, "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"], ["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"], [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", "Add parameters to make your query dynamic and reusable.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Add parameters to make your query dynamic and reusable.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "panel-toolbar"], [1, "card-grid"], [1, "item-card", 3, "required"], ["type", "button", 1, "add-item-btn", 3, "click"], [1, "item-card", 3, "click"], [1, "item-card-header"], [1, "item-name"], [1, "fa-solid", "fa-at", "item-name-icon", "param-icon"], [1, "item-badges"], [1, "item-badge", "required"], [1, "item-card-body"], [1, "item-description"], [1, "item-meta"], [1, "meta-tag"], [1, "item-actions"], [1, "meta-code"], [1, "item-actions", 3, "click"], ["type", "button", "title", "Edit parameter", 1, "item-action-btn", 3, "click"], ["type", "button", "title", "Delete parameter", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-table", "panel-icon"], ["text", "Loading fields..."], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Define output fields for your query results.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Define output fields for your query results.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "item-card"], [1, "fa-solid", "fa-columns", "item-name-icon", "field-icon"], [1, "item-badge", "type"], [1, "item-badge", "sequence"], [1, "fa-solid", "fa-code"], [1, "item-card-actions"], ["type", "button", "title", "Delete field", 1, "item-action-btn", "delete", 3, "click"], [1, "dependents-description"], [1, "item-card", "dependent-card"], [1, "fa-solid", "fa-arrow-left", "panel-icon", "dependents-icon"], [1, "item-card", "dependent-card", 3, "click"], [1, "fa-solid", "fa-arrow-left", "item-name-icon", "dependent-query-icon"], [1, "item-card-footer"], [1, "open-link"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "fa-solid", "fa-link"], [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, "fa-solid", "fa-table", "item-name-icon", "entity-icon"], [1, "entity-dropdown-wrapper"], ["TextField", "text", "ValueField", "id", "Placeholder", "Select entity...", 1, "entity-dropdown", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], [1, "fa-solid", "fa-database"], ["type", "button", "title", "Delete entity", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-info-circle", "panel-icon"], ["name", "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) {
1992
1936
  i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Template, 88, 38);
1993
1937
  } if (rf & 2) {
1994
1938
  i0.ɵɵconditional(ctx.record ? 0 : -1);
1995
- } }, dependencies: [i1.NgClass, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.MinValidator, i2.NgModel, i2.NgForm, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJDropdownComponent, i3.MJSwitchComponent, i4.MjRecordFormContainerComponent, i4.ExplorerEntityDataGridComponent, i5.CodeEditorComponent, i6.LoadingComponent, i7.MarkdownComponent, i8.TreeDropdownComponent, i9.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\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\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: 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\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\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\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\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\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\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\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}", "\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n\n\n\n.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\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\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\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.status-warning-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n margin: 0;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n border-left: 4px solid var(--mj-status-warning);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n.status-warning-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-base);\n flex-shrink: 0;\n}\n\n.status-warning-banner[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n font-weight: 600;\n}\n\n\n\n\n\n\n.query-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n}\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: white !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\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\n.panel-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-icon[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\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: white;\n}\n\n.panel-badge.count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\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\n.panel-body[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n\n\n\n\n\n.sql-panel-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor[_ngcontent-%COMP%] {\n flex: 1;\n height: 400px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\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\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: white;\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%, purple);\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\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\n.entity-dropdown-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 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\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: white;\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.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.empty-state-icon[_ngcontent-%COMP%] {\n font-size: 40px;\n margin-bottom: 14px;\n opacity: 0.25;\n color: var(--mj-text-primary);\n}\n\n.empty-state-title[_ngcontent-%COMP%] {\n font-size: var(--mj-text-base);\n font-weight: 600;\n margin-bottom: 6px;\n color: var(--mj-text-secondary);\n}\n\n.empty-state-text[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n margin-bottom: 16px;\n color: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.add-item-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\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\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\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\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\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}"] }); }
1939
+ } }, 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.LoadingComponent, i7.MarkdownComponent, i8.TreeDropdownComponent, i9.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\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\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: 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\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\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\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\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\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\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\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}", "\n\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n\n\n\n.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\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\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\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\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\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: white !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\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\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: white;\n}\n\n.panel-badge.count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\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\n.panel-body[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n\n\n\n\n\n.sql-panel-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor[_ngcontent-%COMP%] {\n flex: 1;\n height: 400px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\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\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: white;\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%, purple);\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\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\n.entity-dropdown-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: 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\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: white;\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\n\n.add-item-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\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\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\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\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\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}"] }); }
1996
1940
  };
1997
1941
  MJQueryFormComponentExtended = __decorate([
1998
1942
  RegisterClass(BaseFormComponent, 'MJ: Queries')
@@ -2000,10 +1944,10 @@ MJQueryFormComponentExtended = __decorate([
2000
1944
  export { MJQueryFormComponentExtended };
2001
1945
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJQueryFormComponentExtended, [{
2002
1946
  type: Component,
2003
- 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 </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 <div class=\"status-warning-banner\" [style.border-left-color]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"\n [style.color]=\"getStatusBadgeColor()\"></i>\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </div>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" [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 <!-- 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 <!-- 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) {\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-sliders empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Parameters Defined</div>\n <div class=\"empty-state-text\">\n Add parameters to make your query dynamic and reusable.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Parameter\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"item-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-at item-name-icon param-icon\"></i>\n {{ param.Name }}\n </div>\n <div class=\"item-badges\">\n @if (param.IsRequired) {\n <span class=\"item-badge required\">Required</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (param.Description) {\n <div class=\"item-description\">{{ param.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </span>\n @if (param.DefaultValue) {\n <span class=\"meta-tag\">\n <strong>Default:</strong>\n <code class=\"meta-code\">{{ param.DefaultValue }}</code>\n </span>\n }\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"item-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-table empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Fields Defined</div>\n <div class=\"empty-state-text\">\n Define output fields for your query results.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Field\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-columns item-name-icon field-icon\"></i>\n {{ field.Name }}\n </div>\n <div class=\"item-badges\">\n <span class=\"item-badge type\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"item-badge sequence\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (field.Description) {\n <div class=\"item-description\">{{ field.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </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) {\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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-database empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Entities Tracked</div>\n <div class=\"empty-state-text\">\n Track which entities this query uses for documentation.\n </div>\n @if (EditMode) {\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add First Entity\n </button>\n }\n </div>\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <mj-dropdown\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + entity.ID\"\n [Data]=\"getEntityOptions()\"\n TextField=\"text\"\n ValueField=\"id\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </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 </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 <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-alt empty-state-icon\"></i>\n <div class=\"empty-state-title\">No Permissions Set</div>\n <div class=\"empty-state-text\">\n This query uses default permissions.\n </div>\n </div>\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n </div>\n </form>\n</mj-record-form-container>\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.status-warning-banner {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 16px;\n margin: 0;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, var(--mj-bg-surface));\n border-left: 4px solid var(--mj-status-warning);\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n.status-warning-banner i {\n font-size: var(--mj-text-base);\n flex-shrink: 0;\n}\n\n.status-warning-banner strong {\n font-weight: 600;\n}\n\n/* ========================================\n Main Content Area\n ======================================== */\n\n.query-content {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: 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: white !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\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 font-size: var(--mj-text-sm);\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: white;\n}\n\n.panel-badge.count {\n background: var(--mj-brand-primary);\n color: white;\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: white;\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%, purple);\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: white;\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.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.empty-state-icon {\n font-size: 40px;\n margin-bottom: 14px;\n opacity: 0.25;\n color: var(--mj-text-primary);\n}\n\n.empty-state-title {\n font-size: var(--mj-text-base);\n font-weight: 600;\n margin-bottom: 6px;\n color: var(--mj-text-secondary);\n}\n\n.empty-state-text {\n font-size: var(--mj-text-sm);\n margin-bottom: 16px;\n color: var(--mj-text-disabled);\n}\n\n/* ========================================\n Buttons\n ======================================== */\n\n.add-item-btn {\n background: var(--mj-brand-primary);\n color: white;\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"] }]
1947
+ 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 </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 <!-- 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 <!-- 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) {\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=\"Add parameters to make your query dynamic and reusable.\"\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 <div class=\"card-grid\">\n @for (param of queryParameters; track param.ID || $index) {\n <div class=\"item-card\" [class.required]=\"param.IsRequired\" (click)=\"editParameter(param)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-at item-name-icon param-icon\"></i>\n {{ param.Name }}\n </div>\n <div class=\"item-badges\">\n @if (param.IsRequired) {\n <span class=\"item-badge required\">Required</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (param.Description) {\n <div class=\"item-description\">{{ param.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Type:</strong> {{ param.Type || 'Text' }}\n </span>\n @if (param.DefaultValue) {\n <span class=\"meta-tag\">\n <strong>Default:</strong>\n <code class=\"meta-code\">{{ param.DefaultValue }}</code>\n </span>\n }\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-actions\" (click)=\"$event.stopPropagation()\">\n <button type=\"button\" class=\"item-action-btn\" (click)=\"editParameter(param)\" title=\"Edit parameter\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteParameter(param)\" title=\"Delete parameter\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved) {\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=\"Define output fields for your query results.\"\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 <div class=\"card-grid\">\n @for (field of queryFields; track field.ID) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-columns item-name-icon field-icon\"></i>\n {{ field.Name }}\n </div>\n <div class=\"item-badges\">\n <span class=\"item-badge type\">{{ field.SQLBaseType }}</span>\n @if (field.Sequence) {\n <span class=\"item-badge sequence\">#{{ field.Sequence }}</span>\n }\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (field.Description) {\n <div class=\"item-description\">{{ field.Description }}</div>\n }\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-code\"></i> {{ field.SQLFullType || field.SQLBaseType }}\n </span>\n </div>\n </div>\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteField(field)\" title=\"Delete field\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </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) {\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) {\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\"\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 </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<!-- 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: white !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\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: white;\n}\n\n.panel-badge.count {\n background: var(--mj-brand-primary);\n color: white;\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: white;\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%, purple);\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: white;\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: white;\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"] }]
2004
1948
  }], null, { sqlEditor: [{
2005
1949
  type: ViewChild,
2006
1950
  args: ['sqlEditor']
2007
1951
  }] }); })();
2008
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJQueryFormComponentExtended, { className: "MJQueryFormComponentExtended", filePath: "src/lib/custom/Queries/query-form.component.ts", lineNumber: 26 }); })();
1952
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJQueryFormComponentExtended, { className: "MJQueryFormComponentExtended", filePath: "src/lib/custom/Queries/query-form.component.ts", lineNumber: 27 }); })();
2009
1953
  //# sourceMappingURL=query-form.component.js.map