@memberjunction/ng-core-entity-forms 5.21.0 → 5.23.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 (157) hide show
  1. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +4 -5
  2. package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts.map +1 -1
  3. package/dist/lib/custom/AIAgents/add-action-dialog.component.js +55 -59
  4. package/dist/lib/custom/AIAgents/add-action-dialog.component.js.map +1 -1
  5. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js +0 -1
  6. package/dist/lib/custom/AIAgents/agent-advanced-settings-dialog.component.js.map +1 -1
  7. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts +4 -5
  8. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.d.ts.map +1 -1
  9. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +54 -71
  10. package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js.map +1 -1
  11. package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
  12. package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1053 -1096
  13. package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
  14. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -3
  15. package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
  16. package/dist/lib/custom/AIAgents/ai-agent-management.service.js +39 -82
  17. package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
  18. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +4 -5
  19. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
  20. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +28 -31
  21. package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
  22. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +4 -5
  23. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
  24. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +15 -14
  25. package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
  26. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +4 -7
  27. package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
  28. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +77 -124
  29. package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
  30. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +2 -2
  31. package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
  32. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js +10 -11
  33. package/dist/lib/custom/AIAgents/new-agent-dialog.service.js.map +1 -1
  34. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +4 -5
  35. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
  36. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +18 -18
  37. package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js.map +1 -1
  38. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +4 -5
  39. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
  40. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +59 -80
  41. package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
  42. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +4 -5
  43. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
  44. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +23 -24
  45. package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
  46. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
  47. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +862 -906
  48. package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
  49. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +4 -5
  50. package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js.map +1 -1
  51. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +448 -499
  52. package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
  53. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts +2 -2
  54. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.d.ts.map +1 -1
  55. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js +6 -11
  56. package/dist/lib/custom/AIPrompts/ai-prompt-management.service.js.map +1 -1
  57. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts +4 -5
  58. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.d.ts.map +1 -1
  59. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js +16 -15
  60. package/dist/lib/custom/AIPrompts/template-selector-dialog.component.js.map +1 -1
  61. package/dist/lib/custom/Actions/action-execution-log-form.component.js +160 -166
  62. package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
  63. package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
  64. package/dist/lib/custom/Actions/action-form.component.js +93 -94
  65. package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
  66. package/dist/lib/custom/Entities/entity-form.component.js +2 -2
  67. package/dist/lib/custom/Lists/list-form.component.js +61 -63
  68. package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
  69. package/dist/lib/custom/Queries/query-category-dialog.component.js +33 -59
  70. package/dist/lib/custom/Queries/query-category-dialog.component.js.map +1 -1
  71. package/dist/lib/custom/Queries/query-form.component.js +354 -360
  72. package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
  73. package/dist/lib/custom/Queries/query-run-dialog.component.js +62 -71
  74. package/dist/lib/custom/Queries/query-run-dialog.component.js.map +1 -1
  75. package/dist/lib/custom/Templates/template-param-dialog.component.js +128 -124
  76. package/dist/lib/custom/Templates/template-param-dialog.component.js.map +1 -1
  77. package/dist/lib/custom/Templates/template-params-grid.component.d.ts +45 -22
  78. package/dist/lib/custom/Templates/template-params-grid.component.d.ts.map +1 -1
  79. package/dist/lib/custom/Templates/template-params-grid.component.js +380 -384
  80. package/dist/lib/custom/Templates/template-params-grid.component.js.map +1 -1
  81. package/dist/lib/custom/Templates/templates-form.component.js +34 -36
  82. package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
  83. package/dist/lib/custom/Tests/test-form.component.js +9 -10
  84. package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
  85. package/dist/lib/custom/Tests/test-run-feedback-form.component.js +4 -4
  86. package/dist/lib/custom/Tests/test-run-feedback-form.component.js.map +1 -1
  87. package/dist/lib/custom/Tests/test-run-form.component.js +8 -8
  88. package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
  89. package/dist/lib/custom/Tests/test-suite-form.component.js +7 -8
  90. package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
  91. package/dist/lib/custom/Tests/test-suite-run-form.component.js +7 -8
  92. package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
  93. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js +381 -409
  94. package/dist/lib/custom/ai-agent-run/ai-agent-run-analytics.component.js.map +1 -1
  95. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.d.ts.map +1 -1
  96. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js +1 -1
  97. package/dist/lib/custom/ai-agent-run/ai-agent-run-data.service.js.map +1 -1
  98. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.d.ts.map +1 -1
  99. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js +74 -63
  100. package/dist/lib/custom/ai-agent-run/ai-agent-run-timeline.component.js.map +1 -1
  101. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js +10 -10
  102. package/dist/lib/custom/ai-agent-run/ai-agent-run-visualization.component.js.map +1 -1
  103. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
  104. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +352 -332
  105. package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
  106. package/dist/lib/custom/custom-forms.module.d.ts +22 -27
  107. package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
  108. package/dist/lib/custom/custom-forms.module.js +51 -81
  109. package/dist/lib/custom/custom-forms.module.js.map +1 -1
  110. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts +4 -5
  111. package/dist/lib/custom/shared/entity-selector-dialog.component.d.ts.map +1 -1
  112. package/dist/lib/custom/shared/entity-selector-dialog.component.js +59 -66
  113. package/dist/lib/custom/shared/entity-selector-dialog.component.js.map +1 -1
  114. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.d.ts.map +1 -1
  115. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js +176 -156
  116. package/dist/lib/generated/Entities/MJAIAgent/mjaiagent.form.component.js.map +1 -1
  117. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts +10 -0
  118. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.d.ts.map +1 -0
  119. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js +65 -0
  120. package/dist/lib/generated/Entities/MJAIAgentClientTool/mjaiagentclienttool.form.component.js.map +1 -0
  121. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts +10 -0
  122. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.d.ts.map +1 -0
  123. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js +89 -0
  124. package/dist/lib/generated/Entities/MJAIClientToolDefinition/mjaiclienttooldefinition.form.component.js.map +1 -0
  125. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.d.ts.map +1 -1
  126. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +80 -44
  127. package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
  128. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js +11 -8
  129. package/dist/lib/generated/Entities/MJContentItemTag/mjcontentitemtag.form.component.js.map +1 -1
  130. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.d.ts.map +1 -1
  131. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js +39 -24
  132. package/dist/lib/generated/Entities/MJContentSource/mjcontentsource.form.component.js.map +1 -1
  133. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.d.ts.map +1 -1
  134. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js +35 -17
  135. package/dist/lib/generated/Entities/MJContentType/mjcontenttype.form.component.js.map +1 -1
  136. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js +15 -13
  137. package/dist/lib/generated/Entities/MJDuplicateRunDetail/mjduplicaterundetail.form.component.js.map +1 -1
  138. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.d.ts.map +1 -1
  139. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js +7 -9
  140. package/dist/lib/generated/Entities/MJDuplicateRunDetailMatch/mjduplicaterundetailmatch.form.component.js.map +1 -1
  141. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js +28 -24
  142. package/dist/lib/generated/Entities/MJEntityDocument/mjentitydocument.form.component.js.map +1 -1
  143. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.d.ts.map +1 -1
  144. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js +21 -9
  145. package/dist/lib/generated/Entities/MJEntityField/mjentityfield.form.component.js.map +1 -1
  146. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js +19 -17
  147. package/dist/lib/generated/Entities/MJVectorDatabase/mjvectordatabase.form.component.js.map +1 -1
  148. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.d.ts.map +1 -1
  149. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js +82 -14
  150. package/dist/lib/generated/Entities/MJVectorIndex/mjvectorindex.form.component.js.map +1 -1
  151. package/dist/lib/generated/generated-forms.module.d.ts +280 -279
  152. package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
  153. package/dist/lib/generated/generated-forms.module.js +102 -142
  154. package/dist/lib/generated/generated-forms.module.js.map +1 -1
  155. package/dist/lib/shared/components/template-editor.component.js +14 -15
  156. package/dist/lib/shared/components/template-editor.component.js.map +1 -1
  157. package/package.json +34 -41
@@ -3,10 +3,7 @@ import { MJNotificationService } from '@memberjunction/ng-notifications';
3
3
  import { Metadata } from '@memberjunction/core';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/forms";
6
- import * as i2 from "@progress/kendo-angular-layout";
7
- import * as i3 from "@progress/kendo-angular-dialog";
8
- import * as i4 from "@progress/kendo-angular-inputs";
9
- import * as i5 from "@progress/kendo-angular-buttons";
6
+ import * as i2 from "@memberjunction/ng-ui-components";
10
7
  const _forTrack0 = ($index, $item) => $item.name;
