@memberjunction/ng-core-entity-forms 2.128.0 → 2.129.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/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js +3 -9
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-diagram.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/FlowAgentType/flow-agent-form-section.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/add-action-dialog.component.d.ts +1 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.js +3 -3
- package/dist/lib/custom/AIAgents/agent-permissions-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-form.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts +2 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/ai-agent-management.service.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/create-prompt-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/create-sub-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts +1 -1
- package/dist/lib/custom/AIAgents/new-agent-dialog.service.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts +1 -1
- package/dist/lib/custom/AIAgents/prompt-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-advanced-settings-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts +2 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.d.ts.map +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js +1 -1
- package/dist/lib/custom/AIAgents/sub-agent-selector-dialog.component.js.map +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.d.ts +2 -1
- 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 +1 -1
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts +2 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.d.ts.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +200 -0
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -0
- package/dist/lib/custom/Entities/entity-form.component.js +2543 -0
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -0
- package/dist/lib/custom/Templates/templates-form.component.js +3 -3
- package/dist/lib/custom/Templates/templates-form.component.js.map +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts +1 -1
- package/dist/lib/custom/ai-agent-run/ai-agent-run.component.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +4 -2
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +16 -8
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js +2 -12
- package/dist/lib/generated/Entities/AIAgentExample/aiagentexample.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js +2 -12
- package/dist/lib/generated/Entities/AIAgentNote/aiagentnote.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js +6 -16
- package/dist/lib/generated/Entities/AIAgentRunStep/aiagentrunstep.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.js +69 -0
- package/dist/lib/generated/Entities/AICredentialBinding/aicredentialbinding.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.js +27 -7
- package/dist/lib/generated/Entities/AIModelVendor/aimodelvendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.js +27 -7
- package/dist/lib/generated/Entities/AIPromptModel/aipromptmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js +34 -32
- package/dist/lib/generated/Entities/AIPromptRun/aipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js +3 -11
- package/dist/lib/generated/Entities/AIResultCache/airesultcache.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js +69 -41
- package/dist/lib/generated/Entities/AIVendor/aivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js +2 -2
- package/dist/lib/generated/Entities/CompanyIntegrationRunAPILog/companyintegrationrunapilog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js +61 -51
- package/dist/lib/generated/Entities/ConversationDetail/conversationdetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js +3 -11
- package/dist/lib/generated/Entities/ConversationDetailArtifact/conversationdetailartifact.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js +3 -11
- package/dist/lib/generated/Entities/ConversationDetailRating/conversationdetailrating.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Credential/credential.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/Credential/credential.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/Credential/credential.form.component.js +111 -0
- package/dist/lib/generated/Entities/Credential/credential.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.js +109 -0
- package/dist/lib/generated/Entities/CredentialCategory/credentialcategory.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.js +109 -0
- package/dist/lib/generated/Entities/CredentialType/credentialtype.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/DataContextItem/datacontextitem.form.component.js +2 -2
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js +8 -16
- package/dist/lib/generated/Entities/DuplicateRunDetail/duplicaterundetail.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js +3 -11
- package/dist/lib/generated/Entities/EmployeeCompanyIntegration/employeecompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js +4 -12
- package/dist/lib/generated/Entities/EmployeeRole/employeerole.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js +3 -11
- package/dist/lib/generated/Entities/EmployeeSkill/employeeskill.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.js +81 -0
- package/dist/lib/generated/Entities/EncryptionAlgorithm/encryptionalgorithm.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.js +93 -0
- package/dist/lib/generated/Entities/EncryptionKey/encryptionkey.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.d.ts +11 -0
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.js +81 -0
- package/dist/lib/generated/Entities/EncryptionKeySource/encryptionkeysource.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js +2 -12
- package/dist/lib/generated/Entities/EntityActionFilter/entityactionfilter.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js +3 -11
- package/dist/lib/generated/Entities/EntityActionInvocation/entityactioninvocation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js +3 -11
- package/dist/lib/generated/Entities/EntityActionParam/entityactionparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js +3 -11
- package/dist/lib/generated/Entities/EntityCommunicationField/entitycommunicationfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/EntityField/entityfield.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/EntityField/entityfield.form.component.js +22 -8
- package/dist/lib/generated/Entities/EntityField/entityfield.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js +2 -12
- package/dist/lib/generated/Entities/ErrorLog/errorlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Query/query.form.component.js +34 -32
- package/dist/lib/generated/Entities/Query/query.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js +8 -16
- package/dist/lib/generated/Entities/Recommendation/recommendation.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js +3 -11
- package/dist/lib/generated/Entities/RecommendationItem/recommendationitem.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js +3 -11
- package/dist/lib/generated/Entities/RecordChange/recordchange.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js +3 -11
- package/dist/lib/generated/Entities/RecordMergeDeletionLog/recordmergedeletionlog.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Report/report.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Report/report.form.component.js +17 -25
- package/dist/lib/generated/Entities/Report/report.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Task/task.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/Task/task.form.component.js +17 -25
- package/dist/lib/generated/Entities/Task/task.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js +3 -11
- package/dist/lib/generated/Entities/TemplateParam/templateparam.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/Test/test.form.component.js +2 -2
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.js +61 -29
- package/dist/lib/generated/Entities/TestRun/testrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js +24 -4
- package/dist/lib/generated/Entities/TestRunFeedback/testrunfeedback.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/TestSuite/testsuite.form.component.js +2 -2
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js +33 -9
- package/dist/lib/generated/Entities/TestSuiteRun/testsuiterun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/User/user.form.component.js +2 -2
- package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.js +2 -2
- package/dist/lib/generated/Entities/UserRecordLog/userrecordlog.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +123 -116
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +104 -76
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +27 -25
- package/dist/lib/custom/Entities/entities-form.component.d.ts +0 -10
- package/dist/lib/custom/Entities/entities-form.component.d.ts.map +0 -1
- package/dist/lib/custom/Entities/entities-form.component.js +0 -198
- package/dist/lib/custom/Entities/entities-form.component.js.map +0 -1
|
@@ -0,0 +1,2543 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Component, ChangeDetectionStrategy } from '@angular/core';
|
|
8
|
+
import { Subject } from 'rxjs';
|
|
9
|
+
import { debounceTime, takeUntil } from 'rxjs/operators';
|
|
10
|
+
import { Metadata, CompositeKey, RunView } from '@memberjunction/core';
|
|
11
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
12
|
+
import { BaseFormComponent } from '@memberjunction/ng-base-forms';
|
|
13
|
+
import { EntityFormComponent } from '../../generated/Entities/Entity/entity.form.component';
|
|
14
|
+
import * as i0 from "@angular/core";
|
|
15
|
+
import * as i1 from "@angular/common";
|
|
16
|
+
import * as i2 from "@angular/forms";
|
|
17
|
+
import * as i3 from "@memberjunction/ng-code-editor";
|
|
18
|
+
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
19
|
+
import * as i5 from "@memberjunction/ng-entity-relationship-diagram";
|
|
20
|
+
const _c0 = () => [1, 2, 3, 4, 5];
|
|
21
|
+
const _c1 = a0 => [a0];
|
|
22
|
+
const _c2 = () => [];
|
|
23
|
+
function EntityFormComponentExtended_div_0_span_16_Template(rf, ctx) { if (rf & 1) {
|
|
24
|
+
i0.ɵɵelementStart(0, "span", 43);
|
|
25
|
+
i0.ɵɵtext(1);
|
|
26
|
+
i0.ɵɵpipe(2, "slice");
|
|
27
|
+
i0.ɵɵelementEnd();
|
|
28
|
+
} if (rf & 2) {
|
|
29
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
30
|
+
i0.ɵɵproperty("title", ctx_r1.entity.Description);
|
|
31
|
+
i0.ɵɵadvance();
|
|
32
|
+
i0.ɵɵtextInterpolate2(" ", i0.ɵɵpipeBind3(2, 3, ctx_r1.entity.Description, 0, 80), "", ctx_r1.entity.Description.length > 80 ? "..." : "", " ");
|
|
33
|
+
} }
|
|
34
|
+
function EntityFormComponentExtended_div_0_span_38_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelementStart(0, "span", 18);
|
|
36
|
+
i0.ɵɵtext(1);
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
} if (rf & 2) {
|
|
39
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
40
|
+
i0.ɵɵadvance();
|
|
41
|
+
i0.ɵɵtextInterpolate(ctx_r1.formattedRowCount);
|
|
42
|
+
} }
|
|
43
|
+
function EntityFormComponentExtended_div_0_span_39_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵelementStart(0, "span", 44);
|
|
45
|
+
i0.ɵɵelement(1, "i", 45);
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
} }
|
|
48
|
+
function EntityFormComponentExtended_div_0_button_44_span_4_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
i0.ɵɵelementStart(0, "span", 49);
|
|
50
|
+
i0.ɵɵtext(1);
|
|
51
|
+
i0.ɵɵelementEnd();
|
|
52
|
+
} if (rf & 2) {
|
|
53
|
+
const item_r4 = i0.ɵɵnextContext().$implicit;
|
|
54
|
+
i0.ɵɵadvance();
|
|
55
|
+
i0.ɵɵtextInterpolate(item_r4.badge);
|
|
56
|
+
} }
|
|
57
|
+
function EntityFormComponentExtended_div_0_button_44_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
59
|
+
i0.ɵɵelementStart(0, "button", 46);
|
|
60
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_button_44_Template_button_click_0_listener() { const item_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setActiveSection(item_r4.id)); });
|
|
61
|
+
i0.ɵɵelement(1, "i");
|
|
62
|
+
i0.ɵɵelementStart(2, "span", 47);
|
|
63
|
+
i0.ɵɵtext(3);
|
|
64
|
+
i0.ɵɵelementEnd();
|
|
65
|
+
i0.ɵɵtemplate(4, EntityFormComponentExtended_div_0_button_44_span_4_Template, 2, 1, "span", 48);
|
|
66
|
+
i0.ɵɵelementEnd();
|
|
67
|
+
} if (rf & 2) {
|
|
68
|
+
const item_r4 = ctx.$implicit;
|
|
69
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
70
|
+
i0.ɵɵclassProp("active", ctx_r1.activeSection === item_r4.id);
|
|
71
|
+
i0.ɵɵproperty("title", item_r4.label);
|
|
72
|
+
i0.ɵɵadvance();
|
|
73
|
+
i0.ɵɵclassMap(item_r4.icon);
|
|
74
|
+
i0.ɵɵadvance(2);
|
|
75
|
+
i0.ɵɵtextInterpolate(item_r4.label);
|
|
76
|
+
i0.ɵɵadvance();
|
|
77
|
+
i0.ɵɵproperty("ngIf", item_r4.badge);
|
|
78
|
+
} }
|
|
79
|
+
function EntityFormComponentExtended_div_0_section_46_span_16_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
+
i0.ɵɵelementStart(0, "span");
|
|
81
|
+
i0.ɵɵtext(1);
|
|
82
|
+
i0.ɵɵelementEnd();
|
|
83
|
+
} if (rf & 2) {
|
|
84
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
85
|
+
i0.ɵɵadvance();
|
|
86
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.stats.encryptedFieldCount, " Encrypted");
|
|
87
|
+
} }
|
|
88
|
+
function EntityFormComponentExtended_div_0_section_46_span_56_Template(rf, ctx) { if (rf & 1) {
|
|
89
|
+
i0.ɵɵelementStart(0, "span");
|
|
90
|
+
i0.ɵɵtext(1);
|
|
91
|
+
i0.ɵɵpipe(2, "date");
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
} if (rf & 2) {
|
|
94
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
95
|
+
i0.ɵɵadvance();
|
|
96
|
+
i0.ɵɵtextInterpolate1("Updated ", i0.ɵɵpipeBind2(2, 1, ctx_r1.entity.RowCountRunAt, "short"), "");
|
|
97
|
+
} }
|
|
98
|
+
function EntityFormComponentExtended_div_0_section_46_span_57_Template(rf, ctx) { if (rf & 1) {
|
|
99
|
+
i0.ɵɵelementStart(0, "span");
|
|
100
|
+
i0.ɵɵtext(1, "Row count");
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
} }
|
|
103
|
+
function EntityFormComponentExtended_div_0_section_46_span_63_Template(rf, ctx) { if (rf & 1) {
|
|
104
|
+
i0.ɵɵelementStart(0, "span", 82);
|
|
105
|
+
i0.ɵɵelement(1, "i", 83);
|
|
106
|
+
i0.ɵɵtext(2);
|
|
107
|
+
i0.ɵɵelementEnd();
|
|
108
|
+
} if (rf & 2) {
|
|
109
|
+
const cap_r6 = ctx.$implicit;
|
|
110
|
+
i0.ɵɵadvance(2);
|
|
111
|
+
i0.ɵɵtextInterpolate1(" ", cap_r6, " ");
|
|
112
|
+
} }
|
|
113
|
+
function EntityFormComponentExtended_div_0_section_46_span_64_Template(rf, ctx) { if (rf & 1) {
|
|
114
|
+
i0.ɵɵelementStart(0, "span", 84);
|
|
115
|
+
i0.ɵɵelement(1, "i", 41);
|
|
116
|
+
i0.ɵɵtext(2, " No API ");
|
|
117
|
+
i0.ɵɵelementEnd();
|
|
118
|
+
} }
|
|
119
|
+
function EntityFormComponentExtended_div_0_section_46_div_90_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
i0.ɵɵelementStart(0, "div", 75)(1, "span", 76);
|
|
121
|
+
i0.ɵɵtext(2, "SP Create");
|
|
122
|
+
i0.ɵɵelementEnd();
|
|
123
|
+
i0.ɵɵelementStart(3, "span", 81);
|
|
124
|
+
i0.ɵɵtext(4);
|
|
125
|
+
i0.ɵɵelementEnd()();
|
|
126
|
+
} if (rf & 2) {
|
|
127
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
128
|
+
i0.ɵɵadvance(4);
|
|
129
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.spCreate);
|
|
130
|
+
} }
|
|
131
|
+
function EntityFormComponentExtended_div_0_section_46_div_91_Template(rf, ctx) { if (rf & 1) {
|
|
132
|
+
i0.ɵɵelementStart(0, "div", 75)(1, "span", 76);
|
|
133
|
+
i0.ɵɵtext(2, "SP Update");
|
|
134
|
+
i0.ɵɵelementEnd();
|
|
135
|
+
i0.ɵɵelementStart(3, "span", 81);
|
|
136
|
+
i0.ɵɵtext(4);
|
|
137
|
+
i0.ɵɵelementEnd()();
|
|
138
|
+
} if (rf & 2) {
|
|
139
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
140
|
+
i0.ɵɵadvance(4);
|
|
141
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.spUpdate);
|
|
142
|
+
} }
|
|
143
|
+
function EntityFormComponentExtended_div_0_section_46_div_92_Template(rf, ctx) { if (rf & 1) {
|
|
144
|
+
i0.ɵɵelementStart(0, "div", 75)(1, "span", 76);
|
|
145
|
+
i0.ɵɵtext(2, "SP Delete");
|
|
146
|
+
i0.ɵɵelementEnd();
|
|
147
|
+
i0.ɵɵelementStart(3, "span", 81);
|
|
148
|
+
i0.ɵɵtext(4);
|
|
149
|
+
i0.ɵɵelementEnd()();
|
|
150
|
+
} if (rf & 2) {
|
|
151
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
152
|
+
i0.ɵɵadvance(4);
|
|
153
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.spDelete);
|
|
154
|
+
} }
|
|
155
|
+
function EntityFormComponentExtended_div_0_section_46_div_108_Template(rf, ctx) { if (rf & 1) {
|
|
156
|
+
i0.ɵɵelementStart(0, "div", 75)(1, "span", 76);
|
|
157
|
+
i0.ɵɵtext(2, "Subclass");
|
|
158
|
+
i0.ɵɵelementEnd();
|
|
159
|
+
i0.ɵɵelementStart(3, "span", 81);
|
|
160
|
+
i0.ɵɵtext(4);
|
|
161
|
+
i0.ɵɵelementEnd()();
|
|
162
|
+
} if (rf & 2) {
|
|
163
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
164
|
+
i0.ɵɵadvance(4);
|
|
165
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.EntityObjectSubclassName);
|
|
166
|
+
} }
|
|
167
|
+
function EntityFormComponentExtended_div_0_section_46_Template(rf, ctx) { if (rf & 1) {
|
|
168
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
169
|
+
i0.ɵɵelementStart(0, "section", 50)(1, "div", 51)(2, "div", 52)(3, "div", 53);
|
|
170
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_46_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setActiveSection("fields")); });
|
|
171
|
+
i0.ɵɵelementStart(4, "div", 54);
|
|
172
|
+
i0.ɵɵelement(5, "i", 55);
|
|
173
|
+
i0.ɵɵelementStart(6, "span");
|
|
174
|
+
i0.ɵɵtext(7, "Fields");
|
|
175
|
+
i0.ɵɵelementEnd()();
|
|
176
|
+
i0.ɵɵelementStart(8, "div", 56)(9, "div", 57);
|
|
177
|
+
i0.ɵɵtext(10);
|
|
178
|
+
i0.ɵɵelementEnd();
|
|
179
|
+
i0.ɵɵelementStart(11, "div", 58)(12, "span");
|
|
180
|
+
i0.ɵɵtext(13);
|
|
181
|
+
i0.ɵɵelementEnd();
|
|
182
|
+
i0.ɵɵelementStart(14, "span");
|
|
183
|
+
i0.ɵɵtext(15);
|
|
184
|
+
i0.ɵɵelementEnd();
|
|
185
|
+
i0.ɵɵtemplate(16, EntityFormComponentExtended_div_0_section_46_span_16_Template, 2, 1, "span", 39);
|
|
186
|
+
i0.ɵɵelementEnd()();
|
|
187
|
+
i0.ɵɵelementStart(17, "div", 59);
|
|
188
|
+
i0.ɵɵelement(18, "i", 60);
|
|
189
|
+
i0.ɵɵelementEnd()();
|
|
190
|
+
i0.ɵɵelementStart(19, "div", 61);
|
|
191
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_46_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setActiveSection("relationships")); });
|
|
192
|
+
i0.ɵɵelementStart(20, "div", 54);
|
|
193
|
+
i0.ɵɵelement(21, "i", 62);
|
|
194
|
+
i0.ɵɵelementStart(22, "span");
|
|
195
|
+
i0.ɵɵtext(23, "Relationships");
|
|
196
|
+
i0.ɵɵelementEnd()();
|
|
197
|
+
i0.ɵɵelementStart(24, "div", 56)(25, "div", 57);
|
|
198
|
+
i0.ɵɵtext(26);
|
|
199
|
+
i0.ɵɵelementEnd();
|
|
200
|
+
i0.ɵɵelementStart(27, "div", 58)(28, "span");
|
|
201
|
+
i0.ɵɵtext(29);
|
|
202
|
+
i0.ɵɵelementEnd();
|
|
203
|
+
i0.ɵɵelementStart(30, "span");
|
|
204
|
+
i0.ɵɵtext(31);
|
|
205
|
+
i0.ɵɵelementEnd()()();
|
|
206
|
+
i0.ɵɵelementStart(32, "div", 59);
|
|
207
|
+
i0.ɵɵelement(33, "i", 60);
|
|
208
|
+
i0.ɵɵelementEnd()();
|
|
209
|
+
i0.ɵɵelementStart(34, "div", 63);
|
|
210
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_46_Template_div_click_34_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setActiveSection("permissions")); });
|
|
211
|
+
i0.ɵɵelementStart(35, "div", 54);
|
|
212
|
+
i0.ɵɵelement(36, "i", 64);
|
|
213
|
+
i0.ɵɵelementStart(37, "span");
|
|
214
|
+
i0.ɵɵtext(38, "Security");
|
|
215
|
+
i0.ɵɵelementEnd()();
|
|
216
|
+
i0.ɵɵelementStart(39, "div", 56)(40, "div", 57);
|
|
217
|
+
i0.ɵɵtext(41);
|
|
218
|
+
i0.ɵɵelementEnd();
|
|
219
|
+
i0.ɵɵelementStart(42, "div", 58)(43, "span");
|
|
220
|
+
i0.ɵɵtext(44, "Roles configured");
|
|
221
|
+
i0.ɵɵelementEnd()()();
|
|
222
|
+
i0.ɵɵelementStart(45, "div", 59);
|
|
223
|
+
i0.ɵɵelement(46, "i", 60);
|
|
224
|
+
i0.ɵɵelementEnd()();
|
|
225
|
+
i0.ɵɵelementStart(47, "div", 65)(48, "div", 54);
|
|
226
|
+
i0.ɵɵelement(49, "i", 23);
|
|
227
|
+
i0.ɵɵelementStart(50, "span");
|
|
228
|
+
i0.ɵɵtext(51, "Data");
|
|
229
|
+
i0.ɵɵelementEnd()();
|
|
230
|
+
i0.ɵɵelementStart(52, "div", 56)(53, "div", 57);
|
|
231
|
+
i0.ɵɵtext(54);
|
|
232
|
+
i0.ɵɵelementEnd();
|
|
233
|
+
i0.ɵɵelementStart(55, "div", 58);
|
|
234
|
+
i0.ɵɵtemplate(56, EntityFormComponentExtended_div_0_section_46_span_56_Template, 3, 4, "span", 39)(57, EntityFormComponentExtended_div_0_section_46_span_57_Template, 2, 0, "span", 39);
|
|
235
|
+
i0.ɵɵelementEnd()()()();
|
|
236
|
+
i0.ɵɵelementStart(58, "div", 66)(59, "h3", 67);
|
|
237
|
+
i0.ɵɵelement(60, "i", 68);
|
|
238
|
+
i0.ɵɵtext(61, " Capabilities ");
|
|
239
|
+
i0.ɵɵelementEnd();
|
|
240
|
+
i0.ɵɵelementStart(62, "div", 69);
|
|
241
|
+
i0.ɵɵtemplate(63, EntityFormComponentExtended_div_0_section_46_span_63_Template, 3, 1, "span", 70)(64, EntityFormComponentExtended_div_0_section_46_span_64_Template, 3, 0, "span", 71);
|
|
242
|
+
i0.ɵɵelementEnd()();
|
|
243
|
+
i0.ɵɵelementStart(65, "div", 72)(66, "h3", 67);
|
|
244
|
+
i0.ɵɵelement(67, "i", 73);
|
|
245
|
+
i0.ɵɵtext(68, " Database ");
|
|
246
|
+
i0.ɵɵelementEnd();
|
|
247
|
+
i0.ɵɵelementStart(69, "div", 74)(70, "div", 75)(71, "span", 76);
|
|
248
|
+
i0.ɵɵtext(72, "Schema");
|
|
249
|
+
i0.ɵɵelementEnd();
|
|
250
|
+
i0.ɵɵelementStart(73, "span", 77);
|
|
251
|
+
i0.ɵɵtext(74);
|
|
252
|
+
i0.ɵɵelementEnd()();
|
|
253
|
+
i0.ɵɵelementStart(75, "div", 75)(76, "span", 76);
|
|
254
|
+
i0.ɵɵtext(77, "Table");
|
|
255
|
+
i0.ɵɵelementEnd();
|
|
256
|
+
i0.ɵɵelementStart(78, "span", 77);
|
|
257
|
+
i0.ɵɵtext(79);
|
|
258
|
+
i0.ɵɵelementEnd()();
|
|
259
|
+
i0.ɵɵelementStart(80, "div", 75)(81, "span", 76);
|
|
260
|
+
i0.ɵɵtext(82, "View");
|
|
261
|
+
i0.ɵɵelementEnd();
|
|
262
|
+
i0.ɵɵelementStart(83, "span", 77);
|
|
263
|
+
i0.ɵɵtext(84);
|
|
264
|
+
i0.ɵɵelementEnd()();
|
|
265
|
+
i0.ɵɵelementStart(85, "div", 75)(86, "span", 76);
|
|
266
|
+
i0.ɵɵtext(87, "Delete Type");
|
|
267
|
+
i0.ɵɵelementEnd();
|
|
268
|
+
i0.ɵɵelementStart(88, "span", 77);
|
|
269
|
+
i0.ɵɵtext(89);
|
|
270
|
+
i0.ɵɵelementEnd()();
|
|
271
|
+
i0.ɵɵtemplate(90, EntityFormComponentExtended_div_0_section_46_div_90_Template, 5, 1, "div", 78)(91, EntityFormComponentExtended_div_0_section_46_div_91_Template, 5, 1, "div", 78)(92, EntityFormComponentExtended_div_0_section_46_div_92_Template, 5, 1, "div", 78);
|
|
272
|
+
i0.ɵɵelementEnd()();
|
|
273
|
+
i0.ɵɵelementStart(93, "div", 79)(94, "h3", 67);
|
|
274
|
+
i0.ɵɵelement(95, "i", 80);
|
|
275
|
+
i0.ɵɵtext(96, " Code Generation ");
|
|
276
|
+
i0.ɵɵelementEnd();
|
|
277
|
+
i0.ɵɵelementStart(97, "div", 74)(98, "div", 75)(99, "span", 76);
|
|
278
|
+
i0.ɵɵtext(100, "Class Name");
|
|
279
|
+
i0.ɵɵelementEnd();
|
|
280
|
+
i0.ɵɵelementStart(101, "span", 81);
|
|
281
|
+
i0.ɵɵtext(102);
|
|
282
|
+
i0.ɵɵelementEnd()();
|
|
283
|
+
i0.ɵɵelementStart(103, "div", 75)(104, "span", 76);
|
|
284
|
+
i0.ɵɵtext(105, "Code Name");
|
|
285
|
+
i0.ɵɵelementEnd();
|
|
286
|
+
i0.ɵɵelementStart(106, "span", 81);
|
|
287
|
+
i0.ɵɵtext(107);
|
|
288
|
+
i0.ɵɵelementEnd()();
|
|
289
|
+
i0.ɵɵtemplate(108, EntityFormComponentExtended_div_0_section_46_div_108_Template, 5, 1, "div", 78);
|
|
290
|
+
i0.ɵɵelementEnd()()()();
|
|
291
|
+
} if (rf & 2) {
|
|
292
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
293
|
+
i0.ɵɵadvance(10);
|
|
294
|
+
i0.ɵɵtextInterpolate(ctx_r1.stats.fieldCount);
|
|
295
|
+
i0.ɵɵadvance(3);
|
|
296
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.stats.primaryKeyCount, " PKs");
|
|
297
|
+
i0.ɵɵadvance(2);
|
|
298
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.stats.foreignKeyCount, " FKs");
|
|
299
|
+
i0.ɵɵadvance();
|
|
300
|
+
i0.ɵɵproperty("ngIf", ctx_r1.stats.encryptedFieldCount);
|
|
301
|
+
i0.ɵɵadvance(10);
|
|
302
|
+
i0.ɵɵtextInterpolate(ctx_r1.stats.relationshipCount);
|
|
303
|
+
i0.ɵɵadvance(3);
|
|
304
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.groupedOutgoingRelationships.length, " Out");
|
|
305
|
+
i0.ɵɵadvance(2);
|
|
306
|
+
i0.ɵɵtextInterpolate1("", ctx_r1.groupedIncomingRelationships.length, " In");
|
|
307
|
+
i0.ɵɵadvance(10);
|
|
308
|
+
i0.ɵɵtextInterpolate(ctx_r1.stats.permissionCount);
|
|
309
|
+
i0.ɵɵadvance(13);
|
|
310
|
+
i0.ɵɵtextInterpolate(ctx_r1.formattedRowCount);
|
|
311
|
+
i0.ɵɵadvance(2);
|
|
312
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.RowCountRunAt);
|
|
313
|
+
i0.ɵɵadvance();
|
|
314
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.entity.RowCountRunAt);
|
|
315
|
+
i0.ɵɵadvance(6);
|
|
316
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.capabilitySummary);
|
|
317
|
+
i0.ɵɵadvance();
|
|
318
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.entity.IncludeInAPI);
|
|
319
|
+
i0.ɵɵadvance(10);
|
|
320
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.SchemaName);
|
|
321
|
+
i0.ɵɵadvance(5);
|
|
322
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.BaseTable);
|
|
323
|
+
i0.ɵɵadvance(5);
|
|
324
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.BaseView);
|
|
325
|
+
i0.ɵɵadvance(5);
|
|
326
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.DeleteType);
|
|
327
|
+
i0.ɵɵadvance();
|
|
328
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.spCreate);
|
|
329
|
+
i0.ɵɵadvance();
|
|
330
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.spUpdate);
|
|
331
|
+
i0.ɵɵadvance();
|
|
332
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.spDelete);
|
|
333
|
+
i0.ɵɵadvance(10);
|
|
334
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.ClassName);
|
|
335
|
+
i0.ɵɵadvance(5);
|
|
336
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.CodeName);
|
|
337
|
+
i0.ɵɵadvance();
|
|
338
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.EntityObjectSubclassName);
|
|
339
|
+
} }
|
|
340
|
+
function EntityFormComponentExtended_div_0_section_47_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
341
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
342
|
+
i0.ɵɵelementStart(0, "div", 100)(1, "button", 101);
|
|
343
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.expandAllFieldGroups()); });
|
|
344
|
+
i0.ɵɵelement(2, "i", 102);
|
|
345
|
+
i0.ɵɵelementEnd();
|
|
346
|
+
i0.ɵɵelementStart(3, "button", 103);
|
|
347
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_11_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.collapseAllFieldGroups()); });
|
|
348
|
+
i0.ɵɵelement(4, "i", 104);
|
|
349
|
+
i0.ɵɵelementEnd()();
|
|
350
|
+
} if (rf & 2) {
|
|
351
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
352
|
+
i0.ɵɵadvance();
|
|
353
|
+
i0.ɵɵproperty("disabled", ctx_r1.allFieldGroupsExpanded);
|
|
354
|
+
i0.ɵɵadvance(2);
|
|
355
|
+
i0.ɵɵproperty("disabled", ctx_r1.allFieldGroupsCollapsed);
|
|
356
|
+
} }
|
|
357
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_9_Template(rf, ctx) { if (rf & 1) {
|
|
358
|
+
i0.ɵɵelementStart(0, "span", 128);
|
|
359
|
+
i0.ɵɵtext(1, "Required");
|
|
360
|
+
i0.ɵɵelementEnd();
|
|
361
|
+
} }
|
|
362
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_10_Template(rf, ctx) { if (rf & 1) {
|
|
363
|
+
const _r13 = i0.ɵɵgetCurrentView();
|
|
364
|
+
i0.ɵɵelementStart(0, "span", 129);
|
|
365
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_10_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r13); const field_r12 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(6); ctx_r1.navigateToRelatedEntity(field_r12); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
366
|
+
i0.ɵɵelement(1, "i", 60);
|
|
367
|
+
i0.ɵɵtext(2);
|
|
368
|
+
i0.ɵɵelementEnd();
|
|
369
|
+
} if (rf & 2) {
|
|
370
|
+
const field_r12 = i0.ɵɵnextContext().$implicit;
|
|
371
|
+
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
372
|
+
i0.ɵɵadvance(2);
|
|
373
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getRelatedEntityName(field_r12), " ");
|
|
374
|
+
} }
|
|
375
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_12_Template(rf, ctx) { if (rf & 1) {
|
|
376
|
+
i0.ɵɵelementStart(0, "span", 130);
|
|
377
|
+
i0.ɵɵtext(1, "PK");
|
|
378
|
+
i0.ɵɵelementEnd();
|
|
379
|
+
} }
|
|
380
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_13_Template(rf, ctx) { if (rf & 1) {
|
|
381
|
+
i0.ɵɵelementStart(0, "span", 131);
|
|
382
|
+
i0.ɵɵtext(1, "FK");
|
|
383
|
+
i0.ɵɵelementEnd();
|
|
384
|
+
} }
|
|
385
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_14_Template(rf, ctx) { if (rf & 1) {
|
|
386
|
+
i0.ɵɵelementStart(0, "span", 132);
|
|
387
|
+
i0.ɵɵelement(1, "i", 64);
|
|
388
|
+
i0.ɵɵelementEnd();
|
|
389
|
+
} }
|
|
390
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
+
const _r11 = i0.ɵɵgetCurrentView();
|
|
392
|
+
i0.ɵɵelementStart(0, "div", 116);
|
|
393
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_Template_div_click_0_listener() { const field_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.selectField(field_r12)); });
|
|
394
|
+
i0.ɵɵelementStart(1, "div", 117);
|
|
395
|
+
i0.ɵɵelement(2, "i");
|
|
396
|
+
i0.ɵɵelementEnd();
|
|
397
|
+
i0.ɵɵelementStart(3, "div", 118)(4, "div", 119);
|
|
398
|
+
i0.ɵɵtext(5);
|
|
399
|
+
i0.ɵɵelementEnd();
|
|
400
|
+
i0.ɵɵelementStart(6, "div", 120)(7, "span", 121);
|
|
401
|
+
i0.ɵɵtext(8);
|
|
402
|
+
i0.ɵɵelementEnd();
|
|
403
|
+
i0.ɵɵtemplate(9, EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_9_Template, 2, 0, "span", 122)(10, EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_10_Template, 3, 1, "span", 123);
|
|
404
|
+
i0.ɵɵelementEnd()();
|
|
405
|
+
i0.ɵɵelementStart(11, "div", 124);
|
|
406
|
+
i0.ɵɵtemplate(12, EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_12_Template, 2, 0, "span", 125)(13, EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_13_Template, 2, 0, "span", 126)(14, EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_span_14_Template, 2, 0, "span", 127);
|
|
407
|
+
i0.ɵɵelementEnd()();
|
|
408
|
+
} if (rf & 2) {
|
|
409
|
+
const field_r12 = ctx.$implicit;
|
|
410
|
+
const ctx_r1 = i0.ɵɵnextContext(6);
|
|
411
|
+
i0.ɵɵclassProp("selected", (ctx_r1.selectedField == null ? null : ctx_r1.selectedField.ID) === field_r12.ID);
|
|
412
|
+
i0.ɵɵadvance(2);
|
|
413
|
+
i0.ɵɵclassMap(ctx_r1.getFieldTypeIcon(field_r12));
|
|
414
|
+
i0.ɵɵadvance(3);
|
|
415
|
+
i0.ɵɵtextInterpolate(field_r12.DisplayName || field_r12.Name);
|
|
416
|
+
i0.ɵɵadvance(3);
|
|
417
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatFieldType(field_r12));
|
|
418
|
+
i0.ɵɵadvance();
|
|
419
|
+
i0.ɵɵproperty("ngIf", !field_r12.AllowsNull);
|
|
420
|
+
i0.ɵɵadvance();
|
|
421
|
+
i0.ɵɵproperty("ngIf", field_r12.RelatedEntityID);
|
|
422
|
+
i0.ɵɵadvance(2);
|
|
423
|
+
i0.ɵɵproperty("ngIf", field_r12.IsPrimaryKey);
|
|
424
|
+
i0.ɵɵadvance();
|
|
425
|
+
i0.ɵɵproperty("ngIf", field_r12.RelatedEntityID && !field_r12.IsPrimaryKey);
|
|
426
|
+
i0.ɵɵadvance();
|
|
427
|
+
i0.ɵɵproperty("ngIf", field_r12.Encrypt);
|
|
428
|
+
} }
|
|
429
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
430
|
+
i0.ɵɵelementStart(0, "div", 114);
|
|
431
|
+
i0.ɵɵtemplate(1, EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_div_1_Template, 15, 11, "div", 115);
|
|
432
|
+
i0.ɵɵelementEnd();
|
|
433
|
+
} if (rf & 2) {
|
|
434
|
+
const group_r10 = i0.ɵɵnextContext().$implicit;
|
|
435
|
+
i0.ɵɵadvance();
|
|
436
|
+
i0.ɵɵproperty("ngForOf", group_r10.fields);
|
|
437
|
+
} }
|
|
438
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
439
|
+
const _r9 = i0.ɵɵgetCurrentView();
|
|
440
|
+
i0.ɵɵelementStart(0, "div", 107)(1, "div", 108);
|
|
441
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_13_div_1_Template_div_click_1_listener() { const group_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.toggleFieldGroup(group_r10.id)); });
|
|
442
|
+
i0.ɵɵelement(2, "i", 109)(3, "i", 110);
|
|
443
|
+
i0.ɵɵelementStart(4, "span", 111);
|
|
444
|
+
i0.ɵɵtext(5);
|
|
445
|
+
i0.ɵɵelementEnd();
|
|
446
|
+
i0.ɵɵelementStart(6, "span", 112);
|
|
447
|
+
i0.ɵɵtext(7);
|
|
448
|
+
i0.ɵɵelementEnd()();
|
|
449
|
+
i0.ɵɵtemplate(8, EntityFormComponentExtended_div_0_section_47_div_13_div_1_div_8_Template, 2, 1, "div", 113);
|
|
450
|
+
i0.ɵɵelementEnd();
|
|
451
|
+
} if (rf & 2) {
|
|
452
|
+
const group_r10 = ctx.$implicit;
|
|
453
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
454
|
+
i0.ɵɵclassProp("expanded", ctx_r1.isFieldGroupExpanded(group_r10.id));
|
|
455
|
+
i0.ɵɵadvance(2);
|
|
456
|
+
i0.ɵɵproperty("ngClass", ctx_r1.isFieldGroupExpanded(group_r10.id) ? "fa-chevron-down" : "fa-chevron-right");
|
|
457
|
+
i0.ɵɵadvance();
|
|
458
|
+
i0.ɵɵclassMap(group_r10.icon);
|
|
459
|
+
i0.ɵɵadvance(2);
|
|
460
|
+
i0.ɵɵtextInterpolate(group_r10.label);
|
|
461
|
+
i0.ɵɵadvance(2);
|
|
462
|
+
i0.ɵɵtextInterpolate(group_r10.fields.length);
|
|
463
|
+
i0.ɵɵadvance();
|
|
464
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isFieldGroupExpanded(group_r10.id));
|
|
465
|
+
} }
|
|
466
|
+
function EntityFormComponentExtended_div_0_section_47_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
467
|
+
i0.ɵɵelementStart(0, "div", 105);
|
|
468
|
+
i0.ɵɵtemplate(1, EntityFormComponentExtended_div_0_section_47_div_13_div_1_Template, 9, 8, "div", 106);
|
|
469
|
+
i0.ɵɵelementEnd();
|
|
470
|
+
} if (rf & 2) {
|
|
471
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
472
|
+
i0.ɵɵadvance();
|
|
473
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.getFilteredFieldGroups());
|
|
474
|
+
} }
|
|
475
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_12_Template(rf, ctx) { if (rf & 1) {
|
|
476
|
+
i0.ɵɵelementStart(0, "span", 165);
|
|
477
|
+
i0.ɵɵtext(1);
|
|
478
|
+
i0.ɵɵelementEnd();
|
|
479
|
+
} if (rf & 2) {
|
|
480
|
+
const field_r16 = i0.ɵɵnextContext().$implicit;
|
|
481
|
+
i0.ɵɵadvance();
|
|
482
|
+
i0.ɵɵtextInterpolate(field_r16.Length);
|
|
483
|
+
} }
|
|
484
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_13_Template(rf, ctx) { if (rf & 1) {
|
|
485
|
+
i0.ɵɵelementStart(0, "span", 166);
|
|
486
|
+
i0.ɵɵtext(1, "\u2014");
|
|
487
|
+
i0.ɵɵelementEnd();
|
|
488
|
+
} }
|
|
489
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_20_Template(rf, ctx) { if (rf & 1) {
|
|
490
|
+
i0.ɵɵelementStart(0, "span", 167);
|
|
491
|
+
i0.ɵɵelement(1, "i", 168);
|
|
492
|
+
i0.ɵɵtext(2, " PK ");
|
|
493
|
+
i0.ɵɵelementEnd();
|
|
494
|
+
} }
|
|
495
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_21_Template(rf, ctx) { if (rf & 1) {
|
|
496
|
+
i0.ɵɵelementStart(0, "span", 169);
|
|
497
|
+
i0.ɵɵelement(1, "i", 20);
|
|
498
|
+
i0.ɵɵtext(2, " FK ");
|
|
499
|
+
i0.ɵɵelementEnd();
|
|
500
|
+
} }
|
|
501
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_22_Template(rf, ctx) { if (rf & 1) {
|
|
502
|
+
i0.ɵɵelementStart(0, "span", 170);
|
|
503
|
+
i0.ɵɵelement(1, "i", 64);
|
|
504
|
+
i0.ɵɵelementEnd();
|
|
505
|
+
} }
|
|
506
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_div_23_Template(rf, ctx) { if (rf & 1) {
|
|
507
|
+
const _r15 = i0.ɵɵgetCurrentView();
|
|
508
|
+
i0.ɵɵelementStart(0, "div", 146);
|
|
509
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_14_div_23_Template_div_click_0_listener() { const field_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.selectField(field_r16)); });
|
|
510
|
+
i0.ɵɵelementStart(1, "div", 147)(2, "span", 148);
|
|
511
|
+
i0.ɵɵtext(3);
|
|
512
|
+
i0.ɵɵelementEnd()();
|
|
513
|
+
i0.ɵɵelementStart(4, "div", 149);
|
|
514
|
+
i0.ɵɵelement(5, "i", 150);
|
|
515
|
+
i0.ɵɵelementStart(6, "span", 151);
|
|
516
|
+
i0.ɵɵtext(7);
|
|
517
|
+
i0.ɵɵelementEnd()();
|
|
518
|
+
i0.ɵɵelementStart(8, "div", 152)(9, "span", 153);
|
|
519
|
+
i0.ɵɵtext(10);
|
|
520
|
+
i0.ɵɵelementEnd()();
|
|
521
|
+
i0.ɵɵelementStart(11, "div", 154);
|
|
522
|
+
i0.ɵɵtemplate(12, EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_12_Template, 2, 1, "span", 155)(13, EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_13_Template, 2, 0, "span", 156);
|
|
523
|
+
i0.ɵɵelementEnd();
|
|
524
|
+
i0.ɵɵelementStart(14, "div", 157)(15, "span", 158);
|
|
525
|
+
i0.ɵɵelement(16, "i");
|
|
526
|
+
i0.ɵɵtext(17);
|
|
527
|
+
i0.ɵɵelementEnd()();
|
|
528
|
+
i0.ɵɵelementStart(18, "div", 141)(19, "div", 159);
|
|
529
|
+
i0.ɵɵtemplate(20, EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_20_Template, 3, 0, "span", 160)(21, EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_21_Template, 3, 0, "span", 161)(22, EntityFormComponentExtended_div_0_section_47_div_14_div_23_span_22_Template, 2, 0, "span", 162);
|
|
530
|
+
i0.ɵɵelementEnd()();
|
|
531
|
+
i0.ɵɵelementStart(23, "div", 163)(24, "span", 164);
|
|
532
|
+
i0.ɵɵtext(25);
|
|
533
|
+
i0.ɵɵelementEnd()()();
|
|
534
|
+
} if (rf & 2) {
|
|
535
|
+
const field_r16 = ctx.$implicit;
|
|
536
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
537
|
+
i0.ɵɵclassProp("selected", (ctx_r1.selectedField == null ? null : ctx_r1.selectedField.ID) === field_r16.ID);
|
|
538
|
+
i0.ɵɵadvance(3);
|
|
539
|
+
i0.ɵɵtextInterpolate(field_r16.Sequence);
|
|
540
|
+
i0.ɵɵadvance(2);
|
|
541
|
+
i0.ɵɵclassMap(ctx_r1.getFieldTypeIcon(field_r16));
|
|
542
|
+
i0.ɵɵadvance(2);
|
|
543
|
+
i0.ɵɵtextInterpolate(field_r16.DisplayName || field_r16.Name);
|
|
544
|
+
i0.ɵɵadvance(3);
|
|
545
|
+
i0.ɵɵtextInterpolate(field_r16.Type);
|
|
546
|
+
i0.ɵɵadvance(2);
|
|
547
|
+
i0.ɵɵproperty("ngIf", field_r16.Length > 0);
|
|
548
|
+
i0.ɵɵadvance();
|
|
549
|
+
i0.ɵɵproperty("ngIf", field_r16.Length <= 0);
|
|
550
|
+
i0.ɵɵadvance(2);
|
|
551
|
+
i0.ɵɵclassProp("required", !field_r16.AllowsNull)("optional", field_r16.AllowsNull);
|
|
552
|
+
i0.ɵɵadvance();
|
|
553
|
+
i0.ɵɵclassMap(field_r16.AllowsNull ? "fa-solid fa-circle-minus" : "fa-solid fa-circle-check");
|
|
554
|
+
i0.ɵɵadvance();
|
|
555
|
+
i0.ɵɵtextInterpolate1(" ", field_r16.AllowsNull ? "Optional" : "Required", " ");
|
|
556
|
+
i0.ɵɵadvance(3);
|
|
557
|
+
i0.ɵɵproperty("ngIf", field_r16.IsPrimaryKey);
|
|
558
|
+
i0.ɵɵadvance();
|
|
559
|
+
i0.ɵɵproperty("ngIf", field_r16.RelatedEntityID && !field_r16.IsPrimaryKey);
|
|
560
|
+
i0.ɵɵadvance();
|
|
561
|
+
i0.ɵɵproperty("ngIf", field_r16.Encrypt);
|
|
562
|
+
i0.ɵɵadvance(2);
|
|
563
|
+
i0.ɵɵproperty("title", field_r16.Description || "");
|
|
564
|
+
i0.ɵɵadvance();
|
|
565
|
+
i0.ɵɵtextInterpolate(field_r16.Description || "\u2014");
|
|
566
|
+
} }
|
|
567
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_div_24_Template(rf, ctx) { if (rf & 1) {
|
|
568
|
+
i0.ɵɵelementStart(0, "div", 171);
|
|
569
|
+
i0.ɵɵelement(1, "i", 88);
|
|
570
|
+
i0.ɵɵelementStart(2, "span");
|
|
571
|
+
i0.ɵɵtext(3, "No fields match your search");
|
|
572
|
+
i0.ɵɵelementEnd()();
|
|
573
|
+
} }
|
|
574
|
+
function EntityFormComponentExtended_div_0_section_47_div_14_Template(rf, ctx) { if (rf & 1) {
|
|
575
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
576
|
+
i0.ɵɵelementStart(0, "div", 133)(1, "div", 134)(2, "div", 135);
|
|
577
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_14_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortFieldList("Sequence")); });
|
|
578
|
+
i0.ɵɵtext(3, " # ");
|
|
579
|
+
i0.ɵɵelement(4, "i", 136);
|
|
580
|
+
i0.ɵɵelementEnd();
|
|
581
|
+
i0.ɵɵelementStart(5, "div", 137);
|
|
582
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_14_Template_div_click_5_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortFieldList("Name")); });
|
|
583
|
+
i0.ɵɵtext(6, " Field Name ");
|
|
584
|
+
i0.ɵɵelement(7, "i", 136);
|
|
585
|
+
i0.ɵɵelementEnd();
|
|
586
|
+
i0.ɵɵelementStart(8, "div", 138);
|
|
587
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_14_Template_div_click_8_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortFieldList("Type")); });
|
|
588
|
+
i0.ɵɵtext(9, " Type ");
|
|
589
|
+
i0.ɵɵelement(10, "i", 136);
|
|
590
|
+
i0.ɵɵelementEnd();
|
|
591
|
+
i0.ɵɵelementStart(11, "div", 139);
|
|
592
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_14_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortFieldList("Length")); });
|
|
593
|
+
i0.ɵɵtext(12, " Length ");
|
|
594
|
+
i0.ɵɵelement(13, "i", 136);
|
|
595
|
+
i0.ɵɵelementEnd();
|
|
596
|
+
i0.ɵɵelementStart(14, "div", 140);
|
|
597
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_14_Template_div_click_14_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortFieldList("AllowsNull")); });
|
|
598
|
+
i0.ɵɵtext(15, " Required ");
|
|
599
|
+
i0.ɵɵelement(16, "i", 136);
|
|
600
|
+
i0.ɵɵelementEnd();
|
|
601
|
+
i0.ɵɵelementStart(17, "div", 141);
|
|
602
|
+
i0.ɵɵtext(18, "Flags");
|
|
603
|
+
i0.ɵɵelementEnd();
|
|
604
|
+
i0.ɵɵelementStart(19, "div", 142);
|
|
605
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_div_14_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.sortFieldList("Description")); });
|
|
606
|
+
i0.ɵɵtext(20, " Description ");
|
|
607
|
+
i0.ɵɵelement(21, "i", 136);
|
|
608
|
+
i0.ɵɵelementEnd()();
|
|
609
|
+
i0.ɵɵelementStart(22, "div", 143);
|
|
610
|
+
i0.ɵɵtemplate(23, EntityFormComponentExtended_div_0_section_47_div_14_div_23_Template, 26, 21, "div", 144);
|
|
611
|
+
i0.ɵɵelementEnd();
|
|
612
|
+
i0.ɵɵtemplate(24, EntityFormComponentExtended_div_0_section_47_div_14_div_24_Template, 4, 0, "div", 145);
|
|
613
|
+
i0.ɵɵelementEnd();
|
|
614
|
+
} if (rf & 2) {
|
|
615
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
616
|
+
i0.ɵɵadvance(2);
|
|
617
|
+
i0.ɵɵclassProp("sorted", ctx_r1.fieldListSortColumn === "Sequence");
|
|
618
|
+
i0.ɵɵadvance(2);
|
|
619
|
+
i0.ɵɵproperty("ngClass", ctx_r1.fieldListSortColumn === "Sequence" ? ctx_r1.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
620
|
+
i0.ɵɵadvance();
|
|
621
|
+
i0.ɵɵclassProp("sorted", ctx_r1.fieldListSortColumn === "Name");
|
|
622
|
+
i0.ɵɵadvance(2);
|
|
623
|
+
i0.ɵɵproperty("ngClass", ctx_r1.fieldListSortColumn === "Name" ? ctx_r1.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
624
|
+
i0.ɵɵadvance();
|
|
625
|
+
i0.ɵɵclassProp("sorted", ctx_r1.fieldListSortColumn === "Type");
|
|
626
|
+
i0.ɵɵadvance(2);
|
|
627
|
+
i0.ɵɵproperty("ngClass", ctx_r1.fieldListSortColumn === "Type" ? ctx_r1.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
628
|
+
i0.ɵɵadvance();
|
|
629
|
+
i0.ɵɵclassProp("sorted", ctx_r1.fieldListSortColumn === "Length");
|
|
630
|
+
i0.ɵɵadvance(2);
|
|
631
|
+
i0.ɵɵproperty("ngClass", ctx_r1.fieldListSortColumn === "Length" ? ctx_r1.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
632
|
+
i0.ɵɵadvance();
|
|
633
|
+
i0.ɵɵclassProp("sorted", ctx_r1.fieldListSortColumn === "AllowsNull");
|
|
634
|
+
i0.ɵɵadvance(2);
|
|
635
|
+
i0.ɵɵproperty("ngClass", ctx_r1.fieldListSortColumn === "AllowsNull" ? ctx_r1.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
636
|
+
i0.ɵɵadvance(3);
|
|
637
|
+
i0.ɵɵclassProp("sorted", ctx_r1.fieldListSortColumn === "Description");
|
|
638
|
+
i0.ɵɵadvance(2);
|
|
639
|
+
i0.ɵɵproperty("ngClass", ctx_r1.fieldListSortColumn === "Description" ? ctx_r1.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
640
|
+
i0.ɵɵadvance(2);
|
|
641
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.getFilteredFieldsList());
|
|
642
|
+
i0.ɵɵadvance();
|
|
643
|
+
i0.ɵɵproperty("ngIf", ctx_r1.getFilteredFieldsList().length === 0);
|
|
644
|
+
} }
|
|
645
|
+
function EntityFormComponentExtended_div_0_section_47_Template(rf, ctx) { if (rf & 1) {
|
|
646
|
+
const _r7 = i0.ɵɵgetCurrentView();
|
|
647
|
+
i0.ɵɵelementStart(0, "section", 85)(1, "div", 86)(2, "div", 87);
|
|
648
|
+
i0.ɵɵelement(3, "i", 88);
|
|
649
|
+
i0.ɵɵelementStart(4, "input", 89);
|
|
650
|
+
i0.ɵɵlistener("ngModelChange", function EntityFormComponentExtended_div_0_section_47_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onFieldSearch($event)); });
|
|
651
|
+
i0.ɵɵelementEnd()();
|
|
652
|
+
i0.ɵɵelementStart(5, "div", 90)(6, "div", 91)(7, "button", 92);
|
|
653
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.fieldViewMode = "grouped"); });
|
|
654
|
+
i0.ɵɵelement(8, "i", 93);
|
|
655
|
+
i0.ɵɵelementEnd();
|
|
656
|
+
i0.ɵɵelementStart(9, "button", 94);
|
|
657
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_47_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.fieldViewMode = "list"); });
|
|
658
|
+
i0.ɵɵelement(10, "i", 95);
|
|
659
|
+
i0.ɵɵelementEnd()();
|
|
660
|
+
i0.ɵɵtemplate(11, EntityFormComponentExtended_div_0_section_47_div_11_Template, 5, 2, "div", 96);
|
|
661
|
+
i0.ɵɵelementEnd()();
|
|
662
|
+
i0.ɵɵelementStart(12, "div", 97);
|
|
663
|
+
i0.ɵɵtemplate(13, EntityFormComponentExtended_div_0_section_47_div_13_Template, 2, 1, "div", 98)(14, EntityFormComponentExtended_div_0_section_47_div_14_Template, 25, 20, "div", 99);
|
|
664
|
+
i0.ɵɵelementEnd()();
|
|
665
|
+
} if (rf & 2) {
|
|
666
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
667
|
+
i0.ɵɵadvance(4);
|
|
668
|
+
i0.ɵɵproperty("ngModel", ctx_r1.fieldSearchTerm);
|
|
669
|
+
i0.ɵɵadvance(3);
|
|
670
|
+
i0.ɵɵclassProp("active", ctx_r1.fieldViewMode === "grouped");
|
|
671
|
+
i0.ɵɵadvance(2);
|
|
672
|
+
i0.ɵɵclassProp("active", ctx_r1.fieldViewMode === "list");
|
|
673
|
+
i0.ɵɵadvance(2);
|
|
674
|
+
i0.ɵɵproperty("ngIf", ctx_r1.fieldViewMode === "grouped");
|
|
675
|
+
i0.ɵɵadvance(2);
|
|
676
|
+
i0.ɵɵproperty("ngIf", ctx_r1.fieldViewMode === "grouped");
|
|
677
|
+
i0.ɵɵadvance();
|
|
678
|
+
i0.ɵɵproperty("ngIf", ctx_r1.fieldViewMode === "list");
|
|
679
|
+
} }
|
|
680
|
+
function EntityFormComponentExtended_div_0_section_48_div_9_button_4_Template(rf, ctx) { if (rf & 1) {
|
|
681
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
682
|
+
i0.ɵɵelementStart(0, "button", 182);
|
|
683
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_48_div_9_button_4_Template_button_click_0_listener() { const d_r19 = i0.ɵɵrestoreView(_r18).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.setErdDepth(d_r19)); });
|
|
684
|
+
i0.ɵɵtext(1);
|
|
685
|
+
i0.ɵɵelementEnd();
|
|
686
|
+
} if (rf & 2) {
|
|
687
|
+
const d_r19 = ctx.$implicit;
|
|
688
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
689
|
+
i0.ɵɵclassProp("active", ctx_r1.erdDepth === d_r19);
|
|
690
|
+
i0.ɵɵproperty("title", "Show " + d_r19 + " level(s) of relationships");
|
|
691
|
+
i0.ɵɵadvance();
|
|
692
|
+
i0.ɵɵtextInterpolate1(" ", d_r19, " ");
|
|
693
|
+
} }
|
|
694
|
+
function EntityFormComponentExtended_div_0_section_48_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
695
|
+
i0.ɵɵelementStart(0, "div", 178)(1, "span", 179);
|
|
696
|
+
i0.ɵɵtext(2, "Depth:");
|
|
697
|
+
i0.ɵɵelementEnd();
|
|
698
|
+
i0.ɵɵelementStart(3, "div", 180);
|
|
699
|
+
i0.ɵɵtemplate(4, EntityFormComponentExtended_div_0_section_48_div_9_button_4_Template, 2, 4, "button", 181);
|
|
700
|
+
i0.ɵɵelementEnd()();
|
|
701
|
+
} if (rf & 2) {
|
|
702
|
+
i0.ɵɵadvance(4);
|
|
703
|
+
i0.ɵɵproperty("ngForOf", i0.ɵɵpureFunction0(1, _c0));
|
|
704
|
+
} }
|
|
705
|
+
function EntityFormComponentExtended_div_0_section_48_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
706
|
+
const _r20 = i0.ɵɵgetCurrentView();
|
|
707
|
+
i0.ɵɵelementStart(0, "div", 183)(1, "mj-erd-composite", 184);
|
|
708
|
+
i0.ɵɵlistener("stateChange", function EntityFormComponentExtended_div_0_section_48_div_11_Template_mj_erd_composite_stateChange_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onERDStateChange($event)); })("openRecord", function EntityFormComponentExtended_div_0_section_48_div_11_Template_mj_erd_composite_openRecord_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onERDOpenRecord($event)); });
|
|
709
|
+
i0.ɵɵelementEnd()();
|
|
710
|
+
} if (rf & 2) {
|
|
711
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
712
|
+
i0.ɵɵadvance();
|
|
713
|
+
i0.ɵɵproperty("focusEntities", ctx_r1.entity ? i0.ɵɵpureFunction1(4, _c1, ctx_r1.entity) : i0.ɵɵpureFunction0(6, _c2))("showFilterPanel", false)("showHeader", false)("depth", ctx_r1.erdDepth);
|
|
714
|
+
} }
|
|
715
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_div_8_span_7_Template(rf, ctx) { if (rf & 1) {
|
|
716
|
+
const _r21 = i0.ɵɵgetCurrentView();
|
|
717
|
+
i0.ɵɵelementStart(0, "span", 199);
|
|
718
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_48_div_12_div_8_span_7_Template_span_click_0_listener() { const field_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.selectField(field_r22)); });
|
|
719
|
+
i0.ɵɵelement(1, "i", 20);
|
|
720
|
+
i0.ɵɵtext(2);
|
|
721
|
+
i0.ɵɵelementEnd();
|
|
722
|
+
} if (rf & 2) {
|
|
723
|
+
const field_r22 = ctx.$implicit;
|
|
724
|
+
i0.ɵɵproperty("title", field_r22.Description || field_r22.Name);
|
|
725
|
+
i0.ɵɵadvance(2);
|
|
726
|
+
i0.ɵɵtextInterpolate1(" ", field_r22.Name, " ");
|
|
727
|
+
} }
|
|
728
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
729
|
+
i0.ɵɵelementStart(0, "div", 193)(1, "div", 194)(2, "div", 195);
|
|
730
|
+
i0.ɵɵelement(3, "i", 60);
|
|
731
|
+
i0.ɵɵelementEnd();
|
|
732
|
+
i0.ɵɵelementStart(4, "div", 196);
|
|
733
|
+
i0.ɵɵtext(5);
|
|
734
|
+
i0.ɵɵelementEnd()();
|
|
735
|
+
i0.ɵɵelementStart(6, "div", 197);
|
|
736
|
+
i0.ɵɵtemplate(7, EntityFormComponentExtended_div_0_section_48_div_12_div_8_span_7_Template, 3, 2, "span", 198);
|
|
737
|
+
i0.ɵɵelementEnd()();
|
|
738
|
+
} if (rf & 2) {
|
|
739
|
+
const group_r23 = ctx.$implicit;
|
|
740
|
+
i0.ɵɵadvance(5);
|
|
741
|
+
i0.ɵɵtextInterpolate(group_r23.entityName);
|
|
742
|
+
i0.ɵɵadvance(2);
|
|
743
|
+
i0.ɵɵproperty("ngForOf", group_r23.fields);
|
|
744
|
+
} }
|
|
745
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
746
|
+
i0.ɵɵelementStart(0, "div", 200)(1, "p");
|
|
747
|
+
i0.ɵɵtext(2, "No outgoing relationships");
|
|
748
|
+
i0.ɵɵelementEnd()();
|
|
749
|
+
} }
|
|
750
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_div_17_span_7_i_3_Template(rf, ctx) { if (rf & 1) {
|
|
751
|
+
i0.ɵɵelement(0, "i", 206);
|
|
752
|
+
} }
|
|
753
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_div_17_span_7_Template(rf, ctx) { if (rf & 1) {
|
|
754
|
+
i0.ɵɵelementStart(0, "span", 204);
|
|
755
|
+
i0.ɵɵelement(1, "i", 20);
|
|
756
|
+
i0.ɵɵtext(2);
|
|
757
|
+
i0.ɵɵtemplate(3, EntityFormComponentExtended_div_0_section_48_div_12_div_17_span_7_i_3_Template, 1, 0, "i", 205);
|
|
758
|
+
i0.ɵɵelementEnd();
|
|
759
|
+
} if (rf & 2) {
|
|
760
|
+
const field_r24 = ctx.$implicit;
|
|
761
|
+
i0.ɵɵproperty("title", "Type: " + field_r24.type);
|
|
762
|
+
i0.ɵɵadvance(2);
|
|
763
|
+
i0.ɵɵtextInterpolate1(" ", field_r24.fieldName, " ");
|
|
764
|
+
i0.ɵɵadvance();
|
|
765
|
+
i0.ɵɵproperty("ngIf", field_r24.bundleInAPI);
|
|
766
|
+
} }
|
|
767
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_div_17_Template(rf, ctx) { if (rf & 1) {
|
|
768
|
+
i0.ɵɵelementStart(0, "div", 193)(1, "div", 194)(2, "div", 201);
|
|
769
|
+
i0.ɵɵelement(3, "i", 202);
|
|
770
|
+
i0.ɵɵelementEnd();
|
|
771
|
+
i0.ɵɵelementStart(4, "div", 196);
|
|
772
|
+
i0.ɵɵtext(5);
|
|
773
|
+
i0.ɵɵelementEnd()();
|
|
774
|
+
i0.ɵɵelementStart(6, "div", 197);
|
|
775
|
+
i0.ɵɵtemplate(7, EntityFormComponentExtended_div_0_section_48_div_12_div_17_span_7_Template, 4, 3, "span", 203);
|
|
776
|
+
i0.ɵɵelementEnd()();
|
|
777
|
+
} if (rf & 2) {
|
|
778
|
+
const group_r25 = ctx.$implicit;
|
|
779
|
+
i0.ɵɵadvance(5);
|
|
780
|
+
i0.ɵɵtextInterpolate(group_r25.entityName);
|
|
781
|
+
i0.ɵɵadvance(2);
|
|
782
|
+
i0.ɵɵproperty("ngForOf", group_r25.fields);
|
|
783
|
+
} }
|
|
784
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_div_18_Template(rf, ctx) { if (rf & 1) {
|
|
785
|
+
i0.ɵɵelementStart(0, "div", 200)(1, "p");
|
|
786
|
+
i0.ɵɵtext(2, "No incoming relationships");
|
|
787
|
+
i0.ɵɵelementEnd()();
|
|
788
|
+
} }
|
|
789
|
+
function EntityFormComponentExtended_div_0_section_48_div_12_Template(rf, ctx) { if (rf & 1) {
|
|
790
|
+
i0.ɵɵelementStart(0, "div", 185)(1, "div", 186)(2, "h3", 187);
|
|
791
|
+
i0.ɵɵelement(3, "i", 188);
|
|
792
|
+
i0.ɵɵtext(4, " Outgoing (References to other entities) ");
|
|
793
|
+
i0.ɵɵelementStart(5, "span", 112);
|
|
794
|
+
i0.ɵɵtext(6);
|
|
795
|
+
i0.ɵɵelementEnd()();
|
|
796
|
+
i0.ɵɵelementStart(7, "div", 189);
|
|
797
|
+
i0.ɵɵtemplate(8, EntityFormComponentExtended_div_0_section_48_div_12_div_8_Template, 8, 2, "div", 190)(9, EntityFormComponentExtended_div_0_section_48_div_12_div_9_Template, 3, 0, "div", 191);
|
|
798
|
+
i0.ɵɵelementEnd()();
|
|
799
|
+
i0.ɵɵelementStart(10, "div", 186)(11, "h3", 187);
|
|
800
|
+
i0.ɵɵelement(12, "i", 192);
|
|
801
|
+
i0.ɵɵtext(13, " Incoming (Entities that reference this one) ");
|
|
802
|
+
i0.ɵɵelementStart(14, "span", 112);
|
|
803
|
+
i0.ɵɵtext(15);
|
|
804
|
+
i0.ɵɵelementEnd()();
|
|
805
|
+
i0.ɵɵelementStart(16, "div", 189);
|
|
806
|
+
i0.ɵɵtemplate(17, EntityFormComponentExtended_div_0_section_48_div_12_div_17_Template, 8, 2, "div", 190)(18, EntityFormComponentExtended_div_0_section_48_div_12_div_18_Template, 3, 0, "div", 191);
|
|
807
|
+
i0.ɵɵelementEnd()()();
|
|
808
|
+
} if (rf & 2) {
|
|
809
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
810
|
+
i0.ɵɵadvance(6);
|
|
811
|
+
i0.ɵɵtextInterpolate(ctx_r1.groupedOutgoingRelationships.length);
|
|
812
|
+
i0.ɵɵadvance(2);
|
|
813
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.groupedOutgoingRelationships);
|
|
814
|
+
i0.ɵɵadvance();
|
|
815
|
+
i0.ɵɵproperty("ngIf", ctx_r1.groupedOutgoingRelationships.length === 0);
|
|
816
|
+
i0.ɵɵadvance(6);
|
|
817
|
+
i0.ɵɵtextInterpolate(ctx_r1.groupedIncomingRelationships.length);
|
|
818
|
+
i0.ɵɵadvance(2);
|
|
819
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.groupedIncomingRelationships);
|
|
820
|
+
i0.ɵɵadvance();
|
|
821
|
+
i0.ɵɵproperty("ngIf", ctx_r1.groupedIncomingRelationships.length === 0);
|
|
822
|
+
} }
|
|
823
|
+
function EntityFormComponentExtended_div_0_section_48_Template(rf, ctx) { if (rf & 1) {
|
|
824
|
+
const _r17 = i0.ɵɵgetCurrentView();
|
|
825
|
+
i0.ɵɵelementStart(0, "section", 172)(1, "div", 86)(2, "div", 173)(3, "button", 174);
|
|
826
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_48_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.relationshipViewMode = "diagram"); });
|
|
827
|
+
i0.ɵɵelement(4, "i", 62);
|
|
828
|
+
i0.ɵɵtext(5, " Diagram ");
|
|
829
|
+
i0.ɵɵelementEnd();
|
|
830
|
+
i0.ɵɵelementStart(6, "button", 174);
|
|
831
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_section_48_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.relationshipViewMode = "list"); });
|
|
832
|
+
i0.ɵɵelement(7, "i", 95);
|
|
833
|
+
i0.ɵɵtext(8, " List ");
|
|
834
|
+
i0.ɵɵelementEnd()();
|
|
835
|
+
i0.ɵɵtemplate(9, EntityFormComponentExtended_div_0_section_48_div_9_Template, 5, 2, "div", 175);
|
|
836
|
+
i0.ɵɵelementEnd();
|
|
837
|
+
i0.ɵɵelementStart(10, "div", 51);
|
|
838
|
+
i0.ɵɵtemplate(11, EntityFormComponentExtended_div_0_section_48_div_11_Template, 2, 7, "div", 176)(12, EntityFormComponentExtended_div_0_section_48_div_12_Template, 19, 6, "div", 177);
|
|
839
|
+
i0.ɵɵelementEnd()();
|
|
840
|
+
} if (rf & 2) {
|
|
841
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
842
|
+
i0.ɵɵadvance(3);
|
|
843
|
+
i0.ɵɵclassProp("active", ctx_r1.relationshipViewMode === "diagram");
|
|
844
|
+
i0.ɵɵadvance(3);
|
|
845
|
+
i0.ɵɵclassProp("active", ctx_r1.relationshipViewMode === "list");
|
|
846
|
+
i0.ɵɵadvance(3);
|
|
847
|
+
i0.ɵɵproperty("ngIf", ctx_r1.relationshipViewMode === "diagram");
|
|
848
|
+
i0.ɵɵadvance(2);
|
|
849
|
+
i0.ɵɵproperty("ngIf", ctx_r1.relationshipViewMode === "diagram");
|
|
850
|
+
i0.ɵɵadvance();
|
|
851
|
+
i0.ɵɵproperty("ngIf", ctx_r1.relationshipViewMode === "list");
|
|
852
|
+
} }
|
|
853
|
+
function EntityFormComponentExtended_div_0_section_49_tr_19_span_12_Template(rf, ctx) { if (rf & 1) {
|
|
854
|
+
i0.ɵɵelementStart(0, "span", 225);
|
|
855
|
+
i0.ɵɵtext(1, "R");
|
|
856
|
+
i0.ɵɵelementEnd();
|
|
857
|
+
} }
|
|
858
|
+
function EntityFormComponentExtended_div_0_section_49_tr_19_span_13_Template(rf, ctx) { if (rf & 1) {
|
|
859
|
+
i0.ɵɵelementStart(0, "span", 226);
|
|
860
|
+
i0.ɵɵtext(1, "C");
|
|
861
|
+
i0.ɵɵelementEnd();
|
|
862
|
+
} }
|
|
863
|
+
function EntityFormComponentExtended_div_0_section_49_tr_19_span_14_Template(rf, ctx) { if (rf & 1) {
|
|
864
|
+
i0.ɵɵelementStart(0, "span", 227);
|
|
865
|
+
i0.ɵɵtext(1, "U");
|
|
866
|
+
i0.ɵɵelementEnd();
|
|
867
|
+
} }
|
|
868
|
+
function EntityFormComponentExtended_div_0_section_49_tr_19_span_15_Template(rf, ctx) { if (rf & 1) {
|
|
869
|
+
i0.ɵɵelementStart(0, "span", 228);
|
|
870
|
+
i0.ɵɵtext(1, "D");
|
|
871
|
+
i0.ɵɵelementEnd();
|
|
872
|
+
} }
|
|
873
|
+
function EntityFormComponentExtended_div_0_section_49_tr_19_span_16_Template(rf, ctx) { if (rf & 1) {
|
|
874
|
+
i0.ɵɵelementStart(0, "span", 229);
|
|
875
|
+
i0.ɵɵtext(1, "None");
|
|
876
|
+
i0.ɵɵelementEnd();
|
|
877
|
+
} }
|
|
878
|
+
function EntityFormComponentExtended_div_0_section_49_tr_19_Template(rf, ctx) { if (rf & 1) {
|
|
879
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 217);
|
|
880
|
+
i0.ɵɵtext(2);
|
|
881
|
+
i0.ɵɵelementEnd();
|
|
882
|
+
i0.ɵɵelementStart(3, "td", 210);
|
|
883
|
+
i0.ɵɵelement(4, "i", 218);
|
|
884
|
+
i0.ɵɵelementEnd();
|
|
885
|
+
i0.ɵɵelementStart(5, "td", 210);
|
|
886
|
+
i0.ɵɵelement(6, "i", 218);
|
|
887
|
+
i0.ɵɵelementEnd();
|
|
888
|
+
i0.ɵɵelementStart(7, "td", 210);
|
|
889
|
+
i0.ɵɵelement(8, "i", 218);
|
|
890
|
+
i0.ɵɵelementEnd();
|
|
891
|
+
i0.ɵɵelementStart(9, "td", 210);
|
|
892
|
+
i0.ɵɵelement(10, "i", 218);
|
|
893
|
+
i0.ɵɵelementEnd();
|
|
894
|
+
i0.ɵɵelementStart(11, "td", 219);
|
|
895
|
+
i0.ɵɵtemplate(12, EntityFormComponentExtended_div_0_section_49_tr_19_span_12_Template, 2, 0, "span", 220)(13, EntityFormComponentExtended_div_0_section_49_tr_19_span_13_Template, 2, 0, "span", 221)(14, EntityFormComponentExtended_div_0_section_49_tr_19_span_14_Template, 2, 0, "span", 222)(15, EntityFormComponentExtended_div_0_section_49_tr_19_span_15_Template, 2, 0, "span", 223)(16, EntityFormComponentExtended_div_0_section_49_tr_19_span_16_Template, 2, 0, "span", 224);
|
|
896
|
+
i0.ɵɵelementEnd()();
|
|
897
|
+
} if (rf & 2) {
|
|
898
|
+
const perm_r26 = ctx.$implicit;
|
|
899
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
900
|
+
i0.ɵɵadvance(2);
|
|
901
|
+
i0.ɵɵtextInterpolate(ctx_r1.getRoleName(perm_r26));
|
|
902
|
+
i0.ɵɵadvance(2);
|
|
903
|
+
i0.ɵɵproperty("ngClass", perm_r26.CanCreate ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
904
|
+
i0.ɵɵadvance(2);
|
|
905
|
+
i0.ɵɵproperty("ngClass", perm_r26.CanRead ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
906
|
+
i0.ɵɵadvance(2);
|
|
907
|
+
i0.ɵɵproperty("ngClass", perm_r26.CanUpdate ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
908
|
+
i0.ɵɵadvance(2);
|
|
909
|
+
i0.ɵɵproperty("ngClass", perm_r26.CanDelete ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
910
|
+
i0.ɵɵadvance(2);
|
|
911
|
+
i0.ɵɵproperty("ngIf", perm_r26.ReadRLSFilterID);
|
|
912
|
+
i0.ɵɵadvance();
|
|
913
|
+
i0.ɵɵproperty("ngIf", perm_r26.CreateRLSFilterID);
|
|
914
|
+
i0.ɵɵadvance();
|
|
915
|
+
i0.ɵɵproperty("ngIf", perm_r26.UpdateRLSFilterID);
|
|
916
|
+
i0.ɵɵadvance();
|
|
917
|
+
i0.ɵɵproperty("ngIf", perm_r26.DeleteRLSFilterID);
|
|
918
|
+
i0.ɵɵadvance();
|
|
919
|
+
i0.ɵɵproperty("ngIf", !perm_r26.ReadRLSFilterID && !perm_r26.CreateRLSFilterID && !perm_r26.UpdateRLSFilterID && !perm_r26.DeleteRLSFilterID);
|
|
920
|
+
} }
|
|
921
|
+
function EntityFormComponentExtended_div_0_section_49_div_20_Template(rf, ctx) { if (rf & 1) {
|
|
922
|
+
i0.ɵɵelementStart(0, "div", 200);
|
|
923
|
+
i0.ɵɵelement(1, "i", 21);
|
|
924
|
+
i0.ɵɵelementStart(2, "p");
|
|
925
|
+
i0.ɵɵtext(3, "No permissions configured");
|
|
926
|
+
i0.ɵɵelementEnd()();
|
|
927
|
+
} }
|
|
928
|
+
function EntityFormComponentExtended_div_0_section_49_Template(rf, ctx) { if (rf & 1) {
|
|
929
|
+
i0.ɵɵelementStart(0, "section", 207)(1, "div", 51)(2, "div", 208)(3, "table", 209)(4, "thead")(5, "tr")(6, "th");
|
|
930
|
+
i0.ɵɵtext(7, "Role");
|
|
931
|
+
i0.ɵɵelementEnd();
|
|
932
|
+
i0.ɵɵelementStart(8, "th", 210);
|
|
933
|
+
i0.ɵɵtext(9, "Create");
|
|
934
|
+
i0.ɵɵelementEnd();
|
|
935
|
+
i0.ɵɵelementStart(10, "th", 210);
|
|
936
|
+
i0.ɵɵtext(11, "Read");
|
|
937
|
+
i0.ɵɵelementEnd();
|
|
938
|
+
i0.ɵɵelementStart(12, "th", 210);
|
|
939
|
+
i0.ɵɵtext(13, "Update");
|
|
940
|
+
i0.ɵɵelementEnd();
|
|
941
|
+
i0.ɵɵelementStart(14, "th", 210);
|
|
942
|
+
i0.ɵɵtext(15, "Delete");
|
|
943
|
+
i0.ɵɵelementEnd();
|
|
944
|
+
i0.ɵɵelementStart(16, "th");
|
|
945
|
+
i0.ɵɵtext(17, "RLS");
|
|
946
|
+
i0.ɵɵelementEnd()()();
|
|
947
|
+
i0.ɵɵelementStart(18, "tbody");
|
|
948
|
+
i0.ɵɵtemplate(19, EntityFormComponentExtended_div_0_section_49_tr_19_Template, 17, 10, "tr", 211);
|
|
949
|
+
i0.ɵɵelementEnd()();
|
|
950
|
+
i0.ɵɵtemplate(20, EntityFormComponentExtended_div_0_section_49_div_20_Template, 4, 0, "div", 191);
|
|
951
|
+
i0.ɵɵelementEnd();
|
|
952
|
+
i0.ɵɵelementStart(21, "div", 212)(22, "h3", 67);
|
|
953
|
+
i0.ɵɵelement(23, "i", 213);
|
|
954
|
+
i0.ɵɵtext(24, " API Capabilities ");
|
|
955
|
+
i0.ɵɵelementEnd();
|
|
956
|
+
i0.ɵɵelementStart(25, "div", 214)(26, "div", 215);
|
|
957
|
+
i0.ɵɵelement(27, "i", 216);
|
|
958
|
+
i0.ɵɵelementStart(28, "span");
|
|
959
|
+
i0.ɵɵtext(29, "Include in API");
|
|
960
|
+
i0.ɵɵelementEnd()();
|
|
961
|
+
i0.ɵɵelementStart(30, "div", 215);
|
|
962
|
+
i0.ɵɵelement(31, "i", 216);
|
|
963
|
+
i0.ɵɵelementStart(32, "span");
|
|
964
|
+
i0.ɵɵtext(33, "Allow All Rows");
|
|
965
|
+
i0.ɵɵelementEnd()();
|
|
966
|
+
i0.ɵɵelementStart(34, "div", 215);
|
|
967
|
+
i0.ɵɵelement(35, "i", 216);
|
|
968
|
+
i0.ɵɵelementStart(36, "span");
|
|
969
|
+
i0.ɵɵtext(37, "Allow Create");
|
|
970
|
+
i0.ɵɵelementEnd()();
|
|
971
|
+
i0.ɵɵelementStart(38, "div", 215);
|
|
972
|
+
i0.ɵɵelement(39, "i", 216);
|
|
973
|
+
i0.ɵɵelementStart(40, "span");
|
|
974
|
+
i0.ɵɵtext(41, "Allow Update");
|
|
975
|
+
i0.ɵɵelementEnd()();
|
|
976
|
+
i0.ɵɵelementStart(42, "div", 215);
|
|
977
|
+
i0.ɵɵelement(43, "i", 216);
|
|
978
|
+
i0.ɵɵelementStart(44, "span");
|
|
979
|
+
i0.ɵɵtext(45, "Allow Delete");
|
|
980
|
+
i0.ɵɵelementEnd()();
|
|
981
|
+
i0.ɵɵelementStart(46, "div", 215);
|
|
982
|
+
i0.ɵɵelement(47, "i", 216);
|
|
983
|
+
i0.ɵɵelementStart(48, "span");
|
|
984
|
+
i0.ɵɵtext(49, "User Search");
|
|
985
|
+
i0.ɵɵelementEnd()();
|
|
986
|
+
i0.ɵɵelementStart(50, "div", 215);
|
|
987
|
+
i0.ɵɵelement(51, "i", 216);
|
|
988
|
+
i0.ɵɵelementStart(52, "span");
|
|
989
|
+
i0.ɵɵtext(53, "Custom Resolver");
|
|
990
|
+
i0.ɵɵelementEnd()()()()()();
|
|
991
|
+
} if (rf & 2) {
|
|
992
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
993
|
+
i0.ɵɵadvance(19);
|
|
994
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.entity.Permissions);
|
|
995
|
+
i0.ɵɵadvance();
|
|
996
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.Permissions.length === 0);
|
|
997
|
+
i0.ɵɵadvance(6);
|
|
998
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.IncludeInAPI);
|
|
999
|
+
i0.ɵɵadvance();
|
|
1000
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.IncludeInAPI ? "fa-check" : "fa-xmark");
|
|
1001
|
+
i0.ɵɵadvance(3);
|
|
1002
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.AllowAllRowsAPI);
|
|
1003
|
+
i0.ɵɵadvance();
|
|
1004
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.AllowAllRowsAPI ? "fa-check" : "fa-xmark");
|
|
1005
|
+
i0.ɵɵadvance(3);
|
|
1006
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.AllowCreateAPI);
|
|
1007
|
+
i0.ɵɵadvance();
|
|
1008
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.AllowCreateAPI ? "fa-check" : "fa-xmark");
|
|
1009
|
+
i0.ɵɵadvance(3);
|
|
1010
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.AllowUpdateAPI);
|
|
1011
|
+
i0.ɵɵadvance();
|
|
1012
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.AllowUpdateAPI ? "fa-check" : "fa-xmark");
|
|
1013
|
+
i0.ɵɵadvance(3);
|
|
1014
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.AllowDeleteAPI);
|
|
1015
|
+
i0.ɵɵadvance();
|
|
1016
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.AllowDeleteAPI ? "fa-check" : "fa-xmark");
|
|
1017
|
+
i0.ɵɵadvance(3);
|
|
1018
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.AllowUserSearchAPI);
|
|
1019
|
+
i0.ɵɵadvance();
|
|
1020
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.AllowUserSearchAPI ? "fa-check" : "fa-xmark");
|
|
1021
|
+
i0.ɵɵadvance(3);
|
|
1022
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.CustomResolverAPI);
|
|
1023
|
+
i0.ɵɵadvance();
|
|
1024
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.CustomResolverAPI ? "fa-check" : "fa-xmark");
|
|
1025
|
+
} }
|
|
1026
|
+
function EntityFormComponentExtended_div_0_section_50_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
1027
|
+
i0.ɵɵelementStart(0, "div", 234);
|
|
1028
|
+
i0.ɵɵelement(1, "i", 213);
|
|
1029
|
+
i0.ɵɵelementStart(2, "span");
|
|
1030
|
+
i0.ɵɵtext(3, "API Create");
|
|
1031
|
+
i0.ɵɵelementEnd()();
|
|
1032
|
+
} }
|
|
1033
|
+
function EntityFormComponentExtended_div_0_section_50_div_25_Template(rf, ctx) { if (rf & 1) {
|
|
1034
|
+
i0.ɵɵelementStart(0, "div", 234);
|
|
1035
|
+
i0.ɵɵelement(1, "i", 242);
|
|
1036
|
+
i0.ɵɵelementStart(2, "span");
|
|
1037
|
+
i0.ɵɵtext(3, "Record Changes");
|
|
1038
|
+
i0.ɵɵelementEnd()();
|
|
1039
|
+
} }
|
|
1040
|
+
function EntityFormComponentExtended_div_0_section_50_div_26_Template(rf, ctx) { if (rf & 1) {
|
|
1041
|
+
i0.ɵɵelementStart(0, "div", 234);
|
|
1042
|
+
i0.ɵɵelement(1, "i", 247);
|
|
1043
|
+
i0.ɵɵelementStart(2, "span");
|
|
1044
|
+
i0.ɵɵtext(3, "Access Audit");
|
|
1045
|
+
i0.ɵɵelementEnd()();
|
|
1046
|
+
} }
|
|
1047
|
+
function EntityFormComponentExtended_div_0_section_50_Template(rf, ctx) { if (rf & 1) {
|
|
1048
|
+
i0.ɵɵelementStart(0, "section", 230)(1, "div", 51)(2, "div", 231)(3, "div", 232)(4, "h4");
|
|
1049
|
+
i0.ɵɵtext(5, "Data Sources");
|
|
1050
|
+
i0.ɵɵelementEnd();
|
|
1051
|
+
i0.ɵɵelementStart(6, "div", 233)(7, "div", 234);
|
|
1052
|
+
i0.ɵɵelement(8, "i", 235);
|
|
1053
|
+
i0.ɵɵelementStart(9, "span");
|
|
1054
|
+
i0.ɵɵtext(10, "Manual Entry");
|
|
1055
|
+
i0.ɵɵelementEnd()();
|
|
1056
|
+
i0.ɵɵtemplate(11, EntityFormComponentExtended_div_0_section_50_div_11_Template, 4, 0, "div", 236);
|
|
1057
|
+
i0.ɵɵelementEnd()();
|
|
1058
|
+
i0.ɵɵelementStart(12, "div", 237);
|
|
1059
|
+
i0.ɵɵelement(13, "i", 60);
|
|
1060
|
+
i0.ɵɵelementEnd();
|
|
1061
|
+
i0.ɵɵelementStart(14, "div", 238)(15, "div", 239);
|
|
1062
|
+
i0.ɵɵelement(16, "i");
|
|
1063
|
+
i0.ɵɵelementStart(17, "span");
|
|
1064
|
+
i0.ɵɵtext(18);
|
|
1065
|
+
i0.ɵɵelementEnd()()();
|
|
1066
|
+
i0.ɵɵelementStart(19, "div", 237);
|
|
1067
|
+
i0.ɵɵelement(20, "i", 60);
|
|
1068
|
+
i0.ɵɵelementEnd();
|
|
1069
|
+
i0.ɵɵelementStart(21, "div", 240)(22, "h4");
|
|
1070
|
+
i0.ɵɵtext(23, "Data Sinks");
|
|
1071
|
+
i0.ɵɵelementEnd();
|
|
1072
|
+
i0.ɵɵelementStart(24, "div", 233);
|
|
1073
|
+
i0.ɵɵtemplate(25, EntityFormComponentExtended_div_0_section_50_div_25_Template, 4, 0, "div", 236)(26, EntityFormComponentExtended_div_0_section_50_div_26_Template, 4, 0, "div", 236);
|
|
1074
|
+
i0.ɵɵelementStart(27, "div", 234);
|
|
1075
|
+
i0.ɵɵelement(28, "i", 20);
|
|
1076
|
+
i0.ɵɵelementStart(29, "span");
|
|
1077
|
+
i0.ɵɵtext(30);
|
|
1078
|
+
i0.ɵɵelementEnd()()()()();
|
|
1079
|
+
i0.ɵɵelementStart(31, "div", 241)(32, "h3", 67);
|
|
1080
|
+
i0.ɵɵelement(33, "i", 242);
|
|
1081
|
+
i0.ɵɵtext(34, " Tracking Configuration ");
|
|
1082
|
+
i0.ɵɵelementEnd();
|
|
1083
|
+
i0.ɵɵelementStart(35, "div", 243)(36, "div", 244);
|
|
1084
|
+
i0.ɵɵelement(37, "i", 216);
|
|
1085
|
+
i0.ɵɵelementStart(38, "span");
|
|
1086
|
+
i0.ɵɵtext(39, "Track Record Changes");
|
|
1087
|
+
i0.ɵɵelementEnd()();
|
|
1088
|
+
i0.ɵɵelementStart(40, "div", 244);
|
|
1089
|
+
i0.ɵɵelement(41, "i", 216);
|
|
1090
|
+
i0.ɵɵelementStart(42, "span");
|
|
1091
|
+
i0.ɵɵtext(43, "Audit Record Access");
|
|
1092
|
+
i0.ɵɵelementEnd()();
|
|
1093
|
+
i0.ɵɵelementStart(44, "div", 244);
|
|
1094
|
+
i0.ɵɵelement(45, "i", 216);
|
|
1095
|
+
i0.ɵɵelementStart(46, "span");
|
|
1096
|
+
i0.ɵɵtext(47, "Audit View Runs");
|
|
1097
|
+
i0.ɵɵelementEnd()();
|
|
1098
|
+
i0.ɵɵelementStart(48, "div", 244)(49, "span", 245);
|
|
1099
|
+
i0.ɵɵtext(50, "Delete Type:");
|
|
1100
|
+
i0.ɵɵelementEnd();
|
|
1101
|
+
i0.ɵɵelementStart(51, "span", 246);
|
|
1102
|
+
i0.ɵɵtext(52);
|
|
1103
|
+
i0.ɵɵelementEnd()();
|
|
1104
|
+
i0.ɵɵelementStart(53, "div", 244);
|
|
1105
|
+
i0.ɵɵelement(54, "i", 216);
|
|
1106
|
+
i0.ɵɵelementStart(55, "span");
|
|
1107
|
+
i0.ɵɵtext(56, "Cascade Deletes");
|
|
1108
|
+
i0.ɵɵelementEnd()()()()()();
|
|
1109
|
+
} if (rf & 2) {
|
|
1110
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1111
|
+
i0.ɵɵadvance(11);
|
|
1112
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.IncludeInAPI);
|
|
1113
|
+
i0.ɵɵadvance(5);
|
|
1114
|
+
i0.ɵɵclassMap(ctx_r1.entityIcon);
|
|
1115
|
+
i0.ɵɵadvance(2);
|
|
1116
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.Name);
|
|
1117
|
+
i0.ɵɵadvance(7);
|
|
1118
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.TrackRecordChanges);
|
|
1119
|
+
i0.ɵɵadvance();
|
|
1120
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.AuditRecordAccess);
|
|
1121
|
+
i0.ɵɵadvance(4);
|
|
1122
|
+
i0.ɵɵtextInterpolate1("Related Entities (", ctx_r1.stats.relationshipCount, ")");
|
|
1123
|
+
i0.ɵɵadvance(6);
|
|
1124
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.TrackRecordChanges);
|
|
1125
|
+
i0.ɵɵadvance();
|
|
1126
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.TrackRecordChanges ? "fa-check" : "fa-xmark");
|
|
1127
|
+
i0.ɵɵadvance(3);
|
|
1128
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.AuditRecordAccess);
|
|
1129
|
+
i0.ɵɵadvance();
|
|
1130
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.AuditRecordAccess ? "fa-check" : "fa-xmark");
|
|
1131
|
+
i0.ɵɵadvance(3);
|
|
1132
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.AuditViewRuns);
|
|
1133
|
+
i0.ɵɵadvance();
|
|
1134
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.AuditViewRuns ? "fa-check" : "fa-xmark");
|
|
1135
|
+
i0.ɵɵadvance(7);
|
|
1136
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.DeleteType);
|
|
1137
|
+
i0.ɵɵadvance();
|
|
1138
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.CascadeDeletes);
|
|
1139
|
+
i0.ɵɵadvance();
|
|
1140
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.CascadeDeletes ? "fa-check" : "fa-xmark");
|
|
1141
|
+
} }
|
|
1142
|
+
function EntityFormComponentExtended_div_0_section_51_p_15_Template(rf, ctx) { if (rf & 1) {
|
|
1143
|
+
i0.ɵɵelementStart(0, "p");
|
|
1144
|
+
i0.ɵɵtext(1, " This entity has change tracking enabled. All modifications to records are stored in the ");
|
|
1145
|
+
i0.ɵɵelementStart(2, "code");
|
|
1146
|
+
i0.ɵɵtext(3, "RecordChange");
|
|
1147
|
+
i0.ɵɵelementEnd();
|
|
1148
|
+
i0.ɵɵtext(4, " table, including the user who made the change, timestamp, and the before/after values. ");
|
|
1149
|
+
i0.ɵɵelementEnd();
|
|
1150
|
+
} }
|
|
1151
|
+
function EntityFormComponentExtended_div_0_section_51_p_16_Template(rf, ctx) { if (rf & 1) {
|
|
1152
|
+
i0.ɵɵelementStart(0, "p");
|
|
1153
|
+
i0.ɵɵtext(1, " This entity does not have change tracking enabled. To enable it, set ");
|
|
1154
|
+
i0.ɵɵelementStart(2, "code");
|
|
1155
|
+
i0.ɵɵtext(3, "TrackRecordChanges");
|
|
1156
|
+
i0.ɵɵelementEnd();
|
|
1157
|
+
i0.ɵɵtext(4, " to ");
|
|
1158
|
+
i0.ɵɵelementStart(5, "code");
|
|
1159
|
+
i0.ɵɵtext(6, "true");
|
|
1160
|
+
i0.ɵɵelementEnd();
|
|
1161
|
+
i0.ɵɵtext(7, " in the entity metadata. ");
|
|
1162
|
+
i0.ɵɵelementEnd();
|
|
1163
|
+
} }
|
|
1164
|
+
function EntityFormComponentExtended_div_0_section_51_div_17_li_13_Template(rf, ctx) { if (rf & 1) {
|
|
1165
|
+
i0.ɵɵelementStart(0, "li")(1, "code");
|
|
1166
|
+
i0.ɵɵtext(2, "__mj_DeletedAt");
|
|
1167
|
+
i0.ɵɵelementEnd();
|
|
1168
|
+
i0.ɵɵtext(3, " - Soft delete timestamp (when applicable) ");
|
|
1169
|
+
i0.ɵɵelementEnd();
|
|
1170
|
+
} }
|
|
1171
|
+
function EntityFormComponentExtended_div_0_section_51_div_17_Template(rf, ctx) { if (rf & 1) {
|
|
1172
|
+
i0.ɵɵelementStart(0, "div", 253)(1, "h4");
|
|
1173
|
+
i0.ɵɵelement(2, "i", 23);
|
|
1174
|
+
i0.ɵɵtext(3, " Audit Fields ");
|
|
1175
|
+
i0.ɵɵelementEnd();
|
|
1176
|
+
i0.ɵɵelementStart(4, "ul", 256)(5, "li")(6, "code");
|
|
1177
|
+
i0.ɵɵtext(7, "__mj_CreatedAt");
|
|
1178
|
+
i0.ɵɵelementEnd();
|
|
1179
|
+
i0.ɵɵtext(8, " - Record creation timestamp ");
|
|
1180
|
+
i0.ɵɵelementEnd();
|
|
1181
|
+
i0.ɵɵelementStart(9, "li")(10, "code");
|
|
1182
|
+
i0.ɵɵtext(11, "__mj_UpdatedAt");
|
|
1183
|
+
i0.ɵɵelementEnd();
|
|
1184
|
+
i0.ɵɵtext(12, " - Last modification timestamp ");
|
|
1185
|
+
i0.ɵɵelementEnd();
|
|
1186
|
+
i0.ɵɵtemplate(13, EntityFormComponentExtended_div_0_section_51_div_17_li_13_Template, 4, 0, "li", 39);
|
|
1187
|
+
i0.ɵɵelementEnd()();
|
|
1188
|
+
} if (rf & 2) {
|
|
1189
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1190
|
+
i0.ɵɵadvance(13);
|
|
1191
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.DeleteType === "Soft");
|
|
1192
|
+
} }
|
|
1193
|
+
function EntityFormComponentExtended_div_0_section_51_Template(rf, ctx) { if (rf & 1) {
|
|
1194
|
+
i0.ɵɵelementStart(0, "section", 248)(1, "div", 51)(2, "div", 249)(3, "div", 250);
|
|
1195
|
+
i0.ɵɵelement(4, "i", 216);
|
|
1196
|
+
i0.ɵɵelementStart(5, "div", 251)(6, "strong");
|
|
1197
|
+
i0.ɵɵtext(7, "Record Change Tracking");
|
|
1198
|
+
i0.ɵɵelementEnd();
|
|
1199
|
+
i0.ɵɵelementStart(8, "span");
|
|
1200
|
+
i0.ɵɵtext(9);
|
|
1201
|
+
i0.ɵɵelementEnd()()()();
|
|
1202
|
+
i0.ɵɵelementStart(10, "div", 252)(11, "div", 253)(12, "h4");
|
|
1203
|
+
i0.ɵɵelement(13, "i", 254);
|
|
1204
|
+
i0.ɵɵtext(14, " About Change Tracking ");
|
|
1205
|
+
i0.ɵɵelementEnd();
|
|
1206
|
+
i0.ɵɵtemplate(15, EntityFormComponentExtended_div_0_section_51_p_15_Template, 5, 0, "p", 39)(16, EntityFormComponentExtended_div_0_section_51_p_16_Template, 8, 0, "p", 39);
|
|
1207
|
+
i0.ɵɵelementEnd();
|
|
1208
|
+
i0.ɵɵtemplate(17, EntityFormComponentExtended_div_0_section_51_div_17_Template, 14, 1, "div", 255);
|
|
1209
|
+
i0.ɵɵelementEnd()()();
|
|
1210
|
+
} if (rf & 2) {
|
|
1211
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1212
|
+
i0.ɵɵadvance(3);
|
|
1213
|
+
i0.ɵɵclassProp("enabled", ctx_r1.entity.TrackRecordChanges);
|
|
1214
|
+
i0.ɵɵadvance();
|
|
1215
|
+
i0.ɵɵproperty("ngClass", ctx_r1.entity.TrackRecordChanges ? "fa-circle-check" : "fa-circle-xmark");
|
|
1216
|
+
i0.ɵɵadvance(5);
|
|
1217
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.TrackRecordChanges ? "Enabled - All changes are recorded" : "Disabled - Changes are not tracked");
|
|
1218
|
+
i0.ɵɵadvance(6);
|
|
1219
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.TrackRecordChanges);
|
|
1220
|
+
i0.ɵɵadvance();
|
|
1221
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.entity.TrackRecordChanges);
|
|
1222
|
+
i0.ɵɵadvance();
|
|
1223
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.TrackRecordChanges);
|
|
1224
|
+
} }
|
|
1225
|
+
function EntityFormComponentExtended_div_0_section_52_div_6_div_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {
|
|
1226
|
+
i0.ɵɵelementContainerStart(0);
|
|
1227
|
+
i0.ɵɵelementStart(1, "div", 272);
|
|
1228
|
+
i0.ɵɵelement(2, "mj-code-editor", 273);
|
|
1229
|
+
i0.ɵɵelementEnd();
|
|
1230
|
+
i0.ɵɵelementContainerEnd();
|
|
1231
|
+
} if (rf & 2) {
|
|
1232
|
+
const setting_r27 = i0.ɵɵnextContext().$implicit;
|
|
1233
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1234
|
+
i0.ɵɵadvance(2);
|
|
1235
|
+
i0.ɵɵproperty("value", ctx_r1.formatJsonValue(setting_r27.Value))("readonly", true)("lineWrapping", true);
|
|
1236
|
+
} }
|
|
1237
|
+
function EntityFormComponentExtended_div_0_section_52_div_6_div_1_ng_template_4_Template(rf, ctx) { if (rf & 1) {
|
|
1238
|
+
i0.ɵɵelementStart(0, "div", 274);
|
|
1239
|
+
i0.ɵɵtext(1);
|
|
1240
|
+
i0.ɵɵelementEnd();
|
|
1241
|
+
} if (rf & 2) {
|
|
1242
|
+
const setting_r27 = i0.ɵɵnextContext().$implicit;
|
|
1243
|
+
i0.ɵɵadvance();
|
|
1244
|
+
i0.ɵɵtextInterpolate(setting_r27.Value);
|
|
1245
|
+
} }
|
|
1246
|
+
function EntityFormComponentExtended_div_0_section_52_div_6_div_1_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
1247
|
+
i0.ɵɵelementStart(0, "div", 275);
|
|
1248
|
+
i0.ɵɵtext(1);
|
|
1249
|
+
i0.ɵɵelementEnd();
|
|
1250
|
+
} if (rf & 2) {
|
|
1251
|
+
const setting_r27 = i0.ɵɵnextContext().$implicit;
|
|
1252
|
+
i0.ɵɵadvance();
|
|
1253
|
+
i0.ɵɵtextInterpolate(setting_r27.Comments);
|
|
1254
|
+
} }
|
|
1255
|
+
function EntityFormComponentExtended_div_0_section_52_div_6_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
1256
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "div", 269);
|
|
1257
|
+
i0.ɵɵtext(2);
|
|
1258
|
+
i0.ɵɵelementEnd();
|
|
1259
|
+
i0.ɵɵtemplate(3, EntityFormComponentExtended_div_0_section_52_div_6_div_1_ng_container_3_Template, 3, 3, "ng-container", 270)(4, EntityFormComponentExtended_div_0_section_52_div_6_div_1_ng_template_4_Template, 2, 1, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(6, EntityFormComponentExtended_div_0_section_52_div_6_div_1_div_6_Template, 2, 1, "div", 271);
|
|
1260
|
+
i0.ɵɵelementEnd();
|
|
1261
|
+
} if (rf & 2) {
|
|
1262
|
+
const setting_r27 = ctx.$implicit;
|
|
1263
|
+
const plainValue_r28 = i0.ɵɵreference(5);
|
|
1264
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1265
|
+
i0.ɵɵadvance(2);
|
|
1266
|
+
i0.ɵɵtextInterpolate(setting_r27.Name);
|
|
1267
|
+
i0.ɵɵadvance();
|
|
1268
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isJsonValue(setting_r27.Value))("ngIfElse", plainValue_r28);
|
|
1269
|
+
i0.ɵɵadvance(3);
|
|
1270
|
+
i0.ɵɵproperty("ngIf", setting_r27.Comments);
|
|
1271
|
+
} }
|
|
1272
|
+
function EntityFormComponentExtended_div_0_section_52_div_6_Template(rf, ctx) { if (rf & 1) {
|
|
1273
|
+
i0.ɵɵelementStart(0, "div", 266);
|
|
1274
|
+
i0.ɵɵtemplate(1, EntityFormComponentExtended_div_0_section_52_div_6_div_1_Template, 7, 4, "div", 267);
|
|
1275
|
+
i0.ɵɵelementEnd();
|
|
1276
|
+
} if (rf & 2) {
|
|
1277
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1278
|
+
i0.ɵɵadvance();
|
|
1279
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.entity.Settings);
|
|
1280
|
+
} }
|
|
1281
|
+
function EntityFormComponentExtended_div_0_section_52_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
1282
|
+
i0.ɵɵelementStart(0, "div", 200)(1, "p");
|
|
1283
|
+
i0.ɵɵtext(2, "No custom settings configured");
|
|
1284
|
+
i0.ɵɵelementEnd()();
|
|
1285
|
+
} }
|
|
1286
|
+
function EntityFormComponentExtended_div_0_section_52_div_12_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
1287
|
+
i0.ɵɵelementStart(0, "div", 264)(1, "span", 245);
|
|
1288
|
+
i0.ɵɵtext(2, "Catalog");
|
|
1289
|
+
i0.ɵɵelementEnd();
|
|
1290
|
+
i0.ɵɵelementStart(3, "span", 279);
|
|
1291
|
+
i0.ɵɵtext(4);
|
|
1292
|
+
i0.ɵɵelementEnd()();
|
|
1293
|
+
} if (rf & 2) {
|
|
1294
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1295
|
+
i0.ɵɵadvance(4);
|
|
1296
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.FullTextCatalog);
|
|
1297
|
+
} }
|
|
1298
|
+
function EntityFormComponentExtended_div_0_section_52_div_12_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
1299
|
+
i0.ɵɵelementStart(0, "div", 264)(1, "span", 245);
|
|
1300
|
+
i0.ɵɵtext(2, "Index");
|
|
1301
|
+
i0.ɵɵelementEnd();
|
|
1302
|
+
i0.ɵɵelementStart(3, "span", 279);
|
|
1303
|
+
i0.ɵɵtext(4);
|
|
1304
|
+
i0.ɵɵelementEnd()();
|
|
1305
|
+
} if (rf & 2) {
|
|
1306
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1307
|
+
i0.ɵɵadvance(4);
|
|
1308
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.FullTextIndex);
|
|
1309
|
+
} }
|
|
1310
|
+
function EntityFormComponentExtended_div_0_section_52_div_12_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
1311
|
+
i0.ɵɵelementStart(0, "div", 264)(1, "span", 245);
|
|
1312
|
+
i0.ɵɵtext(2, "Function");
|
|
1313
|
+
i0.ɵɵelementEnd();
|
|
1314
|
+
i0.ɵɵelementStart(3, "span", 279);
|
|
1315
|
+
i0.ɵɵtext(4);
|
|
1316
|
+
i0.ɵɵelementEnd()();
|
|
1317
|
+
} if (rf & 2) {
|
|
1318
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1319
|
+
i0.ɵɵadvance(4);
|
|
1320
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.FullTextSearchFunction);
|
|
1321
|
+
} }
|
|
1322
|
+
function EntityFormComponentExtended_div_0_section_52_div_12_Template(rf, ctx) { if (rf & 1) {
|
|
1323
|
+
i0.ɵɵelementStart(0, "div", 276)(1, "div", 264)(2, "span", 245);
|
|
1324
|
+
i0.ɵɵtext(3, "Status");
|
|
1325
|
+
i0.ɵɵelementEnd();
|
|
1326
|
+
i0.ɵɵelementStart(4, "span", 277);
|
|
1327
|
+
i0.ɵɵelement(5, "i", 278);
|
|
1328
|
+
i0.ɵɵtext(6, " Enabled ");
|
|
1329
|
+
i0.ɵɵelementEnd()();
|
|
1330
|
+
i0.ɵɵtemplate(7, EntityFormComponentExtended_div_0_section_52_div_12_div_7_Template, 5, 1, "div", 265)(8, EntityFormComponentExtended_div_0_section_52_div_12_div_8_Template, 5, 1, "div", 265)(9, EntityFormComponentExtended_div_0_section_52_div_12_div_9_Template, 5, 1, "div", 265);
|
|
1331
|
+
i0.ɵɵelementEnd();
|
|
1332
|
+
} if (rf & 2) {
|
|
1333
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1334
|
+
i0.ɵɵadvance(7);
|
|
1335
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.FullTextCatalog);
|
|
1336
|
+
i0.ɵɵadvance();
|
|
1337
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.FullTextIndex);
|
|
1338
|
+
i0.ɵɵadvance();
|
|
1339
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.FullTextSearchFunction);
|
|
1340
|
+
} }
|
|
1341
|
+
function EntityFormComponentExtended_div_0_section_52_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
1342
|
+
i0.ɵɵelementStart(0, "div", 200)(1, "p");
|
|
1343
|
+
i0.ɵɵtext(2, "Full-text search is not enabled for this entity");
|
|
1344
|
+
i0.ɵɵelementEnd()();
|
|
1345
|
+
} }
|
|
1346
|
+
function EntityFormComponentExtended_div_0_section_52_div_24_Template(rf, ctx) { if (rf & 1) {
|
|
1347
|
+
i0.ɵɵelementStart(0, "div", 264)(1, "span", 245);
|
|
1348
|
+
i0.ɵɵtext(2, "Sample Count");
|
|
1349
|
+
i0.ɵɵelementEnd();
|
|
1350
|
+
i0.ɵɵelementStart(3, "span", 246);
|
|
1351
|
+
i0.ɵɵtext(4);
|
|
1352
|
+
i0.ɵɵelementEnd()();
|
|
1353
|
+
} if (rf & 2) {
|
|
1354
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1355
|
+
i0.ɵɵadvance(4);
|
|
1356
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.RowsToPackSampleCount);
|
|
1357
|
+
} }
|
|
1358
|
+
function EntityFormComponentExtended_div_0_section_52_div_25_Template(rf, ctx) { if (rf & 1) {
|
|
1359
|
+
i0.ɵɵelementStart(0, "div", 264)(1, "span", 245);
|
|
1360
|
+
i0.ɵɵtext(2, "Sample Method");
|
|
1361
|
+
i0.ɵɵelementEnd();
|
|
1362
|
+
i0.ɵɵelementStart(3, "span", 246);
|
|
1363
|
+
i0.ɵɵtext(4);
|
|
1364
|
+
i0.ɵɵelementEnd()();
|
|
1365
|
+
} if (rf & 2) {
|
|
1366
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1367
|
+
i0.ɵɵadvance(4);
|
|
1368
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.RowsToPackSampleMethod);
|
|
1369
|
+
} }
|
|
1370
|
+
function EntityFormComponentExtended_div_0_section_52_Template(rf, ctx) { if (rf & 1) {
|
|
1371
|
+
i0.ɵɵelementStart(0, "section", 257)(1, "div", 51)(2, "div", 258)(3, "h3", 67);
|
|
1372
|
+
i0.ɵɵelement(4, "i", 259);
|
|
1373
|
+
i0.ɵɵtext(5, " Entity Settings ");
|
|
1374
|
+
i0.ɵɵelementEnd();
|
|
1375
|
+
i0.ɵɵtemplate(6, EntityFormComponentExtended_div_0_section_52_div_6_Template, 2, 1, "div", 260)(7, EntityFormComponentExtended_div_0_section_52_div_7_Template, 3, 0, "div", 191);
|
|
1376
|
+
i0.ɵɵelementEnd();
|
|
1377
|
+
i0.ɵɵelementStart(8, "div", 258)(9, "h3", 67);
|
|
1378
|
+
i0.ɵɵelement(10, "i", 261);
|
|
1379
|
+
i0.ɵɵtext(11, " Full-Text Search ");
|
|
1380
|
+
i0.ɵɵelementEnd();
|
|
1381
|
+
i0.ɵɵtemplate(12, EntityFormComponentExtended_div_0_section_52_div_12_Template, 10, 3, "div", 262)(13, EntityFormComponentExtended_div_0_section_52_div_13_Template, 3, 0, "div", 191);
|
|
1382
|
+
i0.ɵɵelementEnd();
|
|
1383
|
+
i0.ɵɵelementStart(14, "div", 258)(15, "h3", 67);
|
|
1384
|
+
i0.ɵɵelement(16, "i", 263);
|
|
1385
|
+
i0.ɵɵtext(17, " Schema Packaging ");
|
|
1386
|
+
i0.ɵɵelementEnd();
|
|
1387
|
+
i0.ɵɵelementStart(18, "div", 243)(19, "div", 264)(20, "span", 245);
|
|
1388
|
+
i0.ɵɵtext(21, "Rows to Pack");
|
|
1389
|
+
i0.ɵɵelementEnd();
|
|
1390
|
+
i0.ɵɵelementStart(22, "span", 246);
|
|
1391
|
+
i0.ɵɵtext(23);
|
|
1392
|
+
i0.ɵɵelementEnd()();
|
|
1393
|
+
i0.ɵɵtemplate(24, EntityFormComponentExtended_div_0_section_52_div_24_Template, 5, 1, "div", 265)(25, EntityFormComponentExtended_div_0_section_52_div_25_Template, 5, 1, "div", 265);
|
|
1394
|
+
i0.ɵɵelementEnd()()()();
|
|
1395
|
+
} if (rf & 2) {
|
|
1396
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1397
|
+
i0.ɵɵadvance(6);
|
|
1398
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.Settings.length > 0);
|
|
1399
|
+
i0.ɵɵadvance();
|
|
1400
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.Settings.length === 0);
|
|
1401
|
+
i0.ɵɵadvance(5);
|
|
1402
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.FullTextSearchEnabled);
|
|
1403
|
+
i0.ɵɵadvance();
|
|
1404
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.entity.FullTextSearchEnabled);
|
|
1405
|
+
i0.ɵɵadvance(10);
|
|
1406
|
+
i0.ɵɵtextInterpolate(ctx_r1.entity.RowsToPackWithSchema || "None");
|
|
1407
|
+
i0.ɵɵadvance();
|
|
1408
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.RowsToPackSampleCount);
|
|
1409
|
+
i0.ɵɵadvance();
|
|
1410
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.RowsToPackSampleMethod);
|
|
1411
|
+
} }
|
|
1412
|
+
function EntityFormComponentExtended_div_0_h3_55_Template(rf, ctx) { if (rf & 1) {
|
|
1413
|
+
i0.ɵɵelementStart(0, "h3");
|
|
1414
|
+
i0.ɵɵtext(1, "Field Details");
|
|
1415
|
+
i0.ɵɵelementEnd();
|
|
1416
|
+
} }
|
|
1417
|
+
function EntityFormComponentExtended_div_0_h3_56_Template(rf, ctx) { if (rf & 1) {
|
|
1418
|
+
i0.ɵɵelementStart(0, "h3");
|
|
1419
|
+
i0.ɵɵtext(1, "Relationship Details");
|
|
1420
|
+
i0.ɵɵelementEnd();
|
|
1421
|
+
} }
|
|
1422
|
+
function EntityFormComponentExtended_div_0_div_59_p_4_Template(rf, ctx) { if (rf & 1) {
|
|
1423
|
+
i0.ɵɵelementStart(0, "p", 290);
|
|
1424
|
+
i0.ɵɵtext(1);
|
|
1425
|
+
i0.ɵɵelementEnd();
|
|
1426
|
+
} if (rf & 2) {
|
|
1427
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1428
|
+
i0.ɵɵadvance();
|
|
1429
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.Description);
|
|
1430
|
+
} }
|
|
1431
|
+
function EntityFormComponentExtended_div_0_div_59_div_24_Template(rf, ctx) { if (rf & 1) {
|
|
1432
|
+
i0.ɵɵelementStart(0, "div", 284)(1, "span", 285);
|
|
1433
|
+
i0.ɵɵtext(2, "Default");
|
|
1434
|
+
i0.ɵɵelementEnd();
|
|
1435
|
+
i0.ɵɵelementStart(3, "span", 286);
|
|
1436
|
+
i0.ɵɵtext(4);
|
|
1437
|
+
i0.ɵɵelementEnd()();
|
|
1438
|
+
} if (rf & 2) {
|
|
1439
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1440
|
+
i0.ɵɵadvance(4);
|
|
1441
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.DefaultValue);
|
|
1442
|
+
} }
|
|
1443
|
+
function EntityFormComponentExtended_div_0_div_59_div_25_Template(rf, ctx) { if (rf & 1) {
|
|
1444
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
1445
|
+
i0.ɵɵelementStart(0, "div", 281)(1, "h5");
|
|
1446
|
+
i0.ɵɵtext(2, "Relationship");
|
|
1447
|
+
i0.ɵɵelementEnd();
|
|
1448
|
+
i0.ɵɵelementStart(3, "div", 283)(4, "div", 284)(5, "span", 285);
|
|
1449
|
+
i0.ɵɵtext(6, "Related Entity");
|
|
1450
|
+
i0.ɵɵelementEnd();
|
|
1451
|
+
i0.ɵɵelementStart(7, "span", 291);
|
|
1452
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_div_59_div_25_Template_span_click_7_listener() { i0.ɵɵrestoreView(_r29); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.navigateToRelatedEntity(ctx_r1.selectedField)); });
|
|
1453
|
+
i0.ɵɵtext(8);
|
|
1454
|
+
i0.ɵɵelement(9, "i", 60);
|
|
1455
|
+
i0.ɵɵelementEnd()();
|
|
1456
|
+
i0.ɵɵelementStart(10, "div", 284)(11, "span", 285);
|
|
1457
|
+
i0.ɵɵtext(12, "Display Type");
|
|
1458
|
+
i0.ɵɵelementEnd();
|
|
1459
|
+
i0.ɵɵelementStart(13, "span", 287);
|
|
1460
|
+
i0.ɵɵtext(14);
|
|
1461
|
+
i0.ɵɵelementEnd()()()();
|
|
1462
|
+
} if (rf & 2) {
|
|
1463
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1464
|
+
i0.ɵɵadvance(8);
|
|
1465
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.getRelatedEntityName(ctx_r1.selectedField), " ");
|
|
1466
|
+
i0.ɵɵadvance(6);
|
|
1467
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.RelatedEntityDisplayType);
|
|
1468
|
+
} }
|
|
1469
|
+
function EntityFormComponentExtended_div_0_div_59_div_26_Template(rf, ctx) { if (rf & 1) {
|
|
1470
|
+
i0.ɵɵelementStart(0, "div", 281)(1, "h5");
|
|
1471
|
+
i0.ɵɵtext(2, "Encryption");
|
|
1472
|
+
i0.ɵɵelementEnd();
|
|
1473
|
+
i0.ɵɵelementStart(3, "div", 283)(4, "div", 284)(5, "span", 285);
|
|
1474
|
+
i0.ɵɵtext(6, "Encrypted");
|
|
1475
|
+
i0.ɵɵelementEnd();
|
|
1476
|
+
i0.ɵɵelementStart(7, "span", 287);
|
|
1477
|
+
i0.ɵɵtext(8, "Yes");
|
|
1478
|
+
i0.ɵɵelementEnd()();
|
|
1479
|
+
i0.ɵɵelementStart(9, "div", 284)(10, "span", 285);
|
|
1480
|
+
i0.ɵɵtext(11, "Decrypt in API");
|
|
1481
|
+
i0.ɵɵelementEnd();
|
|
1482
|
+
i0.ɵɵelementStart(12, "span", 287);
|
|
1483
|
+
i0.ɵɵtext(13);
|
|
1484
|
+
i0.ɵɵelementEnd()()()();
|
|
1485
|
+
} if (rf & 2) {
|
|
1486
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1487
|
+
i0.ɵɵadvance(13);
|
|
1488
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.AllowDecryptInAPI ? "Yes" : "No");
|
|
1489
|
+
} }
|
|
1490
|
+
function EntityFormComponentExtended_div_0_div_59_div_60_Template(rf, ctx) { if (rf & 1) {
|
|
1491
|
+
i0.ɵɵelementStart(0, "div", 284)(1, "span", 285);
|
|
1492
|
+
i0.ɵɵtext(2, "Category");
|
|
1493
|
+
i0.ɵɵelementEnd();
|
|
1494
|
+
i0.ɵɵelementStart(3, "span", 287);
|
|
1495
|
+
i0.ɵɵtext(4);
|
|
1496
|
+
i0.ɵɵelementEnd()();
|
|
1497
|
+
} if (rf & 2) {
|
|
1498
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1499
|
+
i0.ɵɵadvance(4);
|
|
1500
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.Category);
|
|
1501
|
+
} }
|
|
1502
|
+
function EntityFormComponentExtended_div_0_div_59_div_66_div_4_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
1503
|
+
i0.ɵɵelementStart(0, "span", 297);
|
|
1504
|
+
i0.ɵɵtext(1);
|
|
1505
|
+
i0.ɵɵelementEnd();
|
|
1506
|
+
} if (rf & 2) {
|
|
1507
|
+
const val_r30 = i0.ɵɵnextContext().$implicit;
|
|
1508
|
+
i0.ɵɵadvance();
|
|
1509
|
+
i0.ɵɵtextInterpolate(val_r30.Code);
|
|
1510
|
+
} }
|
|
1511
|
+
function EntityFormComponentExtended_div_0_div_59_div_66_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
1512
|
+
i0.ɵɵelementStart(0, "div", 294);
|
|
1513
|
+
i0.ɵɵtemplate(1, EntityFormComponentExtended_div_0_div_59_div_66_div_4_span_1_Template, 2, 1, "span", 295);
|
|
1514
|
+
i0.ɵɵelementStart(2, "span", 296);
|
|
1515
|
+
i0.ɵɵtext(3);
|
|
1516
|
+
i0.ɵɵelementEnd()();
|
|
1517
|
+
} if (rf & 2) {
|
|
1518
|
+
const val_r30 = ctx.$implicit;
|
|
1519
|
+
i0.ɵɵadvance();
|
|
1520
|
+
i0.ɵɵproperty("ngIf", val_r30.Code !== val_r30.Value);
|
|
1521
|
+
i0.ɵɵadvance(2);
|
|
1522
|
+
i0.ɵɵtextInterpolate(val_r30.Value);
|
|
1523
|
+
} }
|
|
1524
|
+
function EntityFormComponentExtended_div_0_div_59_div_66_Template(rf, ctx) { if (rf & 1) {
|
|
1525
|
+
i0.ɵɵelementStart(0, "div", 281)(1, "h5");
|
|
1526
|
+
i0.ɵɵtext(2, "Allowed Values");
|
|
1527
|
+
i0.ɵɵelementEnd();
|
|
1528
|
+
i0.ɵɵelementStart(3, "div", 292);
|
|
1529
|
+
i0.ɵɵtemplate(4, EntityFormComponentExtended_div_0_div_59_div_66_div_4_Template, 4, 2, "div", 293);
|
|
1530
|
+
i0.ɵɵelementEnd()();
|
|
1531
|
+
} if (rf & 2) {
|
|
1532
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1533
|
+
i0.ɵɵadvance(4);
|
|
1534
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.selectedField.EntityFieldValues);
|
|
1535
|
+
} }
|
|
1536
|
+
function EntityFormComponentExtended_div_0_div_59_Template(rf, ctx) { if (rf & 1) {
|
|
1537
|
+
i0.ɵɵelementStart(0, "div", 280)(1, "div", 281)(2, "h4");
|
|
1538
|
+
i0.ɵɵtext(3);
|
|
1539
|
+
i0.ɵɵelementEnd();
|
|
1540
|
+
i0.ɵɵtemplate(4, EntityFormComponentExtended_div_0_div_59_p_4_Template, 2, 1, "p", 282);
|
|
1541
|
+
i0.ɵɵelementEnd();
|
|
1542
|
+
i0.ɵɵelementStart(5, "div", 281)(6, "h5");
|
|
1543
|
+
i0.ɵɵtext(7, "Type Information");
|
|
1544
|
+
i0.ɵɵelementEnd();
|
|
1545
|
+
i0.ɵɵelementStart(8, "div", 283)(9, "div", 284)(10, "span", 285);
|
|
1546
|
+
i0.ɵɵtext(11, "SQL Type");
|
|
1547
|
+
i0.ɵɵelementEnd();
|
|
1548
|
+
i0.ɵɵelementStart(12, "span", 286);
|
|
1549
|
+
i0.ɵɵtext(13);
|
|
1550
|
+
i0.ɵɵelementEnd()();
|
|
1551
|
+
i0.ɵɵelementStart(14, "div", 284)(15, "span", 285);
|
|
1552
|
+
i0.ɵɵtext(16, "TypeScript Type");
|
|
1553
|
+
i0.ɵɵelementEnd();
|
|
1554
|
+
i0.ɵɵelementStart(17, "span", 286);
|
|
1555
|
+
i0.ɵɵtext(18);
|
|
1556
|
+
i0.ɵɵelementEnd()();
|
|
1557
|
+
i0.ɵɵelementStart(19, "div", 284)(20, "span", 285);
|
|
1558
|
+
i0.ɵɵtext(21, "Nullable");
|
|
1559
|
+
i0.ɵɵelementEnd();
|
|
1560
|
+
i0.ɵɵelementStart(22, "span", 287);
|
|
1561
|
+
i0.ɵɵtext(23);
|
|
1562
|
+
i0.ɵɵelementEnd()();
|
|
1563
|
+
i0.ɵɵtemplate(24, EntityFormComponentExtended_div_0_div_59_div_24_Template, 5, 1, "div", 288);
|
|
1564
|
+
i0.ɵɵelementEnd()();
|
|
1565
|
+
i0.ɵɵtemplate(25, EntityFormComponentExtended_div_0_div_59_div_25_Template, 15, 2, "div", 289)(26, EntityFormComponentExtended_div_0_div_59_div_26_Template, 14, 1, "div", 289);
|
|
1566
|
+
i0.ɵɵelementStart(27, "div", 281)(28, "h5");
|
|
1567
|
+
i0.ɵɵtext(29, "API Settings");
|
|
1568
|
+
i0.ɵɵelementEnd();
|
|
1569
|
+
i0.ɵɵelementStart(30, "div", 283)(31, "div", 284)(32, "span", 285);
|
|
1570
|
+
i0.ɵɵtext(33, "Allow Update");
|
|
1571
|
+
i0.ɵɵelementEnd();
|
|
1572
|
+
i0.ɵɵelementStart(34, "span", 287);
|
|
1573
|
+
i0.ɵɵtext(35);
|
|
1574
|
+
i0.ɵɵelementEnd()();
|
|
1575
|
+
i0.ɵɵelementStart(36, "div", 284)(37, "span", 285);
|
|
1576
|
+
i0.ɵɵtext(38, "Include in Search");
|
|
1577
|
+
i0.ɵɵelementEnd();
|
|
1578
|
+
i0.ɵɵelementStart(39, "span", 287);
|
|
1579
|
+
i0.ɵɵtext(40);
|
|
1580
|
+
i0.ɵɵelementEnd()();
|
|
1581
|
+
i0.ɵɵelementStart(41, "div", 284)(42, "span", 285);
|
|
1582
|
+
i0.ɵɵtext(43, "Full-Text Search");
|
|
1583
|
+
i0.ɵɵelementEnd();
|
|
1584
|
+
i0.ɵɵelementStart(44, "span", 287);
|
|
1585
|
+
i0.ɵɵtext(45);
|
|
1586
|
+
i0.ɵɵelementEnd()()()();
|
|
1587
|
+
i0.ɵɵelementStart(46, "div", 281)(47, "h5");
|
|
1588
|
+
i0.ɵɵtext(48, "Form Settings");
|
|
1589
|
+
i0.ɵɵelementEnd();
|
|
1590
|
+
i0.ɵɵelementStart(49, "div", 283)(50, "div", 284)(51, "span", 285);
|
|
1591
|
+
i0.ɵɵtext(52, "Include in Form");
|
|
1592
|
+
i0.ɵɵelementEnd();
|
|
1593
|
+
i0.ɵɵelementStart(53, "span", 287);
|
|
1594
|
+
i0.ɵɵtext(54);
|
|
1595
|
+
i0.ɵɵelementEnd()();
|
|
1596
|
+
i0.ɵɵelementStart(55, "div", 284)(56, "span", 285);
|
|
1597
|
+
i0.ɵɵtext(57, "Section");
|
|
1598
|
+
i0.ɵɵelementEnd();
|
|
1599
|
+
i0.ɵɵelementStart(58, "span", 287);
|
|
1600
|
+
i0.ɵɵtext(59);
|
|
1601
|
+
i0.ɵɵelementEnd()();
|
|
1602
|
+
i0.ɵɵtemplate(60, EntityFormComponentExtended_div_0_div_59_div_60_Template, 5, 1, "div", 288);
|
|
1603
|
+
i0.ɵɵelementStart(61, "div", 284)(62, "span", 285);
|
|
1604
|
+
i0.ɵɵtext(63, "Sequence");
|
|
1605
|
+
i0.ɵɵelementEnd();
|
|
1606
|
+
i0.ɵɵelementStart(64, "span", 287);
|
|
1607
|
+
i0.ɵɵtext(65);
|
|
1608
|
+
i0.ɵɵelementEnd()()()();
|
|
1609
|
+
i0.ɵɵtemplate(66, EntityFormComponentExtended_div_0_div_59_div_66_Template, 5, 1, "div", 289);
|
|
1610
|
+
i0.ɵɵelementEnd();
|
|
1611
|
+
} if (rf & 2) {
|
|
1612
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1613
|
+
i0.ɵɵadvance(3);
|
|
1614
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.DisplayName || ctx_r1.selectedField.Name);
|
|
1615
|
+
i0.ɵɵadvance();
|
|
1616
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField.Description);
|
|
1617
|
+
i0.ɵɵadvance(9);
|
|
1618
|
+
i0.ɵɵtextInterpolate(ctx_r1.formatFieldType(ctx_r1.selectedField));
|
|
1619
|
+
i0.ɵɵadvance(5);
|
|
1620
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.TSType);
|
|
1621
|
+
i0.ɵɵadvance(5);
|
|
1622
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.AllowsNull ? "Yes" : "No");
|
|
1623
|
+
i0.ɵɵadvance();
|
|
1624
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField.DefaultValue);
|
|
1625
|
+
i0.ɵɵadvance();
|
|
1626
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField.RelatedEntityID);
|
|
1627
|
+
i0.ɵɵadvance();
|
|
1628
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField.Encrypt);
|
|
1629
|
+
i0.ɵɵadvance(9);
|
|
1630
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.AllowUpdateAPI ? "Yes" : "No");
|
|
1631
|
+
i0.ɵɵadvance(5);
|
|
1632
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.IncludeInUserSearchAPI ? "Yes" : "No");
|
|
1633
|
+
i0.ɵɵadvance(5);
|
|
1634
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.FullTextSearchEnabled ? "Yes" : "No");
|
|
1635
|
+
i0.ɵɵadvance(9);
|
|
1636
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.IncludeInGeneratedForm ? "Yes" : "No");
|
|
1637
|
+
i0.ɵɵadvance(5);
|
|
1638
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.GeneratedFormSection);
|
|
1639
|
+
i0.ɵɵadvance();
|
|
1640
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField.Category);
|
|
1641
|
+
i0.ɵɵadvance(5);
|
|
1642
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedField.Sequence);
|
|
1643
|
+
i0.ɵɵadvance();
|
|
1644
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField.EntityFieldValues.length > 0);
|
|
1645
|
+
} }
|
|
1646
|
+
function EntityFormComponentExtended_div_0_div_60_Template(rf, ctx) { if (rf & 1) {
|
|
1647
|
+
i0.ɵɵelementStart(0, "div", 280)(1, "div", 281)(2, "h4");
|
|
1648
|
+
i0.ɵɵtext(3);
|
|
1649
|
+
i0.ɵɵelementEnd()();
|
|
1650
|
+
i0.ɵɵelementStart(4, "div", 281)(5, "h5");
|
|
1651
|
+
i0.ɵɵtext(6, "Connection");
|
|
1652
|
+
i0.ɵɵelementEnd();
|
|
1653
|
+
i0.ɵɵelementStart(7, "div", 283)(8, "div", 284)(9, "span", 285);
|
|
1654
|
+
i0.ɵɵtext(10, "From Entity");
|
|
1655
|
+
i0.ɵɵelementEnd();
|
|
1656
|
+
i0.ɵɵelementStart(11, "span", 287);
|
|
1657
|
+
i0.ɵɵtext(12);
|
|
1658
|
+
i0.ɵɵelementEnd()();
|
|
1659
|
+
i0.ɵɵelementStart(13, "div", 284)(14, "span", 285);
|
|
1660
|
+
i0.ɵɵtext(15, "Join Field");
|
|
1661
|
+
i0.ɵɵelementEnd();
|
|
1662
|
+
i0.ɵɵelementStart(16, "span", 286);
|
|
1663
|
+
i0.ɵɵtext(17);
|
|
1664
|
+
i0.ɵɵelementEnd()();
|
|
1665
|
+
i0.ɵɵelementStart(18, "div", 284)(19, "span", 285);
|
|
1666
|
+
i0.ɵɵtext(20, "Type");
|
|
1667
|
+
i0.ɵɵelementEnd();
|
|
1668
|
+
i0.ɵɵelementStart(21, "span", 287);
|
|
1669
|
+
i0.ɵɵtext(22);
|
|
1670
|
+
i0.ɵɵelementEnd()()()();
|
|
1671
|
+
i0.ɵɵelementStart(23, "div", 281)(24, "h5");
|
|
1672
|
+
i0.ɵɵtext(25, "Display Settings");
|
|
1673
|
+
i0.ɵɵelementEnd();
|
|
1674
|
+
i0.ɵɵelementStart(26, "div", 283)(27, "div", 284)(28, "span", 285);
|
|
1675
|
+
i0.ɵɵtext(29, "Display in Form");
|
|
1676
|
+
i0.ɵɵelementEnd();
|
|
1677
|
+
i0.ɵɵelementStart(30, "span", 287);
|
|
1678
|
+
i0.ɵɵtext(31);
|
|
1679
|
+
i0.ɵɵelementEnd()();
|
|
1680
|
+
i0.ɵɵelementStart(32, "div", 284)(33, "span", 285);
|
|
1681
|
+
i0.ɵɵtext(34, "Location");
|
|
1682
|
+
i0.ɵɵelementEnd();
|
|
1683
|
+
i0.ɵɵelementStart(35, "span", 287);
|
|
1684
|
+
i0.ɵɵtext(36);
|
|
1685
|
+
i0.ɵɵelementEnd()();
|
|
1686
|
+
i0.ɵɵelementStart(37, "div", 284)(38, "span", 285);
|
|
1687
|
+
i0.ɵɵtext(39, "Bundle in API");
|
|
1688
|
+
i0.ɵɵelementEnd();
|
|
1689
|
+
i0.ɵɵelementStart(40, "span", 287);
|
|
1690
|
+
i0.ɵɵtext(41);
|
|
1691
|
+
i0.ɵɵelementEnd()()()()();
|
|
1692
|
+
} if (rf & 2) {
|
|
1693
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1694
|
+
i0.ɵɵadvance(3);
|
|
1695
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedRelationship.DisplayName || ctx_r1.selectedRelationship.Entity);
|
|
1696
|
+
i0.ɵɵadvance(9);
|
|
1697
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedRelationship.Entity);
|
|
1698
|
+
i0.ɵɵadvance(5);
|
|
1699
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedRelationship.RelatedEntityJoinField);
|
|
1700
|
+
i0.ɵɵadvance(5);
|
|
1701
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedRelationship.Type);
|
|
1702
|
+
i0.ɵɵadvance(9);
|
|
1703
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedRelationship.DisplayInForm ? "Yes" : "No");
|
|
1704
|
+
i0.ɵɵadvance(5);
|
|
1705
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedRelationship.DisplayLocation);
|
|
1706
|
+
i0.ɵɵadvance(5);
|
|
1707
|
+
i0.ɵɵtextInterpolate(ctx_r1.selectedRelationship.BundleInAPI ? "Yes" : "No");
|
|
1708
|
+
} }
|
|
1709
|
+
function EntityFormComponentExtended_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
1710
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
1711
|
+
i0.ɵɵelementStart(0, "div", 3)(1, "header", 4)(2, "div", 5)(3, "div", 6);
|
|
1712
|
+
i0.ɵɵelement(4, "i");
|
|
1713
|
+
i0.ɵɵelementEnd();
|
|
1714
|
+
i0.ɵɵelementStart(5, "div", 7)(6, "div", 8)(7, "h1", 9);
|
|
1715
|
+
i0.ɵɵtext(8);
|
|
1716
|
+
i0.ɵɵelementEnd();
|
|
1717
|
+
i0.ɵɵelementStart(9, "span", 10);
|
|
1718
|
+
i0.ɵɵtext(10);
|
|
1719
|
+
i0.ɵɵelementEnd()();
|
|
1720
|
+
i0.ɵɵelementStart(11, "div", 11)(12, "span", 12);
|
|
1721
|
+
i0.ɵɵtext(13);
|
|
1722
|
+
i0.ɵɵelementEnd();
|
|
1723
|
+
i0.ɵɵelementStart(14, "span", 13);
|
|
1724
|
+
i0.ɵɵtext(15, "|");
|
|
1725
|
+
i0.ɵɵelementEnd();
|
|
1726
|
+
i0.ɵɵtemplate(16, EntityFormComponentExtended_div_0_span_16_Template, 3, 7, "span", 14);
|
|
1727
|
+
i0.ɵɵelementEnd()()();
|
|
1728
|
+
i0.ɵɵelementStart(17, "div", 15)(18, "div", 16);
|
|
1729
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_Template_div_click_18_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setActiveSection("fields")); });
|
|
1730
|
+
i0.ɵɵelement(19, "i", 17);
|
|
1731
|
+
i0.ɵɵelementStart(20, "span", 18);
|
|
1732
|
+
i0.ɵɵtext(21);
|
|
1733
|
+
i0.ɵɵelementEnd();
|
|
1734
|
+
i0.ɵɵelementStart(22, "span", 19);
|
|
1735
|
+
i0.ɵɵtext(23, "Fields");
|
|
1736
|
+
i0.ɵɵelementEnd()();
|
|
1737
|
+
i0.ɵɵelementStart(24, "div", 16);
|
|
1738
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_Template_div_click_24_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setActiveSection("relationships")); });
|
|
1739
|
+
i0.ɵɵelement(25, "i", 20);
|
|
1740
|
+
i0.ɵɵelementStart(26, "span", 18);
|
|
1741
|
+
i0.ɵɵtext(27);
|
|
1742
|
+
i0.ɵɵelementEnd();
|
|
1743
|
+
i0.ɵɵelementStart(28, "span", 19);
|
|
1744
|
+
i0.ɵɵtext(29, "Relations");
|
|
1745
|
+
i0.ɵɵelementEnd()();
|
|
1746
|
+
i0.ɵɵelementStart(30, "div", 16);
|
|
1747
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_Template_div_click_30_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.setActiveSection("permissions")); });
|
|
1748
|
+
i0.ɵɵelement(31, "i", 21);
|
|
1749
|
+
i0.ɵɵelementStart(32, "span", 18);
|
|
1750
|
+
i0.ɵɵtext(33);
|
|
1751
|
+
i0.ɵɵelementEnd();
|
|
1752
|
+
i0.ɵɵelementStart(34, "span", 19);
|
|
1753
|
+
i0.ɵɵtext(35, "Roles");
|
|
1754
|
+
i0.ɵɵelementEnd()();
|
|
1755
|
+
i0.ɵɵelementStart(36, "div", 22);
|
|
1756
|
+
i0.ɵɵelement(37, "i", 23);
|
|
1757
|
+
i0.ɵɵtemplate(38, EntityFormComponentExtended_div_0_span_38_Template, 2, 1, "span", 24)(39, EntityFormComponentExtended_div_0_span_39_Template, 2, 0, "span", 25);
|
|
1758
|
+
i0.ɵɵelementStart(40, "span", 19);
|
|
1759
|
+
i0.ɵɵtext(41, "Rows");
|
|
1760
|
+
i0.ɵɵelementEnd()()()();
|
|
1761
|
+
i0.ɵɵelementStart(42, "div", 26)(43, "nav", 27);
|
|
1762
|
+
i0.ɵɵtemplate(44, EntityFormComponentExtended_div_0_button_44_Template, 5, 7, "button", 28);
|
|
1763
|
+
i0.ɵɵelementEnd();
|
|
1764
|
+
i0.ɵɵelementStart(45, "main", 29);
|
|
1765
|
+
i0.ɵɵtemplate(46, EntityFormComponentExtended_div_0_section_46_Template, 109, 23, "section", 30)(47, EntityFormComponentExtended_div_0_section_47_Template, 15, 8, "section", 31)(48, EntityFormComponentExtended_div_0_section_48_Template, 13, 7, "section", 32)(49, EntityFormComponentExtended_div_0_section_49_Template, 54, 23, "section", 33)(50, EntityFormComponentExtended_div_0_section_50_Template, 57, 20, "section", 34)(51, EntityFormComponentExtended_div_0_section_51_Template, 18, 7, "section", 35)(52, EntityFormComponentExtended_div_0_section_52_Template, 26, 7, "section", 36);
|
|
1766
|
+
i0.ɵɵelementEnd();
|
|
1767
|
+
i0.ɵɵelementStart(53, "aside", 37)(54, "div", 38);
|
|
1768
|
+
i0.ɵɵtemplate(55, EntityFormComponentExtended_div_0_h3_55_Template, 2, 0, "h3", 39)(56, EntityFormComponentExtended_div_0_h3_56_Template, 2, 0, "h3", 39);
|
|
1769
|
+
i0.ɵɵelementStart(57, "button", 40);
|
|
1770
|
+
i0.ɵɵlistener("click", function EntityFormComponentExtended_div_0_Template_button_click_57_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.closeDetailPanel()); });
|
|
1771
|
+
i0.ɵɵelement(58, "i", 41);
|
|
1772
|
+
i0.ɵɵelementEnd()();
|
|
1773
|
+
i0.ɵɵtemplate(59, EntityFormComponentExtended_div_0_div_59_Template, 67, 16, "div", 42)(60, EntityFormComponentExtended_div_0_div_60_Template, 42, 7, "div", 42);
|
|
1774
|
+
i0.ɵɵelementEnd()()();
|
|
1775
|
+
} if (rf & 2) {
|
|
1776
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1777
|
+
i0.ɵɵadvance(3);
|
|
1778
|
+
i0.ɵɵstyleProp("background-color", "#3b82f6");
|
|
1779
|
+
i0.ɵɵadvance();
|
|
1780
|
+
i0.ɵɵclassMap(ctx_r1.entityIcon);
|
|
1781
|
+
i0.ɵɵadvance(4);
|
|
1782
|
+
i0.ɵɵtextInterpolate(ctx_r1.entityDisplayName);
|
|
1783
|
+
i0.ɵɵadvance();
|
|
1784
|
+
i0.ɵɵproperty("ngClass", ctx_r1.statusClass);
|
|
1785
|
+
i0.ɵɵadvance();
|
|
1786
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.entity.Status, " ");
|
|
1787
|
+
i0.ɵɵadvance(3);
|
|
1788
|
+
i0.ɵɵtextInterpolate2("", ctx_r1.entity.SchemaName, ".", ctx_r1.entity.BaseTable, "");
|
|
1789
|
+
i0.ɵɵadvance(3);
|
|
1790
|
+
i0.ɵɵproperty("ngIf", ctx_r1.entity.Description);
|
|
1791
|
+
i0.ɵɵadvance(5);
|
|
1792
|
+
i0.ɵɵtextInterpolate(ctx_r1.stats.fieldCount);
|
|
1793
|
+
i0.ɵɵadvance(6);
|
|
1794
|
+
i0.ɵɵtextInterpolate(ctx_r1.stats.relationshipCount);
|
|
1795
|
+
i0.ɵɵadvance(6);
|
|
1796
|
+
i0.ɵɵtextInterpolate(ctx_r1.stats.permissionCount);
|
|
1797
|
+
i0.ɵɵadvance(5);
|
|
1798
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.isRowCountLoading);
|
|
1799
|
+
i0.ɵɵadvance();
|
|
1800
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isRowCountLoading);
|
|
1801
|
+
i0.ɵɵadvance(5);
|
|
1802
|
+
i0.ɵɵproperty("ngForOf", ctx_r1.navItems);
|
|
1803
|
+
i0.ɵɵadvance();
|
|
1804
|
+
i0.ɵɵclassProp("panel-open", ctx_r1.detailPanelOpen);
|
|
1805
|
+
i0.ɵɵadvance();
|
|
1806
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeSection === "overview");
|
|
1807
|
+
i0.ɵɵadvance();
|
|
1808
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeSection === "fields");
|
|
1809
|
+
i0.ɵɵadvance();
|
|
1810
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeSection === "relationships");
|
|
1811
|
+
i0.ɵɵadvance();
|
|
1812
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeSection === "permissions");
|
|
1813
|
+
i0.ɵɵadvance();
|
|
1814
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeSection === "lineage");
|
|
1815
|
+
i0.ɵɵadvance();
|
|
1816
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeSection === "history");
|
|
1817
|
+
i0.ɵɵadvance();
|
|
1818
|
+
i0.ɵɵproperty("ngIf", ctx_r1.activeSection === "settings");
|
|
1819
|
+
i0.ɵɵadvance();
|
|
1820
|
+
i0.ɵɵclassProp("open", ctx_r1.detailPanelOpen);
|
|
1821
|
+
i0.ɵɵadvance(2);
|
|
1822
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField);
|
|
1823
|
+
i0.ɵɵadvance();
|
|
1824
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedRelationship);
|
|
1825
|
+
i0.ɵɵadvance(3);
|
|
1826
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedField);
|
|
1827
|
+
i0.ɵɵadvance();
|
|
1828
|
+
i0.ɵɵproperty("ngIf", ctx_r1.selectedRelationship);
|
|
1829
|
+
} }
|
|
1830
|
+
function EntityFormComponentExtended_ng_template_1_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
1831
|
+
i0.ɵɵelementStart(0, "div", 301);
|
|
1832
|
+
i0.ɵɵelement(1, "mj-loading", 302);
|
|
1833
|
+
i0.ɵɵelementEnd();
|
|
1834
|
+
} }
|
|
1835
|
+
function EntityFormComponentExtended_ng_template_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
1836
|
+
i0.ɵɵelementStart(0, "div", 303);
|
|
1837
|
+
i0.ɵɵelement(1, "i", 304);
|
|
1838
|
+
i0.ɵɵelementStart(2, "p");
|
|
1839
|
+
i0.ɵɵtext(3);
|
|
1840
|
+
i0.ɵɵelementEnd()();
|
|
1841
|
+
} if (rf & 2) {
|
|
1842
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1843
|
+
i0.ɵɵadvance(3);
|
|
1844
|
+
i0.ɵɵtextInterpolate(ctx_r1.explorerError);
|
|
1845
|
+
} }
|
|
1846
|
+
function EntityFormComponentExtended_ng_template_1_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
1847
|
+
i0.ɵɵelementStart(0, "div", 305);
|
|
1848
|
+
i0.ɵɵelement(1, "i", 23);
|
|
1849
|
+
i0.ɵɵelementStart(2, "p");
|
|
1850
|
+
i0.ɵɵtext(3, "Entity metadata not available");
|
|
1851
|
+
i0.ɵɵelementEnd()();
|
|
1852
|
+
} }
|
|
1853
|
+
function EntityFormComponentExtended_ng_template_1_Template(rf, ctx) { if (rf & 1) {
|
|
1854
|
+
i0.ɵɵtemplate(0, EntityFormComponentExtended_ng_template_1_div_0_Template, 2, 0, "div", 298)(1, EntityFormComponentExtended_ng_template_1_div_1_Template, 4, 1, "div", 299)(2, EntityFormComponentExtended_ng_template_1_div_2_Template, 4, 0, "div", 300);
|
|
1855
|
+
} if (rf & 2) {
|
|
1856
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1857
|
+
i0.ɵɵproperty("ngIf", ctx_r1.isExplorerLoading);
|
|
1858
|
+
i0.ɵɵadvance();
|
|
1859
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.isExplorerLoading && ctx_r1.explorerError);
|
|
1860
|
+
i0.ɵɵadvance();
|
|
1861
|
+
i0.ɵɵproperty("ngIf", !ctx_r1.isExplorerLoading && !ctx_r1.explorerError && !ctx_r1.entity);
|
|
1862
|
+
} }
|
|
1863
|
+
/**
|
|
1864
|
+
* World-class Entity Explorer form component that provides an exploration-focused
|
|
1865
|
+
* interface for understanding entities in the MemberJunction system.
|
|
1866
|
+
*
|
|
1867
|
+
* This component replaces the traditional edit-focused entity form with a rich
|
|
1868
|
+
* exploration experience featuring:
|
|
1869
|
+
* - Three-zone architecture (Header, Nav Rail, Main Canvas)
|
|
1870
|
+
* - Seven exploration sections: Overview, Fields, Relationships, Permissions, Lineage, History, Settings
|
|
1871
|
+
* - Semantic field grouping by purpose (Primary Keys, Foreign Keys, Encrypted, etc.)
|
|
1872
|
+
* - Visual ERD integration for relationship exploration
|
|
1873
|
+
* - Slide-in detail panels for contextual information
|
|
1874
|
+
*/
|
|
1875
|
+
let EntityFormComponentExtended = class EntityFormComponentExtended extends EntityFormComponent {
|
|
1876
|
+
constructor() {
|
|
1877
|
+
super(...arguments);
|
|
1878
|
+
/** Runtime EntityInfo metadata (populated from record.ID) */
|
|
1879
|
+
this.entity = null;
|
|
1880
|
+
/** All entities for relationship lookups */
|
|
1881
|
+
this.allEntities = [];
|
|
1882
|
+
/** All entity fields (flattened from all entities) for ERD details panel */
|
|
1883
|
+
this.allEntityFields = [];
|
|
1884
|
+
/** Loading state */
|
|
1885
|
+
this.isExplorerLoading = true;
|
|
1886
|
+
/** Error message if loading fails */
|
|
1887
|
+
this.explorerError = null;
|
|
1888
|
+
/** Current active section in the explorer */
|
|
1889
|
+
this.activeSection = 'overview';
|
|
1890
|
+
/** Navigation items for the rail - world-class minimalist icons */
|
|
1891
|
+
this.navItems = [
|
|
1892
|
+
{ id: 'overview', icon: 'fa-solid fa-house', label: 'Overview' },
|
|
1893
|
+
{ id: 'fields', icon: 'fa-solid fa-table-cells', label: 'Fields' },
|
|
1894
|
+
{ id: 'relationships', icon: 'fa-solid fa-diagram-project', label: 'Relations' },
|
|
1895
|
+
{ id: 'permissions', icon: 'fa-solid fa-lock', label: 'Security' },
|
|
1896
|
+
{ id: 'lineage', icon: 'fa-solid fa-code-branch', label: 'Lineage' },
|
|
1897
|
+
{ id: 'history', icon: 'fa-solid fa-clock-rotate-left', label: 'History' },
|
|
1898
|
+
{ id: 'settings', icon: 'fa-solid fa-sliders', label: 'Settings' }
|
|
1899
|
+
];
|
|
1900
|
+
/** Computed statistics for the entity */
|
|
1901
|
+
this.stats = {
|
|
1902
|
+
fieldCount: 0,
|
|
1903
|
+
relationshipCount: 0,
|
|
1904
|
+
permissionCount: 0,
|
|
1905
|
+
rowCount: null,
|
|
1906
|
+
primaryKeyCount: 0,
|
|
1907
|
+
foreignKeyCount: 0,
|
|
1908
|
+
encryptedFieldCount: 0,
|
|
1909
|
+
valueListFieldCount: 0
|
|
1910
|
+
};
|
|
1911
|
+
/** Semantically grouped fields */
|
|
1912
|
+
this.fieldGroups = [];
|
|
1913
|
+
/** Field search term for filtering */
|
|
1914
|
+
this.fieldSearchTerm = '';
|
|
1915
|
+
/** Set of expanded field group IDs */
|
|
1916
|
+
this.expandedFieldGroups = new Set();
|
|
1917
|
+
/** Field view mode: grouped by category or flat list */
|
|
1918
|
+
this.fieldViewMode = 'grouped';
|
|
1919
|
+
/** Field list sort configuration */
|
|
1920
|
+
this.fieldListSortColumn = 'Sequence';
|
|
1921
|
+
this.fieldListSortDirection = 'asc';
|
|
1922
|
+
/** Relationship view mode toggle */
|
|
1923
|
+
this.relationshipViewMode = 'diagram';
|
|
1924
|
+
/** ERD depth level (1-5) */
|
|
1925
|
+
this.erdDepth = 1;
|
|
1926
|
+
/** Whether the row count is loading */
|
|
1927
|
+
this.isRowCountLoading = false;
|
|
1928
|
+
/** Outgoing relationships (this entity references others) */
|
|
1929
|
+
this.outgoingRelationships = [];
|
|
1930
|
+
/** Incoming relationships (other entities reference this one) */
|
|
1931
|
+
this.incomingRelationships = [];
|
|
1932
|
+
/** Grouped outgoing relationships by target entity */
|
|
1933
|
+
this.groupedOutgoingRelationships = [];
|
|
1934
|
+
/** Grouped incoming relationships by source entity */
|
|
1935
|
+
this.groupedIncomingRelationships = [];
|
|
1936
|
+
/** Whether detail panel is open */
|
|
1937
|
+
this.detailPanelOpen = false;
|
|
1938
|
+
/** Currently selected field for detail panel */
|
|
1939
|
+
this.selectedField = null;
|
|
1940
|
+
/** Currently selected relationship for detail panel */
|
|
1941
|
+
this.selectedRelationship = null;
|
|
1942
|
+
this.destroy$ = new Subject();
|
|
1943
|
+
this.stateChange$ = new Subject();
|
|
1944
|
+
this._metadata = new Metadata();
|
|
1945
|
+
}
|
|
1946
|
+
async ngOnInit() {
|
|
1947
|
+
await super.ngOnInit();
|
|
1948
|
+
this.setupStateManagement();
|
|
1949
|
+
this.loadExplorerData();
|
|
1950
|
+
}
|
|
1951
|
+
ngOnDestroy() {
|
|
1952
|
+
this.destroy$.next();
|
|
1953
|
+
this.destroy$.complete();
|
|
1954
|
+
}
|
|
1955
|
+
setupStateManagement() {
|
|
1956
|
+
this.stateChange$.pipe(debounceTime(100), takeUntil(this.destroy$)).subscribe(() => {
|
|
1957
|
+
this.cdr.markForCheck();
|
|
1958
|
+
});
|
|
1959
|
+
}
|
|
1960
|
+
loadExplorerData() {
|
|
1961
|
+
this.isExplorerLoading = true;
|
|
1962
|
+
this.explorerError = null;
|
|
1963
|
+
this.cdr.markForCheck();
|
|
1964
|
+
try {
|
|
1965
|
+
this.allEntities = this._metadata.Entities;
|
|
1966
|
+
// Flatten all entity fields for ERD details panel
|
|
1967
|
+
this.allEntityFields = this.allEntities.flatMap(e => e.Fields);
|
|
1968
|
+
// Find the EntityInfo by the record's ID
|
|
1969
|
+
if (this.record?.ID) {
|
|
1970
|
+
this.entity = this.allEntities.find(e => e.ID === this.record.ID) || null;
|
|
1971
|
+
}
|
|
1972
|
+
if (this.entity) {
|
|
1973
|
+
this.computeStats();
|
|
1974
|
+
this.buildFieldGroups();
|
|
1975
|
+
this.buildRelationships();
|
|
1976
|
+
this.updateNavBadges();
|
|
1977
|
+
// Load row count asynchronously (don't block UI)
|
|
1978
|
+
this.loadRowCountAsync();
|
|
1979
|
+
}
|
|
1980
|
+
else {
|
|
1981
|
+
this.explorerError = `Entity metadata not found for: ${this.record?.Name || 'Unknown'}`;
|
|
1982
|
+
}
|
|
1983
|
+
}
|
|
1984
|
+
catch (err) {
|
|
1985
|
+
this.explorerError = err instanceof Error ? err.message : 'Failed to load entity metadata';
|
|
1986
|
+
console.error('Error loading entity explorer data:', err);
|
|
1987
|
+
}
|
|
1988
|
+
finally {
|
|
1989
|
+
this.isExplorerLoading = false;
|
|
1990
|
+
this.cdr.markForCheck();
|
|
1991
|
+
}
|
|
1992
|
+
}
|
|
1993
|
+
/**
|
|
1994
|
+
* Loads the row count asynchronously using RunView with count_only.
|
|
1995
|
+
* This doesn't block the UI - updates when complete.
|
|
1996
|
+
*/
|
|
1997
|
+
async loadRowCountAsync() {
|
|
1998
|
+
if (!this.entity)
|
|
1999
|
+
return;
|
|
2000
|
+
this.isRowCountLoading = true;
|
|
2001
|
+
this.cdr.markForCheck();
|
|
2002
|
+
try {
|
|
2003
|
+
const rv = new RunView();
|
|
2004
|
+
const result = await rv.RunView({
|
|
2005
|
+
EntityName: this.entity.Name,
|
|
2006
|
+
ResultType: 'count_only'
|
|
2007
|
+
});
|
|
2008
|
+
if (result.Success) {
|
|
2009
|
+
this.stats = {
|
|
2010
|
+
...this.stats,
|
|
2011
|
+
rowCount: result.TotalRowCount
|
|
2012
|
+
};
|
|
2013
|
+
}
|
|
2014
|
+
}
|
|
2015
|
+
catch (err) {
|
|
2016
|
+
console.warn('Failed to load row count:', err);
|
|
2017
|
+
// Keep the default N/A - don't show error for this
|
|
2018
|
+
}
|
|
2019
|
+
finally {
|
|
2020
|
+
this.isRowCountLoading = false;
|
|
2021
|
+
this.cdr.markForCheck();
|
|
2022
|
+
}
|
|
2023
|
+
}
|
|
2024
|
+
computeStats() {
|
|
2025
|
+
if (!this.entity)
|
|
2026
|
+
return;
|
|
2027
|
+
const fields = this.entity.Fields;
|
|
2028
|
+
// Count unique outgoing relationships (fields with RelatedEntityID, grouped by target entity)
|
|
2029
|
+
const outgoingEntityIds = new Set(fields.filter(f => f.RelatedEntityID).map(f => f.RelatedEntityID));
|
|
2030
|
+
// Count unique incoming relationships (RelatedEntities, grouped by source entity)
|
|
2031
|
+
const incomingEntityNames = new Set(this.entity.RelatedEntities.map(r => r.RelatedEntity));
|
|
2032
|
+
this.stats = {
|
|
2033
|
+
fieldCount: fields.length,
|
|
2034
|
+
relationshipCount: outgoingEntityIds.size + incomingEntityNames.size,
|
|
2035
|
+
permissionCount: this.entity.Permissions.length,
|
|
2036
|
+
rowCount: this.entity.RowCount,
|
|
2037
|
+
primaryKeyCount: fields.filter(f => f.IsPrimaryKey).length,
|
|
2038
|
+
foreignKeyCount: fields.filter(f => f.RelatedEntityID).length,
|
|
2039
|
+
encryptedFieldCount: fields.filter(f => f.Encrypt).length,
|
|
2040
|
+
valueListFieldCount: fields.filter(f => f.ValueListType !== 'None').length
|
|
2041
|
+
};
|
|
2042
|
+
}
|
|
2043
|
+
buildFieldGroups() {
|
|
2044
|
+
if (!this.entity)
|
|
2045
|
+
return;
|
|
2046
|
+
const fields = this.entity.Fields;
|
|
2047
|
+
const groups = [];
|
|
2048
|
+
// Primary Keys
|
|
2049
|
+
const primaryKeys = fields.filter(f => f.IsPrimaryKey);
|
|
2050
|
+
if (primaryKeys.length > 0) {
|
|
2051
|
+
groups.push({
|
|
2052
|
+
id: 'primary-keys',
|
|
2053
|
+
label: 'Primary Keys',
|
|
2054
|
+
icon: 'fa-solid fa-key',
|
|
2055
|
+
fields: primaryKeys,
|
|
2056
|
+
expanded: true
|
|
2057
|
+
});
|
|
2058
|
+
}
|
|
2059
|
+
// Identity Fields (Name, Code, Description, DisplayName)
|
|
2060
|
+
const identityFields = fields.filter(f => !f.IsPrimaryKey &&
|
|
2061
|
+
(f.IsNameField || ['Name', 'Code', 'Description', 'DisplayName'].includes(f.Name)));
|
|
2062
|
+
if (identityFields.length > 0) {
|
|
2063
|
+
groups.push({
|
|
2064
|
+
id: 'identity',
|
|
2065
|
+
label: 'Identity Fields',
|
|
2066
|
+
icon: 'fa-solid fa-id-card',
|
|
2067
|
+
fields: identityFields,
|
|
2068
|
+
expanded: true
|
|
2069
|
+
});
|
|
2070
|
+
}
|
|
2071
|
+
// Foreign Keys
|
|
2072
|
+
const foreignKeys = fields.filter(f => f.RelatedEntityID && !f.IsPrimaryKey);
|
|
2073
|
+
if (foreignKeys.length > 0) {
|
|
2074
|
+
groups.push({
|
|
2075
|
+
id: 'foreign-keys',
|
|
2076
|
+
label: 'Foreign Keys',
|
|
2077
|
+
icon: 'fa-solid fa-link',
|
|
2078
|
+
fields: foreignKeys,
|
|
2079
|
+
expanded: true
|
|
2080
|
+
});
|
|
2081
|
+
}
|
|
2082
|
+
// Encrypted Fields
|
|
2083
|
+
const encryptedFields = fields.filter(f => f.Encrypt);
|
|
2084
|
+
if (encryptedFields.length > 0) {
|
|
2085
|
+
groups.push({
|
|
2086
|
+
id: 'encrypted',
|
|
2087
|
+
label: 'Encrypted Fields',
|
|
2088
|
+
icon: 'fa-solid fa-lock',
|
|
2089
|
+
fields: encryptedFields,
|
|
2090
|
+
expanded: false
|
|
2091
|
+
});
|
|
2092
|
+
}
|
|
2093
|
+
// Value List Fields
|
|
2094
|
+
const valueListFields = fields.filter(f => f.ValueListType !== 'None' && !f.Encrypt);
|
|
2095
|
+
if (valueListFields.length > 0) {
|
|
2096
|
+
groups.push({
|
|
2097
|
+
id: 'value-lists',
|
|
2098
|
+
label: 'Value List Fields',
|
|
2099
|
+
icon: 'fa-solid fa-list-check',
|
|
2100
|
+
fields: valueListFields,
|
|
2101
|
+
expanded: false
|
|
2102
|
+
});
|
|
2103
|
+
}
|
|
2104
|
+
// Audit Fields
|
|
2105
|
+
const auditFields = fields.filter(f => f.IsSpecialDateField);
|
|
2106
|
+
if (auditFields.length > 0) {
|
|
2107
|
+
groups.push({
|
|
2108
|
+
id: 'audit',
|
|
2109
|
+
label: 'Audit Fields',
|
|
2110
|
+
icon: 'fa-solid fa-clock',
|
|
2111
|
+
fields: auditFields,
|
|
2112
|
+
expanded: false
|
|
2113
|
+
});
|
|
2114
|
+
}
|
|
2115
|
+
// Remaining fields grouped by Category
|
|
2116
|
+
const usedFieldIds = new Set(groups.flatMap(g => g.fields.map(f => f.ID)));
|
|
2117
|
+
const remainingFields = fields.filter(f => !usedFieldIds.has(f.ID));
|
|
2118
|
+
// Group by category
|
|
2119
|
+
const categoryMap = new Map();
|
|
2120
|
+
for (const field of remainingFields) {
|
|
2121
|
+
const category = field.Category || 'General';
|
|
2122
|
+
if (!categoryMap.has(category)) {
|
|
2123
|
+
categoryMap.set(category, []);
|
|
2124
|
+
}
|
|
2125
|
+
categoryMap.get(category).push(field);
|
|
2126
|
+
}
|
|
2127
|
+
// Sort categories and add as groups
|
|
2128
|
+
const sortedCategories = Array.from(categoryMap.keys()).sort();
|
|
2129
|
+
for (const category of sortedCategories) {
|
|
2130
|
+
const categoryFields = categoryMap.get(category);
|
|
2131
|
+
groups.push({
|
|
2132
|
+
id: `category-${category.toLowerCase().replace(/\s+/g, '-')}`,
|
|
2133
|
+
label: category,
|
|
2134
|
+
icon: 'fa-solid fa-folder',
|
|
2135
|
+
fields: categoryFields.sort((a, b) => a.Sequence - b.Sequence),
|
|
2136
|
+
expanded: false
|
|
2137
|
+
});
|
|
2138
|
+
}
|
|
2139
|
+
this.fieldGroups = groups;
|
|
2140
|
+
// Initialize expanded state
|
|
2141
|
+
for (const group of groups) {
|
|
2142
|
+
if (group.expanded) {
|
|
2143
|
+
this.expandedFieldGroups.add(group.id);
|
|
2144
|
+
}
|
|
2145
|
+
}
|
|
2146
|
+
}
|
|
2147
|
+
buildRelationships() {
|
|
2148
|
+
if (!this.entity)
|
|
2149
|
+
return;
|
|
2150
|
+
// DEBUG: Log relationship data
|
|
2151
|
+
console.log(`[buildRelationships] Entity: ${this.entity.Name}`);
|
|
2152
|
+
console.log(`[buildRelationships] Fields with RelatedEntityID:`, this.entity.Fields.filter(f => f.RelatedEntityID).map(f => ({ name: f.Name, relatedEntityID: f.RelatedEntityID, relatedEntity: f.RelatedEntity })));
|
|
2153
|
+
console.log(`[buildRelationships] RelatedEntities (first 5):`, this.entity.RelatedEntities.slice(0, 5).map(r => ({ entity: r.Entity, relatedEntity: r.RelatedEntity, joinField: r.RelatedEntityJoinField })));
|
|
2154
|
+
console.log(`[buildRelationships] Unique Entity values:`, [...new Set(this.entity.RelatedEntities.map(r => r.Entity))]);
|
|
2155
|
+
// Incoming: Relationships defined on this entity (other entities that reference this one)
|
|
2156
|
+
this.incomingRelationships = this.entity.RelatedEntities;
|
|
2157
|
+
// Outgoing relationships could be computed from fields with RelatedEntityID
|
|
2158
|
+
this.outgoingRelationships = [];
|
|
2159
|
+
// Build grouped outgoing relationships (fields on THIS entity that reference OTHER entities)
|
|
2160
|
+
const outgoingMap = new Map();
|
|
2161
|
+
for (const field of this.entity.Fields) {
|
|
2162
|
+
if (field.RelatedEntityID) {
|
|
2163
|
+
const existing = outgoingMap.get(field.RelatedEntityID);
|
|
2164
|
+
if (existing) {
|
|
2165
|
+
existing.fields.push(field);
|
|
2166
|
+
}
|
|
2167
|
+
else {
|
|
2168
|
+
const relatedEntity = this.allEntities.find(e => e.ID === field.RelatedEntityID);
|
|
2169
|
+
outgoingMap.set(field.RelatedEntityID, {
|
|
2170
|
+
entityId: field.RelatedEntityID,
|
|
2171
|
+
entityName: relatedEntity?.Name || field.RelatedEntity || 'Unknown',
|
|
2172
|
+
fields: [field]
|
|
2173
|
+
});
|
|
2174
|
+
}
|
|
2175
|
+
}
|
|
2176
|
+
}
|
|
2177
|
+
this.groupedOutgoingRelationships = Array.from(outgoingMap.values())
|
|
2178
|
+
.sort((a, b) => a.entityName.localeCompare(b.entityName));
|
|
2179
|
+
// Build grouped incoming relationships (fields on OTHER entities that reference THIS entity)
|
|
2180
|
+
// Group by RelatedEntity name (the entity that references this one), deduplicate fields
|
|
2181
|
+
const incomingMap = new Map();
|
|
2182
|
+
for (const rel of this.entity.RelatedEntities) {
|
|
2183
|
+
// rel.RelatedEntity is the entity that has the FK pointing to THIS entity
|
|
2184
|
+
const existing = incomingMap.get(rel.RelatedEntity);
|
|
2185
|
+
if (existing) {
|
|
2186
|
+
// Only add if this field name isn't already in the list
|
|
2187
|
+
const fieldExists = existing.fields.some(f => f.fieldName === rel.RelatedEntityJoinField);
|
|
2188
|
+
if (!fieldExists) {
|
|
2189
|
+
existing.fields.push({
|
|
2190
|
+
fieldName: rel.RelatedEntityJoinField,
|
|
2191
|
+
type: rel.Type,
|
|
2192
|
+
bundleInAPI: rel.BundleInAPI
|
|
2193
|
+
});
|
|
2194
|
+
}
|
|
2195
|
+
}
|
|
2196
|
+
else {
|
|
2197
|
+
incomingMap.set(rel.RelatedEntity, {
|
|
2198
|
+
entityName: rel.RelatedEntity,
|
|
2199
|
+
fields: [{
|
|
2200
|
+
fieldName: rel.RelatedEntityJoinField,
|
|
2201
|
+
type: rel.Type,
|
|
2202
|
+
bundleInAPI: rel.BundleInAPI
|
|
2203
|
+
}]
|
|
2204
|
+
});
|
|
2205
|
+
}
|
|
2206
|
+
}
|
|
2207
|
+
this.groupedIncomingRelationships = Array.from(incomingMap.values())
|
|
2208
|
+
.sort((a, b) => a.entityName.localeCompare(b.entityName));
|
|
2209
|
+
}
|
|
2210
|
+
updateNavBadges() {
|
|
2211
|
+
if (!this.entity)
|
|
2212
|
+
return;
|
|
2213
|
+
this.navItems = this.navItems.map(item => {
|
|
2214
|
+
switch (item.id) {
|
|
2215
|
+
case 'fields':
|
|
2216
|
+
return { ...item, badge: this.stats.fieldCount };
|
|
2217
|
+
case 'relationships':
|
|
2218
|
+
return { ...item, badge: this.stats.relationshipCount };
|
|
2219
|
+
case 'permissions':
|
|
2220
|
+
return { ...item, badge: this.stats.permissionCount };
|
|
2221
|
+
default:
|
|
2222
|
+
return item;
|
|
2223
|
+
}
|
|
2224
|
+
});
|
|
2225
|
+
}
|
|
2226
|
+
// === Public Methods ===
|
|
2227
|
+
setActiveSection(section) {
|
|
2228
|
+
this.activeSection = section;
|
|
2229
|
+
this.closeDetailPanel();
|
|
2230
|
+
this.cdr.markForCheck();
|
|
2231
|
+
}
|
|
2232
|
+
toggleFieldGroup(groupId) {
|
|
2233
|
+
if (this.expandedFieldGroups.has(groupId)) {
|
|
2234
|
+
this.expandedFieldGroups.delete(groupId);
|
|
2235
|
+
}
|
|
2236
|
+
else {
|
|
2237
|
+
this.expandedFieldGroups.add(groupId);
|
|
2238
|
+
}
|
|
2239
|
+
this.cdr.markForCheck();
|
|
2240
|
+
}
|
|
2241
|
+
isFieldGroupExpanded(groupId) {
|
|
2242
|
+
return this.expandedFieldGroups.has(groupId);
|
|
2243
|
+
}
|
|
2244
|
+
expandAllFieldGroups() {
|
|
2245
|
+
for (const group of this.fieldGroups) {
|
|
2246
|
+
this.expandedFieldGroups.add(group.id);
|
|
2247
|
+
}
|
|
2248
|
+
this.cdr.markForCheck();
|
|
2249
|
+
}
|
|
2250
|
+
collapseAllFieldGroups() {
|
|
2251
|
+
this.expandedFieldGroups.clear();
|
|
2252
|
+
this.cdr.markForCheck();
|
|
2253
|
+
}
|
|
2254
|
+
get allFieldGroupsExpanded() {
|
|
2255
|
+
return this.fieldGroups.length > 0 &&
|
|
2256
|
+
this.fieldGroups.every(g => this.expandedFieldGroups.has(g.id));
|
|
2257
|
+
}
|
|
2258
|
+
get allFieldGroupsCollapsed() {
|
|
2259
|
+
return this.expandedFieldGroups.size === 0;
|
|
2260
|
+
}
|
|
2261
|
+
/**
|
|
2262
|
+
* Get all fields for the list view with sorting and filtering applied.
|
|
2263
|
+
*/
|
|
2264
|
+
getFilteredFieldsList() {
|
|
2265
|
+
if (!this.entity)
|
|
2266
|
+
return [];
|
|
2267
|
+
let fields = [...this.entity.Fields];
|
|
2268
|
+
// Apply search filter
|
|
2269
|
+
if (this.fieldSearchTerm) {
|
|
2270
|
+
const term = this.fieldSearchTerm.toLowerCase();
|
|
2271
|
+
fields = fields.filter(f => f.Name.toLowerCase().includes(term) ||
|
|
2272
|
+
(f.DisplayName && f.DisplayName.toLowerCase().includes(term)) ||
|
|
2273
|
+
(f.Description && f.Description.toLowerCase().includes(term)) ||
|
|
2274
|
+
f.Type.toLowerCase().includes(term));
|
|
2275
|
+
}
|
|
2276
|
+
// Apply sorting
|
|
2277
|
+
fields.sort((a, b) => {
|
|
2278
|
+
const col = this.fieldListSortColumn;
|
|
2279
|
+
const dir = this.fieldListSortDirection === 'asc' ? 1 : -1;
|
|
2280
|
+
let aVal = this.getFieldSortValue(a, col);
|
|
2281
|
+
let bVal = this.getFieldSortValue(b, col);
|
|
2282
|
+
if (aVal == null && bVal == null)
|
|
2283
|
+
return 0;
|
|
2284
|
+
if (aVal == null)
|
|
2285
|
+
return 1;
|
|
2286
|
+
if (bVal == null)
|
|
2287
|
+
return -1;
|
|
2288
|
+
if (typeof aVal === 'string' && typeof bVal === 'string') {
|
|
2289
|
+
return aVal.localeCompare(bVal) * dir;
|
|
2290
|
+
}
|
|
2291
|
+
if (typeof aVal === 'boolean' && typeof bVal === 'boolean') {
|
|
2292
|
+
return (aVal === bVal ? 0 : aVal ? -1 : 1) * dir;
|
|
2293
|
+
}
|
|
2294
|
+
return (aVal - bVal) * dir;
|
|
2295
|
+
});
|
|
2296
|
+
return fields;
|
|
2297
|
+
}
|
|
2298
|
+
getFieldSortValue(field, column) {
|
|
2299
|
+
switch (column) {
|
|
2300
|
+
case 'Sequence': return field.Sequence;
|
|
2301
|
+
case 'Name': return field.DisplayName || field.Name;
|
|
2302
|
+
case 'Type': return field.Type;
|
|
2303
|
+
case 'Length': return field.Length;
|
|
2304
|
+
case 'AllowsNull': return field.AllowsNull;
|
|
2305
|
+
case 'Description': return field.Description || '';
|
|
2306
|
+
default: return field.Sequence;
|
|
2307
|
+
}
|
|
2308
|
+
}
|
|
2309
|
+
sortFieldList(column) {
|
|
2310
|
+
if (this.fieldListSortColumn === column) {
|
|
2311
|
+
this.fieldListSortDirection = this.fieldListSortDirection === 'asc' ? 'desc' : 'asc';
|
|
2312
|
+
}
|
|
2313
|
+
else {
|
|
2314
|
+
this.fieldListSortColumn = column;
|
|
2315
|
+
this.fieldListSortDirection = 'asc';
|
|
2316
|
+
}
|
|
2317
|
+
this.cdr.markForCheck();
|
|
2318
|
+
}
|
|
2319
|
+
selectField(field) {
|
|
2320
|
+
this.selectedField = field;
|
|
2321
|
+
this.selectedRelationship = null;
|
|
2322
|
+
this.detailPanelOpen = true;
|
|
2323
|
+
this.cdr.markForCheck();
|
|
2324
|
+
}
|
|
2325
|
+
selectRelationship(relationship) {
|
|
2326
|
+
this.selectedRelationship = relationship;
|
|
2327
|
+
this.selectedField = null;
|
|
2328
|
+
this.detailPanelOpen = true;
|
|
2329
|
+
this.cdr.markForCheck();
|
|
2330
|
+
}
|
|
2331
|
+
closeDetailPanel() {
|
|
2332
|
+
this.detailPanelOpen = false;
|
|
2333
|
+
this.selectedField = null;
|
|
2334
|
+
this.selectedRelationship = null;
|
|
2335
|
+
this.cdr.markForCheck();
|
|
2336
|
+
}
|
|
2337
|
+
toggleRelationshipView() {
|
|
2338
|
+
this.relationshipViewMode = this.relationshipViewMode === 'diagram' ? 'list' : 'diagram';
|
|
2339
|
+
this.cdr.markForCheck();
|
|
2340
|
+
}
|
|
2341
|
+
/**
|
|
2342
|
+
* Change the ERD depth level.
|
|
2343
|
+
*/
|
|
2344
|
+
setErdDepth(depth) {
|
|
2345
|
+
if (depth >= 1 && depth <= 5) {
|
|
2346
|
+
this.erdDepth = depth;
|
|
2347
|
+
this.cdr.markForCheck();
|
|
2348
|
+
}
|
|
2349
|
+
}
|
|
2350
|
+
/**
|
|
2351
|
+
* Handle open record from the ERD composite component.
|
|
2352
|
+
* Navigates to the selected entity's form using SharedService.
|
|
2353
|
+
*/
|
|
2354
|
+
onERDOpenRecord(event) {
|
|
2355
|
+
const pkey = new CompositeKey([{ FieldName: 'ID', Value: event.RecordID }]);
|
|
2356
|
+
this.sharedService.OpenEntityRecord(event.EntityName, pkey);
|
|
2357
|
+
}
|
|
2358
|
+
/**
|
|
2359
|
+
* Handle ERD composite state changes (for future persistence if needed).
|
|
2360
|
+
*/
|
|
2361
|
+
onERDStateChange(_state) {
|
|
2362
|
+
// ERD composite now handles all internal state management
|
|
2363
|
+
// This handler is kept for potential future state persistence needs
|
|
2364
|
+
}
|
|
2365
|
+
onFieldSearch(term) {
|
|
2366
|
+
this.fieldSearchTerm = term.toLowerCase();
|
|
2367
|
+
this.cdr.markForCheck();
|
|
2368
|
+
}
|
|
2369
|
+
getFilteredFieldGroups() {
|
|
2370
|
+
if (!this.fieldSearchTerm) {
|
|
2371
|
+
return this.fieldGroups;
|
|
2372
|
+
}
|
|
2373
|
+
return this.fieldGroups
|
|
2374
|
+
.map(group => ({
|
|
2375
|
+
...group,
|
|
2376
|
+
fields: group.fields.filter(f => f.Name.toLowerCase().includes(this.fieldSearchTerm) ||
|
|
2377
|
+
(f.DisplayName && f.DisplayName.toLowerCase().includes(this.fieldSearchTerm)) ||
|
|
2378
|
+
(f.Description && f.Description.toLowerCase().includes(this.fieldSearchTerm)))
|
|
2379
|
+
}))
|
|
2380
|
+
.filter(group => group.fields.length > 0);
|
|
2381
|
+
}
|
|
2382
|
+
// === Computed Getters ===
|
|
2383
|
+
get statusClass() {
|
|
2384
|
+
if (!this.entity)
|
|
2385
|
+
return '';
|
|
2386
|
+
switch (this.entity.Status) {
|
|
2387
|
+
case 'Active': return 'status-active';
|
|
2388
|
+
case 'Deprecated': return 'status-deprecated';
|
|
2389
|
+
case 'Disabled': return 'status-disabled';
|
|
2390
|
+
default: return '';
|
|
2391
|
+
}
|
|
2392
|
+
}
|
|
2393
|
+
get entityIcon() {
|
|
2394
|
+
return this.entity?.Icon || 'fa-solid fa-database';
|
|
2395
|
+
}
|
|
2396
|
+
get entityDisplayName() {
|
|
2397
|
+
if (!this.entity)
|
|
2398
|
+
return '';
|
|
2399
|
+
return this.entity.DisplayName || this.entity.Name;
|
|
2400
|
+
}
|
|
2401
|
+
get formattedRowCount() {
|
|
2402
|
+
if (this.stats.rowCount === null)
|
|
2403
|
+
return 'N/A';
|
|
2404
|
+
return this.stats.rowCount.toLocaleString();
|
|
2405
|
+
}
|
|
2406
|
+
get capabilitySummary() {
|
|
2407
|
+
if (!this.entity)
|
|
2408
|
+
return [];
|
|
2409
|
+
const caps = [];
|
|
2410
|
+
if (this.entity.IncludeInAPI)
|
|
2411
|
+
caps.push('API');
|
|
2412
|
+
if (this.entity.AllowCreateAPI)
|
|
2413
|
+
caps.push('Create');
|
|
2414
|
+
if (this.entity.AllowUpdateAPI)
|
|
2415
|
+
caps.push('Update');
|
|
2416
|
+
if (this.entity.AllowDeleteAPI)
|
|
2417
|
+
caps.push('Delete');
|
|
2418
|
+
if (this.entity.TrackRecordChanges)
|
|
2419
|
+
caps.push('Track Changes');
|
|
2420
|
+
if (this.entity.FullTextSearchEnabled)
|
|
2421
|
+
caps.push('FTS');
|
|
2422
|
+
return caps;
|
|
2423
|
+
}
|
|
2424
|
+
getFieldTypeIcon(field) {
|
|
2425
|
+
if (field.IsPrimaryKey)
|
|
2426
|
+
return 'fa-solid fa-key';
|
|
2427
|
+
if (field.RelatedEntityID)
|
|
2428
|
+
return 'fa-solid fa-link';
|
|
2429
|
+
if (field.Encrypt)
|
|
2430
|
+
return 'fa-solid fa-lock';
|
|
2431
|
+
if (field.ValueListType !== 'None')
|
|
2432
|
+
return 'fa-solid fa-list';
|
|
2433
|
+
if (field.IsSpecialDateField)
|
|
2434
|
+
return 'fa-solid fa-clock';
|
|
2435
|
+
// Type-based icons
|
|
2436
|
+
switch (field.TSType) {
|
|
2437
|
+
case 'number': return 'fa-solid fa-hashtag';
|
|
2438
|
+
case 'boolean': return 'fa-solid fa-toggle-on';
|
|
2439
|
+
case 'Date': return 'fa-solid fa-calendar';
|
|
2440
|
+
default: return 'fa-solid fa-font';
|
|
2441
|
+
}
|
|
2442
|
+
}
|
|
2443
|
+
getRelatedEntityName(field) {
|
|
2444
|
+
if (!field.RelatedEntityID)
|
|
2445
|
+
return null;
|
|
2446
|
+
const related = this.allEntities.find(e => e.ID === field.RelatedEntityID);
|
|
2447
|
+
return related?.Name || null;
|
|
2448
|
+
}
|
|
2449
|
+
getRelatedEntity(field) {
|
|
2450
|
+
if (!field.RelatedEntityID)
|
|
2451
|
+
return null;
|
|
2452
|
+
return this.allEntities.find(e => e.ID === field.RelatedEntityID) || null;
|
|
2453
|
+
}
|
|
2454
|
+
navigateToRelatedEntity(field) {
|
|
2455
|
+
const related = this.getRelatedEntity(field);
|
|
2456
|
+
if (related) {
|
|
2457
|
+
const pkey = new CompositeKey([{ FieldName: 'ID', Value: related.ID }]);
|
|
2458
|
+
this.sharedService.OpenEntityRecord('Entities', pkey);
|
|
2459
|
+
}
|
|
2460
|
+
}
|
|
2461
|
+
/**
|
|
2462
|
+
* Open an entity record from the field detail panel.
|
|
2463
|
+
*/
|
|
2464
|
+
openRelatedEntityFromField(entityId) {
|
|
2465
|
+
if (entityId) {
|
|
2466
|
+
const pkey = new CompositeKey([{ FieldName: 'ID', Value: entityId }]);
|
|
2467
|
+
this.sharedService.OpenEntityRecord('Entities', pkey);
|
|
2468
|
+
}
|
|
2469
|
+
}
|
|
2470
|
+
formatFieldType(field) {
|
|
2471
|
+
let type = field.Type;
|
|
2472
|
+
if (field.Length && field.Length > 0) {
|
|
2473
|
+
type += `(${field.Length})`;
|
|
2474
|
+
}
|
|
2475
|
+
else if (field.Precision && field.Scale !== undefined) {
|
|
2476
|
+
type += `(${field.Precision},${field.Scale})`;
|
|
2477
|
+
}
|
|
2478
|
+
return type;
|
|
2479
|
+
}
|
|
2480
|
+
/**
|
|
2481
|
+
* Get the role name for a permission entry.
|
|
2482
|
+
* The EntityPermissionInfo.Role property is not populated because the database view
|
|
2483
|
+
* returns 'RoleName' but the class expects 'Role'. This helper looks up the role
|
|
2484
|
+
* from the Metadata.Roles collection using the RoleID.
|
|
2485
|
+
*/
|
|
2486
|
+
getRoleName(perm) {
|
|
2487
|
+
if (!perm.RoleID)
|
|
2488
|
+
return 'Unknown';
|
|
2489
|
+
const role = this._metadata.Roles.find(r => r.ID === perm.RoleID);
|
|
2490
|
+
return role?.Name || 'Unknown';
|
|
2491
|
+
}
|
|
2492
|
+
/**
|
|
2493
|
+
* Checks if a string value is valid JSON (object or array).
|
|
2494
|
+
*/
|
|
2495
|
+
isJsonValue(value) {
|
|
2496
|
+
if (!value || typeof value !== 'string')
|
|
2497
|
+
return false;
|
|
2498
|
+
const trimmed = value.trim();
|
|
2499
|
+
if (!trimmed.startsWith('{') && !trimmed.startsWith('['))
|
|
2500
|
+
return false;
|
|
2501
|
+
try {
|
|
2502
|
+
JSON.parse(trimmed);
|
|
2503
|
+
return true;
|
|
2504
|
+
}
|
|
2505
|
+
catch {
|
|
2506
|
+
return false;
|
|
2507
|
+
}
|
|
2508
|
+
}
|
|
2509
|
+
/**
|
|
2510
|
+
* Formats a JSON string for display with proper indentation.
|
|
2511
|
+
*/
|
|
2512
|
+
formatJsonValue(value) {
|
|
2513
|
+
if (!value)
|
|
2514
|
+
return '';
|
|
2515
|
+
try {
|
|
2516
|
+
const parsed = JSON.parse(value.trim());
|
|
2517
|
+
return JSON.stringify(parsed, null, 2);
|
|
2518
|
+
}
|
|
2519
|
+
catch {
|
|
2520
|
+
return value;
|
|
2521
|
+
}
|
|
2522
|
+
}
|
|
2523
|
+
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵEntityFormComponentExtended_BaseFactory; return function EntityFormComponentExtended_Factory(t) { return (ɵEntityFormComponentExtended_BaseFactory || (ɵEntityFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(EntityFormComponentExtended)))(t || EntityFormComponentExtended); }; })(); }
|
|
2524
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityFormComponentExtended, selectors: [["mj-entity-form"]], features: [i0.ɵɵInheritDefinitionFeature], decls: 3, vars: 2, consts: [["loadingOrError", ""], ["plainValue", ""], ["class", "entity-explorer", 4, "ngIf", "ngIfElse"], [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, "entity-subtitle"], [1, "schema-table"], [1, "separator"], ["class", "entity-description", 3, "title", 4, "ngIf"], [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, "stat-item"], [1, "fa-solid", "fa-database"], ["class", "stat-value", 4, "ngIf"], ["class", "stat-value loading", 4, "ngIf"], [1, "explorer-body"], [1, "nav-rail"], ["class", "nav-item", 3, "active", "title", "click", 4, "ngFor", "ngForOf"], [1, "main-canvas"], ["class", "section overview-section", 4, "ngIf"], ["class", "section fields-section", 4, "ngIf"], ["class", "section relationships-section", 4, "ngIf"], ["class", "section permissions-section", 4, "ngIf"], ["class", "section lineage-section", 4, "ngIf"], ["class", "section history-section", 4, "ngIf"], ["class", "section settings-section", 4, "ngIf"], [1, "detail-panel"], [1, "panel-header"], [4, "ngIf"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], ["class", "panel-content", 4, "ngIf"], [1, "entity-description", 3, "title"], [1, "stat-value", "loading"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "nav-item", 3, "click", "title"], [1, "nav-label"], ["class", "nav-badge", 4, "ngIf"], [1, "nav-badge"], [1, "section", "overview-section"], [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"], ["class", "capability-tag", 4, "ngFor", "ngForOf"], ["class", "capability-tag disabled", 4, "ngIf"], [1, "info-panel", "database-panel"], [1, "fa-solid", "fa-server"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], ["class", "info-item", 4, "ngIf"], [1, "info-panel", "codegen-panel"], [1, "fa-solid", "fa-code"], [1, "info-value", "code"], [1, "capability-tag"], [1, "fa-solid", "fa-check"], [1, "capability-tag", "disabled"], [1, "section", "fields-section"], [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"], [1, "fa-solid", "fa-layer-group"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], ["class", "expand-collapse-controls", 4, "ngIf"], [1, "section-content", "fields-content"], ["class", "field-groups", 4, "ngIf"], ["class", "fields-list-view", 4, "ngIf"], [1, "expand-collapse-controls"], ["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"], [1, "field-groups"], ["class", "field-group", 3, "expanded", 4, "ngFor", "ngForOf"], [1, "field-group"], [1, "group-header", 3, "click"], [1, "expand-icon", "fa-solid", 3, "ngClass"], [1, "group-icon"], [1, "group-label"], [1, "group-count"], ["class", "group-content", 4, "ngIf"], [1, "group-content"], ["class", "field-item", 3, "selected", "click", 4, "ngFor", "ngForOf"], [1, "field-item", 3, "click"], [1, "field-icon"], [1, "field-info"], [1, "field-name"], [1, "field-meta"], [1, "field-type"], ["class", "field-nullable", 4, "ngIf"], ["class", "field-related", 3, "click", 4, "ngIf"], [1, "field-badges"], ["class", "badge pk", "title", "Primary Key", 4, "ngIf"], ["class", "badge fk", "title", "Foreign Key", 4, "ngIf"], ["class", "badge encrypted", "title", "Encrypted", 4, "ngIf"], [1, "field-nullable"], [1, "field-related", 3, "click"], ["title", "Primary Key", 1, "badge", "pk"], ["title", "Foreign Key", 1, "badge", "fk"], ["title", "Encrypted", 1, "badge", "encrypted"], [1, "fields-list-view"], [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-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"], ["class", "list-row", 3, "selected", "click", 4, "ngFor", "ngForOf"], ["class", "list-empty", 4, "ngIf"], [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-type"], [1, "type-tag"], [1, "list-col", "col-length"], ["class", "length-value", 4, "ngIf"], ["class", "length-value muted", 4, "ngIf"], [1, "list-col", "col-nullable"], [1, "required-indicator"], [1, "flag-badges"], ["class", "flag-badge pk", "title", "Primary Key", 4, "ngIf"], ["class", "flag-badge fk", "title", "Foreign Key", 4, "ngIf"], ["class", "flag-badge encrypted", "title", "Encrypted", 4, "ngIf"], [1, "list-col", "col-desc"], [1, "desc-text", 3, "title"], [1, "length-value"], [1, "length-value", "muted"], ["title", "Primary Key", 1, "flag-badge", "pk"], [1, "fa-solid", "fa-key"], ["title", "Foreign Key", 1, "flag-badge", "fk"], ["title", "Encrypted", 1, "flag-badge", "encrypted"], [1, "list-empty"], [1, "section", "relationships-section"], [1, "view-toggle"], [1, "toggle-btn", 3, "click"], ["class", "depth-selector", 4, "ngIf"], ["class", "relationships-graph", 4, "ngIf"], ["class", "relationships-list", 4, "ngIf"], [1, "depth-selector"], [1, "depth-label"], [1, "depth-buttons"], ["class", "depth-btn", 3, "active", "title", "click", 4, "ngFor", "ngForOf"], [1, "depth-btn", 3, "click", "title"], [1, "relationships-graph"], [3, "stateChange", "openRecord", "focusEntities", "showFilterPanel", "showHeader", "depth"], [1, "relationships-list"], [1, "relationship-group"], [1, "relationship-group-title"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "relationship-items", "grouped"], ["class", "relationship-item-grouped", 4, "ngFor", "ngForOf"], ["class", "empty-state", 4, "ngIf"], [1, "fa-solid", "fa-arrow-right-to-bracket"], [1, "relationship-item-grouped"], [1, "rel-header"], [1, "rel-icon", "outgoing"], [1, "rel-entity-name"], [1, "rel-fields-chips"], ["class", "field-chip outgoing", 3, "title", "click", 4, "ngFor", "ngForOf"], [1, "field-chip", "outgoing", 3, "click", "title"], [1, "empty-state"], [1, "rel-icon", "incoming"], [1, "fa-solid", "fa-arrow-left"], ["class", "field-chip incoming", 3, "title", 4, "ngFor", "ngForOf"], [1, "field-chip", "incoming", 3, "title"], ["class", "fa-solid fa-box bundle-icon", "title", "Bundled in API", 4, "ngIf"], ["title", "Bundled in API", 1, "fa-solid", "fa-box", "bundle-icon"], [1, "section", "permissions-section"], [1, "permissions-matrix"], [1, "matrix-table"], [1, "center"], [4, "ngFor", "ngForOf"], [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"], ["class", "rls-badge", "title", "Read RLS", 4, "ngIf"], ["class", "rls-badge", "title", "Create RLS", 4, "ngIf"], ["class", "rls-badge", "title", "Update RLS", 4, "ngIf"], ["class", "rls-badge", "title", "Delete RLS", 4, "ngIf"], ["class", "no-rls", 4, "ngIf"], ["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, "section", "lineage-section"], [1, "lineage-diagram"], [1, "lineage-stage", "sources"], [1, "lineage-items"], [1, "lineage-item"], [1, "fa-solid", "fa-keyboard"], ["class", "lineage-item", 4, "ngIf"], [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-eye"], [1, "section", "history-section"], [1, "history-config"], [1, "config-status"], [1, "config-text"], [1, "history-info"], [1, "info-card"], [1, "fa-solid", "fa-info-circle"], ["class", "info-card", 4, "ngIf"], [1, "audit-fields-list"], [1, "section", "settings-section"], [1, "settings-panel"], [1, "fa-solid", "fa-sliders"], ["class", "settings-list", 4, "ngIf"], [1, "fa-solid", "fa-magnifying-glass"], ["class", "fts-config", 4, "ngIf"], [1, "fa-solid", "fa-box"], [1, "config-row"], ["class", "config-row", 4, "ngIf"], [1, "settings-list"], ["class", "setting-item", 4, "ngFor", "ngForOf"], [1, "setting-item"], [1, "setting-name"], [4, "ngIf", "ngIfElse"], ["class", "setting-comment", 4, "ngIf"], [1, "setting-value-json"], ["language", "json", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], [1, "setting-value"], [1, "setting-comment"], [1, "fts-config"], [1, "config-value", "enabled"], [1, "fa-solid", "fa-circle-check"], [1, "config-value", "code"], [1, "panel-content"], [1, "detail-section"], ["class", "field-description", 4, "ngIf"], [1, "detail-grid"], [1, "detail-item"], [1, "label"], [1, "value", "code"], [1, "value"], ["class", "detail-item", 4, "ngIf"], ["class", "detail-section", 4, "ngIf"], [1, "field-description"], [1, "value", "link", 3, "click"], [1, "value-list"], ["class", "value-item", 4, "ngFor", "ngForOf"], [1, "value-item"], ["class", "value-code", 4, "ngIf"], [1, "value-display"], [1, "value-code"], ["class", "explorer-loading", 4, "ngIf"], ["class", "explorer-error", 4, "ngIf"], ["class", "explorer-empty", 4, "ngIf"], [1, "explorer-loading"], ["text", "Loading entity..."], [1, "explorer-error"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "explorer-empty"]], template: function EntityFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
2525
|
+
i0.ɵɵtemplate(0, EntityFormComponentExtended_div_0_Template, 61, 31, "div", 2)(1, EntityFormComponentExtended_ng_template_1_Template, 3, 3, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
2526
|
+
} if (rf & 2) {
|
|
2527
|
+
const loadingOrError_r31 = i0.ɵɵreference(2);
|
|
2528
|
+
i0.ɵɵproperty("ngIf", !ctx.isExplorerLoading && ctx.entity)("ngIfElse", loadingOrError_r31);
|
|
2529
|
+
} }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.CodeEditorComponent, i4.LoadingComponent, i5.ERDCompositeComponent, i1.SlicePipe, i1.DatePipe], styles: ["\n\n\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: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-tertiary: #f1f5f9;\n\n --text-primary: #1e293b;\n --text-secondary: #64748b;\n --text-muted: #94a3b8;\n\n --border-color: #e2e8f0;\n --border-light: #f1f5f9;\n\n --accent-color: #3b82f6;\n --accent-light: #eff6ff;\n --accent-dark: #1d4ed8;\n\n --success-color: #10b981;\n --warning-color: #f59e0b;\n --danger-color: #ef4444;\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\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: white;\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: #dcfce7;\n color: #166534;\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\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\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\n.explorer-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\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: white;\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\n.main-canvas[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\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\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\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: white;\n}\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: white;\n}\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\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 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);\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 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\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: white;\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}\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: rgba(239, 68, 68, 0.1);\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: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: #78350f;\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);\n color: white;\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #a78bfa 0%, #8b5cf6 100%);\n color: white;\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.list-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--text-muted);\n gap: 12px;\n}\n\n.list-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n opacity: 0.5;\n}\n\n.list-empty[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n}\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\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\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: #dcfce7;\n color: #166534;\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: #fee2e2;\n color: #991b1b;\n}\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\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.field-group[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-group[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n user-select: none;\n background: linear-gradient(to right, var(--bg-secondary), transparent);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(to right, var(--bg-tertiary), var(--bg-secondary));\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n width: 16px;\n transition: transform var(--transition-fast);\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-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: #fef3c7;\n color: #92400e;\n}\n\n.badge.fk[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.badge.encrypted[_ngcontent-%COMP%] {\n background: #fce7f3;\n color: #9d174d;\n}\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\n.relationships-graph[_ngcontent-%COMP%] .erd-splitter[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph[_ngcontent-%COMP%] kendo-splitter-pane[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\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\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: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n}\n\n.rel-icon.incoming[_ngcontent-%COMP%] {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\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\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: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n border: 1px solid var(--info-border, #90caf9);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--info-color, #1976d2);\n color: white;\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n border: 1px solid var(--success-border, #a5d6a7);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--success-color, #388e3c);\n color: white;\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\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: white;\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\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: #dcfce7;\n color: #166534;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\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: white;\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: #dcfce7;\n color: #166534;\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\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\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: #fafafa;\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: #fafafa;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: #f0f0f0;\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\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.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\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n\n\n\n.explorer-loading[_ngcontent-%COMP%], \n.explorer-error[_ngcontent-%COMP%], \n.explorer-empty[_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.explorer-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.explorer-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.explorer-error[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.explorer-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 1;\n}", ".k-pane[_ngcontent-%COMP%] {\n background-color: #F5F6FA;\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: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: #F5F6FA;\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\n\n\n\n\n\n\n\n\n\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 \n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\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: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\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: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\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 #d1d5db;\n background: white;\n color: #374151;\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: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\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 #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: #9ca3af;\n}"], changeDetection: 0 }); }
|
|
2530
|
+
};
|
|
2531
|
+
EntityFormComponentExtended = __decorate([
|
|
2532
|
+
RegisterClass(BaseFormComponent, 'Entities')
|
|
2533
|
+
], EntityFormComponentExtended);
|
|
2534
|
+
export { EntityFormComponentExtended };
|
|
2535
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityFormComponentExtended, [{
|
|
2536
|
+
type: Component,
|
|
2537
|
+
args: [{ selector: 'mj-entity-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"entity-explorer\" *ngIf=\"!isExplorerLoading && entity; else loadingOrError\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'#3b82f6'\">\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 </div>\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n <span class=\"entity-description\" *ngIf=\"entity.Description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n </div>\n </div>\n </div>\n\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\">\n <i class=\"fa-solid fa-database\"></i>\n <span class=\"stat-value\" *ngIf=\"!isRowCountLoading\">{{ formattedRowCount }}</span>\n <span class=\"stat-value loading\" *ngIf=\"isRowCountLoading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n <button\n *ngFor=\"let item of navItems\"\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 <span class=\"nav-badge\" *ngIf=\"item.badge\">{{ item.badge }}</span>\n </button>\n </nav>\n\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n <section class=\"section overview-section\" *ngIf=\"activeSection === 'overview'\">\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 <span *ngIf=\"stats.encryptedFieldCount\">{{ stats.encryptedFieldCount }} Encrypted</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\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\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\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 <span *ngIf=\"entity.RowCountRunAt\">Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n <span *ngIf=\"!entity.RowCountRunAt\">Row count</span>\n </div>\n </div>\n </div>\n </div>\n\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 <span class=\"capability-tag\" *ngFor=\"let cap of capabilitySummary\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n <span class=\"capability-tag disabled\" *ngIf=\"!entity.IncludeInAPI\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n </div>\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 <div class=\"info-item\" *ngIf=\"entity.spCreate\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n <div class=\"info-item\" *ngIf=\"entity.spUpdate\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n <div class=\"info-item\" *ngIf=\"entity.spDelete\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n </div>\n </div>\n\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 <div class=\"info-item\" *ngIf=\"entity.EntityObjectSubclassName\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n <section class=\"section fields-section\" *ngIf=\"activeSection === 'fields'\">\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\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\n <!-- Expand/Collapse controls (only in grouped mode) -->\n <div class=\"expand-collapse-controls\" *ngIf=\"fieldViewMode === 'grouped'\">\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 </div>\n </div>\n\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n <div class=\"field-groups\" *ngIf=\"fieldViewMode === 'grouped'\">\n <div\n class=\"field-group\"\n *ngFor=\"let group of getFilteredFieldGroups()\"\n [class.expanded]=\"isFieldGroupExpanded(group.id)\">\n\n <div class=\"group-header\" (click)=\"toggleFieldGroup(group.id)\">\n <i class=\"expand-icon fa-solid\" [ngClass]=\"isFieldGroupExpanded(group.id) ? 'fa-chevron-down' : 'fa-chevron-right'\"></i>\n <i [class]=\"group.icon\" class=\"group-icon\"></i>\n <span class=\"group-label\">{{ group.label }}</span>\n <span class=\"group-count\">{{ group.fields.length }}</span>\n </div>\n\n <div class=\"group-content\" *ngIf=\"isFieldGroupExpanded(group.id)\">\n <div\n class=\"field-item\"\n *ngFor=\"let field of group.fields\"\n (click)=\"selectField(field)\"\n [class.selected]=\"selectedField?.ID === field.ID\">\n\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n <span class=\"field-nullable\" *ngIf=\"!field.AllowsNull\">Required</span>\n <span class=\"field-related\" *ngIf=\"field.RelatedEntityID\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n </div>\n </div>\n\n <div class=\"field-badges\">\n <span class=\"badge pk\" *ngIf=\"field.IsPrimaryKey\" title=\"Primary Key\">PK</span>\n <span class=\"badge fk\" *ngIf=\"field.RelatedEntityID && !field.IsPrimaryKey\" title=\"Foreign Key\">FK</span>\n <span class=\"badge encrypted\" *ngIf=\"field.Encrypt\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- List View - Modern Card-style Table -->\n <div class=\"fields-list-view\" *ngIf=\"fieldViewMode === 'list'\">\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-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\n <!-- Table Body -->\n <div class=\"list-body\">\n <div\n class=\"list-row\"\n *ngFor=\"let field of getFilteredFieldsList(); let i = index\"\n [class.selected]=\"selectedField?.ID === field.ID\"\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.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 <span class=\"length-value\" *ngIf=\"field.Length > 0\">{{ field.Length }}</span>\n <span class=\"length-value muted\" *ngIf=\"field.Length <= 0\">\u2014</span>\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 <span class=\"flag-badge pk\" *ngIf=\"field.IsPrimaryKey\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n <span class=\"flag-badge fk\" *ngIf=\"field.RelatedEntityID && !field.IsPrimaryKey\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n <span class=\"flag-badge encrypted\" *ngIf=\"field.Encrypt\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\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 </div>\n\n <!-- Empty state -->\n <div class=\"list-empty\" *ngIf=\"getFilteredFieldsList().length === 0\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No fields match your search</span>\n </div>\n </div>\n </div>\n </section>\n\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n <section class=\"section relationships-section\" *ngIf=\"activeSection === 'relationships'\">\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\n <!-- Depth selector (only in diagram mode) -->\n <div class=\"depth-selector\" *ngIf=\"relationshipViewMode === 'diagram'\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n <button\n *ngFor=\"let d of [1, 2, 3, 4, 5]\"\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 </div>\n </div>\n </div>\n\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n <div class=\"relationships-graph\" *ngIf=\"relationshipViewMode === 'diagram'\">\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 <div class=\"relationships-list\" *ngIf=\"relationshipViewMode === '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 <div\n class=\"relationship-item-grouped\"\n *ngFor=\"let group of groupedOutgoingRelationships\">\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 <span\n class=\"field-chip outgoing\"\n *ngFor=\"let field of group.fields\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n </div>\n </div>\n <div class=\"empty-state\" *ngIf=\"groupedOutgoingRelationships.length === 0\">\n <p>No outgoing relationships</p>\n </div>\n </div>\n </div>\n\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 <div\n class=\"relationship-item-grouped\"\n *ngFor=\"let group of groupedIncomingRelationships\">\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 <span\n class=\"field-chip incoming\"\n *ngFor=\"let field of group.fields\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n <i class=\"fa-solid fa-box bundle-icon\" *ngIf=\"field.bundleInAPI\" title=\"Bundled in API\"></i>\n </span>\n </div>\n </div>\n <div class=\"empty-state\" *ngIf=\"groupedIncomingRelationships.length === 0\">\n <p>No incoming relationships</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n <section class=\"section permissions-section\" *ngIf=\"activeSection === 'permissions'\">\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 <tr *ngFor=\"let perm of entity.Permissions\">\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 <span *ngIf=\"perm.ReadRLSFilterID\" class=\"rls-badge\" title=\"Read RLS\">R</span>\n <span *ngIf=\"perm.CreateRLSFilterID\" class=\"rls-badge\" title=\"Create RLS\">C</span>\n <span *ngIf=\"perm.UpdateRLSFilterID\" class=\"rls-badge\" title=\"Update RLS\">U</span>\n <span *ngIf=\"perm.DeleteRLSFilterID\" class=\"rls-badge\" title=\"Delete RLS\">D</span>\n <span *ngIf=\"!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID\" class=\"no-rls\">None</span>\n </td>\n </tr>\n </tbody>\n </table>\n <div class=\"empty-state\" *ngIf=\"entity.Permissions.length === 0\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <p>No permissions configured</p>\n </div>\n </div>\n\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 <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n <section class=\"section lineage-section\" *ngIf=\"activeSection === 'lineage'\">\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 <div class=\"lineage-item\" *ngIf=\"entity.IncludeInAPI\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n </div>\n </div>\n\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n\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\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\" *ngIf=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n <div class=\"lineage-item\" *ngIf=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\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\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>\n </section>\n\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n <section class=\"section history-section\" *ngIf=\"activeSection === 'history'\">\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\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 <p *ngIf=\"entity.TrackRecordChanges\">\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 <p *ngIf=\"!entity.TrackRecordChanges\">\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 </div>\n\n <div class=\"info-card\" *ngIf=\"entity.TrackRecordChanges\">\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 <li *ngIf=\"entity.DeleteType === 'Soft'\">\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n </ul>\n </div>\n </div>\n </div>\n </section>\n\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n <section class=\"section settings-section\" *ngIf=\"activeSection === 'settings'\">\n <div class=\"section-content\">\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 <div class=\"settings-list\" *ngIf=\"entity.Settings.length > 0\">\n <div class=\"setting-item\" *ngFor=\"let setting of entity.Settings\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n <ng-container *ngIf=\"isJsonValue(setting.Value); else plainValue\">\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 </ng-container>\n <ng-template #plainValue>\n <div class=\"setting-value\">{{ setting.Value }}</div>\n </ng-template>\n <div class=\"setting-comment\" *ngIf=\"setting.Comments\">{{ setting.Comments }}</div>\n </div>\n </div>\n <div class=\"empty-state\" *ngIf=\"entity.Settings.length === 0\">\n <p>No custom settings configured</p>\n </div>\n </div>\n\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 <div class=\"fts-config\" *ngIf=\"entity.FullTextSearchEnabled\">\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 <div class=\"config-row\" *ngIf=\"entity.FullTextCatalog\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n <div class=\"config-row\" *ngIf=\"entity.FullTextIndex\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n <div class=\"config-row\" *ngIf=\"entity.FullTextSearchFunction\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n </div>\n <div class=\"empty-state\" *ngIf=\"!entity.FullTextSearchEnabled\">\n <p>Full-text search is not enabled for this entity</p>\n </div>\n </div>\n\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 <div class=\"config-row\" *ngIf=\"entity.RowsToPackSampleCount\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n <div class=\"config-row\" *ngIf=\"entity.RowsToPackSampleMethod\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n </main>\n\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n <h3 *ngIf=\"selectedField\">Field Details</h3>\n <h3 *ngIf=\"selectedRelationship\">Relationship Details</h3>\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n <!-- Field Details -->\n <div class=\"panel-content\" *ngIf=\"selectedField\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <p class=\"field-description\" *ngIf=\"selectedField.Description\">{{ selectedField.Description }}</p>\n </div>\n\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 <div class=\"detail-item\" *ngIf=\"selectedField.DefaultValue\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n </div>\n </div>\n\n <div class=\"detail-section\" *ngIf=\"selectedField.RelatedEntityID\">\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 <div class=\"detail-section\" *ngIf=\"selectedField.Encrypt\">\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\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 <div class=\"detail-item\" *ngIf=\"selectedField.Category\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\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\n <div class=\"detail-section\" *ngIf=\"selectedField.EntityFieldValues.length > 0\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n <div class=\"value-item\" *ngFor=\"let val of selectedField.EntityFieldValues\">\n <span class=\"value-code\" *ngIf=\"val.Code !== val.Value\">{{ val.Code }}</span>\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Relationship Details -->\n <div class=\"panel-content\" *ngIf=\"selectedRelationship\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n\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\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 </aside>\n </div>\n</div>\n\n<!-- Loading / Error State -->\n<ng-template #loadingOrError>\n <div class=\"explorer-loading\" *ngIf=\"isExplorerLoading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n <div class=\"explorer-error\" *ngIf=\"!isExplorerLoading && explorerError\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <p>{{ explorerError }}</p>\n </div>\n <div class=\"explorer-empty\" *ngIf=\"!isExplorerLoading && !explorerError && !entity\">\n <i class=\"fa-solid fa-database\"></i>\n <p>Entity metadata not available</p>\n </div>\n</ng-template>\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: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-tertiary: #f1f5f9;\n\n --text-primary: #1e293b;\n --text-secondary: #64748b;\n --text-muted: #94a3b8;\n\n --border-color: #e2e8f0;\n --border-light: #f1f5f9;\n\n --accent-color: #3b82f6;\n --accent-light: #eff6ff;\n --accent-dark: #1d4ed8;\n\n --success-color: #10b981;\n --warning-color: #f59e0b;\n --danger-color: #ef4444;\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: white;\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: #dcfce7;\n color: #166534;\n}\n\n.status-badge.status-deprecated {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-badge.status-disabled {\n background: #fee2e2;\n color: #991b1b;\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: white;\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}\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: white;\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: white;\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 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);\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 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: white;\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}\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: rgba(239, 68, 68, 0.1);\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: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: #78350f;\n}\n\n.flag-badge.fk {\n background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);\n color: white;\n}\n\n.flag-badge.encrypted {\n background: linear-gradient(135deg, #a78bfa 0%, #8b5cf6 100%);\n color: white;\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.list-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--text-muted);\n gap: 12px;\n}\n\n.list-empty i {\n font-size: 32px;\n opacity: 0.5;\n}\n\n.list-empty span {\n font-size: 14px;\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: #dcfce7;\n color: #166534;\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: #fee2e2;\n color: #991b1b;\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 {\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-group:last-child {\n border-bottom: none;\n}\n\n.group-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n user-select: none;\n background: linear-gradient(to right, var(--bg-secondary), transparent);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header:hover {\n background: linear-gradient(to right, var(--bg-tertiary), var(--bg-secondary));\n}\n\n.expand-icon {\n font-size: 10px;\n color: var(--text-muted);\n width: 16px;\n transition: transform var(--transition-fast);\n}\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-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: #fef3c7;\n color: #92400e;\n}\n\n.badge.fk {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.badge.encrypted {\n background: #fce7f3;\n color: #9d174d;\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 kendo-splitter-pane {\n display: flex;\n flex-direction: column;\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: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n}\n\n.rel-icon.incoming {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\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: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n border: 1px solid var(--info-border, #90caf9);\n}\n\n.field-chip.outgoing:hover {\n background: var(--info-color, #1976d2);\n color: white;\n}\n\n.field-chip.incoming {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n border: 1px solid var(--success-border, #a5d6a7);\n}\n\n.field-chip.incoming:hover {\n background: var(--success-color, #388e3c);\n color: white;\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: white;\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: #dcfce7;\n color: #166534;\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: white;\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: #dcfce7;\n color: #166534;\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/* ============================================================\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: #fafafa;\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: #fafafa;\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: #f0f0f0;\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.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 EMPTY STATES\n ============================================================ */\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n}\n\n/* ============================================================\n LOADING / ERROR STATES\n ============================================================ */\n\n.explorer-loading,\n.explorer-error,\n.explorer-empty {\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.explorer-error i,\n.explorer-empty i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.explorer-error {\n color: var(--danger-color);\n}\n\n.explorer-error i {\n opacity: 1;\n}\n", ".k-pane {\n background-color: #F5F6FA;\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: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: #F5F6FA;\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\n/* .record-form .record-form-row:nth-child(odd) {\n background-color: #f2f2f2; \n} */\n\n/* \n.record-form .record-form-row:nth-child(even) {\n background-color: #ffffff; \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 \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: #F5F6FA;\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: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\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: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\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: #667eea;\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header .collapse-icon {\n color: #6b7280;\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: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity .collapsible-header {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity .collapsible-title i {\n color: #3b82f6;\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\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 #d1d5db;\n background: white;\n color: #374151;\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: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\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 #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls .section-search::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: #6b7280;\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: #667eea;\n color: white;\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: #fef08a;\n color: #854d0e;\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: #10b981;\n color: white;\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: #9ca3af;\n}\n"] }]
|
|
2538
|
+
}], null, null); })();
|
|
2539
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(EntityFormComponentExtended, { className: "EntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber: 99 }); })();
|
|
2540
|
+
export function LoadEntityFormComponentExtended() {
|
|
2541
|
+
// Prevents tree-shaking
|
|
2542
|
+
}
|
|
2543
|
+
//# sourceMappingURL=entity-form.component.js.map
|