@memberjunction/ng-core-entity-forms 6.2.1 → 6.3.0-edge.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
@@ -12,6 +12,7 @@ import { IndexByUUID, RegisterClass, UUIDMap, UUIDsEqual } from '@memberjunction
|
|
|
12
12
|
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
13
13
|
import { SharedService } from '@memberjunction/ng-shared';
|
|
14
14
|
import { MJEntityFormComponent } from '../../generated/Entities/MJEntity/mjentity.form.component';
|
|
15
|
+
import { IsPhoneViewport, WatchPhoneViewport } from '@memberjunction/ng-ui-components';
|
|
15
16
|
import * as i0 from "@angular/core";
|
|
16
17
|
import * as i1 from "@angular/common";
|
|
17
18
|
import * as i2 from "@angular/forms";
|
|
@@ -32,15 +33,15 @@ const _forTrack3 = ($index, $item) => $item.Info.ID;
|
|
|
32
33
|
const _forTrack4 = ($index, $item) => $item.OrganicKey.ID + $item.SourceEntityName;
|
|
33
34
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
34
35
|
i0.ɵɵelementStart(0, "span", 8);
|
|
35
|
-
i0.ɵɵelement(1, "i",
|
|
36
|
+
i0.ɵɵelement(1, "i", 43);
|
|
36
37
|
i0.ɵɵtext(2, " Virtual ");
|
|
37
38
|
i0.ɵɵelementEnd();
|
|
38
39
|
} }
|
|
39
40
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
40
41
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
41
|
-
i0.ɵɵelementStart(0, "span",
|
|
42
|
+
i0.ɵɵelementStart(0, "span", 44);
|
|
42
43
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_12_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
43
|
-
i0.ɵɵelement(1, "i",
|
|
44
|
+
i0.ɵɵelement(1, "i", 45);
|
|
44
45
|
i0.ɵɵtext(2);
|
|
45
46
|
i0.ɵɵelementEnd();
|
|
46
47
|
} if (rf & 2) {
|
|
@@ -49,17 +50,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_12_Template(rf,
|
|
|
49
50
|
i0.ɵɵtextInterpolate1(" IS-A ", ctx_r2.ParentChain[0] == null ? null : ctx_r2.ParentChain[0].Name, " ");
|
|
50
51
|
} }
|
|
51
52
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵelementStart(0, "span",
|
|
53
|
-
i0.ɵɵelement(1, "i",
|
|
53
|
+
i0.ɵɵelementStart(0, "span", 48);
|
|
54
|
+
i0.ɵɵelement(1, "i", 49);
|
|
54
55
|
i0.ɵɵtext(2, " Overlapping Subtypes ");
|
|
55
56
|
i0.ɵɵelementEnd();
|
|
56
57
|
} }
|
|
57
58
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
-
i0.ɵɵelementStart(0, "span",
|
|
59
|
-
i0.ɵɵelement(1, "i",
|
|
59
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
60
|
+
i0.ɵɵelement(1, "i", 47);
|
|
60
61
|
i0.ɵɵtext(2);
|
|
61
62
|
i0.ɵɵelementEnd();
|
|
62
|
-
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_13_Conditional_3_Template, 3, 0, "span",
|
|
63
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_13_Conditional_3_Template, 3, 0, "span", 48);
|
|
63
64
|
} if (rf & 2) {
|
|
64
65
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
65
66
|
i0.ɵɵadvance(2);
|
|
@@ -69,7 +70,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_13_Template(rf,
|
|
|
69
70
|
} }
|
|
70
71
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
71
72
|
i0.ɵɵelementStart(0, "div", 10);
|
|
72
|
-
i0.ɵɵelement(1, "i",
|
|
73
|
+
i0.ɵɵelement(1, "i", 50);
|
|
73
74
|
i0.ɵɵtext(2);
|
|
74
75
|
i0.ɵɵelementEnd();
|
|
75
76
|
} if (rf & 2) {
|
|
@@ -99,11 +100,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_42_Template(rf,
|
|
|
99
100
|
} }
|
|
100
101
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
101
102
|
i0.ɵɵelementStart(0, "span", 23);
|
|
102
|
-
i0.ɵɵelement(1, "i",
|
|
103
|
+
i0.ɵɵelement(1, "i", 51);
|
|
103
104
|
i0.ɵɵelementEnd();
|
|
104
105
|
} }
|
|
105
|
-
function
|
|
106
|
-
i0.ɵɵelementStart(0, "span",
|
|
106
|
+
function MJEntityFormComponentExtended_Conditional_0_For_50_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
i0.ɵɵelementStart(0, "span", 54);
|
|
107
108
|
i0.ɵɵtext(1);
|
|
108
109
|
i0.ɵɵelementEnd();
|
|
109
110
|
} if (rf & 2) {
|
|
@@ -111,15 +112,15 @@ function MJEntityFormComponentExtended_Conditional_0_For_49_Conditional_4_Templa
|
|
|
111
112
|
i0.ɵɵadvance();
|
|
112
113
|
i0.ɵɵtextInterpolate(item_r5.badge);
|
|
113
114
|
} }
|
|
114
|
-
function
|
|
115
|
+
function MJEntityFormComponentExtended_Conditional_0_For_50_Template(rf, ctx) { if (rf & 1) {
|
|
115
116
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
116
|
-
i0.ɵɵelementStart(0, "button",
|
|
117
|
-
i0.ɵɵlistener("click", function
|
|
117
|
+
i0.ɵɵelementStart(0, "button", 52);
|
|
118
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_For_50_Template_button_click_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection(item_r5.id)); });
|
|
118
119
|
i0.ɵɵelement(1, "i");
|
|
119
|
-
i0.ɵɵelementStart(2, "span",
|
|
120
|
+
i0.ɵɵelementStart(2, "span", 53);
|
|
120
121
|
i0.ɵɵtext(3);
|
|
121
122
|
i0.ɵɵelementEnd();
|
|
122
|
-
i0.ɵɵconditionalCreate(4,
|
|
123
|
+
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_For_50_Conditional_4_Template, 2, 1, "span", 54);
|
|
123
124
|
i0.ɵɵelementEnd();
|
|
124
125
|
} if (rf & 2) {
|
|
125
126
|
const item_r5 = ctx.$implicit;
|
|
@@ -133,7 +134,7 @@ function MJEntityFormComponentExtended_Conditional_0_For_49_Template(rf, ctx) {
|
|
|
133
134
|
i0.ɵɵadvance();
|
|
134
135
|
i0.ɵɵconditional(item_r5.badge ? 4 : -1);
|
|
135
136
|
} }
|
|
136
|
-
function
|
|
137
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
137
138
|
i0.ɵɵelementStart(0, "span");
|
|
138
139
|
i0.ɵɵtext(1);
|
|
139
140
|
i0.ɵɵelementEnd();
|
|
@@ -142,7 +143,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
142
143
|
i0.ɵɵadvance();
|
|
143
144
|
i0.ɵɵtextInterpolate1("", ctx_r2.stats.encryptedFieldCount, " Encrypted");
|
|
144
145
|
} }
|
|
145
|
-
function
|
|
146
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
146
147
|
i0.ɵɵelementStart(0, "span");
|
|
147
148
|
i0.ɵɵtext(1);
|
|
148
149
|
i0.ɵɵpipe(2, "date");
|
|
@@ -152,14 +153,14 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
152
153
|
i0.ɵɵadvance();
|
|
153
154
|
i0.ɵɵtextInterpolate1("Updated ", i0.ɵɵpipeBind2(2, 1, ctx_r2.entity.RowCountRunAt, "short"));
|
|
154
155
|
} }
|
|
155
|
-
function
|
|
156
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
156
157
|
i0.ɵɵelementStart(0, "span");
|
|
157
158
|
i0.ɵɵtext(1, "Row count");
|
|
158
159
|
i0.ɵɵelementEnd();
|
|
159
160
|
} }
|
|
160
|
-
function
|
|
161
|
-
i0.ɵɵelementStart(0, "span",
|
|
162
|
-
i0.ɵɵelement(1, "i",
|
|
161
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_For_64_Template(rf, ctx) { if (rf & 1) {
|
|
162
|
+
i0.ɵɵelementStart(0, "span", 74);
|
|
163
|
+
i0.ɵɵelement(1, "i", 86);
|
|
163
164
|
i0.ɵɵtext(2);
|
|
164
165
|
i0.ɵɵelementEnd();
|
|
165
166
|
} if (rf & 2) {
|
|
@@ -167,18 +168,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_For_64_Templ
|
|
|
167
168
|
i0.ɵɵadvance(2);
|
|
168
169
|
i0.ɵɵtextInterpolate1(" ", cap_r7, " ");
|
|
169
170
|
} }
|
|
170
|
-
function
|
|
171
|
-
i0.ɵɵelementStart(0, "span",
|
|
172
|
-
i0.ɵɵelement(1, "i",
|
|
171
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
172
|
+
i0.ɵɵelementStart(0, "span", 75);
|
|
173
|
+
i0.ɵɵelement(1, "i", 41);
|
|
173
174
|
i0.ɵɵtext(2, " No API ");
|
|
174
175
|
i0.ɵɵelementEnd();
|
|
175
176
|
} }
|
|
176
|
-
function
|
|
177
|
-
i0.ɵɵelementStart(0, "div",
|
|
178
|
-
i0.ɵɵelement(1, "i",
|
|
177
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
178
|
+
i0.ɵɵelementStart(0, "div", 87);
|
|
179
|
+
i0.ɵɵelement(1, "i", 43);
|
|
179
180
|
i0.ɵɵelementStart(2, "span");
|
|
180
181
|
i0.ɵɵtext(3, "Virtual Entity \u2014 read-only view backed by ");
|
|
181
|
-
i0.ɵɵelementStart(4, "span",
|
|
182
|
+
i0.ɵɵelementStart(4, "span", 89);
|
|
182
183
|
i0.ɵɵtext(5);
|
|
183
184
|
i0.ɵɵelementEnd()()();
|
|
184
185
|
} if (rf & 2) {
|
|
@@ -186,11 +187,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
186
187
|
i0.ɵɵadvance(5);
|
|
187
188
|
i0.ɵɵtextInterpolate(ctx_r2.entity.BaseView);
|
|
188
189
|
} }
|
|
189
|
-
function
|
|
190
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
190
191
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
191
|
-
i0.ɵɵelement(0, "i",
|
|
192
|
-
i0.ɵɵelementStart(1, "span",
|
|
193
|
-
i0.ɵɵlistener("click", function
|
|
192
|
+
i0.ɵɵelement(0, "i", 97);
|
|
193
|
+
i0.ɵɵelementStart(1, "span", 98);
|
|
194
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_For_7_Template_span_click_1_listener() { const parent_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(parent_r9)); });
|
|
194
195
|
i0.ɵɵtext(2);
|
|
195
196
|
i0.ɵɵelementEnd();
|
|
196
197
|
} if (rf & 2) {
|
|
@@ -200,21 +201,21 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
200
201
|
i0.ɵɵadvance();
|
|
201
202
|
i0.ɵɵtextInterpolate1(" ", parent_r9.Name, " ");
|
|
202
203
|
} }
|
|
203
|
-
function
|
|
204
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
204
205
|
i0.ɵɵelementStart(0, "span");
|
|
205
206
|
i0.ɵɵtext(1, "Field Source Inspector");
|
|
206
207
|
i0.ɵɵelementEnd();
|
|
207
208
|
} }
|
|
208
|
-
function
|
|
209
|
-
i0.ɵɵelement(0, "i", 106);
|
|
210
|
-
} }
|
|
211
|
-
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
209
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
212
210
|
i0.ɵɵelement(0, "i", 107);
|
|
213
211
|
} }
|
|
214
|
-
function
|
|
215
|
-
i0.ɵɵ
|
|
212
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
213
|
+
i0.ɵɵelement(0, "i", 108);
|
|
214
|
+
} }
|
|
215
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
216
|
+
i0.ɵɵelementStart(0, "span", 111);
|
|
216
217
|
i0.ɵɵtext(1);
|
|
217
|
-
i0.ɵɵelementStart(2, "span",
|
|
218
|
+
i0.ɵɵelementStart(2, "span", 112);
|
|
218
219
|
i0.ɵɵtext(3);
|
|
219
220
|
i0.ɵɵelementEnd()();
|
|
220
221
|
} if (rf & 2) {
|
|
@@ -225,16 +226,16 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
225
226
|
i0.ɵɵadvance(2);
|
|
226
227
|
i0.ɵɵtextInterpolate(field_r11.Type);
|
|
227
228
|
} }
|
|
228
|
-
function
|
|
229
|
-
i0.ɵɵelementStart(0, "div",
|
|
230
|
-
i0.ɵɵconditionalCreate(3,
|
|
229
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
230
|
+
i0.ɵɵelementStart(0, "div", 104)(1, "div", 105)(2, "span", 106);
|
|
231
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_Conditional_3_Template, 1, 0, "i", 107)(4, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_Conditional_4_Template, 1, 0, "i", 108);
|
|
231
232
|
i0.ɵɵtext(5);
|
|
232
233
|
i0.ɵɵelementEnd();
|
|
233
|
-
i0.ɵɵelementStart(6, "span",
|
|
234
|
+
i0.ɵɵelementStart(6, "span", 109);
|
|
234
235
|
i0.ɵɵtext(7);
|
|
235
236
|
i0.ɵɵelementEnd()();
|
|
236
|
-
i0.ɵɵelementStart(8, "div",
|
|
237
|
-
i0.ɵɵrepeaterCreate(9,
|
|
237
|
+
i0.ɵɵelementStart(8, "div", 110);
|
|
238
|
+
i0.ɵɵrepeaterCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_For_10_Template, 4, 3, "span", 111, _forTrack0);
|
|
238
239
|
i0.ɵɵelementEnd()();
|
|
239
240
|
} if (rf & 2) {
|
|
240
241
|
const group_r12 = ctx.$implicit;
|
|
@@ -248,31 +249,31 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
248
249
|
i0.ɵɵadvance(2);
|
|
249
250
|
i0.ɵɵrepeater(group_r12.Fields);
|
|
250
251
|
} }
|
|
251
|
-
function
|
|
252
|
-
i0.ɵɵelementStart(0, "div",
|
|
253
|
-
i0.ɵɵrepeaterCreate(1,
|
|
252
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
253
|
+
i0.ɵɵelementStart(0, "div", 102);
|
|
254
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_For_2_Template, 11, 8, "div", 103, _forTrack1);
|
|
254
255
|
i0.ɵɵelementEnd();
|
|
255
256
|
} if (rf & 2) {
|
|
256
257
|
const ctx_r2 = i0.ɵɵnextContext(6);
|
|
257
258
|
i0.ɵɵadvance();
|
|
258
259
|
i0.ɵɵrepeater(ctx_r2.isaFieldGroups);
|
|
259
260
|
} }
|
|
260
|
-
function
|
|
261
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
261
262
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
262
|
-
i0.ɵɵelementStart(0, "div",
|
|
263
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
264
|
-
i0.ɵɵtemplate(2,
|
|
263
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "mj-accordion-panel", 99);
|
|
264
|
+
i0.ɵɵlistener("ExpandedChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_Template_mj_accordion_panel_ExpandedChange_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.isaFieldInspectorExpanded = $event); });
|
|
265
|
+
i0.ɵɵtemplate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_2_Template, 2, 0, "ng-template", 100)(3, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_ng_template_3_Template, 3, 0, "ng-template", 101);
|
|
265
266
|
i0.ɵɵelementEnd()();
|
|
266
267
|
} if (rf & 2) {
|
|
267
268
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
268
269
|
i0.ɵɵadvance();
|
|
269
270
|
i0.ɵɵproperty("FlushBody", true)("Expanded", ctx_r2.isaFieldInspectorExpanded);
|
|
270
271
|
} }
|
|
271
|
-
function
|
|
272
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_13_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
272
273
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
273
|
-
i0.ɵɵelementStart(0, "span",
|
|
274
|
-
i0.ɵɵlistener("click", function
|
|
275
|
-
i0.ɵɵelement(1, "i",
|
|
274
|
+
i0.ɵɵelementStart(0, "span", 115);
|
|
275
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_13_For_5_Template_span_click_0_listener() { const sibling_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(sibling_r14)); });
|
|
276
|
+
i0.ɵɵelement(1, "i", 116);
|
|
276
277
|
i0.ɵɵtext(2);
|
|
277
278
|
i0.ɵɵelementEnd();
|
|
278
279
|
} if (rf & 2) {
|
|
@@ -281,12 +282,12 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
281
282
|
i0.ɵɵadvance(2);
|
|
282
283
|
i0.ɵɵtextInterpolate1(" ", sibling_r14.Name, " ");
|
|
283
284
|
} }
|
|
284
|
-
function
|
|
285
|
-
i0.ɵɵelementStart(0, "div",
|
|
285
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
286
|
+
i0.ɵɵelementStart(0, "div", 96)(1, "div", 91);
|
|
286
287
|
i0.ɵɵtext(2);
|
|
287
288
|
i0.ɵɵelementEnd();
|
|
288
|
-
i0.ɵɵelementStart(3, "div",
|
|
289
|
-
i0.ɵɵrepeaterCreate(4,
|
|
289
|
+
i0.ɵɵelementStart(3, "div", 113);
|
|
290
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_13_For_5_Template, 3, 2, "span", 114, _forTrack0);
|
|
290
291
|
i0.ɵɵelementEnd()();
|
|
291
292
|
} if (rf & 2) {
|
|
292
293
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -295,22 +296,22 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
295
296
|
i0.ɵɵadvance(2);
|
|
296
297
|
i0.ɵɵrepeater(ctx_r2.SiblingEntities);
|
|
297
298
|
} }
|
|
298
|
-
function
|
|
299
|
-
i0.ɵɵelementStart(0, "div",
|
|
299
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
300
|
+
i0.ɵɵelementStart(0, "div", 90)(1, "div", 91);
|
|
300
301
|
i0.ɵɵtext(2, "Inheritance Chain");
|
|
301
302
|
i0.ɵɵelementEnd();
|
|
302
|
-
i0.ɵɵelementStart(3, "div",
|
|
303
|
+
i0.ɵɵelementStart(3, "div", 92)(4, "span", 93);
|
|
303
304
|
i0.ɵɵtext(5);
|
|
304
305
|
i0.ɵɵelementEnd();
|
|
305
|
-
i0.ɵɵrepeaterCreate(6,
|
|
306
|
+
i0.ɵɵrepeaterCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_For_7_Template, 3, 2, null, null, _forTrack0);
|
|
306
307
|
i0.ɵɵelementEnd();
|
|
307
|
-
i0.ɵɵelementStart(8, "div",
|
|
308
|
-
i0.ɵɵelement(9, "i",
|
|
308
|
+
i0.ɵɵelementStart(8, "div", 94);
|
|
309
|
+
i0.ɵɵelement(9, "i", 59);
|
|
309
310
|
i0.ɵɵelementStart(10, "span");
|
|
310
311
|
i0.ɵɵtext(11);
|
|
311
312
|
i0.ɵɵelementEnd()()();
|
|
312
|
-
i0.ɵɵconditionalCreate(12,
|
|
313
|
-
i0.ɵɵconditionalCreate(13,
|
|
313
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_12_Template, 4, 2, "div", 95);
|
|
314
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Conditional_13_Template, 6, 2, "div", 96);
|
|
314
315
|
} if (rf & 2) {
|
|
315
316
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
316
317
|
i0.ɵɵadvance(5);
|
|
@@ -324,24 +325,24 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
324
325
|
i0.ɵɵadvance();
|
|
325
326
|
i0.ɵɵconditional(ctx_r2.SiblingEntities.length > 0 ? 13 : -1);
|
|
326
327
|
} }
|
|
327
|
-
function
|
|
328
|
-
i0.ɵɵelement(0, "i",
|
|
328
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_For_5_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
329
|
+
i0.ɵɵelement(0, "i", 51);
|
|
329
330
|
} }
|
|
330
|
-
function
|
|
331
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_For_5_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
331
332
|
i0.ɵɵtext(0);
|
|
332
333
|
i0.ɵɵpipe(1, "number");
|
|
333
334
|
} if (rf & 2) {
|
|
334
335
|
const childCount_r16 = i0.ɵɵnextContext().$implicit;
|
|
335
336
|
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(1, 1, childCount_r16.RecordCount), " ");
|
|
336
337
|
} }
|
|
337
|
-
function
|
|
338
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
338
339
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
339
|
-
i0.ɵɵelementStart(0, "span",
|
|
340
|
-
i0.ɵɵlistener("click", function
|
|
341
|
-
i0.ɵɵelement(1, "i",
|
|
340
|
+
i0.ɵɵelementStart(0, "span", 118);
|
|
341
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_For_5_Template_span_click_0_listener() { const childCount_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(childCount_r16.EntityInfo)); });
|
|
342
|
+
i0.ɵɵelement(1, "i", 119);
|
|
342
343
|
i0.ɵɵtext(2);
|
|
343
|
-
i0.ɵɵelementStart(3, "span",
|
|
344
|
-
i0.ɵɵconditionalCreate(4,
|
|
344
|
+
i0.ɵɵelementStart(3, "span", 120);
|
|
345
|
+
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_For_5_Conditional_4_Template, 1, 0, "i", 51)(5, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_For_5_Conditional_5_Template, 2, 3);
|
|
345
346
|
i0.ɵɵelementEnd()();
|
|
346
347
|
} if (rf & 2) {
|
|
347
348
|
const childCount_r16 = ctx.$implicit;
|
|
@@ -351,26 +352,26 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
351
352
|
i0.ɵɵadvance(2);
|
|
352
353
|
i0.ɵɵconditional(childCount_r16.IsLoading ? 4 : 5);
|
|
353
354
|
} }
|
|
354
|
-
function
|
|
355
|
-
i0.ɵɵelementStart(0, "div",
|
|
355
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
356
|
+
i0.ɵɵelementStart(0, "div", 88)(1, "div", 91);
|
|
356
357
|
i0.ɵɵtext(2, "Child Types");
|
|
357
358
|
i0.ɵɵelementEnd();
|
|
358
|
-
i0.ɵɵelementStart(3, "div",
|
|
359
|
-
i0.ɵɵrepeaterCreate(4,
|
|
359
|
+
i0.ɵɵelementStart(3, "div", 113);
|
|
360
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_For_5_Template, 6, 3, "span", 117, _forTrack1);
|
|
360
361
|
i0.ɵɵelementEnd()();
|
|
361
362
|
} if (rf & 2) {
|
|
362
363
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
363
364
|
i0.ɵɵadvance(4);
|
|
364
365
|
i0.ɵɵrepeater(ctx_r2.childEntityCounts);
|
|
365
366
|
} }
|
|
366
|
-
function
|
|
367
|
-
i0.ɵɵelementStart(0, "div",
|
|
368
|
-
i0.ɵɵelement(2, "i",
|
|
367
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
368
|
+
i0.ɵɵelementStart(0, "div", 76)(1, "h3", 71);
|
|
369
|
+
i0.ɵɵelement(2, "i", 50);
|
|
369
370
|
i0.ɵɵtext(3, " Type Hierarchy ");
|
|
370
371
|
i0.ɵɵelementEnd();
|
|
371
|
-
i0.ɵɵconditionalCreate(4,
|
|
372
|
-
i0.ɵɵconditionalCreate(5,
|
|
373
|
-
i0.ɵɵconditionalCreate(6,
|
|
372
|
+
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_4_Template, 6, 1, "div", 87);
|
|
373
|
+
i0.ɵɵconditionalCreate(5, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_5_Template, 14, 6);
|
|
374
|
+
i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Conditional_6_Template, 6, 0, "div", 88);
|
|
374
375
|
i0.ɵɵelementEnd();
|
|
375
376
|
} if (rf & 2) {
|
|
376
377
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -381,11 +382,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
381
382
|
i0.ɵɵadvance();
|
|
382
383
|
i0.ɵɵconditional(ctx_r2.IsParentType ? 6 : -1);
|
|
383
384
|
} }
|
|
384
|
-
function
|
|
385
|
-
i0.ɵɵelementStart(0, "div",
|
|
385
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_92_Template(rf, ctx) { if (rf & 1) {
|
|
386
|
+
i0.ɵɵelementStart(0, "div", 80)(1, "span", 81);
|
|
386
387
|
i0.ɵɵtext(2, "SP Create");
|
|
387
388
|
i0.ɵɵelementEnd();
|
|
388
|
-
i0.ɵɵelementStart(3, "span",
|
|
389
|
+
i0.ɵɵelementStart(3, "span", 85);
|
|
389
390
|
i0.ɵɵtext(4);
|
|
390
391
|
i0.ɵɵelementEnd()();
|
|
391
392
|
} if (rf & 2) {
|
|
@@ -393,11 +394,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
393
394
|
i0.ɵɵadvance(4);
|
|
394
395
|
i0.ɵɵtextInterpolate(ctx_r2.entity.spCreate);
|
|
395
396
|
} }
|
|
396
|
-
function
|
|
397
|
-
i0.ɵɵelementStart(0, "div",
|
|
397
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_93_Template(rf, ctx) { if (rf & 1) {
|
|
398
|
+
i0.ɵɵelementStart(0, "div", 80)(1, "span", 81);
|
|
398
399
|
i0.ɵɵtext(2, "SP Update");
|
|
399
400
|
i0.ɵɵelementEnd();
|
|
400
|
-
i0.ɵɵelementStart(3, "span",
|
|
401
|
+
i0.ɵɵelementStart(3, "span", 85);
|
|
401
402
|
i0.ɵɵtext(4);
|
|
402
403
|
i0.ɵɵelementEnd()();
|
|
403
404
|
} if (rf & 2) {
|
|
@@ -405,11 +406,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
405
406
|
i0.ɵɵadvance(4);
|
|
406
407
|
i0.ɵɵtextInterpolate(ctx_r2.entity.spUpdate);
|
|
407
408
|
} }
|
|
408
|
-
function
|
|
409
|
-
i0.ɵɵelementStart(0, "div",
|
|
409
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_94_Template(rf, ctx) { if (rf & 1) {
|
|
410
|
+
i0.ɵɵelementStart(0, "div", 80)(1, "span", 81);
|
|
410
411
|
i0.ɵɵtext(2, "SP Delete");
|
|
411
412
|
i0.ɵɵelementEnd();
|
|
412
|
-
i0.ɵɵelementStart(3, "span",
|
|
413
|
+
i0.ɵɵelementStart(3, "span", 85);
|
|
413
414
|
i0.ɵɵtext(4);
|
|
414
415
|
i0.ɵɵelementEnd()();
|
|
415
416
|
} if (rf & 2) {
|
|
@@ -417,11 +418,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
417
418
|
i0.ɵɵadvance(4);
|
|
418
419
|
i0.ɵɵtextInterpolate(ctx_r2.entity.spDelete);
|
|
419
420
|
} }
|
|
420
|
-
function
|
|
421
|
-
i0.ɵɵelementStart(0, "div",
|
|
421
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_110_Template(rf, ctx) { if (rf & 1) {
|
|
422
|
+
i0.ɵɵelementStart(0, "div", 80)(1, "span", 81);
|
|
422
423
|
i0.ɵɵtext(2, "Subclass");
|
|
423
424
|
i0.ɵɵelementEnd();
|
|
424
|
-
i0.ɵɵelementStart(3, "span",
|
|
425
|
+
i0.ɵɵelementStart(3, "span", 85);
|
|
425
426
|
i0.ɵɵtext(4);
|
|
426
427
|
i0.ɵɵelementEnd()();
|
|
427
428
|
} if (rf & 2) {
|
|
@@ -429,134 +430,134 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
429
430
|
i0.ɵɵadvance(4);
|
|
430
431
|
i0.ɵɵtextInterpolate(ctx_r2.entity.EntityObjectSubclassName);
|
|
431
432
|
} }
|
|
432
|
-
function
|
|
433
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
433
434
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
434
|
-
i0.ɵɵelementStart(0, "section",
|
|
435
|
-
i0.ɵɵlistener("click", function
|
|
436
|
-
i0.ɵɵelementStart(4, "div",
|
|
437
|
-
i0.ɵɵelement(5, "i",
|
|
435
|
+
i0.ɵɵelementStart(0, "section", 29)(1, "div", 55)(2, "div", 56)(3, "div", 57);
|
|
436
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection("fields")); });
|
|
437
|
+
i0.ɵɵelementStart(4, "div", 58);
|
|
438
|
+
i0.ɵɵelement(5, "i", 59);
|
|
438
439
|
i0.ɵɵelementStart(6, "span");
|
|
439
440
|
i0.ɵɵtext(7, "Fields");
|
|
440
441
|
i0.ɵɵelementEnd()();
|
|
441
|
-
i0.ɵɵelementStart(8, "div",
|
|
442
|
+
i0.ɵɵelementStart(8, "div", 60)(9, "div", 61);
|
|
442
443
|
i0.ɵɵtext(10);
|
|
443
444
|
i0.ɵɵelementEnd();
|
|
444
|
-
i0.ɵɵelementStart(11, "div",
|
|
445
|
+
i0.ɵɵelementStart(11, "div", 62)(12, "span");
|
|
445
446
|
i0.ɵɵtext(13);
|
|
446
447
|
i0.ɵɵelementEnd();
|
|
447
448
|
i0.ɵɵelementStart(14, "span");
|
|
448
449
|
i0.ɵɵtext(15);
|
|
449
450
|
i0.ɵɵelementEnd();
|
|
450
|
-
i0.ɵɵconditionalCreate(16,
|
|
451
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_16_Template, 2, 1, "span");
|
|
451
452
|
i0.ɵɵelementEnd()();
|
|
452
|
-
i0.ɵɵelementStart(17, "div",
|
|
453
|
-
i0.ɵɵelement(18, "i",
|
|
453
|
+
i0.ɵɵelementStart(17, "div", 63);
|
|
454
|
+
i0.ɵɵelement(18, "i", 64);
|
|
454
455
|
i0.ɵɵelementEnd()();
|
|
455
|
-
i0.ɵɵelementStart(19, "div",
|
|
456
|
-
i0.ɵɵlistener("click", function
|
|
457
|
-
i0.ɵɵelementStart(20, "div",
|
|
458
|
-
i0.ɵɵelement(21, "i",
|
|
456
|
+
i0.ɵɵelementStart(19, "div", 65);
|
|
457
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection("relationships")); });
|
|
458
|
+
i0.ɵɵelementStart(20, "div", 58);
|
|
459
|
+
i0.ɵɵelement(21, "i", 66);
|
|
459
460
|
i0.ɵɵelementStart(22, "span");
|
|
460
461
|
i0.ɵɵtext(23, "Relationships");
|
|
461
462
|
i0.ɵɵelementEnd()();
|
|
462
|
-
i0.ɵɵelementStart(24, "div",
|
|
463
|
+
i0.ɵɵelementStart(24, "div", 60)(25, "div", 61);
|
|
463
464
|
i0.ɵɵtext(26);
|
|
464
465
|
i0.ɵɵelementEnd();
|
|
465
|
-
i0.ɵɵelementStart(27, "div",
|
|
466
|
+
i0.ɵɵelementStart(27, "div", 62)(28, "span");
|
|
466
467
|
i0.ɵɵtext(29);
|
|
467
468
|
i0.ɵɵelementEnd();
|
|
468
469
|
i0.ɵɵelementStart(30, "span");
|
|
469
470
|
i0.ɵɵtext(31);
|
|
470
471
|
i0.ɵɵelementEnd()()();
|
|
471
|
-
i0.ɵɵelementStart(32, "div",
|
|
472
|
-
i0.ɵɵelement(33, "i",
|
|
472
|
+
i0.ɵɵelementStart(32, "div", 63);
|
|
473
|
+
i0.ɵɵelement(33, "i", 64);
|
|
473
474
|
i0.ɵɵelementEnd()();
|
|
474
|
-
i0.ɵɵelementStart(34, "div",
|
|
475
|
-
i0.ɵɵlistener("click", function
|
|
476
|
-
i0.ɵɵelementStart(35, "div",
|
|
477
|
-
i0.ɵɵelement(36, "i",
|
|
475
|
+
i0.ɵɵelementStart(34, "div", 67);
|
|
476
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template_div_click_34_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection("permissions")); });
|
|
477
|
+
i0.ɵɵelementStart(35, "div", 58);
|
|
478
|
+
i0.ɵɵelement(36, "i", 68);
|
|
478
479
|
i0.ɵɵelementStart(37, "span");
|
|
479
480
|
i0.ɵɵtext(38, "Security");
|
|
480
481
|
i0.ɵɵelementEnd()();
|
|
481
|
-
i0.ɵɵelementStart(39, "div",
|
|
482
|
+
i0.ɵɵelementStart(39, "div", 60)(40, "div", 61);
|
|
482
483
|
i0.ɵɵtext(41);
|
|
483
484
|
i0.ɵɵelementEnd();
|
|
484
|
-
i0.ɵɵelementStart(42, "div",
|
|
485
|
+
i0.ɵɵelementStart(42, "div", 62)(43, "span");
|
|
485
486
|
i0.ɵɵtext(44, "Roles configured");
|
|
486
487
|
i0.ɵɵelementEnd()()();
|
|
487
|
-
i0.ɵɵelementStart(45, "div",
|
|
488
|
-
i0.ɵɵelement(46, "i",
|
|
488
|
+
i0.ɵɵelementStart(45, "div", 63);
|
|
489
|
+
i0.ɵɵelement(46, "i", 64);
|
|
489
490
|
i0.ɵɵelementEnd()();
|
|
490
|
-
i0.ɵɵelementStart(47, "div",
|
|
491
|
+
i0.ɵɵelementStart(47, "div", 69)(48, "div", 58);
|
|
491
492
|
i0.ɵɵelement(49, "i", 22);
|
|
492
493
|
i0.ɵɵelementStart(50, "span");
|
|
493
494
|
i0.ɵɵtext(51, "Data");
|
|
494
495
|
i0.ɵɵelementEnd()();
|
|
495
|
-
i0.ɵɵelementStart(52, "div",
|
|
496
|
+
i0.ɵɵelementStart(52, "div", 60)(53, "div", 61);
|
|
496
497
|
i0.ɵɵtext(54);
|
|
497
498
|
i0.ɵɵelementEnd();
|
|
498
|
-
i0.ɵɵelementStart(55, "div",
|
|
499
|
-
i0.ɵɵconditionalCreate(56,
|
|
500
|
-
i0.ɵɵconditionalCreate(57,
|
|
499
|
+
i0.ɵɵelementStart(55, "div", 62);
|
|
500
|
+
i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_56_Template, 3, 4, "span");
|
|
501
|
+
i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_57_Template, 2, 0, "span");
|
|
501
502
|
i0.ɵɵelementEnd()()()();
|
|
502
|
-
i0.ɵɵelementStart(58, "div",
|
|
503
|
-
i0.ɵɵelement(60, "i",
|
|
503
|
+
i0.ɵɵelementStart(58, "div", 70)(59, "h3", 71);
|
|
504
|
+
i0.ɵɵelement(60, "i", 72);
|
|
504
505
|
i0.ɵɵtext(61, " Capabilities ");
|
|
505
506
|
i0.ɵɵelementEnd();
|
|
506
|
-
i0.ɵɵelementStart(62, "div",
|
|
507
|
-
i0.ɵɵrepeaterCreate(63,
|
|
508
|
-
i0.ɵɵconditionalCreate(65,
|
|
507
|
+
i0.ɵɵelementStart(62, "div", 73);
|
|
508
|
+
i0.ɵɵrepeaterCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_52_For_64_Template, 3, 1, "span", 74, i0.ɵɵrepeaterTrackByIdentity);
|
|
509
|
+
i0.ɵɵconditionalCreate(65, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_65_Template, 3, 0, "span", 75);
|
|
509
510
|
i0.ɵɵelementEnd()();
|
|
510
|
-
i0.ɵɵconditionalCreate(66,
|
|
511
|
-
i0.ɵɵelementStart(67, "div",
|
|
512
|
-
i0.ɵɵelement(69, "i",
|
|
511
|
+
i0.ɵɵconditionalCreate(66, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_66_Template, 7, 3, "div", 76);
|
|
512
|
+
i0.ɵɵelementStart(67, "div", 77)(68, "h3", 71);
|
|
513
|
+
i0.ɵɵelement(69, "i", 78);
|
|
513
514
|
i0.ɵɵtext(70, " Database ");
|
|
514
515
|
i0.ɵɵelementEnd();
|
|
515
|
-
i0.ɵɵelementStart(71, "div",
|
|
516
|
+
i0.ɵɵelementStart(71, "div", 79)(72, "div", 80)(73, "span", 81);
|
|
516
517
|
i0.ɵɵtext(74, "Schema");
|
|
517
518
|
i0.ɵɵelementEnd();
|
|
518
|
-
i0.ɵɵelementStart(75, "span",
|
|
519
|
+
i0.ɵɵelementStart(75, "span", 82);
|
|
519
520
|
i0.ɵɵtext(76);
|
|
520
521
|
i0.ɵɵelementEnd()();
|
|
521
|
-
i0.ɵɵelementStart(77, "div",
|
|
522
|
+
i0.ɵɵelementStart(77, "div", 80)(78, "span", 81);
|
|
522
523
|
i0.ɵɵtext(79, "Table");
|
|
523
524
|
i0.ɵɵelementEnd();
|
|
524
|
-
i0.ɵɵelementStart(80, "span",
|
|
525
|
+
i0.ɵɵelementStart(80, "span", 82);
|
|
525
526
|
i0.ɵɵtext(81);
|
|
526
527
|
i0.ɵɵelementEnd()();
|
|
527
|
-
i0.ɵɵelementStart(82, "div",
|
|
528
|
+
i0.ɵɵelementStart(82, "div", 80)(83, "span", 81);
|
|
528
529
|
i0.ɵɵtext(84, "View");
|
|
529
530
|
i0.ɵɵelementEnd();
|
|
530
|
-
i0.ɵɵelementStart(85, "span",
|
|
531
|
+
i0.ɵɵelementStart(85, "span", 82);
|
|
531
532
|
i0.ɵɵtext(86);
|
|
532
533
|
i0.ɵɵelementEnd()();
|
|
533
|
-
i0.ɵɵelementStart(87, "div",
|
|
534
|
+
i0.ɵɵelementStart(87, "div", 80)(88, "span", 81);
|
|
534
535
|
i0.ɵɵtext(89, "Delete Type");
|
|
535
536
|
i0.ɵɵelementEnd();
|
|
536
|
-
i0.ɵɵelementStart(90, "span",
|
|
537
|
+
i0.ɵɵelementStart(90, "span", 82);
|
|
537
538
|
i0.ɵɵtext(91);
|
|
538
539
|
i0.ɵɵelementEnd()();
|
|
539
|
-
i0.ɵɵconditionalCreate(92,
|
|
540
|
-
i0.ɵɵconditionalCreate(93,
|
|
541
|
-
i0.ɵɵconditionalCreate(94,
|
|
540
|
+
i0.ɵɵconditionalCreate(92, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_92_Template, 5, 1, "div", 80);
|
|
541
|
+
i0.ɵɵconditionalCreate(93, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_93_Template, 5, 1, "div", 80);
|
|
542
|
+
i0.ɵɵconditionalCreate(94, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_94_Template, 5, 1, "div", 80);
|
|
542
543
|
i0.ɵɵelementEnd()();
|
|
543
|
-
i0.ɵɵelementStart(95, "div",
|
|
544
|
-
i0.ɵɵelement(97, "i",
|
|
544
|
+
i0.ɵɵelementStart(95, "div", 83)(96, "h3", 71);
|
|
545
|
+
i0.ɵɵelement(97, "i", 84);
|
|
545
546
|
i0.ɵɵtext(98, " Code Generation ");
|
|
546
547
|
i0.ɵɵelementEnd();
|
|
547
|
-
i0.ɵɵelementStart(99, "div",
|
|
548
|
+
i0.ɵɵelementStart(99, "div", 79)(100, "div", 80)(101, "span", 81);
|
|
548
549
|
i0.ɵɵtext(102, "Class Name");
|
|
549
550
|
i0.ɵɵelementEnd();
|
|
550
|
-
i0.ɵɵelementStart(103, "span",
|
|
551
|
+
i0.ɵɵelementStart(103, "span", 85);
|
|
551
552
|
i0.ɵɵtext(104);
|
|
552
553
|
i0.ɵɵelementEnd()();
|
|
553
|
-
i0.ɵɵelementStart(105, "div",
|
|
554
|
+
i0.ɵɵelementStart(105, "div", 80)(106, "span", 81);
|
|
554
555
|
i0.ɵɵtext(107, "Code Name");
|
|
555
556
|
i0.ɵɵelementEnd();
|
|
556
|
-
i0.ɵɵelementStart(108, "span",
|
|
557
|
+
i0.ɵɵelementStart(108, "span", 85);
|
|
557
558
|
i0.ɵɵtext(109);
|
|
558
559
|
i0.ɵɵelementEnd()();
|
|
559
|
-
i0.ɵɵconditionalCreate(110,
|
|
560
|
+
i0.ɵɵconditionalCreate(110, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_110_Template, 5, 1, "div", 80);
|
|
560
561
|
i0.ɵɵelementEnd()()()();
|
|
561
562
|
} if (rf & 2) {
|
|
562
563
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -609,15 +610,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template(rf,
|
|
|
609
610
|
i0.ɵɵadvance();
|
|
610
611
|
i0.ɵɵconditional(ctx_r2.entity.EntityObjectSubclassName ? 110 : -1);
|
|
611
612
|
} }
|
|
612
|
-
function
|
|
613
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
613
614
|
const _r18 = i0.ɵɵgetCurrentView();
|
|
614
|
-
i0.ɵɵelementStart(0, "div",
|
|
615
|
-
i0.ɵɵlistener("click", function
|
|
616
|
-
i0.ɵɵelement(2, "i",
|
|
615
|
+
i0.ɵɵelementStart(0, "div", 130)(1, "button", 134);
|
|
616
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.expandAllFieldGroups()); });
|
|
617
|
+
i0.ɵɵelement(2, "i", 135);
|
|
617
618
|
i0.ɵɵelementEnd();
|
|
618
|
-
i0.ɵɵelementStart(3, "button",
|
|
619
|
-
i0.ɵɵlistener("click", function
|
|
620
|
-
i0.ɵɵelement(4, "i",
|
|
619
|
+
i0.ɵɵelementStart(3, "button", 136);
|
|
620
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.collapseAllFieldGroups()); });
|
|
621
|
+
i0.ɵɵelement(4, "i", 137);
|
|
621
622
|
i0.ɵɵelementEnd()();
|
|
622
623
|
} if (rf & 2) {
|
|
623
624
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -626,12 +627,12 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
626
627
|
i0.ɵɵadvance(2);
|
|
627
628
|
i0.ɵɵproperty("disabled", ctx_r2.allFieldGroupsCollapsed);
|
|
628
629
|
} }
|
|
629
|
-
function
|
|
630
|
-
i0.ɵɵelement(0, "i",
|
|
631
|
-
i0.ɵɵelementStart(1, "span",
|
|
630
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
631
|
+
i0.ɵɵelement(0, "i", 139);
|
|
632
|
+
i0.ɵɵelementStart(1, "span", 140);
|
|
632
633
|
i0.ɵɵtext(2);
|
|
633
634
|
i0.ɵɵelementEnd();
|
|
634
|
-
i0.ɵɵelementStart(3, "span",
|
|
635
|
+
i0.ɵɵelementStart(3, "span", 141);
|
|
635
636
|
i0.ɵɵtext(4);
|
|
636
637
|
i0.ɵɵelementEnd();
|
|
637
638
|
} if (rf & 2) {
|
|
@@ -642,16 +643,16 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
642
643
|
i0.ɵɵadvance(2);
|
|
643
644
|
i0.ɵɵtextInterpolate(group_r20.fields.length);
|
|
644
645
|
} }
|
|
645
|
-
function
|
|
646
|
-
i0.ɵɵelementStart(0, "span",
|
|
646
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
647
|
+
i0.ɵɵelementStart(0, "span", 151);
|
|
647
648
|
i0.ɵɵtext(1, "Required");
|
|
648
649
|
i0.ɵɵelementEnd();
|
|
649
650
|
} }
|
|
650
|
-
function
|
|
651
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
651
652
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
652
|
-
i0.ɵɵelementStart(0, "span",
|
|
653
|
-
i0.ɵɵlistener("click", function
|
|
654
|
-
i0.ɵɵelement(1, "i",
|
|
653
|
+
i0.ɵɵelementStart(0, "span", 158);
|
|
654
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_12_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r23); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(6); ctx_r2.navigateToRelatedEntity(field_r22); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
655
|
+
i0.ɵɵelement(1, "i", 64);
|
|
655
656
|
i0.ɵɵtext(2);
|
|
656
657
|
i0.ɵɵelementEnd();
|
|
657
658
|
} if (rf & 2) {
|
|
@@ -660,24 +661,24 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
660
661
|
i0.ɵɵadvance(2);
|
|
661
662
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.getRelatedEntityName(field_r22), " ");
|
|
662
663
|
} }
|
|
663
|
-
function
|
|
664
|
-
i0.ɵɵelementStart(0, "span",
|
|
664
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
665
|
+
i0.ɵɵelementStart(0, "span", 154);
|
|
665
666
|
i0.ɵɵtext(1, "PK");
|
|
666
667
|
i0.ɵɵelementEnd();
|
|
667
668
|
} }
|
|
668
|
-
function
|
|
669
|
-
i0.ɵɵelementStart(0, "span",
|
|
669
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
670
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
670
671
|
i0.ɵɵtext(1, "FK");
|
|
671
672
|
i0.ɵɵelementEnd();
|
|
672
673
|
} }
|
|
673
|
-
function
|
|
674
|
-
i0.ɵɵelementStart(0, "span",
|
|
675
|
-
i0.ɵɵelement(1, "i",
|
|
674
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
675
|
+
i0.ɵɵelementStart(0, "span", 156);
|
|
676
|
+
i0.ɵɵelement(1, "i", 68);
|
|
676
677
|
i0.ɵɵelementEnd();
|
|
677
678
|
} }
|
|
678
|
-
function
|
|
679
|
-
i0.ɵɵelementStart(0, "span",
|
|
680
|
-
i0.ɵɵelement(1, "i",
|
|
679
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
680
|
+
i0.ɵɵelementStart(0, "span", 157);
|
|
681
|
+
i0.ɵɵelement(1, "i", 45);
|
|
681
682
|
i0.ɵɵtext(2);
|
|
682
683
|
i0.ɵɵelementEnd();
|
|
683
684
|
} if (rf & 2) {
|
|
@@ -687,30 +688,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
687
688
|
i0.ɵɵadvance(2);
|
|
688
689
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.GetISAFieldSource(field_r22), " ");
|
|
689
690
|
} }
|
|
690
|
-
function
|
|
691
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
691
692
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
692
|
-
i0.ɵɵelementStart(0, "div",
|
|
693
|
-
i0.ɵɵlistener("click", function
|
|
694
|
-
i0.ɵɵelementStart(1, "div",
|
|
693
|
+
i0.ɵɵelementStart(0, "div", 144);
|
|
694
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Template_div_click_0_listener() { const field_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.selectField(field_r22)); });
|
|
695
|
+
i0.ɵɵelementStart(1, "div", 145);
|
|
695
696
|
i0.ɵɵelement(2, "i");
|
|
696
697
|
i0.ɵɵelementEnd();
|
|
697
|
-
i0.ɵɵelementStart(3, "div",
|
|
698
|
+
i0.ɵɵelementStart(3, "div", 146)(4, "div", 147);
|
|
698
699
|
i0.ɵɵtext(5);
|
|
699
700
|
i0.ɵɵelementEnd();
|
|
700
|
-
i0.ɵɵelementStart(6, "div",
|
|
701
|
+
i0.ɵɵelementStart(6, "div", 148);
|
|
701
702
|
i0.ɵɵtext(7);
|
|
702
703
|
i0.ɵɵelementEnd();
|
|
703
|
-
i0.ɵɵelementStart(8, "div",
|
|
704
|
+
i0.ɵɵelementStart(8, "div", 149)(9, "span", 150);
|
|
704
705
|
i0.ɵɵtext(10);
|
|
705
706
|
i0.ɵɵelementEnd();
|
|
706
|
-
i0.ɵɵconditionalCreate(11,
|
|
707
|
-
i0.ɵɵconditionalCreate(12,
|
|
707
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_11_Template, 2, 0, "span", 151);
|
|
708
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_12_Template, 3, 1, "span", 152);
|
|
708
709
|
i0.ɵɵelementEnd()();
|
|
709
|
-
i0.ɵɵelementStart(13, "div",
|
|
710
|
-
i0.ɵɵconditionalCreate(14,
|
|
711
|
-
i0.ɵɵconditionalCreate(15,
|
|
712
|
-
i0.ɵɵconditionalCreate(16,
|
|
713
|
-
i0.ɵɵconditionalCreate(17,
|
|
710
|
+
i0.ɵɵelementStart(13, "div", 153);
|
|
711
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_14_Template, 2, 0, "span", 154);
|
|
712
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_15_Template, 2, 0, "span", 155);
|
|
713
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_16_Template, 2, 0, "span", 156);
|
|
714
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Conditional_17_Template, 3, 2, "span", 157);
|
|
714
715
|
i0.ɵɵelementEnd()();
|
|
715
716
|
} if (rf & 2) {
|
|
716
717
|
const field_r22 = ctx.$implicit;
|
|
@@ -737,37 +738,37 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
737
738
|
i0.ɵɵadvance();
|
|
738
739
|
i0.ɵɵconditional(ctx_r2.IsInheritedField(field_r22) ? 17 : -1);
|
|
739
740
|
} }
|
|
740
|
-
function
|
|
741
|
-
i0.ɵɵelementStart(0, "div",
|
|
742
|
-
i0.ɵɵrepeaterCreate(1,
|
|
741
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
742
|
+
i0.ɵɵelementStart(0, "div", 142);
|
|
743
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_For_2_Template, 18, 13, "div", 143, i0.ɵɵrepeaterTrackByIdentity);
|
|
743
744
|
i0.ɵɵelementEnd();
|
|
744
745
|
} if (rf & 2) {
|
|
745
746
|
const group_r20 = i0.ɵɵnextContext().$implicit;
|
|
746
747
|
i0.ɵɵadvance();
|
|
747
748
|
i0.ɵɵrepeater(group_r20.fields);
|
|
748
749
|
} }
|
|
749
|
-
function
|
|
750
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
750
751
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
751
|
-
i0.ɵɵelementStart(0, "mj-accordion-panel",
|
|
752
|
-
i0.ɵɵlistener("ExpandedChange", function
|
|
753
|
-
i0.ɵɵtemplate(1,
|
|
752
|
+
i0.ɵɵelementStart(0, "mj-accordion-panel", 99);
|
|
753
|
+
i0.ɵɵlistener("ExpandedChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_Template_mj_accordion_panel_ExpandedChange_0_listener($event) { const group_r20 = i0.ɵɵrestoreView(_r19).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.onFieldGroupExpandedChange(group_r20.id, $event)); });
|
|
754
|
+
i0.ɵɵtemplate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_1_Template, 5, 4, "ng-template", 100)(2, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_ng_template_2_Template, 3, 0, "ng-template", 101);
|
|
754
755
|
i0.ɵɵelementEnd();
|
|
755
756
|
} if (rf & 2) {
|
|
756
757
|
const group_r20 = ctx.$implicit;
|
|
757
758
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
758
759
|
i0.ɵɵproperty("FlushBody", true)("Expanded", ctx_r2.isFieldGroupExpanded(group_r20.id));
|
|
759
760
|
} }
|
|
760
|
-
function
|
|
761
|
-
i0.ɵɵelementStart(0, "div",
|
|
762
|
-
i0.ɵɵrepeaterCreate(1,
|
|
761
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
762
|
+
i0.ɵɵelementStart(0, "div", 132);
|
|
763
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_For_2_Template, 3, 2, "mj-accordion-panel", 138, i0.ɵɵrepeaterTrackByIdentity);
|
|
763
764
|
i0.ɵɵelementEnd();
|
|
764
765
|
} if (rf & 2) {
|
|
765
766
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
766
767
|
i0.ɵɵadvance();
|
|
767
768
|
i0.ɵɵrepeater(ctx_r2.getFilteredFieldGroups());
|
|
768
769
|
} }
|
|
769
|
-
function
|
|
770
|
-
i0.ɵɵelementStart(0, "span",
|
|
770
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
771
|
+
i0.ɵɵelementStart(0, "span", 183);
|
|
771
772
|
i0.ɵɵtext(1);
|
|
772
773
|
i0.ɵɵelementEnd();
|
|
773
774
|
} if (rf & 2) {
|
|
@@ -775,31 +776,31 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
775
776
|
i0.ɵɵadvance();
|
|
776
777
|
i0.ɵɵtextInterpolate(field_r26.Length);
|
|
777
778
|
} }
|
|
778
|
-
function
|
|
779
|
-
i0.ɵɵelementStart(0, "span",
|
|
779
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
780
|
+
i0.ɵɵelementStart(0, "span", 184);
|
|
780
781
|
i0.ɵɵtext(1, "\u2014");
|
|
781
782
|
i0.ɵɵelementEnd();
|
|
782
783
|
} }
|
|
783
|
-
function
|
|
784
|
-
i0.ɵɵelementStart(0, "span",
|
|
785
|
-
i0.ɵɵelement(1, "i",
|
|
784
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
785
|
+
i0.ɵɵelementStart(0, "span", 188);
|
|
786
|
+
i0.ɵɵelement(1, "i", 194);
|
|
786
787
|
i0.ɵɵtext(2, " PK ");
|
|
787
788
|
i0.ɵɵelementEnd();
|
|
788
789
|
} }
|
|
789
|
-
function
|
|
790
|
-
i0.ɵɵelementStart(0, "span",
|
|
790
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
791
|
+
i0.ɵɵelementStart(0, "span", 189);
|
|
791
792
|
i0.ɵɵelement(1, "i", 20);
|
|
792
793
|
i0.ɵɵtext(2, " FK ");
|
|
793
794
|
i0.ɵɵelementEnd();
|
|
794
795
|
} }
|
|
795
|
-
function
|
|
796
|
-
i0.ɵɵelementStart(0, "span",
|
|
797
|
-
i0.ɵɵelement(1, "i",
|
|
796
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
797
|
+
i0.ɵɵelementStart(0, "span", 190);
|
|
798
|
+
i0.ɵɵelement(1, "i", 68);
|
|
798
799
|
i0.ɵɵelementEnd();
|
|
799
800
|
} }
|
|
800
|
-
function
|
|
801
|
-
i0.ɵɵelementStart(0, "span",
|
|
802
|
-
i0.ɵɵelement(1, "i",
|
|
801
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
802
|
+
i0.ɵɵelementStart(0, "span", 191);
|
|
803
|
+
i0.ɵɵelement(1, "i", 45);
|
|
803
804
|
i0.ɵɵtext(2);
|
|
804
805
|
i0.ɵɵelementEnd();
|
|
805
806
|
} if (rf & 2) {
|
|
@@ -809,39 +810,39 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
809
810
|
i0.ɵɵadvance(2);
|
|
810
811
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.GetISAFieldSource(field_r26), " ");
|
|
811
812
|
} }
|
|
812
|
-
function
|
|
813
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Template(rf, ctx) { if (rf & 1) {
|
|
813
814
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
814
|
-
i0.ɵɵelementStart(0, "div",
|
|
815
|
-
i0.ɵɵlistener("click", function
|
|
816
|
-
i0.ɵɵelementStart(1, "div",
|
|
815
|
+
i0.ɵɵelementStart(0, "div", 172);
|
|
816
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Template_div_click_0_listener() { const field_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.selectField(field_r26)); });
|
|
817
|
+
i0.ɵɵelementStart(1, "div", 173)(2, "span", 174);
|
|
817
818
|
i0.ɵɵtext(3);
|
|
818
819
|
i0.ɵɵelementEnd()();
|
|
819
|
-
i0.ɵɵelementStart(4, "div",
|
|
820
|
-
i0.ɵɵelement(5, "i",
|
|
821
|
-
i0.ɵɵelementStart(6, "span",
|
|
820
|
+
i0.ɵɵelementStart(4, "div", 175);
|
|
821
|
+
i0.ɵɵelement(5, "i", 176);
|
|
822
|
+
i0.ɵɵelementStart(6, "span", 177);
|
|
822
823
|
i0.ɵɵtext(7);
|
|
823
824
|
i0.ɵɵelementEnd()();
|
|
824
|
-
i0.ɵɵelementStart(8, "div",
|
|
825
|
+
i0.ɵɵelementStart(8, "div", 178)(9, "span", 179);
|
|
825
826
|
i0.ɵɵtext(10);
|
|
826
827
|
i0.ɵɵelementEnd()();
|
|
827
|
-
i0.ɵɵelementStart(11, "div",
|
|
828
|
+
i0.ɵɵelementStart(11, "div", 180)(12, "span", 181);
|
|
828
829
|
i0.ɵɵtext(13);
|
|
829
830
|
i0.ɵɵelementEnd()();
|
|
830
|
-
i0.ɵɵelementStart(14, "div",
|
|
831
|
-
i0.ɵɵconditionalCreate(15,
|
|
832
|
-
i0.ɵɵconditionalCreate(16,
|
|
831
|
+
i0.ɵɵelementStart(14, "div", 182);
|
|
832
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_15_Template, 2, 1, "span", 183);
|
|
833
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_16_Template, 2, 0, "span", 184);
|
|
833
834
|
i0.ɵɵelementEnd();
|
|
834
|
-
i0.ɵɵelementStart(17, "div",
|
|
835
|
+
i0.ɵɵelementStart(17, "div", 185)(18, "span", 186);
|
|
835
836
|
i0.ɵɵelement(19, "i");
|
|
836
837
|
i0.ɵɵtext(20);
|
|
837
838
|
i0.ɵɵelementEnd()();
|
|
838
|
-
i0.ɵɵelementStart(21, "div",
|
|
839
|
-
i0.ɵɵconditionalCreate(23,
|
|
840
|
-
i0.ɵɵconditionalCreate(24,
|
|
841
|
-
i0.ɵɵconditionalCreate(25,
|
|
842
|
-
i0.ɵɵconditionalCreate(26,
|
|
839
|
+
i0.ɵɵelementStart(21, "div", 167)(22, "div", 187);
|
|
840
|
+
i0.ɵɵconditionalCreate(23, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_23_Template, 3, 0, "span", 188);
|
|
841
|
+
i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_24_Template, 3, 0, "span", 189);
|
|
842
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_25_Template, 2, 0, "span", 190);
|
|
843
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Conditional_26_Template, 3, 2, "span", 191);
|
|
843
844
|
i0.ɵɵelementEnd()();
|
|
844
|
-
i0.ɵɵelementStart(27, "div",
|
|
845
|
+
i0.ɵɵelementStart(27, "div", 192)(28, "span", 193);
|
|
845
846
|
i0.ɵɵtext(29);
|
|
846
847
|
i0.ɵɵelementEnd()()();
|
|
847
848
|
} if (rf & 2) {
|
|
@@ -881,53 +882,53 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
881
882
|
i0.ɵɵadvance();
|
|
882
883
|
i0.ɵɵtextInterpolate(field_r26.Description || "\u2014");
|
|
883
884
|
} }
|
|
884
|
-
function
|
|
885
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
885
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
886
|
+
i0.ɵɵelement(0, "mj-empty-state", 171);
|
|
886
887
|
} }
|
|
887
|
-
function
|
|
888
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
888
889
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
889
|
-
i0.ɵɵelementStart(0, "div",
|
|
890
|
-
i0.ɵɵlistener("click", function
|
|
890
|
+
i0.ɵɵelementStart(0, "div", 133)(1, "div", 159)(2, "div", 160);
|
|
891
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Sequence")); });
|
|
891
892
|
i0.ɵɵtext(3, " # ");
|
|
892
|
-
i0.ɵɵelement(4, "i",
|
|
893
|
+
i0.ɵɵelement(4, "i", 161);
|
|
893
894
|
i0.ɵɵelementEnd();
|
|
894
|
-
i0.ɵɵelementStart(5, "div",
|
|
895
|
-
i0.ɵɵlistener("click", function
|
|
895
|
+
i0.ɵɵelementStart(5, "div", 162);
|
|
896
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template_div_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Name")); });
|
|
896
897
|
i0.ɵɵtext(6, " Field Name ");
|
|
897
|
-
i0.ɵɵelement(7, "i",
|
|
898
|
+
i0.ɵɵelement(7, "i", 161);
|
|
898
899
|
i0.ɵɵelementEnd();
|
|
899
|
-
i0.ɵɵelementStart(8, "div",
|
|
900
|
-
i0.ɵɵlistener("click", function
|
|
900
|
+
i0.ɵɵelementStart(8, "div", 163);
|
|
901
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template_div_click_8_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("DisplayName")); });
|
|
901
902
|
i0.ɵɵtext(9, " Display Name ");
|
|
902
|
-
i0.ɵɵelement(10, "i",
|
|
903
|
+
i0.ɵɵelement(10, "i", 161);
|
|
903
904
|
i0.ɵɵelementEnd();
|
|
904
|
-
i0.ɵɵelementStart(11, "div",
|
|
905
|
-
i0.ɵɵlistener("click", function
|
|
905
|
+
i0.ɵɵelementStart(11, "div", 164);
|
|
906
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Type")); });
|
|
906
907
|
i0.ɵɵtext(12, " Type ");
|
|
907
|
-
i0.ɵɵelement(13, "i",
|
|
908
|
+
i0.ɵɵelement(13, "i", 161);
|
|
908
909
|
i0.ɵɵelementEnd();
|
|
909
|
-
i0.ɵɵelementStart(14, "div",
|
|
910
|
-
i0.ɵɵlistener("click", function
|
|
910
|
+
i0.ɵɵelementStart(14, "div", 165);
|
|
911
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template_div_click_14_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Length")); });
|
|
911
912
|
i0.ɵɵtext(15, " Length ");
|
|
912
|
-
i0.ɵɵelement(16, "i",
|
|
913
|
+
i0.ɵɵelement(16, "i", 161);
|
|
913
914
|
i0.ɵɵelementEnd();
|
|
914
|
-
i0.ɵɵelementStart(17, "div",
|
|
915
|
-
i0.ɵɵlistener("click", function
|
|
915
|
+
i0.ɵɵelementStart(17, "div", 166);
|
|
916
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template_div_click_17_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("AllowsNull")); });
|
|
916
917
|
i0.ɵɵtext(18, " Required ");
|
|
917
|
-
i0.ɵɵelement(19, "i",
|
|
918
|
+
i0.ɵɵelement(19, "i", 161);
|
|
918
919
|
i0.ɵɵelementEnd();
|
|
919
|
-
i0.ɵɵelementStart(20, "div",
|
|
920
|
+
i0.ɵɵelementStart(20, "div", 167);
|
|
920
921
|
i0.ɵɵtext(21, "Flags");
|
|
921
922
|
i0.ɵɵelementEnd();
|
|
922
|
-
i0.ɵɵelementStart(22, "div",
|
|
923
|
-
i0.ɵɵlistener("click", function
|
|
923
|
+
i0.ɵɵelementStart(22, "div", 168);
|
|
924
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template_div_click_22_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Description")); });
|
|
924
925
|
i0.ɵɵtext(23, " Description ");
|
|
925
|
-
i0.ɵɵelement(24, "i",
|
|
926
|
+
i0.ɵɵelement(24, "i", 161);
|
|
926
927
|
i0.ɵɵelementEnd()();
|
|
927
|
-
i0.ɵɵelementStart(25, "div",
|
|
928
|
-
i0.ɵɵrepeaterCreate(26,
|
|
928
|
+
i0.ɵɵelementStart(25, "div", 169);
|
|
929
|
+
i0.ɵɵrepeaterCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_For_27_Template, 30, 23, "div", 170, i0.ɵɵrepeaterTrackByIdentity);
|
|
929
930
|
i0.ɵɵelementEnd();
|
|
930
|
-
i0.ɵɵconditionalCreate(28,
|
|
931
|
+
i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Conditional_28_Template, 1, 0, "mj-empty-state", 171);
|
|
931
932
|
i0.ɵɵelementEnd();
|
|
932
933
|
} if (rf & 2) {
|
|
933
934
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -964,26 +965,26 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
964
965
|
i0.ɵɵadvance(2);
|
|
965
966
|
i0.ɵɵconditional(ctx_r2.getFilteredFieldsList().length === 0 ? 28 : -1);
|
|
966
967
|
} }
|
|
967
|
-
function
|
|
968
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
968
969
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
969
|
-
i0.ɵɵelementStart(0, "section",
|
|
970
|
-
i0.ɵɵelement(3, "i",
|
|
971
|
-
i0.ɵɵelementStart(4, "input",
|
|
972
|
-
i0.ɵɵlistener("ngModelChange", function
|
|
970
|
+
i0.ɵɵelementStart(0, "section", 30)(1, "div", 121)(2, "div", 122);
|
|
971
|
+
i0.ɵɵelement(3, "i", 123);
|
|
972
|
+
i0.ɵɵelementStart(4, "input", 124);
|
|
973
|
+
i0.ɵɵlistener("ngModelChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onFieldSearch($event)); });
|
|
973
974
|
i0.ɵɵelementEnd()();
|
|
974
|
-
i0.ɵɵelementStart(5, "div",
|
|
975
|
-
i0.ɵɵlistener("click", function
|
|
976
|
-
i0.ɵɵelement(8, "i",
|
|
975
|
+
i0.ɵɵelementStart(5, "div", 125)(6, "div", 126)(7, "button", 127);
|
|
976
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.fieldViewMode = "grouped"); });
|
|
977
|
+
i0.ɵɵelement(8, "i", 50);
|
|
977
978
|
i0.ɵɵelementEnd();
|
|
978
|
-
i0.ɵɵelementStart(9, "button",
|
|
979
|
-
i0.ɵɵlistener("click", function
|
|
980
|
-
i0.ɵɵelement(10, "i",
|
|
979
|
+
i0.ɵɵelementStart(9, "button", 128);
|
|
980
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.fieldViewMode = "list"); });
|
|
981
|
+
i0.ɵɵelement(10, "i", 129);
|
|
981
982
|
i0.ɵɵelementEnd()();
|
|
982
|
-
i0.ɵɵconditionalCreate(11,
|
|
983
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template, 5, 2, "div", 130);
|
|
983
984
|
i0.ɵɵelementEnd()();
|
|
984
|
-
i0.ɵɵelementStart(12, "div",
|
|
985
|
-
i0.ɵɵconditionalCreate(13,
|
|
986
|
-
i0.ɵɵconditionalCreate(14,
|
|
985
|
+
i0.ɵɵelementStart(12, "div", 131);
|
|
986
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_13_Template, 3, 0, "div", 132);
|
|
987
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_14_Template, 29, 22, "div", 133);
|
|
987
988
|
i0.ɵɵelementEnd()();
|
|
988
989
|
} if (rf & 2) {
|
|
989
990
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1000,10 +1001,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template(rf,
|
|
|
1000
1001
|
i0.ɵɵadvance();
|
|
1001
1002
|
i0.ɵɵconditional(ctx_r2.fieldViewMode === "list" ? 14 : -1);
|
|
1002
1003
|
} }
|
|
1003
|
-
function
|
|
1004
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1004
1005
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
1005
|
-
i0.ɵɵelementStart(0, "button",
|
|
1006
|
-
i0.ɵɵlistener("click", function
|
|
1006
|
+
i0.ɵɵelementStart(0, "button", 203);
|
|
1007
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_9_For_5_Template_button_click_0_listener() { const d_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.setErdDepth(d_r29)); });
|
|
1007
1008
|
i0.ɵɵtext(1);
|
|
1008
1009
|
i0.ɵɵelementEnd();
|
|
1009
1010
|
} if (rf & 2) {
|
|
@@ -1014,31 +1015,31 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1014
1015
|
i0.ɵɵadvance();
|
|
1015
1016
|
i0.ɵɵtextInterpolate1(" ", d_r29, " ");
|
|
1016
1017
|
} }
|
|
1017
|
-
function
|
|
1018
|
-
i0.ɵɵelementStart(0, "div",
|
|
1018
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1019
|
+
i0.ɵɵelementStart(0, "div", 197)(1, "span", 200);
|
|
1019
1020
|
i0.ɵɵtext(2, "Depth:");
|
|
1020
1021
|
i0.ɵɵelementEnd();
|
|
1021
|
-
i0.ɵɵelementStart(3, "div",
|
|
1022
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1022
|
+
i0.ɵɵelementStart(3, "div", 201);
|
|
1023
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_9_For_5_Template, 2, 4, "button", 202, i0.ɵɵrepeaterTrackByIdentity);
|
|
1023
1024
|
i0.ɵɵelementEnd()();
|
|
1024
1025
|
} if (rf & 2) {
|
|
1025
1026
|
i0.ɵɵadvance(4);
|
|
1026
1027
|
i0.ɵɵrepeater(i0.ɵɵpureFunction0(0, _c0));
|
|
1027
1028
|
} }
|
|
1028
|
-
function
|
|
1029
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1029
1030
|
const _r30 = i0.ɵɵgetCurrentView();
|
|
1030
|
-
i0.ɵɵelementStart(0, "div",
|
|
1031
|
-
i0.ɵɵlistener("stateChange", function
|
|
1031
|
+
i0.ɵɵelementStart(0, "div", 198)(1, "mj-erd-composite", 204);
|
|
1032
|
+
i0.ɵɵlistener("stateChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_11_Template_mj_erd_composite_stateChange_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onERDStateChange($event)); })("openRecord", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_11_Template_mj_erd_composite_openRecord_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onERDOpenRecord($event)); });
|
|
1032
1033
|
i0.ɵɵelementEnd()();
|
|
1033
1034
|
} if (rf & 2) {
|
|
1034
1035
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1035
1036
|
i0.ɵɵadvance();
|
|
1036
1037
|
i0.ɵɵproperty("focusEntities", ctx_r2.entity ? i0.ɵɵpureFunction1(4, _c1, ctx_r2.entity) : i0.ɵɵpureFunction0(6, _c2))("showFilterPanel", false)("showHeader", false)("depth", ctx_r2.erdDepth);
|
|
1037
1038
|
} }
|
|
1038
|
-
function
|
|
1039
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_9_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1039
1040
|
const _r31 = i0.ɵɵgetCurrentView();
|
|
1040
|
-
i0.ɵɵelementStart(0, "span",
|
|
1041
|
-
i0.ɵɵlistener("click", function
|
|
1041
|
+
i0.ɵɵelementStart(0, "span", 219);
|
|
1042
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_9_For_8_Template_span_click_0_listener() { const field_r32 = i0.ɵɵrestoreView(_r31).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.selectField(field_r32)); });
|
|
1042
1043
|
i0.ɵɵelement(1, "i", 20);
|
|
1043
1044
|
i0.ɵɵtext(2);
|
|
1044
1045
|
i0.ɵɵelementEnd();
|
|
@@ -1048,15 +1049,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1048
1049
|
i0.ɵɵadvance(2);
|
|
1049
1050
|
i0.ɵɵtextInterpolate1(" ", field_r32.Name, " ");
|
|
1050
1051
|
} }
|
|
1051
|
-
function
|
|
1052
|
-
i0.ɵɵelementStart(0, "div",
|
|
1053
|
-
i0.ɵɵelement(3, "i",
|
|
1052
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1053
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "div", 214)(2, "div", 215);
|
|
1054
|
+
i0.ɵɵelement(3, "i", 64);
|
|
1054
1055
|
i0.ɵɵelementEnd();
|
|
1055
|
-
i0.ɵɵelementStart(4, "div",
|
|
1056
|
+
i0.ɵɵelementStart(4, "div", 216);
|
|
1056
1057
|
i0.ɵɵtext(5);
|
|
1057
1058
|
i0.ɵɵelementEnd()();
|
|
1058
|
-
i0.ɵɵelementStart(6, "div",
|
|
1059
|
-
i0.ɵɵrepeaterCreate(7,
|
|
1059
|
+
i0.ɵɵelementStart(6, "div", 217);
|
|
1060
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_9_For_8_Template, 3, 2, "span", 218, i0.ɵɵrepeaterTrackByIdentity);
|
|
1060
1061
|
i0.ɵɵelementEnd()();
|
|
1061
1062
|
} if (rf & 2) {
|
|
1062
1063
|
const group_r33 = ctx.$implicit;
|
|
@@ -1065,17 +1066,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1065
1066
|
i0.ɵɵadvance(2);
|
|
1066
1067
|
i0.ɵɵrepeater(group_r33.fields);
|
|
1067
1068
|
} }
|
|
1068
|
-
function
|
|
1069
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1069
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1070
|
+
i0.ɵɵelement(0, "mj-empty-state", 211);
|
|
1070
1071
|
} }
|
|
1071
|
-
function
|
|
1072
|
-
i0.ɵɵelement(0, "i",
|
|
1072
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_19_For_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1073
|
+
i0.ɵɵelement(0, "i", 223);
|
|
1073
1074
|
} }
|
|
1074
|
-
function
|
|
1075
|
-
i0.ɵɵelementStart(0, "span",
|
|
1075
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_19_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1076
|
+
i0.ɵɵelementStart(0, "span", 222);
|
|
1076
1077
|
i0.ɵɵelement(1, "i", 20);
|
|
1077
1078
|
i0.ɵɵtext(2);
|
|
1078
|
-
i0.ɵɵconditionalCreate(3,
|
|
1079
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_19_For_8_Conditional_3_Template, 1, 0, "i", 223);
|
|
1079
1080
|
i0.ɵɵelementEnd();
|
|
1080
1081
|
} if (rf & 2) {
|
|
1081
1082
|
const field_r34 = ctx.$implicit;
|
|
@@ -1085,15 +1086,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1085
1086
|
i0.ɵɵadvance();
|
|
1086
1087
|
i0.ɵɵconditional(field_r34.bundleInAPI ? 3 : -1);
|
|
1087
1088
|
} }
|
|
1088
|
-
function
|
|
1089
|
-
i0.ɵɵelementStart(0, "div",
|
|
1090
|
-
i0.ɵɵelement(3, "i",
|
|
1089
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
1090
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "div", 214)(2, "div", 220);
|
|
1091
|
+
i0.ɵɵelement(3, "i", 221);
|
|
1091
1092
|
i0.ɵɵelementEnd();
|
|
1092
|
-
i0.ɵɵelementStart(4, "div",
|
|
1093
|
+
i0.ɵɵelementStart(4, "div", 216);
|
|
1093
1094
|
i0.ɵɵtext(5);
|
|
1094
1095
|
i0.ɵɵelementEnd()();
|
|
1095
|
-
i0.ɵɵelementStart(6, "div",
|
|
1096
|
-
i0.ɵɵrepeaterCreate(7,
|
|
1096
|
+
i0.ɵɵelementStart(6, "div", 217);
|
|
1097
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_19_For_8_Template, 4, 3, "span", 222, i0.ɵɵrepeaterTrackByIdentity);
|
|
1097
1098
|
i0.ɵɵelementEnd()();
|
|
1098
1099
|
} if (rf & 2) {
|
|
1099
1100
|
const group_r35 = ctx.$implicit;
|
|
@@ -1102,29 +1103,29 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1102
1103
|
i0.ɵɵadvance(2);
|
|
1103
1104
|
i0.ɵɵrepeater(group_r35.fields);
|
|
1104
1105
|
} }
|
|
1105
|
-
function
|
|
1106
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1106
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1107
|
+
i0.ɵɵelement(0, "mj-empty-state", 213);
|
|
1107
1108
|
} }
|
|
1108
|
-
function
|
|
1109
|
-
i0.ɵɵelementStart(0, "div",
|
|
1110
|
-
i0.ɵɵelement(3, "i",
|
|
1109
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1110
|
+
i0.ɵɵelementStart(0, "div", 199)(1, "div", 205)(2, "h3", 206);
|
|
1111
|
+
i0.ɵɵelement(3, "i", 207);
|
|
1111
1112
|
i0.ɵɵtext(4, " Outgoing (References to other entities) ");
|
|
1112
|
-
i0.ɵɵelementStart(5, "span",
|
|
1113
|
+
i0.ɵɵelementStart(5, "span", 208);
|
|
1113
1114
|
i0.ɵɵtext(6);
|
|
1114
1115
|
i0.ɵɵelementEnd()();
|
|
1115
|
-
i0.ɵɵelementStart(7, "div",
|
|
1116
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1117
|
-
i0.ɵɵconditionalCreate(10,
|
|
1116
|
+
i0.ɵɵelementStart(7, "div", 209);
|
|
1117
|
+
i0.ɵɵrepeaterCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_9_Template, 9, 1, "div", 210, i0.ɵɵrepeaterTrackByIdentity);
|
|
1118
|
+
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_Conditional_10_Template, 1, 0, "mj-empty-state", 211);
|
|
1118
1119
|
i0.ɵɵelementEnd()();
|
|
1119
|
-
i0.ɵɵelementStart(11, "div",
|
|
1120
|
-
i0.ɵɵelement(13, "i",
|
|
1120
|
+
i0.ɵɵelementStart(11, "div", 205)(12, "h3", 206);
|
|
1121
|
+
i0.ɵɵelement(13, "i", 212);
|
|
1121
1122
|
i0.ɵɵtext(14, " Incoming (Entities that reference this one) ");
|
|
1122
|
-
i0.ɵɵelementStart(15, "span",
|
|
1123
|
+
i0.ɵɵelementStart(15, "span", 208);
|
|
1123
1124
|
i0.ɵɵtext(16);
|
|
1124
1125
|
i0.ɵɵelementEnd()();
|
|
1125
|
-
i0.ɵɵelementStart(17, "div",
|
|
1126
|
-
i0.ɵɵrepeaterCreate(18,
|
|
1127
|
-
i0.ɵɵconditionalCreate(20,
|
|
1126
|
+
i0.ɵɵelementStart(17, "div", 209);
|
|
1127
|
+
i0.ɵɵrepeaterCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_For_19_Template, 9, 1, "div", 210, i0.ɵɵrepeaterTrackByIdentity);
|
|
1128
|
+
i0.ɵɵconditionalCreate(20, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_Conditional_20_Template, 1, 0, "mj-empty-state", 213);
|
|
1128
1129
|
i0.ɵɵelementEnd()()();
|
|
1129
1130
|
} if (rf & 2) {
|
|
1130
1131
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1141,23 +1142,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1141
1142
|
i0.ɵɵadvance(2);
|
|
1142
1143
|
i0.ɵɵconditional(ctx_r2.groupedIncomingRelationships.length === 0 ? 20 : -1);
|
|
1143
1144
|
} }
|
|
1144
|
-
function
|
|
1145
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
1145
1146
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
1146
|
-
i0.ɵɵelementStart(0, "section",
|
|
1147
|
-
i0.ɵɵlistener("click", function
|
|
1148
|
-
i0.ɵɵelement(4, "i",
|
|
1147
|
+
i0.ɵɵelementStart(0, "section", 31)(1, "div", 121)(2, "div", 195)(3, "button", 196);
|
|
1148
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.relationshipViewMode = "diagram"); });
|
|
1149
|
+
i0.ɵɵelement(4, "i", 66);
|
|
1149
1150
|
i0.ɵɵtext(5, " Diagram ");
|
|
1150
1151
|
i0.ɵɵelementEnd();
|
|
1151
|
-
i0.ɵɵelementStart(6, "button",
|
|
1152
|
-
i0.ɵɵlistener("click", function
|
|
1153
|
-
i0.ɵɵelement(7, "i",
|
|
1152
|
+
i0.ɵɵelementStart(6, "button", 196);
|
|
1153
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.relationshipViewMode = "list"); });
|
|
1154
|
+
i0.ɵɵelement(7, "i", 129);
|
|
1154
1155
|
i0.ɵɵtext(8, " List ");
|
|
1155
1156
|
i0.ɵɵelementEnd()();
|
|
1156
|
-
i0.ɵɵconditionalCreate(9,
|
|
1157
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_9_Template, 6, 1, "div", 197);
|
|
1157
1158
|
i0.ɵɵelementEnd();
|
|
1158
|
-
i0.ɵɵelementStart(10, "div",
|
|
1159
|
-
i0.ɵɵconditionalCreate(11,
|
|
1160
|
-
i0.ɵɵconditionalCreate(12,
|
|
1159
|
+
i0.ɵɵelementStart(10, "div", 55);
|
|
1160
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_11_Template, 2, 7, "div", 198);
|
|
1161
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_12_Template, 21, 4, "div", 199);
|
|
1161
1162
|
i0.ɵɵelementEnd()();
|
|
1162
1163
|
} if (rf & 2) {
|
|
1163
1164
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1172,11 +1173,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template(rf,
|
|
|
1172
1173
|
i0.ɵɵadvance();
|
|
1173
1174
|
i0.ɵɵconditional(ctx_r2.relationshipViewMode === "list" ? 12 : -1);
|
|
1174
1175
|
} }
|
|
1175
|
-
function
|
|
1176
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1176
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1177
|
+
i0.ɵɵelement(0, "mj-empty-state", 224);
|
|
1177
1178
|
} }
|
|
1178
|
-
function
|
|
1179
|
-
i0.ɵɵelementStart(0, "p",
|
|
1179
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1180
|
+
i0.ɵɵelementStart(0, "p", 233);
|
|
1180
1181
|
i0.ɵɵtext(1);
|
|
1181
1182
|
i0.ɵɵelementEnd();
|
|
1182
1183
|
} if (rf & 2) {
|
|
@@ -1184,11 +1185,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1184
1185
|
i0.ɵɵadvance();
|
|
1185
1186
|
i0.ɵɵtextInterpolate(okGroup_r36.OrganicKey.Description);
|
|
1186
1187
|
} }
|
|
1187
|
-
function
|
|
1188
|
-
i0.ɵɵelementStart(0, "span",
|
|
1188
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_For_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1189
|
+
i0.ɵɵelementStart(0, "span", 243);
|
|
1189
1190
|
i0.ɵɵtext(1, "Direct");
|
|
1190
1191
|
i0.ɵɵelementEnd();
|
|
1191
|
-
i0.ɵɵelementStart(2, "span",
|
|
1192
|
+
i0.ɵɵelementStart(2, "span", 244);
|
|
1192
1193
|
i0.ɵɵtext(3);
|
|
1193
1194
|
i0.ɵɵelementEnd();
|
|
1194
1195
|
} if (rf & 2) {
|
|
@@ -1197,11 +1198,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1197
1198
|
i0.ɵɵadvance(3);
|
|
1198
1199
|
i0.ɵɵtextInterpolate2("", okGroup_r36.OrganicKey.MatchFieldNames, " \u2192 ", target_r38.Info.RelatedEntityFieldNames);
|
|
1199
1200
|
} }
|
|
1200
|
-
function
|
|
1201
|
-
i0.ɵɵelementStart(0, "span",
|
|
1201
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_For_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1202
|
+
i0.ɵɵelementStart(0, "span", 245);
|
|
1202
1203
|
i0.ɵɵtext(1, "Transitive");
|
|
1203
1204
|
i0.ɵɵelementEnd();
|
|
1204
|
-
i0.ɵɵelementStart(2, "span",
|
|
1205
|
+
i0.ɵɵelementStart(2, "span", 246);
|
|
1205
1206
|
i0.ɵɵtext(3);
|
|
1206
1207
|
i0.ɵɵelementEnd();
|
|
1207
1208
|
} if (rf & 2) {
|
|
@@ -1211,22 +1212,22 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1211
1212
|
i0.ɵɵadvance();
|
|
1212
1213
|
i0.ɵɵtextInterpolate1("via ", target_r38.Info.TransitiveObjectName);
|
|
1213
1214
|
} }
|
|
1214
|
-
function
|
|
1215
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
1215
1216
|
const _r37 = i0.ɵɵgetCurrentView();
|
|
1216
|
-
i0.ɵɵelementStart(0, "div",
|
|
1217
|
-
i0.ɵɵlistener("click", function
|
|
1218
|
-
i0.ɵɵelementStart(1, "div",
|
|
1219
|
-
i0.ɵɵelement(2, "i",
|
|
1220
|
-
i0.ɵɵelementEnd();
|
|
1221
|
-
i0.ɵɵelementStart(3, "div",
|
|
1222
|
-
i0.ɵɵelement(5, "i",
|
|
1223
|
-
i0.ɵɵelementStart(6, "span",
|
|
1217
|
+
i0.ɵɵelementStart(0, "div", 236);
|
|
1218
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_For_13_Template_div_click_0_listener() { const target_r38 = i0.ɵɵrestoreView(_r37).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.NavigateToEntityByID(target_r38.Info.RelatedEntityID)); });
|
|
1219
|
+
i0.ɵɵelementStart(1, "div", 215);
|
|
1220
|
+
i0.ɵɵelement(2, "i", 64);
|
|
1221
|
+
i0.ɵɵelementEnd();
|
|
1222
|
+
i0.ɵɵelementStart(3, "div", 237)(4, "div", 238);
|
|
1223
|
+
i0.ɵɵelement(5, "i", 239);
|
|
1224
|
+
i0.ɵɵelementStart(6, "span", 240);
|
|
1224
1225
|
i0.ɵɵtext(7);
|
|
1225
1226
|
i0.ɵɵelementEnd();
|
|
1226
|
-
i0.ɵɵelement(8, "i",
|
|
1227
|
+
i0.ɵɵelement(8, "i", 241);
|
|
1227
1228
|
i0.ɵɵelementEnd();
|
|
1228
|
-
i0.ɵɵelementStart(9, "div",
|
|
1229
|
-
i0.ɵɵconditionalCreate(10,
|
|
1229
|
+
i0.ɵɵelementStart(9, "div", 242);
|
|
1230
|
+
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_For_13_Conditional_10_Template, 4, 2)(11, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_For_13_Conditional_11_Template, 4, 2);
|
|
1230
1231
|
i0.ɵɵelementEnd()()();
|
|
1231
1232
|
} if (rf & 2) {
|
|
1232
1233
|
const target_r38 = ctx.$implicit;
|
|
@@ -1237,20 +1238,20 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1237
1238
|
i0.ɵɵadvance(3);
|
|
1238
1239
|
i0.ɵɵconditional(target_r38.Info.IsDirectMatch ? 10 : 11);
|
|
1239
1240
|
} }
|
|
1240
|
-
function
|
|
1241
|
-
i0.ɵɵelementStart(0, "div",
|
|
1242
|
-
i0.ɵɵelement(3, "i",
|
|
1241
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1242
|
+
i0.ɵɵelementStart(0, "div", 226)(1, "div", 227)(2, "div", 228);
|
|
1243
|
+
i0.ɵɵelement(3, "i", 229);
|
|
1243
1244
|
i0.ɵɵtext(4);
|
|
1244
1245
|
i0.ɵɵelementEnd();
|
|
1245
|
-
i0.ɵɵelementStart(5, "div",
|
|
1246
|
+
i0.ɵɵelementStart(5, "div", 230)(6, "span", 231);
|
|
1246
1247
|
i0.ɵɵtext(7);
|
|
1247
1248
|
i0.ɵɵelementEnd();
|
|
1248
|
-
i0.ɵɵelementStart(8, "span",
|
|
1249
|
+
i0.ɵɵelementStart(8, "span", 232);
|
|
1249
1250
|
i0.ɵɵtext(9);
|
|
1250
1251
|
i0.ɵɵelementEnd()()();
|
|
1251
|
-
i0.ɵɵconditionalCreate(10,
|
|
1252
|
-
i0.ɵɵelementStart(11, "div",
|
|
1253
|
-
i0.ɵɵrepeaterCreate(12,
|
|
1252
|
+
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_Conditional_10_Template, 2, 1, "p", 233);
|
|
1253
|
+
i0.ɵɵelementStart(11, "div", 234);
|
|
1254
|
+
i0.ɵɵrepeaterCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_For_13_Template, 12, 4, "div", 235, _forTrack3);
|
|
1254
1255
|
i0.ɵɵelementEnd()();
|
|
1255
1256
|
} if (rf & 2) {
|
|
1256
1257
|
const okGroup_r36 = ctx.$implicit;
|
|
@@ -1265,15 +1266,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1265
1266
|
i0.ɵɵadvance(2);
|
|
1266
1267
|
i0.ɵɵrepeater(okGroup_r36.RelatedEntities);
|
|
1267
1268
|
} }
|
|
1268
|
-
function
|
|
1269
|
-
i0.ɵɵelementStart(0, "div",
|
|
1270
|
-
i0.ɵɵelement(2, "i",
|
|
1269
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1270
|
+
i0.ɵɵelementStart(0, "div", 205)(1, "h3", 206);
|
|
1271
|
+
i0.ɵɵelement(2, "i", 207);
|
|
1271
1272
|
i0.ɵɵtext(3, " Outgoing (Matches from this entity) ");
|
|
1272
|
-
i0.ɵɵelementStart(4, "span",
|
|
1273
|
+
i0.ɵɵelementStart(4, "span", 208);
|
|
1273
1274
|
i0.ɵɵtext(5);
|
|
1274
1275
|
i0.ɵɵelementEnd()();
|
|
1275
|
-
i0.ɵɵelementStart(6, "div",
|
|
1276
|
-
i0.ɵɵrepeaterCreate(7,
|
|
1276
|
+
i0.ɵɵelementStart(6, "div", 225);
|
|
1277
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_For_8_Template, 14, 4, "div", 226, _forTrack2);
|
|
1277
1278
|
i0.ɵɵelementEnd()();
|
|
1278
1279
|
} if (rf & 2) {
|
|
1279
1280
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -1282,11 +1283,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1282
1283
|
i0.ɵɵadvance(2);
|
|
1283
1284
|
i0.ɵɵrepeater(ctx_r2.organicKeysOutgoing);
|
|
1284
1285
|
} }
|
|
1285
|
-
function
|
|
1286
|
-
i0.ɵɵelementStart(0, "div",
|
|
1286
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_For_8_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1287
|
+
i0.ɵɵelementStart(0, "div", 250)(1, "span", 251);
|
|
1287
1288
|
i0.ɵɵtext(2, "Matched via:");
|
|
1288
1289
|
i0.ɵɵelementEnd();
|
|
1289
|
-
i0.ɵɵelementStart(3, "span",
|
|
1290
|
+
i0.ɵɵelementStart(3, "span", 252);
|
|
1290
1291
|
i0.ɵɵtext(4);
|
|
1291
1292
|
i0.ɵɵelementEnd()();
|
|
1292
1293
|
} if (rf & 2) {
|
|
@@ -1294,11 +1295,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1294
1295
|
i0.ɵɵadvance(4);
|
|
1295
1296
|
i0.ɵɵtextInterpolate(incoming_r40.RelatedEntityConfig.RelatedEntityFieldNames);
|
|
1296
1297
|
} }
|
|
1297
|
-
function
|
|
1298
|
-
i0.ɵɵelementStart(0, "div",
|
|
1298
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_For_8_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
1299
|
+
i0.ɵɵelementStart(0, "div", 250)(1, "span", 251);
|
|
1299
1300
|
i0.ɵɵtext(2, "Bridge:");
|
|
1300
1301
|
i0.ɵɵelementEnd();
|
|
1301
|
-
i0.ɵɵelementStart(3, "span",
|
|
1302
|
+
i0.ɵɵelementStart(3, "span", 252);
|
|
1302
1303
|
i0.ɵɵtext(4);
|
|
1303
1304
|
i0.ɵɵelementEnd()();
|
|
1304
1305
|
} if (rf & 2) {
|
|
@@ -1306,33 +1307,33 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1306
1307
|
i0.ɵɵadvance(4);
|
|
1307
1308
|
i0.ɵɵtextInterpolate(incoming_r40.RelatedEntityConfig.TransitiveObjectName);
|
|
1308
1309
|
} }
|
|
1309
|
-
function
|
|
1310
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1310
1311
|
const _r39 = i0.ɵɵgetCurrentView();
|
|
1311
|
-
i0.ɵɵelementStart(0, "div",
|
|
1312
|
-
i0.ɵɵlistener("click", function
|
|
1313
|
-
i0.ɵɵelementStart(1, "div",
|
|
1314
|
-
i0.ɵɵelement(4, "i",
|
|
1312
|
+
i0.ɵɵelementStart(0, "div", 248);
|
|
1313
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_For_8_Template_div_click_0_listener() { const incoming_r40 = i0.ɵɵrestoreView(_r39).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntityByID(incoming_r40.SourceEntityID)); });
|
|
1314
|
+
i0.ɵɵelementStart(1, "div", 227)(2, "div", 228)(3, "div", 220);
|
|
1315
|
+
i0.ɵɵelement(4, "i", 221);
|
|
1315
1316
|
i0.ɵɵelementEnd();
|
|
1316
|
-
i0.ɵɵelement(5, "i",
|
|
1317
|
+
i0.ɵɵelement(5, "i", 239);
|
|
1317
1318
|
i0.ɵɵtext(6);
|
|
1318
|
-
i0.ɵɵelement(7, "i",
|
|
1319
|
+
i0.ɵɵelement(7, "i", 241);
|
|
1319
1320
|
i0.ɵɵelementEnd();
|
|
1320
|
-
i0.ɵɵelementStart(8, "div",
|
|
1321
|
+
i0.ɵɵelementStart(8, "div", 230)(9, "span", 249);
|
|
1321
1322
|
i0.ɵɵtext(10);
|
|
1322
1323
|
i0.ɵɵelementEnd()()();
|
|
1323
|
-
i0.ɵɵelementStart(11, "div",
|
|
1324
|
+
i0.ɵɵelementStart(11, "div", 250)(12, "span", 251);
|
|
1324
1325
|
i0.ɵɵtext(13, "Key:");
|
|
1325
1326
|
i0.ɵɵelementEnd();
|
|
1326
|
-
i0.ɵɵelementStart(14, "span",
|
|
1327
|
+
i0.ɵɵelementStart(14, "span", 252);
|
|
1327
1328
|
i0.ɵɵtext(15);
|
|
1328
1329
|
i0.ɵɵelementEnd();
|
|
1329
|
-
i0.ɵɵelementStart(16, "span",
|
|
1330
|
+
i0.ɵɵelementStart(16, "span", 232);
|
|
1330
1331
|
i0.ɵɵtext(17);
|
|
1331
1332
|
i0.ɵɵelementEnd();
|
|
1332
|
-
i0.ɵɵelementStart(18, "span",
|
|
1333
|
+
i0.ɵɵelementStart(18, "span", 231);
|
|
1333
1334
|
i0.ɵɵtext(19);
|
|
1334
1335
|
i0.ɵɵelementEnd()();
|
|
1335
|
-
i0.ɵɵconditionalCreate(20,
|
|
1336
|
+
i0.ɵɵconditionalCreate(20, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_For_8_Conditional_20_Template, 5, 1, "div", 250)(21, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_For_8_Conditional_21_Template, 5, 1, "div", 250);
|
|
1336
1337
|
i0.ɵɵelementEnd();
|
|
1337
1338
|
} if (rf & 2) {
|
|
1338
1339
|
const incoming_r40 = ctx.$implicit;
|
|
@@ -1353,15 +1354,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1353
1354
|
i0.ɵɵadvance();
|
|
1354
1355
|
i0.ɵɵconditional(incoming_r40.RelatedEntityConfig.IsDirectMatch ? 20 : 21);
|
|
1355
1356
|
} }
|
|
1356
|
-
function
|
|
1357
|
-
i0.ɵɵelementStart(0, "div",
|
|
1358
|
-
i0.ɵɵelement(2, "i",
|
|
1357
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1358
|
+
i0.ɵɵelementStart(0, "div", 205)(1, "h3", 206);
|
|
1359
|
+
i0.ɵɵelement(2, "i", 212);
|
|
1359
1360
|
i0.ɵɵtext(3, " Incoming (Other entities matching to this one) ");
|
|
1360
|
-
i0.ɵɵelementStart(4, "span",
|
|
1361
|
+
i0.ɵɵelementStart(4, "span", 208);
|
|
1361
1362
|
i0.ɵɵtext(5);
|
|
1362
1363
|
i0.ɵɵelementEnd()();
|
|
1363
|
-
i0.ɵɵelementStart(6, "div",
|
|
1364
|
-
i0.ɵɵrepeaterCreate(7,
|
|
1364
|
+
i0.ɵɵelementStart(6, "div", 225);
|
|
1365
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_For_8_Template, 22, 12, "div", 247, _forTrack4);
|
|
1365
1366
|
i0.ɵɵelementEnd()();
|
|
1366
1367
|
} if (rf & 2) {
|
|
1367
1368
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -1370,71 +1371,71 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_
|
|
|
1370
1371
|
i0.ɵɵadvance(2);
|
|
1371
1372
|
i0.ɵɵrepeater(ctx_r2.organicKeysIncoming);
|
|
1372
1373
|
} }
|
|
1373
|
-
function
|
|
1374
|
-
i0.ɵɵconditionalCreate(0,
|
|
1375
|
-
i0.ɵɵconditionalCreate(1,
|
|
1374
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1375
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_0_Template, 9, 1, "div", 205);
|
|
1376
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Conditional_1_Template, 9, 1, "div", 205);
|
|
1376
1377
|
} if (rf & 2) {
|
|
1377
1378
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1378
1379
|
i0.ɵɵconditional(ctx_r2.organicKeysOutgoing.length > 0 ? 0 : -1);
|
|
1379
1380
|
i0.ɵɵadvance();
|
|
1380
1381
|
i0.ɵɵconditional(ctx_r2.organicKeysIncoming.length > 0 ? 1 : -1);
|
|
1381
1382
|
} }
|
|
1382
|
-
function
|
|
1383
|
-
i0.ɵɵelementStart(0, "section",
|
|
1384
|
-
i0.ɵɵconditionalCreate(2,
|
|
1383
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
1384
|
+
i0.ɵɵelementStart(0, "section", 32)(1, "div", 55);
|
|
1385
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_2_Template, 1, 0, "mj-empty-state", 224)(3, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_3_Template, 2, 2);
|
|
1385
1386
|
i0.ɵɵelementEnd()();
|
|
1386
1387
|
} if (rf & 2) {
|
|
1387
1388
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
1388
1389
|
i0.ɵɵadvance(2);
|
|
1389
1390
|
i0.ɵɵconditional(ctx_r2.organicKeysOutgoing.length === 0 && ctx_r2.organicKeysIncoming.length === 0 ? 2 : 3);
|
|
1390
1391
|
} }
|
|
1391
|
-
function
|
|
1392
|
-
i0.ɵɵelementStart(0, "span",
|
|
1392
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1393
|
+
i0.ɵɵelementStart(0, "span", 265);
|
|
1393
1394
|
i0.ɵɵtext(1, "R");
|
|
1394
1395
|
i0.ɵɵelementEnd();
|
|
1395
1396
|
} }
|
|
1396
|
-
function
|
|
1397
|
-
i0.ɵɵelementStart(0, "span",
|
|
1397
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1398
|
+
i0.ɵɵelementStart(0, "span", 266);
|
|
1398
1399
|
i0.ɵɵtext(1, "C");
|
|
1399
1400
|
i0.ɵɵelementEnd();
|
|
1400
1401
|
} }
|
|
1401
|
-
function
|
|
1402
|
-
i0.ɵɵelementStart(0, "span",
|
|
1402
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1403
|
+
i0.ɵɵelementStart(0, "span", 267);
|
|
1403
1404
|
i0.ɵɵtext(1, "U");
|
|
1404
1405
|
i0.ɵɵelementEnd();
|
|
1405
1406
|
} }
|
|
1406
|
-
function
|
|
1407
|
-
i0.ɵɵelementStart(0, "span",
|
|
1407
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1408
|
+
i0.ɵɵelementStart(0, "span", 268);
|
|
1408
1409
|
i0.ɵɵtext(1, "D");
|
|
1409
1410
|
i0.ɵɵelementEnd();
|
|
1410
1411
|
} }
|
|
1411
|
-
function
|
|
1412
|
-
i0.ɵɵelementStart(0, "span",
|
|
1412
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1413
|
+
i0.ɵɵelementStart(0, "span", 269);
|
|
1413
1414
|
i0.ɵɵtext(1, "None");
|
|
1414
1415
|
i0.ɵɵelementEnd();
|
|
1415
1416
|
} }
|
|
1416
|
-
function
|
|
1417
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
1417
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
1418
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 262);
|
|
1418
1419
|
i0.ɵɵtext(2);
|
|
1419
1420
|
i0.ɵɵelementEnd();
|
|
1420
|
-
i0.ɵɵelementStart(3, "td",
|
|
1421
|
-
i0.ɵɵelement(4, "i",
|
|
1421
|
+
i0.ɵɵelementStart(3, "td", 255);
|
|
1422
|
+
i0.ɵɵelement(4, "i", 263);
|
|
1422
1423
|
i0.ɵɵelementEnd();
|
|
1423
|
-
i0.ɵɵelementStart(5, "td",
|
|
1424
|
-
i0.ɵɵelement(6, "i",
|
|
1424
|
+
i0.ɵɵelementStart(5, "td", 255);
|
|
1425
|
+
i0.ɵɵelement(6, "i", 263);
|
|
1425
1426
|
i0.ɵɵelementEnd();
|
|
1426
|
-
i0.ɵɵelementStart(7, "td",
|
|
1427
|
-
i0.ɵɵelement(8, "i",
|
|
1427
|
+
i0.ɵɵelementStart(7, "td", 255);
|
|
1428
|
+
i0.ɵɵelement(8, "i", 263);
|
|
1428
1429
|
i0.ɵɵelementEnd();
|
|
1429
|
-
i0.ɵɵelementStart(9, "td",
|
|
1430
|
-
i0.ɵɵelement(10, "i",
|
|
1430
|
+
i0.ɵɵelementStart(9, "td", 255);
|
|
1431
|
+
i0.ɵɵelement(10, "i", 263);
|
|
1431
1432
|
i0.ɵɵelementEnd();
|
|
1432
|
-
i0.ɵɵelementStart(11, "td",
|
|
1433
|
-
i0.ɵɵconditionalCreate(12,
|
|
1434
|
-
i0.ɵɵconditionalCreate(13,
|
|
1435
|
-
i0.ɵɵconditionalCreate(14,
|
|
1436
|
-
i0.ɵɵconditionalCreate(15,
|
|
1437
|
-
i0.ɵɵconditionalCreate(16,
|
|
1433
|
+
i0.ɵɵelementStart(11, "td", 264);
|
|
1434
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_12_Template, 2, 0, "span", 265);
|
|
1435
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_13_Template, 2, 0, "span", 266);
|
|
1436
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_14_Template, 2, 0, "span", 267);
|
|
1437
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_15_Template, 2, 0, "span", 268);
|
|
1438
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Conditional_16_Template, 2, 0, "span", 269);
|
|
1438
1439
|
i0.ɵɵelementEnd()();
|
|
1439
1440
|
} if (rf & 2) {
|
|
1440
1441
|
const perm_r41 = ctx.$implicit;
|
|
@@ -1460,69 +1461,69 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Templ
|
|
|
1460
1461
|
i0.ɵɵadvance();
|
|
1461
1462
|
i0.ɵɵconditional(!perm_r41.ReadRLSFilterID && !perm_r41.CreateRLSFilterID && !perm_r41.UpdateRLSFilterID && !perm_r41.DeleteRLSFilterID ? 16 : -1);
|
|
1462
1463
|
} }
|
|
1463
|
-
function
|
|
1464
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
1464
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
1465
|
+
i0.ɵɵelement(0, "mj-empty-state", 256);
|
|
1465
1466
|
} }
|
|
1466
|
-
function
|
|
1467
|
-
i0.ɵɵelementStart(0, "section",
|
|
1467
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
1468
|
+
i0.ɵɵelementStart(0, "section", 33)(1, "div", 55)(2, "div", 253)(3, "table", 254)(4, "thead")(5, "tr")(6, "th");
|
|
1468
1469
|
i0.ɵɵtext(7, "Role");
|
|
1469
1470
|
i0.ɵɵelementEnd();
|
|
1470
|
-
i0.ɵɵelementStart(8, "th",
|
|
1471
|
+
i0.ɵɵelementStart(8, "th", 255);
|
|
1471
1472
|
i0.ɵɵtext(9, "Create");
|
|
1472
1473
|
i0.ɵɵelementEnd();
|
|
1473
|
-
i0.ɵɵelementStart(10, "th",
|
|
1474
|
+
i0.ɵɵelementStart(10, "th", 255);
|
|
1474
1475
|
i0.ɵɵtext(11, "Read");
|
|
1475
1476
|
i0.ɵɵelementEnd();
|
|
1476
|
-
i0.ɵɵelementStart(12, "th",
|
|
1477
|
+
i0.ɵɵelementStart(12, "th", 255);
|
|
1477
1478
|
i0.ɵɵtext(13, "Update");
|
|
1478
1479
|
i0.ɵɵelementEnd();
|
|
1479
|
-
i0.ɵɵelementStart(14, "th",
|
|
1480
|
+
i0.ɵɵelementStart(14, "th", 255);
|
|
1480
1481
|
i0.ɵɵtext(15, "Delete");
|
|
1481
1482
|
i0.ɵɵelementEnd();
|
|
1482
1483
|
i0.ɵɵelementStart(16, "th");
|
|
1483
1484
|
i0.ɵɵtext(17, "RLS");
|
|
1484
1485
|
i0.ɵɵelementEnd()()();
|
|
1485
1486
|
i0.ɵɵelementStart(18, "tbody");
|
|
1486
|
-
i0.ɵɵrepeaterCreate(19,
|
|
1487
|
+
i0.ɵɵrepeaterCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_56_For_20_Template, 17, 10, "tr", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1487
1488
|
i0.ɵɵelementEnd()();
|
|
1488
|
-
i0.ɵɵconditionalCreate(21,
|
|
1489
|
+
i0.ɵɵconditionalCreate(21, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_21_Template, 1, 0, "mj-empty-state", 256);
|
|
1489
1490
|
i0.ɵɵelementEnd();
|
|
1490
|
-
i0.ɵɵelementStart(22, "div",
|
|
1491
|
-
i0.ɵɵelement(24, "i",
|
|
1491
|
+
i0.ɵɵelementStart(22, "div", 257)(23, "h3", 71);
|
|
1492
|
+
i0.ɵɵelement(24, "i", 258);
|
|
1492
1493
|
i0.ɵɵtext(25, " API Capabilities ");
|
|
1493
1494
|
i0.ɵɵelementEnd();
|
|
1494
|
-
i0.ɵɵelementStart(26, "div",
|
|
1495
|
-
i0.ɵɵelement(28, "i",
|
|
1495
|
+
i0.ɵɵelementStart(26, "div", 259)(27, "div", 260);
|
|
1496
|
+
i0.ɵɵelement(28, "i", 261);
|
|
1496
1497
|
i0.ɵɵelementStart(29, "span");
|
|
1497
1498
|
i0.ɵɵtext(30, "Include in API");
|
|
1498
1499
|
i0.ɵɵelementEnd()();
|
|
1499
|
-
i0.ɵɵelementStart(31, "div",
|
|
1500
|
-
i0.ɵɵelement(32, "i",
|
|
1500
|
+
i0.ɵɵelementStart(31, "div", 260);
|
|
1501
|
+
i0.ɵɵelement(32, "i", 261);
|
|
1501
1502
|
i0.ɵɵelementStart(33, "span");
|
|
1502
1503
|
i0.ɵɵtext(34, "Allow All Rows");
|
|
1503
1504
|
i0.ɵɵelementEnd()();
|
|
1504
|
-
i0.ɵɵelementStart(35, "div",
|
|
1505
|
-
i0.ɵɵelement(36, "i",
|
|
1505
|
+
i0.ɵɵelementStart(35, "div", 260);
|
|
1506
|
+
i0.ɵɵelement(36, "i", 261);
|
|
1506
1507
|
i0.ɵɵelementStart(37, "span");
|
|
1507
1508
|
i0.ɵɵtext(38, "Allow Create");
|
|
1508
1509
|
i0.ɵɵelementEnd()();
|
|
1509
|
-
i0.ɵɵelementStart(39, "div",
|
|
1510
|
-
i0.ɵɵelement(40, "i",
|
|
1510
|
+
i0.ɵɵelementStart(39, "div", 260);
|
|
1511
|
+
i0.ɵɵelement(40, "i", 261);
|
|
1511
1512
|
i0.ɵɵelementStart(41, "span");
|
|
1512
1513
|
i0.ɵɵtext(42, "Allow Update");
|
|
1513
1514
|
i0.ɵɵelementEnd()();
|
|
1514
|
-
i0.ɵɵelementStart(43, "div",
|
|
1515
|
-
i0.ɵɵelement(44, "i",
|
|
1515
|
+
i0.ɵɵelementStart(43, "div", 260);
|
|
1516
|
+
i0.ɵɵelement(44, "i", 261);
|
|
1516
1517
|
i0.ɵɵelementStart(45, "span");
|
|
1517
1518
|
i0.ɵɵtext(46, "Allow Delete");
|
|
1518
1519
|
i0.ɵɵelementEnd()();
|
|
1519
|
-
i0.ɵɵelementStart(47, "div",
|
|
1520
|
-
i0.ɵɵelement(48, "i",
|
|
1520
|
+
i0.ɵɵelementStart(47, "div", 260);
|
|
1521
|
+
i0.ɵɵelement(48, "i", 261);
|
|
1521
1522
|
i0.ɵɵelementStart(49, "span");
|
|
1522
1523
|
i0.ɵɵtext(50, "User Search");
|
|
1523
1524
|
i0.ɵɵelementEnd()();
|
|
1524
|
-
i0.ɵɵelementStart(51, "div",
|
|
1525
|
-
i0.ɵɵelement(52, "i",
|
|
1525
|
+
i0.ɵɵelementStart(51, "div", 260);
|
|
1526
|
+
i0.ɵɵelement(52, "i", 261);
|
|
1526
1527
|
i0.ɵɵelementStart(53, "span");
|
|
1527
1528
|
i0.ɵɵtext(54, "Custom Resolver");
|
|
1528
1529
|
i0.ɵɵelementEnd()()()()()();
|
|
@@ -1561,122 +1562,122 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template(rf,
|
|
|
1561
1562
|
i0.ɵɵadvance();
|
|
1562
1563
|
i0.ɵɵproperty("ngClass", ctx_r2.entity.CustomResolverAPI ? "fa-check" : "fa-xmark");
|
|
1563
1564
|
} }
|
|
1564
|
-
function
|
|
1565
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1565
1566
|
const _r42 = i0.ɵɵgetCurrentView();
|
|
1566
|
-
i0.ɵɵelementStart(0, "mj-entity-viewer",
|
|
1567
|
-
i0.ɵɵlistener("RecordOpened", function
|
|
1567
|
+
i0.ɵɵelementStart(0, "mj-entity-viewer", 272);
|
|
1568
|
+
i0.ɵɵlistener("RecordOpened", function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_2_Template_mj_entity_viewer_RecordOpened_0_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnRecordOpened($event)); })("CreateRecordRequested", function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_2_Template_mj_entity_viewer_CreateRecordRequested_0_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnAddRequested()); });
|
|
1568
1569
|
i0.ɵɵelementEnd();
|
|
1569
1570
|
} if (rf & 2) {
|
|
1570
1571
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1571
1572
|
i0.ɵɵproperty("Entity", ctx_r2.entity)("Provider", ctx_r2.Provider);
|
|
1572
1573
|
} }
|
|
1573
|
-
function
|
|
1574
|
-
i0.ɵɵelementStart(0, "section",
|
|
1575
|
-
i0.ɵɵconditionalCreate(2,
|
|
1574
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
1575
|
+
i0.ɵɵelementStart(0, "section", 34)(1, "div", 270);
|
|
1576
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_2_Template, 1, 2, "mj-entity-viewer", 271);
|
|
1576
1577
|
i0.ɵɵelementEnd()();
|
|
1577
1578
|
} if (rf & 2) {
|
|
1578
1579
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
1579
1580
|
i0.ɵɵadvance(2);
|
|
1580
1581
|
i0.ɵɵconditional(ctx_r2.entity ? 2 : -1);
|
|
1581
1582
|
} }
|
|
1582
|
-
function
|
|
1583
|
-
i0.ɵɵelementStart(0, "div",
|
|
1584
|
-
i0.ɵɵelement(1, "i",
|
|
1583
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1584
|
+
i0.ɵɵelementStart(0, "div", 276);
|
|
1585
|
+
i0.ɵɵelement(1, "i", 258);
|
|
1585
1586
|
i0.ɵɵelementStart(2, "span");
|
|
1586
1587
|
i0.ɵɵtext(3, "API Create");
|
|
1587
1588
|
i0.ɵɵelementEnd()();
|
|
1588
1589
|
} }
|
|
1589
|
-
function
|
|
1590
|
-
i0.ɵɵelementStart(0, "div",
|
|
1591
|
-
i0.ɵɵelement(1, "i",
|
|
1590
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1591
|
+
i0.ɵɵelementStart(0, "div", 276);
|
|
1592
|
+
i0.ɵɵelement(1, "i", 283);
|
|
1592
1593
|
i0.ɵɵelementStart(2, "span");
|
|
1593
1594
|
i0.ɵɵtext(3, "Record Changes");
|
|
1594
1595
|
i0.ɵɵelementEnd()();
|
|
1595
1596
|
} }
|
|
1596
|
-
function
|
|
1597
|
-
i0.ɵɵelementStart(0, "div",
|
|
1598
|
-
i0.ɵɵelement(1, "i",
|
|
1597
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1598
|
+
i0.ɵɵelementStart(0, "div", 276);
|
|
1599
|
+
i0.ɵɵelement(1, "i", 43);
|
|
1599
1600
|
i0.ɵɵelementStart(2, "span");
|
|
1600
1601
|
i0.ɵɵtext(3, "Access Audit");
|
|
1601
1602
|
i0.ɵɵelementEnd()();
|
|
1602
1603
|
} }
|
|
1603
|
-
function
|
|
1604
|
-
i0.ɵɵelementStart(0, "section",
|
|
1604
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
1605
|
+
i0.ɵɵelementStart(0, "section", 35)(1, "div", 55)(2, "div", 273)(3, "div", 274)(4, "h4");
|
|
1605
1606
|
i0.ɵɵtext(5, "Data Sources");
|
|
1606
1607
|
i0.ɵɵelementEnd();
|
|
1607
|
-
i0.ɵɵelementStart(6, "div",
|
|
1608
|
-
i0.ɵɵelement(8, "i",
|
|
1608
|
+
i0.ɵɵelementStart(6, "div", 275)(7, "div", 276);
|
|
1609
|
+
i0.ɵɵelement(8, "i", 277);
|
|
1609
1610
|
i0.ɵɵelementStart(9, "span");
|
|
1610
1611
|
i0.ɵɵtext(10, "Manual Entry");
|
|
1611
1612
|
i0.ɵɵelementEnd()();
|
|
1612
|
-
i0.ɵɵconditionalCreate(11,
|
|
1613
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_11_Template, 4, 0, "div", 276);
|
|
1613
1614
|
i0.ɵɵelementEnd()();
|
|
1614
|
-
i0.ɵɵelementStart(12, "div",
|
|
1615
|
-
i0.ɵɵelement(13, "i",
|
|
1615
|
+
i0.ɵɵelementStart(12, "div", 278);
|
|
1616
|
+
i0.ɵɵelement(13, "i", 64);
|
|
1616
1617
|
i0.ɵɵelementEnd();
|
|
1617
|
-
i0.ɵɵelementStart(14, "div",
|
|
1618
|
+
i0.ɵɵelementStart(14, "div", 279)(15, "div", 280);
|
|
1618
1619
|
i0.ɵɵelement(16, "i");
|
|
1619
1620
|
i0.ɵɵelementStart(17, "span");
|
|
1620
1621
|
i0.ɵɵtext(18);
|
|
1621
1622
|
i0.ɵɵelementEnd()()();
|
|
1622
|
-
i0.ɵɵelementStart(19, "div",
|
|
1623
|
-
i0.ɵɵelement(20, "i",
|
|
1623
|
+
i0.ɵɵelementStart(19, "div", 278);
|
|
1624
|
+
i0.ɵɵelement(20, "i", 64);
|
|
1624
1625
|
i0.ɵɵelementEnd();
|
|
1625
|
-
i0.ɵɵelementStart(21, "div",
|
|
1626
|
+
i0.ɵɵelementStart(21, "div", 281)(22, "h4");
|
|
1626
1627
|
i0.ɵɵtext(23, "Data Sinks");
|
|
1627
1628
|
i0.ɵɵelementEnd();
|
|
1628
|
-
i0.ɵɵelementStart(24, "div",
|
|
1629
|
-
i0.ɵɵconditionalCreate(25,
|
|
1630
|
-
i0.ɵɵconditionalCreate(26,
|
|
1631
|
-
i0.ɵɵelementStart(27, "div",
|
|
1629
|
+
i0.ɵɵelementStart(24, "div", 275);
|
|
1630
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_25_Template, 4, 0, "div", 276);
|
|
1631
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_26_Template, 4, 0, "div", 276);
|
|
1632
|
+
i0.ɵɵelementStart(27, "div", 276);
|
|
1632
1633
|
i0.ɵɵelement(28, "i", 20);
|
|
1633
1634
|
i0.ɵɵelementStart(29, "span");
|
|
1634
1635
|
i0.ɵɵtext(30);
|
|
1635
1636
|
i0.ɵɵelementEnd()()()()();
|
|
1636
|
-
i0.ɵɵelementStart(31, "div",
|
|
1637
|
-
i0.ɵɵelement(33, "i",
|
|
1637
|
+
i0.ɵɵelementStart(31, "div", 282)(32, "h3", 71);
|
|
1638
|
+
i0.ɵɵelement(33, "i", 283);
|
|
1638
1639
|
i0.ɵɵtext(34, " Tracking Configuration ");
|
|
1639
1640
|
i0.ɵɵelementEnd();
|
|
1640
|
-
i0.ɵɵelementStart(35, "div",
|
|
1641
|
-
i0.ɵɵelement(37, "i",
|
|
1641
|
+
i0.ɵɵelementStart(35, "div", 284)(36, "div", 285);
|
|
1642
|
+
i0.ɵɵelement(37, "i", 261);
|
|
1642
1643
|
i0.ɵɵelementStart(38, "span");
|
|
1643
1644
|
i0.ɵɵtext(39, "Track Record Changes");
|
|
1644
1645
|
i0.ɵɵelementEnd()();
|
|
1645
|
-
i0.ɵɵelementStart(40, "div",
|
|
1646
|
-
i0.ɵɵelement(41, "i",
|
|
1646
|
+
i0.ɵɵelementStart(40, "div", 285);
|
|
1647
|
+
i0.ɵɵelement(41, "i", 261);
|
|
1647
1648
|
i0.ɵɵelementStart(42, "span");
|
|
1648
1649
|
i0.ɵɵtext(43, "Audit Record Access");
|
|
1649
1650
|
i0.ɵɵelementEnd()();
|
|
1650
|
-
i0.ɵɵelementStart(44, "div",
|
|
1651
|
-
i0.ɵɵelement(45, "i",
|
|
1651
|
+
i0.ɵɵelementStart(44, "div", 285);
|
|
1652
|
+
i0.ɵɵelement(45, "i", 261);
|
|
1652
1653
|
i0.ɵɵelementStart(46, "span");
|
|
1653
1654
|
i0.ɵɵtext(47, "Audit View Runs");
|
|
1654
1655
|
i0.ɵɵelementEnd()();
|
|
1655
|
-
i0.ɵɵelementStart(48, "div",
|
|
1656
|
+
i0.ɵɵelementStart(48, "div", 285)(49, "span", 286);
|
|
1656
1657
|
i0.ɵɵtext(50, "Delete Type:");
|
|
1657
1658
|
i0.ɵɵelementEnd();
|
|
1658
|
-
i0.ɵɵelementStart(51, "span",
|
|
1659
|
+
i0.ɵɵelementStart(51, "span", 287);
|
|
1659
1660
|
i0.ɵɵtext(52);
|
|
1660
1661
|
i0.ɵɵelementEnd()();
|
|
1661
|
-
i0.ɵɵelementStart(53, "div",
|
|
1662
|
-
i0.ɵɵelement(54, "i",
|
|
1662
|
+
i0.ɵɵelementStart(53, "div", 285);
|
|
1663
|
+
i0.ɵɵelement(54, "i", 261);
|
|
1663
1664
|
i0.ɵɵelementStart(55, "span");
|
|
1664
1665
|
i0.ɵɵtext(56, "Cascade Deletes");
|
|
1665
1666
|
i0.ɵɵelementEnd()()()();
|
|
1666
|
-
i0.ɵɵelementStart(57, "div",
|
|
1667
|
-
i0.ɵɵelement(59, "i",
|
|
1667
|
+
i0.ɵɵelementStart(57, "div", 282)(58, "h3", 71);
|
|
1668
|
+
i0.ɵɵelement(59, "i", 288);
|
|
1668
1669
|
i0.ɵɵtext(60, " Geocoding ");
|
|
1669
1670
|
i0.ɵɵelementEnd();
|
|
1670
|
-
i0.ɵɵelementStart(61, "p",
|
|
1671
|
+
i0.ɵɵelementStart(61, "p", 289);
|
|
1671
1672
|
i0.ɵɵtext(62, "When enabled, CodeGen auto-detects geo fields and generates map view support");
|
|
1672
1673
|
i0.ɵɵelementEnd();
|
|
1673
|
-
i0.ɵɵelementStart(63, "div",
|
|
1674
|
-
i0.ɵɵelement(65, "i",
|
|
1674
|
+
i0.ɵɵelementStart(63, "div", 284)(64, "div", 285);
|
|
1675
|
+
i0.ɵɵelement(65, "i", 261);
|
|
1675
1676
|
i0.ɵɵelementStart(66, "span");
|
|
1676
1677
|
i0.ɵɵtext(67, "Supports Geocoding");
|
|
1677
1678
|
i0.ɵɵelementEnd()();
|
|
1678
|
-
i0.ɵɵelementStart(68, "div",
|
|
1679
|
-
i0.ɵɵelement(69, "i",
|
|
1679
|
+
i0.ɵɵelementStart(68, "div", 285);
|
|
1680
|
+
i0.ɵɵelement(69, "i", 261);
|
|
1680
1681
|
i0.ɵɵelementStart(70, "span");
|
|
1681
1682
|
i0.ɵɵtext(71, "Auto-Detect Geocoding");
|
|
1682
1683
|
i0.ɵɵelementEnd()()()()()();
|
|
@@ -1721,7 +1722,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template(rf,
|
|
|
1721
1722
|
i0.ɵɵadvance();
|
|
1722
1723
|
i0.ɵɵproperty("ngClass", ctx_r2.entity.AutoUpdateSupportsGeoCoding ? "fa-check" : "fa-xmark");
|
|
1723
1724
|
} }
|
|
1724
|
-
function
|
|
1725
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1725
1726
|
i0.ɵɵelementStart(0, "p");
|
|
1726
1727
|
i0.ɵɵtext(1, " This entity has change tracking enabled. All modifications to records are stored in the ");
|
|
1727
1728
|
i0.ɵɵelementStart(2, "code");
|
|
@@ -1730,7 +1731,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1730
1731
|
i0.ɵɵtext(4, " table, including the user who made the change, timestamp, and the before/after values. ");
|
|
1731
1732
|
i0.ɵɵelementEnd();
|
|
1732
1733
|
} }
|
|
1733
|
-
function
|
|
1734
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1734
1735
|
i0.ɵɵelementStart(0, "p");
|
|
1735
1736
|
i0.ɵɵtext(1, " This entity does not have change tracking enabled. To enable it, set ");
|
|
1736
1737
|
i0.ɵɵelementStart(2, "code");
|
|
@@ -1743,19 +1744,19 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1743
1744
|
i0.ɵɵtext(7, " in the entity metadata. ");
|
|
1744
1745
|
i0.ɵɵelementEnd();
|
|
1745
1746
|
} }
|
|
1746
|
-
function
|
|
1747
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_17_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1747
1748
|
i0.ɵɵelementStart(0, "li")(1, "code");
|
|
1748
1749
|
i0.ɵɵtext(2, "__mj_DeletedAt");
|
|
1749
1750
|
i0.ɵɵelementEnd();
|
|
1750
1751
|
i0.ɵɵtext(3, " - Soft delete timestamp (when applicable) ");
|
|
1751
1752
|
i0.ɵɵelementEnd();
|
|
1752
1753
|
} }
|
|
1753
|
-
function
|
|
1754
|
-
i0.ɵɵelementStart(0, "div",
|
|
1754
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1755
|
+
i0.ɵɵelementStart(0, "div", 294)(1, "h4");
|
|
1755
1756
|
i0.ɵɵelement(2, "i", 22);
|
|
1756
1757
|
i0.ɵɵtext(3, " Audit Fields ");
|
|
1757
1758
|
i0.ɵɵelementEnd();
|
|
1758
|
-
i0.ɵɵelementStart(4, "ul",
|
|
1759
|
+
i0.ɵɵelementStart(4, "ul", 296)(5, "li")(6, "code");
|
|
1759
1760
|
i0.ɵɵtext(7, "__mj_CreatedAt");
|
|
1760
1761
|
i0.ɵɵelementEnd();
|
|
1761
1762
|
i0.ɵɵtext(8, " - Record creation timestamp ");
|
|
@@ -1765,30 +1766,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1765
1766
|
i0.ɵɵelementEnd();
|
|
1766
1767
|
i0.ɵɵtext(12, " - Last modification timestamp ");
|
|
1767
1768
|
i0.ɵɵelementEnd();
|
|
1768
|
-
i0.ɵɵconditionalCreate(13,
|
|
1769
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_17_Conditional_13_Template, 4, 0, "li");
|
|
1769
1770
|
i0.ɵɵelementEnd()();
|
|
1770
1771
|
} if (rf & 2) {
|
|
1771
1772
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1772
1773
|
i0.ɵɵadvance(13);
|
|
1773
1774
|
i0.ɵɵconditional(ctx_r2.entity.DeleteType === "Soft" ? 13 : -1);
|
|
1774
1775
|
} }
|
|
1775
|
-
function
|
|
1776
|
-
i0.ɵɵelementStart(0, "section",
|
|
1777
|
-
i0.ɵɵelement(4, "i",
|
|
1778
|
-
i0.ɵɵelementStart(5, "div",
|
|
1776
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
1777
|
+
i0.ɵɵelementStart(0, "section", 36)(1, "div", 55)(2, "div", 290)(3, "div", 291);
|
|
1778
|
+
i0.ɵɵelement(4, "i", 261);
|
|
1779
|
+
i0.ɵɵelementStart(5, "div", 292)(6, "strong");
|
|
1779
1780
|
i0.ɵɵtext(7, "Record Change Tracking");
|
|
1780
1781
|
i0.ɵɵelementEnd();
|
|
1781
1782
|
i0.ɵɵelementStart(8, "span");
|
|
1782
1783
|
i0.ɵɵtext(9);
|
|
1783
1784
|
i0.ɵɵelementEnd()()()();
|
|
1784
|
-
i0.ɵɵelementStart(10, "div",
|
|
1785
|
-
i0.ɵɵelement(13, "i",
|
|
1785
|
+
i0.ɵɵelementStart(10, "div", 293)(11, "div", 294)(12, "h4");
|
|
1786
|
+
i0.ɵɵelement(13, "i", 295);
|
|
1786
1787
|
i0.ɵɵtext(14, " About Change Tracking ");
|
|
1787
1788
|
i0.ɵɵelementEnd();
|
|
1788
|
-
i0.ɵɵconditionalCreate(15,
|
|
1789
|
-
i0.ɵɵconditionalCreate(16,
|
|
1789
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_15_Template, 5, 0, "p");
|
|
1790
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_16_Template, 8, 0, "p");
|
|
1790
1791
|
i0.ɵɵelementEnd();
|
|
1791
|
-
i0.ɵɵconditionalCreate(17,
|
|
1792
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_17_Template, 14, 1, "div", 294);
|
|
1792
1793
|
i0.ɵɵelementEnd()()();
|
|
1793
1794
|
} if (rf & 2) {
|
|
1794
1795
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1805,42 +1806,42 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template(rf,
|
|
|
1805
1806
|
i0.ɵɵadvance();
|
|
1806
1807
|
i0.ɵɵconditional(ctx_r2.entity.TrackRecordChanges ? 17 : -1);
|
|
1807
1808
|
} }
|
|
1808
|
-
function
|
|
1809
|
-
i0.ɵɵelement(0, "i",
|
|
1809
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1810
|
+
i0.ɵɵelement(0, "i", 314);
|
|
1810
1811
|
i0.ɵɵtext(1, " Yes \u2014 read-only view ");
|
|
1811
1812
|
} }
|
|
1812
|
-
function
|
|
1813
|
-
i0.ɵɵelement(0, "i",
|
|
1813
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1814
|
+
i0.ɵɵelement(0, "i", 315);
|
|
1814
1815
|
i0.ɵɵtext(1, " No ");
|
|
1815
1816
|
} }
|
|
1816
|
-
function
|
|
1817
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1817
1818
|
const _r44 = i0.ɵɵgetCurrentView();
|
|
1818
|
-
i0.ɵɵelementStart(0, "span",
|
|
1819
|
-
i0.ɵɵlistener("click", function
|
|
1819
|
+
i0.ɵɵelementStart(0, "span", 316);
|
|
1820
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_15_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r44); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
1820
1821
|
i0.ɵɵtext(1);
|
|
1821
|
-
i0.ɵɵelement(2, "i",
|
|
1822
|
+
i0.ɵɵelement(2, "i", 64);
|
|
1822
1823
|
i0.ɵɵelementEnd();
|
|
1823
1824
|
} if (rf & 2) {
|
|
1824
1825
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1825
1826
|
i0.ɵɵadvance();
|
|
1826
1827
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.ParentChain[0] == null ? null : ctx_r2.ParentChain[0].Name, " ");
|
|
1827
1828
|
} }
|
|
1828
|
-
function
|
|
1829
|
-
i0.ɵɵelementStart(0, "span",
|
|
1829
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1830
|
+
i0.ɵɵelementStart(0, "span", 313);
|
|
1830
1831
|
i0.ɵɵtext(1, "None");
|
|
1831
1832
|
i0.ɵɵelementEnd();
|
|
1832
1833
|
} }
|
|
1833
|
-
function
|
|
1834
|
-
i0.ɵɵelementStart(0, "div",
|
|
1834
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1835
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
1835
1836
|
i0.ɵɵtext(2, "Full Inheritance Chain");
|
|
1836
1837
|
i0.ɵɵelementEnd();
|
|
1837
|
-
i0.ɵɵelementStart(3, "span",
|
|
1838
|
+
i0.ɵɵelementStart(3, "span", 287);
|
|
1838
1839
|
i0.ɵɵtext(4);
|
|
1839
1840
|
i0.ɵɵelementEnd()();
|
|
1840
|
-
i0.ɵɵelementStart(5, "div",
|
|
1841
|
+
i0.ɵɵelementStart(5, "div", 311)(6, "span", 286);
|
|
1841
1842
|
i0.ɵɵtext(7, "Inherited Fields");
|
|
1842
1843
|
i0.ɵɵelementEnd();
|
|
1843
|
-
i0.ɵɵelementStart(8, "span",
|
|
1844
|
+
i0.ɵɵelementStart(8, "span", 287);
|
|
1844
1845
|
i0.ɵɵtext(9);
|
|
1845
1846
|
i0.ɵɵelementEnd()();
|
|
1846
1847
|
} if (rf & 2) {
|
|
@@ -1850,96 +1851,96 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
1850
1851
|
i0.ɵɵadvance(5);
|
|
1851
1852
|
i0.ɵɵtextInterpolate2("", ctx_r2.InheritedFieldCount, " field", ctx_r2.InheritedFieldCount !== 1 ? "s" : "");
|
|
1852
1853
|
} }
|
|
1853
|
-
function
|
|
1854
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_18_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1854
1855
|
const _r45 = i0.ɵɵgetCurrentView();
|
|
1855
|
-
i0.ɵɵelementStart(0, "span",
|
|
1856
|
-
i0.ɵɵlistener("click", function
|
|
1856
|
+
i0.ɵɵelementStart(0, "span", 317);
|
|
1857
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_18_For_5_Template_span_click_0_listener() { const child_r46 = i0.ɵɵrestoreView(_r45).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(child_r46)); });
|
|
1857
1858
|
i0.ɵɵtext(1);
|
|
1858
1859
|
i0.ɵɵelementEnd();
|
|
1859
1860
|
i0.ɵɵtext(2);
|
|
1860
1861
|
} if (rf & 2) {
|
|
1861
1862
|
const child_r46 = ctx.$implicit;
|
|
1862
|
-
const ɵ$
|
|
1863
|
-
const ɵ$
|
|
1863
|
+
const ɵ$index_1415_r47 = ctx.$index;
|
|
1864
|
+
const ɵ$count_1415_r48 = ctx.$count;
|
|
1864
1865
|
i0.ɵɵadvance();
|
|
1865
1866
|
i0.ɵɵtextInterpolate(child_r46.Name);
|
|
1866
1867
|
i0.ɵɵadvance();
|
|
1867
|
-
i0.ɵɵtextInterpolate1("", ɵ$
|
|
1868
|
+
i0.ɵɵtextInterpolate1("", ɵ$index_1415_r47 === ɵ$count_1415_r48 - 1 ? "" : ", ", " ");
|
|
1868
1869
|
} }
|
|
1869
|
-
function
|
|
1870
|
-
i0.ɵɵelementStart(0, "div",
|
|
1870
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1871
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
1871
1872
|
i0.ɵɵtext(2, "Child Types");
|
|
1872
1873
|
i0.ɵɵelementEnd();
|
|
1873
|
-
i0.ɵɵelementStart(3, "span",
|
|
1874
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1874
|
+
i0.ɵɵelementStart(3, "span", 287);
|
|
1875
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_18_For_5_Template, 3, 2, null, null, _forTrack0);
|
|
1875
1876
|
i0.ɵɵelementEnd()();
|
|
1876
1877
|
} if (rf & 2) {
|
|
1877
1878
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1878
1879
|
i0.ɵɵadvance(4);
|
|
1879
1880
|
i0.ɵɵrepeater(ctx_r2.ChildEntities);
|
|
1880
1881
|
} }
|
|
1881
|
-
function
|
|
1882
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_19_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1882
1883
|
const _r49 = i0.ɵɵgetCurrentView();
|
|
1883
|
-
i0.ɵɵelementStart(0, "span",
|
|
1884
|
-
i0.ɵɵlistener("click", function
|
|
1884
|
+
i0.ɵɵelementStart(0, "span", 317);
|
|
1885
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_19_For_5_Template_span_click_0_listener() { const sibling_r50 = i0.ɵɵrestoreView(_r49).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(sibling_r50)); });
|
|
1885
1886
|
i0.ɵɵtext(1);
|
|
1886
1887
|
i0.ɵɵelementEnd();
|
|
1887
1888
|
i0.ɵɵtext(2);
|
|
1888
1889
|
} if (rf & 2) {
|
|
1889
1890
|
const sibling_r50 = ctx.$implicit;
|
|
1890
|
-
const ɵ$
|
|
1891
|
-
const ɵ$
|
|
1891
|
+
const ɵ$index_1428_r51 = ctx.$index;
|
|
1892
|
+
const ɵ$count_1428_r52 = ctx.$count;
|
|
1892
1893
|
i0.ɵɵadvance();
|
|
1893
1894
|
i0.ɵɵtextInterpolate(sibling_r50.Name);
|
|
1894
1895
|
i0.ɵɵadvance();
|
|
1895
|
-
i0.ɵɵtextInterpolate1("", ɵ$
|
|
1896
|
+
i0.ɵɵtextInterpolate1("", ɵ$index_1428_r51 === ɵ$count_1428_r52 - 1 ? "" : ", ", " ");
|
|
1896
1897
|
} }
|
|
1897
|
-
function
|
|
1898
|
-
i0.ɵɵelementStart(0, "div",
|
|
1898
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1899
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
1899
1900
|
i0.ɵɵtext(2, "Sibling Types");
|
|
1900
1901
|
i0.ɵɵelementEnd();
|
|
1901
|
-
i0.ɵɵelementStart(3, "span",
|
|
1902
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1902
|
+
i0.ɵɵelementStart(3, "span", 287);
|
|
1903
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_19_For_5_Template, 3, 2, null, null, _forTrack0);
|
|
1903
1904
|
i0.ɵɵelementEnd()();
|
|
1904
1905
|
} if (rf & 2) {
|
|
1905
1906
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1906
1907
|
i0.ɵɵadvance(4);
|
|
1907
1908
|
i0.ɵɵrepeater(ctx_r2.SiblingEntities);
|
|
1908
1909
|
} }
|
|
1909
|
-
function
|
|
1910
|
-
i0.ɵɵelement(0, "i",
|
|
1910
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1911
|
+
i0.ɵɵelement(0, "i", 318);
|
|
1911
1912
|
i0.ɵɵtext(1, " Enforced \u2014 a parent record can only be one child type ");
|
|
1912
1913
|
} }
|
|
1913
|
-
function
|
|
1914
|
-
i0.ɵɵelementStart(0, "span",
|
|
1914
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1915
|
+
i0.ɵɵelementStart(0, "span", 313);
|
|
1915
1916
|
i0.ɵɵtext(1, "N/A");
|
|
1916
1917
|
i0.ɵɵelementEnd();
|
|
1917
1918
|
} }
|
|
1918
|
-
function
|
|
1919
|
-
i0.ɵɵelementStart(0, "div",
|
|
1920
|
-
i0.ɵɵelement(2, "i",
|
|
1919
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1920
|
+
i0.ɵɵelementStart(0, "div", 297)(1, "h3", 71);
|
|
1921
|
+
i0.ɵɵelement(2, "i", 50);
|
|
1921
1922
|
i0.ɵɵtext(3, " Type Relationship (IS-A) ");
|
|
1922
1923
|
i0.ɵɵelementEnd();
|
|
1923
|
-
i0.ɵɵelementStart(4, "div",
|
|
1924
|
+
i0.ɵɵelementStart(4, "div", 284)(5, "div", 311)(6, "span", 286);
|
|
1924
1925
|
i0.ɵɵtext(7, "Virtual Entity");
|
|
1925
1926
|
i0.ɵɵelementEnd();
|
|
1926
|
-
i0.ɵɵelementStart(8, "span",
|
|
1927
|
-
i0.ɵɵconditionalCreate(9,
|
|
1927
|
+
i0.ɵɵelementStart(8, "span", 287);
|
|
1928
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_9_Template, 2, 0)(10, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_10_Template, 2, 0);
|
|
1928
1929
|
i0.ɵɵelementEnd()();
|
|
1929
|
-
i0.ɵɵelementStart(11, "div",
|
|
1930
|
+
i0.ɵɵelementStart(11, "div", 311)(12, "span", 286);
|
|
1930
1931
|
i0.ɵɵtext(13, "Parent Entity");
|
|
1931
1932
|
i0.ɵɵelementEnd();
|
|
1932
|
-
i0.ɵɵelementStart(14, "span",
|
|
1933
|
-
i0.ɵɵconditionalCreate(15,
|
|
1933
|
+
i0.ɵɵelementStart(14, "span", 287);
|
|
1934
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_15_Template, 3, 1, "span", 312)(16, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_16_Template, 2, 0, "span", 313);
|
|
1934
1935
|
i0.ɵɵelementEnd()();
|
|
1935
|
-
i0.ɵɵconditionalCreate(17,
|
|
1936
|
-
i0.ɵɵconditionalCreate(18,
|
|
1937
|
-
i0.ɵɵconditionalCreate(19,
|
|
1938
|
-
i0.ɵɵelementStart(20, "div",
|
|
1936
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_17_Template, 10, 3);
|
|
1937
|
+
i0.ɵɵconditionalCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_18_Template, 6, 0, "div", 311);
|
|
1938
|
+
i0.ɵɵconditionalCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_19_Template, 6, 0, "div", 311);
|
|
1939
|
+
i0.ɵɵelementStart(20, "div", 311)(21, "span", 286);
|
|
1939
1940
|
i0.ɵɵtext(22, "Disjoint Subtypes");
|
|
1940
1941
|
i0.ɵɵelementEnd();
|
|
1941
|
-
i0.ɵɵelementStart(23, "span",
|
|
1942
|
-
i0.ɵɵconditionalCreate(24,
|
|
1942
|
+
i0.ɵɵelementStart(23, "span", 287);
|
|
1943
|
+
i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_24_Template, 2, 0)(25, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Conditional_25_Template, 2, 0, "span", 313);
|
|
1943
1944
|
i0.ɵɵelementEnd()()()();
|
|
1944
1945
|
} if (rf & 2) {
|
|
1945
1946
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1956,9 +1957,9 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
1956
1957
|
i0.ɵɵadvance(5);
|
|
1957
1958
|
i0.ɵɵconditional(ctx_r2.IsParentType || ctx_r2.IsChildType ? 24 : 25);
|
|
1958
1959
|
} }
|
|
1959
|
-
function
|
|
1960
|
-
i0.ɵɵelementStart(0, "div",
|
|
1961
|
-
i0.ɵɵelement(1, "mj-code-editor",
|
|
1960
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1961
|
+
i0.ɵɵelementStart(0, "div", 321);
|
|
1962
|
+
i0.ɵɵelement(1, "mj-code-editor", 324);
|
|
1962
1963
|
i0.ɵɵelementEnd();
|
|
1963
1964
|
} if (rf & 2) {
|
|
1964
1965
|
const setting_r53 = i0.ɵɵnextContext().$implicit;
|
|
@@ -1966,8 +1967,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
1966
1967
|
i0.ɵɵadvance();
|
|
1967
1968
|
i0.ɵɵproperty("value", ctx_r2.formatJsonValue(setting_r53.Value))("readonly", true)("lineWrapping", true);
|
|
1968
1969
|
} }
|
|
1969
|
-
function
|
|
1970
|
-
i0.ɵɵelementStart(0, "div",
|
|
1970
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1971
|
+
i0.ɵɵelementStart(0, "div", 322);
|
|
1971
1972
|
i0.ɵɵtext(1);
|
|
1972
1973
|
i0.ɵɵelementEnd();
|
|
1973
1974
|
} if (rf & 2) {
|
|
@@ -1975,8 +1976,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
1975
1976
|
i0.ɵɵadvance();
|
|
1976
1977
|
i0.ɵɵtextInterpolate(setting_r53.Value);
|
|
1977
1978
|
} }
|
|
1978
|
-
function
|
|
1979
|
-
i0.ɵɵelementStart(0, "div",
|
|
1979
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1980
|
+
i0.ɵɵelementStart(0, "div", 323);
|
|
1980
1981
|
i0.ɵɵtext(1);
|
|
1981
1982
|
i0.ɵɵelementEnd();
|
|
1982
1983
|
} if (rf & 2) {
|
|
@@ -1984,12 +1985,12 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
1984
1985
|
i0.ɵɵadvance();
|
|
1985
1986
|
i0.ɵɵtextInterpolate(setting_r53.Comments);
|
|
1986
1987
|
} }
|
|
1987
|
-
function
|
|
1988
|
-
i0.ɵɵelementStart(0, "div",
|
|
1988
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1989
|
+
i0.ɵɵelementStart(0, "div", 319)(1, "div", 320);
|
|
1989
1990
|
i0.ɵɵtext(2);
|
|
1990
1991
|
i0.ɵɵelementEnd();
|
|
1991
|
-
i0.ɵɵconditionalCreate(3,
|
|
1992
|
-
i0.ɵɵconditionalCreate(5,
|
|
1992
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Conditional_3_Template, 2, 3, "div", 321)(4, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Conditional_4_Template, 2, 1, "div", 322);
|
|
1993
|
+
i0.ɵɵconditionalCreate(5, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Conditional_5_Template, 2, 1, "div", 323);
|
|
1993
1994
|
i0.ɵɵelementEnd();
|
|
1994
1995
|
} if (rf & 2) {
|
|
1995
1996
|
const setting_r53 = ctx.$implicit;
|
|
@@ -2001,23 +2002,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2001
2002
|
i0.ɵɵadvance(2);
|
|
2002
2003
|
i0.ɵɵconditional(setting_r53.Comments ? 5 : -1);
|
|
2003
2004
|
} }
|
|
2004
|
-
function
|
|
2005
|
-
i0.ɵɵelementStart(0, "div",
|
|
2006
|
-
i0.ɵɵrepeaterCreate(1,
|
|
2005
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
2006
|
+
i0.ɵɵelementStart(0, "div", 300);
|
|
2007
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_For_2_Template, 6, 3, "div", 319, i0.ɵɵrepeaterTrackByIdentity);
|
|
2007
2008
|
i0.ɵɵelementEnd();
|
|
2008
2009
|
} if (rf & 2) {
|
|
2009
2010
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2010
2011
|
i0.ɵɵadvance();
|
|
2011
2012
|
i0.ɵɵrepeater(ctx_r2.entity.Settings);
|
|
2012
2013
|
} }
|
|
2013
|
-
function
|
|
2014
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
2014
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
2015
|
+
i0.ɵɵelement(0, "mj-empty-state", 301);
|
|
2015
2016
|
} }
|
|
2016
|
-
function
|
|
2017
|
-
i0.ɵɵelementStart(0, "div",
|
|
2017
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
2018
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
2018
2019
|
i0.ɵɵtext(2, "Catalog");
|
|
2019
2020
|
i0.ɵɵelementEnd();
|
|
2020
|
-
i0.ɵɵelementStart(3, "span",
|
|
2021
|
+
i0.ɵɵelementStart(3, "span", 327);
|
|
2021
2022
|
i0.ɵɵtext(4);
|
|
2022
2023
|
i0.ɵɵelementEnd()();
|
|
2023
2024
|
} if (rf & 2) {
|
|
@@ -2025,11 +2026,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2025
2026
|
i0.ɵɵadvance(4);
|
|
2026
2027
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextCatalog);
|
|
2027
2028
|
} }
|
|
2028
|
-
function
|
|
2029
|
-
i0.ɵɵelementStart(0, "div",
|
|
2029
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
2030
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
2030
2031
|
i0.ɵɵtext(2, "Index");
|
|
2031
2032
|
i0.ɵɵelementEnd();
|
|
2032
|
-
i0.ɵɵelementStart(3, "span",
|
|
2033
|
+
i0.ɵɵelementStart(3, "span", 327);
|
|
2033
2034
|
i0.ɵɵtext(4);
|
|
2034
2035
|
i0.ɵɵelementEnd()();
|
|
2035
2036
|
} if (rf & 2) {
|
|
@@ -2037,11 +2038,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2037
2038
|
i0.ɵɵadvance(4);
|
|
2038
2039
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextIndex);
|
|
2039
2040
|
} }
|
|
2040
|
-
function
|
|
2041
|
-
i0.ɵɵelementStart(0, "div",
|
|
2041
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
2042
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
2042
2043
|
i0.ɵɵtext(2, "Function");
|
|
2043
2044
|
i0.ɵɵelementEnd();
|
|
2044
|
-
i0.ɵɵelementStart(3, "span",
|
|
2045
|
+
i0.ɵɵelementStart(3, "span", 327);
|
|
2045
2046
|
i0.ɵɵtext(4);
|
|
2046
2047
|
i0.ɵɵelementEnd()();
|
|
2047
2048
|
} if (rf & 2) {
|
|
@@ -2049,17 +2050,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2049
2050
|
i0.ɵɵadvance(4);
|
|
2050
2051
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextSearchFunction);
|
|
2051
2052
|
} }
|
|
2052
|
-
function
|
|
2053
|
-
i0.ɵɵelementStart(0, "div",
|
|
2053
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
2054
|
+
i0.ɵɵelementStart(0, "div", 303)(1, "div", 311)(2, "span", 286);
|
|
2054
2055
|
i0.ɵɵtext(3, "Status");
|
|
2055
2056
|
i0.ɵɵelementEnd();
|
|
2056
|
-
i0.ɵɵelementStart(4, "span",
|
|
2057
|
-
i0.ɵɵelement(5, "i",
|
|
2057
|
+
i0.ɵɵelementStart(4, "span", 325);
|
|
2058
|
+
i0.ɵɵelement(5, "i", 326);
|
|
2058
2059
|
i0.ɵɵtext(6, " Enabled ");
|
|
2059
2060
|
i0.ɵɵelementEnd()();
|
|
2060
|
-
i0.ɵɵconditionalCreate(7,
|
|
2061
|
-
i0.ɵɵconditionalCreate(8,
|
|
2062
|
-
i0.ɵɵconditionalCreate(9,
|
|
2061
|
+
i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Conditional_7_Template, 5, 1, "div", 311);
|
|
2062
|
+
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Conditional_8_Template, 5, 1, "div", 311);
|
|
2063
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Conditional_9_Template, 5, 1, "div", 311);
|
|
2063
2064
|
i0.ɵɵelementEnd();
|
|
2064
2065
|
} if (rf & 2) {
|
|
2065
2066
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -2070,26 +2071,26 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2070
2071
|
i0.ɵɵadvance();
|
|
2071
2072
|
i0.ɵɵconditional(ctx_r2.entity.FullTextSearchFunction ? 9 : -1);
|
|
2072
2073
|
} }
|
|
2073
|
-
function
|
|
2074
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
2074
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
2075
|
+
i0.ɵɵelement(0, "mj-empty-state", 304);
|
|
2075
2076
|
} }
|
|
2076
|
-
function
|
|
2077
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2077
2078
|
const _r54 = i0.ɵɵgetCurrentView();
|
|
2078
|
-
i0.ɵɵelementStart(0, "button",
|
|
2079
|
-
i0.ɵɵlistener("click", function
|
|
2080
|
-
i0.ɵɵelement(1, "i",
|
|
2079
|
+
i0.ɵɵelementStart(0, "button", 329);
|
|
2080
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.StartEditMode()); });
|
|
2081
|
+
i0.ɵɵelement(1, "i", 330);
|
|
2081
2082
|
i0.ɵɵtext(2, " Edit ");
|
|
2082
2083
|
i0.ɵɵelementEnd();
|
|
2083
2084
|
} }
|
|
2084
|
-
function
|
|
2085
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
2085
2086
|
const _r55 = i0.ɵɵgetCurrentView();
|
|
2086
|
-
i0.ɵɵelementStart(0, "button",
|
|
2087
|
-
i0.ɵɵlistener("click", function
|
|
2088
|
-
i0.ɵɵelement(1, "i",
|
|
2087
|
+
i0.ɵɵelementStart(0, "button", 331);
|
|
2088
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Conditional_2_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r55); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.SaveCloneConfig()); });
|
|
2089
|
+
i0.ɵɵelement(1, "i", 332);
|
|
2089
2090
|
i0.ɵɵtext(2, " Save ");
|
|
2090
2091
|
i0.ɵɵelementEnd();
|
|
2091
|
-
i0.ɵɵelementStart(3, "button",
|
|
2092
|
-
i0.ɵɵlistener("click", function
|
|
2092
|
+
i0.ɵɵelementStart(3, "button", 333);
|
|
2093
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r55); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.CancelEdit()); });
|
|
2093
2094
|
i0.ɵɵtext(4, "Cancel");
|
|
2094
2095
|
i0.ɵɵelementEnd();
|
|
2095
2096
|
} if (rf & 2) {
|
|
@@ -2098,17 +2099,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2098
2099
|
i0.ɵɵadvance(3);
|
|
2099
2100
|
i0.ɵɵproperty("disabled", ctx_r2.IsSavingCloneConfig);
|
|
2100
2101
|
} }
|
|
2101
|
-
function
|
|
2102
|
-
i0.ɵɵelementStart(0, "div",
|
|
2103
|
-
i0.ɵɵconditionalCreate(1,
|
|
2102
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
2103
|
+
i0.ɵɵelementStart(0, "div", 307);
|
|
2104
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Conditional_1_Template, 3, 0, "button", 328)(2, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Conditional_2_Template, 5, 2);
|
|
2104
2105
|
i0.ɵɵelementEnd();
|
|
2105
2106
|
} if (rf & 2) {
|
|
2106
2107
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2107
2108
|
i0.ɵɵadvance();
|
|
2108
2109
|
i0.ɵɵconditional(!ctx_r2.EditMode ? 1 : 2);
|
|
2109
2110
|
} }
|
|
2110
|
-
function
|
|
2111
|
-
i0.ɵɵelementStart(0, "p",
|
|
2111
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
2112
|
+
i0.ɵɵelementStart(0, "p", 308);
|
|
2112
2113
|
i0.ɵɵtext(1);
|
|
2113
2114
|
i0.ɵɵelementEnd();
|
|
2114
2115
|
} if (rf & 2) {
|
|
@@ -2116,11 +2117,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2116
2117
|
i0.ɵɵadvance();
|
|
2117
2118
|
i0.ɵɵtextInterpolate(ctx_r2.CloneConfigSaveError);
|
|
2118
2119
|
} }
|
|
2119
|
-
function
|
|
2120
|
-
i0.ɵɵelementStart(0, "div",
|
|
2120
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_38_Template(rf, ctx) { if (rf & 1) {
|
|
2121
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
2121
2122
|
i0.ɵɵtext(2, "Sample Count");
|
|
2122
2123
|
i0.ɵɵelementEnd();
|
|
2123
|
-
i0.ɵɵelementStart(3, "span",
|
|
2124
|
+
i0.ɵɵelementStart(3, "span", 287);
|
|
2124
2125
|
i0.ɵɵtext(4);
|
|
2125
2126
|
i0.ɵɵelementEnd()();
|
|
2126
2127
|
} if (rf & 2) {
|
|
@@ -2128,11 +2129,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2128
2129
|
i0.ɵɵadvance(4);
|
|
2129
2130
|
i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleCount);
|
|
2130
2131
|
} }
|
|
2131
|
-
function
|
|
2132
|
-
i0.ɵɵelementStart(0, "div",
|
|
2132
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_39_Template(rf, ctx) { if (rf & 1) {
|
|
2133
|
+
i0.ɵɵelementStart(0, "div", 311)(1, "span", 286);
|
|
2133
2134
|
i0.ɵɵtext(2, "Sample Method");
|
|
2134
2135
|
i0.ɵɵelementEnd();
|
|
2135
|
-
i0.ɵɵelementStart(3, "span",
|
|
2136
|
+
i0.ɵɵelementStart(3, "span", 287);
|
|
2136
2137
|
i0.ɵɵtext(4);
|
|
2137
2138
|
i0.ɵɵelementEnd()();
|
|
2138
2139
|
} if (rf & 2) {
|
|
@@ -2140,53 +2141,53 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_
|
|
|
2140
2141
|
i0.ɵɵadvance(4);
|
|
2141
2142
|
i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleMethod);
|
|
2142
2143
|
} }
|
|
2143
|
-
function
|
|
2144
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Template(rf, ctx) { if (rf & 1) {
|
|
2144
2145
|
const _r43 = i0.ɵɵgetCurrentView();
|
|
2145
|
-
i0.ɵɵelementStart(0, "section",
|
|
2146
|
-
i0.ɵɵconditionalCreate(2,
|
|
2147
|
-
i0.ɵɵelementStart(3, "div",
|
|
2148
|
-
i0.ɵɵelement(5, "i",
|
|
2146
|
+
i0.ɵɵelementStart(0, "section", 37)(1, "div", 55);
|
|
2147
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_2_Template, 26, 6, "div", 297);
|
|
2148
|
+
i0.ɵɵelementStart(3, "div", 298)(4, "h3", 71);
|
|
2149
|
+
i0.ɵɵelement(5, "i", 299);
|
|
2149
2150
|
i0.ɵɵtext(6, " Entity Settings ");
|
|
2150
2151
|
i0.ɵɵelementEnd();
|
|
2151
|
-
i0.ɵɵconditionalCreate(7,
|
|
2152
|
-
i0.ɵɵconditionalCreate(8,
|
|
2152
|
+
i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_7_Template, 3, 0, "div", 300);
|
|
2153
|
+
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_8_Template, 1, 0, "mj-empty-state", 301);
|
|
2153
2154
|
i0.ɵɵelementEnd();
|
|
2154
|
-
i0.ɵɵelementStart(9, "div",
|
|
2155
|
-
i0.ɵɵelement(11, "i",
|
|
2155
|
+
i0.ɵɵelementStart(9, "div", 298)(10, "h3", 71);
|
|
2156
|
+
i0.ɵɵelement(11, "i", 302);
|
|
2156
2157
|
i0.ɵɵtext(12, " Full-Text Search ");
|
|
2157
2158
|
i0.ɵɵelementEnd();
|
|
2158
|
-
i0.ɵɵconditionalCreate(13,
|
|
2159
|
-
i0.ɵɵconditionalCreate(14,
|
|
2159
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_13_Template, 10, 3, "div", 303);
|
|
2160
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_14_Template, 1, 0, "mj-empty-state", 304);
|
|
2160
2161
|
i0.ɵɵelementEnd();
|
|
2161
|
-
i0.ɵɵelementStart(15, "div",
|
|
2162
|
+
i0.ɵɵelementStart(15, "div", 298)(16, "h3", 71);
|
|
2162
2163
|
i0.ɵɵelement(17, "i", 17);
|
|
2163
2164
|
i0.ɵɵtext(18, " Form chrome ");
|
|
2164
2165
|
i0.ɵɵelementEnd();
|
|
2165
|
-
i0.ɵɵelementStart(19, "mj-entity-form-chrome-editor",
|
|
2166
|
-
i0.ɵɵlistener("FormConfigChange", function
|
|
2166
|
+
i0.ɵɵelementStart(19, "mj-entity-form-chrome-editor", 305);
|
|
2167
|
+
i0.ɵɵlistener("FormConfigChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Template_mj_entity_form_chrome_editor_FormConfigChange_19_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnFormChromeConfigChange($event)); });
|
|
2167
2168
|
i0.ɵɵelementEnd()();
|
|
2168
|
-
i0.ɵɵelementStart(20, "div",
|
|
2169
|
-
i0.ɵɵelement(23, "i",
|
|
2169
|
+
i0.ɵɵelementStart(20, "div", 298)(21, "div", 306)(22, "h3", 71);
|
|
2170
|
+
i0.ɵɵelement(23, "i", 49);
|
|
2170
2171
|
i0.ɵɵtext(24, " Record cloning ");
|
|
2171
2172
|
i0.ɵɵelementEnd();
|
|
2172
|
-
i0.ɵɵconditionalCreate(25,
|
|
2173
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_25_Template, 3, 1, "div", 307);
|
|
2173
2174
|
i0.ɵɵelementEnd();
|
|
2174
|
-
i0.ɵɵconditionalCreate(26,
|
|
2175
|
-
i0.ɵɵelementStart(27, "mj-entity-clone-config-editor",
|
|
2176
|
-
i0.ɵɵlistener("CloneConfigChange", function
|
|
2175
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_26_Template, 2, 1, "p", 308);
|
|
2176
|
+
i0.ɵɵelementStart(27, "mj-entity-clone-config-editor", 309);
|
|
2177
|
+
i0.ɵɵlistener("CloneConfigChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_60_Template_mj_entity_clone_config_editor_CloneConfigChange_27_listener($event) { i0.ɵɵrestoreView(_r43); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.OnCloneConfigChange($event)); });
|
|
2177
2178
|
i0.ɵɵelementEnd()();
|
|
2178
|
-
i0.ɵɵelementStart(28, "div",
|
|
2179
|
-
i0.ɵɵelement(30, "i",
|
|
2179
|
+
i0.ɵɵelementStart(28, "div", 298)(29, "h3", 71);
|
|
2180
|
+
i0.ɵɵelement(30, "i", 310);
|
|
2180
2181
|
i0.ɵɵtext(31, " Schema Packaging ");
|
|
2181
2182
|
i0.ɵɵelementEnd();
|
|
2182
|
-
i0.ɵɵelementStart(32, "div",
|
|
2183
|
+
i0.ɵɵelementStart(32, "div", 284)(33, "div", 311)(34, "span", 286);
|
|
2183
2184
|
i0.ɵɵtext(35, "Rows to Pack");
|
|
2184
2185
|
i0.ɵɵelementEnd();
|
|
2185
|
-
i0.ɵɵelementStart(36, "span",
|
|
2186
|
+
i0.ɵɵelementStart(36, "span", 287);
|
|
2186
2187
|
i0.ɵɵtext(37);
|
|
2187
2188
|
i0.ɵɵelementEnd()();
|
|
2188
|
-
i0.ɵɵconditionalCreate(38,
|
|
2189
|
-
i0.ɵɵconditionalCreate(39,
|
|
2189
|
+
i0.ɵɵconditionalCreate(38, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_38_Template, 5, 1, "div", 311);
|
|
2190
|
+
i0.ɵɵconditionalCreate(39, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Conditional_39_Template, 5, 1, "div", 311);
|
|
2190
2191
|
i0.ɵɵelementEnd()()()();
|
|
2191
2192
|
} if (rf & 2) {
|
|
2192
2193
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -2215,18 +2216,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template(rf,
|
|
|
2215
2216
|
i0.ɵɵadvance();
|
|
2216
2217
|
i0.ɵɵconditional(ctx_r2.entity.RowsToPackSampleMethod ? 39 : -1);
|
|
2217
2218
|
} }
|
|
2218
|
-
function
|
|
2219
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
2219
2220
|
i0.ɵɵelementStart(0, "h3");
|
|
2220
2221
|
i0.ɵɵtext(1, "Field Details");
|
|
2221
2222
|
i0.ɵɵelementEnd();
|
|
2222
2223
|
} }
|
|
2223
|
-
function
|
|
2224
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Template(rf, ctx) { if (rf & 1) {
|
|
2224
2225
|
i0.ɵɵelementStart(0, "h3");
|
|
2225
2226
|
i0.ɵɵtext(1, "Relationship Details");
|
|
2226
2227
|
i0.ɵɵelementEnd();
|
|
2227
2228
|
} }
|
|
2228
|
-
function
|
|
2229
|
-
i0.ɵɵelementStart(0, "p",
|
|
2229
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
2230
|
+
i0.ɵɵelementStart(0, "p", 336);
|
|
2230
2231
|
i0.ɵɵtext(1);
|
|
2231
2232
|
i0.ɵɵelementEnd();
|
|
2232
2233
|
} if (rf & 2) {
|
|
@@ -2234,11 +2235,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2234
2235
|
i0.ɵɵadvance();
|
|
2235
2236
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Description);
|
|
2236
2237
|
} }
|
|
2237
|
-
function
|
|
2238
|
-
i0.ɵɵelementStart(0, "div",
|
|
2238
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
2239
|
+
i0.ɵɵelementStart(0, "div", 338)(1, "span", 339);
|
|
2239
2240
|
i0.ɵɵtext(2, "Default");
|
|
2240
2241
|
i0.ɵɵelementEnd();
|
|
2241
|
-
i0.ɵɵelementStart(3, "span",
|
|
2242
|
+
i0.ɵɵelementStart(3, "span", 340);
|
|
2242
2243
|
i0.ɵɵtext(4);
|
|
2243
2244
|
i0.ɵɵelementEnd()();
|
|
2244
2245
|
} if (rf & 2) {
|
|
@@ -2246,24 +2247,24 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2246
2247
|
i0.ɵɵadvance(4);
|
|
2247
2248
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.DefaultValue);
|
|
2248
2249
|
} }
|
|
2249
|
-
function
|
|
2250
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
2250
2251
|
const _r56 = i0.ɵɵgetCurrentView();
|
|
2251
|
-
i0.ɵɵelementStart(0, "div",
|
|
2252
|
-
i0.ɵɵelement(2, "i",
|
|
2252
|
+
i0.ɵɵelementStart(0, "div", 342)(1, "h5");
|
|
2253
|
+
i0.ɵɵelement(2, "i", 45);
|
|
2253
2254
|
i0.ɵɵtext(3, " IS-A Inherited Field ");
|
|
2254
2255
|
i0.ɵɵelementEnd();
|
|
2255
|
-
i0.ɵɵelementStart(4, "div",
|
|
2256
|
+
i0.ɵɵelementStart(4, "div", 337)(5, "div", 338)(6, "span", 339);
|
|
2256
2257
|
i0.ɵɵtext(7, "Source Entity");
|
|
2257
2258
|
i0.ɵɵelementEnd();
|
|
2258
|
-
i0.ɵɵelementStart(8, "span",
|
|
2259
|
-
i0.ɵɵlistener("click", function
|
|
2259
|
+
i0.ɵɵelementStart(8, "span", 343);
|
|
2260
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_27_Template_span_click_8_listener() { i0.ɵɵrestoreView(_r56); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
2260
2261
|
i0.ɵɵtext(9);
|
|
2261
|
-
i0.ɵɵelement(10, "i",
|
|
2262
|
+
i0.ɵɵelement(10, "i", 64);
|
|
2262
2263
|
i0.ɵɵelementEnd()();
|
|
2263
|
-
i0.ɵɵelementStart(11, "div",
|
|
2264
|
+
i0.ɵɵelementStart(11, "div", 338)(12, "span", 339);
|
|
2264
2265
|
i0.ɵɵtext(13, "Routing");
|
|
2265
2266
|
i0.ɵɵelementEnd();
|
|
2266
|
-
i0.ɵɵelementStart(14, "span",
|
|
2267
|
+
i0.ɵɵelementStart(14, "span", 341);
|
|
2267
2268
|
i0.ɵɵtext(15, "ORM routes Set/Get to parent");
|
|
2268
2269
|
i0.ɵɵelementEnd()()()();
|
|
2269
2270
|
} if (rf & 2) {
|
|
@@ -2271,23 +2272,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2271
2272
|
i0.ɵɵadvance(9);
|
|
2272
2273
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.GetISAFieldSource(ctx_r2.selectedField), " ");
|
|
2273
2274
|
} }
|
|
2274
|
-
function
|
|
2275
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
2275
2276
|
const _r57 = i0.ɵɵgetCurrentView();
|
|
2276
|
-
i0.ɵɵelementStart(0, "div",
|
|
2277
|
+
i0.ɵɵelementStart(0, "div", 334)(1, "h5");
|
|
2277
2278
|
i0.ɵɵtext(2, "Relationship");
|
|
2278
2279
|
i0.ɵɵelementEnd();
|
|
2279
|
-
i0.ɵɵelementStart(3, "div",
|
|
2280
|
+
i0.ɵɵelementStart(3, "div", 337)(4, "div", 338)(5, "span", 339);
|
|
2280
2281
|
i0.ɵɵtext(6, "Related Entity");
|
|
2281
2282
|
i0.ɵɵelementEnd();
|
|
2282
|
-
i0.ɵɵelementStart(7, "span",
|
|
2283
|
-
i0.ɵɵlistener("click", function
|
|
2283
|
+
i0.ɵɵelementStart(7, "span", 344);
|
|
2284
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_28_Template_span_click_7_listener() { i0.ɵɵrestoreView(_r57); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.navigateToRelatedEntity(ctx_r2.selectedField)); });
|
|
2284
2285
|
i0.ɵɵtext(8);
|
|
2285
|
-
i0.ɵɵelement(9, "i",
|
|
2286
|
+
i0.ɵɵelement(9, "i", 64);
|
|
2286
2287
|
i0.ɵɵelementEnd()();
|
|
2287
|
-
i0.ɵɵelementStart(10, "div",
|
|
2288
|
+
i0.ɵɵelementStart(10, "div", 338)(11, "span", 339);
|
|
2288
2289
|
i0.ɵɵtext(12, "Display Type");
|
|
2289
2290
|
i0.ɵɵelementEnd();
|
|
2290
|
-
i0.ɵɵelementStart(13, "span",
|
|
2291
|
+
i0.ɵɵelementStart(13, "span", 341);
|
|
2291
2292
|
i0.ɵɵtext(14);
|
|
2292
2293
|
i0.ɵɵelementEnd()()()();
|
|
2293
2294
|
} if (rf & 2) {
|
|
@@ -2297,20 +2298,20 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2297
2298
|
i0.ɵɵadvance(6);
|
|
2298
2299
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.RelatedEntityDisplayType);
|
|
2299
2300
|
} }
|
|
2300
|
-
function
|
|
2301
|
-
i0.ɵɵelementStart(0, "div",
|
|
2301
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
2302
|
+
i0.ɵɵelementStart(0, "div", 334)(1, "h5");
|
|
2302
2303
|
i0.ɵɵtext(2, "Encryption");
|
|
2303
2304
|
i0.ɵɵelementEnd();
|
|
2304
|
-
i0.ɵɵelementStart(3, "div",
|
|
2305
|
+
i0.ɵɵelementStart(3, "div", 337)(4, "div", 338)(5, "span", 339);
|
|
2305
2306
|
i0.ɵɵtext(6, "Encrypted");
|
|
2306
2307
|
i0.ɵɵelementEnd();
|
|
2307
|
-
i0.ɵɵelementStart(7, "span",
|
|
2308
|
+
i0.ɵɵelementStart(7, "span", 341);
|
|
2308
2309
|
i0.ɵɵtext(8, "Yes");
|
|
2309
2310
|
i0.ɵɵelementEnd()();
|
|
2310
|
-
i0.ɵɵelementStart(9, "div",
|
|
2311
|
+
i0.ɵɵelementStart(9, "div", 338)(10, "span", 339);
|
|
2311
2312
|
i0.ɵɵtext(11, "Decrypt in API");
|
|
2312
2313
|
i0.ɵɵelementEnd();
|
|
2313
|
-
i0.ɵɵelementStart(12, "span",
|
|
2314
|
+
i0.ɵɵelementStart(12, "span", 341);
|
|
2314
2315
|
i0.ɵɵtext(13);
|
|
2315
2316
|
i0.ɵɵelementEnd()()()();
|
|
2316
2317
|
} if (rf & 2) {
|
|
@@ -2318,11 +2319,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2318
2319
|
i0.ɵɵadvance(13);
|
|
2319
2320
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.AllowDecryptInAPI ? "Yes" : "No");
|
|
2320
2321
|
} }
|
|
2321
|
-
function
|
|
2322
|
-
i0.ɵɵelementStart(0, "div",
|
|
2322
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
2323
|
+
i0.ɵɵelementStart(0, "div", 338)(1, "span", 339);
|
|
2323
2324
|
i0.ɵɵtext(2, "Category");
|
|
2324
2325
|
i0.ɵɵelementEnd();
|
|
2325
|
-
i0.ɵɵelementStart(3, "span",
|
|
2326
|
+
i0.ɵɵelementStart(3, "span", 341);
|
|
2326
2327
|
i0.ɵɵtext(4);
|
|
2327
2328
|
i0.ɵɵelementEnd()();
|
|
2328
2329
|
} if (rf & 2) {
|
|
@@ -2330,8 +2331,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2330
2331
|
i0.ɵɵadvance(4);
|
|
2331
2332
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Category);
|
|
2332
2333
|
} }
|
|
2333
|
-
function
|
|
2334
|
-
i0.ɵɵelementStart(0, "span",
|
|
2334
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_69_For_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2335
|
+
i0.ɵɵelementStart(0, "span", 347);
|
|
2335
2336
|
i0.ɵɵtext(1);
|
|
2336
2337
|
i0.ɵɵelementEnd();
|
|
2337
2338
|
} if (rf & 2) {
|
|
@@ -2339,10 +2340,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2339
2340
|
i0.ɵɵadvance();
|
|
2340
2341
|
i0.ɵɵtextInterpolate(val_r58.Code);
|
|
2341
2342
|
} }
|
|
2342
|
-
function
|
|
2343
|
-
i0.ɵɵelementStart(0, "div",
|
|
2344
|
-
i0.ɵɵconditionalCreate(1,
|
|
2345
|
-
i0.ɵɵelementStart(2, "span",
|
|
2343
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_69_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
2344
|
+
i0.ɵɵelementStart(0, "div", 346);
|
|
2345
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_69_For_5_Conditional_1_Template, 2, 1, "span", 347);
|
|
2346
|
+
i0.ɵɵelementStart(2, "span", 348);
|
|
2346
2347
|
i0.ɵɵtext(3);
|
|
2347
2348
|
i0.ɵɵelementEnd()();
|
|
2348
2349
|
} if (rf & 2) {
|
|
@@ -2352,97 +2353,97 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_
|
|
|
2352
2353
|
i0.ɵɵadvance(2);
|
|
2353
2354
|
i0.ɵɵtextInterpolate(val_r58.Value);
|
|
2354
2355
|
} }
|
|
2355
|
-
function
|
|
2356
|
-
i0.ɵɵelementStart(0, "div",
|
|
2356
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_69_Template(rf, ctx) { if (rf & 1) {
|
|
2357
|
+
i0.ɵɵelementStart(0, "div", 334)(1, "h5");
|
|
2357
2358
|
i0.ɵɵtext(2, "Allowed Values");
|
|
2358
2359
|
i0.ɵɵelementEnd();
|
|
2359
|
-
i0.ɵɵelementStart(3, "div",
|
|
2360
|
-
i0.ɵɵrepeaterCreate(4,
|
|
2360
|
+
i0.ɵɵelementStart(3, "div", 345);
|
|
2361
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_69_For_5_Template, 4, 2, "div", 346, i0.ɵɵrepeaterTrackByIdentity);
|
|
2361
2362
|
i0.ɵɵelementEnd()();
|
|
2362
2363
|
} if (rf & 2) {
|
|
2363
2364
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2364
2365
|
i0.ɵɵadvance(4);
|
|
2365
2366
|
i0.ɵɵrepeater(ctx_r2.selectedField.EntityFieldValues);
|
|
2366
2367
|
} }
|
|
2367
|
-
function
|
|
2368
|
-
i0.ɵɵelementStart(0, "div",
|
|
2368
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
2369
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 334)(2, "h4");
|
|
2369
2370
|
i0.ɵɵtext(3);
|
|
2370
2371
|
i0.ɵɵelementEnd();
|
|
2371
|
-
i0.ɵɵelementStart(4, "div",
|
|
2372
|
+
i0.ɵɵelementStart(4, "div", 335);
|
|
2372
2373
|
i0.ɵɵtext(5);
|
|
2373
2374
|
i0.ɵɵelementEnd();
|
|
2374
|
-
i0.ɵɵconditionalCreate(6,
|
|
2375
|
+
i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_6_Template, 2, 1, "p", 336);
|
|
2375
2376
|
i0.ɵɵelementEnd();
|
|
2376
|
-
i0.ɵɵelementStart(7, "div",
|
|
2377
|
+
i0.ɵɵelementStart(7, "div", 334)(8, "h5");
|
|
2377
2378
|
i0.ɵɵtext(9, "Type Information");
|
|
2378
2379
|
i0.ɵɵelementEnd();
|
|
2379
|
-
i0.ɵɵelementStart(10, "div",
|
|
2380
|
+
i0.ɵɵelementStart(10, "div", 337)(11, "div", 338)(12, "span", 339);
|
|
2380
2381
|
i0.ɵɵtext(13, "SQL Type");
|
|
2381
2382
|
i0.ɵɵelementEnd();
|
|
2382
|
-
i0.ɵɵelementStart(14, "span",
|
|
2383
|
+
i0.ɵɵelementStart(14, "span", 340);
|
|
2383
2384
|
i0.ɵɵtext(15);
|
|
2384
2385
|
i0.ɵɵelementEnd()();
|
|
2385
|
-
i0.ɵɵelementStart(16, "div",
|
|
2386
|
+
i0.ɵɵelementStart(16, "div", 338)(17, "span", 339);
|
|
2386
2387
|
i0.ɵɵtext(18, "TypeScript Type");
|
|
2387
2388
|
i0.ɵɵelementEnd();
|
|
2388
|
-
i0.ɵɵelementStart(19, "span",
|
|
2389
|
+
i0.ɵɵelementStart(19, "span", 340);
|
|
2389
2390
|
i0.ɵɵtext(20);
|
|
2390
2391
|
i0.ɵɵelementEnd()();
|
|
2391
|
-
i0.ɵɵelementStart(21, "div",
|
|
2392
|
+
i0.ɵɵelementStart(21, "div", 338)(22, "span", 339);
|
|
2392
2393
|
i0.ɵɵtext(23, "Nullable");
|
|
2393
2394
|
i0.ɵɵelementEnd();
|
|
2394
|
-
i0.ɵɵelementStart(24, "span",
|
|
2395
|
+
i0.ɵɵelementStart(24, "span", 341);
|
|
2395
2396
|
i0.ɵɵtext(25);
|
|
2396
2397
|
i0.ɵɵelementEnd()();
|
|
2397
|
-
i0.ɵɵconditionalCreate(26,
|
|
2398
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_26_Template, 5, 1, "div", 338);
|
|
2398
2399
|
i0.ɵɵelementEnd()();
|
|
2399
|
-
i0.ɵɵconditionalCreate(27,
|
|
2400
|
-
i0.ɵɵconditionalCreate(28,
|
|
2401
|
-
i0.ɵɵconditionalCreate(29,
|
|
2402
|
-
i0.ɵɵelementStart(30, "div",
|
|
2400
|
+
i0.ɵɵconditionalCreate(27, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_27_Template, 16, 1, "div", 342);
|
|
2401
|
+
i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_28_Template, 15, 2, "div", 334);
|
|
2402
|
+
i0.ɵɵconditionalCreate(29, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_29_Template, 14, 1, "div", 334);
|
|
2403
|
+
i0.ɵɵelementStart(30, "div", 334)(31, "h5");
|
|
2403
2404
|
i0.ɵɵtext(32, "API Settings");
|
|
2404
2405
|
i0.ɵɵelementEnd();
|
|
2405
|
-
i0.ɵɵelementStart(33, "div",
|
|
2406
|
+
i0.ɵɵelementStart(33, "div", 337)(34, "div", 338)(35, "span", 339);
|
|
2406
2407
|
i0.ɵɵtext(36, "Allow Update");
|
|
2407
2408
|
i0.ɵɵelementEnd();
|
|
2408
|
-
i0.ɵɵelementStart(37, "span",
|
|
2409
|
+
i0.ɵɵelementStart(37, "span", 341);
|
|
2409
2410
|
i0.ɵɵtext(38);
|
|
2410
2411
|
i0.ɵɵelementEnd()();
|
|
2411
|
-
i0.ɵɵelementStart(39, "div",
|
|
2412
|
+
i0.ɵɵelementStart(39, "div", 338)(40, "span", 339);
|
|
2412
2413
|
i0.ɵɵtext(41, "Include in Search");
|
|
2413
2414
|
i0.ɵɵelementEnd();
|
|
2414
|
-
i0.ɵɵelementStart(42, "span",
|
|
2415
|
+
i0.ɵɵelementStart(42, "span", 341);
|
|
2415
2416
|
i0.ɵɵtext(43);
|
|
2416
2417
|
i0.ɵɵelementEnd()();
|
|
2417
|
-
i0.ɵɵelementStart(44, "div",
|
|
2418
|
+
i0.ɵɵelementStart(44, "div", 338)(45, "span", 339);
|
|
2418
2419
|
i0.ɵɵtext(46, "Full-Text Search");
|
|
2419
2420
|
i0.ɵɵelementEnd();
|
|
2420
|
-
i0.ɵɵelementStart(47, "span",
|
|
2421
|
+
i0.ɵɵelementStart(47, "span", 341);
|
|
2421
2422
|
i0.ɵɵtext(48);
|
|
2422
2423
|
i0.ɵɵelementEnd()()()();
|
|
2423
|
-
i0.ɵɵelementStart(49, "div",
|
|
2424
|
+
i0.ɵɵelementStart(49, "div", 334)(50, "h5");
|
|
2424
2425
|
i0.ɵɵtext(51, "Form Settings");
|
|
2425
2426
|
i0.ɵɵelementEnd();
|
|
2426
|
-
i0.ɵɵelementStart(52, "div",
|
|
2427
|
+
i0.ɵɵelementStart(52, "div", 337)(53, "div", 338)(54, "span", 339);
|
|
2427
2428
|
i0.ɵɵtext(55, "Include in Form");
|
|
2428
2429
|
i0.ɵɵelementEnd();
|
|
2429
|
-
i0.ɵɵelementStart(56, "span",
|
|
2430
|
+
i0.ɵɵelementStart(56, "span", 341);
|
|
2430
2431
|
i0.ɵɵtext(57);
|
|
2431
2432
|
i0.ɵɵelementEnd()();
|
|
2432
|
-
i0.ɵɵelementStart(58, "div",
|
|
2433
|
+
i0.ɵɵelementStart(58, "div", 338)(59, "span", 339);
|
|
2433
2434
|
i0.ɵɵtext(60, "Section");
|
|
2434
2435
|
i0.ɵɵelementEnd();
|
|
2435
|
-
i0.ɵɵelementStart(61, "span",
|
|
2436
|
+
i0.ɵɵelementStart(61, "span", 341);
|
|
2436
2437
|
i0.ɵɵtext(62);
|
|
2437
2438
|
i0.ɵɵelementEnd()();
|
|
2438
|
-
i0.ɵɵconditionalCreate(63,
|
|
2439
|
-
i0.ɵɵelementStart(64, "div",
|
|
2439
|
+
i0.ɵɵconditionalCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_63_Template, 5, 1, "div", 338);
|
|
2440
|
+
i0.ɵɵelementStart(64, "div", 338)(65, "span", 339);
|
|
2440
2441
|
i0.ɵɵtext(66, "Sequence");
|
|
2441
2442
|
i0.ɵɵelementEnd();
|
|
2442
|
-
i0.ɵɵelementStart(67, "span",
|
|
2443
|
+
i0.ɵɵelementStart(67, "span", 341);
|
|
2443
2444
|
i0.ɵɵtext(68);
|
|
2444
2445
|
i0.ɵɵelementEnd()()()();
|
|
2445
|
-
i0.ɵɵconditionalCreate(69,
|
|
2446
|
+
i0.ɵɵconditionalCreate(69, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Conditional_69_Template, 6, 0, "div", 334);
|
|
2446
2447
|
i0.ɵɵelementEnd();
|
|
2447
2448
|
} if (rf & 2) {
|
|
2448
2449
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -2483,50 +2484,50 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Template(rf,
|
|
|
2483
2484
|
i0.ɵɵadvance();
|
|
2484
2485
|
i0.ɵɵconditional(ctx_r2.selectedField.EntityFieldValues.length > 0 ? 69 : -1);
|
|
2485
2486
|
} }
|
|
2486
|
-
function
|
|
2487
|
-
i0.ɵɵelementStart(0, "div",
|
|
2487
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_68_Template(rf, ctx) { if (rf & 1) {
|
|
2488
|
+
i0.ɵɵelementStart(0, "div", 42)(1, "div", 334)(2, "h4");
|
|
2488
2489
|
i0.ɵɵtext(3);
|
|
2489
2490
|
i0.ɵɵelementEnd()();
|
|
2490
|
-
i0.ɵɵelementStart(4, "div",
|
|
2491
|
+
i0.ɵɵelementStart(4, "div", 334)(5, "h5");
|
|
2491
2492
|
i0.ɵɵtext(6, "Connection");
|
|
2492
2493
|
i0.ɵɵelementEnd();
|
|
2493
|
-
i0.ɵɵelementStart(7, "div",
|
|
2494
|
+
i0.ɵɵelementStart(7, "div", 337)(8, "div", 338)(9, "span", 339);
|
|
2494
2495
|
i0.ɵɵtext(10, "From Entity");
|
|
2495
2496
|
i0.ɵɵelementEnd();
|
|
2496
|
-
i0.ɵɵelementStart(11, "span",
|
|
2497
|
+
i0.ɵɵelementStart(11, "span", 341);
|
|
2497
2498
|
i0.ɵɵtext(12);
|
|
2498
2499
|
i0.ɵɵelementEnd()();
|
|
2499
|
-
i0.ɵɵelementStart(13, "div",
|
|
2500
|
+
i0.ɵɵelementStart(13, "div", 338)(14, "span", 339);
|
|
2500
2501
|
i0.ɵɵtext(15, "Join Field");
|
|
2501
2502
|
i0.ɵɵelementEnd();
|
|
2502
|
-
i0.ɵɵelementStart(16, "span",
|
|
2503
|
+
i0.ɵɵelementStart(16, "span", 340);
|
|
2503
2504
|
i0.ɵɵtext(17);
|
|
2504
2505
|
i0.ɵɵelementEnd()();
|
|
2505
|
-
i0.ɵɵelementStart(18, "div",
|
|
2506
|
+
i0.ɵɵelementStart(18, "div", 338)(19, "span", 339);
|
|
2506
2507
|
i0.ɵɵtext(20, "Type");
|
|
2507
2508
|
i0.ɵɵelementEnd();
|
|
2508
|
-
i0.ɵɵelementStart(21, "span",
|
|
2509
|
+
i0.ɵɵelementStart(21, "span", 341);
|
|
2509
2510
|
i0.ɵɵtext(22);
|
|
2510
2511
|
i0.ɵɵelementEnd()()()();
|
|
2511
|
-
i0.ɵɵelementStart(23, "div",
|
|
2512
|
+
i0.ɵɵelementStart(23, "div", 334)(24, "h5");
|
|
2512
2513
|
i0.ɵɵtext(25, "Display Settings");
|
|
2513
2514
|
i0.ɵɵelementEnd();
|
|
2514
|
-
i0.ɵɵelementStart(26, "div",
|
|
2515
|
+
i0.ɵɵelementStart(26, "div", 337)(27, "div", 338)(28, "span", 339);
|
|
2515
2516
|
i0.ɵɵtext(29, "Display in Form");
|
|
2516
2517
|
i0.ɵɵelementEnd();
|
|
2517
|
-
i0.ɵɵelementStart(30, "span",
|
|
2518
|
+
i0.ɵɵelementStart(30, "span", 341);
|
|
2518
2519
|
i0.ɵɵtext(31);
|
|
2519
2520
|
i0.ɵɵelementEnd()();
|
|
2520
|
-
i0.ɵɵelementStart(32, "div",
|
|
2521
|
+
i0.ɵɵelementStart(32, "div", 338)(33, "span", 339);
|
|
2521
2522
|
i0.ɵɵtext(34, "Location");
|
|
2522
2523
|
i0.ɵɵelementEnd();
|
|
2523
|
-
i0.ɵɵelementStart(35, "span",
|
|
2524
|
+
i0.ɵɵelementStart(35, "span", 341);
|
|
2524
2525
|
i0.ɵɵtext(36);
|
|
2525
2526
|
i0.ɵɵelementEnd()();
|
|
2526
|
-
i0.ɵɵelementStart(37, "div",
|
|
2527
|
+
i0.ɵɵelementStart(37, "div", 338)(38, "span", 339);
|
|
2527
2528
|
i0.ɵɵtext(39, "Bundle in API");
|
|
2528
2529
|
i0.ɵɵelementEnd();
|
|
2529
|
-
i0.ɵɵelementStart(40, "span",
|
|
2530
|
+
i0.ɵɵelementStart(40, "span", 341);
|
|
2530
2531
|
i0.ɵɵtext(41);
|
|
2531
2532
|
i0.ɵɵelementEnd()()()()();
|
|
2532
2533
|
} if (rf & 2) {
|
|
@@ -2605,29 +2606,32 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
2605
2606
|
i0.ɵɵelementStart(44, "span", 19);
|
|
2606
2607
|
i0.ɵɵtext(45, "Rows");
|
|
2607
2608
|
i0.ɵɵelementEnd()()()();
|
|
2608
|
-
i0.ɵɵelementStart(46, "div", 24)(47, "
|
|
2609
|
-
i0.ɵɵ
|
|
2610
|
-
i0.ɵɵelementEnd();
|
|
2611
|
-
i0.ɵɵelementStart(
|
|
2612
|
-
i0.ɵɵ
|
|
2613
|
-
i0.ɵɵ
|
|
2614
|
-
i0.ɵɵ
|
|
2615
|
-
i0.ɵɵconditionalCreate(
|
|
2616
|
-
i0.ɵɵconditionalCreate(
|
|
2617
|
-
i0.ɵɵconditionalCreate(
|
|
2618
|
-
i0.ɵɵconditionalCreate(
|
|
2619
|
-
i0.ɵɵconditionalCreate(
|
|
2620
|
-
i0.ɵɵconditionalCreate(
|
|
2621
|
-
i0.ɵɵ
|
|
2622
|
-
i0.ɵɵ
|
|
2623
|
-
i0.ɵɵconditionalCreate(
|
|
2609
|
+
i0.ɵɵelementStart(46, "div", 24)(47, "mj-section-picker", 25);
|
|
2610
|
+
i0.ɵɵlistener("ActiveKeyChange", function MJEntityFormComponentExtended_Conditional_0_Template_mj_section_picker_ActiveKeyChange_47_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionPicked($event)); });
|
|
2611
|
+
i0.ɵɵelementEnd();
|
|
2612
|
+
i0.ɵɵelementStart(48, "nav", 26);
|
|
2613
|
+
i0.ɵɵrepeaterCreate(49, MJEntityFormComponentExtended_Conditional_0_For_50_Template, 5, 7, "button", 27, i0.ɵɵrepeaterTrackByIdentity);
|
|
2614
|
+
i0.ɵɵelementEnd();
|
|
2615
|
+
i0.ɵɵelementStart(51, "main", 28);
|
|
2616
|
+
i0.ɵɵconditionalCreate(52, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template, 111, 23, "section", 29);
|
|
2617
|
+
i0.ɵɵconditionalCreate(53, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template, 15, 8, "section", 30);
|
|
2618
|
+
i0.ɵɵconditionalCreate(54, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template, 13, 7, "section", 31);
|
|
2619
|
+
i0.ɵɵconditionalCreate(55, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template, 4, 1, "section", 32);
|
|
2620
|
+
i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template, 55, 22, "section", 33);
|
|
2621
|
+
i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template, 3, 1, "section", 34);
|
|
2622
|
+
i0.ɵɵconditionalCreate(58, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template, 72, 26, "section", 35);
|
|
2623
|
+
i0.ɵɵconditionalCreate(59, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template, 18, 7, "section", 36);
|
|
2624
|
+
i0.ɵɵconditionalCreate(60, MJEntityFormComponentExtended_Conditional_0_Conditional_60_Template, 40, 18, "section", 37);
|
|
2625
|
+
i0.ɵɵelementEnd();
|
|
2626
|
+
i0.ɵɵelementStart(61, "aside", 38)(62, "div", 39);
|
|
2624
2627
|
i0.ɵɵconditionalCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_63_Template, 2, 0, "h3");
|
|
2625
|
-
i0.ɵɵ
|
|
2626
|
-
i0.ɵɵ
|
|
2627
|
-
i0.ɵɵ
|
|
2628
|
+
i0.ɵɵconditionalCreate(64, MJEntityFormComponentExtended_Conditional_0_Conditional_64_Template, 2, 0, "h3");
|
|
2629
|
+
i0.ɵɵelementStart(65, "button", 40);
|
|
2630
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Template_button_click_65_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDetailPanel()); });
|
|
2631
|
+
i0.ɵɵelement(66, "i", 41);
|
|
2628
2632
|
i0.ɵɵelementEnd()();
|
|
2629
|
-
i0.ɵɵconditionalCreate(
|
|
2630
|
-
i0.ɵɵconditionalCreate(
|
|
2633
|
+
i0.ɵɵconditionalCreate(67, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Template, 70, 18, "div", 42);
|
|
2634
|
+
i0.ɵɵconditionalCreate(68, MJEntityFormComponentExtended_Conditional_0_Conditional_68_Template, 42, 7, "div", 42);
|
|
2631
2635
|
i0.ɵɵelementEnd()()();
|
|
2632
2636
|
} if (rf & 2) {
|
|
2633
2637
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -2663,57 +2667,59 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
2663
2667
|
i0.ɵɵconditional(!ctx_r2.isRowCountLoading ? 42 : -1);
|
|
2664
2668
|
i0.ɵɵadvance();
|
|
2665
2669
|
i0.ɵɵconditional(ctx_r2.isRowCountLoading ? 43 : -1);
|
|
2666
|
-
i0.ɵɵadvance(
|
|
2670
|
+
i0.ɵɵadvance(4);
|
|
2671
|
+
i0.ɵɵproperty("Items", ctx_r2.SectionPickerItems)("ActiveKey", ctx_r2.ActiveSection);
|
|
2672
|
+
i0.ɵɵadvance(2);
|
|
2667
2673
|
i0.ɵɵrepeater(ctx_r2.navItems);
|
|
2668
2674
|
i0.ɵɵadvance(2);
|
|
2669
2675
|
i0.ɵɵclassProp("panel-open", ctx_r2.detailPanelOpen);
|
|
2670
2676
|
i0.ɵɵadvance();
|
|
2671
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "overview" ?
|
|
2677
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "overview" ? 52 : -1);
|
|
2672
2678
|
i0.ɵɵadvance();
|
|
2673
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "fields" ?
|
|
2679
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "fields" ? 53 : -1);
|
|
2674
2680
|
i0.ɵɵadvance();
|
|
2675
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "relationships" ?
|
|
2681
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "relationships" ? 54 : -1);
|
|
2676
2682
|
i0.ɵɵadvance();
|
|
2677
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "organicKeys" ?
|
|
2683
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "organicKeys" ? 55 : -1);
|
|
2678
2684
|
i0.ɵɵadvance();
|
|
2679
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "permissions" ?
|
|
2685
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "permissions" ? 56 : -1);
|
|
2680
2686
|
i0.ɵɵadvance();
|
|
2681
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "data" ?
|
|
2687
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "data" ? 57 : -1);
|
|
2682
2688
|
i0.ɵɵadvance();
|
|
2683
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "lineage" ?
|
|
2689
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "lineage" ? 58 : -1);
|
|
2684
2690
|
i0.ɵɵadvance();
|
|
2685
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "history" ?
|
|
2691
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "history" ? 59 : -1);
|
|
2686
2692
|
i0.ɵɵadvance();
|
|
2687
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "settings" ?
|
|
2693
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "settings" ? 60 : -1);
|
|
2688
2694
|
i0.ɵɵadvance();
|
|
2689
2695
|
i0.ɵɵclassProp("open", ctx_r2.detailPanelOpen);
|
|
2690
2696
|
i0.ɵɵadvance(2);
|
|
2691
|
-
i0.ɵɵconditional(ctx_r2.selectedField ?
|
|
2697
|
+
i0.ɵɵconditional(ctx_r2.selectedField ? 63 : -1);
|
|
2692
2698
|
i0.ɵɵadvance();
|
|
2693
|
-
i0.ɵɵconditional(ctx_r2.selectedRelationship ?
|
|
2699
|
+
i0.ɵɵconditional(ctx_r2.selectedRelationship ? 64 : -1);
|
|
2694
2700
|
i0.ɵɵadvance(3);
|
|
2695
|
-
i0.ɵɵconditional(ctx_r2.selectedField ?
|
|
2701
|
+
i0.ɵɵconditional(ctx_r2.selectedField ? 67 : -1);
|
|
2696
2702
|
i0.ɵɵadvance();
|
|
2697
|
-
i0.ɵɵconditional(ctx_r2.selectedRelationship ?
|
|
2703
|
+
i0.ɵɵconditional(ctx_r2.selectedRelationship ? 68 : -1);
|
|
2698
2704
|
} }
|
|
2699
2705
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
2700
|
-
i0.ɵɵelementStart(0, "div",
|
|
2701
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
2706
|
+
i0.ɵɵelementStart(0, "div", 349);
|
|
2707
|
+
i0.ɵɵelement(1, "mj-loading", 352);
|
|
2702
2708
|
i0.ɵɵelementEnd();
|
|
2703
2709
|
} }
|
|
2704
2710
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2705
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
2711
|
+
i0.ɵɵelement(0, "mj-empty-state", 350);
|
|
2706
2712
|
} if (rf & 2) {
|
|
2707
2713
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
2708
2714
|
i0.ɵɵproperty("Message", ctx_r2.explorerError);
|
|
2709
2715
|
} }
|
|
2710
2716
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
2711
|
-
i0.ɵɵelement(0, "mj-empty-state",
|
|
2717
|
+
i0.ɵɵelement(0, "mj-empty-state", 351);
|
|
2712
2718
|
} }
|
|
2713
2719
|
function MJEntityFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2714
|
-
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div",
|
|
2715
|
-
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 1, 1, "mj-empty-state",
|
|
2716
|
-
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 1, 0, "mj-empty-state",
|
|
2720
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div", 349);
|
|
2721
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 1, 1, "mj-empty-state", 350);
|
|
2722
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 1, 0, "mj-empty-state", 351);
|
|
2717
2723
|
} if (rf & 2) {
|
|
2718
2724
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
2719
2725
|
i0.ɵɵconditional(ctx_r2.isExplorerLoading ? 0 : -1);
|
|
@@ -2818,6 +2824,8 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2818
2824
|
this.SelectedRelationship = null;
|
|
2819
2825
|
this.destroy$ = new Subject();
|
|
2820
2826
|
this.stateChange$ = new Subject();
|
|
2827
|
+
/** Stops following the breakpoint; set at init, called from ngOnDestroy. */
|
|
2828
|
+
this.stopPhoneWatch = () => undefined;
|
|
2821
2829
|
this.IsSavingCloneConfig = false;
|
|
2822
2830
|
this.CloneConfigSaveError = '';
|
|
2823
2831
|
/**
|
|
@@ -3074,11 +3082,28 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
3074
3082
|
get _metadata() { return this.ProviderToUse; }
|
|
3075
3083
|
async ngOnInit() {
|
|
3076
3084
|
await super.ngOnInit();
|
|
3085
|
+
this.ApplyPhoneDefaults(IsPhoneViewport());
|
|
3086
|
+
this.stopPhoneWatch = WatchPhoneViewport(() => this.SyncPhoneViewport());
|
|
3077
3087
|
this.setupStateManagement();
|
|
3078
3088
|
this.loadExplorerData();
|
|
3079
3089
|
}
|
|
3090
|
+
/**
|
|
3091
|
+
* Phone-width defaults, applied at init and whenever the breakpoint is crossed into phone width: Relations opens as the list, since the ERD is a
|
|
3092
|
+
* desktop experience (pan, zoom, depth) that a 375px canvas cannot carry. The user can still
|
|
3093
|
+
* switch to the diagram from the section header.
|
|
3094
|
+
*/
|
|
3095
|
+
ApplyPhoneDefaults(isPhone) {
|
|
3096
|
+
if (isPhone)
|
|
3097
|
+
this.RelationshipViewMode = 'list';
|
|
3098
|
+
}
|
|
3099
|
+
/** Re-reads the breakpoint and re-applies the phone defaults (rotation, resize). */
|
|
3100
|
+
SyncPhoneViewport() {
|
|
3101
|
+
this.ApplyPhoneDefaults(IsPhoneViewport());
|
|
3102
|
+
this.cdr.markForCheck();
|
|
3103
|
+
}
|
|
3080
3104
|
ngOnDestroy() {
|
|
3081
3105
|
super.ngOnDestroy();
|
|
3106
|
+
this.stopPhoneWatch();
|
|
3082
3107
|
this.destroy$.next();
|
|
3083
3108
|
this.destroy$.complete();
|
|
3084
3109
|
}
|
|
@@ -3477,6 +3502,16 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
3477
3502
|
});
|
|
3478
3503
|
}
|
|
3479
3504
|
// === Public Methods ===
|
|
3505
|
+
/** The rail's items as `mj-section-picker` items: same order, the badge as the count. */
|
|
3506
|
+
get SectionPickerItems() {
|
|
3507
|
+
return this.NavItems.map((item) => ({ Key: item.id, Title: item.label, Icon: item.icon, Count: item.badge ?? null }));
|
|
3508
|
+
}
|
|
3509
|
+
/** A pick from the phone section sheet; a key that names no rail item is ignored. */
|
|
3510
|
+
OnSectionPicked(key) {
|
|
3511
|
+
const item = this.NavItems.find((i) => i.id === key);
|
|
3512
|
+
if (item)
|
|
3513
|
+
this.SetActiveSection(item.id);
|
|
3514
|
+
}
|
|
3480
3515
|
SetActiveSection(section) {
|
|
3481
3516
|
this.ActiveSection = section;
|
|
3482
3517
|
this.CloseDetailPanel();
|
|
@@ -4114,11 +4149,11 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
4114
4149
|
return this.FormatJsonValue(value);
|
|
4115
4150
|
}
|
|
4116
4151
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJEntityFormComponentExtended_BaseFactory; return function MJEntityFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJEntityFormComponentExtended_BaseFactory || (ɵMJEntityFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJEntityFormComponentExtended)))(__ngFactoryType__ || MJEntityFormComponentExtended); }; })(); }
|
|
4117
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJEntityFormComponentExtended, selectors: [["mj-entity-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "entity-explorer"], [1, "explorer-header"], [1, "entity-identity"], [1, "entity-icon"], [1, "entity-info"], [1, "entity-title-row"], [1, "entity-name"], [1, "status-badge", 3, "ngClass"], [1, "status-badge", "isa-badge", "virtual"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type"], [1, "isa-breadcrumb"], [1, "entity-subtitle"], [1, "schema-table"], [1, "separator"], [1, "entity-description", 3, "title"], [1, "header-stats"], [1, "stat-item", 3, "click"], [1, "fa-solid", "fa-table-columns"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-shield-halved"], [1, "fa-solid", "fa-database"], [1, "stat-value", "loading"], [1, "explorer-body"], [1, "nav-rail"], [1, "nav-item", 3, "active", "title"], [1, "main-canvas"], [1, "section", "overview-section"], [1, "section", "fields-section"], [1, "section", "relationships-section"], [1, "section", "organic-keys-section"], [1, "section", "permissions-section"], [1, "section", "data-section"], [1, "section", "lineage-section"], [1, "section", "history-section"], [1, "section", "settings-section"], [1, "detail-panel"], [1, "panel-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "panel-content"], [1, "fa-solid", "fa-eye"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type", 3, "click"], [1, "fa-solid", "fa-arrow-up"], [1, "status-badge", "isa-badge", "parent-type"], [1, "fa-solid", "fa-sitemap"], ["title", "Multiple child types can coexist for a single parent record", 1, "status-badge", "isa-badge", "overlapping"], [1, "fa-solid", "fa-clone"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "nav-item", 3, "click", "title"], [1, "nav-label"], [1, "nav-badge"], [1, "section-content"], [1, "stats-cards"], ["title", "View all fields", 1, "stat-card", "clickable", 3, "click"], [1, "stat-card-header"], [1, "fa-solid", "fa-table-cells"], [1, "stat-card-body"], [1, "stat-main"], [1, "stat-details"], [1, "stat-card-action"], [1, "fa-solid", "fa-arrow-right"], ["title", "View relationships", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-diagram-project"], ["title", "View security settings", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-lock"], [1, "stat-card"], [1, "info-panel", "capabilities-panel"], [1, "panel-title"], [1, "fa-solid", "fa-bolt"], [1, "capability-tags"], [1, "capability-tag"], [1, "capability-tag", "disabled"], [1, "info-panel", "isa-panel"], [1, "info-panel", "database-panel"], [1, "fa-solid", "fa-server"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "info-panel", "codegen-panel"], [1, "fa-solid", "fa-code"], [1, "info-value", "code"], [1, "fa-solid", "fa-check"], [1, "isa-info-row", "virtual-info"], [1, "isa-children"], [1, "code"], [1, "isa-chain"], [1, "isa-chain-label"], [1, "isa-chain-nodes"], [1, "isa-node", "current"], [1, "isa-inherited-fields"], [1, "isa-field-inspector"], [1, "isa-siblings"], [1, "fa-solid", "fa-arrow-right", "isa-arrow"], [1, "isa-node", "parent", "clickable", 3, "click", "title"], ["Size", "sm", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], [1, "isa-inspector-groups"], [1, "isa-inspector-group", 3, "own", "inherited"], [1, "isa-inspector-group"], [1, "isa-inspector-header"], [1, "isa-inspector-entity"], [1, "fa-solid", "fa-circle", 2, "color", "var(--mj-brand-primary)", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "var(--mj-brand-primary)", "font-size", "10px"], [1, "isa-inspector-count"], [1, "isa-inspector-fields"], [1, "isa-inspector-field", 3, "title"], [1, "isa-inspector-type"], [1, "isa-child-list"], [1, "isa-sibling-chip", "clickable", 3, "title"], [1, "isa-sibling-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrows-left-right"], [1, "isa-child-chip", "clickable", 3, "title"], [1, "isa-child-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "isa-child-count"], [1, "section-header"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search fields...", 3, "ngModelChange", "ngModel"], [1, "header-controls"], [1, "view-mode-toggle"], ["title", "Group by category", 1, "toggle-btn", 3, "click"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "expand-collapse-controls"], [1, "section-content", "fields-content"], [1, "field-groups"], [1, "fields-list-view"], ["title", "Expand all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], ["Size", "sm", 3, "FlushBody", "Expanded"], [1, "group-icon"], [1, "group-label"], [1, "mj-accordion-badge", "mj-accordion-badge--right"], [1, "group-content"], [1, "field-item", 3, "selected"], [1, "field-item", 3, "click"], [1, "field-icon"], [1, "field-info"], [1, "field-name"], [1, "field-db-name"], [1, "field-meta"], [1, "field-type"], [1, "field-nullable"], [1, "field-related"], [1, "field-badges"], ["title", "Primary Key", 1, "badge", "pk"], ["title", "Foreign Key", 1, "badge", "fk"], ["title", "Encrypted", 1, "badge", "encrypted"], [1, "badge", "inherited", 3, "title"], [1, "field-related", 3, "click"], [1, "list-header"], [1, "list-col", "col-seq", "sortable", 3, "click"], [1, "sort-icon", "fa-solid", 3, "ngClass"], [1, "list-col", "col-name", "sortable", 3, "click"], [1, "list-col", "col-display-name", "sortable", 3, "click"], [1, "list-col", "col-type", "sortable", 3, "click"], [1, "list-col", "col-length", "sortable", 3, "click"], [1, "list-col", "col-nullable", "sortable", 3, "click"], [1, "list-col", "col-flags"], [1, "list-col", "col-desc", "sortable", 3, "click"], [1, "list-body"], [1, "list-row", 3, "selected"], ["Variant", "no-results", "Size", "compact", "Title", "No fields match your search"], [1, "list-row", 3, "click"], [1, "list-col", "col-seq"], [1, "seq-num"], [1, "list-col", "col-name"], [1, "field-type-icon"], [1, "field-name-text"], [1, "list-col", "col-display-name"], [1, "display-name-text"], [1, "list-col", "col-type"], [1, "type-tag"], [1, "list-col", "col-length"], [1, "length-value"], [1, "length-value", "muted"], [1, "list-col", "col-nullable"], [1, "required-indicator"], [1, "flag-badges"], ["title", "Primary Key", 1, "flag-badge", "pk"], ["title", "Foreign Key", 1, "flag-badge", "fk"], ["title", "Encrypted", 1, "flag-badge", "encrypted"], [1, "flag-badge", "inherited", 3, "title"], [1, "list-col", "col-desc"], [1, "desc-text", 3, "title"], [1, "fa-solid", "fa-key"], [1, "view-toggle"], [1, "toggle-btn", 3, "click"], [1, "depth-selector"], [1, "relationships-graph"], [1, "relationships-list"], [1, "depth-label"], [1, "depth-buttons"], [1, "depth-btn", 3, "active", "title"], [1, "depth-btn", 3, "click", "title"], [3, "stateChange", "openRecord", "focusEntities", "showFilterPanel", "showHeader", "depth"], [1, "relationship-group"], [1, "relationship-group-title"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "group-count"], [1, "relationship-items", "grouped"], [1, "relationship-item-grouped"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-from-bracket", "Title", "No outgoing relationships"], [1, "fa-solid", "fa-arrow-right-to-bracket"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-to-bracket", "Title", "No incoming relationships"], [1, "rel-header"], [1, "rel-icon", "outgoing"], [1, "rel-entity-name"], [1, "rel-fields-chips"], [1, "field-chip", "outgoing", 3, "title"], [1, "field-chip", "outgoing", 3, "click", "title"], [1, "rel-icon", "incoming"], [1, "fa-solid", "fa-arrow-left"], [1, "field-chip", "incoming", 3, "title"], ["title", "Bundled in API", 1, "fa-solid", "fa-box", "bundle-icon"], ["Icon", "fa-solid fa-fingerprint", "Title", "No Organic Keys", "Message", "This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints."], [1, "organic-key-cards"], [1, "organic-key-card"], [1, "organic-key-card-header"], [1, "organic-key-name"], [1, "fa-solid", "fa-fingerprint", "organic-key-icon"], [1, "organic-key-badges"], [1, "organic-key-badge", "strategy"], [1, "organic-key-badge", "fields"], [1, "organic-key-description"], [1, "organic-key-targets"], [1, "organic-key-target", "clickable"], [1, "organic-key-target", "clickable", 3, "click"], [1, "target-main"], [1, "target-header"], [1, "target-entity-icon"], [1, "target-entity-name"], [1, "fa-solid", "fa-external-link-alt", "target-nav-icon"], [1, "target-match-detail"], [1, "match-type-badge", "direct"], [1, "match-fields"], [1, "match-type-badge", "transitive"], [1, "match-fields", 3, "title"], [1, "organic-key-card", "incoming", "clickable"], [1, "organic-key-card", "incoming", "clickable", 3, "click"], [1, "match-type-badge"], [1, "organic-key-detail-row"], [1, "detail-label"], [1, "detail-value"], [1, "permissions-matrix"], [1, "matrix-table"], [1, "center"], ["Size", "compact", "Icon", "fa-solid fa-shield-halved", "Title", "No permissions configured"], [1, "api-capabilities"], [1, "fa-solid", "fa-plug"], [1, "capability-grid"], [1, "capability-item"], [1, "fa-solid", 3, "ngClass"], [1, "role-name"], [1, "permission-icon", 3, "ngClass"], [1, "rls-info"], ["title", "Read RLS", 1, "rls-badge"], ["title", "Create RLS", 1, "rls-badge"], ["title", "Update RLS", 1, "rls-badge"], ["title", "Delete RLS", 1, "rls-badge"], [1, "no-rls"], [1, "data-viewer-container"], [3, "Entity", "Provider"], [3, "RecordOpened", "CreateRecordRequested", "Entity", "Provider"], [1, "lineage-diagram"], [1, "lineage-stage", "sources"], [1, "lineage-items"], [1, "lineage-item"], [1, "fa-solid", "fa-keyboard"], [1, "lineage-arrow"], [1, "lineage-stage", "entity-node"], [1, "entity-box"], [1, "lineage-stage", "sinks"], [1, "tracking-config"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "config-grid"], [1, "config-item"], [1, "config-label"], [1, "config-value"], [1, "fa-solid", "fa-map-location-dot"], [1, "helper-text"], [1, "history-config"], [1, "config-status"], [1, "config-text"], [1, "history-info"], [1, "info-card"], [1, "fa-solid", "fa-info-circle"], [1, "audit-fields-list"], [1, "settings-panel", "isa-settings-panel"], [1, "settings-panel"], [1, "fa-solid", "fa-sliders"], [1, "settings-list"], ["Size", "compact", "Icon", "fa-solid fa-sliders", "Title", "No custom settings configured"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fts-config"], ["Variant", "warning", "Size", "compact", "Title", "Full-text search is not enabled for this entity"], [3, "FormConfigChange", "FormConfig", "ParentSchemaName", "Candidates", "EditMode"], [1, "panel-title-row"], [1, "panel-title-actions"], [1, "panel-error"], [3, "CloneConfigChange", "Provider", "Entity", "CloneConfig", "EditMode"], [1, "fa-solid", "fa-box"], [1, "config-row"], ["title", "Navigate to parent entity", 1, "link"], [1, "muted"], [1, "fa-solid", "fa-circle-check", 2, "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-circle-minus", 2, "color", "var(--mj-text-muted)"], ["title", "Navigate to parent entity", 1, "link", 3, "click"], [1, "link", 3, "click"], [1, "fa-solid", "fa-circle-check", 2, "color", "#059669"], [1, "setting-item"], [1, "setting-name"], [1, "setting-value-json"], [1, "setting-value"], [1, "setting-comment"], ["language", "json", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], [1, "config-value", "enabled"], [1, "fa-solid", "fa-circle-check"], [1, "config-value", "code"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", 3, "click", "disabled"], [1, "detail-section"], [1, "detail-field-db-name"], [1, "field-description"], [1, "detail-grid"], [1, "detail-item"], [1, "label"], [1, "value", "code"], [1, "value"], [1, "detail-section", "isa-source-section"], ["title", "Navigate to source entity", 1, "value", "link", 3, "click"], [1, "value", "link", 3, "click"], [1, "value-list"], [1, "value-item"], [1, "value-code"], [1, "value-display"], [1, "explorer-loading"], ["Variant", "error", "Icon", "fa-solid fa-triangle-exclamation", "Title", "Failed to load entity", 1, "explorer-fill", 3, "Message"], ["Icon", "fa-solid fa-database", "Title", "Entity metadata not available", 1, "explorer-fill"], ["text", "Loading entity..."]], template: function MJEntityFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
4118
|
-
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Template,
|
|
4152
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJEntityFormComponentExtended, selectors: [["mj-entity-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "entity-explorer"], [1, "explorer-header"], [1, "entity-identity"], [1, "entity-icon"], [1, "entity-info"], [1, "entity-title-row"], [1, "entity-name"], [1, "status-badge", 3, "ngClass"], [1, "status-badge", "isa-badge", "virtual"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type"], [1, "isa-breadcrumb"], [1, "entity-subtitle"], [1, "schema-table"], [1, "separator"], [1, "entity-description", 3, "title"], [1, "header-stats"], [1, "stat-item", 3, "click"], [1, "fa-solid", "fa-table-columns"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-shield-halved"], [1, "fa-solid", "fa-database"], [1, "stat-value", "loading"], [1, "explorer-body"], [1, "phone-section-picker", 3, "ActiveKeyChange", "Items", "ActiveKey"], [1, "nav-rail"], [1, "nav-item", 3, "active", "title"], [1, "main-canvas"], [1, "section", "overview-section"], [1, "section", "fields-section"], [1, "section", "relationships-section"], [1, "section", "organic-keys-section"], [1, "section", "permissions-section"], [1, "section", "data-section"], [1, "section", "lineage-section"], [1, "section", "history-section"], [1, "section", "settings-section"], [1, "detail-panel"], [1, "panel-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "panel-content"], [1, "fa-solid", "fa-eye"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type", 3, "click"], [1, "fa-solid", "fa-arrow-up"], [1, "status-badge", "isa-badge", "parent-type"], [1, "fa-solid", "fa-sitemap"], ["title", "Multiple child types can coexist for a single parent record", 1, "status-badge", "isa-badge", "overlapping"], [1, "fa-solid", "fa-clone"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "nav-item", 3, "click", "title"], [1, "nav-label"], [1, "nav-badge"], [1, "section-content"], [1, "stats-cards"], ["title", "View all fields", 1, "stat-card", "clickable", 3, "click"], [1, "stat-card-header"], [1, "fa-solid", "fa-table-cells"], [1, "stat-card-body"], [1, "stat-main"], [1, "stat-details"], [1, "stat-card-action"], [1, "fa-solid", "fa-arrow-right"], ["title", "View relationships", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-diagram-project"], ["title", "View security settings", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-lock"], [1, "stat-card"], [1, "info-panel", "capabilities-panel"], [1, "panel-title"], [1, "fa-solid", "fa-bolt"], [1, "capability-tags"], [1, "capability-tag"], [1, "capability-tag", "disabled"], [1, "info-panel", "isa-panel"], [1, "info-panel", "database-panel"], [1, "fa-solid", "fa-server"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "info-panel", "codegen-panel"], [1, "fa-solid", "fa-code"], [1, "info-value", "code"], [1, "fa-solid", "fa-check"], [1, "isa-info-row", "virtual-info"], [1, "isa-children"], [1, "code"], [1, "isa-chain"], [1, "isa-chain-label"], [1, "isa-chain-nodes"], [1, "isa-node", "current"], [1, "isa-inherited-fields"], [1, "isa-field-inspector"], [1, "isa-siblings"], [1, "fa-solid", "fa-arrow-right", "isa-arrow"], [1, "isa-node", "parent", "clickable", 3, "click", "title"], ["Size", "sm", 3, "ExpandedChange", "FlushBody", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], [1, "isa-inspector-groups"], [1, "isa-inspector-group", 3, "own", "inherited"], [1, "isa-inspector-group"], [1, "isa-inspector-header"], [1, "isa-inspector-entity"], [1, "fa-solid", "fa-circle", 2, "color", "var(--mj-brand-primary)", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "var(--mj-brand-primary)", "font-size", "10px"], [1, "isa-inspector-count"], [1, "isa-inspector-fields"], [1, "isa-inspector-field", 3, "title"], [1, "isa-inspector-type"], [1, "isa-child-list"], [1, "isa-sibling-chip", "clickable", 3, "title"], [1, "isa-sibling-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrows-left-right"], [1, "isa-child-chip", "clickable", 3, "title"], [1, "isa-child-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "isa-child-count"], [1, "section-header"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search fields...", 3, "ngModelChange", "ngModel"], [1, "header-controls"], [1, "view-mode-toggle"], ["title", "Group by category", 1, "toggle-btn", 3, "click"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "expand-collapse-controls"], [1, "section-content", "fields-content"], [1, "field-groups"], [1, "fields-list-view"], ["title", "Expand all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], ["Size", "sm", 3, "FlushBody", "Expanded"], [1, "group-icon"], [1, "group-label"], [1, "mj-accordion-badge", "mj-accordion-badge--right"], [1, "group-content"], [1, "field-item", 3, "selected"], [1, "field-item", 3, "click"], [1, "field-icon"], [1, "field-info"], [1, "field-name"], [1, "field-db-name"], [1, "field-meta"], [1, "field-type"], [1, "field-nullable"], [1, "field-related"], [1, "field-badges"], ["title", "Primary Key", 1, "badge", "pk"], ["title", "Foreign Key", 1, "badge", "fk"], ["title", "Encrypted", 1, "badge", "encrypted"], [1, "badge", "inherited", 3, "title"], [1, "field-related", 3, "click"], [1, "list-header"], [1, "list-col", "col-seq", "sortable", 3, "click"], [1, "sort-icon", "fa-solid", 3, "ngClass"], [1, "list-col", "col-name", "sortable", 3, "click"], [1, "list-col", "col-display-name", "sortable", 3, "click"], [1, "list-col", "col-type", "sortable", 3, "click"], [1, "list-col", "col-length", "sortable", 3, "click"], [1, "list-col", "col-nullable", "sortable", 3, "click"], [1, "list-col", "col-flags"], [1, "list-col", "col-desc", "sortable", 3, "click"], [1, "list-body"], [1, "list-row", 3, "selected"], ["Variant", "no-results", "Size", "compact", "Title", "No fields match your search"], [1, "list-row", 3, "click"], [1, "list-col", "col-seq"], [1, "seq-num"], [1, "list-col", "col-name"], [1, "field-type-icon"], [1, "field-name-text"], [1, "list-col", "col-display-name"], [1, "display-name-text"], [1, "list-col", "col-type"], [1, "type-tag"], [1, "list-col", "col-length"], [1, "length-value"], [1, "length-value", "muted"], [1, "list-col", "col-nullable"], [1, "required-indicator"], [1, "flag-badges"], ["title", "Primary Key", 1, "flag-badge", "pk"], ["title", "Foreign Key", 1, "flag-badge", "fk"], ["title", "Encrypted", 1, "flag-badge", "encrypted"], [1, "flag-badge", "inherited", 3, "title"], [1, "list-col", "col-desc"], [1, "desc-text", 3, "title"], [1, "fa-solid", "fa-key"], [1, "view-toggle"], [1, "toggle-btn", 3, "click"], [1, "depth-selector"], [1, "relationships-graph"], [1, "relationships-list"], [1, "depth-label"], [1, "depth-buttons"], [1, "depth-btn", 3, "active", "title"], [1, "depth-btn", 3, "click", "title"], [3, "stateChange", "openRecord", "focusEntities", "showFilterPanel", "showHeader", "depth"], [1, "relationship-group"], [1, "relationship-group-title"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "group-count"], [1, "relationship-items", "grouped"], [1, "relationship-item-grouped"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-from-bracket", "Title", "No outgoing relationships"], [1, "fa-solid", "fa-arrow-right-to-bracket"], ["Size", "compact", "Icon", "fa-solid fa-arrow-right-to-bracket", "Title", "No incoming relationships"], [1, "rel-header"], [1, "rel-icon", "outgoing"], [1, "rel-entity-name"], [1, "rel-fields-chips"], [1, "field-chip", "outgoing", 3, "title"], [1, "field-chip", "outgoing", 3, "click", "title"], [1, "rel-icon", "incoming"], [1, "fa-solid", "fa-arrow-left"], [1, "field-chip", "incoming", 3, "title"], ["title", "Bundled in API", 1, "fa-solid", "fa-box", "bundle-icon"], ["Icon", "fa-solid fa-fingerprint", "Title", "No Organic Keys", "Message", "This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints."], [1, "organic-key-cards"], [1, "organic-key-card"], [1, "organic-key-card-header"], [1, "organic-key-name"], [1, "fa-solid", "fa-fingerprint", "organic-key-icon"], [1, "organic-key-badges"], [1, "organic-key-badge", "strategy"], [1, "organic-key-badge", "fields"], [1, "organic-key-description"], [1, "organic-key-targets"], [1, "organic-key-target", "clickable"], [1, "organic-key-target", "clickable", 3, "click"], [1, "target-main"], [1, "target-header"], [1, "target-entity-icon"], [1, "target-entity-name"], [1, "fa-solid", "fa-external-link-alt", "target-nav-icon"], [1, "target-match-detail"], [1, "match-type-badge", "direct"], [1, "match-fields"], [1, "match-type-badge", "transitive"], [1, "match-fields", 3, "title"], [1, "organic-key-card", "incoming", "clickable"], [1, "organic-key-card", "incoming", "clickable", 3, "click"], [1, "match-type-badge"], [1, "organic-key-detail-row"], [1, "detail-label"], [1, "detail-value"], [1, "permissions-matrix"], [1, "matrix-table"], [1, "center"], ["Size", "compact", "Icon", "fa-solid fa-shield-halved", "Title", "No permissions configured"], [1, "api-capabilities"], [1, "fa-solid", "fa-plug"], [1, "capability-grid"], [1, "capability-item"], [1, "fa-solid", 3, "ngClass"], [1, "role-name"], [1, "permission-icon", 3, "ngClass"], [1, "rls-info"], ["title", "Read RLS", 1, "rls-badge"], ["title", "Create RLS", 1, "rls-badge"], ["title", "Update RLS", 1, "rls-badge"], ["title", "Delete RLS", 1, "rls-badge"], [1, "no-rls"], [1, "data-viewer-container"], [3, "Entity", "Provider"], [3, "RecordOpened", "CreateRecordRequested", "Entity", "Provider"], [1, "lineage-diagram"], [1, "lineage-stage", "sources"], [1, "lineage-items"], [1, "lineage-item"], [1, "fa-solid", "fa-keyboard"], [1, "lineage-arrow"], [1, "lineage-stage", "entity-node"], [1, "entity-box"], [1, "lineage-stage", "sinks"], [1, "tracking-config"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "config-grid"], [1, "config-item"], [1, "config-label"], [1, "config-value"], [1, "fa-solid", "fa-map-location-dot"], [1, "helper-text"], [1, "history-config"], [1, "config-status"], [1, "config-text"], [1, "history-info"], [1, "info-card"], [1, "fa-solid", "fa-info-circle"], [1, "audit-fields-list"], [1, "settings-panel", "isa-settings-panel"], [1, "settings-panel"], [1, "fa-solid", "fa-sliders"], [1, "settings-list"], ["Size", "compact", "Icon", "fa-solid fa-sliders", "Title", "No custom settings configured"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fts-config"], ["Variant", "warning", "Size", "compact", "Title", "Full-text search is not enabled for this entity"], [3, "FormConfigChange", "FormConfig", "ParentSchemaName", "Candidates", "EditMode"], [1, "panel-title-row"], [1, "panel-title-actions"], [1, "panel-error"], [3, "CloneConfigChange", "Provider", "Entity", "CloneConfig", "EditMode"], [1, "fa-solid", "fa-box"], [1, "config-row"], ["title", "Navigate to parent entity", 1, "link"], [1, "muted"], [1, "fa-solid", "fa-circle-check", 2, "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-circle-minus", 2, "color", "var(--mj-text-muted)"], ["title", "Navigate to parent entity", 1, "link", 3, "click"], [1, "link", 3, "click"], [1, "fa-solid", "fa-circle-check", 2, "color", "#059669"], [1, "setting-item"], [1, "setting-name"], [1, "setting-value-json"], [1, "setting-value"], [1, "setting-comment"], ["language", "json", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], [1, "config-value", "enabled"], [1, "fa-solid", "fa-circle-check"], [1, "config-value", "code"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], ["type", "button", "mjButton", "", "Variant", "primary", "Size", "sm", 3, "click", "disabled"], [1, "fa-solid", "fa-floppy-disk"], ["type", "button", "mjButton", "", "Variant", "outline", "Size", "sm", 3, "click", "disabled"], [1, "detail-section"], [1, "detail-field-db-name"], [1, "field-description"], [1, "detail-grid"], [1, "detail-item"], [1, "label"], [1, "value", "code"], [1, "value"], [1, "detail-section", "isa-source-section"], ["title", "Navigate to source entity", 1, "value", "link", 3, "click"], [1, "value", "link", 3, "click"], [1, "value-list"], [1, "value-item"], [1, "value-code"], [1, "value-display"], [1, "explorer-loading"], ["Variant", "error", "Icon", "fa-solid fa-triangle-exclamation", "Title", "Failed to load entity", 1, "explorer-fill", 3, "Message"], ["Icon", "fa-solid fa-database", "Title", "Entity metadata not available", 1, "explorer-fill"], ["text", "Loading entity..."]], template: function MJEntityFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
4153
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Template, 69, 38, "div", 0)(1, MJEntityFormComponentExtended_Conditional_1_Template, 3, 3);
|
|
4119
4154
|
} if (rf & 2) {
|
|
4120
4155
|
i0.ɵɵconditional(!ctx.isExplorerLoading && ctx.entity ? 0 : 1);
|
|
4121
|
-
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJAccordionBodyDirective, i4.CodeEditorComponent, i5.LoadingComponent, i6.ERDCompositeComponent, i7.EntityViewerComponent, i8.EntityFormChromeEditorComponent, i9.EntityCloneConfigEditorComponent, i1.SlicePipe, i1.DecimalPipe, i1.DatePipe], styles: ["\n\n\n\n\n\n[_nghost-%COMP%] {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n.explorer-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-on-primary);\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info[_ngcontent-%COMP%] {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n\n\n.explorer-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n\n.nav-rail[_ngcontent-%COMP%] {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.nav-item.active[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n\n\n\n\n.main-canvas[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n.section[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-muted);\n}\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n\n.depth-selector[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n\n.fields-list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n.col-seq[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.seq-num[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row[_ngcontent-%COMP%]:hover .seq-num[_ngcontent-%COMP%], \n.list-row.selected[_ngcontent-%COMP%] .seq-num[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n.col-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon[_ngcontent-%COMP%] {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.display-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required[_ngcontent-%COMP%] {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.col-desc[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.desc-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n\n\n\n\n.stats-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover .stat-card-action[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action[_ngcontent-%COMP%] {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-main[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n\n.info-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n\n.capability-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n\n\n\n\n.fields-content[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n\n\n\n\n\n\n\n.group-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count[_ngcontent-%COMP%] {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content[_ngcontent-%COMP%] {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.field-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.field-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.field-related[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk[_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.badge.encrypted[_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\n\n\n\n.relationships-graph[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-erd[_ngcontent-%COMP%], \n.relationships-graph[_ngcontent-%COMP%] mj-erd-composite[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n\n.relationships-graph[_ngcontent-%COMP%] .erd-splitter[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-details[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.relationship-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.relationship-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.rel-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.rel-entity[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.rel-field[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type[_ngcontent-%COMP%], \n.rel-display-type[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n.relationship-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%] {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.rel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing[_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.rel-icon.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.field-chip[_ngcontent-%COMP%] .bundle-icon[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n\n\n\n\n.permissions-matrix[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table[_ngcontent-%COMP%] th.center[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td.center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.matrix-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.permission-icon.granted[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.permission-icon.denied[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.rls-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n\n.api-capabilities[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n.lineage-diagram[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.lineage-stage[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.lineage-arrow[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.tracking-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config[_ngcontent-%COMP%] .helper-text[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n\n\n\n\n.history-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.config-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.info-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n\n\n.settings-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json[_ngcontent-%COMP%] {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%] {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.value-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display[_ngcontent-%COMP%] {\n color: var(--text-primary);\n}\n\n\n\n\n\n.explorer-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n\n.explorer-fill[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n\n\n\n.isa-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n\n.isa-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n opacity: 0.7;\n}\n\n\n.isa-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row[_ngcontent-%COMP%] .code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n\n.isa-chain[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-chain-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n\n.isa-children[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-child-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n.isa-source-section[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n\n.isa-settings-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n\n.isa-field-inspector[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n\n\n\n\n\n.isa-inspector-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group[_ngcontent-%COMP%] {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n\n.isa-siblings[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-sibling-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n\n.data-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n\n.organic-key-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover, \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n\n.panel-title-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mj-space-2);\n margin-bottom: var(--mj-space-4);\n}\n\n.panel-title-row[_ngcontent-%COMP%] .panel-title[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n\n.panel-title-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n}\n\n.panel-error[_ngcontent-%COMP%] {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error);\n}", ".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}"], changeDetection: 0 }); }
|
|
4156
|
+
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.MJEmptyStateComponent, i3.MJSectionPickerComponent, i3.MJButtonDirective, i3.MJAccordionPanelComponent, i3.MJAccordionTitleDirective, i3.MJAccordionBodyDirective, i4.CodeEditorComponent, i5.LoadingComponent, i6.ERDCompositeComponent, i7.EntityViewerComponent, i8.EntityFormChromeEditorComponent, i9.EntityCloneConfigEditorComponent, i1.SlicePipe, i1.DecimalPipe, i1.DatePipe], styles: ["\n\n\n\n\n\n[_nghost-%COMP%] {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n.explorer-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-on-primary);\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info[_ngcontent-%COMP%] {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n\n\n.explorer-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n\n.phone-section-picker[_ngcontent-%COMP%] {\n display: none;\n}\n\n.nav-rail[_ngcontent-%COMP%] {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.nav-item.active[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n\n\n\n\n.main-canvas[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n.section[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-muted);\n}\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n\n.depth-selector[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n\n.fields-list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n.col-seq[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.seq-num[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row[_ngcontent-%COMP%]:hover .seq-num[_ngcontent-%COMP%], \n.list-row.selected[_ngcontent-%COMP%] .seq-num[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n.col-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon[_ngcontent-%COMP%] {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.display-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required[_ngcontent-%COMP%] {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.col-desc[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.desc-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n\n\n\n\n.stats-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover .stat-card-action[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action[_ngcontent-%COMP%] {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-main[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n\n.info-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n\n.capability-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n\n\n\n\n.fields-content[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n\n\n\n\n\n\n\n.group-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count[_ngcontent-%COMP%] {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content[_ngcontent-%COMP%] {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.field-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.field-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.field-related[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk[_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.badge.encrypted[_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\n\n\n\n.relationships-graph[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-erd[_ngcontent-%COMP%], \n.relationships-graph[_ngcontent-%COMP%] mj-erd-composite[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n\n.relationships-graph[_ngcontent-%COMP%] .erd-splitter[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-details[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.relationship-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.relationship-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.rel-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.rel-entity[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.rel-field[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type[_ngcontent-%COMP%], \n.rel-display-type[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n.relationship-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%] {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.rel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing[_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.rel-icon.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.field-chip[_ngcontent-%COMP%] .bundle-icon[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n\n\n\n\n.permissions-matrix[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table[_ngcontent-%COMP%] th.center[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td.center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.matrix-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.permission-icon.granted[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.permission-icon.denied[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.rls-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n\n.api-capabilities[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n.lineage-diagram[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.lineage-stage[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.lineage-arrow[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.tracking-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config[_ngcontent-%COMP%] .helper-text[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n\n\n\n\n.history-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.config-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.info-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n\n\n.settings-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json[_ngcontent-%COMP%] {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%] {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.value-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display[_ngcontent-%COMP%] {\n color: var(--text-primary);\n}\n\n\n\n\n\n.explorer-loading[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n\n.explorer-fill[_ngcontent-%COMP%] {\n height: 100%;\n}\n\n\n\n\n\n\n.isa-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n\n.isa-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n opacity: 0.7;\n}\n\n\n.isa-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row[_ngcontent-%COMP%] .code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n\n.isa-chain[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-chain-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n\n.isa-children[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-child-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n.isa-source-section[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n\n.isa-settings-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n\n.isa-field-inspector[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n\n\n\n\n\n.isa-inspector-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group[_ngcontent-%COMP%] {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n\n.isa-siblings[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-sibling-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n\n.data-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n\n.organic-key-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover, \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n\n.panel-title-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mj-space-2);\n margin-bottom: var(--mj-space-4);\n}\n\n.panel-title-row[_ngcontent-%COMP%] .panel-title[_ngcontent-%COMP%] {\n margin-bottom: 0;\n}\n\n.panel-title-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: var(--mj-space-2);\n}\n\n.panel-error[_ngcontent-%COMP%] {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error);\n}\n\n\n\n@media (max-width: 768px) {\n .explorer-body[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n\n .nav-rail[_ngcontent-%COMP%] {\n display: none;\n }\n\n .phone-section-picker[_ngcontent-%COMP%] {\n display: block;\n flex-shrink: 0;\n padding: 4px 8px;\n border-bottom: 1px solid var(--border-color);\n background: var(--bg-primary);\n }\n\n .explorer-header[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n gap: 12px;\n padding: 12px 16px;\n }\n\n .entity-identity[_ngcontent-%COMP%] {\n flex-basis: 100%;\n }\n\n .entity-subtitle[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n\n .entity-description[_ngcontent-%COMP%] {\n flex-basis: 100%;\n white-space: normal;\n }\n\n .header-stats[_ngcontent-%COMP%] {\n flex-basis: 100%;\n flex-wrap: wrap;\n }\n\n .stat-item[_ngcontent-%COMP%] {\n flex: 1 1 40%;\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.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}"], changeDetection: 0 }); }
|
|
4122
4157
|
};
|
|
4123
4158
|
MJEntityFormComponentExtended = __decorate([
|
|
4124
4159
|
RegisterClass(BaseFormComponent, 'MJ: Entities')
|
|
@@ -4126,7 +4161,7 @@ MJEntityFormComponentExtended = __decorate([
|
|
|
4126
4161
|
export { MJEntityFormComponentExtended };
|
|
4127
4162
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJEntityFormComponentExtended, [{
|
|
4128
4163
|
type: Component,
|
|
4129
|
-
args: [{ standalone: false, selector: 'mj-entity-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity \u2014 read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isaFieldInspectorExpanded\" (ExpandedChange)=\"isaFieldInspectorExpanded = $event\">\n <ng-template mjAccordionTitle>\n <span>Field Source Inspector</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isFieldGroupExpanded(group.id)\"\n (ExpandedChange)=\"onFieldGroupExpandedChange(group.id, $event)\">\n <ng-template mjAccordionTitle>\n <i [class]=\"group.icon\" class=\"group-icon\"></i>\n <span class=\"group-label\">{{ group.label }}</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.fields.length }}</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">\u2014</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '\u2014' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Title=\"No fields match your search\" />\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-from-bracket\" Title=\"No outgoing relationships\" />\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-to-bracket\" Title=\"No incoming relationships\" />\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- ORGANIC KEYS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'organicKeys') {\n <section class=\"section organic-keys-section\">\n <div class=\"section-content\">\n @if (organicKeysOutgoing.length === 0 && organicKeysIncoming.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-fingerprint\"\n Title=\"No Organic Keys\"\n Message=\"This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints.\" />\n } @else {\n <!-- Outgoing: Keys defined on THIS entity -->\n @if (organicKeysOutgoing.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (Matches from this entity)\n <span class=\"group-count\">{{ organicKeysOutgoing.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (okGroup of organicKeysOutgoing; track okGroup.OrganicKey.ID) {\n <div class=\"organic-key-card\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <i class=\"fa-solid fa-fingerprint organic-key-icon\"></i>\n {{ okGroup.OrganicKey.Name }}\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"organic-key-badge strategy\">{{ okGroup.OrganicKey.NormalizationStrategy }}</span>\n <span class=\"organic-key-badge fields\">{{ okGroup.OrganicKey.MatchFieldNames }}</span>\n </div>\n </div>\n @if (okGroup.OrganicKey.Description) {\n <p class=\"organic-key-description\">{{ okGroup.OrganicKey.Description }}</p>\n }\n <div class=\"organic-key-targets\">\n @for (target of okGroup.RelatedEntities; track target.Info.ID) {\n <div class=\"organic-key-target clickable\" (click)=\"NavigateToEntityByID(target.Info.RelatedEntityID)\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"target-main\">\n <div class=\"target-header\">\n <i [class]=\"target.EntityIcon\" class=\"target-entity-icon\"></i>\n <span class=\"target-entity-name\">{{ target.Info.DisplayName || target.EntityName }}</span>\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"target-match-detail\">\n @if (target.Info.IsDirectMatch) {\n <span class=\"match-type-badge direct\">Direct</span>\n <span class=\"match-fields\">{{ okGroup.OrganicKey.MatchFieldNames }} \u2192 {{ target.Info.RelatedEntityFieldNames }}</span>\n } @else {\n <span class=\"match-type-badge transitive\">Transitive</span>\n <span class=\"match-fields\" [title]=\"target.Info.TransitiveObjectName || ''\">via {{ target.Info.TransitiveObjectName }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Incoming: Keys on OTHER entities targeting THIS entity -->\n @if (organicKeysIncoming.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Other entities matching to this one)\n <span class=\"group-count\">{{ organicKeysIncoming.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (incoming of organicKeysIncoming; track incoming.OrganicKey.ID + incoming.SourceEntityName) {\n <div class=\"organic-key-card incoming clickable\" (click)=\"NavigateToEntityByID(incoming.SourceEntityID)\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <i [class]=\"incoming.SourceEntityIcon\" class=\"target-entity-icon\"></i>\n {{ incoming.SourceEntityName }}\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"match-type-badge\" [class.direct]=\"incoming.MatchType === 'Direct'\" [class.transitive]=\"incoming.MatchType === 'Transitive'\">{{ incoming.MatchType }}</span>\n </div>\n </div>\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Key:</span>\n <span class=\"detail-value\">{{ incoming.OrganicKey.Name }}</span>\n <span class=\"organic-key-badge fields\">{{ incoming.OrganicKey.MatchFieldNames }}</span>\n <span class=\"organic-key-badge strategy\">{{ incoming.OrganicKey.NormalizationStrategy }}</span>\n </div>\n @if (incoming.RelatedEntityConfig.IsDirectMatch) {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Matched via:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.RelatedEntityFieldNames }}</span>\n </div>\n } @else {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Bridge:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.TransitiveObjectName }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-shield-halved\" Title=\"No permissions configured\" />\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [Entity]=\"entity\"\n [Provider]=\"Provider\"\n (RecordOpened)=\"OnRecordOpened($event)\"\n (CreateRecordRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-map-location-dot\"></i>\n Geocoding\n </h3>\n <p class=\"helper-text\">When enabled, CodeGen auto-detects geo fields and generates map view support</p>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.SupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.SupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Supports Geocoding</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AutoUpdateSupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AutoUpdateSupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Auto-Detect Geocoding</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced \u2014 a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-sliders\" Title=\"No custom settings configured\" />\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <mj-empty-state Variant=\"warning\" Size=\"compact\" Title=\"Full-text search is not enabled for this entity\" />\n }\n </div>\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-table-columns\"></i>\n Form chrome\n </h3>\n <mj-entity-form-chrome-editor\n [FormConfig]=\"FormChromeConfig\"\n [ParentSchemaName]=\"entity.SchemaName\"\n [Candidates]=\"FormChromeCandidates\"\n [EditMode]=\"EditMode\"\n (FormConfigChange)=\"OnFormChromeConfigChange($event)\">\n </mj-entity-form-chrome-editor>\n </div>\n <div class=\"settings-panel\">\n <div class=\"panel-title-row\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clone\"></i>\n Record cloning\n </h3>\n <!-- This form has no toolbar, so the panel carries its own edit controls. -->\n @if (UserCanEdit) {\n <div class=\"panel-title-actions\">\n @if (!EditMode) {\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" (click)=\"StartEditMode()\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </button>\n } @else {\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" [disabled]=\"IsSavingCloneConfig\" (click)=\"SaveCloneConfig()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" [disabled]=\"IsSavingCloneConfig\" (click)=\"CancelEdit()\">Cancel</button>\n }\n </div>\n }\n </div>\n @if (CloneConfigSaveError) {\n <p class=\"panel-error\">{{ CloneConfigSaveError }}</p>\n }\n <mj-entity-clone-config-editor\n [Provider]=\"ProviderToUse\"\n [Entity]=\"entity\"\n [CloneConfig]=\"CloneConfig\"\n [EditMode]=\"EditMode\"\n (CloneConfigChange)=\"OnCloneConfigChange($event)\">\n </mj-entity-clone-config-editor>\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <mj-empty-state\n class=\"explorer-fill\"\n Variant=\"error\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n Title=\"Failed to load entity\"\n [Message]=\"explorerError\" />\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <mj-empty-state\n class=\"explorer-fill\"\n Icon=\"fa-solid fa-database\"\n Title=\"Entity metadata not available\" />\n }\n}\n\n<!-- Loading / Error State -->\n", styles: ["/* ============================================================\n ENTITY EXPLORER FORM - MAIN STYLES\n A world-class exploration-focused entity intelligence hub\n ============================================================ */\n\n/* CSS Variables */\n:host {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-on-primary);\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item:hover i {\n transform: scale(1.1);\n}\n\n.nav-item.active {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active i {\n transform: scale(1.05);\n}\n\n.nav-item.active::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n/* ============================================================\n MAIN CANVAS\n ============================================================ */\n\n.main-canvas {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n/* Depth Selector */\n.depth-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n/* Header Controls (view mode + expand/collapse) */\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls {\n display: flex;\n gap: 4px;\n}\n\n.control-btn {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Fields List View - Modern Design */\n.fields-list-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n/* Column-specific styling */\n.col-seq {\n text-align: center;\n}\n\n.seq-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row:hover .seq-num,\n.list-row.selected .seq-num {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n.col-name {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name {\n min-width: 0;\n}\n\n.display-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted {\n color: var(--text-muted);\n}\n\n.required-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.flag-badge.encrypted {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.col-desc {\n min-width: 0;\n}\n\n.desc-text {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n/* ============================================================\n OVERVIEW SECTION\n ============================================================ */\n\n.stats-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable {\n cursor: pointer;\n}\n\n.stat-card.clickable:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable:hover .stat-card-action {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action i {\n font-size: 14px;\n}\n\n.stat-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header i {\n font-size: 14px;\n}\n\n.stat-card-body .stat-main {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body .stat-details {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n/* Info Panels */\n.info-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title i {\n color: var(--accent-color);\n}\n\n/* Capability Tags */\n.capability-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n/* Field-group disclosure migrated to <mj-accordion-panel>. The bespoke\n .field-group separators, .group-header bar + .group-header:hover, and the\n .expand-icon chevron are now owned by the accordion and were removed. The\n title-slot content styling (.group-icon / .group-label) is kept below. The\n field-group count now uses the shared .mj-accordion-badge; .group-count below\n is retained only for the non-accordion relationship / organic-key titles. */\n\n.group-icon {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item:last-child {\n border-bottom: none;\n}\n\n.field-item:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info {\n flex: 1;\n min-width: 0;\n}\n\n.field-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable {\n color: var(--danger-color);\n}\n\n.field-related {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related:hover {\n text-decoration: underline;\n}\n\n.field-badges {\n display: flex;\n gap: 4px;\n}\n\n.badge {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph mj-entity-details {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder p {\n margin: 0;\n}\n\n.graph-placeholder .hint {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title i {\n color: var(--accent-color);\n}\n\n.relationship-items {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item:last-child {\n border-bottom: none;\n}\n\n.relationship-item:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden {\n display: none;\n}\n\n.rel-icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info {\n flex: 1;\n}\n\n.rel-entity {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity:hover {\n text-decoration: underline;\n}\n\n.rel-field {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type,\n.rel-display-type {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle {\n color: var(--success-color);\n}\n\n/* Grouped relationship styles */\n.relationship-group-title .group-count {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped {\n padding: 8px 0;\n}\n\n.relationship-item-grouped {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped:last-child {\n border-bottom: none;\n}\n\n.rel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.field-chip.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming:hover {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.field-chip .bundle-icon {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n/* ============================================================\n PERMISSIONS SECTION\n ============================================================ */\n\n.permissions-matrix {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table th,\n.matrix-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table th {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table th.center,\n.matrix-table td.center {\n text-align: center;\n}\n\n.matrix-table tbody tr:hover {\n background: var(--bg-secondary);\n}\n\n.role-name {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon {\n font-size: 14px;\n}\n\n.permission-icon.granted {\n color: var(--success-color);\n}\n\n.permission-icon.denied {\n color: var(--text-muted);\n}\n\n.rls-info {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n/* API Capabilities */\n.api-capabilities {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item i {\n font-size: 12px;\n}\n\n.capability-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node .entity-box i {\n font-size: 24px;\n}\n\n.tracking-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config .helper-text {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item .label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item .value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item .value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item .value.link {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item .value.link:hover {\n text-decoration: underline;\n}\n\n.value-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display {\n color: var(--text-primary);\n}\n\n/* ============================================================\n LOADING / ERROR STATES\n ============================================================ */\n\n.explorer-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n/* Full-pane empty/error placeholders (rule 6b flex-fill). */\n.explorer-fill {\n height: 100%;\n}\n\n/* ============================================================\n IS-A TYPE HIERARCHY & VIRTUAL ENTITY STYLES\n ============================================================ */\n\n/* Badge variants for header */\n.isa-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n/* Breadcrumb under title */\n.isa-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb i {\n font-size: 11px;\n opacity: 0.7;\n}\n\n/* IS-A Panel (overview section) */\n.isa-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row .code {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n/* Inheritance chain */\n.isa-chain {\n padding: 8px 0;\n}\n\n.isa-chain-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.isa-node.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n/* Child types list */\n.isa-children {\n padding: 8px 0;\n}\n\n.isa-child-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n/* Clickable elements */\n.clickable {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited i {\n font-size: 9px;\n}\n\n/* IS-A source section in field detail panel */\n.isa-source-section {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section h5 i {\n margin-right: 4px;\n}\n\n/* IS-A settings panel */\n.isa-settings-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel .link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted);\n}\n\n/* IS-A Field Inspector */\n.isa-field-inspector {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n/* Field Source Inspector disclosure migrated to <mj-accordion-panel>; the\n bespoke .isa-chain-label header (with chevron) is now the accordion header\n and its layout rule was removed. The .isa-field-inspector wrapper is kept\n for its top-border separator from the inheritance chain above. */\n\n.isa-inspector-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n/* Sibling chips */\n.isa-siblings {\n padding: 8px 0;\n}\n\n.isa-sibling-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count i {\n font-size: 10px;\n}\n\n/* ============================================================\n DATA SECTION\n ============================================================ */\n.data-section {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* ============================================================\n ORGANIC KEYS SECTION\n ============================================================ */\n\n.organic-key-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable,\n.organic-key-card.clickable {\n cursor: pointer;\n}\n\n.organic-key-target.clickable:hover,\n.organic-key-card.clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable:hover .target-nav-icon,\n.organic-key-card.clickable:hover .target-nav-icon {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n\n.panel-title-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mj-space-2);\n margin-bottom: var(--mj-space-4);\n}\n\n.panel-title-row .panel-title {\n margin-bottom: 0;\n}\n\n.panel-title-actions {\n display: flex;\n gap: var(--mj-space-2);\n}\n\n.panel-error {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error);\n}\n", ".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"] }]
|
|
4164
|
+
args: [{ standalone: false, selector: 'mj-entity-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Phone: the rail becomes one button that opens the Sections sheet -->\n <mj-section-picker class=\"phone-section-picker\"\n [Items]=\"SectionPickerItems\"\n [ActiveKey]=\"ActiveSection\"\n (ActiveKeyChange)=\"OnSectionPicked($event)\"></mj-section-picker>\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity \u2014 read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isaFieldInspectorExpanded\" (ExpandedChange)=\"isaFieldInspectorExpanded = $event\">\n <ng-template mjAccordionTitle>\n <span>Field Source Inspector</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <mj-accordion-panel Size=\"sm\" [FlushBody]=\"true\"\n [Expanded]=\"isFieldGroupExpanded(group.id)\"\n (ExpandedChange)=\"onFieldGroupExpandedChange(group.id, $event)\">\n <ng-template mjAccordionTitle>\n <i [class]=\"group.icon\" class=\"group-icon\"></i>\n <span class=\"group-label\">{{ group.label }}</span>\n <span class=\"mj-accordion-badge mj-accordion-badge--right\">{{ group.fields.length }}</span>\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n </ng-template>\n </mj-accordion-panel>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">\u2014</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '\u2014' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <mj-empty-state\n Variant=\"no-results\"\n Size=\"compact\"\n Title=\"No fields match your search\" />\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-from-bracket\" Title=\"No outgoing relationships\" />\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-arrow-right-to-bracket\" Title=\"No incoming relationships\" />\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- ORGANIC KEYS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'organicKeys') {\n <section class=\"section organic-keys-section\">\n <div class=\"section-content\">\n @if (organicKeysOutgoing.length === 0 && organicKeysIncoming.length === 0) {\n <mj-empty-state\n Icon=\"fa-solid fa-fingerprint\"\n Title=\"No Organic Keys\"\n Message=\"This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints.\" />\n } @else {\n <!-- Outgoing: Keys defined on THIS entity -->\n @if (organicKeysOutgoing.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (Matches from this entity)\n <span class=\"group-count\">{{ organicKeysOutgoing.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (okGroup of organicKeysOutgoing; track okGroup.OrganicKey.ID) {\n <div class=\"organic-key-card\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <i class=\"fa-solid fa-fingerprint organic-key-icon\"></i>\n {{ okGroup.OrganicKey.Name }}\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"organic-key-badge strategy\">{{ okGroup.OrganicKey.NormalizationStrategy }}</span>\n <span class=\"organic-key-badge fields\">{{ okGroup.OrganicKey.MatchFieldNames }}</span>\n </div>\n </div>\n @if (okGroup.OrganicKey.Description) {\n <p class=\"organic-key-description\">{{ okGroup.OrganicKey.Description }}</p>\n }\n <div class=\"organic-key-targets\">\n @for (target of okGroup.RelatedEntities; track target.Info.ID) {\n <div class=\"organic-key-target clickable\" (click)=\"NavigateToEntityByID(target.Info.RelatedEntityID)\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"target-main\">\n <div class=\"target-header\">\n <i [class]=\"target.EntityIcon\" class=\"target-entity-icon\"></i>\n <span class=\"target-entity-name\">{{ target.Info.DisplayName || target.EntityName }}</span>\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"target-match-detail\">\n @if (target.Info.IsDirectMatch) {\n <span class=\"match-type-badge direct\">Direct</span>\n <span class=\"match-fields\">{{ okGroup.OrganicKey.MatchFieldNames }} \u2192 {{ target.Info.RelatedEntityFieldNames }}</span>\n } @else {\n <span class=\"match-type-badge transitive\">Transitive</span>\n <span class=\"match-fields\" [title]=\"target.Info.TransitiveObjectName || ''\">via {{ target.Info.TransitiveObjectName }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Incoming: Keys on OTHER entities targeting THIS entity -->\n @if (organicKeysIncoming.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Other entities matching to this one)\n <span class=\"group-count\">{{ organicKeysIncoming.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (incoming of organicKeysIncoming; track incoming.OrganicKey.ID + incoming.SourceEntityName) {\n <div class=\"organic-key-card incoming clickable\" (click)=\"NavigateToEntityByID(incoming.SourceEntityID)\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <i [class]=\"incoming.SourceEntityIcon\" class=\"target-entity-icon\"></i>\n {{ incoming.SourceEntityName }}\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"match-type-badge\" [class.direct]=\"incoming.MatchType === 'Direct'\" [class.transitive]=\"incoming.MatchType === 'Transitive'\">{{ incoming.MatchType }}</span>\n </div>\n </div>\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Key:</span>\n <span class=\"detail-value\">{{ incoming.OrganicKey.Name }}</span>\n <span class=\"organic-key-badge fields\">{{ incoming.OrganicKey.MatchFieldNames }}</span>\n <span class=\"organic-key-badge strategy\">{{ incoming.OrganicKey.NormalizationStrategy }}</span>\n </div>\n @if (incoming.RelatedEntityConfig.IsDirectMatch) {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Matched via:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.RelatedEntityFieldNames }}</span>\n </div>\n } @else {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Bridge:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.TransitiveObjectName }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-shield-halved\" Title=\"No permissions configured\" />\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [Entity]=\"entity\"\n [Provider]=\"Provider\"\n (RecordOpened)=\"OnRecordOpened($event)\"\n (CreateRecordRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-map-location-dot\"></i>\n Geocoding\n </h3>\n <p class=\"helper-text\">When enabled, CodeGen auto-detects geo fields and generates map view support</p>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.SupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.SupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Supports Geocoding</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AutoUpdateSupportsGeoCoding\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AutoUpdateSupportsGeoCoding ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Auto-Detect Geocoding</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced \u2014 a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <mj-empty-state Size=\"compact\" Icon=\"fa-solid fa-sliders\" Title=\"No custom settings configured\" />\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <mj-empty-state Variant=\"warning\" Size=\"compact\" Title=\"Full-text search is not enabled for this entity\" />\n }\n </div>\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-table-columns\"></i>\n Form chrome\n </h3>\n <mj-entity-form-chrome-editor\n [FormConfig]=\"FormChromeConfig\"\n [ParentSchemaName]=\"entity.SchemaName\"\n [Candidates]=\"FormChromeCandidates\"\n [EditMode]=\"EditMode\"\n (FormConfigChange)=\"OnFormChromeConfigChange($event)\">\n </mj-entity-form-chrome-editor>\n </div>\n <div class=\"settings-panel\">\n <div class=\"panel-title-row\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clone\"></i>\n Record cloning\n </h3>\n <!-- This form has no toolbar, so the panel carries its own edit controls. -->\n @if (UserCanEdit) {\n <div class=\"panel-title-actions\">\n @if (!EditMode) {\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" (click)=\"StartEditMode()\">\n <i class=\"fa-solid fa-pen-to-square\"></i> Edit\n </button>\n } @else {\n <button type=\"button\" mjButton Variant=\"primary\" Size=\"sm\" [disabled]=\"IsSavingCloneConfig\" (click)=\"SaveCloneConfig()\">\n <i class=\"fa-solid fa-floppy-disk\"></i> Save\n </button>\n <button type=\"button\" mjButton Variant=\"outline\" Size=\"sm\" [disabled]=\"IsSavingCloneConfig\" (click)=\"CancelEdit()\">Cancel</button>\n }\n </div>\n }\n </div>\n @if (CloneConfigSaveError) {\n <p class=\"panel-error\">{{ CloneConfigSaveError }}</p>\n }\n <mj-entity-clone-config-editor\n [Provider]=\"ProviderToUse\"\n [Entity]=\"entity\"\n [CloneConfig]=\"CloneConfig\"\n [EditMode]=\"EditMode\"\n (CloneConfigChange)=\"OnCloneConfigChange($event)\">\n </mj-entity-clone-config-editor>\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <mj-empty-state\n class=\"explorer-fill\"\n Variant=\"error\"\n Icon=\"fa-solid fa-triangle-exclamation\"\n Title=\"Failed to load entity\"\n [Message]=\"explorerError\" />\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <mj-empty-state\n class=\"explorer-fill\"\n Icon=\"fa-solid fa-database\"\n Title=\"Entity metadata not available\" />\n }\n}\n\n<!-- Loading / Error State -->\n", styles: ["/* ============================================================\n ENTITY EXPLORER FORM - MAIN STYLES\n A world-class exploration-focused entity intelligence hub\n ============================================================ */\n\n/* CSS Variables */\n:host {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-brand-on-primary);\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.phone-section-picker {\n display: none;\n}\n\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item:hover i {\n transform: scale(1.1);\n}\n\n.nav-item.active {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active i {\n transform: scale(1.05);\n}\n\n.nav-item.active::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n/* ============================================================\n MAIN CANVAS\n ============================================================ */\n\n.main-canvas {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n/* Depth Selector */\n.depth-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n/* Header Controls (view mode + expand/collapse) */\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls {\n display: flex;\n gap: 4px;\n}\n\n.control-btn {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Fields List View - Modern Design */\n.fields-list-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n/* Column-specific styling */\n.col-seq {\n text-align: center;\n}\n\n.seq-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row:hover .seq-num,\n.list-row.selected .seq-num {\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n}\n\n.col-name {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name {\n min-width: 0;\n}\n\n.display-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted {\n color: var(--text-muted);\n}\n\n.required-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.flag-badge.encrypted {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.col-desc {\n min-width: 0;\n}\n\n.desc-text {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n/* ============================================================\n OVERVIEW SECTION\n ============================================================ */\n\n.stats-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable {\n cursor: pointer;\n}\n\n.stat-card.clickable:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable:hover .stat-card-action {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action i {\n font-size: 14px;\n}\n\n.stat-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header i {\n font-size: 14px;\n}\n\n.stat-card-body .stat-main {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body .stat-details {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n/* Info Panels */\n.info-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title i {\n color: var(--accent-color);\n}\n\n/* Capability Tags */\n.capability-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n/* Field-group disclosure migrated to <mj-accordion-panel>. The bespoke\n .field-group separators, .group-header bar + .group-header:hover, and the\n .expand-icon chevron are now owned by the accordion and were removed. The\n title-slot content styling (.group-icon / .group-label) is kept below. The\n field-group count now uses the shared .mj-accordion-badge; .group-count below\n is retained only for the non-accordion relationship / organic-key titles. */\n\n.group-icon {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item:last-child {\n border-bottom: none;\n}\n\n.field-item:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info {\n flex: 1;\n min-width: 0;\n}\n\n.field-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-db-name {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable {\n color: var(--danger-color);\n}\n\n.field-related {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related:hover {\n text-decoration: underline;\n}\n\n.field-badges {\n display: flex;\n gap: 4px;\n}\n\n.badge {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph mj-entity-details {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder p {\n margin: 0;\n}\n\n.graph-placeholder .hint {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title i {\n color: var(--accent-color);\n}\n\n.relationship-items {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item:last-child {\n border-bottom: none;\n}\n\n.relationship-item:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden {\n display: none;\n}\n\n.rel-icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info {\n flex: 1;\n}\n\n.rel-entity {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity:hover {\n text-decoration: underline;\n}\n\n.rel-field {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type,\n.rel-display-type {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle {\n color: var(--success-color);\n}\n\n/* Grouped relationship styles */\n.relationship-group-title .group-count {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped {\n padding: 8px 0;\n}\n\n.relationship-item-grouped {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped:last-child {\n border-bottom: none;\n}\n\n.rel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.field-chip.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming:hover {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n}\n\n.field-chip .bundle-icon {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n/* ============================================================\n PERMISSIONS SECTION\n ============================================================ */\n\n.permissions-matrix {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table th,\n.matrix-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table th {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table th.center,\n.matrix-table td.center {\n text-align: center;\n}\n\n.matrix-table tbody tr:hover {\n background: var(--bg-secondary);\n}\n\n.role-name {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon {\n font-size: 14px;\n}\n\n.permission-icon.granted {\n color: var(--success-color);\n}\n\n.permission-icon.denied {\n color: var(--text-muted);\n}\n\n.rls-info {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n/* API Capabilities */\n.api-capabilities {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item i {\n font-size: 12px;\n}\n\n.capability-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: var(--mj-brand-on-primary);\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node .entity-box i {\n font-size: 24px;\n}\n\n.tracking-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.tracking-config .helper-text {\n font-size: 12px;\n color: var(--text-muted);\n margin: -8px 0 12px 0;\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item .label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item .value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item .value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item .value.link {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item .value.link:hover {\n text-decoration: underline;\n}\n\n.value-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display {\n color: var(--text-primary);\n}\n\n/* ============================================================\n LOADING / ERROR STATES\n ============================================================ */\n\n.explorer-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n/* Full-pane empty/error placeholders (rule 6b flex-fill). */\n.explorer-fill {\n height: 100%;\n}\n\n/* ============================================================\n IS-A TYPE HIERARCHY & VIRTUAL ENTITY STYLES\n ============================================================ */\n\n/* Badge variants for header */\n.isa-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n/* Breadcrumb under title */\n.isa-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb i {\n font-size: 11px;\n opacity: 0.7;\n}\n\n/* IS-A Panel (overview section) */\n.isa-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row .code {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n/* Inheritance chain */\n.isa-chain {\n padding: 8px 0;\n}\n\n.isa-chain-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current {\n background: var(--mj-brand-primary);\n color: var(--mj-brand-on-primary);\n}\n\n.isa-node.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n/* Child types list */\n.isa-children {\n padding: 8px 0;\n}\n\n.isa-child-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n/* Clickable elements */\n.clickable {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited i {\n font-size: 9px;\n}\n\n/* IS-A source section in field detail panel */\n.isa-source-section {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section h5 i {\n margin-right: 4px;\n}\n\n/* IS-A settings panel */\n.isa-settings-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel .link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted);\n}\n\n/* IS-A Field Inspector */\n.isa-field-inspector {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n/* Field Source Inspector disclosure migrated to <mj-accordion-panel>; the\n bespoke .isa-chain-label header (with chevron) is now the accordion header\n and its layout rule was removed. The .isa-field-inspector wrapper is kept\n for its top-border separator from the inheritance chain above. */\n\n.isa-inspector-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n/* Sibling chips */\n.isa-siblings {\n padding: 8px 0;\n}\n\n.isa-sibling-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count i {\n font-size: 10px;\n}\n\n/* ============================================================\n DATA SECTION\n ============================================================ */\n.data-section {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* ============================================================\n ORGANIC KEYS SECTION\n ============================================================ */\n\n.organic-key-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable,\n.organic-key-card.clickable {\n cursor: pointer;\n}\n\n.organic-key-target.clickable:hover,\n.organic-key-card.clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable:hover .target-nav-icon,\n.organic-key-card.clickable:hover .target-nav-icon {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n\n.panel-title-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: var(--mj-space-2);\n margin-bottom: var(--mj-space-4);\n}\n\n.panel-title-row .panel-title {\n margin-bottom: 0;\n}\n\n.panel-title-actions {\n display: flex;\n gap: var(--mj-space-2);\n}\n\n.panel-error {\n margin: var(--mj-space-2) 0 0;\n font-size: var(--mj-text-xs);\n color: var(--mj-status-error);\n}\n\n/* Phone (375px): the header stacks, the stat tiles wrap two per row, and the icon rail\n becomes one section-picker button above the canvas (same pattern as the standard form). */\n@media (max-width: 768px) {\n .explorer-body {\n flex-direction: column;\n }\n\n .nav-rail {\n display: none;\n }\n\n .phone-section-picker {\n display: block;\n flex-shrink: 0;\n padding: 4px 8px;\n border-bottom: 1px solid var(--border-color);\n background: var(--bg-primary);\n }\n\n .explorer-header {\n flex-wrap: wrap;\n gap: 12px;\n padding: 12px 16px;\n }\n\n .entity-identity {\n flex-basis: 100%;\n }\n\n .entity-subtitle {\n flex-wrap: wrap;\n }\n\n .entity-description {\n flex-basis: 100%;\n white-space: normal;\n }\n\n .header-stats {\n flex-basis: 100%;\n flex-wrap: wrap;\n }\n\n .stat-item {\n flex: 1 1 40%;\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.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"] }]
|
|
4130
4165
|
}], null, null); })();
|
|
4131
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber:
|
|
4166
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber: 160 }); })();
|
|
4132
4167
|
//# sourceMappingURL=entity-form.component.js.map
|