11
8
  const _forTrack1 = ($index, $item) => $item.field;
12
9
  function QueryRunDialogComponent_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
@@ -47,8 +44,8 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8
47
44
  } }
48
45
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_12_Template(rf, ctx) { if (rf & 1) {
49
46
  const _r6 = i0.ɵɵgetCurrentView();
50
- i0.ɵɵelementStart(0, "kendo-numerictextbox", 41);
51
- i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_12_Template_kendo_numerictextbox_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const param_r5 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(param_r5.value, $event) || (param_r5.value = $event); return i0.ɵɵresetView($event); });
47
+ i0.ɵɵelementStart(0, "input", 41);
48
+ i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_12_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r6); const param_r5 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(param_r5.value, $event) || (param_r5.value = $event); return i0.ɵɵresetView($event); });
52
49
  i0.ɵɵelementEnd();
53
50
  } if (rf & 2) {
54
51
  const param_r5 = i0.ɵɵnextContext().$implicit;
@@ -56,13 +53,13 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8
56
53
  } }
57
54
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_13_Template(rf, ctx) { if (rf & 1) {
58
55
  const _r7 = i0.ɵɵgetCurrentView();
59
- i0.ɵɵelementStart(0, "kendo-textarea", 42);
60
- i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_13_Template_kendo_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const param_r5 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(param_r5.value, $event) || (param_r5.value = $event); return i0.ɵɵresetView($event); });
56
+ i0.ɵɵelementStart(0, "textarea", 42);
57
+ i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_13_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const param_r5 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(param_r5.value, $event) || (param_r5.value = $event); return i0.ɵɵresetView($event); });
58
+ i0.ɵɵtext(1, " ");
61
59
  i0.ɵɵelementEnd();
62
60
  } if (rf & 2) {
63
61
  const param_r5 = i0.ɵɵnextContext().$implicit;
64
62
  i0.ɵɵtwoWayProperty("ngModel", param_r5.value);
65
- i0.ɵɵproperty("rows", 2);
66
63
  } }
67
64
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_14_Template(rf, ctx) { if (rf & 1) {
68
65
  i0.ɵɵelementStart(0, "div", 40);
@@ -88,7 +85,7 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8
88
85
  i0.ɵɵelementEnd();
89
86
  i0.ɵɵconditionalCreate(11, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_11_Template, 1, 0, "i", 37);
90
87
  i0.ɵɵelementEnd()();
91
- i0.ɵɵconditionalCreate(12, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_12_Template, 1, 1, "kendo-numerictextbox", 38)(13, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_13_Template, 1, 2, "kendo-textarea", 39);
88
+ i0.ɵɵconditionalCreate(12, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_12_Template, 1, 1, "input", 38)(13, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_13_Template, 2, 1, "textarea", 39);
92
89
  i0.ɵɵconditionalCreate(14, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8_Conditional_14_Template, 4, 1, "div", 40);
93
90
  i0.ɵɵelementEnd();
94
91
  } if (rf & 2) {
@@ -111,8 +108,8 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_For_8
111
108
  } }
112
109
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
113
110
  const _r4 = i0.ɵɵgetCurrentView();
114
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 22);
115
- i0.ɵɵtwoWayListener("expandedChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_Template_kendo_expansionpanel_expandedChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.parametersExpanded, $event) || (ctx_r1.parametersExpanded = $event); return i0.ɵɵresetView($event); });
111
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 22);
112
+ i0.ɵɵtwoWayListener("ExpandedChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.parametersExpanded, $event) || (ctx_r1.parametersExpanded = $event); return i0.ɵɵresetView($event); });
116
113
  i0.ɵɵtemplate(1, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_ng_template_1_Template, 5, 1, "ng-template", 11);
117
114
  i0.ɵɵelementStart(2, "div", 12)(3, "div", 23);
118
115
  i0.ɵɵelement(4, "i", 24);
@@ -123,7 +120,7 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_Templ
123
120
  i0.ɵɵelementEnd()()();
124
121
  } if (rf & 2) {
125
122
  const ctx_r1 = i0.ɵɵnextContext(3);
126
- i0.ɵɵtwoWayProperty("expanded", ctx_r1.parametersExpanded);
123
+ i0.ɵɵtwoWayProperty("Expanded", ctx_r1.parametersExpanded);
127
124
  i0.ɵɵadvance(7);
128
125
  i0.ɵɵrepeater(ctx_r1.parameterPairs);
129
126
  } }
@@ -153,54 +150,50 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_ng_template_3_Templ
153
150
  i0.ɵɵadvance(3);
154
151
  i0.ɵɵconditional(ctx_r1.maxRows && ctx_r1.maxRows > 0 ? 3 : -1);
155
152
  } }
156
- function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
157
- i0.ɵɵelementStart(0, "span", 29);
158
- i0.ɵɵtext(1);
159
- i0.ɵɵelementEnd();
153
+ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
154
+ i0.ɵɵtext(0);
160
155
  } if (rf & 2) {
161
156
  const ctx_r1 = i0.ɵɵnextContext(6);
162
- i0.ɵɵadvance();
163
- i0.ɵɵtextInterpolate1(" of ", ctx_r1.runResult.TotalRowCount, " total ");
157
+ i0.ɵɵtextInterpolate1(" of ", ctx_r1.runResult.TotalRowCount, " total");
164
158
  } }
165
- function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
166
- i0.ɵɵelementStart(0, "span", 52);
159
+ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
160
+ i0.ɵɵelementStart(0, "span", 51);
167
161
  i0.ɵɵtext(1);
168
162
  i0.ɵɵelementEnd();
169
- i0.ɵɵconditionalCreate(2, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_3_Conditional_2_Template, 2, 1, "span", 29);
170
163
  } if (rf & 2) {
171
- const ctx_r1 = i0.ɵɵnextContext(5);
172
- i0.ɵɵadvance();
173
- i0.ɵɵtextInterpolate1(" ", ctx_r1.runResult.RowCount, " rows ");
164
+ const ctx_r1 = i0.ɵɵnextContext(6);
174
165
  i0.ɵɵadvance();
175
- i0.ɵɵconditional(ctx_r1.runResult.TotalRowCount > ctx_r1.runResult.RowCount ? 2 : -1);
176
- } }
177
- function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
178
- i0.ɵɵelementStart(0, "span", 50);
179
- i0.ɵɵtext(1, " Error ");
180
- i0.ɵɵelementEnd();
166
+ i0.ɵɵtextInterpolate1("\u2014 ", ctx_r1.runResult.ExecutionTime, "ms");
181
167
  } }
182
- function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_5_Template(rf, ctx) { if (rf & 1) {
183
- i0.ɵɵelementStart(0, "span", 51);
184
- i0.ɵɵtext(1);
168
+ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
169
+ i0.ɵɵelement(0, "i", 49);
170
+ i0.ɵɵtext(1, " Query Results ");
171
+ i0.ɵɵelementStart(2, "span", 50);
172
+ i0.ɵɵtext(3);
173
+ i0.ɵɵconditionalCreate(4, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_1_Conditional_4_Template, 1, 1);
185
174
  i0.ɵɵelementEnd();
175
+ i0.ɵɵconditionalCreate(5, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_1_Conditional_5_Template, 2, 1, "span", 51);
186
176
  } if (rf & 2) {
187
177
  const ctx_r1 = i0.ɵɵnextContext(5);
178
+ i0.ɵɵadvance(3);
179
+ i0.ɵɵtextInterpolate1(" ", ctx_r1.runResult.RowCount, " rows");
180
+ i0.ɵɵadvance();
181
+ i0.ɵɵconditional(ctx_r1.runResult.TotalRowCount > ctx_r1.runResult.RowCount ? 4 : -1);
188
182
  i0.ɵɵadvance();
189
- i0.ɵɵtextInterpolate1(" (", ctx_r1.runResult.ExecutionTime, "ms) ");
183
+ i0.ɵɵconditional(ctx_r1.runResult.ExecutionTime ? 5 : -1);
184
+ } }
185
+ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
186
+ i0.ɵɵelement(0, "i", 52);
187
+ i0.ɵɵtext(1, " Query Results \u2014 Error ");
190
188
  } }
