@memberjunction/ng-core-entity-forms 6.2.0 → 6.3.0-edge.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -6
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js +3 -3
- package/dist/lib/custom/AIAgentCategories/ai-agent-category-header.panel.js.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts +12 -0
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js +293 -230
- package/dist/lib/custom/AIAgentSessions/ai-agent-session-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/agent-prompt-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +11 -0
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +862 -812
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +2 -2
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +2 -2
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +12 -0
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js +821 -763
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/chat-message-viewer.component.js +2 -2
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +10 -0
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +700 -605
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-execution-log-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-execution-log-form.component.js +223 -175
- package/dist/lib/custom/Actions/action-execution-log-form.component.js.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.d.ts +10 -0
- package/dist/lib/custom/Actions/action-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Actions/action-form.component.js +502 -453
- package/dist/lib/custom/Actions/action-form.component.js.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Companies/company-header.panel.js +3 -3
- package/dist/lib/custom/Companies/company-header.panel.js.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Conversations/conversation-header.panel.js +3 -3
- package/dist/lib/custom/Conversations/conversation-header.panel.js.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Employees/employee-header.panel.js +3 -3
- package/dist/lib/custom/Employees/employee-header.panel.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +15 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +836 -801
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/EntityActions/entityaction.form.component.js +2 -2
- package/dist/lib/custom/Files/file-form.component.js +2 -2
- package/dist/lib/custom/Lists/list-form.component.d.ts +5 -0
- package/dist/lib/custom/Lists/list-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Lists/list-form.component.js +355 -338
- package/dist/lib/custom/Lists/list-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-form.component.js +3 -3
- package/dist/lib/custom/MLModels/ml-model-form.component.js.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts +17 -35
- package/dist/lib/custom/MLModels/ml-model-view-models.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ml-model-view-models.js +55 -54
- package/dist/lib/custom/MLModels/ml-model-view-models.js.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts +7 -99
- package/dist/lib/custom/MLModels/ps-model-detail.component.d.ts.map +1 -1
- package/dist/lib/custom/MLModels/ps-model-detail.component.js +124 -303
- package/dist/lib/custom/MLModels/ps-model-detail.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +9 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +493 -444
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-run-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/template-param-dialog.component.js +2 -2
- package/dist/lib/custom/Templates/templates-form.component.d.ts +9 -0
- package/dist/lib/custom/Templates/templates-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Templates/templates-form.component.js +118 -74
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-form.component.js +471 -451
- package/dist/lib/custom/Tests/test-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-run-form.component.js +312 -289
- package/dist/lib/custom/Tests/test-run-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-form.component.js +697 -677
- package/dist/lib/custom/Tests/test-suite-form.component.js.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts +5 -0
- package/dist/lib/custom/Tests/test-suite-run-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Tests/test-suite-run-form.component.js +453 -433
- package/dist/lib/custom/Tests/test-suite-run-form.component.js.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.d.ts.map +1 -1
- package/dist/lib/custom/Users/user-header.panel.js +3 -3
- package/dist/lib/custom/Users/user-header.panel.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts +2 -2
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js +30 -13
- package/dist/lib/custom/ai-agent-run/agent-run-cost-split.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +23 -0
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js +276 -216
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +7 -1
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +32 -14
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js +119 -95
- package/dist/lib/generated/Entities/MJAction/mjaction.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js +124 -0
- package/dist/lib/generated/Entities/MJComment/mjcomment.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJCommentType/mjcommenttype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJConversation/mjconversation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js +95 -0
- package/dist/lib/generated/Entities/MJConversationType/mjconversationtype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js +60 -0
- package/dist/lib/generated/Entities/MJDocumentSequenceCounter/mjdocumentsequencecounter.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +124 -106
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js +12 -4
- package/dist/lib/generated/Entities/MJEntityFieldValue/mjentityfieldvalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +19 -11
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js +62 -0
- package/dist/lib/generated/Entities/MJEntityUniqueKey/mjentityuniquekey.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js +26 -12
- package/dist/lib/generated/Entities/MJFeatureValue/mjfeaturevalue.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js +140 -0
- package/dist/lib/generated/Entities/MJFieldSuggestion/mjfieldsuggestion.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js +69 -15
- package/dist/lib/generated/Entities/MJFile/mjfile.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js +31 -13
- package/dist/lib/generated/Entities/MJFileStorageProvider/mjfilestorageprovider.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js +205 -0
- package/dist/lib/generated/Entities/MJMLEvaluationProtocol/mjmlevaluationprotocol.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJMLModel/mjmlmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js +173 -0
- package/dist/lib/generated/Entities/MJMLPredictionUnit/mjmlpredictionunit.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js +46 -24
- package/dist/lib/generated/Entities/MJMLTrainingPipeline/mjmltrainingpipeline.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js +22 -14
- package/dist/lib/generated/Entities/MJMLTrainingRun/mjmltrainingrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js +175 -0
- package/dist/lib/generated/Entities/MJMLTrainingSnapshot/mjmltrainingsnapshot.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js +8 -6
- package/dist/lib/generated/Entities/MJQueryField/mjqueryfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js +44 -36
- package/dist/lib/generated/Entities/MJRecordProcess/mjrecordprocess.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js +54 -32
- package/dist/lib/generated/Entities/MJTask/mjtask.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +452 -443
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +27 -0
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js +1 -1
- package/dist/lib/panels/feature-values/feature-values.panel.js.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.d.ts.map +1 -1
- package/dist/lib/panels/model-predictions/model-prediction.logic.js.map +1 -1
- package/dist/lib/shared/components/template-editor.component.js +2 -2
- package/dist/lib/shared/phone-hero.d.ts +17 -0
- package/dist/lib/shared/phone-hero.d.ts.map +1 -0
- package/dist/lib/shared/phone-hero.js +30 -0
- package/dist/lib/shared/phone-hero.js.map +1 -0
- package/dist/lib/shared/phone-sections-state.d.ts +28 -0
- package/dist/lib/shared/phone-sections-state.d.ts.map +1 -0
- package/dist/lib/shared/phone-sections-state.js +38 -0
- package/dist/lib/shared/phone-sections-state.js.map +1 -0
- package/package.json +50 -50
|
@@ -15,6 +15,8 @@ import { EditorMarkersFor, ExtractionSeverityOf, HideUnreadableFieldRows, SaveRe
|
|
|
15
15
|
import { NavigationService } from '@memberjunction/ng-shared';
|
|
16
16
|
import { MJConfirmService } from '@memberjunction/ng-ui-components';
|
|
17
17
|
import { Subject } from 'rxjs';
|
|
18
|
+
import { JoinHeroSummary } from '../../shared/phone-hero';
|
|
19
|
+
import { PhoneSectionsState } from '../../shared/phone-sections-state';
|
|
18
20
|
import * as i0 from "@angular/core";
|
|
19
21
|
import * as i1 from "@angular/common";
|
|
20
22
|
import * as i2 from "@angular/forms";
|
|
@@ -34,14 +36,14 @@ const _forTrack1 = ($index, $item) => $item.ID;
|
|
|
34
36
|
const _forTrack2 = ($index, $item) => $item.ID || $index;
|
|
35
37
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
36
38
|
i0.ɵɵelementStart(0, "div", 4);
|
|
37
|
-
i0.ɵɵelement(1, "i",
|
|
39
|
+
i0.ɵɵelement(1, "i", 58);
|
|
38
40
|
i0.ɵɵelementStart(2, "span");
|
|
39
41
|
i0.ɵɵtext(3, "Saving...");
|
|
40
42
|
i0.ɵɵelementEnd()();
|
|
41
43
|
} }
|
|
42
44
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
43
45
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
44
|
-
i0.ɵɵelementStart(0, "input",
|
|
46
|
+
i0.ɵɵelementStart(0, "input", 59);
|
|
45
47
|
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Name, $event) || (ctx_r1.record.Name = $event); return i0.ɵɵresetView($event); });
|
|
46
48
|
i0.ɵɵelementEnd();
|
|
47
49
|
} if (rf & 2) {
|
|
@@ -49,19 +51,26 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template(rf, c
|
|
|
49
51
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Name);
|
|
50
52
|
} }
|
|
51
53
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵelementStart(0, "h4",
|
|
54
|
+
i0.ɵɵelementStart(0, "h4", 60);
|
|
53
55
|
i0.ɵɵtext(1);
|
|
54
56
|
i0.ɵɵelementEnd();
|
|
57
|
+
i0.ɵɵelementStart(2, "span", 61);
|
|
58
|
+
i0.ɵɵtext(3);
|
|
59
|
+
i0.ɵɵelementEnd();
|
|
55
60
|
} if (rf & 2) {
|
|
56
61
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
57
62
|
i0.ɵɵadvance();
|
|
58
63
|
i0.ɵɵtextInterpolate(ctx_r1.record.Name || "Untitled Query");
|
|
64
|
+
i0.ɵɵadvance();
|
|
65
|
+
i0.ɵɵstyleProp("background", ctx_r1.getStatusBadgeColor());
|
|
66
|
+
i0.ɵɵadvance();
|
|
67
|
+
i0.ɵɵtextInterpolate(ctx_r1.record.Status || "Unknown");
|
|
59
68
|
} }
|
|
60
69
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
61
70
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
62
|
-
i0.ɵɵelementStart(0, "button",
|
|
71
|
+
i0.ɵɵelementStart(0, "button", 62);
|
|
63
72
|
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.runQuery()); });
|
|
64
|
-
i0.ɵɵelement(1, "i",
|
|
73
|
+
i0.ɵɵelement(1, "i", 63);
|
|
65
74
|
i0.ɵɵtext(2, " Run ");
|
|
66
75
|
i0.ɵɵelementEnd();
|
|
67
76
|
} if (rf & 2) {
|
|
@@ -70,21 +79,21 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template(rf,
|
|
|
70
79
|
} }
|
|
71
80
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
72
81
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
73
|
-
i0.ɵɵelementStart(0, "button",
|
|
82
|
+
i0.ɵɵelementStart(0, "button", 68);
|
|
74
83
|
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.editSelectedCategory()); });
|
|
75
|
-
i0.ɵɵelement(1, "i",
|
|
84
|
+
i0.ɵɵelement(1, "i", 69);
|
|
76
85
|
i0.ɵɵelementEnd();
|
|
77
86
|
} }
|
|
78
87
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
79
88
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
80
|
-
i0.ɵɵelementStart(0, "div",
|
|
89
|
+
i0.ɵɵelementStart(0, "div", 16)(1, "mj-tree-dropdown", 64);
|
|
81
90
|
i0.ɵɵlistener("ValueChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template_mj_tree_dropdown_ValueChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnCategoryTreeChange($event)); });
|
|
82
91
|
i0.ɵɵelementEnd();
|
|
83
|
-
i0.ɵɵelementStart(2, "button",
|
|
92
|
+
i0.ɵɵelementStart(2, "button", 65);
|
|
84
93
|
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createCategory()); });
|
|
85
|
-
i0.ɵɵelement(3, "i",
|
|
94
|
+
i0.ɵɵelement(3, "i", 66);
|
|
86
95
|
i0.ɵɵelementEnd();
|
|
87
|
-
i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template, 2, 0, "button",
|
|
96
|
+
i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Conditional_4_Template, 2, 0, "button", 67);
|
|
88
97
|
i0.ɵɵelementEnd();
|
|
89
98
|
} if (rf & 2) {
|
|
90
99
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -94,7 +103,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template(rf,
|
|
|
94
103
|
i0.ɵɵconditional(ctx_r1.record.CategoryID ? 4 : -1);
|
|
95
104
|
} }
|
|
96
105
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
97
|
-
i0.ɵɵelementStart(0, "span",
|
|
106
|
+
i0.ɵɵelementStart(0, "span", 17);
|
|
98
107
|
i0.ɵɵtext(1);
|
|
99
108
|
i0.ɵɵelementEnd();
|
|
100
109
|
} if (rf & 2) {
|
|
@@ -104,7 +113,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_18_Template(rf,
|
|
|
104
113
|
} }
|
|
105
114
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
106
115
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
107
|
-
i0.ɵɵelementStart(0, "mj-dropdown",
|
|
116
|
+
i0.ɵɵelementStart(0, "mj-dropdown", 70);
|
|
108
117
|
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template_mj_dropdown_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Status, $event) || (ctx_r1.record.Status = $event); return i0.ɵɵresetView($event); });
|
|
109
118
|
i0.ɵɵelementEnd();
|
|
110
119
|
} if (rf & 2) {
|
|
@@ -113,8 +122,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template(rf,
|
|
|
113
122
|
i0.ɵɵproperty("Data", ctx_r1.statusOptions)("ValuePrimitive", true);
|
|
114
123
|
} }
|
|
115
124
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
-
i0.ɵɵelementStart(0, "span",
|
|
117
|
-
i0.ɵɵelement(1, "i",
|
|
125
|
+
i0.ɵɵelementStart(0, "span", 71);
|
|
126
|
+
i0.ɵɵelement(1, "i", 72);
|
|
118
127
|
i0.ɵɵtext(2);
|
|
119
128
|
i0.ɵɵelementEnd();
|
|
120
129
|
} if (rf & 2) {
|
|
@@ -127,20 +136,20 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_23_Template(rf,
|
|
|
127
136
|
} }
|
|
128
137
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
129
138
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
130
|
-
i0.ɵɵelementStart(0, "button",
|
|
139
|
+
i0.ɵɵelementStart(0, "button", 75);
|
|
131
140
|
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenRefreshDialog()); });
|
|
132
|
-
i0.ɵɵelement(1, "i",
|
|
141
|
+
i0.ɵɵelement(1, "i", 76);
|
|
133
142
|
i0.ɵɵtext(2, " Refresh metadata ");
|
|
134
143
|
i0.ɵɵelementEnd();
|
|
135
144
|
} }
|
|
136
145
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
137
|
-
i0.ɵɵelementStart(0, "div",
|
|
146
|
+
i0.ɵɵelementStart(0, "div", 14)(1, "label", 15);
|
|
138
147
|
i0.ɵɵtext(2, "Metadata");
|
|
139
148
|
i0.ɵɵelementEnd();
|
|
140
|
-
i0.ɵɵelementStart(3, "div",
|
|
149
|
+
i0.ɵɵelementStart(3, "div", 16)(4, "span", 73);
|
|
141
150
|
i0.ɵɵtext(5);
|
|
142
151
|
i0.ɵɵelementEnd();
|
|
143
|
-
i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template, 3, 0, "button",
|
|
152
|
+
i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Conditional_6_Template, 3, 0, "button", 74);
|
|
144
153
|
i0.ɵɵelementEnd()();
|
|
145
154
|
} if (rf & 2) {
|
|
146
155
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -154,7 +163,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template(rf,
|
|
|
154
163
|
} }
|
|
155
164
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
156
165
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
157
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
166
|
+
i0.ɵɵelementStart(0, "textarea", 79);
|
|
158
167
|
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Description, $event) || (ctx_r1.record.Description = $event); return i0.ɵɵresetView($event); });
|
|
159
168
|
i0.ɵɵtext(1, " ");
|
|
160
169
|
i0.ɵɵelementEnd();
|
|
@@ -163,7 +172,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1
|
|
|
163
172
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Description);
|
|
164
173
|
} }
|
|
165
174
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
166
|
-
i0.ɵɵelementStart(0, "p",
|
|
175
|
+
i0.ɵɵelementStart(0, "p", 78);
|
|
167
176
|
i0.ɵɵtext(1);
|
|
168
177
|
i0.ɵɵelementEnd();
|
|
169
178
|
} if (rf & 2) {
|
|
@@ -173,7 +182,7 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_2
|
|
|
173
182
|
} }
|
|
174
183
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
175
184
|
i0.ɵɵelementStart(0, "div", 21);
|
|
176
|
-
i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template, 2, 1, "textarea",
|
|
185
|
+
i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_1_Template, 2, 1, "textarea", 77)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Conditional_2_Template, 2, 1, "p", 78);
|
|
177
186
|
i0.ɵɵelementEnd();
|
|
178
187
|
} if (rf & 2) {
|
|
179
188
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -181,7 +190,22 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template(rf,
|
|
|
181
190
|
i0.ɵɵconditional(ctx_r1.EditMode ? 1 : 2);
|
|
182
191
|
} }
|
|
183
192
|
function MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
184
|
-
i0.ɵɵ
|
|
193
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
194
|
+
i0.ɵɵelementStart(0, "button", 80);
|
|
195
|
+
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleHeroDetails()); });
|
|
196
|
+
i0.ɵɵelementStart(1, "span", 81);
|
|
197
|
+
i0.ɵɵtext(2);
|
|
198
|
+
i0.ɵɵelementEnd();
|
|
199
|
+
i0.ɵɵelement(3, "i", 82);
|
|
200
|
+
i0.ɵɵelementEnd();
|
|
201
|
+
} if (rf & 2) {
|
|
202
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
203
|
+
i0.ɵɵattribute("aria-expanded", ctx_r1.HeroDetailsOpen);
|
|
204
|
+
i0.ɵɵadvance(2);
|
|
205
|
+
i0.ɵɵtextInterpolate(ctx_r1.HeroSummary);
|
|
206
|
+
} }
|
|
207
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
208
|
+
i0.ɵɵelementStart(0, "mj-alert", 23)(1, "span");
|
|
185
209
|
i0.ɵɵtext(2, " This query has status ");
|
|
186
210
|
i0.ɵɵelementStart(3, "strong");
|
|
187
211
|
i0.ɵɵtext(4);
|
|
@@ -195,142 +219,142 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template(rf,
|
|
|
195
219
|
i0.ɵɵadvance();
|
|
196
220
|
i0.ɵɵtextInterpolate1(". ", ctx_r1.getStatusBannerMessage(), " ");
|
|
197
221
|
} }
|
|
198
|
-
function
|
|
199
|
-
i0.ɵɵelementStart(0, "span",
|
|
222
|
+
function MJQueryFormComponentExtended_Conditional_0_ng_template_31_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
223
|
+
i0.ɵɵelementStart(0, "span", 86);
|
|
200
224
|
i0.ɵɵtext(1, "\u2014 Defined");
|
|
201
225
|
i0.ɵɵelementEnd();
|
|
202
226
|
} }
|
|
203
|
-
function
|
|
204
|
-
i0.ɵɵelementStart(0, "span",
|
|
205
|
-
i0.ɵɵelement(2, "i",
|
|
227
|
+
function MJQueryFormComponentExtended_Conditional_0_ng_template_31_Template(rf, ctx) { if (rf & 1) {
|
|
228
|
+
i0.ɵɵelementStart(0, "span", 83)(1, "span", 84);
|
|
229
|
+
i0.ɵɵelement(2, "i", 85);
|
|
206
230
|
i0.ɵɵtext(3, " SQL ");
|
|
207
|
-
i0.ɵɵconditionalCreate(4,
|
|
231
|
+
i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_ng_template_31_Conditional_4_Template, 2, 0, "span", 86);
|
|
208
232
|
i0.ɵɵelementEnd()();
|
|
209
233
|
} if (rf & 2) {
|
|
210
234
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
211
235
|
i0.ɵɵadvance(4);
|
|
212
236
|
i0.ɵɵconditional(ctx_r1.record.SQL ? 4 : -1);
|
|
213
237
|
} }
|
|
214
|
-
function
|
|
215
|
-
const
|
|
216
|
-
i0.ɵɵelementStart(0, "mj-query-diagnostics",
|
|
217
|
-
i0.ɵɵlistener("LocationClick", function
|
|
238
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
239
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
240
|
+
i0.ɵɵelementStart(0, "mj-query-diagnostics", 87);
|
|
241
|
+
i0.ɵɵlistener("LocationClick", function MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template_mj_query_diagnostics_LocationClick_0_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDiagnosticLocationClick($event)); });
|
|
218
242
|
i0.ɵɵelementEnd();
|
|
219
243
|
} if (rf & 2) {
|
|
220
244
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
221
245
|
i0.ɵɵproperty("Headline", ctx_r1.SaveDiagnosticsHeadline)("Diagnostics", ctx_r1.SaveDiagnostics)("LocationsClickable", true);
|
|
222
246
|
} }
|
|
223
|
-
function
|
|
224
|
-
const
|
|
225
|
-
i0.ɵɵelementStart(0, "mj-query-diagnostics",
|
|
226
|
-
i0.ɵɵlistener("LocationClick", function
|
|
247
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template(rf, ctx) { if (rf & 1) {
|
|
248
|
+
const _r12 = i0.ɵɵgetCurrentView();
|
|
249
|
+
i0.ɵɵelementStart(0, "mj-query-diagnostics", 88);
|
|
250
|
+
i0.ɵɵlistener("LocationClick", function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template_mj_query_diagnostics_LocationClick_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDiagnosticLocationClick($event)); });
|
|
227
251
|
i0.ɵɵelementEnd();
|
|
228
252
|
} if (rf & 2) {
|
|
229
253
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
230
254
|
i0.ɵɵproperty("Headline", "Last metadata extraction: " + ctx_r1.ExtractionStatusLabel)("Diagnostics", ctx_r1.ExtractionDiagnostics)("Severity", ctx_r1.ExtractionSeverity)("LocationsClickable", true);
|
|
231
255
|
} }
|
|
232
|
-
function
|
|
233
|
-
i0.ɵɵelementStart(0, "div",
|
|
256
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
257
|
+
i0.ɵɵelementStart(0, "div", 96);
|
|
234
258
|
i0.ɵɵtext(1);
|
|
235
259
|
i0.ɵɵelementEnd();
|
|
236
260
|
} if (rf & 2) {
|
|
237
|
-
const
|
|
261
|
+
const filter_r13 = i0.ɵɵnextContext().$implicit;
|
|
238
262
|
i0.ɵɵadvance();
|
|
239
|
-
i0.ɵɵtextInterpolate(
|
|
263
|
+
i0.ɵɵtextInterpolate(filter_r13.notes);
|
|
240
264
|
} }
|
|
241
|
-
function
|
|
242
|
-
i0.ɵɵelementStart(0, "div",
|
|
265
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
266
|
+
i0.ɵɵelementStart(0, "div", 92)(1, "div", 93);
|
|
243
267
|
i0.ɵɵtext(2);
|
|
244
268
|
i0.ɵɵelementEnd();
|
|
245
|
-
i0.ɵɵelementStart(3, "div",
|
|
269
|
+
i0.ɵɵelementStart(3, "div", 94);
|
|
246
270
|
i0.ɵɵtext(4);
|
|
247
271
|
i0.ɵɵelementEnd();
|
|
248
|
-
i0.ɵɵelementStart(5, "div",
|
|
272
|
+
i0.ɵɵelementStart(5, "div", 95);
|
|
249
273
|
i0.ɵɵtext(6);
|
|
250
274
|
i0.ɵɵelementEnd();
|
|
251
|
-
i0.ɵɵconditionalCreate(7,
|
|
275
|
+
i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Conditional_7_Template, 2, 1, "div", 96);
|
|
252
276
|
i0.ɵɵelementEnd();
|
|
253
277
|
} if (rf & 2) {
|
|
254
|
-
const
|
|
278
|
+
const filter_r13 = ctx.$implicit;
|
|
255
279
|
i0.ɵɵadvance(2);
|
|
256
|
-
i0.ɵɵtextInterpolate(
|
|
280
|
+
i0.ɵɵtextInterpolate(filter_r13.name);
|
|
257
281
|
i0.ɵɵadvance(2);
|
|
258
|
-
i0.ɵɵtextInterpolate(
|
|
282
|
+
i0.ɵɵtextInterpolate(filter_r13.description);
|
|
259
283
|
i0.ɵɵadvance(2);
|
|
260
|
-
i0.ɵɵtextInterpolate(
|
|
284
|
+
i0.ɵɵtextInterpolate(filter_r13.exampleSyntax);
|
|
261
285
|
i0.ɵɵadvance();
|
|
262
|
-
i0.ɵɵconditional(
|
|
286
|
+
i0.ɵɵconditional(filter_r13.notes ? 7 : -1);
|
|
263
287
|
} }
|
|
264
|
-
function
|
|
265
|
-
i0.ɵɵelementStart(0, "div",
|
|
266
|
-
i0.ɵɵelement(2, "i",
|
|
288
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
289
|
+
i0.ɵɵelementStart(0, "div", 36)(1, "h6", 89);
|
|
290
|
+
i0.ɵɵelement(2, "i", 90);
|
|
267
291
|
i0.ɵɵtext(3, " Available SQL Filters for Parameterized Queries ");
|
|
268
292
|
i0.ɵɵelementEnd();
|
|
269
|
-
i0.ɵɵelementStart(4, "div",
|
|
270
|
-
i0.ɵɵrepeaterCreate(5,
|
|
293
|
+
i0.ɵɵelementStart(4, "div", 91);
|
|
294
|
+
i0.ɵɵrepeaterCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_43_For_6_Template, 8, 4, "div", 92, _forTrack0);
|
|
271
295
|
i0.ɵɵelementEnd()();
|
|
272
296
|
} if (rf & 2) {
|
|
273
297
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
274
298
|
i0.ɵɵadvance(5);
|
|
275
299
|
i0.ɵɵrepeater(ctx_r1.sqlFilters);
|
|
276
300
|
} }
|
|
277
|
-
function
|
|
278
|
-
i0.ɵɵelementStart(0, "span",
|
|
301
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
302
|
+
i0.ɵɵelementStart(0, "span", 86);
|
|
279
303
|
i0.ɵɵtext(1, "\u2014 Documented");
|
|
280
304
|
i0.ɵɵelementEnd();
|
|
281
305
|
} }
|
|
282
|
-
function
|
|
283
|
-
i0.ɵɵelementStart(0, "span",
|
|
284
|
-
i0.ɵɵelement(1, "i",
|
|
306
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
307
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
308
|
+
i0.ɵɵelement(1, "i", 99);
|
|
285
309
|
i0.ɵɵtext(2, " Technical Description ");
|
|
286
|
-
i0.ɵɵconditionalCreate(3,
|
|
310
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Conditional_3_Template, 2, 0, "span", 86);
|
|
287
311
|
i0.ɵɵelementEnd();
|
|
288
312
|
} if (rf & 2) {
|
|
289
313
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
290
314
|
i0.ɵɵadvance(3);
|
|
291
315
|
i0.ɵɵconditional(ctx_r1.record.TechnicalDescription ? 3 : -1);
|
|
292
316
|
} }
|
|
293
|
-
function
|
|
294
|
-
i0.ɵɵelementStart(0, "div",
|
|
295
|
-
i0.ɵɵelement(2, "i",
|
|
317
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
318
|
+
i0.ɵɵelementStart(0, "div", 101)(1, "div", 102);
|
|
319
|
+
i0.ɵɵelement(2, "i", 103);
|
|
296
320
|
i0.ɵɵtext(3, " Preview ");
|
|
297
321
|
i0.ɵɵelementEnd();
|
|
298
|
-
i0.ɵɵelement(4, "mj-markdown",
|
|
322
|
+
i0.ɵɵelement(4, "mj-markdown", 104);
|
|
299
323
|
i0.ɵɵelementEnd();
|
|
300
324
|
} if (rf & 2) {
|
|
301
325
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
302
326
|
i0.ɵɵadvance(4);
|
|
303
327
|
i0.ɵɵproperty("data", ctx_r1.record.TechnicalDescription || "")("enableMermaid", true)("enableHighlight", true)("enableCollapsibleHeadings", false)("enableSmartypants", true);
|
|
304
328
|
} }
|
|
305
|
-
function
|
|
306
|
-
const
|
|
307
|
-
i0.ɵɵelementStart(0, "textarea",
|
|
308
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
329
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
330
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
331
|
+
i0.ɵɵelementStart(0, "textarea", 100);
|
|
332
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template_textarea_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.TechnicalDescription, $event) || (ctx_r1.record.TechnicalDescription = $event); return i0.ɵɵresetView($event); });
|
|
309
333
|
i0.ɵɵtext(1, " ");
|
|
310
334
|
i0.ɵɵelementEnd();
|
|
311
|
-
i0.ɵɵconditionalCreate(2,
|
|
335
|
+
i0.ɵɵconditionalCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Conditional_2_Template, 5, 5, "div", 101);
|
|
312
336
|
} if (rf & 2) {
|
|
313
337
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
314
338
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.TechnicalDescription);
|
|
315
339
|
i0.ɵɵadvance(2);
|
|
316
340
|
i0.ɵɵconditional(ctx_r1.record.TechnicalDescription ? 2 : -1);
|
|
317
341
|
} }
|
|
318
|
-
function
|
|
319
|
-
i0.ɵɵelementStart(0, "div",
|
|
320
|
-
i0.ɵɵelement(1, "mj-markdown",
|
|
342
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
343
|
+
i0.ɵɵelementStart(0, "div", 98);
|
|
344
|
+
i0.ɵɵelement(1, "mj-markdown", 104);
|
|
321
345
|
i0.ɵɵelementEnd();
|
|
322
346
|
} if (rf & 2) {
|
|
323
347
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
324
348
|
i0.ɵɵadvance();
|
|
325
349
|
i0.ɵɵproperty("data", ctx_r1.record.TechnicalDescription || "")("enableMermaid", true)("enableHighlight", true)("enableCollapsibleHeadings", false)("enableSmartypants", true);
|
|
326
350
|
} }
|
|
327
|
-
function
|
|
328
|
-
const
|
|
329
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
330
|
-
i0.ɵɵtwoWayListener("ExpandedChange", function
|
|
331
|
-
i0.ɵɵtemplate(1,
|
|
332
|
-
i0.ɵɵelementStart(2, "div",
|
|
333
|
-
i0.ɵɵconditionalCreate(3,
|
|
351
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template(rf, ctx) { if (rf & 1) {
|
|
352
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
353
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 97);
|
|
354
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.technicalDescriptionPanelExpanded, $event) || (ctx_r1.technicalDescriptionPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
355
|
+
i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1_Template, 4, 1, "ng-template", 27);
|
|
356
|
+
i0.ɵɵelementStart(2, "div", 43);
|
|
357
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_3_Template, 3, 2)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4_Template, 2, 5, "div", 98);
|
|
334
358
|
i0.ɵɵelementEnd()();
|
|
335
359
|
} if (rf & 2) {
|
|
336
360
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -338,8 +362,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template(rf,
|
|
|
338
362
|
i0.ɵɵadvance(3);
|
|
339
363
|
i0.ɵɵconditional(ctx_r1.EditMode ? 3 : 4);
|
|
340
364
|
} }
|
|
341
|
-
function
|
|
342
|
-
i0.ɵɵelementStart(0, "span",
|
|
365
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
366
|
+
i0.ɵɵelementStart(0, "span", 108);
|
|
343
367
|
i0.ɵɵtext(1);
|
|
344
368
|
i0.ɵɵelementEnd();
|
|
345
369
|
} if (rf & 2) {
|
|
@@ -347,44 +371,44 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_ng_template_1
|
|
|
347
371
|
i0.ɵɵadvance();
|
|
348
372
|
i0.ɵɵtextInterpolate(ctx_r1.queryParameters.length);
|
|
349
373
|
} }
|
|
350
|
-
function
|
|
351
|
-
i0.ɵɵelementStart(0, "span",
|
|
352
|
-
i0.ɵɵelement(1, "i",
|
|
374
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
375
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
376
|
+
i0.ɵɵelement(1, "i", 107);
|
|
353
377
|
i0.ɵɵtext(2, " Parameters ");
|
|
354
|
-
i0.ɵɵconditionalCreate(3,
|
|
378
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Conditional_3_Template, 2, 1, "span", 108);
|
|
355
379
|
i0.ɵɵelementEnd();
|
|
356
380
|
} if (rf & 2) {
|
|
357
381
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
358
382
|
i0.ɵɵadvance(3);
|
|
359
383
|
i0.ɵɵconditional(ctx_r1.queryParameters.length > 0 ? 3 : -1);
|
|
360
384
|
} }
|
|
361
|
-
function
|
|
362
|
-
i0.ɵɵelementStart(0, "div",
|
|
363
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
385
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
386
|
+
i0.ɵɵelementStart(0, "div", 106);
|
|
387
|
+
i0.ɵɵelement(1, "mj-loading", 109);
|
|
364
388
|
i0.ɵɵelementEnd();
|
|
365
389
|
} }
|
|
366
|
-
function
|
|
367
|
-
const
|
|
368
|
-
i0.ɵɵelementStart(0, "mj-empty-state",
|
|
369
|
-
i0.ɵɵlistener("Action", function
|
|
390
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
392
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 111);
|
|
393
|
+
i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addParameter()); });
|
|
370
394
|
i0.ɵɵelementEnd();
|
|
371
395
|
} if (rf & 2) {
|
|
372
396
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
373
397
|
i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Parameter" : "");
|
|
374
398
|
} }
|
|
375
|
-
function
|
|
376
|
-
const
|
|
377
|
-
i0.ɵɵelementStart(0, "div",
|
|
378
|
-
i0.ɵɵlistener("click", function
|
|
379
|
-
i0.ɵɵelement(2, "i",
|
|
399
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
400
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
401
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "button", 114);
|
|
402
|
+
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addParameter()); });
|
|
403
|
+
i0.ɵɵelement(2, "i", 66);
|
|
380
404
|
i0.ɵɵtext(3, " Add Parameter ");
|
|
381
405
|
i0.ɵɵelementEnd()();
|
|
382
406
|
} }
|
|
383
|
-
function
|
|
384
|
-
const
|
|
385
|
-
i0.ɵɵconditionalCreate(0,
|
|
386
|
-
i0.ɵɵelementStart(1, "mj-query-parameters-grid",
|
|
387
|
-
i0.ɵɵlistener("Remove", function
|
|
407
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
408
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
409
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 112);
|
|
410
|
+
i0.ɵɵelementStart(1, "mj-query-parameters-grid", 113);
|
|
411
|
+
i0.ɵɵlistener("Remove", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template_mj_query_parameters_grid_Remove_1_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteParameter($event)); })("Changed", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template_mj_query_parameters_grid_Changed_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChildRowChanged()); });
|
|
388
412
|
i0.ɵɵelementEnd();
|
|
389
413
|
} if (rf & 2) {
|
|
390
414
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -392,19 +416,19 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Conditional_4
|
|
|
392
416
|
i0.ɵɵadvance();
|
|
393
417
|
i0.ɵɵproperty("Parameters", ctx_r1.queryParameters)("EditMode", ctx_r1.EditMode);
|
|
394
418
|
} }
|
|
395
|
-
function
|
|
396
|
-
i0.ɵɵconditionalCreate(0,
|
|
419
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
420
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 110)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Conditional_1_Template, 2, 3);
|
|
397
421
|
} if (rf & 2) {
|
|
398
422
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
399
423
|
i0.ɵɵconditional(ctx_r1.queryParameters.length === 0 ? 0 : 1);
|
|
400
424
|
} }
|
|
401
|
-
function
|
|
402
|
-
const
|
|
403
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
404
|
-
i0.ɵɵtwoWayListener("ExpandedChange", function
|
|
405
|
-
i0.ɵɵtemplate(1,
|
|
406
|
-
i0.ɵɵelementStart(2, "div",
|
|
407
|
-
i0.ɵɵconditionalCreate(3,
|
|
425
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
426
|
+
const _r16 = i0.ɵɵgetCurrentView();
|
|
427
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 105);
|
|
428
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.parametersPanelExpanded, $event) || (ctx_r1.parametersPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
429
|
+
i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1_Template, 4, 1, "ng-template", 27);
|
|
430
|
+
i0.ɵɵelementStart(2, "div", 43);
|
|
431
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Conditional_4_Template, 2, 1);
|
|
408
432
|
i0.ɵɵelementEnd()();
|
|
409
433
|
} if (rf & 2) {
|
|
410
434
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -412,8 +436,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template(rf,
|
|
|
412
436
|
i0.ɵɵadvance(3);
|
|
413
437
|
i0.ɵɵconditional(ctx_r1.isLoadingParameters ? 3 : 4);
|
|
414
438
|
} }
|
|
415
|
-
function
|
|
416
|
-
i0.ɵɵelementStart(0, "span",
|
|
439
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
440
|
+
i0.ɵɵelementStart(0, "span", 108);
|
|
417
441
|
i0.ɵɵtext(1);
|
|
418
442
|
i0.ɵɵelementEnd();
|
|
419
443
|
} if (rf & 2) {
|
|
@@ -421,44 +445,44 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_ng_template_1
|
|
|
421
445
|
i0.ɵɵadvance();
|
|
422
446
|
i0.ɵɵtextInterpolate(ctx_r1.queryFields.length);
|
|
423
447
|
} }
|
|
424
|
-
function
|
|
425
|
-
i0.ɵɵelementStart(0, "span",
|
|
426
|
-
i0.ɵɵelement(1, "i",
|
|
448
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
450
|
+
i0.ɵɵelement(1, "i", 116);
|
|
427
451
|
i0.ɵɵtext(2, " Fields ");
|
|
428
|
-
i0.ɵɵconditionalCreate(3,
|
|
452
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Conditional_3_Template, 2, 1, "span", 108);
|
|
429
453
|
i0.ɵɵelementEnd();
|
|
430
454
|
} if (rf & 2) {
|
|
431
455
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
432
456
|
i0.ɵɵadvance(3);
|
|
433
457
|
i0.ɵɵconditional(ctx_r1.queryFields.length > 0 ? 3 : -1);
|
|
434
458
|
} }
|
|
435
|
-
function
|
|
436
|
-
i0.ɵɵelementStart(0, "div",
|
|
437
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
459
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
460
|
+
i0.ɵɵelementStart(0, "div", 106);
|
|
461
|
+
i0.ɵɵelement(1, "mj-loading", 117);
|
|
438
462
|
i0.ɵɵelementEnd();
|
|
439
463
|
} }
|
|
440
|
-
function
|
|
441
|
-
const
|
|
442
|
-
i0.ɵɵelementStart(0, "mj-empty-state",
|
|
443
|
-
i0.ɵɵlistener("Action", function
|
|
464
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
465
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
466
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 119);
|
|
467
|
+
i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addField()); });
|
|
444
468
|
i0.ɵɵelementEnd();
|
|
445
469
|
} if (rf & 2) {
|
|
446
470
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
447
471
|
i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Field" : "");
|
|
448
472
|
} }
|
|
449
|
-
function
|
|
450
|
-
const
|
|
451
|
-
i0.ɵɵelementStart(0, "div",
|
|
452
|
-
i0.ɵɵlistener("click", function
|
|
453
|
-
i0.ɵɵelement(2, "i",
|
|
473
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
474
|
+
const _r23 = i0.ɵɵgetCurrentView();
|
|
475
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "button", 114);
|
|
476
|
+
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r23); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addField()); });
|
|
477
|
+
i0.ɵɵelement(2, "i", 66);
|
|
454
478
|
i0.ɵɵtext(3, " Add Field ");
|
|
455
479
|
i0.ɵɵelementEnd()();
|
|
456
480
|
} }
|
|
457
|
-
function
|
|
458
|
-
const
|
|
459
|
-
i0.ɵɵconditionalCreate(0,
|
|
460
|
-
i0.ɵɵelementStart(1, "mj-query-fields-grid",
|
|
461
|
-
i0.ɵɵlistener("Remove", function
|
|
481
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
482
|
+
const _r22 = i0.ɵɵgetCurrentView();
|
|
483
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 112);
|
|
484
|
+
i0.ɵɵelementStart(1, "mj-query-fields-grid", 120);
|
|
485
|
+
i0.ɵɵlistener("Remove", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template_mj_query_fields_grid_Remove_1_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.deleteField($event)); })("OpenSourceField", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template_mj_query_fields_grid_OpenSourceField_1_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnOpenSourceField($event)); })("Changed", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template_mj_query_fields_grid_Changed_1_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnChildRowChanged()); });
|
|
462
486
|
i0.ɵɵelementEnd();
|
|
463
487
|
} if (rf & 2) {
|
|
464
488
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -466,19 +490,19 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Conditional_4
|
|
|
466
490
|
i0.ɵɵadvance();
|
|
467
491
|
i0.ɵɵproperty("Fields", ctx_r1.queryFields)("EditMode", ctx_r1.EditMode);
|
|
468
492
|
} }
|
|
469
|
-
function
|
|
470
|
-
i0.ɵɵconditionalCreate(0,
|
|
493
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
494
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 118)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Conditional_1_Template, 2, 3);
|
|
471
495
|
} if (rf & 2) {
|
|
472
496
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
473
497
|
i0.ɵɵconditional(ctx_r1.queryFields.length === 0 ? 0 : 1);
|
|
474
498
|
} }
|
|
475
|
-
function
|
|
476
|
-
const
|
|
477
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
478
|
-
i0.ɵɵtwoWayListener("ExpandedChange", function
|
|
479
|
-
i0.ɵɵtemplate(1,
|
|
480
|
-
i0.ɵɵelementStart(2, "div",
|
|
481
|
-
i0.ɵɵconditionalCreate(3,
|
|
499
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template(rf, ctx) { if (rf & 1) {
|
|
500
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
501
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 115);
|
|
502
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.fieldsPanelExpanded, $event) || (ctx_r1.fieldsPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
503
|
+
i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1_Template, 4, 1, "ng-template", 27);
|
|
504
|
+
i0.ɵɵelementStart(2, "div", 43);
|
|
505
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4_Template, 2, 1);
|
|
482
506
|
i0.ɵɵelementEnd()();
|
|
483
507
|
} if (rf & 2) {
|
|
484
508
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -486,11 +510,11 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template(rf,
|
|
|
486
510
|
i0.ɵɵadvance(3);
|
|
487
511
|
i0.ɵɵconditional(ctx_r1.isLoadingFields ? 3 : 4);
|
|
488
512
|
} }
|
|
489
|
-
function
|
|
490
|
-
i0.ɵɵelementStart(0, "span",
|
|
491
|
-
i0.ɵɵelement(1, "i",
|
|
513
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
514
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
515
|
+
i0.ɵɵelement(1, "i", 125);
|
|
492
516
|
i0.ɵɵtext(2, " Dependent Queries ");
|
|
493
|
-
i0.ɵɵelementStart(3, "span",
|
|
517
|
+
i0.ɵɵelementStart(3, "span", 108);
|
|
494
518
|
i0.ɵɵtext(4);
|
|
495
519
|
i0.ɵɵelementEnd()();
|
|
496
520
|
} if (rf & 2) {
|
|
@@ -498,67 +522,67 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_ng_template_1
|
|
|
498
522
|
i0.ɵɵadvance(4);
|
|
499
523
|
i0.ɵɵtextInterpolate(ctx_r1.DependentQueries.length);
|
|
500
524
|
} }
|
|
501
|
-
function
|
|
502
|
-
i0.ɵɵelementStart(0, "div",
|
|
503
|
-
i0.ɵɵelement(2, "i",
|
|
525
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
526
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "span", 135);
|
|
527
|
+
i0.ɵɵelement(2, "i", 136);
|
|
504
528
|
i0.ɵɵtext(3);
|
|
505
529
|
i0.ɵɵelementEnd()();
|
|
506
530
|
} if (rf & 2) {
|
|
507
|
-
const
|
|
531
|
+
const dep_r26 = i0.ɵɵnextContext().$implicit;
|
|
508
532
|
i0.ɵɵadvance(3);
|
|
509
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
533
|
+
i0.ɵɵtextInterpolate1(" ", dep_r26.ReferencePath, " ");
|
|
510
534
|
} }
|
|
511
|
-
function
|
|
512
|
-
i0.ɵɵelementStart(0, "div",
|
|
535
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
536
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "span", 135)(2, "strong");
|
|
513
537
|
i0.ɵɵtext(3, "Alias:");
|
|
514
538
|
i0.ɵɵelementEnd();
|
|
515
|
-
i0.ɵɵelementStart(4, "code",
|
|
539
|
+
i0.ɵɵelementStart(4, "code", 137);
|
|
516
540
|
i0.ɵɵtext(5);
|
|
517
541
|
i0.ɵɵelementEnd()()();
|
|
518
542
|
} if (rf & 2) {
|
|
519
|
-
const
|
|
543
|
+
const dep_r26 = i0.ɵɵnextContext().$implicit;
|
|
520
544
|
i0.ɵɵadvance(5);
|
|
521
|
-
i0.ɵɵtextInterpolate(
|
|
522
|
-
} }
|
|
523
|
-
function
|
|
524
|
-
const
|
|
525
|
-
i0.ɵɵelementStart(0, "div",
|
|
526
|
-
i0.ɵɵlistener("click", function
|
|
527
|
-
i0.ɵɵelementStart(1, "div",
|
|
528
|
-
i0.ɵɵelement(3, "i",
|
|
545
|
+
i0.ɵɵtextInterpolate(dep_r26.Alias);
|
|
546
|
+
} }
|
|
547
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
548
|
+
const _r25 = i0.ɵɵgetCurrentView();
|
|
549
|
+
i0.ɵɵelementStart(0, "div", 126);
|
|
550
|
+
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Template_div_click_0_listener() { const dep_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onDependentQueryClick(dep_r26)); });
|
|
551
|
+
i0.ɵɵelementStart(1, "div", 127)(2, "div", 128);
|
|
552
|
+
i0.ɵɵelement(3, "i", 129);
|
|
529
553
|
i0.ɵɵtext(4);
|
|
530
554
|
i0.ɵɵelementEnd()();
|
|
531
|
-
i0.ɵɵelementStart(5, "div",
|
|
532
|
-
i0.ɵɵconditionalCreate(6,
|
|
533
|
-
i0.ɵɵconditionalCreate(7,
|
|
555
|
+
i0.ɵɵelementStart(5, "div", 130);
|
|
556
|
+
i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_6_Template, 4, 1, "div", 131);
|
|
557
|
+
i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Conditional_7_Template, 6, 1, "div", 131);
|
|
534
558
|
i0.ɵɵelementEnd();
|
|
535
|
-
i0.ɵɵelementStart(8, "div",
|
|
536
|
-
i0.ɵɵelement(10, "i",
|
|
559
|
+
i0.ɵɵelementStart(8, "div", 132)(9, "span", 133);
|
|
560
|
+
i0.ɵɵelement(10, "i", 134);
|
|
537
561
|
i0.ɵɵtext(11, " Open ");
|
|
538
562
|
i0.ɵɵelementEnd()()();
|
|
539
563
|
} if (rf & 2) {
|
|
540
|
-
const
|
|
564
|
+
const dep_r26 = ctx.$implicit;
|
|
541
565
|
i0.ɵɵadvance(4);
|
|
542
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
566
|
+
i0.ɵɵtextInterpolate1(" ", dep_r26.Query, " ");
|
|
543
567
|
i0.ɵɵadvance(2);
|
|
544
|
-
i0.ɵɵconditional(
|
|
568
|
+
i0.ɵɵconditional(dep_r26.ReferencePath ? 6 : -1);
|
|
545
569
|
i0.ɵɵadvance();
|
|
546
|
-
i0.ɵɵconditional(
|
|
570
|
+
i0.ɵɵconditional(dep_r26.Alias ? 7 : -1);
|
|
547
571
|
} }
|
|
548
|
-
function
|
|
549
|
-
const
|
|
550
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
551
|
-
i0.ɵɵtwoWayListener("ExpandedChange", function
|
|
552
|
-
i0.ɵɵtemplate(1,
|
|
553
|
-
i0.ɵɵelementStart(2, "div",
|
|
572
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_47_Template(rf, ctx) { if (rf & 1) {
|
|
573
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
574
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 121);
|
|
575
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_47_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.dependentsPanelExpanded, $event) || (ctx_r1.dependentsPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
576
|
+
i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_47_ng_template_1_Template, 5, 1, "ng-template", 27);
|
|
577
|
+
i0.ɵɵelementStart(2, "div", 43)(3, "div", 122);
|
|
554
578
|
i0.ɵɵtext(4, " These queries reference this query via ");
|
|
555
579
|
i0.ɵɵelementStart(5, "code");
|
|
556
580
|
i0.ɵɵtext(6);
|
|
557
581
|
i0.ɵɵelementEnd();
|
|
558
582
|
i0.ɵɵtext(7, " composition syntax. ");
|
|
559
583
|
i0.ɵɵelementEnd();
|
|
560
|
-
i0.ɵɵelementStart(8, "div",
|
|
561
|
-
i0.ɵɵrepeaterCreate(9,
|
|
584
|
+
i0.ɵɵelementStart(8, "div", 123);
|
|
585
|
+
i0.ɵɵrepeaterCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_47_For_10_Template, 12, 3, "div", 124, _forTrack1);
|
|
562
586
|
i0.ɵɵelementEnd()()();
|
|
563
587
|
} if (rf & 2) {
|
|
564
588
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -568,8 +592,8 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template(rf,
|
|
|
568
592
|
i0.ɵɵadvance(3);
|
|
569
593
|
i0.ɵɵrepeater(ctx_r1.DependentQueries);
|
|
570
594
|
} }
|
|
571
|
-
function
|
|
572
|
-
i0.ɵɵelementStart(0, "span",
|
|
595
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
596
|
+
i0.ɵɵelementStart(0, "span", 108);
|
|
573
597
|
i0.ɵɵtext(1);
|
|
574
598
|
i0.ɵɵelementEnd();
|
|
575
599
|
} if (rf & 2) {
|
|
@@ -577,109 +601,109 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_ng_template_1
|
|
|
577
601
|
i0.ɵɵadvance();
|
|
578
602
|
i0.ɵɵtextInterpolate(ctx_r1.queryEntities.length);
|
|
579
603
|
} }
|
|
580
|
-
function
|
|
581
|
-
i0.ɵɵelementStart(0, "span",
|
|
582
|
-
i0.ɵɵelement(1, "i",
|
|
604
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
605
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
606
|
+
i0.ɵɵelement(1, "i", 139);
|
|
583
607
|
i0.ɵɵtext(2, " Entities ");
|
|
584
|
-
i0.ɵɵconditionalCreate(3,
|
|
608
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Conditional_3_Template, 2, 1, "span", 108);
|
|
585
609
|
i0.ɵɵelementEnd();
|
|
586
610
|
} if (rf & 2) {
|
|
587
611
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
588
612
|
i0.ɵɵadvance(3);
|
|
589
613
|
i0.ɵɵconditional(ctx_r1.queryEntities.length > 0 ? 3 : -1);
|
|
590
614
|
} }
|
|
591
|
-
function
|
|
592
|
-
i0.ɵɵelementStart(0, "div",
|
|
593
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
615
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
616
|
+
i0.ɵɵelementStart(0, "div", 106);
|
|
617
|
+
i0.ɵɵelement(1, "mj-loading", 140);
|
|
594
618
|
i0.ɵɵelementEnd();
|
|
595
619
|
} }
|
|
596
|
-
function
|
|
597
|
-
const
|
|
598
|
-
i0.ɵɵelementStart(0, "mj-empty-state",
|
|
599
|
-
i0.ɵɵlistener("Action", function
|
|
620
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
621
|
+
const _r28 = i0.ɵɵgetCurrentView();
|
|
622
|
+
i0.ɵɵelementStart(0, "mj-empty-state", 142);
|
|
623
|
+
i0.ɵɵlistener("Action", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_0_Template_mj_empty_state_Action_0_listener() { i0.ɵɵrestoreView(_r28); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.addEntity()); });
|
|
600
624
|
i0.ɵɵelementEnd();
|
|
601
625
|
} if (rf & 2) {
|
|
602
626
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
603
627
|
i0.ɵɵproperty("ActionText", ctx_r1.EditMode ? "Add First Entity" : "");
|
|
604
628
|
} }
|
|
605
|
-
function
|
|
606
|
-
const
|
|
607
|
-
i0.ɵɵelementStart(0, "div",
|
|
608
|
-
i0.ɵɵlistener("click", function
|
|
609
|
-
i0.ɵɵelement(2, "i",
|
|
629
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
630
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
631
|
+
i0.ɵɵelementStart(0, "div", 112)(1, "button", 114);
|
|
632
|
+
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Conditional_0_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.addEntity()); });
|
|
633
|
+
i0.ɵɵelement(2, "i", 66);
|
|
610
634
|
i0.ɵɵtext(3, " Add Entity ");
|
|
611
635
|
i0.ɵɵelementEnd()();
|
|
612
636
|
} }
|
|
613
|
-
function
|
|
614
|
-
const
|
|
615
|
-
i0.ɵɵelementStart(0, "div",
|
|
616
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
637
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
638
|
+
const _r30 = i0.ɵɵgetCurrentView();
|
|
639
|
+
i0.ɵɵelementStart(0, "div", 145)(1, "mj-dropdown", 147);
|
|
640
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_5_Template_mj_dropdown_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r30); const entity_r31 = i0.ɵɵnextContext().$implicit; i0.ɵɵtwoWayBindingSet(entity_r31.EntityID, $event) || (entity_r31.EntityID = $event); return i0.ɵɵresetView($event); });
|
|
617
641
|
i0.ɵɵelementEnd()();
|
|
618
642
|
} if (rf & 2) {
|
|
619
|
-
const
|
|
620
|
-
const
|
|
621
|
-
const $
|
|
643
|
+
const ctx_r31 = i0.ɵɵnextContext();
|
|
644
|
+
const entity_r31 = ctx_r31.$implicit;
|
|
645
|
+
const $index_r33 = ctx_r31.$index;
|
|
622
646
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
623
647
|
i0.ɵɵadvance();
|
|
624
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
625
|
-
i0.ɵɵproperty("name", "entity_" + (
|
|
648
|
+
i0.ɵɵtwoWayProperty("ngModel", entity_r31.EntityID);
|
|
649
|
+
i0.ɵɵproperty("name", "entity_" + (entity_r31.ID || $index_r33))("Data", ctx_r1.getEntityOptions())("ValuePrimitive", true);
|
|
626
650
|
} }
|
|
627
|
-
function
|
|
628
|
-
i0.ɵɵelementStart(0, "span",
|
|
651
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
652
|
+
i0.ɵɵelementStart(0, "span", 149)(1, "strong");
|
|
629
653
|
i0.ɵɵtext(2, "Detected by:");
|
|
630
654
|
i0.ɵɵelementEnd();
|
|
631
655
|
i0.ɵɵtext(3);
|
|
632
656
|
i0.ɵɵelementEnd();
|
|
633
657
|
} if (rf & 2) {
|
|
634
|
-
const
|
|
658
|
+
const entity_r31 = i0.ɵɵnextContext(2).$implicit;
|
|
635
659
|
i0.ɵɵadvance(3);
|
|
636
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
660
|
+
i0.ɵɵtextInterpolate1(" ", entity_r31.DetectionMethod, " ");
|
|
637
661
|
} }
|
|
638
|
-
function
|
|
639
|
-
i0.ɵɵelementStart(0, "div",
|
|
640
|
-
i0.ɵɵelement(3, "i",
|
|
662
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
663
|
+
i0.ɵɵelementStart(0, "div", 130)(1, "div", 131)(2, "span", 135);
|
|
664
|
+
i0.ɵɵelement(3, "i", 148);
|
|
641
665
|
i0.ɵɵtext(4, " Data Source ");
|
|
642
666
|
i0.ɵɵelementEnd();
|
|
643
|
-
i0.ɵɵconditionalCreate(5,
|
|
667
|
+
i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Conditional_5_Template, 4, 1, "span", 149);
|
|
644
668
|
i0.ɵɵelementEnd()();
|
|
645
669
|
} if (rf & 2) {
|
|
646
|
-
const
|
|
670
|
+
const entity_r31 = i0.ɵɵnextContext().$implicit;
|
|
647
671
|
i0.ɵɵadvance(5);
|
|
648
|
-
i0.ɵɵconditional(
|
|
672
|
+
i0.ɵɵconditional(entity_r31.DetectionMethod ? 5 : -1);
|
|
649
673
|
} }
|
|
650
|
-
function
|
|
651
|
-
const
|
|
652
|
-
i0.ɵɵelementStart(0, "div",
|
|
653
|
-
i0.ɵɵlistener("click", function
|
|
654
|
-
i0.ɵɵelement(2, "i",
|
|
674
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
675
|
+
const _r34 = i0.ɵɵgetCurrentView();
|
|
676
|
+
i0.ɵɵelementStart(0, "div", 146)(1, "button", 150);
|
|
677
|
+
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_7_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r34); const entity_r31 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.deleteEntity(entity_r31)); });
|
|
678
|
+
i0.ɵɵelement(2, "i", 151);
|
|
655
679
|
i0.ɵɵelementEnd()();
|
|
656
680
|
} }
|
|
657
|
-
function
|
|
658
|
-
i0.ɵɵelementStart(0, "div",
|
|
659
|
-
i0.ɵɵelement(3, "i",
|
|
681
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
682
|
+
i0.ɵɵelementStart(0, "div", 143)(1, "div", 127)(2, "div", 128);
|
|
683
|
+
i0.ɵɵelement(3, "i", 144);
|
|
660
684
|
i0.ɵɵtext(4);
|
|
661
685
|
i0.ɵɵelementEnd();
|
|
662
|
-
i0.ɵɵconditionalCreate(5,
|
|
686
|
+
i0.ɵɵconditionalCreate(5, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_5_Template, 2, 4, "div", 145);
|
|
663
687
|
i0.ɵɵelementEnd();
|
|
664
|
-
i0.ɵɵconditionalCreate(6,
|
|
665
|
-
i0.ɵɵconditionalCreate(7,
|
|
688
|
+
i0.ɵɵconditionalCreate(6, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_6_Template, 6, 1, "div", 130);
|
|
689
|
+
i0.ɵɵconditionalCreate(7, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Conditional_7_Template, 3, 0, "div", 146);
|
|
666
690
|
i0.ɵɵelementEnd();
|
|
667
691
|
} if (rf & 2) {
|
|
668
|
-
const
|
|
692
|
+
const entity_r31 = ctx.$implicit;
|
|
669
693
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
670
694
|
i0.ɵɵadvance(4);
|
|
671
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
695
|
+
i0.ɵɵtextInterpolate1(" ", entity_r31.Entity || "Select Entity...", " ");
|
|
672
696
|
i0.ɵɵadvance();
|
|
673
697
|
i0.ɵɵconditional(ctx_r1.EditMode ? 5 : -1);
|
|
674
698
|
i0.ɵɵadvance();
|
|
675
|
-
i0.ɵɵconditional(!ctx_r1.EditMode &&
|
|
699
|
+
i0.ɵɵconditional(!ctx_r1.EditMode && entity_r31.Entity ? 6 : -1);
|
|
676
700
|
i0.ɵɵadvance();
|
|
677
701
|
i0.ɵɵconditional(ctx_r1.EditMode ? 7 : -1);
|
|
678
702
|
} }
|
|
679
|
-
function
|
|
680
|
-
i0.ɵɵconditionalCreate(0,
|
|
681
|
-
i0.ɵɵelementStart(1, "div",
|
|
682
|
-
i0.ɵɵrepeaterCreate(2,
|
|
703
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
704
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Conditional_0_Template, 4, 0, "div", 112);
|
|
705
|
+
i0.ɵɵelementStart(1, "div", 123);
|
|
706
|
+
i0.ɵɵrepeaterCreate(2, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_For_3_Template, 8, 4, "div", 143, _forTrack2);
|
|
683
707
|
i0.ɵɵelementEnd();
|
|
684
708
|
} if (rf & 2) {
|
|
685
709
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
@@ -687,19 +711,19 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Conditional_4
|
|
|
687
711
|
i0.ɵɵadvance(2);
|
|
688
712
|
i0.ɵɵrepeater(ctx_r1.queryEntities);
|
|
689
713
|
} }
|
|
690
|
-
function
|
|
691
|
-
i0.ɵɵconditionalCreate(0,
|
|
714
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
715
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_0_Template, 1, 1, "mj-empty-state", 141)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Conditional_1_Template, 4, 1);
|
|
692
716
|
} if (rf & 2) {
|
|
693
717
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
694
718
|
i0.ɵɵconditional(ctx_r1.queryEntities.length === 0 ? 0 : 1);
|
|
695
719
|
} }
|
|
696
|
-
function
|
|
697
|
-
const
|
|
698
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
699
|
-
i0.ɵɵtwoWayListener("ExpandedChange", function
|
|
700
|
-
i0.ɵɵtemplate(1,
|
|
701
|
-
i0.ɵɵelementStart(2, "div",
|
|
702
|
-
i0.ɵɵconditionalCreate(3,
|
|
720
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Template(rf, ctx) { if (rf & 1) {
|
|
721
|
+
const _r27 = i0.ɵɵgetCurrentView();
|
|
722
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 138);
|
|
723
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_48_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.entitiesPanelExpanded, $event) || (ctx_r1.entitiesPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
724
|
+
i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_48_ng_template_1_Template, 4, 1, "ng-template", 27);
|
|
725
|
+
i0.ɵɵelementStart(2, "div", 43);
|
|
726
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Conditional_4_Template, 2, 1);
|
|
703
727
|
i0.ɵɵelementEnd()();
|
|
704
728
|
} if (rf & 2) {
|
|
705
729
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -707,92 +731,92 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template(rf,
|
|
|
707
731
|
i0.ɵɵadvance(3);
|
|
708
732
|
i0.ɵɵconditional(ctx_r1.isLoadingEntities ? 3 : 4);
|
|
709
733
|
} }
|
|
710
|
-
function
|
|
711
|
-
i0.ɵɵelementStart(0, "span",
|
|
712
|
-
i0.ɵɵelement(1, "i",
|
|
734
|
+
function MJQueryFormComponentExtended_Conditional_0_ng_template_50_Template(rf, ctx) { if (rf & 1) {
|
|
735
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
736
|
+
i0.ɵɵelement(1, "i", 152);
|
|
713
737
|
i0.ɵɵtext(2, " Details ");
|
|
714
738
|
i0.ɵɵelementEnd();
|
|
715
739
|
} }
|
|
716
|
-
function
|
|
717
|
-
const
|
|
718
|
-
i0.ɵɵelementStart(0, "mj-switch",
|
|
719
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
740
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
741
|
+
const _r35 = i0.ɵɵgetCurrentView();
|
|
742
|
+
i0.ɵɵelementStart(0, "mj-switch", 153);
|
|
743
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_57_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.Reusable, $event) || (ctx_r1.record.Reusable = $event); return i0.ɵɵresetView($event); });
|
|
720
744
|
i0.ɵɵelementEnd();
|
|
721
|
-
i0.ɵɵelementStart(1, "div",
|
|
745
|
+
i0.ɵɵelementStart(1, "div", 154);
|
|
722
746
|
i0.ɵɵtext(2, "Allow other queries to reference this query using composition syntax");
|
|
723
747
|
i0.ɵɵelementEnd();
|
|
724
748
|
} if (rf & 2) {
|
|
725
749
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
726
750
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.Reusable);
|
|
727
751
|
} }
|
|
728
|
-
function
|
|
729
|
-
i0.ɵɵelementStart(0, "span",
|
|
730
|
-
i0.ɵɵelement(1, "i",
|
|
752
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
753
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
754
|
+
i0.ɵɵelement(1, "i", 157);
|
|
731
755
|
i0.ɵɵtext(2, " Reusable");
|
|
732
756
|
i0.ɵɵelementEnd();
|
|
733
757
|
} }
|
|
734
|
-
function
|
|
735
|
-
i0.ɵɵelementStart(0, "span",
|
|
736
|
-
i0.ɵɵelement(1, "i",
|
|
758
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
759
|
+
i0.ɵɵelementStart(0, "span", 156);
|
|
760
|
+
i0.ɵɵelement(1, "i", 158);
|
|
737
761
|
i0.ɵɵtext(2, " Not Reusable");
|
|
738
762
|
i0.ɵɵelementEnd();
|
|
739
763
|
} }
|
|
740
|
-
function
|
|
741
|
-
i0.ɵɵelementStart(0, "div",
|
|
742
|
-
i0.ɵɵconditionalCreate(1,
|
|
764
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
765
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
766
|
+
i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Template, 3, 0, "span", 156);
|
|
743
767
|
i0.ɵɵelementEnd();
|
|
744
768
|
} if (rf & 2) {
|
|
745
769
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
746
770
|
i0.ɵɵadvance();
|
|
747
771
|
i0.ɵɵconditional(ctx_r1.record.Reusable ? 1 : 2);
|
|
748
772
|
} }
|
|
749
|
-
function
|
|
750
|
-
const
|
|
751
|
-
i0.ɵɵelementStart(0, "mj-switch",
|
|
752
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
773
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
774
|
+
const _r36 = i0.ɵɵgetCurrentView();
|
|
775
|
+
i0.ɵɵelementStart(0, "mj-switch", 159);
|
|
776
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheEnabled, $event) || (ctx_r1.record.CacheEnabled = $event); return i0.ɵɵresetView($event); });
|
|
753
777
|
i0.ɵɵelementEnd();
|
|
754
|
-
i0.ɵɵelementStart(1, "div",
|
|
778
|
+
i0.ɵɵelementStart(1, "div", 154);
|
|
755
779
|
i0.ɵɵtext(2, "Cache query results in memory to reduce database load on repeated runs");
|
|
756
780
|
i0.ɵɵelementEnd();
|
|
757
781
|
} if (rf & 2) {
|
|
758
782
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
759
783
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CacheEnabled);
|
|
760
784
|
} }
|
|
761
|
-
function
|
|
762
|
-
i0.ɵɵelementStart(0, "span",
|
|
763
|
-
i0.ɵɵelement(1, "i",
|
|
785
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
786
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
787
|
+
i0.ɵɵelement(1, "i", 157);
|
|
764
788
|
i0.ɵɵtext(2, " Caching On");
|
|
765
789
|
i0.ɵɵelementEnd();
|
|
766
790
|
} }
|
|
767
|
-
function
|
|
768
|
-
i0.ɵɵelementStart(0, "span",
|
|
769
|
-
i0.ɵɵelement(1, "i",
|
|
791
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
792
|
+
i0.ɵɵelementStart(0, "span", 156);
|
|
793
|
+
i0.ɵɵelement(1, "i", 158);
|
|
770
794
|
i0.ɵɵtext(2, " Caching Off");
|
|
771
795
|
i0.ɵɵelementEnd();
|
|
772
796
|
} }
|
|
773
|
-
function
|
|
774
|
-
i0.ɵɵelementStart(0, "div",
|
|
775
|
-
i0.ɵɵconditionalCreate(1,
|
|
797
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_64_Template(rf, ctx) { if (rf & 1) {
|
|
798
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
799
|
+
i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_64_Conditional_2_Template, 3, 0, "span", 156);
|
|
776
800
|
i0.ɵɵelementEnd();
|
|
777
801
|
} if (rf & 2) {
|
|
778
802
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
779
803
|
i0.ɵɵadvance();
|
|
780
804
|
i0.ɵɵconditional(ctx_r1.record.CacheEnabled ? 1 : 2);
|
|
781
805
|
} }
|
|
782
|
-
function
|
|
783
|
-
const
|
|
784
|
-
i0.ɵɵelementStart(0, "input",
|
|
785
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
806
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
807
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
|
808
|
+
i0.ɵɵelementStart(0, "input", 161);
|
|
809
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_4_Template_input_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r37); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.record.CacheTTLMinutes, $event) || (ctx_r1.record.CacheTTLMinutes = $event); return i0.ɵɵresetView($event); });
|
|
786
810
|
i0.ɵɵelementEnd();
|
|
787
|
-
i0.ɵɵelementStart(1, "div",
|
|
811
|
+
i0.ɵɵelementStart(1, "div", 154);
|
|
788
812
|
i0.ɵɵtext(2, "How long cached results remain valid. Leave blank for default TTL.");
|
|
789
813
|
i0.ɵɵelementEnd();
|
|
790
814
|
} if (rf & 2) {
|
|
791
815
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
792
816
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.CacheTTLMinutes);
|
|
793
817
|
} }
|
|
794
|
-
function
|
|
795
|
-
i0.ɵɵelementStart(0, "div",
|
|
818
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
819
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
796
820
|
i0.ɵɵtext(1);
|
|
797
821
|
i0.ɵɵelementEnd();
|
|
798
822
|
} if (rf & 2) {
|
|
@@ -800,87 +824,87 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_63_Conditional_5
|
|
|
800
824
|
i0.ɵɵadvance();
|
|
801
825
|
i0.ɵɵtextInterpolate(ctx_r1.record.CacheTTLMinutes != null ? ctx_r1.record.CacheTTLMinutes + " min" : "Default");
|
|
802
826
|
} }
|
|
803
|
-
function
|
|
804
|
-
i0.ɵɵelementStart(0, "div",
|
|
805
|
-
i0.ɵɵelement(2, "i",
|
|
827
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
828
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "label", 46);
|
|
829
|
+
i0.ɵɵelement(2, "i", 160);
|
|
806
830
|
i0.ɵɵtext(3, " Cache TTL (Minutes) ");
|
|
807
831
|
i0.ɵɵelementEnd();
|
|
808
|
-
i0.ɵɵconditionalCreate(4,
|
|
832
|
+
i0.ɵɵconditionalCreate(4, MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_4_Template, 3, 1)(5, MJQueryFormComponentExtended_Conditional_0_Conditional_65_Conditional_5_Template, 2, 1, "div", 48);
|
|
809
833
|
i0.ɵɵelementEnd();
|
|
810
834
|
} if (rf & 2) {
|
|
811
835
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
812
836
|
i0.ɵɵadvance(4);
|
|
813
837
|
i0.ɵɵconditional(ctx_r1.EditMode ? 4 : 5);
|
|
814
838
|
} }
|
|
815
|
-
function
|
|
816
|
-
const
|
|
817
|
-
i0.ɵɵelementStart(0, "mj-switch",
|
|
818
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
839
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_70_Template(rf, ctx) { if (rf & 1) {
|
|
840
|
+
const _r38 = i0.ɵɵgetCurrentView();
|
|
841
|
+
i0.ɵɵelementStart(0, "mj-switch", 162);
|
|
842
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_70_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.AuditQueryRuns, $event) || (ctx_r1.record.AuditQueryRuns = $event); return i0.ɵɵresetView($event); });
|
|
819
843
|
i0.ɵɵelementEnd();
|
|
820
|
-
i0.ɵɵelementStart(1, "div",
|
|
844
|
+
i0.ɵɵelementStart(1, "div", 154);
|
|
821
845
|
i0.ɵɵtext(2, "Log all executions of this query to the Audit Log for tracking and compliance");
|
|
822
846
|
i0.ɵɵelementEnd();
|
|
823
847
|
} if (rf & 2) {
|
|
824
848
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
825
849
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.AuditQueryRuns);
|
|
826
850
|
} }
|
|
827
|
-
function
|
|
828
|
-
i0.ɵɵelementStart(0, "span",
|
|
829
|
-
i0.ɵɵelement(1, "i",
|
|
851
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
852
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
853
|
+
i0.ɵɵelement(1, "i", 157);
|
|
830
854
|
i0.ɵɵtext(2, " Auditing On");
|
|
831
855
|
i0.ɵɵelementEnd();
|
|
832
856
|
} }
|
|
833
|
-
function
|
|
834
|
-
i0.ɵɵelementStart(0, "span",
|
|
835
|
-
i0.ɵɵelement(1, "i",
|
|
857
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
858
|
+
i0.ɵɵelementStart(0, "span", 156);
|
|
859
|
+
i0.ɵɵelement(1, "i", 158);
|
|
836
860
|
i0.ɵɵtext(2, " Auditing Off");
|
|
837
861
|
i0.ɵɵelementEnd();
|
|
838
862
|
} }
|
|
839
|
-
function
|
|
840
|
-
i0.ɵɵelementStart(0, "div",
|
|
841
|
-
i0.ɵɵconditionalCreate(1,
|
|
863
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_71_Template(rf, ctx) { if (rf & 1) {
|
|
864
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
865
|
+
i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_71_Conditional_2_Template, 3, 0, "span", 156);
|
|
842
866
|
i0.ɵɵelementEnd();
|
|
843
867
|
} if (rf & 2) {
|
|
844
868
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
845
869
|
i0.ɵɵadvance();
|
|
846
870
|
i0.ɵɵconditional(ctx_r1.record.AuditQueryRuns ? 1 : 2);
|
|
847
871
|
} }
|
|
848
|
-
function
|
|
849
|
-
const
|
|
850
|
-
i0.ɵɵelementStart(0, "mj-switch",
|
|
851
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
872
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_76_Template(rf, ctx) { if (rf & 1) {
|
|
873
|
+
const _r39 = i0.ɵɵgetCurrentView();
|
|
874
|
+
i0.ɵɵelementStart(0, "mj-switch", 163);
|
|
875
|
+
i0.ɵɵtwoWayListener("ngModelChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_76_Template_mj_switch_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.record.UsesTemplate, $event) || (ctx_r1.record.UsesTemplate = $event); return i0.ɵɵresetView($event); });
|
|
852
876
|
i0.ɵɵelementEnd();
|
|
853
877
|
} if (rf & 2) {
|
|
854
878
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
855
879
|
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.record.UsesTemplate);
|
|
856
880
|
} }
|
|
857
|
-
function
|
|
858
|
-
i0.ɵɵelementStart(0, "span",
|
|
859
|
-
i0.ɵɵelement(1, "i",
|
|
881
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
882
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
883
|
+
i0.ɵɵelement(1, "i", 157);
|
|
860
884
|
i0.ɵɵtext(2, " Uses Templates");
|
|
861
885
|
i0.ɵɵelementEnd();
|
|
862
886
|
} }
|
|
863
|
-
function
|
|
864
|
-
i0.ɵɵelementStart(0, "span",
|
|
865
|
-
i0.ɵɵelement(1, "i",
|
|
887
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
888
|
+
i0.ɵɵelementStart(0, "span", 156);
|
|
889
|
+
i0.ɵɵelement(1, "i", 158);
|
|
866
890
|
i0.ɵɵtext(2, " No Templates");
|
|
867
891
|
i0.ɵɵelementEnd();
|
|
868
892
|
} }
|
|
869
|
-
function
|
|
870
|
-
i0.ɵɵelementStart(0, "div",
|
|
871
|
-
i0.ɵɵconditionalCreate(1,
|
|
893
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_77_Template(rf, ctx) { if (rf & 1) {
|
|
894
|
+
i0.ɵɵelementStart(0, "div", 48);
|
|
895
|
+
i0.ɵɵconditionalCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_1_Template, 3, 0, "span", 155)(2, MJQueryFormComponentExtended_Conditional_0_Conditional_77_Conditional_2_Template, 3, 0, "span", 156);
|
|
872
896
|
i0.ɵɵelementEnd();
|
|
873
897
|
} if (rf & 2) {
|
|
874
898
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
875
899
|
i0.ɵɵadvance();
|
|
876
900
|
i0.ɵɵconditional(ctx_r1.record.UsesTemplate ? 1 : 2);
|
|
877
901
|
} }
|
|
878
|
-
function
|
|
879
|
-
i0.ɵɵelementStart(0, "div",
|
|
880
|
-
i0.ɵɵelement(2, "i",
|
|
902
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_90_Template(rf, ctx) { if (rf & 1) {
|
|
903
|
+
i0.ɵɵelementStart(0, "div", 45)(1, "label", 46);
|
|
904
|
+
i0.ɵɵelement(2, "i", 164);
|
|
881
905
|
i0.ɵɵtext(3, " Quality Rank ");
|
|
882
906
|
i0.ɵɵelementEnd();
|
|
883
|
-
i0.ɵɵelementStart(4, "div",
|
|
907
|
+
i0.ɵɵelementStart(4, "div", 48);
|
|
884
908
|
i0.ɵɵtext(5);
|
|
885
909
|
i0.ɵɵelementEnd()();
|
|
886
910
|
} if (rf & 2) {
|
|
@@ -888,72 +912,72 @@ function MJQueryFormComponentExtended_Conditional_0_Conditional_88_Template(rf,
|
|
|
888
912
|
i0.ɵɵadvance(5);
|
|
889
913
|
i0.ɵɵtextInterpolate1("", ctx_r1.record.QualityRank, "/10");
|
|
890
914
|
} }
|
|
891
|
-
function
|
|
892
|
-
i0.ɵɵelementStart(0, "span",
|
|
893
|
-
i0.ɵɵelement(1, "i",
|
|
915
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
916
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
917
|
+
i0.ɵɵelement(1, "i", 166);
|
|
894
918
|
i0.ɵɵtext(2, " Permissions ");
|
|
895
919
|
i0.ɵɵelementEnd();
|
|
896
920
|
} }
|
|
897
|
-
function
|
|
898
|
-
i0.ɵɵelementStart(0, "div",
|
|
899
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
921
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
922
|
+
i0.ɵɵelementStart(0, "div", 106);
|
|
923
|
+
i0.ɵɵelement(1, "mj-loading", 167);
|
|
900
924
|
i0.ɵɵelementEnd();
|
|
901
925
|
} }
|
|
902
|
-
function
|
|
903
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
926
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
927
|
+
i0.ɵɵelement(0, "mj-empty-state", 168);
|
|
904
928
|
} }
|
|
905
|
-
function
|
|
906
|
-
i0.ɵɵelement(0, "mj-explorer-entity-data-grid",
|
|
929
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
930
|
+
i0.ɵɵelement(0, "mj-explorer-entity-data-grid", 169);
|
|
907
931
|
} if (rf & 2) {
|
|
908
932
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
909
933
|
i0.ɵɵproperty("Params", ctx_r1.BuildRelationshipViewParamsByEntityName("MJ: Query Permissions", "QueryID"))("NewRecordValues", ctx_r1.NewRecordValues("MJ: Query Permissions"))("AllowLoad", true)("ShowToolbar", false);
|
|
910
934
|
} }
|
|
911
|
-
function
|
|
912
|
-
i0.ɵɵelementStart(0, "div",
|
|
913
|
-
i0.ɵɵelement(1, "i",
|
|
914
|
-
i0.ɵɵelementStart(2, "div",
|
|
935
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
936
|
+
i0.ɵɵelementStart(0, "div", 171);
|
|
937
|
+
i0.ɵɵelement(1, "i", 172);
|
|
938
|
+
i0.ɵɵelementStart(2, "div", 173)(3, "div", 174);
|
|
915
939
|
i0.ɵɵtext(4);
|
|
916
940
|
i0.ɵɵelementEnd();
|
|
917
|
-
i0.ɵɵelementStart(5, "div",
|
|
941
|
+
i0.ɵɵelementStart(5, "div", 175);
|
|
918
942
|
i0.ɵɵtext(6, "Role Permission");
|
|
919
943
|
i0.ɵɵelementEnd()();
|
|
920
|
-
i0.ɵɵelementStart(7, "span",
|
|
921
|
-
i0.ɵɵelement(8, "i",
|
|
944
|
+
i0.ɵɵelementStart(7, "span", 176);
|
|
945
|
+
i0.ɵɵelement(8, "i", 63);
|
|
922
946
|
i0.ɵɵtext(9, " Can Execute ");
|
|
923
947
|
i0.ɵɵelementEnd()();
|
|
924
948
|
} if (rf & 2) {
|
|
925
|
-
const
|
|
949
|
+
const permission_r41 = ctx.$implicit;
|
|
926
950
|
i0.ɵɵadvance(4);
|
|
927
|
-
i0.ɵɵtextInterpolate(
|
|
951
|
+
i0.ɵɵtextInterpolate(permission_r41.Role);
|
|
928
952
|
} }
|
|
929
|
-
function
|
|
930
|
-
i0.ɵɵelementStart(0, "div",
|
|
931
|
-
i0.ɵɵrepeaterCreate(1,
|
|
953
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
954
|
+
i0.ɵɵelementStart(0, "div", 170);
|
|
955
|
+
i0.ɵɵrepeaterCreate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_For_2_Template, 10, 1, "div", 171, _forTrack1);
|
|
932
956
|
i0.ɵɵelementEnd();
|
|
933
957
|
} if (rf & 2) {
|
|
934
958
|
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
935
959
|
i0.ɵɵadvance();
|
|
936
960
|
i0.ɵɵrepeater(ctx_r1.queryPermissions);
|
|
937
961
|
} }
|
|
938
|
-
function
|
|
939
|
-
i0.ɵɵconditionalCreate(0,
|
|
962
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
963
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_0_Template, 1, 4, "mj-explorer-entity-data-grid", 169)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Conditional_1_Template, 3, 0, "div", 170);
|
|
940
964
|
} if (rf & 2) {
|
|
941
965
|
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
942
966
|
i0.ɵɵconditional(ctx_r1.EditMode ? 0 : 1);
|
|
943
967
|
} }
|
|
944
|
-
function
|
|
945
|
-
i0.ɵɵconditionalCreate(0,
|
|
968
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
969
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_0_Template, 1, 0, "mj-empty-state", 168)(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Conditional_1_Template, 2, 1);
|
|
946
970
|
} if (rf & 2) {
|
|
947
971
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
948
972
|
i0.ɵɵconditional(ctx_r1.queryPermissions.length === 0 && !ctx_r1.EditMode ? 0 : 1);
|
|
949
973
|
} }
|
|
950
|
-
function
|
|
951
|
-
const
|
|
952
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
953
|
-
i0.ɵɵtwoWayListener("ExpandedChange", function
|
|
954
|
-
i0.ɵɵtemplate(1,
|
|
955
|
-
i0.ɵɵelementStart(2, "div",
|
|
956
|
-
i0.ɵɵconditionalCreate(3,
|
|
974
|
+
function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Template(rf, ctx) { if (rf & 1) {
|
|
975
|
+
const _r40 = i0.ɵɵgetCurrentView();
|
|
976
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 165);
|
|
977
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Conditional_91_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { i0.ɵɵrestoreView(_r40); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.permissionsPanelExpanded, $event) || (ctx_r1.permissionsPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
978
|
+
i0.ɵɵtemplate(1, MJQueryFormComponentExtended_Conditional_0_Conditional_91_ng_template_1_Template, 3, 0, "ng-template", 27);
|
|
979
|
+
i0.ɵɵelementStart(2, "div", 43);
|
|
980
|
+
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_3_Template, 2, 0, "div", 106)(4, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Conditional_4_Template, 2, 1);
|
|
957
981
|
i0.ɵɵelementEnd()();
|
|
958
982
|
} if (rf & 2) {
|
|
959
983
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -969,102 +993,106 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
969
993
|
i0.ɵɵconditionalCreate(3, MJQueryFormComponentExtended_Conditional_0_Conditional_3_Template, 4, 0, "div", 4);
|
|
970
994
|
i0.ɵɵelementStart(4, "div", 5)(5, "div", 6)(6, "div", 7)(7, "div", 8);
|
|
971
995
|
i0.ɵɵelement(8, "i", 9);
|
|
972
|
-
i0.ɵɵconditionalCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template, 1, 1, "input", 10)(10, MJQueryFormComponentExtended_Conditional_0_Conditional_10_Template,
|
|
996
|
+
i0.ɵɵconditionalCreate(9, MJQueryFormComponentExtended_Conditional_0_Conditional_9_Template, 1, 1, "input", 10)(10, MJQueryFormComponentExtended_Conditional_0_Conditional_10_Template, 4, 4);
|
|
973
997
|
i0.ɵɵelementEnd();
|
|
974
|
-
i0.ɵɵelementStart(11, "div",
|
|
975
|
-
i0.ɵɵconditionalCreate(12, MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template, 3, 1, "button",
|
|
998
|
+
i0.ɵɵelementStart(11, "div", 11);
|
|
999
|
+
i0.ɵɵconditionalCreate(12, MJQueryFormComponentExtended_Conditional_0_Conditional_12_Template, 3, 1, "button", 12);
|
|
976
1000
|
i0.ɵɵelementEnd()();
|
|
977
|
-
i0.ɵɵelementStart(13, "div",
|
|
1001
|
+
i0.ɵɵelementStart(13, "div", 13)(14, "div", 14)(15, "label", 15);
|
|
978
1002
|
i0.ɵɵtext(16, "Category");
|
|
979
1003
|
i0.ɵɵelementEnd();
|
|
980
|
-
i0.ɵɵconditionalCreate(17, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template, 5, 8, "div",
|
|
1004
|
+
i0.ɵɵconditionalCreate(17, MJQueryFormComponentExtended_Conditional_0_Conditional_17_Template, 5, 8, "div", 16)(18, MJQueryFormComponentExtended_Conditional_0_Conditional_18_Template, 2, 1, "span", 17);
|
|
981
1005
|
i0.ɵɵelementEnd();
|
|
982
|
-
i0.ɵɵelementStart(19, "div",
|
|
1006
|
+
i0.ɵɵelementStart(19, "div", 18)(20, "label", 15);
|
|
983
1007
|
i0.ɵɵtext(21, "Status");
|
|
984
1008
|
i0.ɵɵelementEnd();
|
|
985
1009
|
i0.ɵɵconditionalCreate(22, MJQueryFormComponentExtended_Conditional_0_Conditional_22_Template, 1, 3, "mj-dropdown", 19)(23, MJQueryFormComponentExtended_Conditional_0_Conditional_23_Template, 3, 5, "span", 20);
|
|
986
1010
|
i0.ɵɵelementEnd();
|
|
987
|
-
i0.ɵɵconditionalCreate(24, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template, 7, 5, "div",
|
|
1011
|
+
i0.ɵɵconditionalCreate(24, MJQueryFormComponentExtended_Conditional_0_Conditional_24_Template, 7, 5, "div", 14);
|
|
988
1012
|
i0.ɵɵelementEnd();
|
|
989
1013
|
i0.ɵɵconditionalCreate(25, MJQueryFormComponentExtended_Conditional_0_Conditional_25_Template, 3, 1, "div", 21);
|
|
1014
|
+
i0.ɵɵelementEnd();
|
|
1015
|
+
i0.ɵɵconditionalCreate(26, MJQueryFormComponentExtended_Conditional_0_Conditional_26_Template, 4, 2, "button", 22);
|
|
1016
|
+
i0.ɵɵelementEnd();
|
|
1017
|
+
i0.ɵɵconditionalCreate(27, MJQueryFormComponentExtended_Conditional_0_Conditional_27_Template, 6, 2, "mj-alert", 23);
|
|
1018
|
+
i0.ɵɵelementStart(28, "div", 24)(29, "mj-accordion-sections", 25);
|
|
1019
|
+
i0.ɵɵlistener("ActiveKeyChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_sections_ActiveKeyChange_29_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.Phone.Pick($event)); });
|
|
1020
|
+
i0.ɵɵelementStart(30, "mj-accordion-panel", 26);
|
|
1021
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_30_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.sqlPanelExpanded, $event) || (ctx_r1.sqlPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
1022
|
+
i0.ɵɵtemplate(31, MJQueryFormComponentExtended_Conditional_0_ng_template_31_Template, 5, 1, "ng-template", 27);
|
|
1023
|
+
i0.ɵɵelementStart(32, "div", 28)(33, "button", 29);
|
|
1024
|
+
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFiltersHelp()); });
|
|
1025
|
+
i0.ɵɵelement(34, "i", 30);
|
|
1026
|
+
i0.ɵɵelementStart(35, "span");
|
|
1027
|
+
i0.ɵɵtext(36, "Filters Help");
|
|
1028
|
+
i0.ɵɵelementEnd();
|
|
1029
|
+
i0.ɵɵelement(37, "i", 31);
|
|
990
1030
|
i0.ɵɵelementEnd()();
|
|
991
|
-
i0.ɵɵ
|
|
992
|
-
i0.ɵɵ
|
|
993
|
-
i0.ɵɵ
|
|
994
|
-
i0.ɵɵ
|
|
995
|
-
i0.ɵɵelementStart(30, "div", 26)(31, "button", 27);
|
|
996
|
-
i0.ɵɵlistener("click", function MJQueryFormComponentExtended_Conditional_0_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleFiltersHelp()); });
|
|
997
|
-
i0.ɵɵelement(32, "i", 28);
|
|
998
|
-
i0.ɵɵelementStart(33, "span");
|
|
999
|
-
i0.ɵɵtext(34, "Filters Help");
|
|
1000
|
-
i0.ɵɵelementEnd();
|
|
1001
|
-
i0.ɵɵelement(35, "i", 29);
|
|
1002
|
-
i0.ɵɵelementEnd()();
|
|
1003
|
-
i0.ɵɵelementStart(36, "div", 30);
|
|
1004
|
-
i0.ɵɵconditionalCreate(37, MJQueryFormComponentExtended_Conditional_0_Conditional_37_Template, 1, 3, "mj-query-diagnostics", 31);
|
|
1005
|
-
i0.ɵɵelementStart(38, "mj-code-editor", 32, 1);
|
|
1006
|
-
i0.ɵɵlistener("change", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_change_38_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSQLChange($event)); })("CompositionTokenClick", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_CompositionTokenClick_38_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCompositionTokenClick($event)); });
|
|
1031
|
+
i0.ɵɵelementStart(38, "div", 32);
|
|
1032
|
+
i0.ɵɵconditionalCreate(39, MJQueryFormComponentExtended_Conditional_0_Conditional_39_Template, 1, 3, "mj-query-diagnostics", 33);
|
|
1033
|
+
i0.ɵɵelementStart(40, "mj-code-editor", 34, 1);
|
|
1034
|
+
i0.ɵɵlistener("change", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_change_40_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onSQLChange($event)); })("CompositionTokenClick", function MJQueryFormComponentExtended_Conditional_0_Template_mj_code_editor_CompositionTokenClick_40_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCompositionTokenClick($event)); });
|
|
1007
1035
|
i0.ɵɵelementEnd();
|
|
1008
|
-
i0.ɵɵconditionalCreate(
|
|
1009
|
-
i0.ɵɵconditionalCreate(
|
|
1036
|
+
i0.ɵɵconditionalCreate(42, MJQueryFormComponentExtended_Conditional_0_Conditional_42_Template, 1, 4, "mj-query-diagnostics", 35);
|
|
1037
|
+
i0.ɵɵconditionalCreate(43, MJQueryFormComponentExtended_Conditional_0_Conditional_43_Template, 7, 0, "div", 36);
|
|
1010
1038
|
i0.ɵɵelementEnd()();
|
|
1011
|
-
i0.ɵɵconditionalCreate(
|
|
1012
|
-
i0.ɵɵconditionalCreate(
|
|
1013
|
-
i0.ɵɵconditionalCreate(
|
|
1014
|
-
i0.ɵɵconditionalCreate(
|
|
1015
|
-
i0.ɵɵconditionalCreate(
|
|
1016
|
-
i0.ɵɵelementStart(
|
|
1017
|
-
i0.ɵɵtwoWayListener("ExpandedChange", function
|
|
1018
|
-
i0.ɵɵtemplate(
|
|
1019
|
-
i0.ɵɵelementStart(
|
|
1020
|
-
i0.ɵɵelement(
|
|
1021
|
-
i0.ɵɵtext(
|
|
1039
|
+
i0.ɵɵconditionalCreate(44, MJQueryFormComponentExtended_Conditional_0_Conditional_44_Template, 5, 2, "mj-accordion-panel", 37);
|
|
1040
|
+
i0.ɵɵconditionalCreate(45, MJQueryFormComponentExtended_Conditional_0_Conditional_45_Template, 5, 2, "mj-accordion-panel", 38);
|
|
1041
|
+
i0.ɵɵconditionalCreate(46, MJQueryFormComponentExtended_Conditional_0_Conditional_46_Template, 5, 2, "mj-accordion-panel", 39);
|
|
1042
|
+
i0.ɵɵconditionalCreate(47, MJQueryFormComponentExtended_Conditional_0_Conditional_47_Template, 11, 2, "mj-accordion-panel", 40);
|
|
1043
|
+
i0.ɵɵconditionalCreate(48, MJQueryFormComponentExtended_Conditional_0_Conditional_48_Template, 5, 2, "mj-accordion-panel", 41);
|
|
1044
|
+
i0.ɵɵelementStart(49, "mj-accordion-panel", 42);
|
|
1045
|
+
i0.ɵɵtwoWayListener("ExpandedChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_accordion_panel_ExpandedChange_49_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.detailsPanelExpanded, $event) || (ctx_r1.detailsPanelExpanded = $event); return i0.ɵɵresetView($event); });
|
|
1046
|
+
i0.ɵɵtemplate(50, MJQueryFormComponentExtended_Conditional_0_ng_template_50_Template, 3, 0, "ng-template", 27);
|
|
1047
|
+
i0.ɵɵelementStart(51, "div", 43)(52, "div", 44)(53, "div", 45)(54, "label", 46);
|
|
1048
|
+
i0.ɵɵelement(55, "i", 47);
|
|
1049
|
+
i0.ɵɵtext(56, " Reusable ");
|
|
1022
1050
|
i0.ɵɵelementEnd();
|
|
1023
|
-
i0.ɵɵconditionalCreate(
|
|
1051
|
+
i0.ɵɵconditionalCreate(57, MJQueryFormComponentExtended_Conditional_0_Conditional_57_Template, 3, 1)(58, MJQueryFormComponentExtended_Conditional_0_Conditional_58_Template, 3, 1, "div", 48);
|
|
1024
1052
|
i0.ɵɵelementEnd();
|
|
1025
|
-
i0.ɵɵelementStart(
|
|
1026
|
-
i0.ɵɵelement(
|
|
1027
|
-
i0.ɵɵtext(
|
|
1053
|
+
i0.ɵɵelementStart(59, "div", 45)(60, "label", 46);
|
|
1054
|
+
i0.ɵɵelement(61, "i", 49);
|
|
1055
|
+
i0.ɵɵtext(62, " Cache Enabled ");
|
|
1028
1056
|
i0.ɵɵelementEnd();
|
|
1029
|
-
i0.ɵɵconditionalCreate(
|
|
1057
|
+
i0.ɵɵconditionalCreate(63, MJQueryFormComponentExtended_Conditional_0_Conditional_63_Template, 3, 1)(64, MJQueryFormComponentExtended_Conditional_0_Conditional_64_Template, 3, 1, "div", 48);
|
|
1030
1058
|
i0.ɵɵelementEnd();
|
|
1031
|
-
i0.ɵɵconditionalCreate(
|
|
1032
|
-
i0.ɵɵelementStart(
|
|
1033
|
-
i0.ɵɵelement(
|
|
1034
|
-
i0.ɵɵtext(
|
|
1059
|
+
i0.ɵɵconditionalCreate(65, MJQueryFormComponentExtended_Conditional_0_Conditional_65_Template, 6, 1, "div", 45);
|
|
1060
|
+
i0.ɵɵelementStart(66, "div", 45)(67, "label", 46);
|
|
1061
|
+
i0.ɵɵelement(68, "i", 50);
|
|
1062
|
+
i0.ɵɵtext(69, " Audit Runs ");
|
|
1035
1063
|
i0.ɵɵelementEnd();
|
|
1036
|
-
i0.ɵɵconditionalCreate(
|
|
1064
|
+
i0.ɵɵconditionalCreate(70, MJQueryFormComponentExtended_Conditional_0_Conditional_70_Template, 3, 1)(71, MJQueryFormComponentExtended_Conditional_0_Conditional_71_Template, 3, 1, "div", 48);
|
|
1037
1065
|
i0.ɵɵelementEnd();
|
|
1038
|
-
i0.ɵɵelementStart(
|
|
1039
|
-
i0.ɵɵelement(
|
|
1040
|
-
i0.ɵɵtext(
|
|
1066
|
+
i0.ɵɵelementStart(72, "div", 45)(73, "label", 46);
|
|
1067
|
+
i0.ɵɵelement(74, "i", 51);
|
|
1068
|
+
i0.ɵɵtext(75, " Template Usage ");
|
|
1041
1069
|
i0.ɵɵelementEnd();
|
|
1042
|
-
i0.ɵɵconditionalCreate(
|
|
1070
|
+
i0.ɵɵconditionalCreate(76, MJQueryFormComponentExtended_Conditional_0_Conditional_76_Template, 1, 1, "mj-switch", 52)(77, MJQueryFormComponentExtended_Conditional_0_Conditional_77_Template, 3, 1, "div", 48);
|
|
1043
1071
|
i0.ɵɵelementEnd();
|
|
1044
|
-
i0.ɵɵelementStart(
|
|
1045
|
-
i0.ɵɵelement(
|
|
1046
|
-
i0.ɵɵtext(
|
|
1072
|
+
i0.ɵɵelementStart(78, "div", 45)(79, "label", 46);
|
|
1073
|
+
i0.ɵɵelement(80, "i", 53);
|
|
1074
|
+
i0.ɵɵtext(81, " Created ");
|
|
1047
1075
|
i0.ɵɵelementEnd();
|
|
1048
|
-
i0.ɵɵelementStart(
|
|
1049
|
-
i0.ɵɵtext(
|
|
1076
|
+
i0.ɵɵelementStart(82, "div", 48);
|
|
1077
|
+
i0.ɵɵtext(83);
|
|
1050
1078
|
i0.ɵɵelementEnd()();
|
|
1051
|
-
i0.ɵɵelementStart(
|
|
1052
|
-
i0.ɵɵelement(
|
|
1053
|
-
i0.ɵɵtext(
|
|
1079
|
+
i0.ɵɵelementStart(84, "div", 45)(85, "label", 46);
|
|
1080
|
+
i0.ɵɵelement(86, "i", 54);
|
|
1081
|
+
i0.ɵɵtext(87, " Last Updated ");
|
|
1054
1082
|
i0.ɵɵelementEnd();
|
|
1055
|
-
i0.ɵɵelementStart(
|
|
1056
|
-
i0.ɵɵtext(
|
|
1083
|
+
i0.ɵɵelementStart(88, "div", 48);
|
|
1084
|
+
i0.ɵɵtext(89);
|
|
1057
1085
|
i0.ɵɵelementEnd()();
|
|
1058
|
-
i0.ɵɵconditionalCreate(
|
|
1059
|
-
i0.ɵɵelementEnd()()();
|
|
1060
|
-
i0.ɵɵconditionalCreate(89, MJQueryFormComponentExtended_Conditional_0_Conditional_89_Template, 5, 2, "mj-accordion-panel", 35);
|
|
1086
|
+
i0.ɵɵconditionalCreate(90, MJQueryFormComponentExtended_Conditional_0_Conditional_90_Template, 6, 1, "div", 45);
|
|
1061
1087
|
i0.ɵɵelementEnd()()();
|
|
1062
|
-
i0.ɵɵ
|
|
1063
|
-
i0.ɵɵ
|
|
1088
|
+
i0.ɵɵconditionalCreate(91, MJQueryFormComponentExtended_Conditional_0_Conditional_91_Template, 5, 2, "mj-accordion-panel", 55);
|
|
1089
|
+
i0.ɵɵelementEnd()()()();
|
|
1090
|
+
i0.ɵɵelementStart(92, "mj-query-refresh-dialog", 56);
|
|
1091
|
+
i0.ɵɵlistener("Closed", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_refresh_dialog_Closed_92_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRefreshDialogClosed()); })("Applied", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_refresh_dialog_Applied_92_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnRefreshApplied($event)); });
|
|
1064
1092
|
i0.ɵɵelementEnd();
|
|
1065
|
-
i0.ɵɵelementStart(
|
|
1066
|
-
i0.ɵɵtwoWayListener("isVisibleChange", function
|
|
1067
|
-
i0.ɵɵlistener("onClose", function
|
|
1093
|
+
i0.ɵɵelementStart(93, "mj-query-run-dialog", 57);
|
|
1094
|
+
i0.ɵɵtwoWayListener("isVisibleChange", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_run_dialog_isVisibleChange_93_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.showRunDialog, $event) || (ctx_r1.showRunDialog = $event); return i0.ɵɵresetView($event); });
|
|
1095
|
+
i0.ɵɵlistener("onClose", function MJQueryFormComponentExtended_Conditional_0_Template_mj_query_run_dialog_onClose_93_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onRunDialogClose()); });
|
|
1068
1096
|
i0.ɵɵelementEnd();
|
|
1069
1097
|
} if (rf & 2) {
|
|
1070
1098
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -1072,7 +1100,7 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
1072
1100
|
i0.ɵɵadvance(3);
|
|
1073
1101
|
i0.ɵɵconditional(ctx_r1.IsSaving ? 3 : -1);
|
|
1074
1102
|
i0.ɵɵadvance();
|
|
1075
|
-
i0.ɵɵclassProp("content-saving", ctx_r1.IsSaving);
|
|
1103
|
+
i0.ɵɵclassProp("content-saving", ctx_r1.IsSaving)("hero-view", !ctx_r1.EditMode)("hero-compact", !ctx_r1.EditMode && !ctx_r1.HeroDetailsOpen);
|
|
1076
1104
|
i0.ɵɵadvance(5);
|
|
1077
1105
|
i0.ɵɵconditional(ctx_r1.EditMode ? 9 : 10);
|
|
1078
1106
|
i0.ɵɵadvance(3);
|
|
@@ -1086,51 +1114,55 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
1086
1114
|
i0.ɵɵadvance();
|
|
1087
1115
|
i0.ɵɵconditional(ctx_r1.EditMode || ctx_r1.record.Description ? 25 : -1);
|
|
1088
1116
|
i0.ɵɵadvance();
|
|
1089
|
-
i0.ɵɵconditional(ctx_r1.
|
|
1117
|
+
i0.ɵɵconditional(!ctx_r1.EditMode && ctx_r1.HeroSummary ? 26 : -1);
|
|
1118
|
+
i0.ɵɵadvance();
|
|
1119
|
+
i0.ɵɵconditional(ctx_r1.record.Status && ctx_r1.record.Status !== "Approved" && !ctx_r1.EditMode ? 27 : -1);
|
|
1090
1120
|
i0.ɵɵadvance();
|
|
1091
1121
|
i0.ɵɵclassProp("content-saving", ctx_r1.IsSaving);
|
|
1092
1122
|
i0.ɵɵadvance();
|
|
1123
|
+
i0.ɵɵproperty("Enabled", ctx_r1.Phone.IsPhone)("ActiveKey", ctx_r1.Phone.Section);
|
|
1124
|
+
i0.ɵɵadvance();
|
|
1093
1125
|
i0.ɵɵtwoWayProperty("Expanded", ctx_r1.sqlPanelExpanded);
|
|
1094
1126
|
i0.ɵɵadvance(7);
|
|
1095
1127
|
i0.ɵɵproperty("ngClass", ctx_r1.showFiltersHelp ? "fa-chevron-up" : "fa-chevron-down");
|
|
1096
1128
|
i0.ɵɵadvance(2);
|
|
1097
|
-
i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length > 0 || ctx_r1.SaveDiagnosticsHeadline ?
|
|
1129
|
+
i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length > 0 || ctx_r1.SaveDiagnosticsHeadline ? 39 : -1);
|
|
1098
1130
|
i0.ɵɵadvance();
|
|
1099
1131
|
i0.ɵɵproperty("language", "sql");
|
|
1100
1132
|
i0.ɵɵadvance(2);
|
|
1101
|
-
i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length === 0 && ctx_r1.ExtractionDiagnostics.length > 0 ?
|
|
1133
|
+
i0.ɵɵconditional(ctx_r1.SaveDiagnostics.length === 0 && ctx_r1.ExtractionDiagnostics.length > 0 ? 42 : -1);
|
|
1102
1134
|
i0.ɵɵadvance();
|
|
1103
|
-
i0.ɵɵconditional(ctx_r1.showFiltersHelp ?
|
|
1135
|
+
i0.ɵɵconditional(ctx_r1.showFiltersHelp ? 43 : -1);
|
|
1104
1136
|
i0.ɵɵadvance();
|
|
1105
|
-
i0.ɵɵconditional(ctx_r1.record.TechnicalDescription || ctx_r1.EditMode ?
|
|
1137
|
+
i0.ɵɵconditional(ctx_r1.record.TechnicalDescription || ctx_r1.EditMode ? 44 : -1);
|
|
1106
1138
|
i0.ɵɵadvance();
|
|
1107
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ?
|
|
1139
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 45 : -1);
|
|
1108
1140
|
i0.ɵɵadvance();
|
|
1109
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ?
|
|
1141
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 46 : -1);
|
|
1110
1142
|
i0.ɵɵadvance();
|
|
1111
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.DependentQueries.length > 0 ?
|
|
1143
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved && ctx_r1.DependentQueries.length > 0 ? 47 : -1);
|
|
1112
1144
|
i0.ɵɵadvance();
|
|
1113
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ?
|
|
1145
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved || ctx_r1.EditMode ? 48 : -1);
|
|
1114
1146
|
i0.ɵɵadvance();
|
|
1115
1147
|
i0.ɵɵtwoWayProperty("Expanded", ctx_r1.detailsPanelExpanded);
|
|
1116
1148
|
i0.ɵɵadvance(8);
|
|
1117
|
-
i0.ɵɵconditional(ctx_r1.EditMode ?
|
|
1149
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 57 : 58);
|
|
1118
1150
|
i0.ɵɵadvance(6);
|
|
1119
|
-
i0.ɵɵconditional(ctx_r1.EditMode ?
|
|
1151
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 63 : 64);
|
|
1120
1152
|
i0.ɵɵadvance(2);
|
|
1121
|
-
i0.ɵɵconditional(ctx_r1.record.CacheEnabled ?
|
|
1153
|
+
i0.ɵɵconditional(ctx_r1.record.CacheEnabled ? 65 : -1);
|
|
1122
1154
|
i0.ɵɵadvance(5);
|
|
1123
|
-
i0.ɵɵconditional(ctx_r1.EditMode ?
|
|
1155
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 70 : 71);
|
|
1124
1156
|
i0.ɵɵadvance(6);
|
|
1125
|
-
i0.ɵɵconditional(ctx_r1.EditMode ?
|
|
1157
|
+
i0.ɵɵconditional(ctx_r1.EditMode ? 76 : 77);
|
|
1126
1158
|
i0.ɵɵadvance(7);
|
|
1127
1159
|
i0.ɵɵtextInterpolate(ctx_r1.formatDate(ctx_r1.record.__mj_CreatedAt));
|
|
1128
1160
|
i0.ɵɵadvance(6);
|
|
1129
1161
|
i0.ɵɵtextInterpolate(ctx_r1.formatDate(ctx_r1.record.__mj_UpdatedAt));
|
|
1130
1162
|
i0.ɵɵadvance();
|
|
1131
|
-
i0.ɵɵconditional(ctx_r1.record.QualityRank != null ?
|
|
1163
|
+
i0.ɵɵconditional(ctx_r1.record.QualityRank != null ? 90 : -1);
|
|
1132
1164
|
i0.ɵɵadvance();
|
|
1133
|
-
i0.ɵɵconditional(ctx_r1.record.IsSaved ?
|
|
1165
|
+
i0.ɵɵconditional(ctx_r1.record.IsSaved ? 91 : -1);
|
|
1134
1166
|
i0.ɵɵadvance();
|
|
1135
1167
|
i0.ɵɵproperty("Visible", ctx_r1.ShowRefreshDialog)("Scope", ctx_r1.RefreshScope)("ScopeLabel", ctx_r1.RefreshScopeLabel)("AllowSkipDryRun", true)("Provider", ctx_r1.ProviderToUse);
|
|
1136
1168
|
i0.ɵɵadvance();
|
|
@@ -1140,6 +1172,10 @@ function MJQueryFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf &
|
|
|
1140
1172
|
let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJQueryFormComponent {
|
|
1141
1173
|
constructor() {
|
|
1142
1174
|
super(...arguments);
|
|
1175
|
+
/** Phone width shows the stacked accordions as sections behind one picker (design call 7A). */
|
|
1176
|
+
this.Phone = new PhoneSectionsState(() => this.cdr.markForCheck());
|
|
1177
|
+
/** Phone hero (6A): whether the summary line is expanded to show the rest of the hero. */
|
|
1178
|
+
this.HeroDetailsOpen = false;
|
|
1143
1179
|
this.QueryParameters = [];
|
|
1144
1180
|
this.QueryFields = [];
|
|
1145
1181
|
this.QueryEntities = [];
|
|
@@ -1206,6 +1242,18 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
|
|
|
1206
1242
|
// ─── Refresh metadata ───────────────────────────────────────────────────────
|
|
1207
1243
|
this.ShowRefreshDialog = false;
|
|
1208
1244
|
}
|
|
1245
|
+
/** Toggles the phone hero between its compact identity row and the full hero. */
|
|
1246
|
+
ToggleHeroDetails() {
|
|
1247
|
+
this.HeroDetailsOpen = !this.HeroDetailsOpen;
|
|
1248
|
+
this.cdr.markForCheck();
|
|
1249
|
+
}
|
|
1250
|
+
/** The phone hero's one-line summary of what the compact hero leaves out. */
|
|
1251
|
+
get HeroSummary() {
|
|
1252
|
+
return JoinHeroSummary([
|
|
1253
|
+
this.CategoryPathDisplay || 'Uncategorized',
|
|
1254
|
+
this.record.IsSaved ? `Metadata: ${this.ExtractionStatusLabel}` : null,
|
|
1255
|
+
]);
|
|
1256
|
+
}
|
|
1209
1257
|
/** @deprecated Use {@link QueryParameters}. */
|
|
1210
1258
|
get queryParameters() {
|
|
1211
1259
|
return this.QueryParameters;
|
|
@@ -1459,6 +1507,7 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
|
|
|
1459
1507
|
}
|
|
1460
1508
|
ngOnDestroy() {
|
|
1461
1509
|
super.ngOnDestroy();
|
|
1510
|
+
this.Phone.Stop();
|
|
1462
1511
|
this.destroy$.next();
|
|
1463
1512
|
this.destroy$.complete();
|
|
1464
1513
|
}
|
|
@@ -2305,11 +2354,11 @@ let MJQueryFormComponentExtended = class MJQueryFormComponentExtended extends MJ
|
|
|
2305
2354
|
} if (rf & 2) {
|
|
2306
2355
|
let _t;
|
|
2307
2356
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.SqlEditor = _t.first);
|
|
2308
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["form", "ngForm"], ["sqlEditor", ""], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "IsSaving", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "saving-overlay"], [1, "query-header"], [1, "query-header-content"], [1, "query-header-top"], [1, "query-name-section"], [1, "fa-solid", "fa-database", "query-title-icon"], ["name", "queryName", "placeholder", "Enter query name...", 1, "mj-input", "query-name-input", 3, "ngModel"], [1, "query-name-display"], [1, "query-header-actions"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", 3, "disabled"], [1, "query-meta-row"], [1, "query-meta-item"], [1, "meta-label"], [1, "meta-dropdown-row"], [1, "meta-value"], ["name", "status", "TextField", "text", "ValueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModel", "Data", "ValuePrimitive"], [1, "status-pill", 3, "background"], [1, "query-description-row"], ["Variant", "warning"], [1, "query-content"], [1, "query-panel", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "sql-panel-toolbar", 2, "display", "flex", "justify-content", "flex-end", "padding", "4px 0 8px"], ["type", "button", "mjButton", "", "variant", "flat", "title", "Show/hide SQL filters help", 1, "filters-help-btn", 3, "click"], [1, "fa-solid", "fa-question-circle"], [1, "fa-solid", 3, "ngClass"], [1, "sql-panel-content"], ["Severity", "error", 1, "save-diagnostics", 3, "Headline", "Diagnostics", "LocationsClickable"], [1, "sql-editor", 3, "change", "CompositionTokenClick", "language"], [1, "extraction-diagnostics", 3, "Headline", "Diagnostics", "Severity", "LocationsClickable"], [1, "filters-help"], [1, "query-panel", 3, "Expanded"], [1, "panel-body"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-puzzle-piece"], [1, "detail-value"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-clipboard-list"], [1, "fa-solid", "fa-file-code"], ["name", "usesTemplate", 3, "ngModel"], [1, "fa-solid", "fa-calendar-plus"], [1, "fa-solid", "fa-calendar-check"], [3, "Closed", "Applied", "Visible", "Scope", "ScopeLabel", "AllowSkipDryRun", "Provider"], [3, "isVisibleChange", "onClose", "query", "parameters", "isVisible"], [1, "fa-solid", "fa-spinner", "fa-spin", "saving-spinner"], ["name", "queryName", "placeholder", "Enter query name...", 1, "mj-input", "query-name-input", 3, "ngModelChange", "ngModel"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], [1, "meta-dropdown", 3, "ValueChange", "BranchConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch", "Clearable"], ["mjButton", "", "variant", "icon", "title", "New category", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "icon", "title", "Edit category"], ["mjButton", "", "variant", "icon", "title", "Edit category", 3, "click"], [1, "fa-solid", "fa-pen"], ["name", "status", "TextField", "text", "ValueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "status-pill"], [1, "fa-solid"], [1, "extraction-badge", 3, "title"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn", 3, "click"], [1, "fa-solid", "fa-rotate"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModel"], [1, "query-description-text"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModelChange", "ngModel"], [1, "panel-title-row"], [1, "panel-title"], [1, "fa-solid", "fa-code", "panel-icon", "sql-icon"], [1, "panel-badge", "defined"], ["Severity", "error", 1, "save-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "LocationsClickable"], [1, "extraction-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "Severity", "LocationsClickable"], [1, "filters-help-title"], [1, "fa-solid", "fa-filter"], [1, "filters-grid"], [1, "filter-card"], [1, "filter-name"], [1, "filter-description"], [1, "filter-syntax"], [1, "filter-notes"], [1, "technical-description-view"], [1, "fa-solid", "fa-book", "panel-icon"], ["name", "technicalDescription", "rows", "8", "placeholder", "Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.", 1, "mj-input", "technical-description-textarea", 3, "ngModelChange", "ngModel"], [1, "technical-description-preview"], [1, "preview-label"], [1, "fa-solid", "fa-eye"], [3, "data", "enableMermaid", "enableHighlight", "enableCollapsibleHeadings", "enableSmartypants"], [1, "panel-loading"], [1, "fa-solid", "fa-sliders", "panel-icon"], [1, "panel-badge", "count"], ["text", "Loading parameters..."], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "panel-toolbar"], [3, "Remove", "Changed", "Parameters", "EditMode"], ["type", "button", 1, "add-item-btn", 3, "click"], [1, "fa-solid", "fa-table", "panel-icon"], ["text", "Loading fields..."], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [3, "Remove", "OpenSourceField", "Changed", "Fields", "EditMode"], [1, "dependents-description"], [1, "card-grid"], [1, "item-card", "dependent-card"], [1, "fa-solid", "fa-arrow-left", "panel-icon", "dependents-icon"], [1, "item-card", "dependent-card", 3, "click"], [1, "item-card-header"], [1, "item-name"], [1, "fa-solid", "fa-arrow-left", "item-name-icon", "dependent-query-icon"], [1, "item-card-body"], [1, "item-meta"], [1, "item-card-footer"], [1, "open-link"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "meta-tag"], [1, "fa-solid", "fa-link"], [1, "meta-code"], [1, "fa-solid", "fa-database", "panel-icon"], ["text", "Loading entities..."], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "item-card"], [1, "fa-solid", "fa-table", "item-name-icon", "entity-icon"], [1, "entity-dropdown-wrapper"], [1, "item-card-actions"], ["TextField", "text", "ValueField", "id", "Placeholder", "Select entity...", 1, "entity-dropdown", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], [1, "fa-solid", "fa-database"], ["title", "How this entity link was detected", 1, "meta-tag"], ["type", "button", "title", "Delete entity", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-info-circle", "panel-icon"], ["name", "reusable", 3, "ngModelChange", "ngModel"], [1, "detail-hint"], [1, "detail-tag", "positive"], [1, "detail-tag", "neutral"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-times"], ["name", "cacheEnabled", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-clock"], ["type", "number", "name", "cacheTTLMinutes", "min", "1", "placeholder", "Default", 1, "mj-input", "detail-input-narrow", 3, "ngModelChange", "ngModel"], ["name", "auditQueryRuns", 3, "ngModelChange", "ngModel"], ["name", "usesTemplate", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-star"], [1, "fa-solid", "fa-shield-alt", "panel-icon"], ["text", "Loading permissions..."], ["Icon", "fa-solid fa-shield-halved", "Title", "No Permissions Set", "Message", "This query uses default permissions."], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "permissions-list"], [1, "permission-card"], [1, "fa-solid", "fa-users", "permission-icon"], [1, "permission-info"], [1, "permission-role"], [1, "permission-type"], [1, "permission-badge"]], template: function MJQueryFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2309
|
-
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Template,
|
|
2357
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [["form", "ngForm"], ["sqlEditor", ""], [3, "Navigate", "DeleteRequested", "FavoriteToggled", "HistoryRequested", "ListManagementRequested", "Record", "FormComponent", "ToolbarConfig", "IsSaving", "WidthMode"], [1, "record-form", 2, "display", "flex", "flex-direction", "column", "height", "100%", "overflow", "hidden"], [1, "saving-overlay"], [1, "query-header", "phone-hero"], [1, "query-header-content"], [1, "query-header-top", "phone-hero-top"], [1, "query-name-section"], [1, "fa-solid", "fa-database", "query-title-icon"], ["name", "queryName", "placeholder", "Enter query name...", 1, "mj-input", "query-name-input", 3, "ngModel"], [1, "query-header-actions", "phone-hero-actions"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", "phone-hero-run", 3, "disabled"], [1, "query-meta-row", "phone-hero-detail"], [1, "query-meta-item"], [1, "meta-label"], [1, "meta-dropdown-row"], [1, "meta-value"], [1, "query-meta-item", "phone-hero-hide"], ["name", "status", "TextField", "text", "ValueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModel", "Data", "ValuePrimitive"], [1, "status-pill", 3, "background"], [1, "query-description-row", "phone-hero-detail"], ["type", "button", 1, "phone-hero-summary"], ["Variant", "warning"], [1, "query-content"], [3, "ActiveKeyChange", "Enabled", "ActiveKey"], ["SectionKey", "sql", "SectionTitle", "SQL", "SectionIcon", "fa-solid fa-code", 1, "query-panel", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], [1, "sql-panel-toolbar", 2, "display", "flex", "justify-content", "flex-end", "padding", "4px 0 8px"], ["type", "button", "mjButton", "", "variant", "flat", "title", "Show/hide SQL filters help", 1, "filters-help-btn", 3, "click"], [1, "fa-solid", "fa-question-circle"], [1, "fa-solid", 3, "ngClass"], [1, "sql-panel-content"], ["Severity", "error", 1, "save-diagnostics", 3, "Headline", "Diagnostics", "LocationsClickable"], [1, "sql-editor", 3, "change", "CompositionTokenClick", "language"], [1, "extraction-diagnostics", 3, "Headline", "Diagnostics", "Severity", "LocationsClickable"], [1, "filters-help"], ["SectionKey", "description", "SectionTitle", "Technical Description", "SectionIcon", "fa-solid fa-book", 1, "query-panel", 3, "Expanded"], ["SectionKey", "parameters", "SectionTitle", "Parameters", "SectionIcon", "fa-solid fa-sliders", 1, "query-panel", 3, "Expanded"], ["SectionKey", "fields", "SectionTitle", "Fields", "SectionIcon", "fa-solid fa-table", 1, "query-panel", 3, "Expanded"], ["SectionKey", "dependents", "SectionTitle", "Dependent Queries", "SectionIcon", "fa-solid fa-arrow-left", 1, "query-panel", 3, "Expanded"], ["SectionKey", "entities", "SectionTitle", "Entities", "SectionIcon", "fa-solid fa-database", 1, "query-panel", 3, "Expanded"], ["SectionKey", "details", "SectionTitle", "Details", "SectionIcon", "fa-solid fa-info-circle", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "panel-body"], [1, "details-grid"], [1, "detail-item"], [1, "detail-label"], [1, "fa-solid", "fa-puzzle-piece"], [1, "detail-value"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-clipboard-list"], [1, "fa-solid", "fa-file-code"], ["name", "usesTemplate", 3, "ngModel"], [1, "fa-solid", "fa-calendar-plus"], [1, "fa-solid", "fa-calendar-check"], ["SectionKey", "permissions", "SectionTitle", "Permissions", "SectionIcon", "fa-solid fa-shield-alt", 1, "query-panel", 3, "Expanded"], [3, "Closed", "Applied", "Visible", "Scope", "ScopeLabel", "AllowSkipDryRun", "Provider"], [3, "isVisibleChange", "onClose", "query", "parameters", "isVisible"], [1, "fa-solid", "fa-spinner", "fa-spin", "saving-spinner"], ["name", "queryName", "placeholder", "Enter query name...", 1, "mj-input", "query-name-input", 3, "ngModelChange", "ngModel"], [1, "query-name-display"], [1, "status-pill", "phone-hero-only"], ["mjButton", "", "variant", "primary", "title", "Run Query", 1, "run-query-btn", "phone-hero-run", 3, "click", "disabled"], [1, "fa-solid", "fa-play"], [1, "meta-dropdown", 3, "ValueChange", "BranchConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch", "Clearable"], ["mjButton", "", "variant", "icon", "title", "New category", 3, "click"], [1, "fa-solid", "fa-plus"], ["mjButton", "", "variant", "icon", "title", "Edit category"], ["mjButton", "", "variant", "icon", "title", "Edit category", 3, "click"], [1, "fa-solid", "fa-pen"], ["name", "status", "TextField", "text", "ValueField", "value", 1, "meta-dropdown", "status-dropdown", 3, "ngModelChange", "ngModel", "Data", "ValuePrimitive"], [1, "status-pill"], [1, "fa-solid"], [1, "extraction-badge", 3, "title"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn"], ["mjButton", "", "Variant", "outline", "Size", "sm", "type", "button", "title", "Re-derive the fields, parameters and entities from the SQL and the database server", 1, "refresh-metadata-btn", 3, "click"], [1, "fa-solid", "fa-rotate"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModel"], [1, "query-description-text"], ["name", "description", "rows", "2", "placeholder", "Enter query description...", 1, "mj-input", "query-description-input", 3, "ngModelChange", "ngModel"], ["type", "button", 1, "phone-hero-summary", 3, "click"], [1, "phone-hero-summary-text"], ["aria-hidden", "true", 1, "fa-solid", "fa-chevron-down"], [1, "panel-title-row"], [1, "panel-title"], [1, "fa-solid", "fa-code", "panel-icon", "sql-icon"], [1, "panel-badge", "defined"], ["Severity", "error", 1, "save-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "LocationsClickable"], [1, "extraction-diagnostics", 3, "LocationClick", "Headline", "Diagnostics", "Severity", "LocationsClickable"], [1, "filters-help-title"], [1, "fa-solid", "fa-filter"], [1, "filters-grid"], [1, "filter-card"], [1, "filter-name"], [1, "filter-description"], [1, "filter-syntax"], [1, "filter-notes"], ["SectionKey", "description", "SectionTitle", "Technical Description", "SectionIcon", "fa-solid fa-book", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "technical-description-view"], [1, "fa-solid", "fa-book", "panel-icon"], ["name", "technicalDescription", "rows", "8", "placeholder", "Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.", 1, "mj-input", "technical-description-textarea", 3, "ngModelChange", "ngModel"], [1, "technical-description-preview"], [1, "preview-label"], [1, "fa-solid", "fa-eye"], [3, "data", "enableMermaid", "enableHighlight", "enableCollapsibleHeadings", "enableSmartypants"], ["SectionKey", "parameters", "SectionTitle", "Parameters", "SectionIcon", "fa-solid fa-sliders", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "panel-loading"], [1, "fa-solid", "fa-sliders", "panel-icon"], [1, "panel-badge", "count"], ["text", "Loading parameters..."], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-sliders", "Title", "No Parameters Defined", "Message", "Parameters are found in the SQL when you save. Add one here to describe it before it is used.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "panel-toolbar"], [3, "Remove", "Changed", "Parameters", "EditMode"], ["type", "button", 1, "add-item-btn", 3, "click"], ["SectionKey", "fields", "SectionTitle", "Fields", "SectionIcon", "fa-solid fa-table", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "fa-solid", "fa-table", "panel-icon"], ["text", "Loading fields..."], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-table", "Title", "No Fields Defined", "Message", "Output fields are described by the database server when you save. Add one here to annotate it.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [3, "Remove", "OpenSourceField", "Changed", "Fields", "EditMode"], ["SectionKey", "dependents", "SectionTitle", "Dependent Queries", "SectionIcon", "fa-solid fa-arrow-left", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "dependents-description"], [1, "card-grid"], [1, "item-card", "dependent-card"], [1, "fa-solid", "fa-arrow-left", "panel-icon", "dependents-icon"], [1, "item-card", "dependent-card", 3, "click"], [1, "item-card-header"], [1, "item-name"], [1, "fa-solid", "fa-arrow-left", "item-name-icon", "dependent-query-icon"], [1, "item-card-body"], [1, "item-meta"], [1, "item-card-footer"], [1, "open-link"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "meta-tag"], [1, "fa-solid", "fa-link"], [1, "meta-code"], ["SectionKey", "entities", "SectionTitle", "Entities", "SectionIcon", "fa-solid fa-database", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "fa-solid", "fa-database", "panel-icon"], ["text", "Loading entities..."], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "ActionText"], ["Icon", "fa-solid fa-database", "Title", "No Entities Tracked", "Message", "Track which entities this query uses for documentation.", "ActionIcon", "fa-solid fa-plus", 3, "Action", "ActionText"], [1, "item-card"], [1, "fa-solid", "fa-table", "item-name-icon", "entity-icon"], [1, "entity-dropdown-wrapper"], [1, "item-card-actions"], ["TextField", "text", "ValueField", "id", "Placeholder", "Select entity...", 1, "entity-dropdown", 3, "ngModelChange", "ngModel", "name", "Data", "ValuePrimitive"], [1, "fa-solid", "fa-database"], ["title", "How this entity link was detected", 1, "meta-tag"], ["type", "button", "title", "Delete entity", 1, "item-action-btn", "delete", 3, "click"], [1, "fa-solid", "fa-trash"], [1, "fa-solid", "fa-info-circle", "panel-icon"], ["name", "reusable", 3, "ngModelChange", "ngModel"], [1, "detail-hint"], [1, "detail-tag", "positive"], [1, "detail-tag", "neutral"], [1, "fa-solid", "fa-check"], [1, "fa-solid", "fa-times"], ["name", "cacheEnabled", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-clock"], ["type", "number", "name", "cacheTTLMinutes", "min", "1", "placeholder", "Default", 1, "mj-input", "detail-input-narrow", 3, "ngModelChange", "ngModel"], ["name", "auditQueryRuns", 3, "ngModelChange", "ngModel"], ["name", "usesTemplate", 3, "ngModelChange", "ngModel"], [1, "fa-solid", "fa-star"], ["SectionKey", "permissions", "SectionTitle", "Permissions", "SectionIcon", "fa-solid fa-shield-alt", 1, "query-panel", 3, "ExpandedChange", "Expanded"], [1, "fa-solid", "fa-shield-alt", "panel-icon"], ["text", "Loading permissions..."], ["Icon", "fa-solid fa-shield-halved", "Title", "No Permissions Set", "Message", "This query uses default permissions."], [3, "Params", "NewRecordValues", "AllowLoad", "ShowToolbar"], [1, "permissions-list"], [1, "permission-card"], [1, "fa-solid", "fa-users", "permission-icon"], [1, "permission-info"], [1, "permission-role"], [1, "permission-type"], [1, "permission-badge"]], template: function MJQueryFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2358
|
+
i0.ɵɵconditionalCreate(0, MJQueryFormComponentExtended_Conditional_0_Template, 94, 53);
|
|
2310
2359
|
} if (rf & 2) {
|
|
2311
2360
|
i0.ɵɵconditional(ctx.record ? 0 : -1);
|
|
2312
|
-
} }, dependencies: [i1.NgClass, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.MinValidator, i2.NgModel, i2.NgForm, i3.MJEmptyStateComponent, i3.MJAlertComponent, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJDropdownComponent, i3.MJSwitchComponent, i4.MjRecordFormContainerComponent, i4.ExplorerEntityDataGridComponent, i5.CodeEditorComponent, i6.QueryFieldsGridComponent, i7.QueryParametersGridComponent, i8.QueryDiagnosticsComponent, i8.QueryRefreshDialogComponent, i9.LoadingComponent, i10.MarkdownComponent, i11.TreeDropdownComponent, i12.QueryRunDialogComponent], styles: [".k-pane[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n}\n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}", "\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n\n\n.saving-overlay[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving[_ngcontent-%COMP%] {\n pointer-events: none;\n opacity: 0.6;\n}\n\n\n\n\n\n.query-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n border-bottom: none;\n padding: 0;\n}\n\n.query-header-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 20px;\n}\n\n.query-header-top[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.query-name-section[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-title-icon[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.85);\n font-size: 1.3em;\n flex-shrink: 0;\n}\n\n.query-name-input[_ngcontent-%COMP%] {\n font-size: 1.2em;\n font-weight: 600;\n min-width: 300px;\n flex: 1;\n}\n\n.query-name-display[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-inverse, white);\n font-weight: 600;\n font-size: 1.2em;\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.query-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.run-query-btn[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n\n.query-meta-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.query-meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: rgba(255, 255, 255, 0.75);\n font-size: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\n}\n\n.meta-dropdown[_ngcontent-%COMP%] {\n min-width: 200px;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n}\n\n\n.query-description-row[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n\n.query-description-input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.query-description-text[_ngcontent-%COMP%] {\n margin: 0;\n color: rgba(255, 255, 255, 0.8);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n\n\n\n\n\n\n\n\n\n.query-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n}\n\n\n\n\n\n.query-panel[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !important;\n}\n\n\n\n\n\n.panel-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.sql-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n .mj-accordion-panel--expanded .panel-icon {\n color: rgba(255, 255, 255, 0.85) !important;\n opacity: 1;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n .mj-accordion-panel--expanded .panel-badge.defined {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n.filters-help-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 8px;\n font-size: var(--mj-text-xs);\n}\n\n\n\n\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n\n\n\n\n.sql-panel-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor[_ngcontent-%COMP%] {\n flex: 1;\n height: 400px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n\n.filters-help[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\n}\n\n.filters-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 10px;\n}\n\n.filter-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 12px;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.filter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.filter-name[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n\n\n\n\n.card-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 12px;\n padding: 0 20px 20px;\n}\n\n.item-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.item-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 10px;\n}\n\n.item-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.item-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n}\n\n.item-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n}\n\n.item-description[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.item-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: var(--mj-text-xs);\n}\n\n.meta-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n}\n\n\n.item-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 10px;\n right: 10px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.item-card[_ngcontent-%COMP%]:hover .item-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.item-card-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-top: 8px;\n}\n\n.item-action-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n.entity-dropdown-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\n display: flex;\n align-items: center;\n gap: 6px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow[_ngcontent-%COMP%] {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n\n.permissions-list[_ngcontent-%COMP%] {\n padding: 0 20px;\n}\n\n.permission-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.permission-role[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n\n\n\n\n\n\n\n\n.add-item-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n font-size: var(--mj-text-sm);\n}\n\n.add-item-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n\n\n.technical-description-textarea[_ngcontent-%COMP%] {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview[_ngcontent-%COMP%] {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view[_ngcontent-%COMP%] {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n\n.dependents-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.dependents-description[_ngcontent-%COMP%] {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card[_ngcontent-%COMP%] {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer[_ngcontent-%COMP%] {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover .open-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary-hover);\n}\n\n\n.meta-dropdown-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row[_ngcontent-%COMP%] .meta-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n\n\n.extraction-badge[_ngcontent-%COMP%] {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped[_ngcontent-%COMP%], \n.extraction-badge--none[_ngcontent-%COMP%] { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics[_ngcontent-%COMP%] {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-3);\n}\n\n\n.query-header[_ngcontent-%COMP%] .extraction-badge[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}"] }); }
|
|
2361
|
+
} }, dependencies: [i1.NgClass, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.MinValidator, i2.NgModel, i2.NgForm, i3.MJEmptyStateComponent, i3.MJAlertComponent, i3.MJAccordionSectionsComponent, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJDropdownComponent, i3.MJSwitchComponent, i4.MjRecordFormContainerComponent, i4.ExplorerEntityDataGridComponent, i5.CodeEditorComponent, i6.QueryFieldsGridComponent, i7.QueryParametersGridComponent, i8.QueryDiagnosticsComponent, i8.QueryRefreshDialogComponent, i9.LoadingComponent, i10.MarkdownComponent, i11.TreeDropdownComponent, i12.QueryRunDialogComponent], styles: [".content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n}\n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}", "\n[_nghost-%COMP%] {\n display: block;\n height: 100%;\n}\n\n\n.record-form[_ngcontent-%COMP%] {\n min-height: 0 !important;\n}\n\n\n\n\n\n.saving-overlay[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving[_ngcontent-%COMP%] {\n pointer-events: none;\n opacity: 0.6;\n}\n\n\n\n\n\n.query-header[_ngcontent-%COMP%] {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n border-bottom: none;\n padding: 0;\n}\n\n.query-header-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 20px;\n}\n\n.query-header-top[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.query-name-section[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-title-icon[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.85);\n font-size: 1.3em;\n flex-shrink: 0;\n}\n\n.query-name-input[_ngcontent-%COMP%] {\n font-size: 1.2em;\n font-weight: 600;\n min-width: 300px;\n flex: 1;\n}\n\n.query-name-display[_ngcontent-%COMP%] {\n margin: 0;\n color: var(--mj-text-inverse, white);\n font-weight: 600;\n font-size: 1.2em;\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.query-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.run-query-btn[_ngcontent-%COMP%] {\n white-space: nowrap;\n}\n\n\n.query-meta-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 24px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.query-meta-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n color: rgba(255, 255, 255, 0.75);\n font-size: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value[_ngcontent-%COMP%] {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\n}\n\n.meta-dropdown[_ngcontent-%COMP%] {\n min-width: 200px;\n}\n\n.status-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n}\n\n\n.query-description-row[_ngcontent-%COMP%] {\n margin-top: 2px;\n}\n\n.query-description-input[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n.query-description-text[_ngcontent-%COMP%] {\n margin: 0;\n color: rgba(255, 255, 255, 0.8);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n\n\n\n\n\n\n\n\n\n.query-content[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n}\n\n\n\n\n\n.query-panel[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !important;\n}\n\n\n\n\n\n.panel-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.sql-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n .mj-accordion-panel--expanded .panel-icon {\n color: rgba(255, 255, 255, 0.85) !important;\n opacity: 1;\n}\n\n.panel-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n .mj-accordion-panel--expanded .panel-badge.defined {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n.filters-help-btn[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 8px;\n font-size: var(--mj-text-xs);\n}\n\n\n\n\n\n.panel-body[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n\n\n\n\n.sql-panel-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor[_ngcontent-%COMP%] {\n flex: 1;\n height: 400px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n\n.filters-help[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title[_ngcontent-%COMP%] {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\n}\n\n.filters-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 10px;\n}\n\n.filter-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 12px;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.filter-card[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.filter-name[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax[_ngcontent-%COMP%] {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n\n\n\n\n.card-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 12px;\n padding: 0 20px 20px;\n}\n\n.item-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.item-card-header[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 10px;\n}\n\n.item-name[_ngcontent-%COMP%] {\n font-weight: 600;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.item-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n}\n\n.item-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n}\n\n.item-description[_ngcontent-%COMP%] {\n margin-bottom: 8px;\n}\n\n.item-meta[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n font-size: var(--mj-text-xs);\n}\n\n.meta-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n}\n\n\n.item-actions[_ngcontent-%COMP%] {\n position: absolute;\n top: 10px;\n right: 10px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.item-card[_ngcontent-%COMP%]:hover .item-actions[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.item-card-actions[_ngcontent-%COMP%] {\n display: flex;\n justify-content: flex-end;\n margin-top: 8px;\n}\n\n.item-action-btn[_ngcontent-%COMP%] {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n.entity-dropdown-wrapper[_ngcontent-%COMP%] {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n\n\n.details-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\n display: flex;\n align-items: center;\n gap: 6px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow[_ngcontent-%COMP%] {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\n}\n\n\n\n\n\n.permissions-list[_ngcontent-%COMP%] {\n padding: 0 20px;\n}\n\n.permission-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.permission-role[_ngcontent-%COMP%] {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n\n\n\n\n\n\n\n\n.add-item-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n font-size: var(--mj-text-sm);\n}\n\n.add-item-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n.badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n\n\n\n\n.technical-description-textarea[_ngcontent-%COMP%] {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview[_ngcontent-%COMP%] {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view[_ngcontent-%COMP%] {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n\n.dependents-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning);\n}\n\n.dependents-description[_ngcontent-%COMP%] {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card[_ngcontent-%COMP%] {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer[_ngcontent-%COMP%] {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card[_ngcontent-%COMP%]:hover .open-link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary-hover);\n}\n\n\n.meta-dropdown-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row[_ngcontent-%COMP%] .meta-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n\n\n.extraction-badge[_ngcontent-%COMP%] {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error[_ngcontent-%COMP%] { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped[_ngcontent-%COMP%], \n.extraction-badge--none[_ngcontent-%COMP%] { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics[_ngcontent-%COMP%] {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics[_ngcontent-%COMP%] {\n margin-top: var(--mj-space-3);\n}\n\n\n.query-header[_ngcontent-%COMP%] .extraction-badge[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%] {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}\n\n\n@media (max-width: 768px) {\n .query-meta-item[_ngcontent-%COMP%], \n .meta-dropdown-row[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n@media (max-width: 768px) {\n .query-content[_ngcontent-%COMP%] {\n padding: 12px 0;\n background: transparent;\n }\n\n \n .query-name-section[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n row-gap: 4px;\n }\n\n .query-name-display[_ngcontent-%COMP%] {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n \n .query-name-section[_ngcontent-%COMP%] .status-pill.phone-hero-only[_ngcontent-%COMP%] {\n flex-shrink: 0;\n padding: 2px 8px;\n font-size: var(--mj-text-xs);\n }\n\n \n\n\n .query-header.phone-hero[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n color: var(--mj-text-primary); \n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-header-content[_ngcontent-%COMP%] {\n padding: 0;\n gap: 8px;\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-title-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-name-display[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .meta-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .meta-value[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] .query-description-text[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n }\n\n \n\n\n .query-header.phone-hero[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%] {\n min-height: 44px;\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n }\n\n .query-header.phone-hero[_ngcontent-%COMP%] button.refresh-metadata-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n }\n}", "\n\n\n\n\n\n\n\n\n\n\n\n\n\n.phone-hero-summary[_ngcontent-%COMP%], \n.phone-hero-only[_ngcontent-%COMP%] {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero[_ngcontent-%COMP%] {\n padding: 12px !important;\n }\n\n \n .phone-hero.hero-compact[_ngcontent-%COMP%] .phone-hero-detail[_ngcontent-%COMP%], \n .phone-hero.hero-view[_ngcontent-%COMP%] .phone-hero-hide[_ngcontent-%COMP%] {\n display: none !important;\n }\n\n .phone-hero-only[_ngcontent-%COMP%] {\n display: inline-flex;\n }\n\n \n .phone-hero[_ngcontent-%COMP%] .phone-hero-stats[_ngcontent-%COMP%] {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status[_ngcontent-%COMP%] {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n \n .phone-hero-status[data-status=\"running\"][_ngcontent-%COMP%] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"][_ngcontent-%COMP%] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"][_ngcontent-%COMP%] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"][_ngcontent-%COMP%] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top[_ngcontent-%COMP%] {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions[_ngcontent-%COMP%] {\n width: 100%;\n }\n\n .phone-hero[_ngcontent-%COMP%] .phone-hero-run[_ngcontent-%COMP%] {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n \n\n .phone-hero-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%]:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text[_ngcontent-%COMP%] {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"][_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary[_ngcontent-%COMP%] > i[_ngcontent-%COMP%] {\n transition: none;\n }\n}"] }); }
|
|
2313
2362
|
};
|
|
2314
2363
|
MJQueryFormComponentExtended = __decorate([
|
|
2315
2364
|
RegisterClass(BaseFormComponent, 'MJ: Queries')
|
|
@@ -2317,10 +2366,10 @@ MJQueryFormComponentExtended = __decorate([
|
|
|
2317
2366
|
export { MJQueryFormComponentExtended };
|
|
2318
2367
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJQueryFormComponentExtended, [{
|
|
2319
2368
|
type: Component,
|
|
2320
|
-
args: [{ standalone: false, selector: 'mj-query-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [IsSaving]=\"IsSaving\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Saving Overlay -->\n @if (IsSaving) {\n <div class=\"saving-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin saving-spinner\"></i>\n <span>Saving...</span>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"query-header\" [class.content-saving]=\"IsSaving\">\n <div class=\"query-header-content\">\n <!-- Top Row: Name and Run Button -->\n <div class=\"query-header-top\">\n <!-- Left: Query Name -->\n <div class=\"query-name-section\">\n <i class=\"fa-solid fa-database query-title-icon\"></i>\n @if (EditMode) {\n <input class=\"mj-input query-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\" />\n } @else {\n <h4 class=\"query-name-display\">{{ record.Name || 'Untitled Query' }}</h4>\n }\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"query-header-actions\">\n @if (record.ID) {\n <button mjButton\n variant=\"primary\"\n [disabled]=\"EditMode || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\"\n class=\"run-query-btn\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n\n <!-- Second Row: Category and Status -->\n <div class=\"query-meta-row\">\n <!-- Category -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Category</label>\n @if (EditMode) {\n <div class=\"meta-dropdown-row\">\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"CategoryIDAsKey\"\n [SelectableTypes]=\"'branch'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Select category...'\"\n [EnableSearch]=\"true\"\n [Clearable]=\"true\"\n (ValueChange)=\"OnCategoryTreeChange($event)\"\n class=\"meta-dropdown\">\n </mj-tree-dropdown>\n <button mjButton variant=\"icon\" title=\"New category\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (record.CategoryID) {\n <button mjButton variant=\"icon\" title=\"Edit category\" (click)=\"editSelectedCategory()\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n } @else {\n <span class=\"meta-value\">{{ categoryPathDisplay || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Status</label>\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.Status\"\n name=\"status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"meta-dropdown status-dropdown\">\n </mj-dropdown>\n } @else {\n <span class=\"status-pill\"\n [style.background]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"></i>\n {{ record.Status || 'Unknown' }}\n </span>\n }\n </div>\n\n <!-- Metadata extraction status -->\n @if (record.IsSaved) {\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Metadata</label>\n <div class=\"meta-dropdown-row\">\n <span class=\"extraction-badge\" [class]=\"'extraction-badge ' + ExtractionStatusClass\"\n [title]=\"'Last metadata extraction: ' + ExtractionStatusLabel\">\n {{ ExtractionStatusLabel }}\n </span>\n @if (CanRefreshMetadata) {\n <button mjButton Variant=\"outline\" Size=\"sm\" type=\"button\" class=\"refresh-metadata-btn\"\n (click)=\"OpenRefreshDialog()\" title=\"Re-derive the fields, parameters and entities from the SQL and the database server\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh metadata\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div class=\"query-description-row\">\n @if (EditMode) {\n <textarea class=\"mj-input query-description-input\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n rows=\"2\"\n placeholder=\"Enter query description...\">\n </textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <mj-alert Variant=\"warning\">\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </mj-alert>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" [class.content-saving]=\"IsSaving\">\n\n <!-- SQL Query Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title-row\">\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code panel-icon sql-icon\"></i>\n SQL\n @if (record.SQL) {\n <span class=\"panel-badge defined\">— Defined</span>\n }\n </span>\n </span>\n </ng-template>\n\n <div class=\"sql-panel-toolbar\" style=\"display: flex; justify-content: flex-end; padding: 4px 0 8px;\">\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n (click)=\"toggleFiltersHelp()\"\n title=\"Show/hide SQL filters help\"\n class=\"filters-help-btn\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <span>Filters Help</span>\n <i class=\"fa-solid\" [ngClass]=\"showFiltersHelp ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n </div>\n\n <div class=\"sql-panel-content\">\n @if (SaveDiagnostics.length > 0 || SaveDiagnosticsHeadline) {\n <mj-query-diagnostics class=\"save-diagnostics\"\n [Headline]=\"SaveDiagnosticsHeadline\"\n [Diagnostics]=\"SaveDiagnostics\"\n Severity=\"error\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n (CompositionTokenClick)=\"onCompositionTokenClick($event)\"\n [language]=\"'sql'\"\n class=\"sql-editor\">\n </mj-code-editor>\n\n @if (SaveDiagnostics.length === 0 && ExtractionDiagnostics.length > 0) {\n <mj-query-diagnostics class=\"extraction-diagnostics\"\n [Headline]=\"'Last metadata extraction: ' + ExtractionStatusLabel\"\n [Diagnostics]=\"ExtractionDiagnostics\"\n [Severity]=\"ExtractionSeverity\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\n\n <!-- SQL Filters Help (Below Editor) -->\n @if (showFiltersHelp) {\n <div class=\"filters-help\">\n <h6 class=\"filters-help-title\">\n <i class=\"fa-solid fa-filter\"></i> Available SQL Filters for Parameterized Queries\n </h6>\n <div class=\"filters-grid\">\n @for (filter of sqlFilters; track filter.name) {\n <div class=\"filter-card\">\n <div class=\"filter-name\">{{ filter.name }}</div>\n <div class=\"filter-description\">{{ filter.description }}</div>\n <div class=\"filter-syntax\">{{ filter.exampleSyntax }}</div>\n @if (filter.notes) {\n <div class=\"filter-notes\">{{ filter.notes }}</div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Technical Description Panel -->\n @if (record.TechnicalDescription || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"technicalDescriptionPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-book panel-icon\"></i>\n Technical Description\n @if (record.TechnicalDescription) {\n <span class=\"panel-badge defined\">— Documented</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (EditMode) {\n <textarea class=\"mj-input technical-description-textarea\"\n [(ngModel)]=\"record.TechnicalDescription\"\n name=\"technicalDescription\"\n rows=\"8\"\n placeholder=\"Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.\">\n </textarea>\n @if (record.TechnicalDescription) {\n <div class=\"technical-description-preview\">\n <div class=\"preview-label\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n } @else {\n <div class=\"technical-description-view\">\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Parameters Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n Parameters\n @if (queryParameters.length > 0) {\n <span class=\"panel-badge count\">{{ queryParameters.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingParameters) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading parameters...\"></mj-loading>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-sliders\"\n Title=\"No Parameters Defined\"\n Message=\"Parameters are found in the SQL when you save. Add one here to describe it before it is used.\"\n [ActionText]=\"EditMode ? 'Add First Parameter' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addParameter()\" />\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <mj-query-parameters-grid\n [Parameters]=\"queryParameters\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteParameter($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n Fields\n @if (queryFields.length > 0) {\n <span class=\"panel-badge count\">{{ queryFields.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingFields) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading fields...\"></mj-loading>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-table\"\n Title=\"No Fields Defined\"\n Message=\"Output fields are described by the database server when you save. Add one here to annotate it.\"\n [ActionText]=\"EditMode ? 'Add First Field' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addField()\" />\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <mj-query-fields-grid\n [Fields]=\"queryFields\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteField($event)\"\n (OpenSourceField)=\"OnOpenSourceField($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Dependent Queries Panel -->\n @if (record.IsSaved && DependentQueries.length > 0) {\n <mj-accordion-panel\n [(Expanded)]=\"dependentsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-arrow-left panel-icon dependents-icon\"></i>\n Dependent Queries\n <span class=\"panel-badge count\">{{ DependentQueries.length }}</span>\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"dependents-description\">\n These queries reference this query via <code>{{\"{{query:\\\"...\\\"}}\"}} </code> composition syntax.\n </div>\n <div class=\"card-grid\">\n @for (dep of DependentQueries; track dep.ID) {\n <div class=\"item-card dependent-card\" (click)=\"onDependentQueryClick(dep)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-arrow-left item-name-icon dependent-query-icon\"></i>\n {{ dep.Query }}\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (dep.ReferencePath) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-link\"></i> {{ dep.ReferencePath }}\n </span>\n </div>\n }\n @if (dep.Alias) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Alias:</strong> <code class=\"meta-code\">{{ dep.Alias }}</code>\n </span>\n </div>\n }\n </div>\n <div class=\"item-card-footer\">\n <span class=\"open-link\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel\n [(Expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n Entities\n @if (queryEntities.length > 0) {\n <span class=\"panel-badge count\">{{ queryEntities.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingEntities) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading entities...\"></mj-loading>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-database\"\n Title=\"No Entities Tracked\"\n Message=\"Track which entities this query uses for documentation.\"\n [ActionText]=\"EditMode ? 'Add First Entity' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addEntity()\" />\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID || $index) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <mj-dropdown\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + (entity.ID || $index)\"\n [Data]=\"getEntityOptions()\"\n TextField=\"text\"\n ValueField=\"id\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </mj-dropdown>\n </div>\n }\n </div>\n @if (!EditMode && entity.Entity) {\n <div class=\"item-card-body\">\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-database\"></i> Data Source\n </span>\n @if (entity.DetectionMethod) {\n <span class=\"meta-tag\" title=\"How this entity link was detected\">\n <strong>Detected by:</strong> {{ entity.DetectionMethod }}\n </span>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteEntity(entity)\" title=\"Delete entity\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Details Panel -->\n <mj-accordion-panel\n [(Expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\n <!-- Reusable -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-puzzle-piece\"></i> Reusable\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.Reusable\" name=\"reusable\"></mj-switch>\n <div class=\"detail-hint\">Allow other queries to reference this query using composition syntax</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.Reusable) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Reusable</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Not Reusable</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache Enabled -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-bolt\"></i> Cache Enabled\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.CacheEnabled\" name=\"cacheEnabled\"></mj-switch>\n <div class=\"detail-hint\">Cache query results in memory to reduce database load on repeated runs</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.CacheEnabled) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Caching On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Caching Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache TTL -->\n @if (record.CacheEnabled) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clock\"></i> Cache TTL (Minutes)\n </label>\n @if (EditMode) {\n <input class=\"mj-input detail-input-narrow\"\n type=\"number\"\n [(ngModel)]=\"record.CacheTTLMinutes\"\n name=\"cacheTTLMinutes\"\n min=\"1\"\n placeholder=\"Default\" />\n <div class=\"detail-hint\">How long cached results remain valid. Leave blank for default TTL.</div>\n } @else {\n <div class=\"detail-value\">{{ record.CacheTTLMinutes != null ? record.CacheTTLMinutes + ' min' : 'Default' }}</div>\n }\n </div>\n }\n\n <!-- Audit Query Runs -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clipboard-list\"></i> Audit Runs\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.AuditQueryRuns\" name=\"auditQueryRuns\"></mj-switch>\n <div class=\"detail-hint\">Log all executions of this query to the Audit Log for tracking and compliance</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.AuditQueryRuns) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Auditing On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Auditing Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Uses Template -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-file-code\"></i> Template Usage\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></mj-switch>\n } @else {\n <div class=\"detail-value\">\n @if (record.UsesTemplate) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Uses Templates</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> No Templates</span>\n }\n </div>\n }\n </div>\n\n <!-- Created Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-plus\"></i> Created\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_CreatedAt) }}</div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-check\"></i> Last Updated\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_UpdatedAt) }}</div>\n </div>\n\n <!-- Quality Rank -->\n @if (record.QualityRank != null) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-star\"></i> Quality Rank\n </label>\n <div class=\"detail-value\">{{ record.QualityRank }}/10</div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel\n [(Expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n Permissions\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingPermissions) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <mj-empty-state Icon=\"fa-solid fa-shield-halved\"\n Title=\"No Permissions Set\"\n Message=\"This query uses default permissions.\" />\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Refresh metadata: always a dry run first unless the user turned that off -->\n<mj-query-refresh-dialog\n [Visible]=\"ShowRefreshDialog\"\n [Scope]=\"RefreshScope\"\n [ScopeLabel]=\"RefreshScopeLabel\"\n [AllowSkipDryRun]=\"true\"\n [Provider]=\"ProviderToUse\"\n (Closed)=\"OnRefreshDialogClosed()\"\n (Applied)=\"OnRefreshApplied($event)\" />\n\n<!-- Query Run Dialog -->\n<mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n</mj-query-run-dialog>\n}\n", styles: [".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n", "/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n/* Override the shared record-form min-height so flex layout works properly */\n.record-form {\n min-height: 0 !important;\n}\n\n/* ========================================\n Saving Overlay\n ======================================== */\n\n.saving-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving {\n pointer-events: none;\n opacity: 0.6;\n}\n\n/* ========================================\n Header Section \u2014 matches Query Browser gradient\n ======================================== */\n\n.query-header {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n border-bottom: none;\n padding: 0;\n}\n\n.query-header-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 20px;\n}\n\n.query-header-top {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.query-name-section {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-title-icon {\n color: rgba(255, 255, 255, 0.85);\n font-size: 1.3em;\n flex-shrink: 0;\n}\n\n.query-name-input {\n font-size: 1.2em;\n font-weight: 600;\n min-width: 300px;\n flex: 1;\n}\n\n.query-name-display {\n margin: 0;\n color: var(--mj-text-inverse, white);\n font-weight: 600;\n font-size: 1.2em;\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.query-header-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.run-query-btn {\n white-space: nowrap;\n}\n\n/* Meta row (category + status) */\n.query-meta-row {\n display: flex;\n gap: 24px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.query-meta-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.meta-label {\n font-weight: 500;\n color: rgba(255, 255, 255, 0.75);\n font-size: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\n}\n\n.meta-dropdown {\n min-width: 200px;\n}\n\n.status-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill i {\n font-size: var(--mj-text-xs);\n}\n\n/* Description row */\n.query-description-row {\n margin-top: 2px;\n}\n\n.query-description-input {\n width: 100%;\n}\n\n.query-description-text {\n margin: 0;\n color: rgba(255, 255, 255, 0.8);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n/* ========================================\n Status Warning Banner\n ======================================== */\n\n\n/* ========================================\n Main Content Area\n ======================================== */\n\n.query-content {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n}\n\n/* ========================================\n Accordion Panel Overrides \u2014 Modern Style\n ======================================== */\n\n.query-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n::ng-deep .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n::ng-deep .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n::ng-deep .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n::ng-deep .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !important;\n}\n\n/* ========================================\n Panel Title & Badges\n ======================================== */\n\n.panel-title-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-icon {\n opacity: 0.7;\n}\n\n.sql-icon {\n color: var(--mj-brand-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-icon {\n color: rgba(255, 255, 255, 0.85) !important;\n opacity: 1;\n}\n\n.panel-badge {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-badge.defined {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n.filters-help-btn {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 8px;\n font-size: var(--mj-text-xs);\n}\n\n/* ========================================\n Panel Body & Loading\n ======================================== */\n\n.panel-body {\n padding: 16px 0;\n}\n\n.panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n/* ========================================\n SQL Panel\n ======================================== */\n\n.sql-panel-content {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor {\n flex: 1;\n height: 400px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n/* Filters Help */\n.filters-help {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\n}\n\n.filters-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 10px;\n}\n\n.filter-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 12px;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.filter-card:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.filter-name {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n/* ========================================\n Card Grid (Parameters, Fields, Entities)\n ======================================== */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 12px;\n padding: 0 20px 20px;\n}\n\n.item-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.item-card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 10px;\n}\n\n.item-name {\n font-weight: 600;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon {\n color: var(--mj-status-success);\n}\n\n.item-badges {\n display: flex;\n gap: 6px;\n}\n\n.item-badge {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n}\n\n.item-description {\n margin-bottom: 8px;\n}\n\n.item-meta {\n display: flex;\n gap: 16px;\n font-size: var(--mj-text-xs);\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code {\n background: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n}\n\n/* Card actions (edit/delete) */\n.item-actions {\n position: absolute;\n top: 10px;\n right: 10px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.item-card:hover .item-actions {\n opacity: 1;\n}\n\n.item-card-actions {\n display: flex;\n justify-content: flex-end;\n margin-top: 8px;\n}\n\n.item-action-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Entity dropdown in card */\n.entity-dropdown-wrapper {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown {\n width: 100%;\n}\n\n/* ========================================\n Details Grid\n ======================================== */\n\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\n display: flex;\n align-items: center;\n gap: 6px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\n}\n\n/* ========================================\n Permissions\n ======================================== */\n\n.permissions-list {\n padding: 0 20px;\n}\n\n.permission-card {\n display: flex;\n align-items: center;\n gap: 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info {\n flex: 1;\n}\n\n.permission-role {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n/* ========================================\n Empty State\n ======================================== */\n\n/* ========================================\n Buttons\n ======================================== */\n\n.add-item-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n font-size: var(--mj-text-sm);\n}\n\n.add-item-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ========================================\n Badge (reused across components)\n ======================================== */\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* ========================================\n Technical Description Panel\n ======================================== */\n\n.technical-description-textarea {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n/* Dependent Queries */\n.dependents-icon {\n color: var(--mj-status-warning);\n}\n\n.dependents-description {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description code {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card:hover .open-link {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Category selector row: tree-dropdown + create/edit icon buttons */\n.meta-dropdown-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row .meta-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n/* \u2500\u2500\u2500 Metadata extraction status \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.extraction-badge {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped,\n.extraction-badge--none { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics {\n margin-top: var(--mj-space-3);\n}\n\n/* The header sits on the brand colour: a light pill and a light outline button stay readable. */\n.query-header .extraction-badge {\n background: var(--mj-bg-surface);\n}\n\n.query-header button.refresh-metadata-btn {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header button.refresh-metadata-btn:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}\n"] }]
|
|
2369
|
+
args: [{ standalone: false, selector: 'mj-query-form', template: "@if (record) {\n<mj-record-form-container [Record]=\"record\" [FormComponent]=\"this\"\n [ToolbarConfig]=\"ToolbarConfig\"\n [IsSaving]=\"IsSaving\"\n [WidthMode]=\"'full-width'\"\n (Navigate)=\"OnFormNavigate($event)\"\n (DeleteRequested)=\"OnDeleteRequested()\"\n (FavoriteToggled)=\"OnFavoriteToggled()\"\n (HistoryRequested)=\"OnHistoryRequested()\"\n (ListManagementRequested)=\"OnListManagementRequested()\">\n <form class=\"record-form\" #form=\"ngForm\" style=\"display: flex; flex-direction: column; height: 100%; overflow: hidden;\">\n\n <!-- Saving Overlay -->\n @if (IsSaving) {\n <div class=\"saving-overlay\">\n <i class=\"fa-solid fa-spinner fa-spin saving-spinner\"></i>\n <span>Saving...</span>\n </div>\n }\n\n <!-- Header Section -->\n <div class=\"query-header phone-hero\" [class.content-saving]=\"IsSaving\" [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\">\n <div class=\"query-header-content\">\n <!-- Top Row: Name and Run Button -->\n <div class=\"query-header-top phone-hero-top\">\n <!-- Left: Query Name -->\n <div class=\"query-name-section\">\n <i class=\"fa-solid fa-database query-title-icon\"></i>\n @if (EditMode) {\n <input class=\"mj-input query-name-input\"\n [(ngModel)]=\"record.Name\"\n name=\"queryName\"\n placeholder=\"Enter query name...\" />\n } @else {\n <h4 class=\"query-name-display\">{{ record.Name || 'Untitled Query' }}</h4>\n <span class=\"status-pill phone-hero-only\" [style.background]=\"getStatusBadgeColor()\">{{ record.Status || 'Unknown' }}</span>\n }\n </div>\n\n <!-- Right: Action Buttons -->\n <div class=\"query-header-actions phone-hero-actions\">\n @if (record.ID) {\n <button mjButton\n variant=\"primary\"\n [disabled]=\"EditMode || !record.SQL || record.SQL.trim().length === 0\"\n (click)=\"runQuery()\"\n title=\"Run Query\"\n class=\"run-query-btn phone-hero-run\">\n <i class=\"fa-solid fa-play\"></i> Run\n </button>\n }\n </div>\n </div>\n\n <!-- Second Row: Category and Status -->\n <div class=\"query-meta-row phone-hero-detail\">\n <!-- Category -->\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Category</label>\n @if (EditMode) {\n <div class=\"meta-dropdown-row\">\n <mj-tree-dropdown\n [BranchConfig]=\"CategoryBranchConfig\"\n [Value]=\"CategoryIDAsKey\"\n [SelectableTypes]=\"'branch'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Select category...'\"\n [EnableSearch]=\"true\"\n [Clearable]=\"true\"\n (ValueChange)=\"OnCategoryTreeChange($event)\"\n class=\"meta-dropdown\">\n </mj-tree-dropdown>\n <button mjButton variant=\"icon\" title=\"New category\" (click)=\"createCategory()\">\n <i class=\"fa-solid fa-plus\"></i>\n </button>\n @if (record.CategoryID) {\n <button mjButton variant=\"icon\" title=\"Edit category\" (click)=\"editSelectedCategory()\">\n <i class=\"fa-solid fa-pen\"></i>\n </button>\n }\n </div>\n } @else {\n <span class=\"meta-value\">{{ categoryPathDisplay || 'Uncategorized' }}</span>\n }\n </div>\n\n <!-- Status -->\n <div class=\"query-meta-item phone-hero-hide\">\n <label class=\"meta-label\">Status</label>\n @if (EditMode) {\n <mj-dropdown\n [(ngModel)]=\"record.Status\"\n name=\"status\"\n [Data]=\"statusOptions\"\n TextField=\"text\"\n ValueField=\"value\"\n [ValuePrimitive]=\"true\"\n class=\"meta-dropdown status-dropdown\">\n </mj-dropdown>\n } @else {\n <span class=\"status-pill\"\n [style.background]=\"getStatusBadgeColor()\">\n <i class=\"fa-solid\" [class]=\"getStatusBannerIcon()\"></i>\n {{ record.Status || 'Unknown' }}\n </span>\n }\n </div>\n\n <!-- Metadata extraction status -->\n @if (record.IsSaved) {\n <div class=\"query-meta-item\">\n <label class=\"meta-label\">Metadata</label>\n <div class=\"meta-dropdown-row\">\n <span class=\"extraction-badge\" [class]=\"'extraction-badge ' + ExtractionStatusClass\"\n [title]=\"'Last metadata extraction: ' + ExtractionStatusLabel\">\n {{ ExtractionStatusLabel }}\n </span>\n @if (CanRefreshMetadata) {\n <button mjButton Variant=\"outline\" Size=\"sm\" type=\"button\" class=\"refresh-metadata-btn\"\n (click)=\"OpenRefreshDialog()\" title=\"Re-derive the fields, parameters and entities from the SQL and the database server\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh metadata\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <!-- Third Row: Description -->\n @if (EditMode || record.Description) {\n <div class=\"query-description-row phone-hero-detail\">\n @if (EditMode) {\n <textarea class=\"mj-input query-description-input\"\n [(ngModel)]=\"record.Description\"\n name=\"description\"\n rows=\"2\"\n placeholder=\"Enter query description...\">\n </textarea>\n } @else {\n <p class=\"query-description-text\">{{ record.Description }}</p>\n }\n </div>\n }\n </div>\n @if (!EditMode && HeroSummary) {\n <button type=\"button\" class=\"phone-hero-summary\" [attr.aria-expanded]=\"HeroDetailsOpen\" (click)=\"ToggleHeroDetails()\">\n <span class=\"phone-hero-summary-text\">{{ HeroSummary }}</span>\n <i class=\"fa-solid fa-chevron-down\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n\n <!-- Status Warning Banner for Non-Approved Queries -->\n @if (record.Status && record.Status !== 'Approved' && !EditMode) {\n <mj-alert Variant=\"warning\">\n <span>\n This query has status <strong>{{ record.Status }}</strong>. {{ getStatusBannerMessage() }}\n </span>\n </mj-alert>\n }\n\n <!-- Main Content Area with Expansion Panels -->\n <div class=\"query-content\" [class.content-saving]=\"IsSaving\">\n <!-- Phone: one section at a time behind a picker; desktop keeps the accordions -->\n <mj-accordion-sections [Enabled]=\"Phone.IsPhone\" [ActiveKey]=\"Phone.Section\" (ActiveKeyChange)=\"Phone.Pick($event)\">\n\n <!-- SQL Query Panel -->\n <mj-accordion-panel SectionKey=\"sql\" SectionTitle=\"SQL\" SectionIcon=\"fa-solid fa-code\"\n [(Expanded)]=\"sqlPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title-row\">\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-code panel-icon sql-icon\"></i>\n SQL\n @if (record.SQL) {\n <span class=\"panel-badge defined\">— Defined</span>\n }\n </span>\n </span>\n </ng-template>\n\n <div class=\"sql-panel-toolbar\" style=\"display: flex; justify-content: flex-end; padding: 4px 0 8px;\">\n <button type=\"button\"\n mjButton\n variant=\"flat\"\n (click)=\"toggleFiltersHelp()\"\n title=\"Show/hide SQL filters help\"\n class=\"filters-help-btn\">\n <i class=\"fa-solid fa-question-circle\"></i>\n <span>Filters Help</span>\n <i class=\"fa-solid\" [ngClass]=\"showFiltersHelp ? 'fa-chevron-up' : 'fa-chevron-down'\"></i>\n </button>\n </div>\n\n <div class=\"sql-panel-content\">\n @if (SaveDiagnostics.length > 0 || SaveDiagnosticsHeadline) {\n <mj-query-diagnostics class=\"save-diagnostics\"\n [Headline]=\"SaveDiagnosticsHeadline\"\n [Diagnostics]=\"SaveDiagnostics\"\n Severity=\"error\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\n <!-- Code Editor -->\n <mj-code-editor #sqlEditor\n (change)=\"onSQLChange($event)\"\n (CompositionTokenClick)=\"onCompositionTokenClick($event)\"\n [language]=\"'sql'\"\n class=\"sql-editor\">\n </mj-code-editor>\n\n @if (SaveDiagnostics.length === 0 && ExtractionDiagnostics.length > 0) {\n <mj-query-diagnostics class=\"extraction-diagnostics\"\n [Headline]=\"'Last metadata extraction: ' + ExtractionStatusLabel\"\n [Diagnostics]=\"ExtractionDiagnostics\"\n [Severity]=\"ExtractionSeverity\"\n [LocationsClickable]=\"true\"\n (LocationClick)=\"OnDiagnosticLocationClick($event)\" />\n }\n\n <!-- SQL Filters Help (Below Editor) -->\n @if (showFiltersHelp) {\n <div class=\"filters-help\">\n <h6 class=\"filters-help-title\">\n <i class=\"fa-solid fa-filter\"></i> Available SQL Filters for Parameterized Queries\n </h6>\n <div class=\"filters-grid\">\n @for (filter of sqlFilters; track filter.name) {\n <div class=\"filter-card\">\n <div class=\"filter-name\">{{ filter.name }}</div>\n <div class=\"filter-description\">{{ filter.description }}</div>\n <div class=\"filter-syntax\">{{ filter.exampleSyntax }}</div>\n @if (filter.notes) {\n <div class=\"filter-notes\">{{ filter.notes }}</div>\n }\n </div>\n }\n </div>\n </div>\n }\n </div>\n </mj-accordion-panel>\n\n <!-- Technical Description Panel -->\n @if (record.TechnicalDescription || EditMode) {\n <mj-accordion-panel SectionKey=\"description\" SectionTitle=\"Technical Description\" SectionIcon=\"fa-solid fa-book\"\n [(Expanded)]=\"technicalDescriptionPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-book panel-icon\"></i>\n Technical Description\n @if (record.TechnicalDescription) {\n <span class=\"panel-badge defined\">— Documented</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (EditMode) {\n <textarea class=\"mj-input technical-description-textarea\"\n [(ngModel)]=\"record.TechnicalDescription\"\n name=\"technicalDescription\"\n rows=\"8\"\n placeholder=\"Technical documentation of the query logic, performance considerations, and parameter usage. Supports markdown and mermaid diagrams.\">\n </textarea>\n @if (record.TechnicalDescription) {\n <div class=\"technical-description-preview\">\n <div class=\"preview-label\">\n <i class=\"fa-solid fa-eye\"></i> Preview\n </div>\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n } @else {\n <div class=\"technical-description-view\">\n <mj-markdown\n [data]=\"record.TechnicalDescription || ''\"\n [enableMermaid]=\"true\"\n [enableHighlight]=\"true\"\n [enableCollapsibleHeadings]=\"false\"\n [enableSmartypants]=\"true\">\n </mj-markdown>\n </div>\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Parameters Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel SectionKey=\"parameters\" SectionTitle=\"Parameters\" SectionIcon=\"fa-solid fa-sliders\"\n [(Expanded)]=\"parametersPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-sliders panel-icon\"></i>\n Parameters\n @if (queryParameters.length > 0) {\n <span class=\"panel-badge count\">{{ queryParameters.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingParameters) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading parameters...\"></mj-loading>\n </div>\n } @else {\n @if (queryParameters.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-sliders\"\n Title=\"No Parameters Defined\"\n Message=\"Parameters are found in the SQL when you save. Add one here to describe it before it is used.\"\n [ActionText]=\"EditMode ? 'Add First Parameter' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addParameter()\" />\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addParameter()\">\n <i class=\"fa-solid fa-plus\"></i> Add Parameter\n </button>\n </div>\n }\n <mj-query-parameters-grid\n [Parameters]=\"queryParameters\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteParameter($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Fields Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel SectionKey=\"fields\" SectionTitle=\"Fields\" SectionIcon=\"fa-solid fa-table\"\n [(Expanded)]=\"fieldsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-table panel-icon\"></i>\n Fields\n @if (queryFields.length > 0) {\n <span class=\"panel-badge count\">{{ queryFields.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingFields) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading fields...\"></mj-loading>\n </div>\n } @else {\n @if (queryFields.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-table\"\n Title=\"No Fields Defined\"\n Message=\"Output fields are described by the database server when you save. Add one here to annotate it.\"\n [ActionText]=\"EditMode ? 'Add First Field' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addField()\" />\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addField()\">\n <i class=\"fa-solid fa-plus\"></i> Add Field\n </button>\n </div>\n }\n <mj-query-fields-grid\n [Fields]=\"queryFields\"\n [EditMode]=\"EditMode\"\n (Remove)=\"deleteField($event)\"\n (OpenSourceField)=\"OnOpenSourceField($event)\"\n (Changed)=\"OnChildRowChanged()\" />\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Dependent Queries Panel -->\n @if (record.IsSaved && DependentQueries.length > 0) {\n <mj-accordion-panel SectionKey=\"dependents\" SectionTitle=\"Dependent Queries\" SectionIcon=\"fa-solid fa-arrow-left\"\n [(Expanded)]=\"dependentsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-arrow-left panel-icon dependents-icon\"></i>\n Dependent Queries\n <span class=\"panel-badge count\">{{ DependentQueries.length }}</span>\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"dependents-description\">\n These queries reference this query via <code>{{\"{{query:\\\"...\\\"}}\"}} </code> composition syntax.\n </div>\n <div class=\"card-grid\">\n @for (dep of DependentQueries; track dep.ID) {\n <div class=\"item-card dependent-card\" (click)=\"onDependentQueryClick(dep)\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-arrow-left item-name-icon dependent-query-icon\"></i>\n {{ dep.Query }}\n </div>\n </div>\n <div class=\"item-card-body\">\n @if (dep.ReferencePath) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-link\"></i> {{ dep.ReferencePath }}\n </span>\n </div>\n }\n @if (dep.Alias) {\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <strong>Alias:</strong> <code class=\"meta-code\">{{ dep.Alias }}</code>\n </span>\n </div>\n }\n </div>\n <div class=\"item-card-footer\">\n <span class=\"open-link\">\n <i class=\"fa-solid fa-arrow-up-right-from-square\"></i> Open\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Query Entities Panel -->\n @if (record.IsSaved || EditMode) {\n <mj-accordion-panel SectionKey=\"entities\" SectionTitle=\"Entities\" SectionIcon=\"fa-solid fa-database\"\n [(Expanded)]=\"entitiesPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-database panel-icon\"></i>\n Entities\n @if (queryEntities.length > 0) {\n <span class=\"panel-badge count\">{{ queryEntities.length }}</span>\n }\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingEntities) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading entities...\"></mj-loading>\n </div>\n } @else {\n @if (queryEntities.length === 0) {\n <mj-empty-state Icon=\"fa-solid fa-database\"\n Title=\"No Entities Tracked\"\n Message=\"Track which entities this query uses for documentation.\"\n [ActionText]=\"EditMode ? 'Add First Entity' : ''\"\n ActionIcon=\"fa-solid fa-plus\"\n (Action)=\"addEntity()\" />\n } @else {\n @if (EditMode) {\n <div class=\"panel-toolbar\">\n <button type=\"button\" class=\"add-item-btn\" (click)=\"addEntity()\">\n <i class=\"fa-solid fa-plus\"></i> Add Entity\n </button>\n </div>\n }\n <div class=\"card-grid\">\n @for (entity of queryEntities; track entity.ID || $index) {\n <div class=\"item-card\">\n <div class=\"item-card-header\">\n <div class=\"item-name\">\n <i class=\"fa-solid fa-table item-name-icon entity-icon\"></i>\n {{ entity.Entity || 'Select Entity...' }}\n </div>\n @if (EditMode) {\n <div class=\"entity-dropdown-wrapper\">\n <mj-dropdown\n [(ngModel)]=\"entity.EntityID\"\n [name]=\"'entity_' + (entity.ID || $index)\"\n [Data]=\"getEntityOptions()\"\n TextField=\"text\"\n ValueField=\"id\"\n [ValuePrimitive]=\"true\"\n Placeholder=\"Select entity...\"\n class=\"entity-dropdown\">\n </mj-dropdown>\n </div>\n }\n </div>\n @if (!EditMode && entity.Entity) {\n <div class=\"item-card-body\">\n <div class=\"item-meta\">\n <span class=\"meta-tag\">\n <i class=\"fa-solid fa-database\"></i> Data Source\n </span>\n @if (entity.DetectionMethod) {\n <span class=\"meta-tag\" title=\"How this entity link was detected\">\n <strong>Detected by:</strong> {{ entity.DetectionMethod }}\n </span>\n }\n </div>\n </div>\n }\n @if (EditMode) {\n <div class=\"item-card-actions\">\n <button type=\"button\" class=\"item-action-btn delete\" (click)=\"deleteEntity(entity)\" title=\"Delete entity\">\n <i class=\"fa-solid fa-trash\"></i>\n </button>\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n </mj-accordion-panel>\n }\n\n <!-- Details Panel -->\n <mj-accordion-panel SectionKey=\"details\" SectionTitle=\"Details\" SectionIcon=\"fa-solid fa-info-circle\"\n [(Expanded)]=\"detailsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-info-circle panel-icon\"></i>\n Details\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n <div class=\"details-grid\">\n <!-- Reusable -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-puzzle-piece\"></i> Reusable\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.Reusable\" name=\"reusable\"></mj-switch>\n <div class=\"detail-hint\">Allow other queries to reference this query using composition syntax</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.Reusable) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Reusable</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Not Reusable</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache Enabled -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-bolt\"></i> Cache Enabled\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.CacheEnabled\" name=\"cacheEnabled\"></mj-switch>\n <div class=\"detail-hint\">Cache query results in memory to reduce database load on repeated runs</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.CacheEnabled) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Caching On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Caching Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Cache TTL -->\n @if (record.CacheEnabled) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clock\"></i> Cache TTL (Minutes)\n </label>\n @if (EditMode) {\n <input class=\"mj-input detail-input-narrow\"\n type=\"number\"\n [(ngModel)]=\"record.CacheTTLMinutes\"\n name=\"cacheTTLMinutes\"\n min=\"1\"\n placeholder=\"Default\" />\n <div class=\"detail-hint\">How long cached results remain valid. Leave blank for default TTL.</div>\n } @else {\n <div class=\"detail-value\">{{ record.CacheTTLMinutes != null ? record.CacheTTLMinutes + ' min' : 'Default' }}</div>\n }\n </div>\n }\n\n <!-- Audit Query Runs -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-clipboard-list\"></i> Audit Runs\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.AuditQueryRuns\" name=\"auditQueryRuns\"></mj-switch>\n <div class=\"detail-hint\">Log all executions of this query to the Audit Log for tracking and compliance</div>\n } @else {\n <div class=\"detail-value\">\n @if (record.AuditQueryRuns) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Auditing On</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> Auditing Off</span>\n }\n </div>\n }\n </div>\n\n <!-- Uses Template -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-file-code\"></i> Template Usage\n </label>\n @if (EditMode) {\n <mj-switch [(ngModel)]=\"record.UsesTemplate\" name=\"usesTemplate\"></mj-switch>\n } @else {\n <div class=\"detail-value\">\n @if (record.UsesTemplate) {\n <span class=\"detail-tag positive\"><i class=\"fa-solid fa-check\"></i> Uses Templates</span>\n } @else {\n <span class=\"detail-tag neutral\"><i class=\"fa-solid fa-times\"></i> No Templates</span>\n }\n </div>\n }\n </div>\n\n <!-- Created Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-plus\"></i> Created\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_CreatedAt) }}</div>\n </div>\n\n <!-- Updated Date -->\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-calendar-check\"></i> Last Updated\n </label>\n <div class=\"detail-value\">{{ formatDate(record.__mj_UpdatedAt) }}</div>\n </div>\n\n <!-- Quality Rank -->\n @if (record.QualityRank != null) {\n <div class=\"detail-item\">\n <label class=\"detail-label\">\n <i class=\"fa-solid fa-star\"></i> Quality Rank\n </label>\n <div class=\"detail-value\">{{ record.QualityRank }}/10</div>\n </div>\n }\n </div>\n </div>\n </mj-accordion-panel>\n\n <!-- Permissions Panel -->\n @if (record.IsSaved) {\n <mj-accordion-panel SectionKey=\"permissions\" SectionTitle=\"Permissions\" SectionIcon=\"fa-solid fa-shield-alt\"\n [(Expanded)]=\"permissionsPanelExpanded\"\n class=\"query-panel\">\n <ng-template mjAccordionTitle>\n <span class=\"panel-title\">\n <i class=\"fa-solid fa-shield-alt panel-icon\"></i>\n Permissions\n </span>\n </ng-template>\n\n <div class=\"panel-body\">\n @if (isLoadingPermissions) {\n <div class=\"panel-loading\">\n <mj-loading text=\"Loading permissions...\"></mj-loading>\n </div>\n } @else {\n @if (queryPermissions.length === 0 && !EditMode) {\n <mj-empty-state Icon=\"fa-solid fa-shield-halved\"\n Title=\"No Permissions Set\"\n Message=\"This query uses default permissions.\" />\n } @else {\n @if (EditMode) {\n <mj-explorer-entity-data-grid\n [Params]=\"BuildRelationshipViewParamsByEntityName('MJ: Query Permissions','QueryID')\"\n [NewRecordValues]=\"NewRecordValues('MJ: Query Permissions')\"\n [AllowLoad]=\"true\"\n [ShowToolbar]=\"false\">\n </mj-explorer-entity-data-grid>\n } @else {\n <div class=\"permissions-list\">\n @for (permission of queryPermissions; track permission.ID) {\n <div class=\"permission-card\">\n <i class=\"fa-solid fa-users permission-icon\"></i>\n <div class=\"permission-info\">\n <div class=\"permission-role\">{{ permission.Role }}</div>\n <div class=\"permission-type\">Role Permission</div>\n </div>\n <span class=\"permission-badge\">\n <i class=\"fa-solid fa-play\"></i> Can Execute\n </span>\n </div>\n }\n </div>\n }\n }\n }\n </div>\n </mj-accordion-panel>\n }\n </mj-accordion-sections>\n\n </div>\n </form>\n</mj-record-form-container>\n\n<!-- Refresh metadata: always a dry run first unless the user turned that off -->\n<mj-query-refresh-dialog\n [Visible]=\"ShowRefreshDialog\"\n [Scope]=\"RefreshScope\"\n [ScopeLabel]=\"RefreshScopeLabel\"\n [AllowSkipDryRun]=\"true\"\n [Provider]=\"ProviderToUse\"\n (Closed)=\"OnRefreshDialogClosed()\"\n (Applied)=\"OnRefreshApplied($event)\" />\n\n<!-- Query Run Dialog -->\n<mj-query-run-dialog\n [query]=\"record\"\n [parameters]=\"queryParameters\"\n [(isVisible)]=\"showRunDialog\"\n (onClose)=\"onRunDialogClose()\">\n</mj-query-run-dialog>\n}\n", styles: [".content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n", "/* Override shared form-styles to enable flex layout */\n:host {\n display: block;\n height: 100%;\n}\n\n/* Override the shared record-form min-height so flex layout works properly */\n.record-form {\n min-height: 0 !important;\n}\n\n/* ========================================\n Saving Overlay\n ======================================== */\n\n.saving-overlay {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 16px;\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n border-bottom: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-secondary);\n font-size: 13px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.saving-spinner {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.content-saving {\n pointer-events: none;\n opacity: 0.6;\n}\n\n/* ========================================\n Header Section \u2014 matches Query Browser gradient\n ======================================== */\n\n.query-header {\n flex-shrink: 0;\n background: var(--mj-brand-primary);\n border-bottom: none;\n padding: 0;\n}\n\n.query-header-content {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px 20px;\n}\n\n.query-header-top {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 20px;\n}\n\n.query-name-section {\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.query-title-icon {\n color: rgba(255, 255, 255, 0.85);\n font-size: 1.3em;\n flex-shrink: 0;\n}\n\n.query-name-input {\n font-size: 1.2em;\n font-weight: 600;\n min-width: 300px;\n flex: 1;\n}\n\n.query-name-display {\n margin: 0;\n color: var(--mj-text-inverse, white);\n font-weight: 600;\n font-size: 1.2em;\n flex: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.query-header-actions {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.run-query-btn {\n white-space: nowrap;\n}\n\n/* Meta row (category + status) */\n.query-meta-row {\n display: flex;\n gap: 24px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.query-meta-item {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.meta-label {\n font-weight: 500;\n color: rgba(255, 255, 255, 0.75);\n font-size: var(--mj-text-sm);\n min-width: 60px;\n}\n\n.meta-value {\n color: rgba(255, 255, 255, 0.95);\n font-size: var(--mj-text-sm);\n}\n\n.meta-dropdown {\n min-width: 200px;\n}\n\n.status-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n border-radius: var(--mj-radius-xl);\n color: var(--mj-text-inverse, white);\n font-size: var(--mj-text-sm);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-pill i {\n font-size: var(--mj-text-xs);\n}\n\n/* Description row */\n.query-description-row {\n margin-top: 2px;\n}\n\n.query-description-input {\n width: 100%;\n}\n\n.query-description-text {\n margin: 0;\n color: rgba(255, 255, 255, 0.8);\n font-size: var(--mj-text-sm);\n line-height: 1.4;\n}\n\n/* ========================================\n Status Warning Banner\n ======================================== */\n\n\n/* ========================================\n Main Content Area\n ======================================== */\n\n.query-content {\n flex: 1;\n min-height: 0;\n padding: 16px;\n overflow-y: auto;\n background: var(--mj-bg-surface-card);\n}\n\n/* ========================================\n Accordion Panel Overrides \u2014 Modern Style\n ======================================== */\n\n.query-panel {\n margin-bottom: 12px;\n}\n\n::ng-deep .query-content mj-accordion-panel .mj-accordion-panel {\n border: none !important;\n border-radius: var(--mj-radius-md) !important;\n margin-bottom: 12px !important;\n box-shadow: var(--mj-shadow-sm) !important;\n background: var(--mj-bg-surface) !important;\n overflow: hidden !important;\n}\n\n::ng-deep .query-content .mj-accordion-header {\n background: var(--mj-bg-surface) !important;\n border: none !important;\n padding: 14px 18px !important;\n border-radius: var(--mj-radius-md) !important;\n color: var(--mj-text-primary) !important;\n font-weight: 600 !important;\n font-size: var(--mj-text-sm) !important;\n transition: background 0.15s ease !important;\n}\n\n::ng-deep .query-content .mj-accordion-header:hover {\n background: var(--mj-bg-surface-card) !important;\n}\n\n::ng-deep .query-content .mj-accordion-panel--expanded .mj-accordion-header {\n background: var(--mj-brand-primary) !important;\n color: var(--mj-brand-on-primary) !important;\n border-radius: var(--mj-radius-md) var(--mj-radius-md) 0 0 !important;\n outline-color: var(--mj-text-inverse);\n}\n\n::ng-deep .query-content .mj-accordion-body {\n padding: 0 !important;\n border: none !important;\n background: var(--mj-bg-surface) !important;\n border-radius: 0 0 var(--mj-radius-md) var(--mj-radius-md) !important;\n}\n\n/* ========================================\n Panel Title & Badges\n ======================================== */\n\n.panel-title-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n}\n\n.panel-icon {\n opacity: 0.7;\n}\n\n.sql-icon {\n color: var(--mj-brand-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-icon {\n color: rgba(255, 255, 255, 0.85) !important;\n opacity: 1;\n}\n\n.panel-badge {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n}\n\n.panel-badge.defined {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.panel-badge.count {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-badge.count {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n::ng-deep .mj-accordion-panel--expanded .panel-badge.defined {\n background: rgba(255, 255, 255, 0.25) !important;\n}\n\n.filters-help-btn {\n display: flex;\n align-items: center;\n gap: 4px;\n margin-right: 8px;\n font-size: var(--mj-text-xs);\n}\n\n/* ========================================\n Panel Body & Loading\n ======================================== */\n\n.panel-body {\n padding: 16px 0;\n}\n\n.panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px;\n}\n\n.panel-toolbar {\n display: flex;\n justify-content: flex-end;\n padding: 0 20px 12px;\n}\n\n/* ========================================\n SQL Panel\n ======================================== */\n\n.sql-panel-content {\n display: flex;\n flex-direction: column;\n}\n\n.sql-editor {\n flex: 1;\n height: 400px;\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-sm);\n margin: 16px;\n}\n\n/* Filters Help */\n.filters-help {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 16px;\n margin: 0 16px 16px;\n}\n\n.filters-help-title {\n margin: 0 0 12px 0;\n color: var(--mj-text-primary);\n font-weight: 600;\n font-size: var(--mj-text-sm);\n}\n\n.filters-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 10px;\n}\n\n.filter-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 12px;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.filter-card:hover {\n transform: translateY(-1px);\n box-shadow: var(--mj-shadow-md);\n}\n\n.filter-name {\n font-family: 'Courier New', monospace;\n font-weight: bold;\n color: var(--mj-brand-primary);\n margin-bottom: 4px;\n}\n\n.filter-description {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.filter-syntax {\n font-family: 'Courier New', monospace;\n font-size: var(--mj-text-xs);\n background: var(--mj-bg-surface-card);\n padding: 6px;\n border-radius: var(--mj-radius-sm);\n margin-bottom: 4px;\n}\n\n.filter-notes {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n font-style: italic;\n}\n\n/* ========================================\n Card Grid (Parameters, Fields, Entities)\n ======================================== */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));\n gap: 12px;\n padding: 0 20px 20px;\n}\n\n.item-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px;\n transition: all 0.15s ease;\n cursor: pointer;\n position: relative;\n}\n\n.item-card:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: 0 2px 8px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.item-card.required {\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.item-card-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n margin-bottom: 10px;\n}\n\n.item-name {\n font-weight: 600;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.item-name-icon {\n font-size: var(--mj-text-sm);\n}\n\n.item-name-icon.param-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.field-icon {\n color: var(--mj-brand-primary);\n}\n\n.item-name-icon.entity-icon {\n color: var(--mj-status-success);\n}\n\n.item-badges {\n display: flex;\n gap: 6px;\n}\n\n.item-badge {\n padding: 2px 8px;\n border-radius: var(--mj-radius-lg);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-inverse);\n}\n\n.item-badge.required {\n background: var(--mj-status-warning);\n}\n\n.item-badge.type {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.item-badge.sequence {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: color-mix(in srgb, var(--mj-brand-primary) 80%, var(--mj-text-violet));\n}\n\n.item-card-body {\n color: var(--mj-text-secondary);\n font-size: var(--mj-text-sm);\n}\n\n.item-description {\n margin-bottom: 8px;\n}\n\n.item-meta {\n display: flex;\n gap: 16px;\n font-size: var(--mj-text-xs);\n}\n\n.meta-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.meta-code {\n background: var(--mj-bg-surface-card);\n padding: 1px 4px;\n border-radius: var(--mj-radius-sm);\n font-size: var(--mj-text-xs);\n}\n\n/* Card actions (edit/delete) */\n.item-actions {\n position: absolute;\n top: 10px;\n right: 10px;\n display: flex;\n gap: 4px;\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n\n.item-card:hover .item-actions {\n opacity: 1;\n}\n\n.item-card-actions {\n display: flex;\n justify-content: flex-end;\n margin-top: 8px;\n}\n\n.item-action-btn {\n background: none;\n border: none;\n padding: 4px 8px;\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n color: var(--mj-text-disabled);\n transition: all 0.15s ease;\n}\n\n.item-action-btn:hover {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-brand-primary);\n}\n\n.item-action-btn.delete:hover {\n background: color-mix(in srgb, var(--mj-status-error) 8%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Entity dropdown in card */\n.entity-dropdown-wrapper {\n flex: 1;\n margin-left: 12px;\n}\n\n.entity-dropdown {\n width: 100%;\n}\n\n/* ========================================\n Details Grid\n ======================================== */\n\n.details-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));\n gap: 16px;\n padding: 16px 20px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.detail-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-disabled);\n display: flex;\n align-items: center;\n gap: 6px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.detail-value {\n font-size: var(--mj-text-sm);\n color: var(--mj-text-primary);\n}\n\n.detail-tag {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: var(--mj-text-sm);\n}\n\n.detail-tag.positive {\n color: var(--mj-status-success);\n}\n\n.detail-tag.neutral {\n color: var(--mj-text-disabled);\n}\n\n.detail-hint {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-muted);\n line-height: 1.4;\n}\n\n.detail-input-narrow {\n max-width: 120px;\n padding: 4px 8px;\n font-size: var(--mj-text-sm);\n}\n\n/* ========================================\n Permissions\n ======================================== */\n\n.permissions-list {\n padding: 0 20px;\n}\n\n.permission-card {\n display: flex;\n align-items: center;\n gap: 14px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n margin-bottom: 8px;\n}\n\n.permission-icon {\n font-size: 1.3em;\n color: var(--mj-brand-primary);\n}\n\n.permission-info {\n flex: 1;\n}\n\n.permission-role {\n font-weight: 600;\n color: var(--mj-text-primary);\n font-size: var(--mj-text-sm);\n}\n\n.permission-type {\n font-size: var(--mj-text-xs);\n color: var(--mj-text-disabled);\n}\n\n.permission-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n padding: 4px 10px;\n border-radius: var(--mj-radius-md);\n font-size: var(--mj-text-xs);\n font-weight: 500;\n}\n\n/* ========================================\n Empty State\n ======================================== */\n\n/* ========================================\n Buttons\n ======================================== */\n\n.add-item-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n border: none;\n padding: 8px 16px;\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n font-size: var(--mj-text-sm);\n}\n\n.add-item-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 85%, black);\n box-shadow: 0 2px 6px color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ========================================\n Badge (reused across components)\n ======================================== */\n\n.badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n/* ========================================\n Technical Description Panel\n ======================================== */\n\n.technical-description-textarea {\n width: 100%;\n font-family: 'Consolas', 'Monaco', 'Courier New', monospace;\n font-size: 13px;\n}\n\n.technical-description-preview {\n margin-top: 16px;\n border-top: 1px solid var(--mj-border-default);\n padding-top: 12px;\n}\n\n.preview-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.technical-description-view {\n max-height: 500px;\n overflow-y: auto;\n padding: 12px 16px;\n}\n\n/* Dependent Queries */\n.dependents-icon {\n color: var(--mj-status-warning);\n}\n\n.dependents-description {\n padding: 0 20px 12px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.dependents-description code {\n background: var(--mj-bg-surface-sunken);\n padding: 1px 5px;\n border-radius: 3px;\n font-size: 12px;\n}\n\n.dependent-card {\n cursor: pointer;\n border-left: 3px solid var(--mj-status-warning) !important;\n}\n\n.dependent-card:hover {\n border-left-color: var(--mj-status-warning-text) !important;\n background: color-mix(in srgb, var(--mj-status-warning) 8%, var(--mj-bg-surface)) !important;\n}\n\n.dependent-query-icon {\n color: var(--mj-status-warning) !important;\n}\n\n.item-card-footer {\n padding-top: 8px;\n border-top: 1px solid var(--mj-bg-surface-sunken);\n margin-top: 8px;\n}\n\n.open-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n}\n\n.dependent-card:hover .open-link {\n color: var(--mj-brand-primary-hover);\n}\n\n/* Category selector row: tree-dropdown + create/edit icon buttons */\n.meta-dropdown-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.meta-dropdown-row .meta-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n/* \u2500\u2500\u2500 Metadata extraction status \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.extraction-badge {\n --extraction-accent: var(--mj-text-muted);\n display: inline-flex;\n align-items: center;\n border-radius: var(--mj-radius-full);\n padding: 2px var(--mj-space-3);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-medium);\n color: var(--extraction-accent);\n background: color-mix(in srgb, var(--extraction-accent) 12%, transparent);\n border: 1px solid color-mix(in srgb, var(--extraction-accent) 30%, transparent);\n white-space: nowrap;\n}\n\n.extraction-badge--ok { --extraction-accent: var(--mj-status-success); }\n.extraction-badge--warning { --extraction-accent: var(--mj-status-warning); }\n.extraction-badge--error { --extraction-accent: var(--mj-status-error); }\n.extraction-badge--skipped,\n.extraction-badge--none { --extraction-accent: var(--mj-text-muted); }\n\n.save-diagnostics {\n margin-bottom: var(--mj-space-3);\n}\n\n.extraction-diagnostics {\n margin-top: var(--mj-space-3);\n}\n\n/* The header sits on the brand colour: a light pill and a light outline button stay readable. */\n.query-header .extraction-badge {\n background: var(--mj-bg-surface);\n}\n\n.query-header button.refresh-metadata-btn {\n color: var(--mj-text-inverse);\n border-color: color-mix(in srgb, var(--mj-text-inverse) 60%, transparent);\n background: transparent;\n}\n\n.query-header button.refresh-metadata-btn:hover {\n background: color-mix(in srgb, var(--mj-text-inverse) 15%, transparent);\n}\n\n/* Phone (375px): the metadata rows wrap instead of clipping their trailing button. */\n@media (max-width: 768px) {\n .query-meta-item,\n .meta-dropdown-row {\n flex-wrap: wrap;\n }\n}\n\n/* Phone: sections sit on the page's 12px gutter, so the content area drops its side padding\n (it would indent every section twice). */\n@media (max-width: 768px) {\n .query-content {\n padding: 12px 0;\n background: transparent;\n }\n\n /* The identity row shows the whole name on a phone instead of an ellipsis */\n .query-name-section {\n flex-wrap: wrap;\n row-gap: 4px;\n }\n\n .query-name-display {\n white-space: normal;\n overflow-wrap: anywhere;\n }\n\n /* The identity row's status chip is compact, like the other phone heroes' */\n .query-name-section .status-pill.phone-hero-only {\n flex-shrink: 0;\n padding: 2px 8px;\n font-size: var(--mj-text-xs);\n }\n\n /* The phone hero matches the other forms' heroes (Actions, AI Prompts, Templates): a card\n surface with a bottom rule and the standard text tokens, in place of the desktop brand bar.\n The phone hero's own 12px is the only gutter. */\n .query-header.phone-hero {\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n color: var(--mj-text-primary); /* the summary line inherits this; white would vanish in light theme */\n }\n\n .query-header.phone-hero .query-header-content {\n padding: 0;\n gap: 8px;\n }\n\n .query-header.phone-hero .query-title-icon {\n color: var(--mj-brand-primary);\n }\n\n .query-header.phone-hero .query-name-display {\n color: var(--mj-text-secondary);\n }\n\n .query-header.phone-hero .meta-label {\n color: var(--mj-text-muted);\n }\n\n .query-header.phone-hero .meta-value {\n color: var(--mj-text-primary);\n }\n\n .query-header.phone-hero .query-description-text {\n color: var(--mj-text-secondary);\n }\n\n /* The desktop rule above styles this button for the brand bar (inverse text); on the card\n surface that text vanishes, so it takes the standard secondary-on-surface pair. Size=\"sm\"\n is 34px tall; a touch target is 44px, like the hero's Run. */\n .query-header.phone-hero button.refresh-metadata-btn {\n min-height: 44px;\n color: var(--mj-text-secondary);\n border-color: var(--mj-border-default);\n }\n\n .query-header.phone-hero button.refresh-metadata-btn:hover {\n background: var(--mj-bg-surface-hover);\n }\n}\n", "/* ============================================\n PHONE HERO (design call 6A), shared by the custom forms that own a hero.\n Under 768px the hero keeps icon, name, status and the primary action. Anything tagged\n .phone-hero-detail hides while the hero is compact and comes back when the summary line is\n tapped. Edit mode is untouched: the host only gets .hero-compact / .hero-view in view mode.\n Host: .phone-hero [class.hero-view]=\"!EditMode\" [class.hero-compact]=\"!EditMode && !HeroDetailsOpen\"\n Tags: .phone-hero-detail hidden while compact\n .phone-hero-hide hidden in view mode (said elsewhere on the phone hero)\n .phone-hero-only shown only on phones\n .phone-hero-top a title + action row that stacks\n .phone-hero-actions / .phone-hero-run the primary action, full width at 44px\n .phone-hero-stats a metric row that reflows to a 2-up grid when the hero is expanded\n .phone-hero-status a status chip in the identity row (with .phone-hero-only)\n ============================================ */\n.phone-hero-summary,\n.phone-hero-only {\n display: none;\n}\n\n@media (max-width: 768px) {\n .phone-hero {\n padding: 12px !important;\n }\n\n /* !important: several heroes carry inline display/padding styles on these rows */\n .phone-hero.hero-compact .phone-hero-detail,\n .phone-hero.hero-view .phone-hero-hide {\n display: none !important;\n }\n\n .phone-hero-only {\n display: inline-flex;\n }\n\n /* Lower specificity than the compact rule above, so a compact hero still hides it */\n .phone-hero .phone-hero-stats {\n display: grid !important;\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 8px;\n }\n\n .phone-hero-status {\n align-items: center;\n gap: 4px;\n margin-left: 8px;\n padding: 2px 8px;\n border-radius: var(--mj-radius-full, 999px);\n color: var(--mj-text-secondary);\n background: var(--mj-bg-surface-sunken);\n font-size: var(--mj-text-xs);\n font-weight: var(--mj-font-semibold);\n vertical-align: middle;\n white-space: nowrap;\n }\n\n /* data-status comes from RunStatusKind(); the -text / -bg pairs keep contrast in both themes */\n .phone-hero-status[data-status=\"running\"] { color: var(--mj-status-warning-text); background: var(--mj-status-warning-bg); }\n .phone-hero-status[data-status=\"success\"] { color: var(--mj-status-success-text); background: var(--mj-status-success-bg); }\n .phone-hero-status[data-status=\"error\"] { color: var(--mj-status-error-text); background: var(--mj-status-error-bg); }\n .phone-hero-status[data-status=\"info\"] { color: var(--mj-status-info-text); background: var(--mj-status-info-bg); }\n\n .phone-hero-top {\n flex-direction: column;\n align-items: stretch;\n gap: 10px;\n }\n\n .phone-hero-actions {\n width: 100%;\n }\n\n .phone-hero .phone-hero-run {\n width: 100%;\n min-height: 44px;\n justify-content: center;\n }\n\n /* Inherits the hero's text colour, so it reads on light heroes and on the brand-blue\n Queries hero alike; a muted token would be grey on blue. */\n .phone-hero-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n min-height: 44px;\n margin-top: 8px;\n padding: 0 4px;\n border: 0;\n border-top: 1px solid color-mix(in srgb, currentColor 20%, transparent);\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: var(--mj-text-sm);\n text-align: left;\n cursor: pointer;\n opacity: 0.85;\n }\n\n .phone-hero-summary:focus-visible {\n outline: none;\n box-shadow: var(--mj-focus-ring);\n }\n\n .phone-hero-summary-text {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .phone-hero-summary > i {\n flex-shrink: 0;\n transition: transform 0.15s ease;\n }\n\n .phone-hero-summary[aria-expanded=\"true\"] > i {\n transform: rotate(180deg);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .phone-hero-summary > i {\n transition: none;\n }\n}\n"] }]
|
|
2321
2370
|
}], null, { SqlEditor: [{
|
|
2322
2371
|
type: ViewChild,
|
|
2323
2372
|
args: ['sqlEditor']
|
|
2324
2373
|
}] }); })();
|
|
2325
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJQueryFormComponentExtended, { className: "MJQueryFormComponentExtended", filePath: "src/lib/custom/Queries/query-form.component.ts", lineNumber:
|
|
2374
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJQueryFormComponentExtended, { className: "MJQueryFormComponentExtended", filePath: "src/lib/custom/Queries/query-form.component.ts", lineNumber: 32 }); })();
|
|
2326
2375
|
//# sourceMappingURL=query-form.component.js.map
|