191
189
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Template(rf, ctx) { if (rf & 1) {
192
190
  i0.ɵɵelementStart(0, "span", 27);
193
- i0.ɵɵelement(1, "i", 49);
194
- i0.ɵɵtext(2, " Query Results ");
195
- i0.ɵɵconditionalCreate(3, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_3_Template, 3, 2)(4, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_4_Template, 2, 0, "span", 50);
196
- i0.ɵɵconditionalCreate(5, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_5_Template, 2, 1, "span", 51);
191
+ i0.ɵɵconditionalCreate(1, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_1_Template, 6, 3)(2, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Conditional_2_Template, 2, 0);
197
192
  i0.ɵɵelementEnd();
198
193
  } if (rf & 2) {
199
194
  const ctx_r1 = i0.ɵɵnextContext(4);
200
- i0.ɵɵadvance(3);
201
- i0.ɵɵconditional(ctx_r1.runResult.Success ? 3 : 4);
202
- i0.ɵɵadvance(2);
203
- i0.ɵɵconditional(ctx_r1.runResult.ExecutionTime ? 5 : -1);
195
+ i0.ɵɵadvance();
196
+ i0.ɵɵconditional(ctx_r1.runResult.Success ? 1 : 2);
204
197
  } }
205
198
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Conditional_3_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
206
199
  const _r10 = i0.ɵɵgetCurrentView();
@@ -343,30 +336,30 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Cond
343
336
  } }
344
337
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Template(rf, ctx) { if (rf & 1) {
345
338
  const _r8 = i0.ɵɵgetCurrentView();
346
- i0.ɵɵelementStart(0, "kendo-expansionpanel", 46);
347
- i0.ɵɵtwoWayListener("expandedChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Template_kendo_expansionpanel_expandedChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.resultsExpanded, $event) || (ctx_r1.resultsExpanded = $event); return i0.ɵɵresetView($event); });
348
- i0.ɵɵtemplate(1, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Template, 6, 2, "ng-template", 11);
339
+ i0.ɵɵelementStart(0, "mj-accordion-panel", 46);
340
+ i0.ɵɵtwoWayListener("ExpandedChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.resultsExpanded, $event) || (ctx_r1.resultsExpanded = $event); return i0.ɵɵresetView($event); });
341
+ i0.ɵɵtemplate(1, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_ng_template_1_Template, 3, 1, "ng-template", 11);
349
342
  i0.ɵɵelementStart(2, "div", 47);
350
343
  i0.ɵɵconditionalCreate(3, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Conditional_3_Template, 2, 1)(4, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Conditional_4_Template, 6, 1, "div", 48);
351
344
  i0.ɵɵelementEnd()();
352
345
  } if (rf & 2) {
353
346
  const ctx_r1 = i0.ɵɵnextContext(3);
354
- i0.ɵɵtwoWayProperty("expanded", ctx_r1.resultsExpanded);
347
+ i0.ɵɵtwoWayProperty("Expanded", ctx_r1.resultsExpanded);
355
348
  i0.ɵɵadvance(3);
356
349
  i0.ɵɵconditional(ctx_r1.runResult.Success ? 3 : 4);
357
350
  } }
358
351
  function QueryRunDialogComponent_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
359
352
  const _r3 = i0.ɵɵgetCurrentView();
360
- i0.ɵɵconditionalCreate(0, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_Template, 9, 1, "kendo-expansionpanel", 8)(1, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_1_Template, 3, 0, "div", 9);
361
- i0.ɵɵelementStart(2, "kendo-expansionpanel", 10);
362
- i0.ɵɵtwoWayListener("expandedChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Template_kendo_expansionpanel_expandedChange_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.paginationExpanded, $event) || (ctx_r1.paginationExpanded = $event); return i0.ɵɵresetView($event); });
353
+ i0.ɵɵconditionalCreate(0, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_0_Template, 9, 1, "mj-accordion-panel", 8)(1, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_1_Template, 3, 0, "div", 9);
354
+ i0.ɵɵelementStart(2, "mj-accordion-panel", 10);
355
+ i0.ɵɵtwoWayListener("ExpandedChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Template_mj_accordion_panel_ExpandedChange_2_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.paginationExpanded, $event) || (ctx_r1.paginationExpanded = $event); return i0.ɵɵresetView($event); });
363
356
  i0.ɵɵtemplate(3, QueryRunDialogComponent_Conditional_0_Conditional_7_ng_template_3_Template, 4, 1, "ng-template", 11);
364
357
  i0.ɵɵelementStart(4, "div", 12)(5, "div", 13)(6, "div", 14)(7, "label", 15);
365
358
  i0.ɵɵelement(8, "i", 16);
366
359
  i0.ɵɵtext(9, " Max Rows: ");
367
360
  i0.ɵɵelementEnd();
368
- i0.ɵɵelementStart(10, "kendo-numerictextbox", 17);
369
- i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Template_kendo_numerictextbox_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.maxRows, $event) || (ctx_r1.maxRows = $event); return i0.ɵɵresetView($event); });
361
+ i0.ɵɵelementStart(10, "input", 17);
362
+ i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.maxRows, $event) || (ctx_r1.maxRows = $event); return i0.ɵɵresetView($event); });
370
363
  i0.ɵɵelementEnd();
371
364
  i0.ɵɵelementStart(11, "span", 18);
372
365
  i0.ɵɵtext(12, " Leave empty to return all rows ");
@@ -375,24 +368,22 @@ function QueryRunDialogComponent_Conditional_0_Conditional_7_Template(rf, ctx) {
375
368
  i0.ɵɵelement(15, "i", 19);
376
369
  i0.ɵɵtext(16, " Start Row: ");
377
370
  i0.ɵɵelementEnd();
378
- i0.ɵɵelementStart(17, "kendo-numerictextbox", 20);
379
- i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Template_kendo_numerictextbox_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.startRow, $event) || (ctx_r1.startRow = $event); return i0.ɵɵresetView($event); });
371
+ i0.ɵɵelementStart(17, "input", 20);
372
+ i0.ɵɵtwoWayListener("ngModelChange", function QueryRunDialogComponent_Conditional_0_Conditional_7_Template_input_ngModelChange_17_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.startRow, $event) || (ctx_r1.startRow = $event); return i0.ɵɵresetView($event); });
380
373
  i0.ɵɵelementEnd();
381
374
  i0.ɵɵelementStart(18, "span", 18);
382
375
  i0.ɵɵtext(19, " 0-based offset for pagination ");
383
376
  i0.ɵɵelementEnd()()()()();
384
- i0.ɵɵconditionalCreate(20, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Template, 5, 2, "kendo-expansionpanel", 21);
377
+ i0.ɵɵconditionalCreate(20, QueryRunDialogComponent_Conditional_0_Conditional_7_Conditional_20_Template, 5, 2, "mj-accordion-panel", 21);
385
378
  } if (rf & 2) {
386
379
  const ctx_r1 = i0.ɵɵnextContext(2);
387
380
  i0.ɵɵconditional(ctx_r1.parameterPairs.length > 0 ? 0 : 1);
388
381
  i0.ɵɵadvance(2);
389
- i0.ɵɵtwoWayProperty("expanded", ctx_r1.paginationExpanded);
382
+ i0.ɵɵtwoWayProperty("Expanded", ctx_r1.paginationExpanded);
390
383
  i0.ɵɵadvance(8);
391
384
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.maxRows);
392
- i0.ɵɵproperty("min", 1)("step", 100);
393
385
  i0.ɵɵadvance(7);
394
386
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.startRow);
395
- i0.ɵɵproperty("min", 0)("step", 1);
396
387
  i0.ɵɵadvance(3);
397
388
  i0.ɵɵconditional(ctx_r1.runResult ? 20 : -1);
398
389
  } }
@@ -418,7 +409,7 @@ function QueryRunDialogComponent_Conditional_0_Conditional_9_Template(rf, ctx) {
418
409
  } if (rf & 2) {
419
410
  const ctx_r1 = i0.ɵɵnextContext(2);
420
411
  i0.ɵɵadvance(3);
421
- i0.ɵɵproperty("themeColor", "primary")("disabled", ctx_r1.isRunning || ctx_r1.hasInvalidParameters());
412
+ i0.ɵɵproperty("disabled", ctx_r1.isRunning || ctx_r1.hasInvalidParameters());
422
413
  i0.ɵɵadvance();
423
414
  i0.ɵɵconditional(ctx_r1.isRunning ? 4 : 5);
424
415
  } }
@@ -437,25 +428,25 @@ function QueryRunDialogComponent_Conditional_0_Conditional_10_Template(rf, ctx)
437
428
  } if (rf & 2) {
438
429
  const ctx_r1 = i0.ɵɵnextContext(2);
439
430
  i0.ɵɵadvance(3);
440
- i0.ɵɵproperty("themeColor", "primary")("disabled", ctx_r1.isRunning);
431
+ i0.ɵɵproperty("disabled", ctx_r1.isRunning);
441
432
  } }
442
433
  function QueryRunDialogComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
443
434
  const _r1 = i0.ɵɵgetCurrentView();
444
- i0.ɵɵelementStart(0, "kendo-dialog", 1);
445
- i0.ɵɵlistener("close", function QueryRunDialogComponent_Conditional_0_Template_kendo_dialog_close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
446
- i0.ɵɵelementStart(1, "kendo-dialog-titlebar")(2, "div", 2);
435
+ i0.ɵɵelementStart(0, "mj-dialog", 1);
436
+ i0.ɵɵlistener("Close", function QueryRunDialogComponent_Conditional_0_Template_mj_dialog_Close_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.close()); });
437
+ i0.ɵɵelementStart(1, "mj-dialog-titlebar")(2, "div", 2);
447
438
  i0.ɵɵelement(3, "i", 3);
448
439
  i0.ɵɵtext(4);
449
440
  i0.ɵɵelementEnd()();
450
441
  i0.ɵɵelementStart(5, "div", 4);
451
- i0.ɵɵconditionalCreate(6, QueryRunDialogComponent_Conditional_0_Conditional_6_Template, 4, 0, "div", 5)(7, QueryRunDialogComponent_Conditional_0_Conditional_7_Template, 21, 9);
442
+ i0.ɵɵconditionalCreate(6, QueryRunDialogComponent_Conditional_0_Conditional_6_Template, 4, 0, "div", 5)(7, QueryRunDialogComponent_Conditional_0_Conditional_7_Template, 21, 5);
452
443
  i0.ɵɵelementEnd();
453
- i0.ɵɵelementStart(8, "kendo-dialog-actions");
454
- i0.ɵɵconditionalCreate(9, QueryRunDialogComponent_Conditional_0_Conditional_9_Template, 6, 3)(10, QueryRunDialogComponent_Conditional_0_Conditional_10_Template, 6, 2);
444
+ i0.ɵɵelementStart(8, "mj-dialog-actions");
445
+ i0.ɵɵconditionalCreate(9, QueryRunDialogComponent_Conditional_0_Conditional_9_Template, 6, 2)(10, QueryRunDialogComponent_Conditional_0_Conditional_10_Template, 6, 1);
455
446
  i0.ɵɵelementEnd()();
456
447
  } if (rf & 2) {
457
448
  const ctx_r1 = i0.ɵɵnextContext();
458
- i0.ɵɵproperty("width", 900)("height", 800);
449
+ i0.ɵɵproperty("Visible", true)("Width", 900);
459
450
  i0.ɵɵadvance(4);
460
451
  i0.ɵɵtextInterpolate1(" Run Query: ", (ctx_r1.query == null ? null : ctx_r1.query.Name) || "Untitled", " ");
461
452
  i0.ɵɵadvance(2);
@@ -767,15 +758,15 @@ export class QueryRunDialogComponent {
767
758
  }
768
759
  }
769
760
  static { this.ɵfac = function QueryRunDialogComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || QueryRunDialogComponent)(); }; }
770
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: QueryRunDialogComponent, selectors: [["mj-query-run-dialog"]], inputs: { query: "query", parameters: "parameters", isVisible: "isVisible" }, outputs: { isVisibleChange: "isVisibleChange", onClose: "onClose" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "width", "height"], [3, "close", "width", "height"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [1, "fa-solid", "fa-play-circle", 2, "color", "var(--mj-brand-primary)"], [2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto", "overflow-x", "hidden"], [2, "display", "flex", "align-items", "center", "justify-content", "center", "padding", "40px"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "color", "var(--mj-text-muted)", "margin-right", "12px"], [2, "color", "var(--mj-text-muted)"], [2, "margin-bottom", "16px", "flex-shrink", "0", 3, "expanded"], [2, "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-radius", "6px", "margin-bottom", "16px", "text-align", "center", "color", "var(--mj-text-muted)"], [2, "margin-bottom", "16px", 3, "expandedChange", "expanded"], ["kendoExpansionPanelTitleDirective", ""], [2, "padding", "12px 0"], [2, "display", "flex", "flex-direction", "column", "gap", "12px"], [2, "display", "flex", "align-items", "center", "gap", "12px"], [2, "font-weight", "600", "color", "var(--mj-text-secondary)", "white-space", "nowrap", "min-width", "100px"], [1, "fa-solid", "fa-list-ol", 2, "color", "var(--mj-text-muted)", "margin-right", "6px"], ["placeholder", "All rows", 2, "width", "150px", 3, "ngModelChange", "ngModel", "min", "step"], [2, "font-size", "0.85em", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-forward", 2, "color", "var(--mj-text-muted)", "margin-right", "6px"], ["placeholder", "0", 2, "width", "150px", 3, "ngModelChange", "ngModel", "min", "step"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "overflow", "hidden", "min-height", "0", 3, "expanded"], [2, "margin-bottom", "16px", "flex-shrink", "0", 3, "expandedChange", "expanded"], [2, "margin-bottom", "12px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-info-circle"], [2, "display", "flex", "flex-direction", "column", "gap", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "padding", "16px"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "#17a2b8", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "font-weight", "600", "color", "var(--mj-text-secondary)", "display", "flex", "align-items", "center", "gap", "6px"], [1, "fa-solid", "fa-at", 2, "color", "var(--mj-brand-primary)"], [2, "color", "#dc3545"], [2, "font-size", "0.85em", "color", "var(--mj-text-muted)", "margin-top", "4px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "badge", 2, "background", "var(--mj-text-muted)", "color", "white", "padding", "2px 6px", "border-radius", "4px", "font-size", "0.75em"], ["title", "Required parameter is empty", 1, "fa-solid", "fa-exclamation-triangle", 2, "color", "#dc3545"], ["placeholder", "Enter number value...", 2, "width", "100%", 3, "ngModel"], ["placeholder", "Enter value (JSON, string, or number)...", 2, "width", "100%", "font-family", "'Courier New', monospace", 3, "ngModel", "rows"], [2, "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-top", "4px"], ["placeholder", "Enter number value...", 2, "width", "100%", 3, "ngModelChange", "ngModel"], ["placeholder", "Enter value (JSON, string, or number)...", 2, "width", "100%", "font-family", "'Courier New', monospace", 3, "ngModelChange", "ngModel", "rows"], [2, "background", "var(--mj-bg-surface-sunken)", "padding", "2px 4px", "border-radius", "3px"], [1, "fa-solid", "fa-table-list", 2, "color", "var(--mj-text-muted)"], [1, "badge", 2, "background", "var(--mj-text-muted)", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "overflow", "hidden", "min-height", "0", 3, "expandedChange", "expanded"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "overflow", "hidden", "min-height", "0"], [2, "padding", "20px", "background", "#f8d7da", "border", "1px solid #f5c6cb", "border-radius", "6px", "margin", "12px"], [1, "fa-solid", "fa-table", 2, "color", "#28a745"], [1, "badge", 2, "background", "#dc3545", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "font-size", "0.8em", "color", "var(--mj-text-muted)", "font-weight", "normal"], [1, "badge", 2, "background", "#28a745", "color", "white", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "display", "flex", "align-items", "center", "justify-content", "center", "height", "200px", "color", "var(--mj-text-muted)"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "padding", "12px", "border-bottom", "1px solid var(--mj-border-default)"], [2, "display", "flex", "gap", "8px"], ["kendoButton", "", "fillMode", "flat", "title", "Copy to clipboard", 3, "click"], [1, "fa-solid", "fa-copy"], ["kendoButton", "", "fillMode", "flat", "title", "Export to CSV", 3, "click"], [1, "fa-solid", "fa-download"], [1, "results-table-container", 2, "flex", "1", "overflow", "auto", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "min-height", "0"], [1, "results-table", 2, "width", "100%", "border-collapse", "collapse", "font-size", "14px"], [2, "position", "sticky", "top", "0", "background", "var(--mj-bg-surface-sunken)", "z-index", "10"], [2, "padding", "12px 16px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)", "border-bottom", "2px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "white-space", "nowrap"], [2, "border-bottom", "1px solid var(--mj-border-default)", "transition", "background-color 0.2s"], [2, "padding", "40px", "text-align", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "4px"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "First page", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-left"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Previous page", 3, "click", "disabled"], [1, "fa-solid", "fa-angle-left"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Next page", 3, "click", "disabled"], [1, "fa-solid", "fa-angle-right"], ["kendoButton", "", "fillMode", "flat", "size", "small", "title", "Last page", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-right"], [2, "padding", "10px 16px", "color", "var(--mj-text-primary)", "max-width", "300px", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap", 3, "title"], [1, "fa-solid", "fa-table", 2, "font-size", "48px", "margin-bottom", "12px", "opacity", "0.3"], [1, "fa-solid", "fa-inbox", 2, "font-size", "48px", "margin-bottom", "12px"], [2, "color", "#721c24"], [1, "fa-solid", "fa-exclamation-circle"], [2, "margin-top", "8px", "font-family", "'Courier New', monospace", "font-size", "0.9em"], ["kendoButton", "", 3, "click"], [1, "fa-solid", "fa-times"], ["kendoButton", "", 3, "click", "themeColor", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-refresh"]], template: function QueryRunDialogComponent_Template(rf, ctx) { if (rf & 1) {
771
- i0.ɵɵconditionalCreate(0, QueryRunDialogComponent_Conditional_0_Template, 11, 5, "kendo-dialog", 0);
761
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: QueryRunDialogComponent, selectors: [["mj-query-run-dialog"]], inputs: { query: "query", parameters: "parameters", isVisible: "isVisible" }, outputs: { isVisibleChange: "isVisibleChange", onClose: "onClose" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [[3, "Visible", "Width"], [3, "Close", "Visible", "Width"], [2, "display", "flex", "align-items", "center", "gap", "8px"], [1, "fa-solid", "fa-play-circle", 2, "color", "var(--mj-brand-primary)"], [2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow-y", "auto", "overflow-x", "hidden"], [2, "display", "flex", "align-items", "center", "justify-content", "center", "padding", "40px"], [1, "fa-solid", "fa-spinner", "fa-spin", 2, "font-size", "24px", "color", "var(--mj-text-muted)", "margin-right", "12px"], [2, "color", "var(--mj-text-muted)"], [2, "margin-bottom", "16px", "flex-shrink", "0", 3, "Expanded"], [2, "padding", "20px", "background", "var(--mj-bg-surface-sunken)", "border-radius", "6px", "margin-bottom", "16px", "text-align", "center", "color", "var(--mj-text-muted)"], [2, "margin-bottom", "16px", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [2, "padding", "12px 0"], [2, "display", "flex", "flex-direction", "column", "gap", "12px"], [2, "display", "flex", "align-items", "center", "gap", "12px"], [2, "font-weight", "600", "color", "var(--mj-text-secondary)", "white-space", "nowrap", "min-width", "100px"], [1, "fa-solid", "fa-list-ol", 2, "color", "var(--mj-text-muted)", "margin-right", "6px"], ["type", "number", "min", "1", "step", "100", "placeholder", "All rows", 1, "mj-input", 2, "width", "150px", 3, "ngModelChange", "ngModel"], [2, "font-size", "0.85em", "color", "var(--mj-text-muted)"], [1, "fa-solid", "fa-forward", 2, "color", "var(--mj-text-muted)", "margin-right", "6px"], ["type", "number", "min", "0", "step", "1", "placeholder", "0", 1, "mj-input", 2, "width", "150px", 3, "ngModelChange", "ngModel"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "overflow", "hidden", "min-height", "0", 3, "Expanded"], [2, "margin-bottom", "16px", "flex-shrink", "0", 3, "ExpandedChange", "Expanded"], [2, "margin-bottom", "12px", "color", "var(--mj-text-muted)", "font-size", "0.85em"], [1, "fa-solid", "fa-info-circle"], [2, "display", "flex", "flex-direction", "column", "gap", "16px"], [2, "background", "var(--mj-bg-surface-sunken)", "border", "1px solid var(--mj-border-default)", "border-radius", "6px", "padding", "16px"], [2, "display", "flex", "align-items", "center", "gap", "8px", "font-weight", "600"], [1, "fa-solid", "fa-sliders", 2, "color", "var(--mj-text-muted)"], [2, "background", "var(--mj-status-info)", "color", "var(--mj-text-inverse)", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "display", "flex", "justify-content", "space-between", "align-items", "flex-start", "margin-bottom", "8px"], [2, "font-weight", "600", "color", "var(--mj-text-secondary)", "display", "flex", "align-items", "center", "gap", "6px"], [1, "fa-solid", "fa-at", 2, "color", "var(--mj-brand-primary)"], [2, "color", "#dc3545"], [2, "font-size", "0.85em", "color", "var(--mj-text-muted)", "margin-top", "4px"], [2, "display", "flex", "gap", "8px", "align-items", "center"], [1, "badge", 2, "background", "var(--mj-text-muted)", "color", "white", "padding", "2px 6px", "border-radius", "4px", "font-size", "0.75em"], ["title", "Required parameter is empty", 1, "fa-solid", "fa-exclamation-triangle", 2, "color", "#dc3545"], ["type", "number", "placeholder", "Enter number value...", 1, "mj-input", 2, "width", "100%", 3, "ngModel"], ["rows", "2", "placeholder", "Enter value (JSON, string, or number)...", 1, "mj-input", 2, "width", "100%", "font-family", "'Courier New', monospace", 3, "ngModel"], [2, "font-size", "0.8em", "color", "var(--mj-text-muted)", "margin-top", "4px"], ["type", "number", "placeholder", "Enter number value...", 1, "mj-input", 2, "width", "100%", 3, "ngModelChange", "ngModel"], ["rows", "2", "placeholder", "Enter value (JSON, string, or number)...", 1, "mj-input", 2, "width", "100%", "font-family", "'Courier New', monospace", 3, "ngModelChange", "ngModel"], [2, "background", "var(--mj-bg-surface-sunken)", "padding", "2px 4px", "border-radius", "3px"], [1, "fa-solid", "fa-table-list", 2, "color", "var(--mj-text-muted)"], [2, "background", "var(--mj-text-muted)", "color", "var(--mj-text-inverse)", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "overflow", "hidden", "min-height", "0", 3, "ExpandedChange", "Expanded"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "overflow", "hidden", "min-height", "0"], [2, "padding", "20px", "background", "#f8d7da", "border", "1px solid #f5c6cb", "border-radius", "6px", "margin", "12px"], [1, "fa-solid", "fa-table", 2, "color", "var(--mj-status-success)"], [2, "background", "var(--mj-status-success)", "color", "var(--mj-text-inverse)", "padding", "2px 6px", "border-radius", "10px", "font-size", "0.7em"], [2, "color", "var(--mj-text-muted)", "font-size", "0.85em", "font-weight", "normal"], [1, "fa-solid", "fa-exclamation-circle", 2, "color", "var(--mj-status-error)"], [2, "display", "flex", "align-items", "center", "justify-content", "center", "height", "200px", "color", "var(--mj-text-muted)"], [2, "display", "flex", "justify-content", "space-between", "align-items", "center", "padding", "12px", "border-bottom", "1px solid var(--mj-border-default)"], [2, "display", "flex", "gap", "8px"], ["mjButton", "", "variant", "flat", "title", "Copy to clipboard", 3, "click"], [1, "fa-solid", "fa-copy"], ["mjButton", "", "variant", "flat", "title", "Export to CSV", 3, "click"], [1, "fa-solid", "fa-download"], [1, "results-table-container", 2, "flex", "1", "overflow", "auto", "border", "1px solid var(--mj-border-default)", "border-radius", "4px", "min-height", "0"], [1, "results-table", 2, "width", "100%", "border-collapse", "collapse", "font-size", "14px"], [2, "position", "sticky", "top", "0", "background", "var(--mj-bg-surface-sunken)", "z-index", "10"], [2, "padding", "12px 16px", "text-align", "left", "font-weight", "600", "color", "var(--mj-text-secondary)", "border-bottom", "2px solid var(--mj-border-default)", "background", "var(--mj-bg-surface-sunken)", "white-space", "nowrap"], [2, "border-bottom", "1px solid var(--mj-border-default)", "transition", "background-color 0.2s"], [2, "padding", "40px", "text-align", "center", "color", "var(--mj-text-muted)"], [2, "font-size", "0.9em", "color", "var(--mj-text-muted)"], [2, "display", "flex", "gap", "4px"], ["mjButton", "", "variant", "flat", "title", "First page", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-left"], ["mjButton", "", "variant", "flat", "title", "Previous page", 3, "click", "disabled"], [1, "fa-solid", "fa-angle-left"], ["mjButton", "", "variant", "flat", "title", "Next page", 3, "click", "disabled"], [1, "fa-solid", "fa-angle-right"], ["mjButton", "", "variant", "flat", "title", "Last page", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-right"], [2, "padding", "10px 16px", "color", "var(--mj-text-primary)", "max-width", "300px", "overflow", "hidden", "text-overflow", "ellipsis", "white-space", "nowrap", 3, "title"], [1, "fa-solid", "fa-table", 2, "font-size", "48px", "margin-bottom", "12px", "opacity", "0.3"], [1, "fa-solid", "fa-inbox", 2, "font-size", "48px", "margin-bottom", "12px"], [2, "color", "#721c24"], [1, "fa-solid", "fa-exclamation-circle"], [2, "margin-top", "8px", "font-family", "'Courier New', monospace", "font-size", "0.9em"], ["mjButton", "", 3, "click"], [1, "fa-solid", "fa-times"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-refresh"]], template: function QueryRunDialogComponent_Template(rf, ctx) { if (rf & 1) {
762
+ i0.ɵɵconditionalCreate(0, QueryRunDialogComponent_Conditional_0_Template, 11, 5, "mj-dialog", 0);
772
763
  } if (rf & 2) {
773
764
  i0.ɵɵconditional(ctx.isVisible ? 0 : -1);
774
- } }, dependencies: [i1.NgControlStatus, i1.NgModel, i2.ExpansionPanelComponent, i2.ExpansionPanelTitleDirective, i3.DialogComponent, i3.DialogTitleBarComponent, i3.DialogActionsComponent, i4.NumericTextBoxComponent, i4.TextAreaComponent, i5.ButtonComponent], styles: [".param-value[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 60px;\n}\n\n.loading-state[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n.results-table-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-sunken);\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n.results-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-card) !important;\n}\n\n.results-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(even) {\n background-color: var(--mj-bg-surface-card);\n}\n\n.dialog-content[_ngcontent-%COMP%] {\n overflow-y: auto;\n}\n\n.header-section[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.param-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 30px;\n padding: 4px 6px;\n}\n\n\n\n .k-expander-content-wrapper {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n .k-expander-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}"] }); }
765
+ } }, dependencies: [i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.NgControlStatus, i1.MinValidator, i1.NgModel, i2.MJButtonDirective, i2.MJAccordionPanelComponent, i2.MJAccordionTitleDirective, i2.MJDialogComponent, i2.MJDialogTitlebarComponent, i2.MJDialogActionsComponent], styles: [".param-value[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 60px;\n}\n\n.loading-state[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n.results-table-container[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-sunken);\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n}\n\n.results-table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n.results-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background-color: var(--mj-bg-surface-card) !important;\n}\n\n.results-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(even) {\n background-color: var(--mj-bg-surface-card);\n}\n\n.dialog-content[_ngcontent-%COMP%] {\n overflow-y: auto;\n}\n\n.header-section[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.param-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n min-width: 30px;\n padding: 4px 6px;\n}\n\n\n\n .k-expander-content-wrapper {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n .k-expander-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}"] }); }
775
766
  }
776
767
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(QueryRunDialogComponent, [{
777
768
  type: Component,
778
- args: [{ standalone: false, selector: 'mj-query-run-dialog', template: "@if (isVisible) {\n <kendo-dialog\n [width]=\"900\"\n [height]=\"800\"\n (close)=\"close()\">\n <kendo-dialog-titlebar>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i class=\"fa-solid fa-play-circle\" style=\"color: var(--mj-brand-primary);\"></i>\n Run Query: {{ query?.Name || 'Untitled' }}\n </div>\n </kendo-dialog-titlebar>\n <div style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto; overflow-x: hidden;\">\n @if (isLoadingParams) {\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; color: var(--mj-text-muted); margin-right: 12px;\"></i>\n <span style=\"color: var(--mj-text-muted);\">Loading query parameters...</span>\n </div>\n } @else {\n <!-- Query Parameters Section -->\n @if (parameterPairs.length > 0) {\n <kendo-expansionpanel\n [(expanded)]=\"parametersExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Query Parameters\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ parameterPairs.length }}\n </span>\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"margin-bottom: 12px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Configure parameter values for query execution.\n </div>\n <!-- Parameters List -->\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n @for (param of parameterPairs; track param.name) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 16px;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div>\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-at\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ param.name }}\n @if (param.isRequired) {\n <span style=\"color: #dc3545;\">*</span>\n }\n </label>\n @if (param.description) {\n <div style=\"font-size: 0.85em; color: var(--mj-text-muted); margin-top: 4px;\">\n {{ param.description }}\n </div>\n }\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span class=\"badge\" style=\"background: var(--mj-text-muted); color: white; padding: 2px 6px; border-radius: 4px; font-size: 0.75em;\">\n {{ param.type }}\n </span>\n @if (!isParameterValid(param)) {\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"color: #dc3545;\" title=\"Required parameter is empty\"></i>\n }\n </div>\n </div>\n <!-- Parameter Value Input -->\n @if (param.type === 'number') {\n <kendo-numerictextbox\n [(ngModel)]=\"param.value\"\n placeholder=\"Enter number value...\"\n style=\"width: 100%;\">\n </kendo-numerictextbox>\n } @else {\n <kendo-textarea\n [(ngModel)]=\"param.value\"\n [rows]=\"2\"\n placeholder=\"Enter value (JSON, string, or number)...\"\n style=\"width: 100%; font-family: 'Courier New', monospace;\">\n </kendo-textarea>\n }\n @if (param.defaultValue) {\n <div style=\"font-size: 0.8em; color: var(--mj-text-muted); margin-top: 4px;\">\n Default: <code style=\"background: var(--mj-bg-surface-sunken); padding: 2px 4px; border-radius: 3px;\">{{ param.defaultValue }}</code>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </kendo-expansionpanel>\n } @else {\n <div style=\"padding: 20px; background: var(--mj-bg-surface-sunken); border-radius: 6px; margin-bottom: 16px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This query has no parameters.\n </div>\n }\n <!-- Pagination Settings -->\n <kendo-expansionpanel\n [(expanded)]=\"paginationExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table-list\" style=\"color: var(--mj-text-muted);\"></i>\n Pagination Settings\n @if (maxRows && maxRows > 0) {\n <span class=\"badge\" style=\"background: var(--mj-text-muted); color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ maxRows }} rows/page\n </span>\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"display: flex; flex-direction: column; gap: 12px;\">\n <!-- Max Rows -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-list-ol\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Max Rows:\n </label>\n <kendo-numerictextbox\n [(ngModel)]=\"maxRows\"\n [min]=\"1\"\n [step]=\"100\"\n placeholder=\"All rows\"\n style=\"width: 150px;\">\n </kendo-numerictextbox>\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n Leave empty to return all rows\n </span>\n </div>\n <!-- Start Row -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-forward\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Start Row:\n </label>\n <kendo-numerictextbox\n [(ngModel)]=\"startRow\"\n [min]=\"0\"\n [step]=\"1\"\n placeholder=\"0\"\n style=\"width: 150px;\">\n </kendo-numerictextbox>\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n 0-based offset for pagination\n </span>\n </div>\n </div>\n </div>\n </kendo-expansionpanel>\n <!-- Results Section -->\n @if (runResult) {\n <kendo-expansionpanel\n [(expanded)]=\"resultsExpanded\"\n style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n <ng-template kendoExpansionPanelTitleDirective>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table\" style=\"color: #28a745;\"></i>\n Query Results\n @if (runResult.Success) {\n <span class=\"badge\" style=\"background: #28a745; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ runResult.RowCount }} rows\n </span>\n @if (runResult.TotalRowCount > runResult.RowCount) {\n <span class=\"badge\" style=\"background: #17a2b8; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n of {{ runResult.TotalRowCount }} total\n </span>\n }\n } @else {\n <span class=\"badge\" style=\"background: #dc3545; color: white; padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n Error\n </span>\n }\n @if (runResult.ExecutionTime) {\n <span style=\"font-size: 0.8em; color: var(--mj-text-muted); font-weight: normal;\">\n ({{ runResult.ExecutionTime }}ms)\n </span>\n }\n </span>\n </ng-template>\n <div style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n @if (runResult.Success) {\n @if (resultRows.length > 0) {\n <!-- Export and Pagination Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; padding: 12px; border-bottom: 1px solid var(--mj-border-default);\">\n <!-- Pagination Info and Controls -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n @if (runResult.TotalRowCount > runResult.RowCount || startRow > 0) {\n <span style=\"font-size: 0.9em; color: var(--mj-text-muted);\">\n Showing rows {{ startRow + 1 }} - {{ startRow + runResult.RowCount }} of {{ runResult.TotalRowCount }}\n </span>\n <div style=\"display: flex; gap: 4px;\">\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToFirstPage()\"\n title=\"First page\">\n <i class=\"fa-solid fa-angles-left\"></i>\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToPreviousPage()\"\n title=\"Previous page\">\n <i class=\"fa-solid fa-angle-left\"></i>\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToNextPage()\"\n title=\"Next page\">\n <i class=\"fa-solid fa-angle-right\"></i>\n </button>\n <button kendoButton\n fillMode=\"flat\"\n size=\"small\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToLastPage()\"\n title=\"Last page\">\n <i class=\"fa-solid fa-angles-right\"></i>\n </button>\n </div>\n }\n </div>\n <!-- Export Buttons -->\n <div style=\"display: flex; gap: 8px;\">\n <button kendoButton\n fillMode=\"flat\"\n (click)=\"copyToClipboard()\"\n title=\"Copy to clipboard\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button kendoButton\n fillMode=\"flat\"\n (click)=\"exportToCSV()\"\n title=\"Export to CSV\">\n <i class=\"fa-solid fa-download\"></i> Export CSV\n </button>\n </div>\n </div>\n <!-- Results Grid -->\n <div class=\"results-table-container\" style=\"flex: 1; overflow: auto; border: 1px solid var(--mj-border-default); border-radius: 4px; min-height: 0;\">\n <table class=\"results-table\" style=\"width: 100%; border-collapse: collapse; font-size: 14px;\">\n <thead style=\"position: sticky; top: 0; background: var(--mj-bg-surface-sunken); z-index: 10;\">\n <tr>\n @for (col of resultColumns; track col.field) {\n <th style=\"padding: 12px 16px; text-align: left; font-weight: 600; color: var(--mj-text-secondary); border-bottom: 2px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); white-space: nowrap;\">\n {{ col.title }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of resultRows; track $index) {\n <tr style=\"border-bottom: 1px solid var(--mj-border-default); transition: background-color 0.2s;\">\n @for (col of resultColumns; track col.field) {\n <td style=\"padding: 10px 16px; color: var(--mj-text-primary); max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\"\n [title]=\"row[col.field]\">\n {{ row[col.field] || '' }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (resultRows.length === 0) {\n <div style=\"padding: 40px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-table\" style=\"font-size: 48px; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No data in results</p>\n </div>\n }\n </div>\n } @else {\n <div style=\"display: flex; align-items: center; justify-content: center; height: 200px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 48px; margin-bottom: 12px;\"></i>\n <p>No results returned</p>\n </div>\n }\n } @else {\n <div style=\"padding: 20px; background: #f8d7da; border: 1px solid #f5c6cb; border-radius: 6px; margin: 12px;\">\n <div style=\"color: #721c24;\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <strong>Query execution failed</strong>\n </div>\n @if (runResult.ErrorMessage) {\n <div style=\"margin-top: 8px; font-family: 'Courier New', monospace; font-size: 0.9em;\">\n {{ runResult.ErrorMessage }}\n </div>\n }\n </div>\n }\n </div>\n </kendo-expansionpanel>\n }\n }\n </div>\n <kendo-dialog-actions>\n @if (!runResult) {\n <button kendoButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Cancel\n </button>\n <button kendoButton\n [themeColor]=\"'primary'\"\n [disabled]=\"isRunning || hasInvalidParameters()\"\n (click)=\"runQuery()\">\n @if (isRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run Query\n }\n </button>\n } @else {\n <button kendoButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n <button kendoButton\n [themeColor]=\"'primary'\"\n [disabled]=\"isRunning\"\n (click)=\"runQuery()\">\n <i class=\"fa-solid fa-refresh\"></i> Run Again\n </button>\n }\n </kendo-dialog-actions>\n </kendo-dialog>\n}", styles: [".param-value textarea {\n resize: vertical;\n min-height: 60px;\n}\n\n.loading-state {\n color: var(--mj-text-muted);\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Professional Results Table Styling */\n.results-table-container {\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n}\n\n.results-table-container::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.results-table-container::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-sunken);\n}\n\n.results-table-container::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n}\n\n.results-table-container::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n.results-table tbody tr:hover {\n background-color: var(--mj-bg-surface-card) !important;\n}\n\n.results-table tbody tr:nth-child(even) {\n background-color: var(--mj-bg-surface-card);\n}\n\n.dialog-content {\n overflow-y: auto;\n}\n\n.header-section {\n flex-shrink: 0;\n}\n\n.param-actions button {\n min-width: 30px;\n padding: 4px 6px;\n}\n\n/* Ensure expansion panel content flexes properly */\n::ng-deep .k-expander-content-wrapper {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n::ng-deep .k-expander-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n"] }]
769
+ args: [{ standalone: false, selector: 'mj-query-run-dialog', template: "@if (isVisible) {\n <mj-dialog\n [Visible]=\"true\"\n [Width]=\"900\"\n (Close)=\"close()\">\n <mj-dialog-titlebar>\n <div style=\"display: flex; align-items: center; gap: 8px;\">\n <i class=\"fa-solid fa-play-circle\" style=\"color: var(--mj-brand-primary);\"></i>\n Run Query: {{ query?.Name || 'Untitled' }}\n </div>\n </mj-dialog-titlebar>\n <div style=\"display: flex; flex-direction: column; height: 100%; overflow-y: auto; overflow-x: hidden;\">\n @if (isLoadingParams) {\n <div style=\"display: flex; align-items: center; justify-content: center; padding: 40px;\">\n <i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 24px; color: var(--mj-text-muted); margin-right: 12px;\"></i>\n <span style=\"color: var(--mj-text-muted);\">Loading query parameters...</span>\n </div>\n } @else {\n <!-- Query Parameters Section -->\n @if (parameterPairs.length > 0) {\n <mj-accordion-panel\n [(Expanded)]=\"parametersExpanded\"\n style=\"margin-bottom: 16px; flex-shrink: 0;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-sliders\" style=\"color: var(--mj-text-muted);\"></i>\n Query Parameters\n <span style=\"background: var(--mj-status-info); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ parameterPairs.length }}\n </span>\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"margin-bottom: 12px; color: var(--mj-text-muted); font-size: 0.85em;\">\n <i class=\"fa-solid fa-info-circle\"></i>\n Configure parameter values for query execution.\n </div>\n <!-- Parameters List -->\n <div style=\"display: flex; flex-direction: column; gap: 16px;\">\n @for (param of parameterPairs; track param.name) {\n <div style=\"background: var(--mj-bg-surface-sunken); border: 1px solid var(--mj-border-default); border-radius: 6px; padding: 16px;\">\n <div style=\"display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px;\">\n <div>\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); display: flex; align-items: center; gap: 6px;\">\n <i class=\"fa-solid fa-at\" style=\"color: var(--mj-brand-primary);\"></i>\n {{ param.name }}\n @if (param.isRequired) {\n <span style=\"color: #dc3545;\">*</span>\n }\n </label>\n @if (param.description) {\n <div style=\"font-size: 0.85em; color: var(--mj-text-muted); margin-top: 4px;\">\n {{ param.description }}\n </div>\n }\n </div>\n <div style=\"display: flex; gap: 8px; align-items: center;\">\n <span class=\"badge\" style=\"background: var(--mj-text-muted); color: white; padding: 2px 6px; border-radius: 4px; font-size: 0.75em;\">\n {{ param.type }}\n </span>\n @if (!isParameterValid(param)) {\n <i class=\"fa-solid fa-exclamation-triangle\" style=\"color: #dc3545;\" title=\"Required parameter is empty\"></i>\n }\n </div>\n </div>\n <!-- Parameter Value Input -->\n @if (param.type === 'number') {\n <input type=\"number\" class=\"mj-input\"\n [(ngModel)]=\"param.value\"\n placeholder=\"Enter number value...\"\n style=\"width: 100%;\" />\n } @else {\n <textarea class=\"mj-input\"\n [(ngModel)]=\"param.value\"\n rows=\"2\"\n placeholder=\"Enter value (JSON, string, or number)...\"\n style=\"width: 100%; font-family: 'Courier New', monospace;\">\n </textarea>\n }\n @if (param.defaultValue) {\n <div style=\"font-size: 0.8em; color: var(--mj-text-muted); margin-top: 4px;\">\n Default: <code style=\"background: var(--mj-bg-surface-sunken); padding: 2px 4px; border-radius: 3px;\">{{ param.defaultValue }}</code>\n </div>\n }\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n } @else {\n <div style=\"padding: 20px; background: var(--mj-bg-surface-sunken); border-radius: 6px; margin-bottom: 16px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-info-circle\"></i> This query has no parameters.\n </div>\n }\n <!-- Pagination Settings -->\n <mj-accordion-panel\n [(Expanded)]=\"paginationExpanded\"\n style=\"margin-bottom: 16px;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n <i class=\"fa-solid fa-table-list\" style=\"color: var(--mj-text-muted);\"></i>\n Pagination Settings\n @if (maxRows && maxRows > 0) {\n <span style=\"background: var(--mj-text-muted); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ maxRows }} rows/page\n </span>\n }\n </span>\n </ng-template>\n <div style=\"padding: 12px 0;\">\n <div style=\"display: flex; flex-direction: column; gap: 12px;\">\n <!-- Max Rows -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-list-ol\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Max Rows:\n </label>\n <input type=\"number\" class=\"mj-input\"\n [(ngModel)]=\"maxRows\"\n min=\"1\"\n step=\"100\"\n placeholder=\"All rows\"\n style=\"width: 150px;\" />\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n Leave empty to return all rows\n </span>\n </div>\n <!-- Start Row -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n <label style=\"font-weight: 600; color: var(--mj-text-secondary); white-space: nowrap; min-width: 100px;\">\n <i class=\"fa-solid fa-forward\" style=\"color: var(--mj-text-muted); margin-right: 6px;\"></i>\n Start Row:\n </label>\n <input type=\"number\" class=\"mj-input\"\n [(ngModel)]=\"startRow\"\n min=\"0\"\n step=\"1\"\n placeholder=\"0\"\n style=\"width: 150px;\" />\n <span style=\"font-size: 0.85em; color: var(--mj-text-muted);\">\n 0-based offset for pagination\n </span>\n </div>\n </div>\n </div>\n </mj-accordion-panel>\n <!-- Results Section -->\n @if (runResult) {\n <mj-accordion-panel\n [(Expanded)]=\"resultsExpanded\"\n style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n <ng-template mjAccordionTitle>\n <span style=\"display: flex; align-items: center; gap: 8px; font-weight: 600;\">\n @if (runResult.Success) {\n <i class=\"fa-solid fa-table\" style=\"color: var(--mj-status-success);\"></i>\n Query Results\n <span style=\"background: var(--mj-status-success); color: var(--mj-text-inverse); padding: 2px 6px; border-radius: 10px; font-size: 0.7em;\">\n {{ runResult.RowCount }} rows@if (runResult.TotalRowCount > runResult.RowCount) { of {{ runResult.TotalRowCount }} total}\n </span>\n @if (runResult.ExecutionTime) {\n <span style=\"color: var(--mj-text-muted); font-size: 0.85em; font-weight: normal;\">&mdash; {{ runResult.ExecutionTime }}ms</span>\n }\n } @else {\n <i class=\"fa-solid fa-exclamation-circle\" style=\"color: var(--mj-status-error);\"></i>\n Query Results &mdash; Error\n }\n </span>\n </ng-template>\n <div style=\"flex: 1; display: flex; flex-direction: column; overflow: hidden; min-height: 0;\">\n @if (runResult.Success) {\n @if (resultRows.length > 0) {\n <!-- Export and Pagination Controls -->\n <div style=\"display: flex; justify-content: space-between; align-items: center; padding: 12px; border-bottom: 1px solid var(--mj-border-default);\">\n <!-- Pagination Info and Controls -->\n <div style=\"display: flex; align-items: center; gap: 12px;\">\n @if (runResult.TotalRowCount > runResult.RowCount || startRow > 0) {\n <span style=\"font-size: 0.9em; color: var(--mj-text-muted);\">\n Showing rows {{ startRow + 1 }} - {{ startRow + runResult.RowCount }} of {{ runResult.TotalRowCount }}\n </span>\n <div style=\"display: flex; gap: 4px;\">\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToFirstPage()\"\n title=\"First page\">\n <i class=\"fa-solid fa-angles-left\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow === 0\"\n (click)=\"goToPreviousPage()\"\n title=\"Previous page\">\n <i class=\"fa-solid fa-angle-left\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToNextPage()\"\n title=\"Next page\">\n <i class=\"fa-solid fa-angle-right\"></i>\n </button>\n <button mjButton\n variant=\"flat\"\n [disabled]=\"startRow + runResult.RowCount >= runResult.TotalRowCount\"\n (click)=\"goToLastPage()\"\n title=\"Last page\">\n <i class=\"fa-solid fa-angles-right\"></i>\n </button>\n </div>\n }\n </div>\n <!-- Export Buttons -->\n <div style=\"display: flex; gap: 8px;\">\n <button mjButton\n variant=\"flat\"\n (click)=\"copyToClipboard()\"\n title=\"Copy to clipboard\">\n <i class=\"fa-solid fa-copy\"></i> Copy\n </button>\n <button mjButton\n variant=\"flat\"\n (click)=\"exportToCSV()\"\n title=\"Export to CSV\">\n <i class=\"fa-solid fa-download\"></i> Export CSV\n </button>\n </div>\n </div>\n <!-- Results Grid -->\n <div class=\"results-table-container\" style=\"flex: 1; overflow: auto; border: 1px solid var(--mj-border-default); border-radius: 4px; min-height: 0;\">\n <table class=\"results-table\" style=\"width: 100%; border-collapse: collapse; font-size: 14px;\">\n <thead style=\"position: sticky; top: 0; background: var(--mj-bg-surface-sunken); z-index: 10;\">\n <tr>\n @for (col of resultColumns; track col.field) {\n <th style=\"padding: 12px 16px; text-align: left; font-weight: 600; color: var(--mj-text-secondary); border-bottom: 2px solid var(--mj-border-default); background: var(--mj-bg-surface-sunken); white-space: nowrap;\">\n {{ col.title }}\n </th>\n }\n </tr>\n </thead>\n <tbody>\n @for (row of resultRows; track $index) {\n <tr style=\"border-bottom: 1px solid var(--mj-border-default); transition: background-color 0.2s;\">\n @for (col of resultColumns; track col.field) {\n <td style=\"padding: 10px 16px; color: var(--mj-text-primary); max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\"\n [title]=\"row[col.field]\">\n {{ row[col.field] || '' }}\n </td>\n }\n </tr>\n }\n </tbody>\n </table>\n @if (resultRows.length === 0) {\n <div style=\"padding: 40px; text-align: center; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-table\" style=\"font-size: 48px; margin-bottom: 12px; opacity: 0.3;\"></i>\n <p>No data in results</p>\n </div>\n }\n </div>\n } @else {\n <div style=\"display: flex; align-items: center; justify-content: center; height: 200px; color: var(--mj-text-muted);\">\n <i class=\"fa-solid fa-inbox\" style=\"font-size: 48px; margin-bottom: 12px;\"></i>\n <p>No results returned</p>\n </div>\n }\n } @else {\n <div style=\"padding: 20px; background: #f8d7da; border: 1px solid #f5c6cb; border-radius: 6px; margin: 12px;\">\n <div style=\"color: #721c24;\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <strong>Query execution failed</strong>\n </div>\n @if (runResult.ErrorMessage) {\n <div style=\"margin-top: 8px; font-family: 'Courier New', monospace; font-size: 0.9em;\">\n {{ runResult.ErrorMessage }}\n </div>\n }\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n }\n </div>\n <mj-dialog-actions>\n @if (!runResult) {\n <button mjButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Cancel\n </button>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"isRunning || hasInvalidParameters()\"\n (click)=\"runQuery()\">\n @if (isRunning) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Running...\n } @else {\n <i class=\"fa-solid fa-play\"></i> Run Query\n }\n </button>\n } @else {\n <button mjButton (click)=\"close()\">\n <i class=\"fa-solid fa-times\"></i> Close\n </button>\n <button mjButton\n variant=\"primary\"\n [disabled]=\"isRunning\"\n (click)=\"runQuery()\">\n <i class=\"fa-solid fa-refresh\"></i> Run Again\n </button>\n }\n </mj-dialog-actions>\n </mj-dialog>\n}\n", styles: [".param-value textarea {\n resize: vertical;\n min-height: 60px;\n}\n\n.loading-state {\n color: var(--mj-text-muted);\n}\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* Professional Results Table Styling */\n.results-table-container {\n background: var(--mj-bg-surface);\n box-shadow: var(--mj-shadow-sm);\n display: flex;\n flex-direction: column;\n}\n\n.results-table-container::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.results-table-container::-webkit-scrollbar-track {\n background: var(--mj-bg-surface-sunken);\n}\n\n.results-table-container::-webkit-scrollbar-thumb {\n background: var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n}\n\n.results-table-container::-webkit-scrollbar-thumb:hover {\n background: var(--mj-text-disabled);\n}\n\n.results-table tbody tr:hover {\n background-color: var(--mj-bg-surface-card) !important;\n}\n\n.results-table tbody tr:nth-child(even) {\n background-color: var(--mj-bg-surface-card);\n}\n\n.dialog-content {\n overflow-y: auto;\n}\n\n.header-section {\n flex-shrink: 0;\n}\n\n.param-actions button {\n min-width: 30px;\n padding: 4px 6px;\n}\n\n/* Ensure expansion panel content flexes properly */\n::ng-deep .k-expander-content-wrapper {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n::ng-deep .k-expander-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n"] }]
779
770
  }], null, { query: [{
780
771
  type: Input
781
772
  }], parameters: [{