@memberjunction/ng-core-entity-forms 5.14.0 → 5.16.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/AIPromptRuns/ai-prompt-run-form.component.js +55 -33
- package/dist/lib/custom/AIPromptRuns/ai-prompt-run-form.component.js.map +1 -1
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js +340 -315
- package/dist/lib/custom/AIPrompts/ai-prompt-form.component.js.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts +35 -2
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +917 -632
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.js +16 -4
- package/dist/lib/generated/Entities/MJAICredentialBinding/mjaicredentialbinding.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js +117 -113
- package/dist/lib/generated/Entities/MJAIModel/mjaimodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js +23 -13
- package/dist/lib/generated/Entities/MJAIModelType/mjaimodeltype.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js +15 -11
- package/dist/lib/generated/Entities/MJAIModelVendor/mjaimodelvendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js +91 -87
- package/dist/lib/generated/Entities/MJAIPrompt/mjaiprompt.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJAIPromptModel/mjaipromptmodel.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js +13 -15
- package/dist/lib/generated/Entities/MJAIPromptRun/mjaipromptrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJAIVendor/mjaivendor.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +39 -37
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js +29 -27
- package/dist/lib/generated/Entities/MJCompanyIntegrationRun/mjcompanyintegrationrun.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js +2 -2
- package/dist/lib/generated/Entities/MJCredential/mjcredential.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js +109 -73
- package/dist/lib/generated/Entities/MJEntity/mjentity.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js +99 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKey/mjentityorganickey.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.js +87 -0
- package/dist/lib/generated/Entities/MJEntityOrganicKeyRelatedEntity/mjentityorganickeyrelatedentity.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js +22 -4
- package/dist/lib/generated/Entities/MJScheduledJob/mjscheduledjob.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js +22 -4
- package/dist/lib/generated/Entities/MJScheduledJobRun/mjscheduledjobrun.form.component.js.map +1 -1
- package/dist/lib/generated/generated-forms.module.d.ts +137 -135
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +49 -43
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/dist/public-api.d.ts +23 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +28 -3
- package/dist/public-api.js.map +1 -1
- package/package.json +32 -32
|
@@ -24,17 +24,20 @@ const _c1 = a0 => [a0];
|
|
|
24
24
|
const _c2 = () => [];
|
|
25
25
|
const _forTrack0 = ($index, $item) => $item.ID;
|
|
26
26
|
const _forTrack1 = ($index, $item) => $item.EntityName;
|
|
27
|
+
const _forTrack2 = ($index, $item) => $item.OrganicKey.ID;
|
|
28
|
+
const _forTrack3 = ($index, $item) => $item.Info.ID;
|
|
29
|
+
const _forTrack4 = ($index, $item) => $item.OrganicKey.ID + $item.SourceEntityName;
|
|
27
30
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
28
31
|
i0.ɵɵelementStart(0, "span", 8);
|
|
29
|
-
i0.ɵɵelement(1, "i",
|
|
32
|
+
i0.ɵɵelement(1, "i", 42);
|
|
30
33
|
i0.ɵɵtext(2, " Virtual ");
|
|
31
34
|
i0.ɵɵelementEnd();
|
|
32
35
|
} }
|
|
33
36
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
34
37
|
const _r2 = i0.ɵɵgetCurrentView();
|
|
35
|
-
i0.ɵɵelementStart(0, "span",
|
|
38
|
+
i0.ɵɵelementStart(0, "span", 43);
|
|
36
39
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_12_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
37
|
-
i0.ɵɵelement(1, "i",
|
|
40
|
+
i0.ɵɵelement(1, "i", 44);
|
|
38
41
|
i0.ɵɵtext(2);
|
|
39
42
|
i0.ɵɵelementEnd();
|
|
40
43
|
} if (rf & 2) {
|
|
@@ -43,17 +46,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_12_Template(rf,
|
|
|
43
46
|
i0.ɵɵtextInterpolate1(" IS-A ", ctx_r2.ParentChain[0] == null ? null : ctx_r2.ParentChain[0].Name, " ");
|
|
44
47
|
} }
|
|
45
48
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
46
|
-
i0.ɵɵelementStart(0, "span",
|
|
47
|
-
i0.ɵɵelement(1, "i",
|
|
49
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
50
|
+
i0.ɵɵelement(1, "i", 48);
|
|
48
51
|
i0.ɵɵtext(2, " Overlapping Subtypes ");
|
|
49
52
|
i0.ɵɵelementEnd();
|
|
50
53
|
} }
|
|
51
54
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵelementStart(0, "span",
|
|
53
|
-
i0.ɵɵelement(1, "i",
|
|
55
|
+
i0.ɵɵelementStart(0, "span", 45);
|
|
56
|
+
i0.ɵɵelement(1, "i", 46);
|
|
54
57
|
i0.ɵɵtext(2);
|
|
55
58
|
i0.ɵɵelementEnd();
|
|
56
|
-
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_13_Conditional_3_Template, 3, 0, "span",
|
|
59
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_13_Conditional_3_Template, 3, 0, "span", 47);
|
|
57
60
|
} if (rf & 2) {
|
|
58
61
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
59
62
|
i0.ɵɵadvance(2);
|
|
@@ -63,7 +66,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_13_Template(rf,
|
|
|
63
66
|
} }
|
|
64
67
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
65
68
|
i0.ɵɵelementStart(0, "div", 10);
|
|
66
|
-
i0.ɵɵelement(1, "i",
|
|
69
|
+
i0.ɵɵelement(1, "i", 49);
|
|
67
70
|
i0.ɵɵtext(2);
|
|
68
71
|
i0.ɵɵelementEnd();
|
|
69
72
|
} if (rf & 2) {
|
|
@@ -93,11 +96,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_42_Template(rf,
|
|
|
93
96
|
} }
|
|
94
97
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
95
98
|
i0.ɵɵelementStart(0, "span", 23);
|
|
96
|
-
i0.ɵɵelement(1, "i",
|
|
99
|
+
i0.ɵɵelement(1, "i", 50);
|
|
97
100
|
i0.ɵɵelementEnd();
|
|
98
101
|
} }
|
|
99
102
|
function MJEntityFormComponentExtended_Conditional_0_For_49_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
100
|
-
i0.ɵɵelementStart(0, "span",
|
|
103
|
+
i0.ɵɵelementStart(0, "span", 53);
|
|
101
104
|
i0.ɵɵtext(1);
|
|
102
105
|
i0.ɵɵelementEnd();
|
|
103
106
|
} if (rf & 2) {
|
|
@@ -107,13 +110,13 @@ function MJEntityFormComponentExtended_Conditional_0_For_49_Conditional_4_Templa
|
|
|
107
110
|
} }
|
|
108
111
|
function MJEntityFormComponentExtended_Conditional_0_For_49_Template(rf, ctx) { if (rf & 1) {
|
|
109
112
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
110
|
-
i0.ɵɵelementStart(0, "button",
|
|
113
|
+
i0.ɵɵelementStart(0, "button", 51);
|
|
111
114
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_For_49_Template_button_click_0_listener() { const item_r5 = i0.ɵɵrestoreView(_r4).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection(item_r5.id)); });
|
|
112
115
|
i0.ɵɵelement(1, "i");
|
|
113
|
-
i0.ɵɵelementStart(2, "span",
|
|
116
|
+
i0.ɵɵelementStart(2, "span", 52);
|
|
114
117
|
i0.ɵɵtext(3);
|
|
115
118
|
i0.ɵɵelementEnd();
|
|
116
|
-
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_For_49_Conditional_4_Template, 2, 1, "span",
|
|
119
|
+
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_For_49_Conditional_4_Template, 2, 1, "span", 53);
|
|
117
120
|
i0.ɵɵelementEnd();
|
|
118
121
|
} if (rf & 2) {
|
|
119
122
|
const item_r5 = ctx.$implicit;
|
|
@@ -152,8 +155,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
152
155
|
i0.ɵɵelementEnd();
|
|
153
156
|
} }
|
|
154
157
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_For_64_Template(rf, ctx) { if (rf & 1) {
|
|
155
|
-
i0.ɵɵelementStart(0, "span",
|
|
156
|
-
i0.ɵɵelement(1, "i",
|
|
158
|
+
i0.ɵɵelementStart(0, "span", 73);
|
|
159
|
+
i0.ɵɵelement(1, "i", 85);
|
|
157
160
|
i0.ɵɵtext(2);
|
|
158
161
|
i0.ɵɵelementEnd();
|
|
159
162
|
} if (rf & 2) {
|
|
@@ -162,17 +165,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_For_64_Templ
|
|
|
162
165
|
i0.ɵɵtextInterpolate1(" ", cap_r7, " ");
|
|
163
166
|
} }
|
|
164
167
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
165
|
-
i0.ɵɵelementStart(0, "span",
|
|
166
|
-
i0.ɵɵelement(1, "i",
|
|
168
|
+
i0.ɵɵelementStart(0, "span", 74);
|
|
169
|
+
i0.ɵɵelement(1, "i", 40);
|
|
167
170
|
i0.ɵɵtext(2, " No API ");
|
|
168
171
|
i0.ɵɵelementEnd();
|
|
169
172
|
} }
|
|
170
173
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
171
|
-
i0.ɵɵelementStart(0, "div",
|
|
172
|
-
i0.ɵɵelement(1, "i",
|
|
174
|
+
i0.ɵɵelementStart(0, "div", 86);
|
|
175
|
+
i0.ɵɵelement(1, "i", 42);
|
|
173
176
|
i0.ɵɵelementStart(2, "span");
|
|
174
177
|
i0.ɵɵtext(3, "Virtual Entity \u2014 read-only view backed by ");
|
|
175
|
-
i0.ɵɵelementStart(4, "span",
|
|
178
|
+
i0.ɵɵelementStart(4, "span", 88);
|
|
176
179
|
i0.ɵɵtext(5);
|
|
177
180
|
i0.ɵɵelementEnd()()();
|
|
178
181
|
} if (rf & 2) {
|
|
@@ -182,8 +185,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
182
185
|
} }
|
|
183
186
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_For_7_Template(rf, ctx) { if (rf & 1) {
|
|
184
187
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
185
|
-
i0.ɵɵelement(0, "i",
|
|
186
|
-
i0.ɵɵelementStart(1, "span",
|
|
188
|
+
i0.ɵɵelement(0, "i", 96);
|
|
189
|
+
i0.ɵɵelementStart(1, "span", 97);
|
|
187
190
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_For_7_Template_span_click_1_listener() { const parent_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(parent_r9)); });
|
|
188
191
|
i0.ɵɵtext(2);
|
|
189
192
|
i0.ɵɵelementEnd();
|
|
@@ -195,15 +198,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
195
198
|
i0.ɵɵtextInterpolate1(" ", parent_r9.Name, " ");
|
|
196
199
|
} }
|
|
197
200
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
198
|
-
i0.ɵɵelement(0, "i",
|
|
201
|
+
i0.ɵɵelement(0, "i", 105);
|
|
199
202
|
} }
|
|
200
203
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
201
|
-
i0.ɵɵelement(0, "i",
|
|
204
|
+
i0.ɵɵelement(0, "i", 106);
|
|
202
205
|
} }
|
|
203
206
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_For_10_Template(rf, ctx) { if (rf & 1) {
|
|
204
|
-
i0.ɵɵelementStart(0, "span",
|
|
207
|
+
i0.ɵɵelementStart(0, "span", 109);
|
|
205
208
|
i0.ɵɵtext(1);
|
|
206
|
-
i0.ɵɵelementStart(2, "span",
|
|
209
|
+
i0.ɵɵelementStart(2, "span", 110);
|
|
207
210
|
i0.ɵɵtext(3);
|
|
208
211
|
i0.ɵɵelementEnd()();
|
|
209
212
|
} if (rf & 2) {
|
|
@@ -215,15 +218,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
215
218
|
i0.ɵɵtextInterpolate(field_r11.Type);
|
|
216
219
|
} }
|
|
217
220
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
218
|
-
i0.ɵɵelementStart(0, "div",
|
|
219
|
-
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Conditional_3_Template, 1, 0, "i",
|
|
221
|
+
i0.ɵɵelementStart(0, "div", 102)(1, "div", 103)(2, "span", 104);
|
|
222
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Conditional_3_Template, 1, 0, "i", 105)(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Conditional_4_Template, 1, 0, "i", 106);
|
|
220
223
|
i0.ɵɵtext(5);
|
|
221
224
|
i0.ɵɵelementEnd();
|
|
222
|
-
i0.ɵɵelementStart(6, "span",
|
|
225
|
+
i0.ɵɵelementStart(6, "span", 107);
|
|
223
226
|
i0.ɵɵtext(7);
|
|
224
227
|
i0.ɵɵelementEnd()();
|
|
225
|
-
i0.ɵɵelementStart(8, "div",
|
|
226
|
-
i0.ɵɵrepeaterCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_For_10_Template, 4, 3, "span",
|
|
228
|
+
i0.ɵɵelementStart(8, "div", 108);
|
|
229
|
+
i0.ɵɵrepeaterCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_For_10_Template, 4, 3, "span", 109, _forTrack0);
|
|
227
230
|
i0.ɵɵelementEnd()();
|
|
228
231
|
} if (rf & 2) {
|
|
229
232
|
const group_r12 = ctx.$implicit;
|
|
@@ -238,8 +241,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
238
241
|
i0.ɵɵrepeater(group_r12.Fields);
|
|
239
242
|
} }
|
|
240
243
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
241
|
-
i0.ɵɵelementStart(0, "div",
|
|
242
|
-
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Template, 11, 8, "div",
|
|
244
|
+
i0.ɵɵelementStart(0, "div", 100);
|
|
245
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_For_2_Template, 11, 8, "div", 101, _forTrack1);
|
|
243
246
|
i0.ɵɵelementEnd();
|
|
244
247
|
} if (rf & 2) {
|
|
245
248
|
const ctx_r2 = i0.ɵɵnextContext(6);
|
|
@@ -248,12 +251,12 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
248
251
|
} }
|
|
249
252
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
250
253
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
251
|
-
i0.ɵɵelementStart(0, "div",
|
|
254
|
+
i0.ɵɵelementStart(0, "div", 94)(1, "div", 98);
|
|
252
255
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Template_div_click_1_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.isaFieldInspectorExpanded = !ctx_r2.isaFieldInspectorExpanded); });
|
|
253
|
-
i0.ɵɵelement(2, "i",
|
|
256
|
+
i0.ɵɵelement(2, "i", 99);
|
|
254
257
|
i0.ɵɵtext(3, " Field Source Inspector ");
|
|
255
258
|
i0.ɵɵelementEnd();
|
|
256
|
-
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_Template, 3, 0, "div",
|
|
259
|
+
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Conditional_4_Template, 3, 0, "div", 100);
|
|
257
260
|
i0.ɵɵelementEnd();
|
|
258
261
|
} if (rf & 2) {
|
|
259
262
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -264,9 +267,9 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
264
267
|
} }
|
|
265
268
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_13_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
266
269
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
267
|
-
i0.ɵɵelementStart(0, "span",
|
|
270
|
+
i0.ɵɵelementStart(0, "span", 113);
|
|
268
271
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_13_For_5_Template_span_click_0_listener() { const sibling_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(sibling_r14)); });
|
|
269
|
-
i0.ɵɵelement(1, "i",
|
|
272
|
+
i0.ɵɵelement(1, "i", 114);
|
|
270
273
|
i0.ɵɵtext(2);
|
|
271
274
|
i0.ɵɵelementEnd();
|
|
272
275
|
} if (rf & 2) {
|
|
@@ -276,11 +279,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
276
279
|
i0.ɵɵtextInterpolate1(" ", sibling_r14.Name, " ");
|
|
277
280
|
} }
|
|
278
281
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
279
|
-
i0.ɵɵelementStart(0, "div",
|
|
282
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "div", 90);
|
|
280
283
|
i0.ɵɵtext(2);
|
|
281
284
|
i0.ɵɵelementEnd();
|
|
282
|
-
i0.ɵɵelementStart(3, "div",
|
|
283
|
-
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_13_For_5_Template, 3, 2, "span",
|
|
285
|
+
i0.ɵɵelementStart(3, "div", 111);
|
|
286
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_13_For_5_Template, 3, 2, "span", 112, _forTrack0);
|
|
284
287
|
i0.ɵɵelementEnd()();
|
|
285
288
|
} if (rf & 2) {
|
|
286
289
|
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
@@ -290,21 +293,21 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
290
293
|
i0.ɵɵrepeater(ctx_r2.SiblingEntities);
|
|
291
294
|
} }
|
|
292
295
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
293
|
-
i0.ɵɵelementStart(0, "div",
|
|
296
|
+
i0.ɵɵelementStart(0, "div", 89)(1, "div", 90);
|
|
294
297
|
i0.ɵɵtext(2, "Inheritance Chain");
|
|
295
298
|
i0.ɵɵelementEnd();
|
|
296
|
-
i0.ɵɵelementStart(3, "div",
|
|
299
|
+
i0.ɵɵelementStart(3, "div", 91)(4, "span", 92);
|
|
297
300
|
i0.ɵɵtext(5);
|
|
298
301
|
i0.ɵɵelementEnd();
|
|
299
302
|
i0.ɵɵrepeaterCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_For_7_Template, 3, 2, null, null, _forTrack0);
|
|
300
303
|
i0.ɵɵelementEnd();
|
|
301
|
-
i0.ɵɵelementStart(8, "div",
|
|
302
|
-
i0.ɵɵelement(9, "i",
|
|
304
|
+
i0.ɵɵelementStart(8, "div", 93);
|
|
305
|
+
i0.ɵɵelement(9, "i", 58);
|
|
303
306
|
i0.ɵɵelementStart(10, "span");
|
|
304
307
|
i0.ɵɵtext(11);
|
|
305
308
|
i0.ɵɵelementEnd()()();
|
|
306
|
-
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Template, 5, 2, "div",
|
|
307
|
-
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_13_Template, 6, 2, "div",
|
|
309
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_12_Template, 5, 2, "div", 94);
|
|
310
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Conditional_13_Template, 6, 2, "div", 95);
|
|
308
311
|
} if (rf & 2) {
|
|
309
312
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
310
313
|
i0.ɵɵadvance(5);
|
|
@@ -319,7 +322,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
319
322
|
i0.ɵɵconditional(ctx_r2.SiblingEntities.length > 0 ? 13 : -1);
|
|
320
323
|
} }
|
|
321
324
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
322
|
-
i0.ɵɵelement(0, "i",
|
|
325
|
+
i0.ɵɵelement(0, "i", 50);
|
|
323
326
|
} }
|
|
324
327
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
325
328
|
i0.ɵɵtext(0);
|
|
@@ -330,12 +333,12 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
330
333
|
} }
|
|
331
334
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
332
335
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
333
|
-
i0.ɵɵelementStart(0, "span",
|
|
336
|
+
i0.ɵɵelementStart(0, "span", 116);
|
|
334
337
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Template_span_click_0_listener() { const childCount_r16 = i0.ɵɵrestoreView(_r15).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(childCount_r16.EntityInfo)); });
|
|
335
|
-
i0.ɵɵelement(1, "i",
|
|
338
|
+
i0.ɵɵelement(1, "i", 117);
|
|
336
339
|
i0.ɵɵtext(2);
|
|
337
|
-
i0.ɵɵelementStart(3, "span",
|
|
338
|
-
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Conditional_4_Template, 1, 0, "i",
|
|
340
|
+
i0.ɵɵelementStart(3, "span", 118);
|
|
341
|
+
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Conditional_4_Template, 1, 0, "i", 50)(5, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Conditional_5_Template, 2, 3);
|
|
339
342
|
i0.ɵɵelementEnd()();
|
|
340
343
|
} if (rf & 2) {
|
|
341
344
|
const childCount_r16 = ctx.$implicit;
|
|
@@ -346,11 +349,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
346
349
|
i0.ɵɵconditional(childCount_r16.IsLoading ? 4 : 5);
|
|
347
350
|
} }
|
|
348
351
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
349
|
-
i0.ɵɵelementStart(0, "div",
|
|
352
|
+
i0.ɵɵelementStart(0, "div", 87)(1, "div", 90);
|
|
350
353
|
i0.ɵɵtext(2, "Child Types");
|
|
351
354
|
i0.ɵɵelementEnd();
|
|
352
|
-
i0.ɵɵelementStart(3, "div",
|
|
353
|
-
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Template, 6, 3, "span",
|
|
355
|
+
i0.ɵɵelementStart(3, "div", 111);
|
|
356
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_For_5_Template, 6, 3, "span", 115, _forTrack1);
|
|
354
357
|
i0.ɵɵelementEnd()();
|
|
355
358
|
} if (rf & 2) {
|
|
356
359
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
@@ -358,13 +361,13 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
358
361
|
i0.ɵɵrepeater(ctx_r2.childEntityCounts);
|
|
359
362
|
} }
|
|
360
363
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
361
|
-
i0.ɵɵelementStart(0, "div",
|
|
362
|
-
i0.ɵɵelement(2, "i",
|
|
364
|
+
i0.ɵɵelementStart(0, "div", 75)(1, "h3", 70);
|
|
365
|
+
i0.ɵɵelement(2, "i", 49);
|
|
363
366
|
i0.ɵɵtext(3, " Type Hierarchy ");
|
|
364
367
|
i0.ɵɵelementEnd();
|
|
365
|
-
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_4_Template, 6, 1, "div",
|
|
368
|
+
i0.ɵɵconditionalCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_4_Template, 6, 1, "div", 86);
|
|
366
369
|
i0.ɵɵconditionalCreate(5, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_5_Template, 14, 6);
|
|
367
|
-
i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_Template, 6, 0, "div",
|
|
370
|
+
i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Conditional_6_Template, 6, 0, "div", 87);
|
|
368
371
|
i0.ɵɵelementEnd();
|
|
369
372
|
} if (rf & 2) {
|
|
370
373
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -376,10 +379,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
376
379
|
i0.ɵɵconditional(ctx_r2.IsParentType ? 6 : -1);
|
|
377
380
|
} }
|
|
378
381
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_92_Template(rf, ctx) { if (rf & 1) {
|
|
379
|
-
i0.ɵɵelementStart(0, "div",
|
|
382
|
+
i0.ɵɵelementStart(0, "div", 79)(1, "span", 80);
|
|
380
383
|
i0.ɵɵtext(2, "SP Create");
|
|
381
384
|
i0.ɵɵelementEnd();
|
|
382
|
-
i0.ɵɵelementStart(3, "span",
|
|
385
|
+
i0.ɵɵelementStart(3, "span", 84);
|
|
383
386
|
i0.ɵɵtext(4);
|
|
384
387
|
i0.ɵɵelementEnd()();
|
|
385
388
|
} if (rf & 2) {
|
|
@@ -388,10 +391,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
388
391
|
i0.ɵɵtextInterpolate(ctx_r2.entity.spCreate);
|
|
389
392
|
} }
|
|
390
393
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_93_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
-
i0.ɵɵelementStart(0, "div",
|
|
394
|
+
i0.ɵɵelementStart(0, "div", 79)(1, "span", 80);
|
|
392
395
|
i0.ɵɵtext(2, "SP Update");
|
|
393
396
|
i0.ɵɵelementEnd();
|
|
394
|
-
i0.ɵɵelementStart(3, "span",
|
|
397
|
+
i0.ɵɵelementStart(3, "span", 84);
|
|
395
398
|
i0.ɵɵtext(4);
|
|
396
399
|
i0.ɵɵelementEnd()();
|
|
397
400
|
} if (rf & 2) {
|
|
@@ -400,10 +403,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
400
403
|
i0.ɵɵtextInterpolate(ctx_r2.entity.spUpdate);
|
|
401
404
|
} }
|
|
402
405
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_94_Template(rf, ctx) { if (rf & 1) {
|
|
403
|
-
i0.ɵɵelementStart(0, "div",
|
|
406
|
+
i0.ɵɵelementStart(0, "div", 79)(1, "span", 80);
|
|
404
407
|
i0.ɵɵtext(2, "SP Delete");
|
|
405
408
|
i0.ɵɵelementEnd();
|
|
406
|
-
i0.ɵɵelementStart(3, "span",
|
|
409
|
+
i0.ɵɵelementStart(3, "span", 84);
|
|
407
410
|
i0.ɵɵtext(4);
|
|
408
411
|
i0.ɵɵelementEnd()();
|
|
409
412
|
} if (rf & 2) {
|
|
@@ -412,10 +415,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
412
415
|
i0.ɵɵtextInterpolate(ctx_r2.entity.spDelete);
|
|
413
416
|
} }
|
|
414
417
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_110_Template(rf, ctx) { if (rf & 1) {
|
|
415
|
-
i0.ɵɵelementStart(0, "div",
|
|
418
|
+
i0.ɵɵelementStart(0, "div", 79)(1, "span", 80);
|
|
416
419
|
i0.ɵɵtext(2, "Subclass");
|
|
417
420
|
i0.ɵɵelementEnd();
|
|
418
|
-
i0.ɵɵelementStart(3, "span",
|
|
421
|
+
i0.ɵɵelementStart(3, "span", 84);
|
|
419
422
|
i0.ɵɵtext(4);
|
|
420
423
|
i0.ɵɵelementEnd()();
|
|
421
424
|
} if (rf & 2) {
|
|
@@ -425,17 +428,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
425
428
|
} }
|
|
426
429
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
427
430
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
428
|
-
i0.ɵɵelementStart(0, "section", 28)(1, "div",
|
|
431
|
+
i0.ɵɵelementStart(0, "section", 28)(1, "div", 54)(2, "div", 55)(3, "div", 56);
|
|
429
432
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection("fields")); });
|
|
430
|
-
i0.ɵɵelementStart(4, "div",
|
|
431
|
-
i0.ɵɵelement(5, "i",
|
|
433
|
+
i0.ɵɵelementStart(4, "div", 57);
|
|
434
|
+
i0.ɵɵelement(5, "i", 58);
|
|
432
435
|
i0.ɵɵelementStart(6, "span");
|
|
433
436
|
i0.ɵɵtext(7, "Fields");
|
|
434
437
|
i0.ɵɵelementEnd()();
|
|
435
|
-
i0.ɵɵelementStart(8, "div",
|
|
438
|
+
i0.ɵɵelementStart(8, "div", 59)(9, "div", 60);
|
|
436
439
|
i0.ɵɵtext(10);
|
|
437
440
|
i0.ɵɵelementEnd();
|
|
438
|
-
i0.ɵɵelementStart(11, "div",
|
|
441
|
+
i0.ɵɵelementStart(11, "div", 61)(12, "span");
|
|
439
442
|
i0.ɵɵtext(13);
|
|
440
443
|
i0.ɵɵelementEnd();
|
|
441
444
|
i0.ɵɵelementStart(14, "span");
|
|
@@ -443,114 +446,114 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template(rf,
|
|
|
443
446
|
i0.ɵɵelementEnd();
|
|
444
447
|
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_16_Template, 2, 1, "span");
|
|
445
448
|
i0.ɵɵelementEnd()();
|
|
446
|
-
i0.ɵɵelementStart(17, "div",
|
|
447
|
-
i0.ɵɵelement(18, "i",
|
|
449
|
+
i0.ɵɵelementStart(17, "div", 62);
|
|
450
|
+
i0.ɵɵelement(18, "i", 63);
|
|
448
451
|
i0.ɵɵelementEnd()();
|
|
449
|
-
i0.ɵɵelementStart(19, "div",
|
|
452
|
+
i0.ɵɵelementStart(19, "div", 64);
|
|
450
453
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template_div_click_19_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection("relationships")); });
|
|
451
|
-
i0.ɵɵelementStart(20, "div",
|
|
452
|
-
i0.ɵɵelement(21, "i",
|
|
454
|
+
i0.ɵɵelementStart(20, "div", 57);
|
|
455
|
+
i0.ɵɵelement(21, "i", 65);
|
|
453
456
|
i0.ɵɵelementStart(22, "span");
|
|
454
457
|
i0.ɵɵtext(23, "Relationships");
|
|
455
458
|
i0.ɵɵelementEnd()();
|
|
456
|
-
i0.ɵɵelementStart(24, "div",
|
|
459
|
+
i0.ɵɵelementStart(24, "div", 59)(25, "div", 60);
|
|
457
460
|
i0.ɵɵtext(26);
|
|
458
461
|
i0.ɵɵelementEnd();
|
|
459
|
-
i0.ɵɵelementStart(27, "div",
|
|
462
|
+
i0.ɵɵelementStart(27, "div", 61)(28, "span");
|
|
460
463
|
i0.ɵɵtext(29);
|
|
461
464
|
i0.ɵɵelementEnd();
|
|
462
465
|
i0.ɵɵelementStart(30, "span");
|
|
463
466
|
i0.ɵɵtext(31);
|
|
464
467
|
i0.ɵɵelementEnd()()();
|
|
465
|
-
i0.ɵɵelementStart(32, "div",
|
|
466
|
-
i0.ɵɵelement(33, "i",
|
|
468
|
+
i0.ɵɵelementStart(32, "div", 62);
|
|
469
|
+
i0.ɵɵelement(33, "i", 63);
|
|
467
470
|
i0.ɵɵelementEnd()();
|
|
468
|
-
i0.ɵɵelementStart(34, "div",
|
|
471
|
+
i0.ɵɵelementStart(34, "div", 66);
|
|
469
472
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template_div_click_34_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setActiveSection("permissions")); });
|
|
470
|
-
i0.ɵɵelementStart(35, "div",
|
|
471
|
-
i0.ɵɵelement(36, "i",
|
|
473
|
+
i0.ɵɵelementStart(35, "div", 57);
|
|
474
|
+
i0.ɵɵelement(36, "i", 67);
|
|
472
475
|
i0.ɵɵelementStart(37, "span");
|
|
473
476
|
i0.ɵɵtext(38, "Security");
|
|
474
477
|
i0.ɵɵelementEnd()();
|
|
475
|
-
i0.ɵɵelementStart(39, "div",
|
|
478
|
+
i0.ɵɵelementStart(39, "div", 59)(40, "div", 60);
|
|
476
479
|
i0.ɵɵtext(41);
|
|
477
480
|
i0.ɵɵelementEnd();
|
|
478
|
-
i0.ɵɵelementStart(42, "div",
|
|
481
|
+
i0.ɵɵelementStart(42, "div", 61)(43, "span");
|
|
479
482
|
i0.ɵɵtext(44, "Roles configured");
|
|
480
483
|
i0.ɵɵelementEnd()()();
|
|
481
|
-
i0.ɵɵelementStart(45, "div",
|
|
482
|
-
i0.ɵɵelement(46, "i",
|
|
484
|
+
i0.ɵɵelementStart(45, "div", 62);
|
|
485
|
+
i0.ɵɵelement(46, "i", 63);
|
|
483
486
|
i0.ɵɵelementEnd()();
|
|
484
|
-
i0.ɵɵelementStart(47, "div",
|
|
487
|
+
i0.ɵɵelementStart(47, "div", 68)(48, "div", 57);
|
|
485
488
|
i0.ɵɵelement(49, "i", 22);
|
|
486
489
|
i0.ɵɵelementStart(50, "span");
|
|
487
490
|
i0.ɵɵtext(51, "Data");
|
|
488
491
|
i0.ɵɵelementEnd()();
|
|
489
|
-
i0.ɵɵelementStart(52, "div",
|
|
492
|
+
i0.ɵɵelementStart(52, "div", 59)(53, "div", 60);
|
|
490
493
|
i0.ɵɵtext(54);
|
|
491
494
|
i0.ɵɵelementEnd();
|
|
492
|
-
i0.ɵɵelementStart(55, "div",
|
|
495
|
+
i0.ɵɵelementStart(55, "div", 61);
|
|
493
496
|
i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_56_Template, 3, 4, "span");
|
|
494
497
|
i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_57_Template, 2, 0, "span");
|
|
495
498
|
i0.ɵɵelementEnd()()()();
|
|
496
|
-
i0.ɵɵelementStart(58, "div",
|
|
497
|
-
i0.ɵɵelement(60, "i",
|
|
499
|
+
i0.ɵɵelementStart(58, "div", 69)(59, "h3", 70);
|
|
500
|
+
i0.ɵɵelement(60, "i", 71);
|
|
498
501
|
i0.ɵɵtext(61, " Capabilities ");
|
|
499
502
|
i0.ɵɵelementEnd();
|
|
500
|
-
i0.ɵɵelementStart(62, "div",
|
|
501
|
-
i0.ɵɵrepeaterCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_51_For_64_Template, 3, 1, "span",
|
|
502
|
-
i0.ɵɵconditionalCreate(65, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_65_Template, 3, 0, "span",
|
|
503
|
+
i0.ɵɵelementStart(62, "div", 72);
|
|
504
|
+
i0.ɵɵrepeaterCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_51_For_64_Template, 3, 1, "span", 73, i0.ɵɵrepeaterTrackByIdentity);
|
|
505
|
+
i0.ɵɵconditionalCreate(65, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_65_Template, 3, 0, "span", 74);
|
|
503
506
|
i0.ɵɵelementEnd()();
|
|
504
|
-
i0.ɵɵconditionalCreate(66, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Template, 7, 3, "div",
|
|
505
|
-
i0.ɵɵelementStart(67, "div",
|
|
506
|
-
i0.ɵɵelement(69, "i",
|
|
507
|
+
i0.ɵɵconditionalCreate(66, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_66_Template, 7, 3, "div", 75);
|
|
508
|
+
i0.ɵɵelementStart(67, "div", 76)(68, "h3", 70);
|
|
509
|
+
i0.ɵɵelement(69, "i", 77);
|
|
507
510
|
i0.ɵɵtext(70, " Database ");
|
|
508
511
|
i0.ɵɵelementEnd();
|
|
509
|
-
i0.ɵɵelementStart(71, "div",
|
|
512
|
+
i0.ɵɵelementStart(71, "div", 78)(72, "div", 79)(73, "span", 80);
|
|
510
513
|
i0.ɵɵtext(74, "Schema");
|
|
511
514
|
i0.ɵɵelementEnd();
|
|
512
|
-
i0.ɵɵelementStart(75, "span",
|
|
515
|
+
i0.ɵɵelementStart(75, "span", 81);
|
|
513
516
|
i0.ɵɵtext(76);
|
|
514
517
|
i0.ɵɵelementEnd()();
|
|
515
|
-
i0.ɵɵelementStart(77, "div",
|
|
518
|
+
i0.ɵɵelementStart(77, "div", 79)(78, "span", 80);
|
|
516
519
|
i0.ɵɵtext(79, "Table");
|
|
517
520
|
i0.ɵɵelementEnd();
|
|
518
|
-
i0.ɵɵelementStart(80, "span",
|
|
521
|
+
i0.ɵɵelementStart(80, "span", 81);
|
|
519
522
|
i0.ɵɵtext(81);
|
|
520
523
|
i0.ɵɵelementEnd()();
|
|
521
|
-
i0.ɵɵelementStart(82, "div",
|
|
524
|
+
i0.ɵɵelementStart(82, "div", 79)(83, "span", 80);
|
|
522
525
|
i0.ɵɵtext(84, "View");
|
|
523
526
|
i0.ɵɵelementEnd();
|
|
524
|
-
i0.ɵɵelementStart(85, "span",
|
|
527
|
+
i0.ɵɵelementStart(85, "span", 81);
|
|
525
528
|
i0.ɵɵtext(86);
|
|
526
529
|
i0.ɵɵelementEnd()();
|
|
527
|
-
i0.ɵɵelementStart(87, "div",
|
|
530
|
+
i0.ɵɵelementStart(87, "div", 79)(88, "span", 80);
|
|
528
531
|
i0.ɵɵtext(89, "Delete Type");
|
|
529
532
|
i0.ɵɵelementEnd();
|
|
530
|
-
i0.ɵɵelementStart(90, "span",
|
|
533
|
+
i0.ɵɵelementStart(90, "span", 81);
|
|
531
534
|
i0.ɵɵtext(91);
|
|
532
535
|
i0.ɵɵelementEnd()();
|
|
533
|
-
i0.ɵɵconditionalCreate(92, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_92_Template, 5, 1, "div",
|
|
534
|
-
i0.ɵɵconditionalCreate(93, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_93_Template, 5, 1, "div",
|
|
535
|
-
i0.ɵɵconditionalCreate(94, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_94_Template, 5, 1, "div",
|
|
536
|
+
i0.ɵɵconditionalCreate(92, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_92_Template, 5, 1, "div", 79);
|
|
537
|
+
i0.ɵɵconditionalCreate(93, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_93_Template, 5, 1, "div", 79);
|
|
538
|
+
i0.ɵɵconditionalCreate(94, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_94_Template, 5, 1, "div", 79);
|
|
536
539
|
i0.ɵɵelementEnd()();
|
|
537
|
-
i0.ɵɵelementStart(95, "div",
|
|
538
|
-
i0.ɵɵelement(97, "i",
|
|
540
|
+
i0.ɵɵelementStart(95, "div", 82)(96, "h3", 70);
|
|
541
|
+
i0.ɵɵelement(97, "i", 83);
|
|
539
542
|
i0.ɵɵtext(98, " Code Generation ");
|
|
540
543
|
i0.ɵɵelementEnd();
|
|
541
|
-
i0.ɵɵelementStart(99, "div",
|
|
544
|
+
i0.ɵɵelementStart(99, "div", 78)(100, "div", 79)(101, "span", 80);
|
|
542
545
|
i0.ɵɵtext(102, "Class Name");
|
|
543
546
|
i0.ɵɵelementEnd();
|
|
544
|
-
i0.ɵɵelementStart(103, "span",
|
|
547
|
+
i0.ɵɵelementStart(103, "span", 84);
|
|
545
548
|
i0.ɵɵtext(104);
|
|
546
549
|
i0.ɵɵelementEnd()();
|
|
547
|
-
i0.ɵɵelementStart(105, "div",
|
|
550
|
+
i0.ɵɵelementStart(105, "div", 79)(106, "span", 80);
|
|
548
551
|
i0.ɵɵtext(107, "Code Name");
|
|
549
552
|
i0.ɵɵelementEnd();
|
|
550
|
-
i0.ɵɵelementStart(108, "span",
|
|
553
|
+
i0.ɵɵelementStart(108, "span", 84);
|
|
551
554
|
i0.ɵɵtext(109);
|
|
552
555
|
i0.ɵɵelementEnd()();
|
|
553
|
-
i0.ɵɵconditionalCreate(110, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_110_Template, 5, 1, "div",
|
|
556
|
+
i0.ɵɵconditionalCreate(110, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_110_Template, 5, 1, "div", 79);
|
|
554
557
|
i0.ɵɵelementEnd()()()();
|
|
555
558
|
} if (rf & 2) {
|
|
556
559
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -605,13 +608,13 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template(rf,
|
|
|
605
608
|
} }
|
|
606
609
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
607
610
|
const _r18 = i0.ɵɵgetCurrentView();
|
|
608
|
-
i0.ɵɵelementStart(0, "div",
|
|
611
|
+
i0.ɵɵelementStart(0, "div", 128)(1, "button", 132);
|
|
609
612
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.expandAllFieldGroups()); });
|
|
610
|
-
i0.ɵɵelement(2, "i",
|
|
613
|
+
i0.ɵɵelement(2, "i", 133);
|
|
611
614
|
i0.ɵɵelementEnd();
|
|
612
|
-
i0.ɵɵelementStart(3, "button",
|
|
615
|
+
i0.ɵɵelementStart(3, "button", 134);
|
|
613
616
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_11_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.collapseAllFieldGroups()); });
|
|
614
|
-
i0.ɵɵelement(4, "i",
|
|
617
|
+
i0.ɵɵelement(4, "i", 135);
|
|
615
618
|
i0.ɵɵelementEnd()();
|
|
616
619
|
} if (rf & 2) {
|
|
617
620
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -621,15 +624,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
621
624
|
i0.ɵɵproperty("disabled", ctx_r2.allFieldGroupsCollapsed);
|
|
622
625
|
} }
|
|
623
626
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
624
|
-
i0.ɵɵelementStart(0, "span",
|
|
627
|
+
i0.ɵɵelementStart(0, "span", 152);
|
|
625
628
|
i0.ɵɵtext(1, "Required");
|
|
626
629
|
i0.ɵɵelementEnd();
|
|
627
630
|
} }
|
|
628
631
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
629
632
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
630
|
-
i0.ɵɵelementStart(0, "span",
|
|
633
|
+
i0.ɵɵelementStart(0, "span", 159);
|
|
631
634
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_12_Template_span_click_0_listener($event) { i0.ɵɵrestoreView(_r23); const field_r22 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(6); ctx_r2.navigateToRelatedEntity(field_r22); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
632
|
-
i0.ɵɵelement(1, "i",
|
|
635
|
+
i0.ɵɵelement(1, "i", 63);
|
|
633
636
|
i0.ɵɵtext(2);
|
|
634
637
|
i0.ɵɵelementEnd();
|
|
635
638
|
} if (rf & 2) {
|
|
@@ -639,23 +642,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
639
642
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.getRelatedEntityName(field_r22), " ");
|
|
640
643
|
} }
|
|
641
644
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
642
|
-
i0.ɵɵelementStart(0, "span",
|
|
645
|
+
i0.ɵɵelementStart(0, "span", 155);
|
|
643
646
|
i0.ɵɵtext(1, "PK");
|
|
644
647
|
i0.ɵɵelementEnd();
|
|
645
648
|
} }
|
|
646
649
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
647
|
-
i0.ɵɵelementStart(0, "span",
|
|
650
|
+
i0.ɵɵelementStart(0, "span", 156);
|
|
648
651
|
i0.ɵɵtext(1, "FK");
|
|
649
652
|
i0.ɵɵelementEnd();
|
|
650
653
|
} }
|
|
651
654
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
652
|
-
i0.ɵɵelementStart(0, "span",
|
|
653
|
-
i0.ɵɵelement(1, "i",
|
|
655
|
+
i0.ɵɵelementStart(0, "span", 157);
|
|
656
|
+
i0.ɵɵelement(1, "i", 67);
|
|
654
657
|
i0.ɵɵelementEnd();
|
|
655
658
|
} }
|
|
656
659
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
657
|
-
i0.ɵɵelementStart(0, "span",
|
|
658
|
-
i0.ɵɵelement(1, "i",
|
|
660
|
+
i0.ɵɵelementStart(0, "span", 158);
|
|
661
|
+
i0.ɵɵelement(1, "i", 44);
|
|
659
662
|
i0.ɵɵtext(2);
|
|
660
663
|
i0.ɵɵelementEnd();
|
|
661
664
|
} if (rf & 2) {
|
|
@@ -667,28 +670,28 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
667
670
|
} }
|
|
668
671
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
669
672
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
670
|
-
i0.ɵɵelementStart(0, "div",
|
|
673
|
+
i0.ɵɵelementStart(0, "div", 145);
|
|
671
674
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Template_div_click_0_listener() { const field_r22 = i0.ɵɵrestoreView(_r21).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.selectField(field_r22)); });
|
|
672
|
-
i0.ɵɵelementStart(1, "div",
|
|
675
|
+
i0.ɵɵelementStart(1, "div", 146);
|
|
673
676
|
i0.ɵɵelement(2, "i");
|
|
674
677
|
i0.ɵɵelementEnd();
|
|
675
|
-
i0.ɵɵelementStart(3, "div",
|
|
678
|
+
i0.ɵɵelementStart(3, "div", 147)(4, "div", 148);
|
|
676
679
|
i0.ɵɵtext(5);
|
|
677
680
|
i0.ɵɵelementEnd();
|
|
678
|
-
i0.ɵɵelementStart(6, "div",
|
|
681
|
+
i0.ɵɵelementStart(6, "div", 149);
|
|
679
682
|
i0.ɵɵtext(7);
|
|
680
683
|
i0.ɵɵelementEnd();
|
|
681
|
-
i0.ɵɵelementStart(8, "div",
|
|
684
|
+
i0.ɵɵelementStart(8, "div", 150)(9, "span", 151);
|
|
682
685
|
i0.ɵɵtext(10);
|
|
683
686
|
i0.ɵɵelementEnd();
|
|
684
|
-
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_11_Template, 2, 0, "span",
|
|
685
|
-
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_12_Template, 3, 1, "span",
|
|
687
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_11_Template, 2, 0, "span", 152);
|
|
688
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_12_Template, 3, 1, "span", 153);
|
|
686
689
|
i0.ɵɵelementEnd()();
|
|
687
|
-
i0.ɵɵelementStart(13, "div",
|
|
688
|
-
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_14_Template, 2, 0, "span",
|
|
689
|
-
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_15_Template, 2, 0, "span",
|
|
690
|
-
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_16_Template, 2, 0, "span",
|
|
691
|
-
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_17_Template, 3, 2, "span",
|
|
690
|
+
i0.ɵɵelementStart(13, "div", 154);
|
|
691
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_14_Template, 2, 0, "span", 155);
|
|
692
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_15_Template, 2, 0, "span", 156);
|
|
693
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_16_Template, 2, 0, "span", 157);
|
|
694
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_17_Template, 3, 2, "span", 158);
|
|
692
695
|
i0.ɵɵelementEnd()();
|
|
693
696
|
} if (rf & 2) {
|
|
694
697
|
const field_r22 = ctx.$implicit;
|
|
@@ -716,8 +719,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
716
719
|
i0.ɵɵconditional(ctx_r2.IsInheritedField(field_r22) ? 17 : -1);
|
|
717
720
|
} }
|
|
718
721
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
719
|
-
i0.ɵɵelementStart(0, "div",
|
|
720
|
-
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Template, 18, 13, "div",
|
|
722
|
+
i0.ɵɵelementStart(0, "div", 143);
|
|
723
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Template, 18, 13, "div", 144, i0.ɵɵrepeaterTrackByIdentity);
|
|
721
724
|
i0.ɵɵelementEnd();
|
|
722
725
|
} if (rf & 2) {
|
|
723
726
|
const group_r20 = i0.ɵɵnextContext().$implicit;
|
|
@@ -726,16 +729,16 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
726
729
|
} }
|
|
727
730
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
728
731
|
const _r19 = i0.ɵɵgetCurrentView();
|
|
729
|
-
i0.ɵɵelementStart(0, "div",
|
|
732
|
+
i0.ɵɵelementStart(0, "div", 137)(1, "div", 138);
|
|
730
733
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Template_div_click_1_listener() { const group_r20 = i0.ɵɵrestoreView(_r19).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.toggleFieldGroup(group_r20.id)); });
|
|
731
|
-
i0.ɵɵelement(2, "i",
|
|
732
|
-
i0.ɵɵelementStart(4, "span",
|
|
734
|
+
i0.ɵɵelement(2, "i", 139)(3, "i", 140);
|
|
735
|
+
i0.ɵɵelementStart(4, "span", 141);
|
|
733
736
|
i0.ɵɵtext(5);
|
|
734
737
|
i0.ɵɵelementEnd();
|
|
735
|
-
i0.ɵɵelementStart(6, "span",
|
|
738
|
+
i0.ɵɵelementStart(6, "span", 142);
|
|
736
739
|
i0.ɵɵtext(7);
|
|
737
740
|
i0.ɵɵelementEnd()();
|
|
738
|
-
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_Template, 3, 0, "div",
|
|
741
|
+
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_Template, 3, 0, "div", 143);
|
|
739
742
|
i0.ɵɵelementEnd();
|
|
740
743
|
} if (rf & 2) {
|
|
741
744
|
const group_r20 = ctx.$implicit;
|
|
@@ -753,8 +756,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
753
756
|
i0.ɵɵconditional(ctx_r2.isFieldGroupExpanded(group_r20.id) ? 8 : -1);
|
|
754
757
|
} }
|
|
755
758
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
756
|
-
i0.ɵɵelementStart(0, "div",
|
|
757
|
-
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Template, 9, 8, "div",
|
|
759
|
+
i0.ɵɵelementStart(0, "div", 130);
|
|
760
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Template, 9, 8, "div", 136, i0.ɵɵrepeaterTrackByIdentity);
|
|
758
761
|
i0.ɵɵelementEnd();
|
|
759
762
|
} if (rf & 2) {
|
|
760
763
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -762,7 +765,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
762
765
|
i0.ɵɵrepeater(ctx_r2.getFilteredFieldGroups());
|
|
763
766
|
} }
|
|
764
767
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
765
|
-
i0.ɵɵelementStart(0, "span",
|
|
768
|
+
i0.ɵɵelementStart(0, "span", 184);
|
|
766
769
|
i0.ɵɵtext(1);
|
|
767
770
|
i0.ɵɵelementEnd();
|
|
768
771
|
} if (rf & 2) {
|
|
@@ -771,30 +774,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
771
774
|
i0.ɵɵtextInterpolate(field_r26.Length);
|
|
772
775
|
} }
|
|
773
776
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
774
|
-
i0.ɵɵelementStart(0, "span",
|
|
777
|
+
i0.ɵɵelementStart(0, "span", 185);
|
|
775
778
|
i0.ɵɵtext(1, "\u2014");
|
|
776
779
|
i0.ɵɵelementEnd();
|
|
777
780
|
} }
|
|
778
781
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
779
|
-
i0.ɵɵelementStart(0, "span",
|
|
780
|
-
i0.ɵɵelement(1, "i",
|
|
782
|
+
i0.ɵɵelementStart(0, "span", 189);
|
|
783
|
+
i0.ɵɵelement(1, "i", 195);
|
|
781
784
|
i0.ɵɵtext(2, " PK ");
|
|
782
785
|
i0.ɵɵelementEnd();
|
|
783
786
|
} }
|
|
784
787
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
785
|
-
i0.ɵɵelementStart(0, "span",
|
|
788
|
+
i0.ɵɵelementStart(0, "span", 190);
|
|
786
789
|
i0.ɵɵelement(1, "i", 20);
|
|
787
790
|
i0.ɵɵtext(2, " FK ");
|
|
788
791
|
i0.ɵɵelementEnd();
|
|
789
792
|
} }
|
|
790
793
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
791
|
-
i0.ɵɵelementStart(0, "span",
|
|
792
|
-
i0.ɵɵelement(1, "i",
|
|
794
|
+
i0.ɵɵelementStart(0, "span", 191);
|
|
795
|
+
i0.ɵɵelement(1, "i", 67);
|
|
793
796
|
i0.ɵɵelementEnd();
|
|
794
797
|
} }
|
|
795
798
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
796
|
-
i0.ɵɵelementStart(0, "span",
|
|
797
|
-
i0.ɵɵelement(1, "i",
|
|
799
|
+
i0.ɵɵelementStart(0, "span", 192);
|
|
800
|
+
i0.ɵɵelement(1, "i", 44);
|
|
798
801
|
i0.ɵɵtext(2);
|
|
799
802
|
i0.ɵɵelementEnd();
|
|
800
803
|
} if (rf & 2) {
|
|
@@ -806,37 +809,37 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
806
809
|
} }
|
|
807
810
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Template(rf, ctx) { if (rf & 1) {
|
|
808
811
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
809
|
-
i0.ɵɵelementStart(0, "div",
|
|
812
|
+
i0.ɵɵelementStart(0, "div", 173);
|
|
810
813
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Template_div_click_0_listener() { const field_r26 = i0.ɵɵrestoreView(_r25).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.selectField(field_r26)); });
|
|
811
|
-
i0.ɵɵelementStart(1, "div",
|
|
814
|
+
i0.ɵɵelementStart(1, "div", 174)(2, "span", 175);
|
|
812
815
|
i0.ɵɵtext(3);
|
|
813
816
|
i0.ɵɵelementEnd()();
|
|
814
|
-
i0.ɵɵelementStart(4, "div",
|
|
815
|
-
i0.ɵɵelement(5, "i",
|
|
816
|
-
i0.ɵɵelementStart(6, "span",
|
|
817
|
+
i0.ɵɵelementStart(4, "div", 176);
|
|
818
|
+
i0.ɵɵelement(5, "i", 177);
|
|
819
|
+
i0.ɵɵelementStart(6, "span", 178);
|
|
817
820
|
i0.ɵɵtext(7);
|
|
818
821
|
i0.ɵɵelementEnd()();
|
|
819
|
-
i0.ɵɵelementStart(8, "div",
|
|
822
|
+
i0.ɵɵelementStart(8, "div", 179)(9, "span", 180);
|
|
820
823
|
i0.ɵɵtext(10);
|
|
821
824
|
i0.ɵɵelementEnd()();
|
|
822
|
-
i0.ɵɵelementStart(11, "div",
|
|
825
|
+
i0.ɵɵelementStart(11, "div", 181)(12, "span", 182);
|
|
823
826
|
i0.ɵɵtext(13);
|
|
824
827
|
i0.ɵɵelementEnd()();
|
|
825
|
-
i0.ɵɵelementStart(14, "div",
|
|
826
|
-
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_15_Template, 2, 1, "span",
|
|
827
|
-
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_16_Template, 2, 0, "span",
|
|
828
|
+
i0.ɵɵelementStart(14, "div", 183);
|
|
829
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_15_Template, 2, 1, "span", 184);
|
|
830
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_16_Template, 2, 0, "span", 185);
|
|
828
831
|
i0.ɵɵelementEnd();
|
|
829
|
-
i0.ɵɵelementStart(17, "div",
|
|
832
|
+
i0.ɵɵelementStart(17, "div", 186)(18, "span", 187);
|
|
830
833
|
i0.ɵɵelement(19, "i");
|
|
831
834
|
i0.ɵɵtext(20);
|
|
832
835
|
i0.ɵɵelementEnd()();
|
|
833
|
-
i0.ɵɵelementStart(21, "div",
|
|
834
|
-
i0.ɵɵconditionalCreate(23, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_23_Template, 3, 0, "span",
|
|
835
|
-
i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_24_Template, 3, 0, "span",
|
|
836
|
-
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_25_Template, 2, 0, "span",
|
|
837
|
-
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_26_Template, 3, 2, "span",
|
|
836
|
+
i0.ɵɵelementStart(21, "div", 168)(22, "div", 188);
|
|
837
|
+
i0.ɵɵconditionalCreate(23, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_23_Template, 3, 0, "span", 189);
|
|
838
|
+
i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_24_Template, 3, 0, "span", 190);
|
|
839
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_25_Template, 2, 0, "span", 191);
|
|
840
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_26_Template, 3, 2, "span", 192);
|
|
838
841
|
i0.ɵɵelementEnd()();
|
|
839
|
-
i0.ɵɵelementStart(27, "div",
|
|
842
|
+
i0.ɵɵelementStart(27, "div", 193)(28, "span", 194);
|
|
840
843
|
i0.ɵɵtext(29);
|
|
841
844
|
i0.ɵɵelementEnd()()();
|
|
842
845
|
} if (rf & 2) {
|
|
@@ -877,56 +880,56 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
877
880
|
i0.ɵɵtextInterpolate(field_r26.Description || "\u2014");
|
|
878
881
|
} }
|
|
879
882
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
880
|
-
i0.ɵɵelementStart(0, "div",
|
|
881
|
-
i0.ɵɵelement(1, "i",
|
|
883
|
+
i0.ɵɵelementStart(0, "div", 172);
|
|
884
|
+
i0.ɵɵelement(1, "i", 121);
|
|
882
885
|
i0.ɵɵelementStart(2, "span");
|
|
883
886
|
i0.ɵɵtext(3, "No fields match your search");
|
|
884
887
|
i0.ɵɵelementEnd()();
|
|
885
888
|
} }
|
|
886
889
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
887
890
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
888
|
-
i0.ɵɵelementStart(0, "div",
|
|
891
|
+
i0.ɵɵelementStart(0, "div", 131)(1, "div", 160)(2, "div", 161);
|
|
889
892
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template_div_click_2_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Sequence")); });
|
|
890
893
|
i0.ɵɵtext(3, " # ");
|
|
891
|
-
i0.ɵɵelement(4, "i",
|
|
894
|
+
i0.ɵɵelement(4, "i", 162);
|
|
892
895
|
i0.ɵɵelementEnd();
|
|
893
|
-
i0.ɵɵelementStart(5, "div",
|
|
896
|
+
i0.ɵɵelementStart(5, "div", 163);
|
|
894
897
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template_div_click_5_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Name")); });
|
|
895
898
|
i0.ɵɵtext(6, " Field Name ");
|
|
896
|
-
i0.ɵɵelement(7, "i",
|
|
899
|
+
i0.ɵɵelement(7, "i", 162);
|
|
897
900
|
i0.ɵɵelementEnd();
|
|
898
|
-
i0.ɵɵelementStart(8, "div",
|
|
901
|
+
i0.ɵɵelementStart(8, "div", 164);
|
|
899
902
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template_div_click_8_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("DisplayName")); });
|
|
900
903
|
i0.ɵɵtext(9, " Display Name ");
|
|
901
|
-
i0.ɵɵelement(10, "i",
|
|
904
|
+
i0.ɵɵelement(10, "i", 162);
|
|
902
905
|
i0.ɵɵelementEnd();
|
|
903
|
-
i0.ɵɵelementStart(11, "div",
|
|
906
|
+
i0.ɵɵelementStart(11, "div", 165);
|
|
904
907
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template_div_click_11_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Type")); });
|
|
905
908
|
i0.ɵɵtext(12, " Type ");
|
|
906
|
-
i0.ɵɵelement(13, "i",
|
|
909
|
+
i0.ɵɵelement(13, "i", 162);
|
|
907
910
|
i0.ɵɵelementEnd();
|
|
908
|
-
i0.ɵɵelementStart(14, "div",
|
|
911
|
+
i0.ɵɵelementStart(14, "div", 166);
|
|
909
912
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template_div_click_14_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Length")); });
|
|
910
913
|
i0.ɵɵtext(15, " Length ");
|
|
911
|
-
i0.ɵɵelement(16, "i",
|
|
914
|
+
i0.ɵɵelement(16, "i", 162);
|
|
912
915
|
i0.ɵɵelementEnd();
|
|
913
|
-
i0.ɵɵelementStart(17, "div",
|
|
916
|
+
i0.ɵɵelementStart(17, "div", 167);
|
|
914
917
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template_div_click_17_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("AllowsNull")); });
|
|
915
918
|
i0.ɵɵtext(18, " Required ");
|
|
916
|
-
i0.ɵɵelement(19, "i",
|
|
919
|
+
i0.ɵɵelement(19, "i", 162);
|
|
917
920
|
i0.ɵɵelementEnd();
|
|
918
|
-
i0.ɵɵelementStart(20, "div",
|
|
921
|
+
i0.ɵɵelementStart(20, "div", 168);
|
|
919
922
|
i0.ɵɵtext(21, "Flags");
|
|
920
923
|
i0.ɵɵelementEnd();
|
|
921
|
-
i0.ɵɵelementStart(22, "div",
|
|
924
|
+
i0.ɵɵelementStart(22, "div", 169);
|
|
922
925
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template_div_click_22_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.sortFieldList("Description")); });
|
|
923
926
|
i0.ɵɵtext(23, " Description ");
|
|
924
|
-
i0.ɵɵelement(24, "i",
|
|
927
|
+
i0.ɵɵelement(24, "i", 162);
|
|
925
928
|
i0.ɵɵelementEnd()();
|
|
926
|
-
i0.ɵɵelementStart(25, "div",
|
|
927
|
-
i0.ɵɵrepeaterCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Template, 30, 23, "div",
|
|
929
|
+
i0.ɵɵelementStart(25, "div", 170);
|
|
930
|
+
i0.ɵɵrepeaterCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Template, 30, 23, "div", 171, i0.ɵɵrepeaterTrackByIdentity);
|
|
928
931
|
i0.ɵɵelementEnd();
|
|
929
|
-
i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Conditional_28_Template, 4, 0, "div",
|
|
932
|
+
i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Conditional_28_Template, 4, 0, "div", 172);
|
|
930
933
|
i0.ɵɵelementEnd();
|
|
931
934
|
} if (rf & 2) {
|
|
932
935
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -965,24 +968,24 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
965
968
|
} }
|
|
966
969
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
967
970
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
968
|
-
i0.ɵɵelementStart(0, "section", 29)(1, "div",
|
|
969
|
-
i0.ɵɵelement(3, "i",
|
|
970
|
-
i0.ɵɵelementStart(4, "input",
|
|
971
|
+
i0.ɵɵelementStart(0, "section", 29)(1, "div", 119)(2, "div", 120);
|
|
972
|
+
i0.ɵɵelement(3, "i", 121);
|
|
973
|
+
i0.ɵɵelementStart(4, "input", 122);
|
|
971
974
|
i0.ɵɵlistener("ngModelChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onFieldSearch($event)); });
|
|
972
975
|
i0.ɵɵelementEnd()();
|
|
973
|
-
i0.ɵɵelementStart(5, "div",
|
|
976
|
+
i0.ɵɵelementStart(5, "div", 123)(6, "div", 124)(7, "button", 125);
|
|
974
977
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.fieldViewMode = "grouped"); });
|
|
975
|
-
i0.ɵɵelement(8, "i",
|
|
978
|
+
i0.ɵɵelement(8, "i", 49);
|
|
976
979
|
i0.ɵɵelementEnd();
|
|
977
|
-
i0.ɵɵelementStart(9, "button",
|
|
980
|
+
i0.ɵɵelementStart(9, "button", 126);
|
|
978
981
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.fieldViewMode = "list"); });
|
|
979
|
-
i0.ɵɵelement(10, "i",
|
|
982
|
+
i0.ɵɵelement(10, "i", 127);
|
|
980
983
|
i0.ɵɵelementEnd()();
|
|
981
|
-
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_11_Template, 5, 2, "div",
|
|
984
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_11_Template, 5, 2, "div", 128);
|
|
982
985
|
i0.ɵɵelementEnd()();
|
|
983
|
-
i0.ɵɵelementStart(12, "div",
|
|
984
|
-
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_Template, 3, 0, "div",
|
|
985
|
-
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template, 29, 22, "div",
|
|
986
|
+
i0.ɵɵelementStart(12, "div", 129);
|
|
987
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_Template, 3, 0, "div", 130);
|
|
988
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template, 29, 22, "div", 131);
|
|
986
989
|
i0.ɵɵelementEnd()();
|
|
987
990
|
} if (rf & 2) {
|
|
988
991
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1001,7 +1004,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template(rf,
|
|
|
1001
1004
|
} }
|
|
1002
1005
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1003
1006
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
1004
|
-
i0.ɵɵelementStart(0, "button",
|
|
1007
|
+
i0.ɵɵelementStart(0, "button", 204);
|
|
1005
1008
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_For_5_Template_button_click_0_listener() { const d_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.setErdDepth(d_r29)); });
|
|
1006
1009
|
i0.ɵɵtext(1);
|
|
1007
1010
|
i0.ɵɵelementEnd();
|
|
@@ -1014,11 +1017,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1014
1017
|
i0.ɵɵtextInterpolate1(" ", d_r29, " ");
|
|
1015
1018
|
} }
|
|
1016
1019
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1017
|
-
i0.ɵɵelementStart(0, "div",
|
|
1020
|
+
i0.ɵɵelementStart(0, "div", 198)(1, "span", 201);
|
|
1018
1021
|
i0.ɵɵtext(2, "Depth:");
|
|
1019
1022
|
i0.ɵɵelementEnd();
|
|
1020
|
-
i0.ɵɵelementStart(3, "div",
|
|
1021
|
-
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_For_5_Template, 2, 4, "button",
|
|
1023
|
+
i0.ɵɵelementStart(3, "div", 202);
|
|
1024
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_For_5_Template, 2, 4, "button", 203, i0.ɵɵrepeaterTrackByIdentity);
|
|
1022
1025
|
i0.ɵɵelementEnd()();
|
|
1023
1026
|
} if (rf & 2) {
|
|
1024
1027
|
i0.ɵɵadvance(4);
|
|
@@ -1026,7 +1029,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1026
1029
|
} }
|
|
1027
1030
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1028
1031
|
const _r30 = i0.ɵɵgetCurrentView();
|
|
1029
|
-
i0.ɵɵelementStart(0, "div",
|
|
1032
|
+
i0.ɵɵelementStart(0, "div", 199)(1, "mj-erd-composite", 205);
|
|
1030
1033
|
i0.ɵɵlistener("stateChange", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template_mj_erd_composite_stateChange_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onERDStateChange($event)); })("openRecord", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template_mj_erd_composite_openRecord_1_listener($event) { i0.ɵɵrestoreView(_r30); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onERDOpenRecord($event)); });
|
|
1031
1034
|
i0.ɵɵelementEnd()();
|
|
1032
1035
|
} if (rf & 2) {
|
|
@@ -1036,7 +1039,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1036
1039
|
} }
|
|
1037
1040
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1038
1041
|
const _r31 = i0.ɵɵgetCurrentView();
|
|
1039
|
-
i0.ɵɵelementStart(0, "span",
|
|
1042
|
+
i0.ɵɵelementStart(0, "span", 218);
|
|
1040
1043
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_For_8_Template_span_click_0_listener() { const field_r32 = i0.ɵɵrestoreView(_r31).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.selectField(field_r32)); });
|
|
1041
1044
|
i0.ɵɵelement(1, "i", 20);
|
|
1042
1045
|
i0.ɵɵtext(2);
|
|
@@ -1048,14 +1051,14 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1048
1051
|
i0.ɵɵtextInterpolate1(" ", field_r32.Name, " ");
|
|
1049
1052
|
} }
|
|
1050
1053
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1051
|
-
i0.ɵɵelementStart(0, "div",
|
|
1052
|
-
i0.ɵɵelement(3, "i",
|
|
1054
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "div", 213)(2, "div", 214);
|
|
1055
|
+
i0.ɵɵelement(3, "i", 63);
|
|
1053
1056
|
i0.ɵɵelementEnd();
|
|
1054
|
-
i0.ɵɵelementStart(4, "div",
|
|
1057
|
+
i0.ɵɵelementStart(4, "div", 215);
|
|
1055
1058
|
i0.ɵɵtext(5);
|
|
1056
1059
|
i0.ɵɵelementEnd()();
|
|
1057
|
-
i0.ɵɵelementStart(6, "div",
|
|
1058
|
-
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_For_8_Template, 3, 2, "span",
|
|
1060
|
+
i0.ɵɵelementStart(6, "div", 216);
|
|
1061
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_For_8_Template, 3, 2, "span", 217, i0.ɵɵrepeaterTrackByIdentity);
|
|
1059
1062
|
i0.ɵɵelementEnd()();
|
|
1060
1063
|
} if (rf & 2) {
|
|
1061
1064
|
const group_r33 = ctx.$implicit;
|
|
@@ -1065,18 +1068,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1065
1068
|
i0.ɵɵrepeater(group_r33.fields);
|
|
1066
1069
|
} }
|
|
1067
1070
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1068
|
-
i0.ɵɵelementStart(0, "div",
|
|
1071
|
+
i0.ɵɵelementStart(0, "div", 211)(1, "p");
|
|
1069
1072
|
i0.ɵɵtext(2, "No outgoing relationships");
|
|
1070
1073
|
i0.ɵɵelementEnd()();
|
|
1071
1074
|
} }
|
|
1072
1075
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1073
|
-
i0.ɵɵelement(0, "i",
|
|
1076
|
+
i0.ɵɵelement(0, "i", 222);
|
|
1074
1077
|
} }
|
|
1075
1078
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1076
|
-
i0.ɵɵelementStart(0, "span",
|
|
1079
|
+
i0.ɵɵelementStart(0, "span", 221);
|
|
1077
1080
|
i0.ɵɵelement(1, "i", 20);
|
|
1078
1081
|
i0.ɵɵtext(2);
|
|
1079
|
-
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Conditional_3_Template, 1, 0, "i",
|
|
1082
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Conditional_3_Template, 1, 0, "i", 222);
|
|
1080
1083
|
i0.ɵɵelementEnd();
|
|
1081
1084
|
} if (rf & 2) {
|
|
1082
1085
|
const field_r34 = ctx.$implicit;
|
|
@@ -1087,14 +1090,14 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1087
1090
|
i0.ɵɵconditional(field_r34.bundleInAPI ? 3 : -1);
|
|
1088
1091
|
} }
|
|
1089
1092
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
1090
|
-
i0.ɵɵelementStart(0, "div",
|
|
1091
|
-
i0.ɵɵelement(3, "i",
|
|
1093
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "div", 213)(2, "div", 219);
|
|
1094
|
+
i0.ɵɵelement(3, "i", 220);
|
|
1092
1095
|
i0.ɵɵelementEnd();
|
|
1093
|
-
i0.ɵɵelementStart(4, "div",
|
|
1096
|
+
i0.ɵɵelementStart(4, "div", 215);
|
|
1094
1097
|
i0.ɵɵtext(5);
|
|
1095
1098
|
i0.ɵɵelementEnd()();
|
|
1096
|
-
i0.ɵɵelementStart(6, "div",
|
|
1097
|
-
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Template, 4, 3, "span",
|
|
1099
|
+
i0.ɵɵelementStart(6, "div", 216);
|
|
1100
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Template, 4, 3, "span", 221, i0.ɵɵrepeaterTrackByIdentity);
|
|
1098
1101
|
i0.ɵɵelementEnd()();
|
|
1099
1102
|
} if (rf & 2) {
|
|
1100
1103
|
const group_r35 = ctx.$implicit;
|
|
@@ -1104,30 +1107,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1104
1107
|
i0.ɵɵrepeater(group_r35.fields);
|
|
1105
1108
|
} }
|
|
1106
1109
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1107
|
-
i0.ɵɵelementStart(0, "div",
|
|
1110
|
+
i0.ɵɵelementStart(0, "div", 211)(1, "p");
|
|
1108
1111
|
i0.ɵɵtext(2, "No incoming relationships");
|
|
1109
1112
|
i0.ɵɵelementEnd()();
|
|
1110
1113
|
} }
|
|
1111
1114
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1112
|
-
i0.ɵɵelementStart(0, "div",
|
|
1113
|
-
i0.ɵɵelement(3, "i",
|
|
1115
|
+
i0.ɵɵelementStart(0, "div", 200)(1, "div", 206)(2, "h3", 207);
|
|
1116
|
+
i0.ɵɵelement(3, "i", 208);
|
|
1114
1117
|
i0.ɵɵtext(4, " Outgoing (References to other entities) ");
|
|
1115
|
-
i0.ɵɵelementStart(5, "span",
|
|
1118
|
+
i0.ɵɵelementStart(5, "span", 142);
|
|
1116
1119
|
i0.ɵɵtext(6);
|
|
1117
1120
|
i0.ɵɵelementEnd()();
|
|
1118
|
-
i0.ɵɵelementStart(7, "div",
|
|
1119
|
-
i0.ɵɵrepeaterCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_Template, 9, 1, "div",
|
|
1120
|
-
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_10_Template, 3, 0, "div",
|
|
1121
|
+
i0.ɵɵelementStart(7, "div", 209);
|
|
1122
|
+
i0.ɵɵrepeaterCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_Template, 9, 1, "div", 210, i0.ɵɵrepeaterTrackByIdentity);
|
|
1123
|
+
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_10_Template, 3, 0, "div", 211);
|
|
1121
1124
|
i0.ɵɵelementEnd()();
|
|
1122
|
-
i0.ɵɵelementStart(11, "div",
|
|
1123
|
-
i0.ɵɵelement(13, "i",
|
|
1125
|
+
i0.ɵɵelementStart(11, "div", 206)(12, "h3", 207);
|
|
1126
|
+
i0.ɵɵelement(13, "i", 212);
|
|
1124
1127
|
i0.ɵɵtext(14, " Incoming (Entities that reference this one) ");
|
|
1125
|
-
i0.ɵɵelementStart(15, "span",
|
|
1128
|
+
i0.ɵɵelementStart(15, "span", 142);
|
|
1126
1129
|
i0.ɵɵtext(16);
|
|
1127
1130
|
i0.ɵɵelementEnd()();
|
|
1128
|
-
i0.ɵɵelementStart(17, "div",
|
|
1129
|
-
i0.ɵɵrepeaterCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_Template, 9, 1, "div",
|
|
1130
|
-
i0.ɵɵconditionalCreate(20, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_20_Template, 3, 0, "div",
|
|
1131
|
+
i0.ɵɵelementStart(17, "div", 209);
|
|
1132
|
+
i0.ɵɵrepeaterCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_Template, 9, 1, "div", 210, i0.ɵɵrepeaterTrackByIdentity);
|
|
1133
|
+
i0.ɵɵconditionalCreate(20, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_20_Template, 3, 0, "div", 211);
|
|
1131
1134
|
i0.ɵɵelementEnd()()();
|
|
1132
1135
|
} if (rf & 2) {
|
|
1133
1136
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1146,21 +1149,21 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1146
1149
|
} }
|
|
1147
1150
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
1148
1151
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
1149
|
-
i0.ɵɵelementStart(0, "section", 30)(1, "div",
|
|
1152
|
+
i0.ɵɵelementStart(0, "section", 30)(1, "div", 119)(2, "div", 196)(3, "button", 197);
|
|
1150
1153
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.relationshipViewMode = "diagram"); });
|
|
1151
|
-
i0.ɵɵelement(4, "i",
|
|
1154
|
+
i0.ɵɵelement(4, "i", 65);
|
|
1152
1155
|
i0.ɵɵtext(5, " Diagram ");
|
|
1153
1156
|
i0.ɵɵelementEnd();
|
|
1154
|
-
i0.ɵɵelementStart(6, "button",
|
|
1157
|
+
i0.ɵɵelementStart(6, "button", 197);
|
|
1155
1158
|
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r27); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.relationshipViewMode = "list"); });
|
|
1156
|
-
i0.ɵɵelement(7, "i",
|
|
1159
|
+
i0.ɵɵelement(7, "i", 127);
|
|
1157
1160
|
i0.ɵɵtext(8, " List ");
|
|
1158
1161
|
i0.ɵɵelementEnd()();
|
|
1159
|
-
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_Template, 6, 1, "div",
|
|
1162
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_Template, 6, 1, "div", 198);
|
|
1160
1163
|
i0.ɵɵelementEnd();
|
|
1161
|
-
i0.ɵɵelementStart(10, "div",
|
|
1162
|
-
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template, 2, 7, "div",
|
|
1163
|
-
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Template, 21, 4, "div",
|
|
1164
|
+
i0.ɵɵelementStart(10, "div", 54);
|
|
1165
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template, 2, 7, "div", 199);
|
|
1166
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Template, 21, 4, "div", 200);
|
|
1164
1167
|
i0.ɵɵelementEnd()();
|
|
1165
1168
|
} if (rf & 2) {
|
|
1166
1169
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1175,145 +1178,368 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template(rf,
|
|
|
1175
1178
|
i0.ɵɵadvance();
|
|
1176
1179
|
i0.ɵɵconditional(ctx_r2.relationshipViewMode === "list" ? 12 : -1);
|
|
1177
1180
|
} }
|
|
1178
|
-
function
|
|
1179
|
-
i0.ɵɵelementStart(0, "
|
|
1181
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1182
|
+
i0.ɵɵelementStart(0, "div", 223);
|
|
1183
|
+
i0.ɵɵelement(1, "i", 224);
|
|
1184
|
+
i0.ɵɵelementStart(2, "h3");
|
|
1185
|
+
i0.ɵɵtext(3, "No Organic Keys");
|
|
1186
|
+
i0.ɵɵelementEnd();
|
|
1187
|
+
i0.ɵɵelementStart(4, "p");
|
|
1188
|
+
i0.ɵɵtext(5, "This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints.");
|
|
1189
|
+
i0.ɵɵelementEnd()();
|
|
1190
|
+
} }
|
|
1191
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1192
|
+
i0.ɵɵelementStart(0, "p", 233);
|
|
1193
|
+
i0.ɵɵtext(1);
|
|
1194
|
+
i0.ɵɵelementEnd();
|
|
1195
|
+
} if (rf & 2) {
|
|
1196
|
+
const okGroup_r36 = i0.ɵɵnextContext().$implicit;
|
|
1197
|
+
i0.ɵɵadvance();
|
|
1198
|
+
i0.ɵɵtextInterpolate(okGroup_r36.OrganicKey.Description);
|
|
1199
|
+
} }
|
|
1200
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_For_13_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1201
|
+
i0.ɵɵelementStart(0, "span", 243);
|
|
1202
|
+
i0.ɵɵtext(1, "Direct");
|
|
1203
|
+
i0.ɵɵelementEnd();
|
|
1204
|
+
i0.ɵɵelementStart(2, "span", 244);
|
|
1205
|
+
i0.ɵɵtext(3);
|
|
1206
|
+
i0.ɵɵelementEnd();
|
|
1207
|
+
} if (rf & 2) {
|
|
1208
|
+
const target_r38 = i0.ɵɵnextContext().$implicit;
|
|
1209
|
+
const okGroup_r36 = i0.ɵɵnextContext().$implicit;
|
|
1210
|
+
i0.ɵɵadvance(3);
|
|
1211
|
+
i0.ɵɵtextInterpolate2("", okGroup_r36.OrganicKey.MatchFieldNames, " \u2192 ", target_r38.Info.RelatedEntityFieldNames);
|
|
1212
|
+
} }
|
|
1213
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_For_13_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1214
|
+
i0.ɵɵelementStart(0, "span", 245);
|
|
1215
|
+
i0.ɵɵtext(1, "Transitive");
|
|
1216
|
+
i0.ɵɵelementEnd();
|
|
1217
|
+
i0.ɵɵelementStart(2, "span", 246);
|
|
1218
|
+
i0.ɵɵtext(3);
|
|
1219
|
+
i0.ɵɵelementEnd();
|
|
1220
|
+
} if (rf & 2) {
|
|
1221
|
+
const target_r38 = i0.ɵɵnextContext().$implicit;
|
|
1222
|
+
i0.ɵɵadvance(2);
|
|
1223
|
+
i0.ɵɵproperty("title", target_r38.Info.TransitiveObjectName || "");
|
|
1224
|
+
i0.ɵɵadvance();
|
|
1225
|
+
i0.ɵɵtextInterpolate1("via ", target_r38.Info.TransitiveObjectName);
|
|
1226
|
+
} }
|
|
1227
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
1228
|
+
const _r37 = i0.ɵɵgetCurrentView();
|
|
1229
|
+
i0.ɵɵelementStart(0, "div", 236);
|
|
1230
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_For_13_Template_div_click_0_listener() { const target_r38 = i0.ɵɵrestoreView(_r37).$implicit; const ctx_r2 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r2.NavigateToEntityByID(target_r38.Info.RelatedEntityID)); });
|
|
1231
|
+
i0.ɵɵelementStart(1, "div", 214);
|
|
1232
|
+
i0.ɵɵelement(2, "i", 63);
|
|
1233
|
+
i0.ɵɵelementEnd();
|
|
1234
|
+
i0.ɵɵelementStart(3, "div", 237)(4, "div", 238);
|
|
1235
|
+
i0.ɵɵelement(5, "i", 239);
|
|
1236
|
+
i0.ɵɵelementStart(6, "span", 240);
|
|
1237
|
+
i0.ɵɵtext(7);
|
|
1238
|
+
i0.ɵɵelementEnd();
|
|
1239
|
+
i0.ɵɵelement(8, "i", 241);
|
|
1240
|
+
i0.ɵɵelementEnd();
|
|
1241
|
+
i0.ɵɵelementStart(9, "div", 242);
|
|
1242
|
+
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_For_13_Conditional_10_Template, 4, 2)(11, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_For_13_Conditional_11_Template, 4, 2);
|
|
1243
|
+
i0.ɵɵelementEnd()()();
|
|
1244
|
+
} if (rf & 2) {
|
|
1245
|
+
const target_r38 = ctx.$implicit;
|
|
1246
|
+
i0.ɵɵadvance(5);
|
|
1247
|
+
i0.ɵɵclassMap(target_r38.EntityIcon);
|
|
1248
|
+
i0.ɵɵadvance(2);
|
|
1249
|
+
i0.ɵɵtextInterpolate(target_r38.Info.DisplayName || target_r38.EntityName);
|
|
1250
|
+
i0.ɵɵadvance(3);
|
|
1251
|
+
i0.ɵɵconditional(target_r38.Info.IsDirectMatch ? 10 : 11);
|
|
1252
|
+
} }
|
|
1253
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1254
|
+
i0.ɵɵelementStart(0, "div", 226)(1, "div", 227)(2, "div", 228);
|
|
1255
|
+
i0.ɵɵelement(3, "i", 229);
|
|
1256
|
+
i0.ɵɵtext(4);
|
|
1257
|
+
i0.ɵɵelementEnd();
|
|
1258
|
+
i0.ɵɵelementStart(5, "div", 230)(6, "span", 231);
|
|
1259
|
+
i0.ɵɵtext(7);
|
|
1260
|
+
i0.ɵɵelementEnd();
|
|
1261
|
+
i0.ɵɵelementStart(8, "span", 232);
|
|
1262
|
+
i0.ɵɵtext(9);
|
|
1263
|
+
i0.ɵɵelementEnd()()();
|
|
1264
|
+
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_Conditional_10_Template, 2, 1, "p", 233);
|
|
1265
|
+
i0.ɵɵelementStart(11, "div", 234);
|
|
1266
|
+
i0.ɵɵrepeaterCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_For_13_Template, 12, 4, "div", 235, _forTrack3);
|
|
1267
|
+
i0.ɵɵelementEnd()();
|
|
1268
|
+
} if (rf & 2) {
|
|
1269
|
+
const okGroup_r36 = ctx.$implicit;
|
|
1270
|
+
i0.ɵɵadvance(4);
|
|
1271
|
+
i0.ɵɵtextInterpolate1(" ", okGroup_r36.OrganicKey.Name, " ");
|
|
1272
|
+
i0.ɵɵadvance(3);
|
|
1273
|
+
i0.ɵɵtextInterpolate(okGroup_r36.OrganicKey.NormalizationStrategy);
|
|
1274
|
+
i0.ɵɵadvance(2);
|
|
1275
|
+
i0.ɵɵtextInterpolate(okGroup_r36.OrganicKey.MatchFieldNames);
|
|
1276
|
+
i0.ɵɵadvance();
|
|
1277
|
+
i0.ɵɵconditional(okGroup_r36.OrganicKey.Description ? 10 : -1);
|
|
1278
|
+
i0.ɵɵadvance(2);
|
|
1279
|
+
i0.ɵɵrepeater(okGroup_r36.RelatedEntities);
|
|
1280
|
+
} }
|
|
1281
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
1282
|
+
i0.ɵɵelementStart(0, "div", 206)(1, "h3", 207);
|
|
1283
|
+
i0.ɵɵelement(2, "i", 208);
|
|
1284
|
+
i0.ɵɵtext(3, " Outgoing (Matches from this entity) ");
|
|
1285
|
+
i0.ɵɵelementStart(4, "span", 142);
|
|
1286
|
+
i0.ɵɵtext(5);
|
|
1287
|
+
i0.ɵɵelementEnd()();
|
|
1288
|
+
i0.ɵɵelementStart(6, "div", 225);
|
|
1289
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_For_8_Template, 14, 4, "div", 226, _forTrack2);
|
|
1290
|
+
i0.ɵɵelementEnd()();
|
|
1291
|
+
} if (rf & 2) {
|
|
1292
|
+
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1293
|
+
i0.ɵɵadvance(5);
|
|
1294
|
+
i0.ɵɵtextInterpolate(ctx_r2.organicKeysOutgoing.length);
|
|
1295
|
+
i0.ɵɵadvance(2);
|
|
1296
|
+
i0.ɵɵrepeater(ctx_r2.organicKeysOutgoing);
|
|
1297
|
+
} }
|
|
1298
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_For_8_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1299
|
+
i0.ɵɵelementStart(0, "div", 250)(1, "span", 251);
|
|
1300
|
+
i0.ɵɵtext(2, "Matched via:");
|
|
1301
|
+
i0.ɵɵelementEnd();
|
|
1302
|
+
i0.ɵɵelementStart(3, "span", 252);
|
|
1303
|
+
i0.ɵɵtext(4);
|
|
1304
|
+
i0.ɵɵelementEnd()();
|
|
1305
|
+
} if (rf & 2) {
|
|
1306
|
+
const incoming_r40 = i0.ɵɵnextContext().$implicit;
|
|
1307
|
+
i0.ɵɵadvance(4);
|
|
1308
|
+
i0.ɵɵtextInterpolate(incoming_r40.RelatedEntityConfig.RelatedEntityFieldNames);
|
|
1309
|
+
} }
|
|
1310
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_For_8_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
1311
|
+
i0.ɵɵelementStart(0, "div", 250)(1, "span", 251);
|
|
1312
|
+
i0.ɵɵtext(2, "Bridge:");
|
|
1313
|
+
i0.ɵɵelementEnd();
|
|
1314
|
+
i0.ɵɵelementStart(3, "span", 252);
|
|
1315
|
+
i0.ɵɵtext(4);
|
|
1316
|
+
i0.ɵɵelementEnd()();
|
|
1317
|
+
} if (rf & 2) {
|
|
1318
|
+
const incoming_r40 = i0.ɵɵnextContext().$implicit;
|
|
1319
|
+
i0.ɵɵadvance(4);
|
|
1320
|
+
i0.ɵɵtextInterpolate(incoming_r40.RelatedEntityConfig.TransitiveObjectName);
|
|
1321
|
+
} }
|
|
1322
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1323
|
+
const _r39 = i0.ɵɵgetCurrentView();
|
|
1324
|
+
i0.ɵɵelementStart(0, "div", 248);
|
|
1325
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_For_8_Template_div_click_0_listener() { const incoming_r40 = i0.ɵɵrestoreView(_r39).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntityByID(incoming_r40.SourceEntityID)); });
|
|
1326
|
+
i0.ɵɵelementStart(1, "div", 227)(2, "div", 228)(3, "div", 219);
|
|
1327
|
+
i0.ɵɵelement(4, "i", 220);
|
|
1328
|
+
i0.ɵɵelementEnd();
|
|
1329
|
+
i0.ɵɵelement(5, "i", 239);
|
|
1330
|
+
i0.ɵɵtext(6);
|
|
1331
|
+
i0.ɵɵelement(7, "i", 241);
|
|
1332
|
+
i0.ɵɵelementEnd();
|
|
1333
|
+
i0.ɵɵelementStart(8, "div", 230)(9, "span", 249);
|
|
1334
|
+
i0.ɵɵtext(10);
|
|
1335
|
+
i0.ɵɵelementEnd()()();
|
|
1336
|
+
i0.ɵɵelementStart(11, "div", 250)(12, "span", 251);
|
|
1337
|
+
i0.ɵɵtext(13, "Key:");
|
|
1338
|
+
i0.ɵɵelementEnd();
|
|
1339
|
+
i0.ɵɵelementStart(14, "span", 252);
|
|
1340
|
+
i0.ɵɵtext(15);
|
|
1341
|
+
i0.ɵɵelementEnd();
|
|
1342
|
+
i0.ɵɵelementStart(16, "span", 232);
|
|
1343
|
+
i0.ɵɵtext(17);
|
|
1344
|
+
i0.ɵɵelementEnd();
|
|
1345
|
+
i0.ɵɵelementStart(18, "span", 231);
|
|
1346
|
+
i0.ɵɵtext(19);
|
|
1347
|
+
i0.ɵɵelementEnd()();
|
|
1348
|
+
i0.ɵɵconditionalCreate(20, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_For_8_Conditional_20_Template, 5, 1, "div", 250)(21, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_For_8_Conditional_21_Template, 5, 1, "div", 250);
|
|
1349
|
+
i0.ɵɵelementEnd();
|
|
1350
|
+
} if (rf & 2) {
|
|
1351
|
+
const incoming_r40 = ctx.$implicit;
|
|
1352
|
+
i0.ɵɵadvance(5);
|
|
1353
|
+
i0.ɵɵclassMap(incoming_r40.SourceEntityIcon);
|
|
1354
|
+
i0.ɵɵadvance();
|
|
1355
|
+
i0.ɵɵtextInterpolate1(" ", incoming_r40.SourceEntityName, " ");
|
|
1356
|
+
i0.ɵɵadvance(3);
|
|
1357
|
+
i0.ɵɵclassProp("direct", incoming_r40.MatchType === "Direct")("transitive", incoming_r40.MatchType === "Transitive");
|
|
1358
|
+
i0.ɵɵadvance();
|
|
1359
|
+
i0.ɵɵtextInterpolate(incoming_r40.MatchType);
|
|
1360
|
+
i0.ɵɵadvance(5);
|
|
1361
|
+
i0.ɵɵtextInterpolate(incoming_r40.OrganicKey.Name);
|
|
1362
|
+
i0.ɵɵadvance(2);
|
|
1363
|
+
i0.ɵɵtextInterpolate(incoming_r40.OrganicKey.MatchFieldNames);
|
|
1364
|
+
i0.ɵɵadvance(2);
|
|
1365
|
+
i0.ɵɵtextInterpolate(incoming_r40.OrganicKey.NormalizationStrategy);
|
|
1366
|
+
i0.ɵɵadvance();
|
|
1367
|
+
i0.ɵɵconditional(incoming_r40.RelatedEntityConfig.IsDirectMatch ? 20 : 21);
|
|
1368
|
+
} }
|
|
1369
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
1370
|
+
i0.ɵɵelementStart(0, "div", 206)(1, "h3", 207);
|
|
1371
|
+
i0.ɵɵelement(2, "i", 212);
|
|
1372
|
+
i0.ɵɵtext(3, " Incoming (Other entities matching to this one) ");
|
|
1373
|
+
i0.ɵɵelementStart(4, "span", 142);
|
|
1374
|
+
i0.ɵɵtext(5);
|
|
1375
|
+
i0.ɵɵelementEnd()();
|
|
1376
|
+
i0.ɵɵelementStart(6, "div", 225);
|
|
1377
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_For_8_Template, 22, 12, "div", 247, _forTrack4);
|
|
1378
|
+
i0.ɵɵelementEnd()();
|
|
1379
|
+
} if (rf & 2) {
|
|
1380
|
+
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1381
|
+
i0.ɵɵadvance(5);
|
|
1382
|
+
i0.ɵɵtextInterpolate(ctx_r2.organicKeysIncoming.length);
|
|
1383
|
+
i0.ɵɵadvance(2);
|
|
1384
|
+
i0.ɵɵrepeater(ctx_r2.organicKeysIncoming);
|
|
1385
|
+
} }
|
|
1386
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1387
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_0_Template, 9, 1, "div", 206);
|
|
1388
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Conditional_1_Template, 9, 1, "div", 206);
|
|
1389
|
+
} if (rf & 2) {
|
|
1390
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1391
|
+
i0.ɵɵconditional(ctx_r2.organicKeysOutgoing.length > 0 ? 0 : -1);
|
|
1392
|
+
i0.ɵɵadvance();
|
|
1393
|
+
i0.ɵɵconditional(ctx_r2.organicKeysIncoming.length > 0 ? 1 : -1);
|
|
1394
|
+
} }
|
|
1395
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
1396
|
+
i0.ɵɵelementStart(0, "section", 31)(1, "div", 54);
|
|
1397
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_2_Template, 6, 0, "div", 223)(3, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_3_Template, 2, 2);
|
|
1398
|
+
i0.ɵɵelementEnd()();
|
|
1399
|
+
} if (rf & 2) {
|
|
1400
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
1401
|
+
i0.ɵɵadvance(2);
|
|
1402
|
+
i0.ɵɵconditional(ctx_r2.organicKeysOutgoing.length === 0 && ctx_r2.organicKeysIncoming.length === 0 ? 2 : 3);
|
|
1403
|
+
} }
|
|
1404
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1405
|
+
i0.ɵɵelementStart(0, "span", 263);
|
|
1180
1406
|
i0.ɵɵtext(1, "R");
|
|
1181
1407
|
i0.ɵɵelementEnd();
|
|
1182
1408
|
} }
|
|
1183
|
-
function
|
|
1184
|
-
i0.ɵɵelementStart(0, "span",
|
|
1409
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1410
|
+
i0.ɵɵelementStart(0, "span", 264);
|
|
1185
1411
|
i0.ɵɵtext(1, "C");
|
|
1186
1412
|
i0.ɵɵelementEnd();
|
|
1187
1413
|
} }
|
|
1188
|
-
function
|
|
1189
|
-
i0.ɵɵelementStart(0, "span",
|
|
1414
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1415
|
+
i0.ɵɵelementStart(0, "span", 265);
|
|
1190
1416
|
i0.ɵɵtext(1, "U");
|
|
1191
1417
|
i0.ɵɵelementEnd();
|
|
1192
1418
|
} }
|
|
1193
|
-
function
|
|
1194
|
-
i0.ɵɵelementStart(0, "span",
|
|
1419
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1420
|
+
i0.ɵɵelementStart(0, "span", 266);
|
|
1195
1421
|
i0.ɵɵtext(1, "D");
|
|
1196
1422
|
i0.ɵɵelementEnd();
|
|
1197
1423
|
} }
|
|
1198
|
-
function
|
|
1199
|
-
i0.ɵɵelementStart(0, "span",
|
|
1424
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1425
|
+
i0.ɵɵelementStart(0, "span", 267);
|
|
1200
1426
|
i0.ɵɵtext(1, "None");
|
|
1201
1427
|
i0.ɵɵelementEnd();
|
|
1202
1428
|
} }
|
|
1203
|
-
function
|
|
1204
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
1429
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
1430
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 260);
|
|
1205
1431
|
i0.ɵɵtext(2);
|
|
1206
1432
|
i0.ɵɵelementEnd();
|
|
1207
|
-
i0.ɵɵelementStart(3, "td",
|
|
1208
|
-
i0.ɵɵelement(4, "i",
|
|
1433
|
+
i0.ɵɵelementStart(3, "td", 255);
|
|
1434
|
+
i0.ɵɵelement(4, "i", 261);
|
|
1209
1435
|
i0.ɵɵelementEnd();
|
|
1210
|
-
i0.ɵɵelementStart(5, "td",
|
|
1211
|
-
i0.ɵɵelement(6, "i",
|
|
1436
|
+
i0.ɵɵelementStart(5, "td", 255);
|
|
1437
|
+
i0.ɵɵelement(6, "i", 261);
|
|
1212
1438
|
i0.ɵɵelementEnd();
|
|
1213
|
-
i0.ɵɵelementStart(7, "td",
|
|
1214
|
-
i0.ɵɵelement(8, "i",
|
|
1439
|
+
i0.ɵɵelementStart(7, "td", 255);
|
|
1440
|
+
i0.ɵɵelement(8, "i", 261);
|
|
1215
1441
|
i0.ɵɵelementEnd();
|
|
1216
|
-
i0.ɵɵelementStart(9, "td",
|
|
1217
|
-
i0.ɵɵelement(10, "i",
|
|
1442
|
+
i0.ɵɵelementStart(9, "td", 255);
|
|
1443
|
+
i0.ɵɵelement(10, "i", 261);
|
|
1218
1444
|
i0.ɵɵelementEnd();
|
|
1219
|
-
i0.ɵɵelementStart(11, "td",
|
|
1220
|
-
i0.ɵɵconditionalCreate(12,
|
|
1221
|
-
i0.ɵɵconditionalCreate(13,
|
|
1222
|
-
i0.ɵɵconditionalCreate(14,
|
|
1223
|
-
i0.ɵɵconditionalCreate(15,
|
|
1224
|
-
i0.ɵɵconditionalCreate(16,
|
|
1445
|
+
i0.ɵɵelementStart(11, "td", 262);
|
|
1446
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_12_Template, 2, 0, "span", 263);
|
|
1447
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_13_Template, 2, 0, "span", 264);
|
|
1448
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_14_Template, 2, 0, "span", 265);
|
|
1449
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_15_Template, 2, 0, "span", 266);
|
|
1450
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Conditional_16_Template, 2, 0, "span", 267);
|
|
1225
1451
|
i0.ɵɵelementEnd()();
|
|
1226
1452
|
} if (rf & 2) {
|
|
1227
|
-
const
|
|
1453
|
+
const perm_r41 = ctx.$implicit;
|
|
1228
1454
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1229
1455
|
i0.ɵɵadvance(2);
|
|
1230
|
-
i0.ɵɵtextInterpolate(ctx_r2.getRoleName(
|
|
1456
|
+
i0.ɵɵtextInterpolate(ctx_r2.getRoleName(perm_r41));
|
|
1231
1457
|
i0.ɵɵadvance(2);
|
|
1232
|
-
i0.ɵɵproperty("ngClass",
|
|
1458
|
+
i0.ɵɵproperty("ngClass", perm_r41.CanCreate ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
1233
1459
|
i0.ɵɵadvance(2);
|
|
1234
|
-
i0.ɵɵproperty("ngClass",
|
|
1460
|
+
i0.ɵɵproperty("ngClass", perm_r41.CanRead ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
1235
1461
|
i0.ɵɵadvance(2);
|
|
1236
|
-
i0.ɵɵproperty("ngClass",
|
|
1462
|
+
i0.ɵɵproperty("ngClass", perm_r41.CanUpdate ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
1237
1463
|
i0.ɵɵadvance(2);
|
|
1238
|
-
i0.ɵɵproperty("ngClass",
|
|
1464
|
+
i0.ɵɵproperty("ngClass", perm_r41.CanDelete ? "fa-solid fa-check granted" : "fa-solid fa-xmark denied");
|
|
1239
1465
|
i0.ɵɵadvance(2);
|
|
1240
|
-
i0.ɵɵconditional(
|
|
1466
|
+
i0.ɵɵconditional(perm_r41.ReadRLSFilterID ? 12 : -1);
|
|
1241
1467
|
i0.ɵɵadvance();
|
|
1242
|
-
i0.ɵɵconditional(
|
|
1468
|
+
i0.ɵɵconditional(perm_r41.CreateRLSFilterID ? 13 : -1);
|
|
1243
1469
|
i0.ɵɵadvance();
|
|
1244
|
-
i0.ɵɵconditional(
|
|
1470
|
+
i0.ɵɵconditional(perm_r41.UpdateRLSFilterID ? 14 : -1);
|
|
1245
1471
|
i0.ɵɵadvance();
|
|
1246
|
-
i0.ɵɵconditional(
|
|
1472
|
+
i0.ɵɵconditional(perm_r41.DeleteRLSFilterID ? 15 : -1);
|
|
1247
1473
|
i0.ɵɵadvance();
|
|
1248
|
-
i0.ɵɵconditional(!
|
|
1474
|
+
i0.ɵɵconditional(!perm_r41.ReadRLSFilterID && !perm_r41.CreateRLSFilterID && !perm_r41.UpdateRLSFilterID && !perm_r41.DeleteRLSFilterID ? 16 : -1);
|
|
1249
1475
|
} }
|
|
1250
|
-
function
|
|
1251
|
-
i0.ɵɵelementStart(0, "div",
|
|
1476
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
1477
|
+
i0.ɵɵelementStart(0, "div", 211);
|
|
1252
1478
|
i0.ɵɵelement(1, "i", 21);
|
|
1253
1479
|
i0.ɵɵelementStart(2, "p");
|
|
1254
1480
|
i0.ɵɵtext(3, "No permissions configured");
|
|
1255
1481
|
i0.ɵɵelementEnd()();
|
|
1256
1482
|
} }
|
|
1257
|
-
function
|
|
1258
|
-
i0.ɵɵelementStart(0, "section",
|
|
1483
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
1484
|
+
i0.ɵɵelementStart(0, "section", 32)(1, "div", 54)(2, "div", 253)(3, "table", 254)(4, "thead")(5, "tr")(6, "th");
|
|
1259
1485
|
i0.ɵɵtext(7, "Role");
|
|
1260
1486
|
i0.ɵɵelementEnd();
|
|
1261
|
-
i0.ɵɵelementStart(8, "th",
|
|
1487
|
+
i0.ɵɵelementStart(8, "th", 255);
|
|
1262
1488
|
i0.ɵɵtext(9, "Create");
|
|
1263
1489
|
i0.ɵɵelementEnd();
|
|
1264
|
-
i0.ɵɵelementStart(10, "th",
|
|
1490
|
+
i0.ɵɵelementStart(10, "th", 255);
|
|
1265
1491
|
i0.ɵɵtext(11, "Read");
|
|
1266
1492
|
i0.ɵɵelementEnd();
|
|
1267
|
-
i0.ɵɵelementStart(12, "th",
|
|
1493
|
+
i0.ɵɵelementStart(12, "th", 255);
|
|
1268
1494
|
i0.ɵɵtext(13, "Update");
|
|
1269
1495
|
i0.ɵɵelementEnd();
|
|
1270
|
-
i0.ɵɵelementStart(14, "th",
|
|
1496
|
+
i0.ɵɵelementStart(14, "th", 255);
|
|
1271
1497
|
i0.ɵɵtext(15, "Delete");
|
|
1272
1498
|
i0.ɵɵelementEnd();
|
|
1273
1499
|
i0.ɵɵelementStart(16, "th");
|
|
1274
1500
|
i0.ɵɵtext(17, "RLS");
|
|
1275
1501
|
i0.ɵɵelementEnd()()();
|
|
1276
1502
|
i0.ɵɵelementStart(18, "tbody");
|
|
1277
|
-
i0.ɵɵrepeaterCreate(19,
|
|
1503
|
+
i0.ɵɵrepeaterCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_55_For_20_Template, 17, 10, "tr", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1278
1504
|
i0.ɵɵelementEnd()();
|
|
1279
|
-
i0.ɵɵconditionalCreate(21,
|
|
1505
|
+
i0.ɵɵconditionalCreate(21, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_21_Template, 4, 0, "div", 211);
|
|
1280
1506
|
i0.ɵɵelementEnd();
|
|
1281
|
-
i0.ɵɵelementStart(22, "div",
|
|
1282
|
-
i0.ɵɵelement(24, "i",
|
|
1507
|
+
i0.ɵɵelementStart(22, "div", 256)(23, "h3", 70);
|
|
1508
|
+
i0.ɵɵelement(24, "i", 257);
|
|
1283
1509
|
i0.ɵɵtext(25, " API Capabilities ");
|
|
1284
1510
|
i0.ɵɵelementEnd();
|
|
1285
|
-
i0.ɵɵelementStart(26, "div",
|
|
1286
|
-
i0.ɵɵelement(28, "i",
|
|
1511
|
+
i0.ɵɵelementStart(26, "div", 258)(27, "div", 259);
|
|
1512
|
+
i0.ɵɵelement(28, "i", 99);
|
|
1287
1513
|
i0.ɵɵelementStart(29, "span");
|
|
1288
1514
|
i0.ɵɵtext(30, "Include in API");
|
|
1289
1515
|
i0.ɵɵelementEnd()();
|
|
1290
|
-
i0.ɵɵelementStart(31, "div",
|
|
1291
|
-
i0.ɵɵelement(32, "i",
|
|
1516
|
+
i0.ɵɵelementStart(31, "div", 259);
|
|
1517
|
+
i0.ɵɵelement(32, "i", 99);
|
|
1292
1518
|
i0.ɵɵelementStart(33, "span");
|
|
1293
1519
|
i0.ɵɵtext(34, "Allow All Rows");
|
|
1294
1520
|
i0.ɵɵelementEnd()();
|
|
1295
|
-
i0.ɵɵelementStart(35, "div",
|
|
1296
|
-
i0.ɵɵelement(36, "i",
|
|
1521
|
+
i0.ɵɵelementStart(35, "div", 259);
|
|
1522
|
+
i0.ɵɵelement(36, "i", 99);
|
|
1297
1523
|
i0.ɵɵelementStart(37, "span");
|
|
1298
1524
|
i0.ɵɵtext(38, "Allow Create");
|
|
1299
1525
|
i0.ɵɵelementEnd()();
|
|
1300
|
-
i0.ɵɵelementStart(39, "div",
|
|
1301
|
-
i0.ɵɵelement(40, "i",
|
|
1526
|
+
i0.ɵɵelementStart(39, "div", 259);
|
|
1527
|
+
i0.ɵɵelement(40, "i", 99);
|
|
1302
1528
|
i0.ɵɵelementStart(41, "span");
|
|
1303
1529
|
i0.ɵɵtext(42, "Allow Update");
|
|
1304
1530
|
i0.ɵɵelementEnd()();
|
|
1305
|
-
i0.ɵɵelementStart(43, "div",
|
|
1306
|
-
i0.ɵɵelement(44, "i",
|
|
1531
|
+
i0.ɵɵelementStart(43, "div", 259);
|
|
1532
|
+
i0.ɵɵelement(44, "i", 99);
|
|
1307
1533
|
i0.ɵɵelementStart(45, "span");
|
|
1308
1534
|
i0.ɵɵtext(46, "Allow Delete");
|
|
1309
1535
|
i0.ɵɵelementEnd()();
|
|
1310
|
-
i0.ɵɵelementStart(47, "div",
|
|
1311
|
-
i0.ɵɵelement(48, "i",
|
|
1536
|
+
i0.ɵɵelementStart(47, "div", 259);
|
|
1537
|
+
i0.ɵɵelement(48, "i", 99);
|
|
1312
1538
|
i0.ɵɵelementStart(49, "span");
|
|
1313
1539
|
i0.ɵɵtext(50, "User Search");
|
|
1314
1540
|
i0.ɵɵelementEnd()();
|
|
1315
|
-
i0.ɵɵelementStart(51, "div",
|
|
1316
|
-
i0.ɵɵelement(52, "i",
|
|
1541
|
+
i0.ɵɵelementStart(51, "div", 259);
|
|
1542
|
+
i0.ɵɵelement(52, "i", 99);
|
|
1317
1543
|
i0.ɵɵelementStart(53, "span");
|
|
1318
1544
|
i0.ɵɵtext(54, "Custom Resolver");
|
|
1319
1545
|
i0.ɵɵelementEnd()()()()()();
|
|
@@ -1352,105 +1578,105 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template(rf,
|
|
|
1352
1578
|
i0.ɵɵadvance();
|
|
1353
1579
|
i0.ɵɵproperty("ngClass", ctx_r2.entity.CustomResolverAPI ? "fa-check" : "fa-xmark");
|
|
1354
1580
|
} }
|
|
1355
|
-
function
|
|
1356
|
-
const
|
|
1357
|
-
i0.ɵɵelementStart(0, "mj-entity-viewer",
|
|
1358
|
-
i0.ɵɵlistener("recordOpened", function
|
|
1581
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1582
|
+
const _r42 = i0.ɵɵgetCurrentView();
|
|
1583
|
+
i0.ɵɵelementStart(0, "mj-entity-viewer", 270);
|
|
1584
|
+
i0.ɵɵlistener("recordOpened", function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_2_Template_mj_entity_viewer_recordOpened_0_listener($event) { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnRecordOpened($event)); })("addRequested", function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_2_Template_mj_entity_viewer_addRequested_0_listener() { i0.ɵɵrestoreView(_r42); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.OnAddRequested()); });
|
|
1359
1585
|
i0.ɵɵelementEnd();
|
|
1360
1586
|
} if (rf & 2) {
|
|
1361
1587
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1362
1588
|
i0.ɵɵproperty("entity", ctx_r2.entity)("showGridToolbar", true);
|
|
1363
1589
|
} }
|
|
1364
|
-
function
|
|
1365
|
-
i0.ɵɵelementStart(0, "section",
|
|
1366
|
-
i0.ɵɵconditionalCreate(2,
|
|
1590
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
1591
|
+
i0.ɵɵelementStart(0, "section", 33)(1, "div", 268);
|
|
1592
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_2_Template, 1, 2, "mj-entity-viewer", 269);
|
|
1367
1593
|
i0.ɵɵelementEnd()();
|
|
1368
1594
|
} if (rf & 2) {
|
|
1369
1595
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
1370
1596
|
i0.ɵɵadvance(2);
|
|
1371
1597
|
i0.ɵɵconditional(ctx_r2.entity ? 2 : -1);
|
|
1372
1598
|
} }
|
|
1373
|
-
function
|
|
1374
|
-
i0.ɵɵelementStart(0, "div",
|
|
1375
|
-
i0.ɵɵelement(1, "i",
|
|
1599
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1600
|
+
i0.ɵɵelementStart(0, "div", 274);
|
|
1601
|
+
i0.ɵɵelement(1, "i", 257);
|
|
1376
1602
|
i0.ɵɵelementStart(2, "span");
|
|
1377
1603
|
i0.ɵɵtext(3, "API Create");
|
|
1378
1604
|
i0.ɵɵelementEnd()();
|
|
1379
1605
|
} }
|
|
1380
|
-
function
|
|
1381
|
-
i0.ɵɵelementStart(0, "div",
|
|
1382
|
-
i0.ɵɵelement(1, "i",
|
|
1606
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1607
|
+
i0.ɵɵelementStart(0, "div", 274);
|
|
1608
|
+
i0.ɵɵelement(1, "i", 281);
|
|
1383
1609
|
i0.ɵɵelementStart(2, "span");
|
|
1384
1610
|
i0.ɵɵtext(3, "Record Changes");
|
|
1385
1611
|
i0.ɵɵelementEnd()();
|
|
1386
1612
|
} }
|
|
1387
|
-
function
|
|
1388
|
-
i0.ɵɵelementStart(0, "div",
|
|
1389
|
-
i0.ɵɵelement(1, "i",
|
|
1613
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1614
|
+
i0.ɵɵelementStart(0, "div", 274);
|
|
1615
|
+
i0.ɵɵelement(1, "i", 42);
|
|
1390
1616
|
i0.ɵɵelementStart(2, "span");
|
|
1391
1617
|
i0.ɵɵtext(3, "Access Audit");
|
|
1392
1618
|
i0.ɵɵelementEnd()();
|
|
1393
1619
|
} }
|
|
1394
|
-
function
|
|
1395
|
-
i0.ɵɵelementStart(0, "section",
|
|
1620
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
1621
|
+
i0.ɵɵelementStart(0, "section", 34)(1, "div", 54)(2, "div", 271)(3, "div", 272)(4, "h4");
|
|
1396
1622
|
i0.ɵɵtext(5, "Data Sources");
|
|
1397
1623
|
i0.ɵɵelementEnd();
|
|
1398
|
-
i0.ɵɵelementStart(6, "div",
|
|
1399
|
-
i0.ɵɵelement(8, "i",
|
|
1624
|
+
i0.ɵɵelementStart(6, "div", 273)(7, "div", 274);
|
|
1625
|
+
i0.ɵɵelement(8, "i", 275);
|
|
1400
1626
|
i0.ɵɵelementStart(9, "span");
|
|
1401
1627
|
i0.ɵɵtext(10, "Manual Entry");
|
|
1402
1628
|
i0.ɵɵelementEnd()();
|
|
1403
|
-
i0.ɵɵconditionalCreate(11,
|
|
1629
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_11_Template, 4, 0, "div", 274);
|
|
1404
1630
|
i0.ɵɵelementEnd()();
|
|
1405
|
-
i0.ɵɵelementStart(12, "div",
|
|
1406
|
-
i0.ɵɵelement(13, "i",
|
|
1631
|
+
i0.ɵɵelementStart(12, "div", 276);
|
|
1632
|
+
i0.ɵɵelement(13, "i", 63);
|
|
1407
1633
|
i0.ɵɵelementEnd();
|
|
1408
|
-
i0.ɵɵelementStart(14, "div",
|
|
1634
|
+
i0.ɵɵelementStart(14, "div", 277)(15, "div", 278);
|
|
1409
1635
|
i0.ɵɵelement(16, "i");
|
|
1410
1636
|
i0.ɵɵelementStart(17, "span");
|
|
1411
1637
|
i0.ɵɵtext(18);
|
|
1412
1638
|
i0.ɵɵelementEnd()()();
|
|
1413
|
-
i0.ɵɵelementStart(19, "div",
|
|
1414
|
-
i0.ɵɵelement(20, "i",
|
|
1639
|
+
i0.ɵɵelementStart(19, "div", 276);
|
|
1640
|
+
i0.ɵɵelement(20, "i", 63);
|
|
1415
1641
|
i0.ɵɵelementEnd();
|
|
1416
|
-
i0.ɵɵelementStart(21, "div",
|
|
1642
|
+
i0.ɵɵelementStart(21, "div", 279)(22, "h4");
|
|
1417
1643
|
i0.ɵɵtext(23, "Data Sinks");
|
|
1418
1644
|
i0.ɵɵelementEnd();
|
|
1419
|
-
i0.ɵɵelementStart(24, "div",
|
|
1420
|
-
i0.ɵɵconditionalCreate(25,
|
|
1421
|
-
i0.ɵɵconditionalCreate(26,
|
|
1422
|
-
i0.ɵɵelementStart(27, "div",
|
|
1645
|
+
i0.ɵɵelementStart(24, "div", 273);
|
|
1646
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_25_Template, 4, 0, "div", 274);
|
|
1647
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_26_Template, 4, 0, "div", 274);
|
|
1648
|
+
i0.ɵɵelementStart(27, "div", 274);
|
|
1423
1649
|
i0.ɵɵelement(28, "i", 20);
|
|
1424
1650
|
i0.ɵɵelementStart(29, "span");
|
|
1425
1651
|
i0.ɵɵtext(30);
|
|
1426
1652
|
i0.ɵɵelementEnd()()()()();
|
|
1427
|
-
i0.ɵɵelementStart(31, "div",
|
|
1428
|
-
i0.ɵɵelement(33, "i",
|
|
1653
|
+
i0.ɵɵelementStart(31, "div", 280)(32, "h3", 70);
|
|
1654
|
+
i0.ɵɵelement(33, "i", 281);
|
|
1429
1655
|
i0.ɵɵtext(34, " Tracking Configuration ");
|
|
1430
1656
|
i0.ɵɵelementEnd();
|
|
1431
|
-
i0.ɵɵelementStart(35, "div",
|
|
1432
|
-
i0.ɵɵelement(37, "i",
|
|
1657
|
+
i0.ɵɵelementStart(35, "div", 282)(36, "div", 283);
|
|
1658
|
+
i0.ɵɵelement(37, "i", 99);
|
|
1433
1659
|
i0.ɵɵelementStart(38, "span");
|
|
1434
1660
|
i0.ɵɵtext(39, "Track Record Changes");
|
|
1435
1661
|
i0.ɵɵelementEnd()();
|
|
1436
|
-
i0.ɵɵelementStart(40, "div",
|
|
1437
|
-
i0.ɵɵelement(41, "i",
|
|
1662
|
+
i0.ɵɵelementStart(40, "div", 283);
|
|
1663
|
+
i0.ɵɵelement(41, "i", 99);
|
|
1438
1664
|
i0.ɵɵelementStart(42, "span");
|
|
1439
1665
|
i0.ɵɵtext(43, "Audit Record Access");
|
|
1440
1666
|
i0.ɵɵelementEnd()();
|
|
1441
|
-
i0.ɵɵelementStart(44, "div",
|
|
1442
|
-
i0.ɵɵelement(45, "i",
|
|
1667
|
+
i0.ɵɵelementStart(44, "div", 283);
|
|
1668
|
+
i0.ɵɵelement(45, "i", 99);
|
|
1443
1669
|
i0.ɵɵelementStart(46, "span");
|
|
1444
1670
|
i0.ɵɵtext(47, "Audit View Runs");
|
|
1445
1671
|
i0.ɵɵelementEnd()();
|
|
1446
|
-
i0.ɵɵelementStart(48, "div",
|
|
1672
|
+
i0.ɵɵelementStart(48, "div", 283)(49, "span", 284);
|
|
1447
1673
|
i0.ɵɵtext(50, "Delete Type:");
|
|
1448
1674
|
i0.ɵɵelementEnd();
|
|
1449
|
-
i0.ɵɵelementStart(51, "span",
|
|
1675
|
+
i0.ɵɵelementStart(51, "span", 285);
|
|
1450
1676
|
i0.ɵɵtext(52);
|
|
1451
1677
|
i0.ɵɵelementEnd()();
|
|
1452
|
-
i0.ɵɵelementStart(53, "div",
|
|
1453
|
-
i0.ɵɵelement(54, "i",
|
|
1678
|
+
i0.ɵɵelementStart(53, "div", 283);
|
|
1679
|
+
i0.ɵɵelement(54, "i", 99);
|
|
1454
1680
|
i0.ɵɵelementStart(55, "span");
|
|
1455
1681
|
i0.ɵɵtext(56, "Cascade Deletes");
|
|
1456
1682
|
i0.ɵɵelementEnd()()()()()();
|
|
@@ -1487,7 +1713,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template(rf,
|
|
|
1487
1713
|
i0.ɵɵadvance();
|
|
1488
1714
|
i0.ɵɵproperty("ngClass", ctx_r2.entity.CascadeDeletes ? "fa-check" : "fa-xmark");
|
|
1489
1715
|
} }
|
|
1490
|
-
function
|
|
1716
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1491
1717
|
i0.ɵɵelementStart(0, "p");
|
|
1492
1718
|
i0.ɵɵtext(1, " This entity has change tracking enabled. All modifications to records are stored in the ");
|
|
1493
1719
|
i0.ɵɵelementStart(2, "code");
|
|
@@ -1496,7 +1722,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1496
1722
|
i0.ɵɵtext(4, " table, including the user who made the change, timestamp, and the before/after values. ");
|
|
1497
1723
|
i0.ɵɵelementEnd();
|
|
1498
1724
|
} }
|
|
1499
|
-
function
|
|
1725
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1500
1726
|
i0.ɵɵelementStart(0, "p");
|
|
1501
1727
|
i0.ɵɵtext(1, " This entity does not have change tracking enabled. To enable it, set ");
|
|
1502
1728
|
i0.ɵɵelementStart(2, "code");
|
|
@@ -1509,19 +1735,19 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1509
1735
|
i0.ɵɵtext(7, " in the entity metadata. ");
|
|
1510
1736
|
i0.ɵɵelementEnd();
|
|
1511
1737
|
} }
|
|
1512
|
-
function
|
|
1738
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_17_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1513
1739
|
i0.ɵɵelementStart(0, "li")(1, "code");
|
|
1514
1740
|
i0.ɵɵtext(2, "__mj_DeletedAt");
|
|
1515
1741
|
i0.ɵɵelementEnd();
|
|
1516
1742
|
i0.ɵɵtext(3, " - Soft delete timestamp (when applicable) ");
|
|
1517
1743
|
i0.ɵɵelementEnd();
|
|
1518
1744
|
} }
|
|
1519
|
-
function
|
|
1520
|
-
i0.ɵɵelementStart(0, "div",
|
|
1745
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1746
|
+
i0.ɵɵelementStart(0, "div", 290)(1, "h4");
|
|
1521
1747
|
i0.ɵɵelement(2, "i", 22);
|
|
1522
1748
|
i0.ɵɵtext(3, " Audit Fields ");
|
|
1523
1749
|
i0.ɵɵelementEnd();
|
|
1524
|
-
i0.ɵɵelementStart(4, "ul",
|
|
1750
|
+
i0.ɵɵelementStart(4, "ul", 292)(5, "li")(6, "code");
|
|
1525
1751
|
i0.ɵɵtext(7, "__mj_CreatedAt");
|
|
1526
1752
|
i0.ɵɵelementEnd();
|
|
1527
1753
|
i0.ɵɵtext(8, " - Record creation timestamp ");
|
|
@@ -1531,30 +1757,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1531
1757
|
i0.ɵɵelementEnd();
|
|
1532
1758
|
i0.ɵɵtext(12, " - Last modification timestamp ");
|
|
1533
1759
|
i0.ɵɵelementEnd();
|
|
1534
|
-
i0.ɵɵconditionalCreate(13,
|
|
1760
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_17_Conditional_13_Template, 4, 0, "li");
|
|
1535
1761
|
i0.ɵɵelementEnd()();
|
|
1536
1762
|
} if (rf & 2) {
|
|
1537
1763
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1538
1764
|
i0.ɵɵadvance(13);
|
|
1539
1765
|
i0.ɵɵconditional(ctx_r2.entity.DeleteType === "Soft" ? 13 : -1);
|
|
1540
1766
|
} }
|
|
1541
|
-
function
|
|
1542
|
-
i0.ɵɵelementStart(0, "section",
|
|
1543
|
-
i0.ɵɵelement(4, "i",
|
|
1544
|
-
i0.ɵɵelementStart(5, "div",
|
|
1767
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
1768
|
+
i0.ɵɵelementStart(0, "section", 35)(1, "div", 54)(2, "div", 286)(3, "div", 287);
|
|
1769
|
+
i0.ɵɵelement(4, "i", 99);
|
|
1770
|
+
i0.ɵɵelementStart(5, "div", 288)(6, "strong");
|
|
1545
1771
|
i0.ɵɵtext(7, "Record Change Tracking");
|
|
1546
1772
|
i0.ɵɵelementEnd();
|
|
1547
1773
|
i0.ɵɵelementStart(8, "span");
|
|
1548
1774
|
i0.ɵɵtext(9);
|
|
1549
1775
|
i0.ɵɵelementEnd()()()();
|
|
1550
|
-
i0.ɵɵelementStart(10, "div",
|
|
1551
|
-
i0.ɵɵelement(13, "i",
|
|
1776
|
+
i0.ɵɵelementStart(10, "div", 289)(11, "div", 290)(12, "h4");
|
|
1777
|
+
i0.ɵɵelement(13, "i", 291);
|
|
1552
1778
|
i0.ɵɵtext(14, " About Change Tracking ");
|
|
1553
1779
|
i0.ɵɵelementEnd();
|
|
1554
|
-
i0.ɵɵconditionalCreate(15,
|
|
1555
|
-
i0.ɵɵconditionalCreate(16,
|
|
1780
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_15_Template, 5, 0, "p");
|
|
1781
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_16_Template, 8, 0, "p");
|
|
1556
1782
|
i0.ɵɵelementEnd();
|
|
1557
|
-
i0.ɵɵconditionalCreate(17,
|
|
1783
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_17_Template, 14, 1, "div", 290);
|
|
1558
1784
|
i0.ɵɵelementEnd()()();
|
|
1559
1785
|
} if (rf & 2) {
|
|
1560
1786
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1571,42 +1797,42 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template(rf,
|
|
|
1571
1797
|
i0.ɵɵadvance();
|
|
1572
1798
|
i0.ɵɵconditional(ctx_r2.entity.TrackRecordChanges ? 17 : -1);
|
|
1573
1799
|
} }
|
|
1574
|
-
function
|
|
1575
|
-
i0.ɵɵelement(0, "i",
|
|
1800
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1801
|
+
i0.ɵɵelement(0, "i", 303);
|
|
1576
1802
|
i0.ɵɵtext(1, " Yes \u2014 read-only view ");
|
|
1577
1803
|
} }
|
|
1578
|
-
function
|
|
1579
|
-
i0.ɵɵelement(0, "i",
|
|
1804
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1805
|
+
i0.ɵɵelement(0, "i", 304);
|
|
1580
1806
|
i0.ɵɵtext(1, " No ");
|
|
1581
1807
|
} }
|
|
1582
|
-
function
|
|
1583
|
-
const
|
|
1584
|
-
i0.ɵɵelementStart(0, "span",
|
|
1585
|
-
i0.ɵɵlistener("click", function
|
|
1808
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1809
|
+
const _r43 = i0.ɵɵgetCurrentView();
|
|
1810
|
+
i0.ɵɵelementStart(0, "span", 305);
|
|
1811
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r43); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
1586
1812
|
i0.ɵɵtext(1);
|
|
1587
|
-
i0.ɵɵelement(2, "i",
|
|
1813
|
+
i0.ɵɵelement(2, "i", 63);
|
|
1588
1814
|
i0.ɵɵelementEnd();
|
|
1589
1815
|
} if (rf & 2) {
|
|
1590
1816
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1591
1817
|
i0.ɵɵadvance();
|
|
1592
1818
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.ParentChain[0] == null ? null : ctx_r2.ParentChain[0].Name, " ");
|
|
1593
1819
|
} }
|
|
1594
|
-
function
|
|
1595
|
-
i0.ɵɵelementStart(0, "span",
|
|
1820
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1821
|
+
i0.ɵɵelementStart(0, "span", 302);
|
|
1596
1822
|
i0.ɵɵtext(1, "None");
|
|
1597
1823
|
i0.ɵɵelementEnd();
|
|
1598
1824
|
} }
|
|
1599
|
-
function
|
|
1600
|
-
i0.ɵɵelementStart(0, "div",
|
|
1825
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1826
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1601
1827
|
i0.ɵɵtext(2, "Full Inheritance Chain");
|
|
1602
1828
|
i0.ɵɵelementEnd();
|
|
1603
|
-
i0.ɵɵelementStart(3, "span",
|
|
1829
|
+
i0.ɵɵelementStart(3, "span", 285);
|
|
1604
1830
|
i0.ɵɵtext(4);
|
|
1605
1831
|
i0.ɵɵelementEnd()();
|
|
1606
|
-
i0.ɵɵelementStart(5, "div",
|
|
1832
|
+
i0.ɵɵelementStart(5, "div", 300)(6, "span", 284);
|
|
1607
1833
|
i0.ɵɵtext(7, "Inherited Fields");
|
|
1608
1834
|
i0.ɵɵelementEnd();
|
|
1609
|
-
i0.ɵɵelementStart(8, "span",
|
|
1835
|
+
i0.ɵɵelementStart(8, "span", 285);
|
|
1610
1836
|
i0.ɵɵtext(9);
|
|
1611
1837
|
i0.ɵɵelementEnd()();
|
|
1612
1838
|
} if (rf & 2) {
|
|
@@ -1616,96 +1842,96 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1616
1842
|
i0.ɵɵadvance(5);
|
|
1617
1843
|
i0.ɵɵtextInterpolate2("", ctx_r2.InheritedFieldCount, " field", ctx_r2.InheritedFieldCount !== 1 ? "s" : "");
|
|
1618
1844
|
} }
|
|
1619
|
-
function
|
|
1620
|
-
const
|
|
1621
|
-
i0.ɵɵelementStart(0, "span",
|
|
1622
|
-
i0.ɵɵlistener("click", function
|
|
1845
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1846
|
+
const _r44 = i0.ɵɵgetCurrentView();
|
|
1847
|
+
i0.ɵɵelementStart(0, "span", 306);
|
|
1848
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_For_5_Template_span_click_0_listener() { const child_r45 = i0.ɵɵrestoreView(_r44).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(child_r45)); });
|
|
1623
1849
|
i0.ɵɵtext(1);
|
|
1624
1850
|
i0.ɵɵelementEnd();
|
|
1625
1851
|
i0.ɵɵtext(2);
|
|
1626
1852
|
} if (rf & 2) {
|
|
1627
|
-
const
|
|
1628
|
-
const ɵ$
|
|
1629
|
-
const ɵ$
|
|
1853
|
+
const child_r45 = ctx.$implicit;
|
|
1854
|
+
const ɵ$index_1409_r46 = ctx.$index;
|
|
1855
|
+
const ɵ$count_1409_r47 = ctx.$count;
|
|
1630
1856
|
i0.ɵɵadvance();
|
|
1631
|
-
i0.ɵɵtextInterpolate(
|
|
1857
|
+
i0.ɵɵtextInterpolate(child_r45.Name);
|
|
1632
1858
|
i0.ɵɵadvance();
|
|
1633
|
-
i0.ɵɵtextInterpolate1("", ɵ$
|
|
1859
|
+
i0.ɵɵtextInterpolate1("", ɵ$index_1409_r46 === ɵ$count_1409_r47 - 1 ? "" : ", ", " ");
|
|
1634
1860
|
} }
|
|
1635
|
-
function
|
|
1636
|
-
i0.ɵɵelementStart(0, "div",
|
|
1861
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1862
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1637
1863
|
i0.ɵɵtext(2, "Child Types");
|
|
1638
1864
|
i0.ɵɵelementEnd();
|
|
1639
|
-
i0.ɵɵelementStart(3, "span",
|
|
1640
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1865
|
+
i0.ɵɵelementStart(3, "span", 285);
|
|
1866
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_For_5_Template, 3, 2, null, null, _forTrack0);
|
|
1641
1867
|
i0.ɵɵelementEnd()();
|
|
1642
1868
|
} if (rf & 2) {
|
|
1643
1869
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1644
1870
|
i0.ɵɵadvance(4);
|
|
1645
1871
|
i0.ɵɵrepeater(ctx_r2.ChildEntities);
|
|
1646
1872
|
} }
|
|
1647
|
-
function
|
|
1648
|
-
const
|
|
1649
|
-
i0.ɵɵelementStart(0, "span",
|
|
1650
|
-
i0.ɵɵlistener("click", function
|
|
1873
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1874
|
+
const _r48 = i0.ɵɵgetCurrentView();
|
|
1875
|
+
i0.ɵɵelementStart(0, "span", 306);
|
|
1876
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_For_5_Template_span_click_0_listener() { const sibling_r49 = i0.ɵɵrestoreView(_r48).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(sibling_r49)); });
|
|
1651
1877
|
i0.ɵɵtext(1);
|
|
1652
1878
|
i0.ɵɵelementEnd();
|
|
1653
1879
|
i0.ɵɵtext(2);
|
|
1654
1880
|
} if (rf & 2) {
|
|
1655
|
-
const
|
|
1656
|
-
const ɵ$
|
|
1657
|
-
const ɵ$
|
|
1881
|
+
const sibling_r49 = ctx.$implicit;
|
|
1882
|
+
const ɵ$index_1422_r50 = ctx.$index;
|
|
1883
|
+
const ɵ$count_1422_r51 = ctx.$count;
|
|
1658
1884
|
i0.ɵɵadvance();
|
|
1659
|
-
i0.ɵɵtextInterpolate(
|
|
1885
|
+
i0.ɵɵtextInterpolate(sibling_r49.Name);
|
|
1660
1886
|
i0.ɵɵadvance();
|
|
1661
|
-
i0.ɵɵtextInterpolate1("", ɵ$
|
|
1887
|
+
i0.ɵɵtextInterpolate1("", ɵ$index_1422_r50 === ɵ$count_1422_r51 - 1 ? "" : ", ", " ");
|
|
1662
1888
|
} }
|
|
1663
|
-
function
|
|
1664
|
-
i0.ɵɵelementStart(0, "div",
|
|
1889
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1890
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1665
1891
|
i0.ɵɵtext(2, "Sibling Types");
|
|
1666
1892
|
i0.ɵɵelementEnd();
|
|
1667
|
-
i0.ɵɵelementStart(3, "span",
|
|
1668
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1893
|
+
i0.ɵɵelementStart(3, "span", 285);
|
|
1894
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_For_5_Template, 3, 2, null, null, _forTrack0);
|
|
1669
1895
|
i0.ɵɵelementEnd()();
|
|
1670
1896
|
} if (rf & 2) {
|
|
1671
1897
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1672
1898
|
i0.ɵɵadvance(4);
|
|
1673
1899
|
i0.ɵɵrepeater(ctx_r2.SiblingEntities);
|
|
1674
1900
|
} }
|
|
1675
|
-
function
|
|
1676
|
-
i0.ɵɵelement(0, "i",
|
|
1901
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1902
|
+
i0.ɵɵelement(0, "i", 307);
|
|
1677
1903
|
i0.ɵɵtext(1, " Enforced \u2014 a parent record can only be one child type ");
|
|
1678
1904
|
} }
|
|
1679
|
-
function
|
|
1680
|
-
i0.ɵɵelementStart(0, "span",
|
|
1905
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1906
|
+
i0.ɵɵelementStart(0, "span", 302);
|
|
1681
1907
|
i0.ɵɵtext(1, "N/A");
|
|
1682
1908
|
i0.ɵɵelementEnd();
|
|
1683
1909
|
} }
|
|
1684
|
-
function
|
|
1685
|
-
i0.ɵɵelementStart(0, "div",
|
|
1686
|
-
i0.ɵɵelement(2, "i",
|
|
1910
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1911
|
+
i0.ɵɵelementStart(0, "div", 293)(1, "h3", 70);
|
|
1912
|
+
i0.ɵɵelement(2, "i", 49);
|
|
1687
1913
|
i0.ɵɵtext(3, " Type Relationship (IS-A) ");
|
|
1688
1914
|
i0.ɵɵelementEnd();
|
|
1689
|
-
i0.ɵɵelementStart(4, "div",
|
|
1915
|
+
i0.ɵɵelementStart(4, "div", 282)(5, "div", 300)(6, "span", 284);
|
|
1690
1916
|
i0.ɵɵtext(7, "Virtual Entity");
|
|
1691
1917
|
i0.ɵɵelementEnd();
|
|
1692
|
-
i0.ɵɵelementStart(8, "span",
|
|
1693
|
-
i0.ɵɵconditionalCreate(9,
|
|
1918
|
+
i0.ɵɵelementStart(8, "span", 285);
|
|
1919
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_9_Template, 2, 0)(10, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_10_Template, 2, 0);
|
|
1694
1920
|
i0.ɵɵelementEnd()();
|
|
1695
|
-
i0.ɵɵelementStart(11, "div",
|
|
1921
|
+
i0.ɵɵelementStart(11, "div", 300)(12, "span", 284);
|
|
1696
1922
|
i0.ɵɵtext(13, "Parent Entity");
|
|
1697
1923
|
i0.ɵɵelementEnd();
|
|
1698
|
-
i0.ɵɵelementStart(14, "span",
|
|
1699
|
-
i0.ɵɵconditionalCreate(15,
|
|
1924
|
+
i0.ɵɵelementStart(14, "span", 285);
|
|
1925
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_15_Template, 3, 1, "span", 301)(16, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_16_Template, 2, 0, "span", 302);
|
|
1700
1926
|
i0.ɵɵelementEnd()();
|
|
1701
|
-
i0.ɵɵconditionalCreate(17,
|
|
1702
|
-
i0.ɵɵconditionalCreate(18,
|
|
1703
|
-
i0.ɵɵconditionalCreate(19,
|
|
1704
|
-
i0.ɵɵelementStart(20, "div",
|
|
1927
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_17_Template, 10, 3);
|
|
1928
|
+
i0.ɵɵconditionalCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_18_Template, 6, 0, "div", 300);
|
|
1929
|
+
i0.ɵɵconditionalCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_19_Template, 6, 0, "div", 300);
|
|
1930
|
+
i0.ɵɵelementStart(20, "div", 300)(21, "span", 284);
|
|
1705
1931
|
i0.ɵɵtext(22, "Disjoint Subtypes");
|
|
1706
1932
|
i0.ɵɵelementEnd();
|
|
1707
|
-
i0.ɵɵelementStart(23, "span",
|
|
1708
|
-
i0.ɵɵconditionalCreate(24,
|
|
1933
|
+
i0.ɵɵelementStart(23, "span", 285);
|
|
1934
|
+
i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_24_Template, 2, 0)(25, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Conditional_25_Template, 2, 0, "span", 302);
|
|
1709
1935
|
i0.ɵɵelementEnd()()()();
|
|
1710
1936
|
} if (rf & 2) {
|
|
1711
1937
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1722,70 +1948,70 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1722
1948
|
i0.ɵɵadvance(5);
|
|
1723
1949
|
i0.ɵɵconditional(ctx_r2.IsParentType || ctx_r2.IsChildType ? 24 : 25);
|
|
1724
1950
|
} }
|
|
1725
|
-
function
|
|
1726
|
-
i0.ɵɵelementStart(0, "div",
|
|
1727
|
-
i0.ɵɵelement(1, "mj-code-editor",
|
|
1951
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1952
|
+
i0.ɵɵelementStart(0, "div", 310);
|
|
1953
|
+
i0.ɵɵelement(1, "mj-code-editor", 313);
|
|
1728
1954
|
i0.ɵɵelementEnd();
|
|
1729
1955
|
} if (rf & 2) {
|
|
1730
|
-
const
|
|
1956
|
+
const setting_r52 = i0.ɵɵnextContext().$implicit;
|
|
1731
1957
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1732
1958
|
i0.ɵɵadvance();
|
|
1733
|
-
i0.ɵɵproperty("value", ctx_r2.formatJsonValue(
|
|
1959
|
+
i0.ɵɵproperty("value", ctx_r2.formatJsonValue(setting_r52.Value))("readonly", true)("lineWrapping", true);
|
|
1734
1960
|
} }
|
|
1735
|
-
function
|
|
1736
|
-
i0.ɵɵelementStart(0, "div",
|
|
1961
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1962
|
+
i0.ɵɵelementStart(0, "div", 311);
|
|
1737
1963
|
i0.ɵɵtext(1);
|
|
1738
1964
|
i0.ɵɵelementEnd();
|
|
1739
1965
|
} if (rf & 2) {
|
|
1740
|
-
const
|
|
1966
|
+
const setting_r52 = i0.ɵɵnextContext().$implicit;
|
|
1741
1967
|
i0.ɵɵadvance();
|
|
1742
|
-
i0.ɵɵtextInterpolate(
|
|
1968
|
+
i0.ɵɵtextInterpolate(setting_r52.Value);
|
|
1743
1969
|
} }
|
|
1744
|
-
function
|
|
1745
|
-
i0.ɵɵelementStart(0, "div",
|
|
1970
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1971
|
+
i0.ɵɵelementStart(0, "div", 312);
|
|
1746
1972
|
i0.ɵɵtext(1);
|
|
1747
1973
|
i0.ɵɵelementEnd();
|
|
1748
1974
|
} if (rf & 2) {
|
|
1749
|
-
const
|
|
1975
|
+
const setting_r52 = i0.ɵɵnextContext().$implicit;
|
|
1750
1976
|
i0.ɵɵadvance();
|
|
1751
|
-
i0.ɵɵtextInterpolate(
|
|
1977
|
+
i0.ɵɵtextInterpolate(setting_r52.Comments);
|
|
1752
1978
|
} }
|
|
1753
|
-
function
|
|
1754
|
-
i0.ɵɵelementStart(0, "div",
|
|
1979
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1980
|
+
i0.ɵɵelementStart(0, "div", 308)(1, "div", 309);
|
|
1755
1981
|
i0.ɵɵtext(2);
|
|
1756
1982
|
i0.ɵɵelementEnd();
|
|
1757
|
-
i0.ɵɵconditionalCreate(3,
|
|
1758
|
-
i0.ɵɵconditionalCreate(5,
|
|
1983
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_3_Template, 2, 3, "div", 310)(4, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_4_Template, 2, 1, "div", 311);
|
|
1984
|
+
i0.ɵɵconditionalCreate(5, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Conditional_5_Template, 2, 1, "div", 312);
|
|
1759
1985
|
i0.ɵɵelementEnd();
|
|
1760
1986
|
} if (rf & 2) {
|
|
1761
|
-
const
|
|
1987
|
+
const setting_r52 = ctx.$implicit;
|
|
1762
1988
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1763
1989
|
i0.ɵɵadvance(2);
|
|
1764
|
-
i0.ɵɵtextInterpolate(
|
|
1990
|
+
i0.ɵɵtextInterpolate(setting_r52.Name);
|
|
1765
1991
|
i0.ɵɵadvance();
|
|
1766
|
-
i0.ɵɵconditional(ctx_r2.isJsonValue(
|
|
1992
|
+
i0.ɵɵconditional(ctx_r2.isJsonValue(setting_r52.Value) ? 3 : 4);
|
|
1767
1993
|
i0.ɵɵadvance(2);
|
|
1768
|
-
i0.ɵɵconditional(
|
|
1994
|
+
i0.ɵɵconditional(setting_r52.Comments ? 5 : -1);
|
|
1769
1995
|
} }
|
|
1770
|
-
function
|
|
1771
|
-
i0.ɵɵelementStart(0, "div",
|
|
1772
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1996
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1997
|
+
i0.ɵɵelementStart(0, "div", 296);
|
|
1998
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_For_2_Template, 6, 3, "div", 308, i0.ɵɵrepeaterTrackByIdentity);
|
|
1773
1999
|
i0.ɵɵelementEnd();
|
|
1774
2000
|
} if (rf & 2) {
|
|
1775
2001
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1776
2002
|
i0.ɵɵadvance();
|
|
1777
2003
|
i0.ɵɵrepeater(ctx_r2.entity.Settings);
|
|
1778
2004
|
} }
|
|
1779
|
-
function
|
|
1780
|
-
i0.ɵɵelementStart(0, "div",
|
|
2005
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
2006
|
+
i0.ɵɵelementStart(0, "div", 211)(1, "p");
|
|
1781
2007
|
i0.ɵɵtext(2, "No custom settings configured");
|
|
1782
2008
|
i0.ɵɵelementEnd()();
|
|
1783
2009
|
} }
|
|
1784
|
-
function
|
|
1785
|
-
i0.ɵɵelementStart(0, "div",
|
|
2010
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
2011
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1786
2012
|
i0.ɵɵtext(2, "Catalog");
|
|
1787
2013
|
i0.ɵɵelementEnd();
|
|
1788
|
-
i0.ɵɵelementStart(3, "span",
|
|
2014
|
+
i0.ɵɵelementStart(3, "span", 316);
|
|
1789
2015
|
i0.ɵɵtext(4);
|
|
1790
2016
|
i0.ɵɵelementEnd()();
|
|
1791
2017
|
} if (rf & 2) {
|
|
@@ -1793,11 +2019,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1793
2019
|
i0.ɵɵadvance(4);
|
|
1794
2020
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextCatalog);
|
|
1795
2021
|
} }
|
|
1796
|
-
function
|
|
1797
|
-
i0.ɵɵelementStart(0, "div",
|
|
2022
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
2023
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1798
2024
|
i0.ɵɵtext(2, "Index");
|
|
1799
2025
|
i0.ɵɵelementEnd();
|
|
1800
|
-
i0.ɵɵelementStart(3, "span",
|
|
2026
|
+
i0.ɵɵelementStart(3, "span", 316);
|
|
1801
2027
|
i0.ɵɵtext(4);
|
|
1802
2028
|
i0.ɵɵelementEnd()();
|
|
1803
2029
|
} if (rf & 2) {
|
|
@@ -1805,11 +2031,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1805
2031
|
i0.ɵɵadvance(4);
|
|
1806
2032
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextIndex);
|
|
1807
2033
|
} }
|
|
1808
|
-
function
|
|
1809
|
-
i0.ɵɵelementStart(0, "div",
|
|
2034
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
2035
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1810
2036
|
i0.ɵɵtext(2, "Function");
|
|
1811
2037
|
i0.ɵɵelementEnd();
|
|
1812
|
-
i0.ɵɵelementStart(3, "span",
|
|
2038
|
+
i0.ɵɵelementStart(3, "span", 316);
|
|
1813
2039
|
i0.ɵɵtext(4);
|
|
1814
2040
|
i0.ɵɵelementEnd()();
|
|
1815
2041
|
} if (rf & 2) {
|
|
@@ -1817,17 +2043,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1817
2043
|
i0.ɵɵadvance(4);
|
|
1818
2044
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextSearchFunction);
|
|
1819
2045
|
} }
|
|
1820
|
-
function
|
|
1821
|
-
i0.ɵɵelementStart(0, "div",
|
|
2046
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
2047
|
+
i0.ɵɵelementStart(0, "div", 298)(1, "div", 300)(2, "span", 284);
|
|
1822
2048
|
i0.ɵɵtext(3, "Status");
|
|
1823
2049
|
i0.ɵɵelementEnd();
|
|
1824
|
-
i0.ɵɵelementStart(4, "span",
|
|
1825
|
-
i0.ɵɵelement(5, "i",
|
|
2050
|
+
i0.ɵɵelementStart(4, "span", 314);
|
|
2051
|
+
i0.ɵɵelement(5, "i", 315);
|
|
1826
2052
|
i0.ɵɵtext(6, " Enabled ");
|
|
1827
2053
|
i0.ɵɵelementEnd()();
|
|
1828
|
-
i0.ɵɵconditionalCreate(7,
|
|
1829
|
-
i0.ɵɵconditionalCreate(8,
|
|
1830
|
-
i0.ɵɵconditionalCreate(9,
|
|
2054
|
+
i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_7_Template, 5, 1, "div", 300);
|
|
2055
|
+
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_8_Template, 5, 1, "div", 300);
|
|
2056
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Conditional_9_Template, 5, 1, "div", 300);
|
|
1831
2057
|
i0.ɵɵelementEnd();
|
|
1832
2058
|
} if (rf & 2) {
|
|
1833
2059
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1838,16 +2064,16 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1838
2064
|
i0.ɵɵadvance();
|
|
1839
2065
|
i0.ɵɵconditional(ctx_r2.entity.FullTextSearchFunction ? 9 : -1);
|
|
1840
2066
|
} }
|
|
1841
|
-
function
|
|
1842
|
-
i0.ɵɵelementStart(0, "div",
|
|
2067
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
2068
|
+
i0.ɵɵelementStart(0, "div", 211)(1, "p");
|
|
1843
2069
|
i0.ɵɵtext(2, "Full-text search is not enabled for this entity");
|
|
1844
2070
|
i0.ɵɵelementEnd()();
|
|
1845
2071
|
} }
|
|
1846
|
-
function
|
|
1847
|
-
i0.ɵɵelementStart(0, "div",
|
|
2072
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
2073
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1848
2074
|
i0.ɵɵtext(2, "Sample Count");
|
|
1849
2075
|
i0.ɵɵelementEnd();
|
|
1850
|
-
i0.ɵɵelementStart(3, "span",
|
|
2076
|
+
i0.ɵɵelementStart(3, "span", 285);
|
|
1851
2077
|
i0.ɵɵtext(4);
|
|
1852
2078
|
i0.ɵɵelementEnd()();
|
|
1853
2079
|
} if (rf & 2) {
|
|
@@ -1855,11 +2081,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1855
2081
|
i0.ɵɵadvance(4);
|
|
1856
2082
|
i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleCount);
|
|
1857
2083
|
} }
|
|
1858
|
-
function
|
|
1859
|
-
i0.ɵɵelementStart(0, "div",
|
|
2084
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
2085
|
+
i0.ɵɵelementStart(0, "div", 300)(1, "span", 284);
|
|
1860
2086
|
i0.ɵɵtext(2, "Sample Method");
|
|
1861
2087
|
i0.ɵɵelementEnd();
|
|
1862
|
-
i0.ɵɵelementStart(3, "span",
|
|
2088
|
+
i0.ɵɵelementStart(3, "span", 285);
|
|
1863
2089
|
i0.ɵɵtext(4);
|
|
1864
2090
|
i0.ɵɵelementEnd()();
|
|
1865
2091
|
} if (rf & 2) {
|
|
@@ -1867,35 +2093,35 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_
|
|
|
1867
2093
|
i0.ɵɵadvance(4);
|
|
1868
2094
|
i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleMethod);
|
|
1869
2095
|
} }
|
|
1870
|
-
function
|
|
1871
|
-
i0.ɵɵelementStart(0, "section",
|
|
1872
|
-
i0.ɵɵconditionalCreate(2,
|
|
1873
|
-
i0.ɵɵelementStart(3, "div",
|
|
1874
|
-
i0.ɵɵelement(5, "i",
|
|
2096
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template(rf, ctx) { if (rf & 1) {
|
|
2097
|
+
i0.ɵɵelementStart(0, "section", 36)(1, "div", 54);
|
|
2098
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_2_Template, 26, 6, "div", 293);
|
|
2099
|
+
i0.ɵɵelementStart(3, "div", 294)(4, "h3", 70);
|
|
2100
|
+
i0.ɵɵelement(5, "i", 295);
|
|
1875
2101
|
i0.ɵɵtext(6, " Entity Settings ");
|
|
1876
2102
|
i0.ɵɵelementEnd();
|
|
1877
|
-
i0.ɵɵconditionalCreate(7,
|
|
1878
|
-
i0.ɵɵconditionalCreate(8,
|
|
2103
|
+
i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_7_Template, 3, 0, "div", 296);
|
|
2104
|
+
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_8_Template, 3, 0, "div", 211);
|
|
1879
2105
|
i0.ɵɵelementEnd();
|
|
1880
|
-
i0.ɵɵelementStart(9, "div",
|
|
1881
|
-
i0.ɵɵelement(11, "i",
|
|
2106
|
+
i0.ɵɵelementStart(9, "div", 294)(10, "h3", 70);
|
|
2107
|
+
i0.ɵɵelement(11, "i", 297);
|
|
1882
2108
|
i0.ɵɵtext(12, " Full-Text Search ");
|
|
1883
2109
|
i0.ɵɵelementEnd();
|
|
1884
|
-
i0.ɵɵconditionalCreate(13,
|
|
1885
|
-
i0.ɵɵconditionalCreate(14,
|
|
2110
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_13_Template, 10, 3, "div", 298);
|
|
2111
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_14_Template, 3, 0, "div", 211);
|
|
1886
2112
|
i0.ɵɵelementEnd();
|
|
1887
|
-
i0.ɵɵelementStart(15, "div",
|
|
1888
|
-
i0.ɵɵelement(17, "i",
|
|
2113
|
+
i0.ɵɵelementStart(15, "div", 294)(16, "h3", 70);
|
|
2114
|
+
i0.ɵɵelement(17, "i", 299);
|
|
1889
2115
|
i0.ɵɵtext(18, " Schema Packaging ");
|
|
1890
2116
|
i0.ɵɵelementEnd();
|
|
1891
|
-
i0.ɵɵelementStart(19, "div",
|
|
2117
|
+
i0.ɵɵelementStart(19, "div", 282)(20, "div", 300)(21, "span", 284);
|
|
1892
2118
|
i0.ɵɵtext(22, "Rows to Pack");
|
|
1893
2119
|
i0.ɵɵelementEnd();
|
|
1894
|
-
i0.ɵɵelementStart(23, "span",
|
|
2120
|
+
i0.ɵɵelementStart(23, "span", 285);
|
|
1895
2121
|
i0.ɵɵtext(24);
|
|
1896
2122
|
i0.ɵɵelementEnd()();
|
|
1897
|
-
i0.ɵɵconditionalCreate(25,
|
|
1898
|
-
i0.ɵɵconditionalCreate(26,
|
|
2123
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_25_Template, 5, 1, "div", 300);
|
|
2124
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Conditional_26_Template, 5, 1, "div", 300);
|
|
1899
2125
|
i0.ɵɵelementEnd()()()();
|
|
1900
2126
|
} if (rf & 2) {
|
|
1901
2127
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1916,18 +2142,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template(rf,
|
|
|
1916
2142
|
i0.ɵɵadvance();
|
|
1917
2143
|
i0.ɵɵconditional(ctx_r2.entity.RowsToPackSampleMethod ? 26 : -1);
|
|
1918
2144
|
} }
|
|
1919
|
-
function
|
|
2145
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_62_Template(rf, ctx) { if (rf & 1) {
|
|
1920
2146
|
i0.ɵɵelementStart(0, "h3");
|
|
1921
2147
|
i0.ɵɵtext(1, "Field Details");
|
|
1922
2148
|
i0.ɵɵelementEnd();
|
|
1923
2149
|
} }
|
|
1924
|
-
function
|
|
2150
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
1925
2151
|
i0.ɵɵelementStart(0, "h3");
|
|
1926
2152
|
i0.ɵɵtext(1, "Relationship Details");
|
|
1927
2153
|
i0.ɵɵelementEnd();
|
|
1928
2154
|
} }
|
|
1929
|
-
function
|
|
1930
|
-
i0.ɵɵelementStart(0, "p",
|
|
2155
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
2156
|
+
i0.ɵɵelementStart(0, "p", 319);
|
|
1931
2157
|
i0.ɵɵtext(1);
|
|
1932
2158
|
i0.ɵɵelementEnd();
|
|
1933
2159
|
} if (rf & 2) {
|
|
@@ -1935,11 +2161,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_
|
|
|
1935
2161
|
i0.ɵɵadvance();
|
|
1936
2162
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Description);
|
|
1937
2163
|
} }
|
|
1938
|
-
function
|
|
1939
|
-
i0.ɵɵelementStart(0, "div",
|
|
2164
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
2165
|
+
i0.ɵɵelementStart(0, "div", 321)(1, "span", 322);
|
|
1940
2166
|
i0.ɵɵtext(2, "Default");
|
|
1941
2167
|
i0.ɵɵelementEnd();
|
|
1942
|
-
i0.ɵɵelementStart(3, "span",
|
|
2168
|
+
i0.ɵɵelementStart(3, "span", 323);
|
|
1943
2169
|
i0.ɵɵtext(4);
|
|
1944
2170
|
i0.ɵɵelementEnd()();
|
|
1945
2171
|
} if (rf & 2) {
|
|
@@ -1947,24 +2173,24 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_
|
|
|
1947
2173
|
i0.ɵɵadvance(4);
|
|
1948
2174
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.DefaultValue);
|
|
1949
2175
|
} }
|
|
1950
|
-
function
|
|
1951
|
-
const
|
|
1952
|
-
i0.ɵɵelementStart(0, "div",
|
|
1953
|
-
i0.ɵɵelement(2, "i",
|
|
2176
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
2177
|
+
const _r53 = i0.ɵɵgetCurrentView();
|
|
2178
|
+
i0.ɵɵelementStart(0, "div", 325)(1, "h5");
|
|
2179
|
+
i0.ɵɵelement(2, "i", 44);
|
|
1954
2180
|
i0.ɵɵtext(3, " IS-A Inherited Field ");
|
|
1955
2181
|
i0.ɵɵelementEnd();
|
|
1956
|
-
i0.ɵɵelementStart(4, "div",
|
|
2182
|
+
i0.ɵɵelementStart(4, "div", 320)(5, "div", 321)(6, "span", 322);
|
|
1957
2183
|
i0.ɵɵtext(7, "Source Entity");
|
|
1958
2184
|
i0.ɵɵelementEnd();
|
|
1959
|
-
i0.ɵɵelementStart(8, "span",
|
|
1960
|
-
i0.ɵɵlistener("click", function
|
|
2185
|
+
i0.ɵɵelementStart(8, "span", 326);
|
|
2186
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template_span_click_8_listener() { i0.ɵɵrestoreView(_r53); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
1961
2187
|
i0.ɵɵtext(9);
|
|
1962
|
-
i0.ɵɵelement(10, "i",
|
|
2188
|
+
i0.ɵɵelement(10, "i", 63);
|
|
1963
2189
|
i0.ɵɵelementEnd()();
|
|
1964
|
-
i0.ɵɵelementStart(11, "div",
|
|
2190
|
+
i0.ɵɵelementStart(11, "div", 321)(12, "span", 322);
|
|
1965
2191
|
i0.ɵɵtext(13, "Routing");
|
|
1966
2192
|
i0.ɵɵelementEnd();
|
|
1967
|
-
i0.ɵɵelementStart(14, "span",
|
|
2193
|
+
i0.ɵɵelementStart(14, "span", 324);
|
|
1968
2194
|
i0.ɵɵtext(15, "ORM routes Set/Get to parent");
|
|
1969
2195
|
i0.ɵɵelementEnd()()()();
|
|
1970
2196
|
} if (rf & 2) {
|
|
@@ -1972,23 +2198,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_
|
|
|
1972
2198
|
i0.ɵɵadvance(9);
|
|
1973
2199
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.GetISAFieldSource(ctx_r2.selectedField), " ");
|
|
1974
2200
|
} }
|
|
1975
|
-
function
|
|
1976
|
-
const
|
|
1977
|
-
i0.ɵɵelementStart(0, "div",
|
|
2201
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
2202
|
+
const _r54 = i0.ɵɵgetCurrentView();
|
|
2203
|
+
i0.ɵɵelementStart(0, "div", 317)(1, "h5");
|
|
1978
2204
|
i0.ɵɵtext(2, "Relationship");
|
|
1979
2205
|
i0.ɵɵelementEnd();
|
|
1980
|
-
i0.ɵɵelementStart(3, "div",
|
|
2206
|
+
i0.ɵɵelementStart(3, "div", 320)(4, "div", 321)(5, "span", 322);
|
|
1981
2207
|
i0.ɵɵtext(6, "Related Entity");
|
|
1982
2208
|
i0.ɵɵelementEnd();
|
|
1983
|
-
i0.ɵɵelementStart(7, "span",
|
|
1984
|
-
i0.ɵɵlistener("click", function
|
|
2209
|
+
i0.ɵɵelementStart(7, "span", 327);
|
|
2210
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template_span_click_7_listener() { i0.ɵɵrestoreView(_r54); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.navigateToRelatedEntity(ctx_r2.selectedField)); });
|
|
1985
2211
|
i0.ɵɵtext(8);
|
|
1986
|
-
i0.ɵɵelement(9, "i",
|
|
2212
|
+
i0.ɵɵelement(9, "i", 63);
|
|
1987
2213
|
i0.ɵɵelementEnd()();
|
|
1988
|
-
i0.ɵɵelementStart(10, "div",
|
|
2214
|
+
i0.ɵɵelementStart(10, "div", 321)(11, "span", 322);
|
|
1989
2215
|
i0.ɵɵtext(12, "Display Type");
|
|
1990
2216
|
i0.ɵɵelementEnd();
|
|
1991
|
-
i0.ɵɵelementStart(13, "span",
|
|
2217
|
+
i0.ɵɵelementStart(13, "span", 324);
|
|
1992
2218
|
i0.ɵɵtext(14);
|
|
1993
2219
|
i0.ɵɵelementEnd()()()();
|
|
1994
2220
|
} if (rf & 2) {
|
|
@@ -1998,20 +2224,20 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_
|
|
|
1998
2224
|
i0.ɵɵadvance(6);
|
|
1999
2225
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.RelatedEntityDisplayType);
|
|
2000
2226
|
} }
|
|
2001
|
-
function
|
|
2002
|
-
i0.ɵɵelementStart(0, "div",
|
|
2227
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
2228
|
+
i0.ɵɵelementStart(0, "div", 317)(1, "h5");
|
|
2003
2229
|
i0.ɵɵtext(2, "Encryption");
|
|
2004
2230
|
i0.ɵɵelementEnd();
|
|
2005
|
-
i0.ɵɵelementStart(3, "div",
|
|
2231
|
+
i0.ɵɵelementStart(3, "div", 320)(4, "div", 321)(5, "span", 322);
|
|
2006
2232
|
i0.ɵɵtext(6, "Encrypted");
|
|
2007
2233
|
i0.ɵɵelementEnd();
|
|
2008
|
-
i0.ɵɵelementStart(7, "span",
|
|
2234
|
+
i0.ɵɵelementStart(7, "span", 324);
|
|
2009
2235
|
i0.ɵɵtext(8, "Yes");
|
|
2010
2236
|
i0.ɵɵelementEnd()();
|
|
2011
|
-
i0.ɵɵelementStart(9, "div",
|
|
2237
|
+
i0.ɵɵelementStart(9, "div", 321)(10, "span", 322);
|
|
2012
2238
|
i0.ɵɵtext(11, "Decrypt in API");
|
|
2013
2239
|
i0.ɵɵelementEnd();
|
|
2014
|
-
i0.ɵɵelementStart(12, "span",
|
|
2240
|
+
i0.ɵɵelementStart(12, "span", 324);
|
|
2015
2241
|
i0.ɵɵtext(13);
|
|
2016
2242
|
i0.ɵɵelementEnd()()()();
|
|
2017
2243
|
} if (rf & 2) {
|
|
@@ -2019,11 +2245,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_
|
|
|
2019
2245
|
i0.ɵɵadvance(13);
|
|
2020
2246
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.AllowDecryptInAPI ? "Yes" : "No");
|
|
2021
2247
|
} }
|
|
2022
|
-
function
|
|
2023
|
-
i0.ɵɵelementStart(0, "div",
|
|
2248
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
2249
|
+
i0.ɵɵelementStart(0, "div", 321)(1, "span", 322);
|
|
2024
2250
|
i0.ɵɵtext(2, "Category");
|
|
2025
2251
|
i0.ɵɵelementEnd();
|
|
2026
|
-
i0.ɵɵelementStart(3, "span",
|
|
2252
|
+
i0.ɵɵelementStart(3, "span", 324);
|
|
2027
2253
|
i0.ɵɵtext(4);
|
|
2028
2254
|
i0.ɵɵelementEnd()();
|
|
2029
2255
|
} if (rf & 2) {
|
|
@@ -2031,119 +2257,119 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_
|
|
|
2031
2257
|
i0.ɵɵadvance(4);
|
|
2032
2258
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Category);
|
|
2033
2259
|
} }
|
|
2034
|
-
function
|
|
2035
|
-
i0.ɵɵelementStart(0, "span",
|
|
2260
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2261
|
+
i0.ɵɵelementStart(0, "span", 330);
|
|
2036
2262
|
i0.ɵɵtext(1);
|
|
2037
2263
|
i0.ɵɵelementEnd();
|
|
2038
2264
|
} if (rf & 2) {
|
|
2039
|
-
const
|
|
2265
|
+
const val_r55 = i0.ɵɵnextContext().$implicit;
|
|
2040
2266
|
i0.ɵɵadvance();
|
|
2041
|
-
i0.ɵɵtextInterpolate(
|
|
2267
|
+
i0.ɵɵtextInterpolate(val_r55.Code);
|
|
2042
2268
|
} }
|
|
2043
|
-
function
|
|
2044
|
-
i0.ɵɵelementStart(0, "div",
|
|
2045
|
-
i0.ɵɵconditionalCreate(1,
|
|
2046
|
-
i0.ɵɵelementStart(2, "span",
|
|
2269
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
2270
|
+
i0.ɵɵelementStart(0, "div", 329);
|
|
2271
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Conditional_1_Template, 2, 1, "span", 330);
|
|
2272
|
+
i0.ɵɵelementStart(2, "span", 331);
|
|
2047
2273
|
i0.ɵɵtext(3);
|
|
2048
2274
|
i0.ɵɵelementEnd()();
|
|
2049
2275
|
} if (rf & 2) {
|
|
2050
|
-
const
|
|
2276
|
+
const val_r55 = ctx.$implicit;
|
|
2051
2277
|
i0.ɵɵadvance();
|
|
2052
|
-
i0.ɵɵconditional(
|
|
2278
|
+
i0.ɵɵconditional(val_r55.Code !== val_r55.Value ? 1 : -1);
|
|
2053
2279
|
i0.ɵɵadvance(2);
|
|
2054
|
-
i0.ɵɵtextInterpolate(
|
|
2280
|
+
i0.ɵɵtextInterpolate(val_r55.Value);
|
|
2055
2281
|
} }
|
|
2056
|
-
function
|
|
2057
|
-
i0.ɵɵelementStart(0, "div",
|
|
2282
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_Template(rf, ctx) { if (rf & 1) {
|
|
2283
|
+
i0.ɵɵelementStart(0, "div", 317)(1, "h5");
|
|
2058
2284
|
i0.ɵɵtext(2, "Allowed Values");
|
|
2059
2285
|
i0.ɵɵelementEnd();
|
|
2060
|
-
i0.ɵɵelementStart(3, "div",
|
|
2061
|
-
i0.ɵɵrepeaterCreate(4,
|
|
2286
|
+
i0.ɵɵelementStart(3, "div", 328);
|
|
2287
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_For_5_Template, 4, 2, "div", 329, i0.ɵɵrepeaterTrackByIdentity);
|
|
2062
2288
|
i0.ɵɵelementEnd()();
|
|
2063
2289
|
} if (rf & 2) {
|
|
2064
2290
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2065
2291
|
i0.ɵɵadvance(4);
|
|
2066
2292
|
i0.ɵɵrepeater(ctx_r2.selectedField.EntityFieldValues);
|
|
2067
2293
|
} }
|
|
2068
|
-
function
|
|
2069
|
-
i0.ɵɵelementStart(0, "div",
|
|
2294
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
2295
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "div", 317)(2, "h4");
|
|
2070
2296
|
i0.ɵɵtext(3);
|
|
2071
2297
|
i0.ɵɵelementEnd();
|
|
2072
|
-
i0.ɵɵelementStart(4, "div",
|
|
2298
|
+
i0.ɵɵelementStart(4, "div", 318);
|
|
2073
2299
|
i0.ɵɵtext(5);
|
|
2074
2300
|
i0.ɵɵelementEnd();
|
|
2075
|
-
i0.ɵɵconditionalCreate(6,
|
|
2301
|
+
i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_6_Template, 2, 1, "p", 319);
|
|
2076
2302
|
i0.ɵɵelementEnd();
|
|
2077
|
-
i0.ɵɵelementStart(7, "div",
|
|
2303
|
+
i0.ɵɵelementStart(7, "div", 317)(8, "h5");
|
|
2078
2304
|
i0.ɵɵtext(9, "Type Information");
|
|
2079
2305
|
i0.ɵɵelementEnd();
|
|
2080
|
-
i0.ɵɵelementStart(10, "div",
|
|
2306
|
+
i0.ɵɵelementStart(10, "div", 320)(11, "div", 321)(12, "span", 322);
|
|
2081
2307
|
i0.ɵɵtext(13, "SQL Type");
|
|
2082
2308
|
i0.ɵɵelementEnd();
|
|
2083
|
-
i0.ɵɵelementStart(14, "span",
|
|
2309
|
+
i0.ɵɵelementStart(14, "span", 323);
|
|
2084
2310
|
i0.ɵɵtext(15);
|
|
2085
2311
|
i0.ɵɵelementEnd()();
|
|
2086
|
-
i0.ɵɵelementStart(16, "div",
|
|
2312
|
+
i0.ɵɵelementStart(16, "div", 321)(17, "span", 322);
|
|
2087
2313
|
i0.ɵɵtext(18, "TypeScript Type");
|
|
2088
2314
|
i0.ɵɵelementEnd();
|
|
2089
|
-
i0.ɵɵelementStart(19, "span",
|
|
2315
|
+
i0.ɵɵelementStart(19, "span", 323);
|
|
2090
2316
|
i0.ɵɵtext(20);
|
|
2091
2317
|
i0.ɵɵelementEnd()();
|
|
2092
|
-
i0.ɵɵelementStart(21, "div",
|
|
2318
|
+
i0.ɵɵelementStart(21, "div", 321)(22, "span", 322);
|
|
2093
2319
|
i0.ɵɵtext(23, "Nullable");
|
|
2094
2320
|
i0.ɵɵelementEnd();
|
|
2095
|
-
i0.ɵɵelementStart(24, "span",
|
|
2321
|
+
i0.ɵɵelementStart(24, "span", 324);
|
|
2096
2322
|
i0.ɵɵtext(25);
|
|
2097
2323
|
i0.ɵɵelementEnd()();
|
|
2098
|
-
i0.ɵɵconditionalCreate(26,
|
|
2324
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_26_Template, 5, 1, "div", 321);
|
|
2099
2325
|
i0.ɵɵelementEnd()();
|
|
2100
|
-
i0.ɵɵconditionalCreate(27,
|
|
2101
|
-
i0.ɵɵconditionalCreate(28,
|
|
2102
|
-
i0.ɵɵconditionalCreate(29,
|
|
2103
|
-
i0.ɵɵelementStart(30, "div",
|
|
2326
|
+
i0.ɵɵconditionalCreate(27, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_27_Template, 16, 1, "div", 325);
|
|
2327
|
+
i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_28_Template, 15, 2, "div", 317);
|
|
2328
|
+
i0.ɵɵconditionalCreate(29, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_29_Template, 14, 1, "div", 317);
|
|
2329
|
+
i0.ɵɵelementStart(30, "div", 317)(31, "h5");
|
|
2104
2330
|
i0.ɵɵtext(32, "API Settings");
|
|
2105
2331
|
i0.ɵɵelementEnd();
|
|
2106
|
-
i0.ɵɵelementStart(33, "div",
|
|
2332
|
+
i0.ɵɵelementStart(33, "div", 320)(34, "div", 321)(35, "span", 322);
|
|
2107
2333
|
i0.ɵɵtext(36, "Allow Update");
|
|
2108
2334
|
i0.ɵɵelementEnd();
|
|
2109
|
-
i0.ɵɵelementStart(37, "span",
|
|
2335
|
+
i0.ɵɵelementStart(37, "span", 324);
|
|
2110
2336
|
i0.ɵɵtext(38);
|
|
2111
2337
|
i0.ɵɵelementEnd()();
|
|
2112
|
-
i0.ɵɵelementStart(39, "div",
|
|
2338
|
+
i0.ɵɵelementStart(39, "div", 321)(40, "span", 322);
|
|
2113
2339
|
i0.ɵɵtext(41, "Include in Search");
|
|
2114
2340
|
i0.ɵɵelementEnd();
|
|
2115
|
-
i0.ɵɵelementStart(42, "span",
|
|
2341
|
+
i0.ɵɵelementStart(42, "span", 324);
|
|
2116
2342
|
i0.ɵɵtext(43);
|
|
2117
2343
|
i0.ɵɵelementEnd()();
|
|
2118
|
-
i0.ɵɵelementStart(44, "div",
|
|
2344
|
+
i0.ɵɵelementStart(44, "div", 321)(45, "span", 322);
|
|
2119
2345
|
i0.ɵɵtext(46, "Full-Text Search");
|
|
2120
2346
|
i0.ɵɵelementEnd();
|
|
2121
|
-
i0.ɵɵelementStart(47, "span",
|
|
2347
|
+
i0.ɵɵelementStart(47, "span", 324);
|
|
2122
2348
|
i0.ɵɵtext(48);
|
|
2123
2349
|
i0.ɵɵelementEnd()()()();
|
|
2124
|
-
i0.ɵɵelementStart(49, "div",
|
|
2350
|
+
i0.ɵɵelementStart(49, "div", 317)(50, "h5");
|
|
2125
2351
|
i0.ɵɵtext(51, "Form Settings");
|
|
2126
2352
|
i0.ɵɵelementEnd();
|
|
2127
|
-
i0.ɵɵelementStart(52, "div",
|
|
2353
|
+
i0.ɵɵelementStart(52, "div", 320)(53, "div", 321)(54, "span", 322);
|
|
2128
2354
|
i0.ɵɵtext(55, "Include in Form");
|
|
2129
2355
|
i0.ɵɵelementEnd();
|
|
2130
|
-
i0.ɵɵelementStart(56, "span",
|
|
2356
|
+
i0.ɵɵelementStart(56, "span", 324);
|
|
2131
2357
|
i0.ɵɵtext(57);
|
|
2132
2358
|
i0.ɵɵelementEnd()();
|
|
2133
|
-
i0.ɵɵelementStart(58, "div",
|
|
2359
|
+
i0.ɵɵelementStart(58, "div", 321)(59, "span", 322);
|
|
2134
2360
|
i0.ɵɵtext(60, "Section");
|
|
2135
2361
|
i0.ɵɵelementEnd();
|
|
2136
|
-
i0.ɵɵelementStart(61, "span",
|
|
2362
|
+
i0.ɵɵelementStart(61, "span", 324);
|
|
2137
2363
|
i0.ɵɵtext(62);
|
|
2138
2364
|
i0.ɵɵelementEnd()();
|
|
2139
|
-
i0.ɵɵconditionalCreate(63,
|
|
2140
|
-
i0.ɵɵelementStart(64, "div",
|
|
2365
|
+
i0.ɵɵconditionalCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_63_Template, 5, 1, "div", 321);
|
|
2366
|
+
i0.ɵɵelementStart(64, "div", 321)(65, "span", 322);
|
|
2141
2367
|
i0.ɵɵtext(66, "Sequence");
|
|
2142
2368
|
i0.ɵɵelementEnd();
|
|
2143
|
-
i0.ɵɵelementStart(67, "span",
|
|
2369
|
+
i0.ɵɵelementStart(67, "span", 324);
|
|
2144
2370
|
i0.ɵɵtext(68);
|
|
2145
2371
|
i0.ɵɵelementEnd()()()();
|
|
2146
|
-
i0.ɵɵconditionalCreate(69,
|
|
2372
|
+
i0.ɵɵconditionalCreate(69, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Conditional_69_Template, 6, 0, "div", 317);
|
|
2147
2373
|
i0.ɵɵelementEnd();
|
|
2148
2374
|
} if (rf & 2) {
|
|
2149
2375
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -2184,50 +2410,50 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Template(rf,
|
|
|
2184
2410
|
i0.ɵɵadvance();
|
|
2185
2411
|
i0.ɵɵconditional(ctx_r2.selectedField.EntityFieldValues.length > 0 ? 69 : -1);
|
|
2186
2412
|
} }
|
|
2187
|
-
function
|
|
2188
|
-
i0.ɵɵelementStart(0, "div",
|
|
2413
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_67_Template(rf, ctx) { if (rf & 1) {
|
|
2414
|
+
i0.ɵɵelementStart(0, "div", 41)(1, "div", 317)(2, "h4");
|
|
2189
2415
|
i0.ɵɵtext(3);
|
|
2190
2416
|
i0.ɵɵelementEnd()();
|
|
2191
|
-
i0.ɵɵelementStart(4, "div",
|
|
2417
|
+
i0.ɵɵelementStart(4, "div", 317)(5, "h5");
|
|
2192
2418
|
i0.ɵɵtext(6, "Connection");
|
|
2193
2419
|
i0.ɵɵelementEnd();
|
|
2194
|
-
i0.ɵɵelementStart(7, "div",
|
|
2420
|
+
i0.ɵɵelementStart(7, "div", 320)(8, "div", 321)(9, "span", 322);
|
|
2195
2421
|
i0.ɵɵtext(10, "From Entity");
|
|
2196
2422
|
i0.ɵɵelementEnd();
|
|
2197
|
-
i0.ɵɵelementStart(11, "span",
|
|
2423
|
+
i0.ɵɵelementStart(11, "span", 324);
|
|
2198
2424
|
i0.ɵɵtext(12);
|
|
2199
2425
|
i0.ɵɵelementEnd()();
|
|
2200
|
-
i0.ɵɵelementStart(13, "div",
|
|
2426
|
+
i0.ɵɵelementStart(13, "div", 321)(14, "span", 322);
|
|
2201
2427
|
i0.ɵɵtext(15, "Join Field");
|
|
2202
2428
|
i0.ɵɵelementEnd();
|
|
2203
|
-
i0.ɵɵelementStart(16, "span",
|
|
2429
|
+
i0.ɵɵelementStart(16, "span", 323);
|
|
2204
2430
|
i0.ɵɵtext(17);
|
|
2205
2431
|
i0.ɵɵelementEnd()();
|
|
2206
|
-
i0.ɵɵelementStart(18, "div",
|
|
2432
|
+
i0.ɵɵelementStart(18, "div", 321)(19, "span", 322);
|
|
2207
2433
|
i0.ɵɵtext(20, "Type");
|
|
2208
2434
|
i0.ɵɵelementEnd();
|
|
2209
|
-
i0.ɵɵelementStart(21, "span",
|
|
2435
|
+
i0.ɵɵelementStart(21, "span", 324);
|
|
2210
2436
|
i0.ɵɵtext(22);
|
|
2211
2437
|
i0.ɵɵelementEnd()()()();
|
|
2212
|
-
i0.ɵɵelementStart(23, "div",
|
|
2438
|
+
i0.ɵɵelementStart(23, "div", 317)(24, "h5");
|
|
2213
2439
|
i0.ɵɵtext(25, "Display Settings");
|
|
2214
2440
|
i0.ɵɵelementEnd();
|
|
2215
|
-
i0.ɵɵelementStart(26, "div",
|
|
2441
|
+
i0.ɵɵelementStart(26, "div", 320)(27, "div", 321)(28, "span", 322);
|
|
2216
2442
|
i0.ɵɵtext(29, "Display in Form");
|
|
2217
2443
|
i0.ɵɵelementEnd();
|
|
2218
|
-
i0.ɵɵelementStart(30, "span",
|
|
2444
|
+
i0.ɵɵelementStart(30, "span", 324);
|
|
2219
2445
|
i0.ɵɵtext(31);
|
|
2220
2446
|
i0.ɵɵelementEnd()();
|
|
2221
|
-
i0.ɵɵelementStart(32, "div",
|
|
2447
|
+
i0.ɵɵelementStart(32, "div", 321)(33, "span", 322);
|
|
2222
2448
|
i0.ɵɵtext(34, "Location");
|
|
2223
2449
|
i0.ɵɵelementEnd();
|
|
2224
|
-
i0.ɵɵelementStart(35, "span",
|
|
2450
|
+
i0.ɵɵelementStart(35, "span", 324);
|
|
2225
2451
|
i0.ɵɵtext(36);
|
|
2226
2452
|
i0.ɵɵelementEnd()();
|
|
2227
|
-
i0.ɵɵelementStart(37, "div",
|
|
2453
|
+
i0.ɵɵelementStart(37, "div", 321)(38, "span", 322);
|
|
2228
2454
|
i0.ɵɵtext(39, "Bundle in API");
|
|
2229
2455
|
i0.ɵɵelementEnd();
|
|
2230
|
-
i0.ɵɵelementStart(40, "span",
|
|
2456
|
+
i0.ɵɵelementStart(40, "span", 324);
|
|
2231
2457
|
i0.ɵɵtext(41);
|
|
2232
2458
|
i0.ɵɵelementEnd()()()()();
|
|
2233
2459
|
} if (rf & 2) {
|
|
@@ -2313,21 +2539,22 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
2313
2539
|
i0.ɵɵconditionalCreate(51, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template, 111, 23, "section", 28);
|
|
2314
2540
|
i0.ɵɵconditionalCreate(52, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template, 15, 8, "section", 29);
|
|
2315
2541
|
i0.ɵɵconditionalCreate(53, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template, 13, 7, "section", 30);
|
|
2316
|
-
i0.ɵɵconditionalCreate(54, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template,
|
|
2317
|
-
i0.ɵɵconditionalCreate(55, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template,
|
|
2318
|
-
i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template,
|
|
2319
|
-
i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template,
|
|
2320
|
-
i0.ɵɵconditionalCreate(58, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template,
|
|
2321
|
-
i0.ɵɵ
|
|
2322
|
-
i0.ɵɵ
|
|
2323
|
-
i0.ɵɵ
|
|
2542
|
+
i0.ɵɵconditionalCreate(54, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template, 4, 1, "section", 31);
|
|
2543
|
+
i0.ɵɵconditionalCreate(55, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template, 55, 22, "section", 32);
|
|
2544
|
+
i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template, 3, 1, "section", 33);
|
|
2545
|
+
i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template, 57, 20, "section", 34);
|
|
2546
|
+
i0.ɵɵconditionalCreate(58, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template, 18, 7, "section", 35);
|
|
2547
|
+
i0.ɵɵconditionalCreate(59, MJEntityFormComponentExtended_Conditional_0_Conditional_59_Template, 27, 8, "section", 36);
|
|
2548
|
+
i0.ɵɵelementEnd();
|
|
2549
|
+
i0.ɵɵelementStart(60, "aside", 37)(61, "div", 38);
|
|
2324
2550
|
i0.ɵɵconditionalCreate(62, MJEntityFormComponentExtended_Conditional_0_Conditional_62_Template, 2, 0, "h3");
|
|
2325
|
-
i0.ɵɵ
|
|
2326
|
-
i0.ɵɵ
|
|
2327
|
-
i0.ɵɵ
|
|
2551
|
+
i0.ɵɵconditionalCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_63_Template, 2, 0, "h3");
|
|
2552
|
+
i0.ɵɵelementStart(64, "button", 39);
|
|
2553
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Template_button_click_64_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDetailPanel()); });
|
|
2554
|
+
i0.ɵɵelement(65, "i", 40);
|
|
2328
2555
|
i0.ɵɵelementEnd()();
|
|
2329
|
-
i0.ɵɵconditionalCreate(
|
|
2330
|
-
i0.ɵɵconditionalCreate(
|
|
2556
|
+
i0.ɵɵconditionalCreate(66, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Template, 70, 18, "div", 41);
|
|
2557
|
+
i0.ɵɵconditionalCreate(67, MJEntityFormComponentExtended_Conditional_0_Conditional_67_Template, 42, 7, "div", 41);
|
|
2331
2558
|
i0.ɵɵelementEnd()()();
|
|
2332
2559
|
} if (rf & 2) {
|
|
2333
2560
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -2374,34 +2601,36 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
2374
2601
|
i0.ɵɵadvance();
|
|
2375
2602
|
i0.ɵɵconditional(ctx_r2.activeSection === "relationships" ? 53 : -1);
|
|
2376
2603
|
i0.ɵɵadvance();
|
|
2377
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "
|
|
2604
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "organicKeys" ? 54 : -1);
|
|
2605
|
+
i0.ɵɵadvance();
|
|
2606
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "permissions" ? 55 : -1);
|
|
2378
2607
|
i0.ɵɵadvance();
|
|
2379
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "data" ?
|
|
2608
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "data" ? 56 : -1);
|
|
2380
2609
|
i0.ɵɵadvance();
|
|
2381
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "lineage" ?
|
|
2610
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "lineage" ? 57 : -1);
|
|
2382
2611
|
i0.ɵɵadvance();
|
|
2383
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "history" ?
|
|
2612
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "history" ? 58 : -1);
|
|
2384
2613
|
i0.ɵɵadvance();
|
|
2385
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "settings" ?
|
|
2614
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "settings" ? 59 : -1);
|
|
2386
2615
|
i0.ɵɵadvance();
|
|
2387
2616
|
i0.ɵɵclassProp("open", ctx_r2.detailPanelOpen);
|
|
2388
2617
|
i0.ɵɵadvance(2);
|
|
2389
|
-
i0.ɵɵconditional(ctx_r2.selectedField ?
|
|
2618
|
+
i0.ɵɵconditional(ctx_r2.selectedField ? 62 : -1);
|
|
2390
2619
|
i0.ɵɵadvance();
|
|
2391
|
-
i0.ɵɵconditional(ctx_r2.selectedRelationship ?
|
|
2620
|
+
i0.ɵɵconditional(ctx_r2.selectedRelationship ? 63 : -1);
|
|
2392
2621
|
i0.ɵɵadvance(3);
|
|
2393
|
-
i0.ɵɵconditional(ctx_r2.selectedField ?
|
|
2622
|
+
i0.ɵɵconditional(ctx_r2.selectedField ? 66 : -1);
|
|
2394
2623
|
i0.ɵɵadvance();
|
|
2395
|
-
i0.ɵɵconditional(ctx_r2.selectedRelationship ?
|
|
2624
|
+
i0.ɵɵconditional(ctx_r2.selectedRelationship ? 67 : -1);
|
|
2396
2625
|
} }
|
|
2397
2626
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
2398
|
-
i0.ɵɵelementStart(0, "div",
|
|
2399
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
2627
|
+
i0.ɵɵelementStart(0, "div", 332);
|
|
2628
|
+
i0.ɵɵelement(1, "mj-loading", 335);
|
|
2400
2629
|
i0.ɵɵelementEnd();
|
|
2401
2630
|
} }
|
|
2402
2631
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2403
|
-
i0.ɵɵelementStart(0, "div",
|
|
2404
|
-
i0.ɵɵelement(1, "i",
|
|
2632
|
+
i0.ɵɵelementStart(0, "div", 333);
|
|
2633
|
+
i0.ɵɵelement(1, "i", 336);
|
|
2405
2634
|
i0.ɵɵelementStart(2, "p");
|
|
2406
2635
|
i0.ɵɵtext(3);
|
|
2407
2636
|
i0.ɵɵelementEnd()();
|
|
@@ -2411,16 +2640,16 @@ function MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template(rf,
|
|
|
2411
2640
|
i0.ɵɵtextInterpolate(ctx_r2.explorerError);
|
|
2412
2641
|
} }
|
|
2413
2642
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
2414
|
-
i0.ɵɵelementStart(0, "div",
|
|
2643
|
+
i0.ɵɵelementStart(0, "div", 334);
|
|
2415
2644
|
i0.ɵɵelement(1, "i", 22);
|
|
2416
2645
|
i0.ɵɵelementStart(2, "p");
|
|
2417
2646
|
i0.ɵɵtext(3, "Entity metadata not available");
|
|
2418
2647
|
i0.ɵɵelementEnd()();
|
|
2419
2648
|
} }
|
|
2420
2649
|
function MJEntityFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2421
|
-
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div",
|
|
2422
|
-
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 4, 1, "div",
|
|
2423
|
-
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 4, 0, "div",
|
|
2650
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div", 332);
|
|
2651
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 4, 1, "div", 333);
|
|
2652
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 4, 0, "div", 334);
|
|
2424
2653
|
} if (rf & 2) {
|
|
2425
2654
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
2426
2655
|
i0.ɵɵconditional(ctx_r2.isExplorerLoading ? 0 : -1);
|
|
@@ -2462,6 +2691,7 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2462
2691
|
{ id: 'overview', icon: 'fa-solid fa-house', label: 'Overview' },
|
|
2463
2692
|
{ id: 'fields', icon: 'fa-solid fa-table-cells', label: 'Fields' },
|
|
2464
2693
|
{ id: 'relationships', icon: 'fa-solid fa-diagram-project', label: 'Relations' },
|
|
2694
|
+
{ id: 'organicKeys', icon: 'fa-solid fa-fingerprint', label: 'Organic Keys' },
|
|
2465
2695
|
{ id: 'permissions', icon: 'fa-solid fa-lock', label: 'Security' },
|
|
2466
2696
|
{ id: 'data', icon: 'fa-solid fa-table-list', label: 'Data' },
|
|
2467
2697
|
{ id: 'lineage', icon: 'fa-solid fa-code-branch', label: 'Lineage' },
|
|
@@ -2510,6 +2740,10 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2510
2740
|
this.groupedOutgoingRelationships = [];
|
|
2511
2741
|
/** Grouped incoming relationships by source entity */
|
|
2512
2742
|
this.groupedIncomingRelationships = [];
|
|
2743
|
+
/** Outgoing organic keys (defined on THIS entity) */
|
|
2744
|
+
this.organicKeysOutgoing = [];
|
|
2745
|
+
/** Incoming organic keys (other entities targeting THIS entity) */
|
|
2746
|
+
this.organicKeysIncoming = [];
|
|
2513
2747
|
/** Whether detail panel is open */
|
|
2514
2748
|
this.detailPanelOpen = false;
|
|
2515
2749
|
/** Currently selected field for detail panel */
|
|
@@ -2551,6 +2785,7 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2551
2785
|
this.buildFieldGroups();
|
|
2552
2786
|
this.buildISAFieldGroups();
|
|
2553
2787
|
this.buildRelationships();
|
|
2788
|
+
this.buildOrganicKeys();
|
|
2554
2789
|
this.updateNavBadges();
|
|
2555
2790
|
// Load row count asynchronously (don't block UI)
|
|
2556
2791
|
this.loadRowCountAsync();
|
|
@@ -2856,6 +3091,54 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2856
3091
|
this.groupedIncomingRelationships = Array.from(incomingMap.values())
|
|
2857
3092
|
.sort((a, b) => a.entityName.localeCompare(b.entityName));
|
|
2858
3093
|
}
|
|
3094
|
+
buildOrganicKeys() {
|
|
3095
|
+
if (!this.entity)
|
|
3096
|
+
return;
|
|
3097
|
+
// Outgoing: organic keys defined ON this entity
|
|
3098
|
+
this.organicKeysOutgoing = this.entity.OrganicKeys.map(ok => ({
|
|
3099
|
+
OrganicKey: ok,
|
|
3100
|
+
RelatedEntities: ok.RelatedEntities.map(re => {
|
|
3101
|
+
const relEntity = this.allEntities.find(e => UUIDsEqual(e.ID, re.RelatedEntityID));
|
|
3102
|
+
return {
|
|
3103
|
+
Info: re,
|
|
3104
|
+
EntityName: re.RelatedEntity || relEntity?.Name || 'Unknown',
|
|
3105
|
+
EntityIcon: relEntity?.Icon || 'fa-solid fa-table',
|
|
3106
|
+
};
|
|
3107
|
+
}),
|
|
3108
|
+
}));
|
|
3109
|
+
// Incoming: organic keys on OTHER entities that reference THIS entity
|
|
3110
|
+
this.organicKeysIncoming = [];
|
|
3111
|
+
for (const otherEntity of this.allEntities) {
|
|
3112
|
+
if (UUIDsEqual(otherEntity.ID, this.entity.ID))
|
|
3113
|
+
continue;
|
|
3114
|
+
for (const ok of otherEntity.OrganicKeys) {
|
|
3115
|
+
for (const re of ok.RelatedEntities) {
|
|
3116
|
+
if (UUIDsEqual(re.RelatedEntityID, this.entity.ID)) {
|
|
3117
|
+
this.organicKeysIncoming.push({
|
|
3118
|
+
SourceEntityID: otherEntity.ID,
|
|
3119
|
+
SourceEntityName: otherEntity.Name,
|
|
3120
|
+
SourceEntityIcon: otherEntity.Icon || 'fa-solid fa-table',
|
|
3121
|
+
OrganicKey: ok,
|
|
3122
|
+
RelatedEntityConfig: re,
|
|
3123
|
+
MatchType: re.IsTransitiveMatch ? 'Transitive' : 'Direct',
|
|
3124
|
+
});
|
|
3125
|
+
}
|
|
3126
|
+
}
|
|
3127
|
+
}
|
|
3128
|
+
}
|
|
3129
|
+
}
|
|
3130
|
+
/**
|
|
3131
|
+
* Navigate to the Entity admin form for a given entity ID.
|
|
3132
|
+
*/
|
|
3133
|
+
NavigateToEntityByID(entityID) {
|
|
3134
|
+
const pkey = new CompositeKey([{ FieldName: 'ID', Value: entityID }]);
|
|
3135
|
+
this.sharedService.OpenEntityRecord('MJ: Entities', pkey);
|
|
3136
|
+
}
|
|
3137
|
+
/** Total organic key connection count (outgoing targets + incoming sources) */
|
|
3138
|
+
get OrganicKeyTotalCount() {
|
|
3139
|
+
const outCount = this.organicKeysOutgoing.reduce((sum, ok) => sum + ok.RelatedEntities.length, 0);
|
|
3140
|
+
return outCount + this.organicKeysIncoming.length;
|
|
3141
|
+
}
|
|
2859
3142
|
updateNavBadges() {
|
|
2860
3143
|
if (!this.entity)
|
|
2861
3144
|
return;
|
|
@@ -2865,6 +3148,8 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2865
3148
|
return { ...item, badge: this.stats.fieldCount };
|
|
2866
3149
|
case 'relationships':
|
|
2867
3150
|
return { ...item, badge: this.stats.relationshipCount };
|
|
3151
|
+
case 'organicKeys':
|
|
3152
|
+
return { ...item, badge: this.OrganicKeyTotalCount > 0 ? this.OrganicKeyTotalCount : undefined };
|
|
2868
3153
|
case 'permissions':
|
|
2869
3154
|
return { ...item, badge: this.stats.permissionCount };
|
|
2870
3155
|
default:
|
|
@@ -3288,11 +3573,11 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
3288
3573
|
}
|
|
3289
3574
|
}
|
|
3290
3575
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJEntityFormComponentExtended_BaseFactory; return function MJEntityFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJEntityFormComponentExtended_BaseFactory || (ɵMJEntityFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJEntityFormComponentExtended)))(__ngFactoryType__ || MJEntityFormComponentExtended); }; })(); }
|
|
3291
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJEntityFormComponentExtended, selectors: [["mj-entity-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "entity-explorer"], [1, "explorer-header"], [1, "entity-identity"], [1, "entity-icon"], [1, "entity-info"], [1, "entity-title-row"], [1, "entity-name"], [1, "status-badge", 3, "ngClass"], [1, "status-badge", "isa-badge", "virtual"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type"], [1, "isa-breadcrumb"], [1, "entity-subtitle"], [1, "schema-table"], [1, "separator"], [1, "entity-description", 3, "title"], [1, "header-stats"], [1, "stat-item", 3, "click"], [1, "fa-solid", "fa-table-columns"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-shield-halved"], [1, "fa-solid", "fa-database"], [1, "stat-value", "loading"], [1, "explorer-body"], [1, "nav-rail"], [1, "nav-item", 3, "active", "title"], [1, "main-canvas"], [1, "section", "overview-section"], [1, "section", "fields-section"], [1, "section", "relationships-section"], [1, "section", "permissions-section"], [1, "section", "data-section"], [1, "section", "lineage-section"], [1, "section", "history-section"], [1, "section", "settings-section"], [1, "detail-panel"], [1, "panel-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "panel-content"], [1, "fa-solid", "fa-eye"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type", 3, "click"], [1, "fa-solid", "fa-arrow-up"], [1, "status-badge", "isa-badge", "parent-type"], [1, "fa-solid", "fa-sitemap"], ["title", "Multiple child types can coexist for a single parent record", 1, "status-badge", "isa-badge", "overlapping"], [1, "fa-solid", "fa-clone"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "nav-item", 3, "click", "title"], [1, "nav-label"], [1, "nav-badge"], [1, "section-content"], [1, "stats-cards"], ["title", "View all fields", 1, "stat-card", "clickable", 3, "click"], [1, "stat-card-header"], [1, "fa-solid", "fa-table-cells"], [1, "stat-card-body"], [1, "stat-main"], [1, "stat-details"], [1, "stat-card-action"], [1, "fa-solid", "fa-arrow-right"], ["title", "View relationships", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-diagram-project"], ["title", "View security settings", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-lock"], [1, "stat-card"], [1, "info-panel", "capabilities-panel"], [1, "panel-title"], [1, "fa-solid", "fa-bolt"], [1, "capability-tags"], [1, "capability-tag"], [1, "capability-tag", "disabled"], [1, "info-panel", "isa-panel"], [1, "info-panel", "database-panel"], [1, "fa-solid", "fa-server"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "info-panel", "codegen-panel"], [1, "fa-solid", "fa-code"], [1, "info-value", "code"], [1, "fa-solid", "fa-check"], [1, "isa-info-row", "virtual-info"], [1, "isa-children"], [1, "code"], [1, "isa-chain"], [1, "isa-chain-label"], [1, "isa-chain-nodes"], [1, "isa-node", "current"], [1, "isa-inherited-fields"], [1, "isa-field-inspector"], [1, "isa-siblings"], [1, "fa-solid", "fa-arrow-right", "isa-arrow"], [1, "isa-node", "parent", "clickable", 3, "click", "title"], [1, "isa-chain-label", "clickable", 3, "click"], [1, "fa-solid", 3, "ngClass"], [1, "isa-inspector-groups"], [1, "isa-inspector-group", 3, "own", "inherited"], [1, "isa-inspector-group"], [1, "isa-inspector-header"], [1, "isa-inspector-entity"], [1, "fa-solid", "fa-circle", 2, "color", "var(--mj-brand-primary)", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "var(--mj-brand-primary)", "font-size", "10px"], [1, "isa-inspector-count"], [1, "isa-inspector-fields"], [1, "isa-inspector-field", 3, "title"], [1, "isa-inspector-type"], [1, "isa-child-list"], [1, "isa-sibling-chip", "clickable", 3, "title"], [1, "isa-sibling-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrows-left-right"], [1, "isa-child-chip", "clickable", 3, "title"], [1, "isa-child-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "isa-child-count"], [1, "section-header"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search fields...", 3, "ngModelChange", "ngModel"], [1, "header-controls"], [1, "view-mode-toggle"], ["title", "Group by category", 1, "toggle-btn", 3, "click"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "expand-collapse-controls"], [1, "section-content", "fields-content"], [1, "field-groups"], [1, "fields-list-view"], ["title", "Expand all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], [1, "field-group", 3, "expanded"], [1, "field-group"], [1, "group-header", 3, "click"], [1, "expand-icon", "fa-solid", 3, "ngClass"], [1, "group-icon"], [1, "group-label"], [1, "group-count"], [1, "group-content"], [1, "field-item", 3, "selected"], [1, "field-item", 3, "click"], [1, "field-icon"], [1, "field-info"], [1, "field-name"], [1, "field-db-name"], [1, "field-meta"], [1, "field-type"], [1, "field-nullable"], [1, "field-related"], [1, "field-badges"], ["title", "Primary Key", 1, "badge", "pk"], ["title", "Foreign Key", 1, "badge", "fk"], ["title", "Encrypted", 1, "badge", "encrypted"], [1, "badge", "inherited", 3, "title"], [1, "field-related", 3, "click"], [1, "list-header"], [1, "list-col", "col-seq", "sortable", 3, "click"], [1, "sort-icon", "fa-solid", 3, "ngClass"], [1, "list-col", "col-name", "sortable", 3, "click"], [1, "list-col", "col-display-name", "sortable", 3, "click"], [1, "list-col", "col-type", "sortable", 3, "click"], [1, "list-col", "col-length", "sortable", 3, "click"], [1, "list-col", "col-nullable", "sortable", 3, "click"], [1, "list-col", "col-flags"], [1, "list-col", "col-desc", "sortable", 3, "click"], [1, "list-body"], [1, "list-row", 3, "selected"], [1, "list-empty"], [1, "list-row", 3, "click"], [1, "list-col", "col-seq"], [1, "seq-num"], [1, "list-col", "col-name"], [1, "field-type-icon"], [1, "field-name-text"], [1, "list-col", "col-display-name"], [1, "display-name-text"], [1, "list-col", "col-type"], [1, "type-tag"], [1, "list-col", "col-length"], [1, "length-value"], [1, "length-value", "muted"], [1, "list-col", "col-nullable"], [1, "required-indicator"], [1, "flag-badges"], ["title", "Primary Key", 1, "flag-badge", "pk"], ["title", "Foreign Key", 1, "flag-badge", "fk"], ["title", "Encrypted", 1, "flag-badge", "encrypted"], [1, "flag-badge", "inherited", 3, "title"], [1, "list-col", "col-desc"], [1, "desc-text", 3, "title"], [1, "fa-solid", "fa-key"], [1, "view-toggle"], [1, "toggle-btn", 3, "click"], [1, "depth-selector"], [1, "relationships-graph"], [1, "relationships-list"], [1, "depth-label"], [1, "depth-buttons"], [1, "depth-btn", 3, "active", "title"], [1, "depth-btn", 3, "click", "title"], [3, "stateChange", "openRecord", "focusEntities", "showFilterPanel", "showHeader", "depth"], [1, "relationship-group"], [1, "relationship-group-title"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "relationship-items", "grouped"], [1, "relationship-item-grouped"], [1, "empty-state"], [1, "fa-solid", "fa-arrow-right-to-bracket"], [1, "rel-header"], [1, "rel-icon", "outgoing"], [1, "rel-entity-name"], [1, "rel-fields-chips"], [1, "field-chip", "outgoing", 3, "title"], [1, "field-chip", "outgoing", 3, "click", "title"], [1, "rel-icon", "incoming"], [1, "fa-solid", "fa-arrow-left"], [1, "field-chip", "incoming", 3, "title"], ["title", "Bundled in API", 1, "fa-solid", "fa-box", "bundle-icon"], [1, "permissions-matrix"], [1, "matrix-table"], [1, "center"], [1, "api-capabilities"], [1, "fa-solid", "fa-plug"], [1, "capability-grid"], [1, "capability-item"], [1, "role-name"], [1, "permission-icon", 3, "ngClass"], [1, "rls-info"], ["title", "Read RLS", 1, "rls-badge"], ["title", "Create RLS", 1, "rls-badge"], ["title", "Update RLS", 1, "rls-badge"], ["title", "Delete RLS", 1, "rls-badge"], [1, "no-rls"], [1, "data-viewer-container"], [3, "entity", "showGridToolbar"], [3, "recordOpened", "addRequested", "entity", "showGridToolbar"], [1, "lineage-diagram"], [1, "lineage-stage", "sources"], [1, "lineage-items"], [1, "lineage-item"], [1, "fa-solid", "fa-keyboard"], [1, "lineage-arrow"], [1, "lineage-stage", "entity-node"], [1, "entity-box"], [1, "lineage-stage", "sinks"], [1, "tracking-config"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "config-grid"], [1, "config-item"], [1, "config-label"], [1, "config-value"], [1, "history-config"], [1, "config-status"], [1, "config-text"], [1, "history-info"], [1, "info-card"], [1, "fa-solid", "fa-info-circle"], [1, "audit-fields-list"], [1, "settings-panel", "isa-settings-panel"], [1, "settings-panel"], [1, "fa-solid", "fa-sliders"], [1, "settings-list"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fts-config"], [1, "fa-solid", "fa-box"], [1, "config-row"], ["title", "Navigate to parent entity", 1, "link"], [1, "muted"], [1, "fa-solid", "fa-circle-check", 2, "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-circle-minus", 2, "color", "var(--mj-text-muted)"], ["title", "Navigate to parent entity", 1, "link", 3, "click"], [1, "link", 3, "click"], [1, "fa-solid", "fa-circle-check", 2, "color", "#059669"], [1, "setting-item"], [1, "setting-name"], [1, "setting-value-json"], [1, "setting-value"], [1, "setting-comment"], ["language", "json", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], [1, "config-value", "enabled"], [1, "fa-solid", "fa-circle-check"], [1, "config-value", "code"], [1, "detail-section"], [1, "detail-field-db-name"], [1, "field-description"], [1, "detail-grid"], [1, "detail-item"], [1, "label"], [1, "value", "code"], [1, "value"], [1, "detail-section", "isa-source-section"], ["title", "Navigate to source entity", 1, "value", "link", 3, "click"], [1, "value", "link", 3, "click"], [1, "value-list"], [1, "value-item"], [1, "value-code"], [1, "value-display"], [1, "explorer-loading"], [1, "explorer-error"], [1, "explorer-empty"], ["text", "Loading entity..."], [1, "fa-solid", "fa-exclamation-triangle"]], template: function MJEntityFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3292
|
-
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Template,
|
|
3576
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MJEntityFormComponentExtended, selectors: [["mj-entity-form"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, "entity-explorer"], [1, "explorer-header"], [1, "entity-identity"], [1, "entity-icon"], [1, "entity-info"], [1, "entity-title-row"], [1, "entity-name"], [1, "status-badge", 3, "ngClass"], [1, "status-badge", "isa-badge", "virtual"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type"], [1, "isa-breadcrumb"], [1, "entity-subtitle"], [1, "schema-table"], [1, "separator"], [1, "entity-description", 3, "title"], [1, "header-stats"], [1, "stat-item", 3, "click"], [1, "fa-solid", "fa-table-columns"], [1, "stat-value"], [1, "stat-label"], [1, "fa-solid", "fa-link"], [1, "fa-solid", "fa-shield-halved"], [1, "fa-solid", "fa-database"], [1, "stat-value", "loading"], [1, "explorer-body"], [1, "nav-rail"], [1, "nav-item", 3, "active", "title"], [1, "main-canvas"], [1, "section", "overview-section"], [1, "section", "fields-section"], [1, "section", "relationships-section"], [1, "section", "organic-keys-section"], [1, "section", "permissions-section"], [1, "section", "data-section"], [1, "section", "lineage-section"], [1, "section", "history-section"], [1, "section", "settings-section"], [1, "detail-panel"], [1, "panel-header"], [1, "close-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "panel-content"], [1, "fa-solid", "fa-eye"], ["title", "Click to navigate to parent entity", 1, "status-badge", "isa-badge", "child-type", 3, "click"], [1, "fa-solid", "fa-arrow-up"], [1, "status-badge", "isa-badge", "parent-type"], [1, "fa-solid", "fa-sitemap"], ["title", "Multiple child types can coexist for a single parent record", 1, "status-badge", "isa-badge", "overlapping"], [1, "fa-solid", "fa-clone"], [1, "fa-solid", "fa-layer-group"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "nav-item", 3, "click", "title"], [1, "nav-label"], [1, "nav-badge"], [1, "section-content"], [1, "stats-cards"], ["title", "View all fields", 1, "stat-card", "clickable", 3, "click"], [1, "stat-card-header"], [1, "fa-solid", "fa-table-cells"], [1, "stat-card-body"], [1, "stat-main"], [1, "stat-details"], [1, "stat-card-action"], [1, "fa-solid", "fa-arrow-right"], ["title", "View relationships", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-diagram-project"], ["title", "View security settings", 1, "stat-card", "clickable", 3, "click"], [1, "fa-solid", "fa-lock"], [1, "stat-card"], [1, "info-panel", "capabilities-panel"], [1, "panel-title"], [1, "fa-solid", "fa-bolt"], [1, "capability-tags"], [1, "capability-tag"], [1, "capability-tag", "disabled"], [1, "info-panel", "isa-panel"], [1, "info-panel", "database-panel"], [1, "fa-solid", "fa-server"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "info-panel", "codegen-panel"], [1, "fa-solid", "fa-code"], [1, "info-value", "code"], [1, "fa-solid", "fa-check"], [1, "isa-info-row", "virtual-info"], [1, "isa-children"], [1, "code"], [1, "isa-chain"], [1, "isa-chain-label"], [1, "isa-chain-nodes"], [1, "isa-node", "current"], [1, "isa-inherited-fields"], [1, "isa-field-inspector"], [1, "isa-siblings"], [1, "fa-solid", "fa-arrow-right", "isa-arrow"], [1, "isa-node", "parent", "clickable", 3, "click", "title"], [1, "isa-chain-label", "clickable", 3, "click"], [1, "fa-solid", 3, "ngClass"], [1, "isa-inspector-groups"], [1, "isa-inspector-group", 3, "own", "inherited"], [1, "isa-inspector-group"], [1, "isa-inspector-header"], [1, "isa-inspector-entity"], [1, "fa-solid", "fa-circle", 2, "color", "var(--mj-brand-primary)", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "var(--mj-brand-primary)", "font-size", "10px"], [1, "isa-inspector-count"], [1, "isa-inspector-fields"], [1, "isa-inspector-field", 3, "title"], [1, "isa-inspector-type"], [1, "isa-child-list"], [1, "isa-sibling-chip", "clickable", 3, "title"], [1, "isa-sibling-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrows-left-right"], [1, "isa-child-chip", "clickable", 3, "title"], [1, "isa-child-chip", "clickable", 3, "click", "title"], [1, "fa-solid", "fa-arrow-down"], [1, "isa-child-count"], [1, "section-header"], [1, "search-box"], [1, "fa-solid", "fa-search"], ["type", "text", "placeholder", "Search fields...", 3, "ngModelChange", "ngModel"], [1, "header-controls"], [1, "view-mode-toggle"], ["title", "Group by category", 1, "toggle-btn", 3, "click"], ["title", "List view", 1, "toggle-btn", 3, "click"], [1, "fa-solid", "fa-list"], [1, "expand-collapse-controls"], [1, "section-content", "fields-content"], [1, "field-groups"], [1, "fields-list-view"], ["title", "Expand all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-down"], ["title", "Collapse all", 1, "control-btn", 3, "click", "disabled"], [1, "fa-solid", "fa-angles-up"], [1, "field-group", 3, "expanded"], [1, "field-group"], [1, "group-header", 3, "click"], [1, "expand-icon", "fa-solid", 3, "ngClass"], [1, "group-icon"], [1, "group-label"], [1, "group-count"], [1, "group-content"], [1, "field-item", 3, "selected"], [1, "field-item", 3, "click"], [1, "field-icon"], [1, "field-info"], [1, "field-name"], [1, "field-db-name"], [1, "field-meta"], [1, "field-type"], [1, "field-nullable"], [1, "field-related"], [1, "field-badges"], ["title", "Primary Key", 1, "badge", "pk"], ["title", "Foreign Key", 1, "badge", "fk"], ["title", "Encrypted", 1, "badge", "encrypted"], [1, "badge", "inherited", 3, "title"], [1, "field-related", 3, "click"], [1, "list-header"], [1, "list-col", "col-seq", "sortable", 3, "click"], [1, "sort-icon", "fa-solid", 3, "ngClass"], [1, "list-col", "col-name", "sortable", 3, "click"], [1, "list-col", "col-display-name", "sortable", 3, "click"], [1, "list-col", "col-type", "sortable", 3, "click"], [1, "list-col", "col-length", "sortable", 3, "click"], [1, "list-col", "col-nullable", "sortable", 3, "click"], [1, "list-col", "col-flags"], [1, "list-col", "col-desc", "sortable", 3, "click"], [1, "list-body"], [1, "list-row", 3, "selected"], [1, "list-empty"], [1, "list-row", 3, "click"], [1, "list-col", "col-seq"], [1, "seq-num"], [1, "list-col", "col-name"], [1, "field-type-icon"], [1, "field-name-text"], [1, "list-col", "col-display-name"], [1, "display-name-text"], [1, "list-col", "col-type"], [1, "type-tag"], [1, "list-col", "col-length"], [1, "length-value"], [1, "length-value", "muted"], [1, "list-col", "col-nullable"], [1, "required-indicator"], [1, "flag-badges"], ["title", "Primary Key", 1, "flag-badge", "pk"], ["title", "Foreign Key", 1, "flag-badge", "fk"], ["title", "Encrypted", 1, "flag-badge", "encrypted"], [1, "flag-badge", "inherited", 3, "title"], [1, "list-col", "col-desc"], [1, "desc-text", 3, "title"], [1, "fa-solid", "fa-key"], [1, "view-toggle"], [1, "toggle-btn", 3, "click"], [1, "depth-selector"], [1, "relationships-graph"], [1, "relationships-list"], [1, "depth-label"], [1, "depth-buttons"], [1, "depth-btn", 3, "active", "title"], [1, "depth-btn", 3, "click", "title"], [3, "stateChange", "openRecord", "focusEntities", "showFilterPanel", "showHeader", "depth"], [1, "relationship-group"], [1, "relationship-group-title"], [1, "fa-solid", "fa-arrow-right-from-bracket"], [1, "relationship-items", "grouped"], [1, "relationship-item-grouped"], [1, "empty-state"], [1, "fa-solid", "fa-arrow-right-to-bracket"], [1, "rel-header"], [1, "rel-icon", "outgoing"], [1, "rel-entity-name"], [1, "rel-fields-chips"], [1, "field-chip", "outgoing", 3, "title"], [1, "field-chip", "outgoing", 3, "click", "title"], [1, "rel-icon", "incoming"], [1, "fa-solid", "fa-arrow-left"], [1, "field-chip", "incoming", 3, "title"], ["title", "Bundled in API", 1, "fa-solid", "fa-box", "bundle-icon"], [1, "empty-state-card"], [1, "fa-solid", "fa-fingerprint", "empty-state-icon"], [1, "organic-key-cards"], [1, "organic-key-card"], [1, "organic-key-card-header"], [1, "organic-key-name"], [1, "fa-solid", "fa-fingerprint", "organic-key-icon"], [1, "organic-key-badges"], [1, "organic-key-badge", "strategy"], [1, "organic-key-badge", "fields"], [1, "organic-key-description"], [1, "organic-key-targets"], [1, "organic-key-target", "clickable"], [1, "organic-key-target", "clickable", 3, "click"], [1, "target-main"], [1, "target-header"], [1, "target-entity-icon"], [1, "target-entity-name"], [1, "fa-solid", "fa-external-link-alt", "target-nav-icon"], [1, "target-match-detail"], [1, "match-type-badge", "direct"], [1, "match-fields"], [1, "match-type-badge", "transitive"], [1, "match-fields", 3, "title"], [1, "organic-key-card", "incoming", "clickable"], [1, "organic-key-card", "incoming", "clickable", 3, "click"], [1, "match-type-badge"], [1, "organic-key-detail-row"], [1, "detail-label"], [1, "detail-value"], [1, "permissions-matrix"], [1, "matrix-table"], [1, "center"], [1, "api-capabilities"], [1, "fa-solid", "fa-plug"], [1, "capability-grid"], [1, "capability-item"], [1, "role-name"], [1, "permission-icon", 3, "ngClass"], [1, "rls-info"], ["title", "Read RLS", 1, "rls-badge"], ["title", "Create RLS", 1, "rls-badge"], ["title", "Update RLS", 1, "rls-badge"], ["title", "Delete RLS", 1, "rls-badge"], [1, "no-rls"], [1, "data-viewer-container"], [3, "entity", "showGridToolbar"], [3, "recordOpened", "addRequested", "entity", "showGridToolbar"], [1, "lineage-diagram"], [1, "lineage-stage", "sources"], [1, "lineage-items"], [1, "lineage-item"], [1, "fa-solid", "fa-keyboard"], [1, "lineage-arrow"], [1, "lineage-stage", "entity-node"], [1, "entity-box"], [1, "lineage-stage", "sinks"], [1, "tracking-config"], [1, "fa-solid", "fa-clock-rotate-left"], [1, "config-grid"], [1, "config-item"], [1, "config-label"], [1, "config-value"], [1, "history-config"], [1, "config-status"], [1, "config-text"], [1, "history-info"], [1, "info-card"], [1, "fa-solid", "fa-info-circle"], [1, "audit-fields-list"], [1, "settings-panel", "isa-settings-panel"], [1, "settings-panel"], [1, "fa-solid", "fa-sliders"], [1, "settings-list"], [1, "fa-solid", "fa-magnifying-glass"], [1, "fts-config"], [1, "fa-solid", "fa-box"], [1, "config-row"], ["title", "Navigate to parent entity", 1, "link"], [1, "muted"], [1, "fa-solid", "fa-circle-check", 2, "color", "var(--mj-brand-primary)"], [1, "fa-solid", "fa-circle-minus", 2, "color", "var(--mj-text-muted)"], ["title", "Navigate to parent entity", 1, "link", 3, "click"], [1, "link", 3, "click"], [1, "fa-solid", "fa-circle-check", 2, "color", "#059669"], [1, "setting-item"], [1, "setting-name"], [1, "setting-value-json"], [1, "setting-value"], [1, "setting-comment"], ["language", "json", "setup", "minimal", 3, "value", "readonly", "lineWrapping"], [1, "config-value", "enabled"], [1, "fa-solid", "fa-circle-check"], [1, "config-value", "code"], [1, "detail-section"], [1, "detail-field-db-name"], [1, "field-description"], [1, "detail-grid"], [1, "detail-item"], [1, "label"], [1, "value", "code"], [1, "value"], [1, "detail-section", "isa-source-section"], ["title", "Navigate to source entity", 1, "value", "link", 3, "click"], [1, "value", "link", 3, "click"], [1, "value-list"], [1, "value-item"], [1, "value-code"], [1, "value-display"], [1, "explorer-loading"], [1, "explorer-error"], [1, "explorer-empty"], ["text", "Loading entity..."], [1, "fa-solid", "fa-exclamation-triangle"]], template: function MJEntityFormComponentExtended_Template(rf, ctx) { if (rf & 1) {
|
|
3577
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Template, 68, 36, "div", 0)(1, MJEntityFormComponentExtended_Conditional_1_Template, 3, 3);
|
|
3293
3578
|
} if (rf & 2) {
|
|
3294
3579
|
i0.ɵɵconditional(!ctx.isExplorerLoading && ctx.entity ? 0 : 1);
|
|
3295
|
-
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.CodeEditorComponent, i4.LoadingComponent, i5.ERDCompositeComponent, i6.EntityViewerComponent, i1.SlicePipe, i1.DecimalPipe, 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: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n\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 display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n\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 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\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 font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.display-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required[_ngcontent-%COMP%] {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n\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: var(--bg-secondary);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\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-db-name[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.field-related[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\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: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n\n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success);\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n\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: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%] {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.value-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display[_ngcontent-%COMP%] {\n color: var(--text-primary);\n}\n\n\n\n\n\n\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}\n\n\n\n\n\n\n\n\n.isa-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n\n\n.isa-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n opacity: 0.7;\n}\n\n\n\n.isa-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row[_ngcontent-%COMP%] .code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-chain[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-chain-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-children[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-child-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.isa-source-section[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n\n\n.isa-settings-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n\n\n.isa-field-inspector[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-field-inspector[_ngcontent-%COMP%] > .isa-chain-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.isa-inspector-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group[_ngcontent-%COMP%] {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n\n\n.isa-siblings[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-sibling-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n\n\n.data-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}", ".k-pane[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n}\n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}"], changeDetection: 0 }); }
|
|
3580
|
+
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.CodeEditorComponent, i4.LoadingComponent, i5.ERDCompositeComponent, i6.EntityViewerComponent, i1.SlicePipe, i1.DecimalPipe, 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: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n\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 display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n\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 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\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 font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.display-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required[_ngcontent-%COMP%] {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n\n\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: var(--bg-secondary);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\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-db-name[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.field-related[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\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: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n\n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-success);\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n\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: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name[_ngcontent-%COMP%] {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%] {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.value-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display[_ngcontent-%COMP%] {\n color: var(--text-primary);\n}\n\n\n\n\n\n\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}\n\n\n\n\n\n\n\n\n.isa-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n\n\n.isa-breadcrumb[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 11px;\n opacity: 0.7;\n}\n\n\n\n.isa-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row[_ngcontent-%COMP%] .code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-chain[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-chain-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n\n\n.isa-children[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-child-list[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n\n\n.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 9px;\n}\n\n\n\n.isa-source-section[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n\n\n.isa-settings-panel[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n\n\n.isa-field-inspector[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-field-inspector[_ngcontent-%COMP%] > .isa-chain-label[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.isa-inspector-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group[_ngcontent-%COMP%] {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n\n\n.isa-siblings[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.isa-sibling-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n\n\n\n\n.data-section[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n\n\n.organic-key-cards[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming[_ngcontent-%COMP%] {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover, \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%], \n.organic-key-card.clickable[_ngcontent-%COMP%]:hover .target-nav-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields[_ngcontent-%COMP%] {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.empty-state-card[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-state-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px 0;\n}\n\n.empty-state-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n line-height: 1.5;\n max-width: 500px;\n margin: 0;\n}", ".k-pane[_ngcontent-%COMP%] {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n}\n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: var(--mj-text-muted);\n}"], changeDetection: 0 }); }
|
|
3296
3581
|
};
|
|
3297
3582
|
MJEntityFormComponentExtended = __decorate([
|
|
3298
3583
|
RegisterClass(BaseFormComponent, 'MJ: Entities')
|
|
@@ -3300,7 +3585,7 @@ MJEntityFormComponentExtended = __decorate([
|
|
|
3300
3585
|
export { MJEntityFormComponentExtended };
|
|
3301
3586
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJEntityFormComponentExtended, [{
|
|
3302
3587
|
type: Component,
|
|
3303
|
-
args: [{ standalone: false, selector: 'mj-entity-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity \u2014 read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <div class=\"isa-chain-label clickable\" (click)=\"isaFieldInspectorExpanded = !isaFieldInspectorExpanded\">\n <i class=\"fa-solid\" [ngClass]=\"isaFieldInspectorExpanded ? 'fa-chevron-down' : 'fa-chevron-right'\"></i>\n Field Source Inspector\n </div>\n @if (isaFieldInspectorExpanded) {\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <div\n class=\"field-group\"\n [class.expanded]=\"isFieldGroupExpanded(group.id)\">\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 @if (isFieldGroupExpanded(group.id)) {\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">\u2014</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '\u2014' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <div class=\"list-empty\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No fields match your search</span>\n </div>\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No outgoing relationships</p>\n </div>\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No incoming relationships</p>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <p>No permissions configured</p>\n </div>\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [entity]=\"entity\"\n [showGridToolbar]=\"true\"\n (recordOpened)=\"OnRecordOpened($event)\"\n (addRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced \u2014 a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <div class=\"empty-state\">\n <p>No custom settings configured</p>\n </div>\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <div class=\"empty-state\">\n <p>Full-text search is not enabled for this entity</p>\n </div>\n }\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <div class=\"explorer-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <p>{{ explorerError }}</p>\n </div>\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <div class=\"explorer-empty\">\n <i class=\"fa-solid fa-database\"></i>\n <p>Entity metadata not available</p>\n </div>\n }\n}\n\n<!-- Loading / Error State -->\n", styles: ["/* ============================================================\n ENTITY EXPLORER FORM - MAIN STYLES\n A world-class exploration-focused entity intelligence hub\n ============================================================ */\n\n/* CSS Variables */\n:host {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: 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 display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: 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 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n/* Column-specific styling */\n.col-seq {\n text-align: center;\n}\n\n.seq-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row:hover .seq-num,\n.list-row.selected .seq-num {\n background: var(--accent-color);\n color: 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 font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name {\n min-width: 0;\n}\n\n.display-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted {\n color: var(--text-muted);\n}\n\n.required-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted {\n background: var(--mj-brand-primary);\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n.field-group {\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: var(--bg-secondary);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header:hover {\n background: var(--bg-tertiary);\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-db-name {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable {\n color: var(--danger-color);\n}\n\n.field-related {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related:hover {\n text-decoration: underline;\n}\n\n.field-badges {\n display: flex;\n gap: 4px;\n}\n\n.badge {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph 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: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming:hover {\n background: var(--mj-status-success);\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item .label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item .value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item .value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item .value.link {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item .value.link:hover {\n text-decoration: underline;\n}\n\n.value-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display {\n color: var(--text-primary);\n}\n\n/* ============================================================\n 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\n/* ============================================================\n IS-A TYPE HIERARCHY & VIRTUAL ENTITY STYLES\n ============================================================ */\n\n/* Badge variants for header */\n.isa-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n/* Breadcrumb under title */\n.isa-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb i {\n font-size: 11px;\n opacity: 0.7;\n}\n\n/* IS-A Panel (overview section) */\n.isa-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row .code {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n/* Inheritance chain */\n.isa-chain {\n padding: 8px 0;\n}\n\n.isa-chain-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n/* Child types list */\n.isa-children {\n padding: 8px 0;\n}\n\n.isa-child-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n/* Clickable elements */\n.clickable {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited i {\n font-size: 9px;\n}\n\n/* IS-A source section in field detail panel */\n.isa-source-section {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section h5 i {\n margin-right: 4px;\n}\n\n/* IS-A settings panel */\n.isa-settings-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel .link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted);\n}\n\n/* IS-A Field Inspector */\n.isa-field-inspector {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-field-inspector > .isa-chain-label {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.isa-inspector-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n/* Sibling chips */\n.isa-siblings {\n padding: 8px 0;\n}\n\n.isa-sibling-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count i {\n font-size: 10px;\n}\n\n/* ============================================================\n DATA SECTION\n ============================================================ */\n.data-section {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n", ".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n"] }]
|
|
3588
|
+
args: [{ standalone: false, selector: 'mj-entity-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (!isExplorerLoading && entity) {\n <div class=\"entity-explorer\">\n <!-- ============================================================ -->\n <!-- HEADER BAR -->\n <!-- ============================================================ -->\n <header class=\"explorer-header\">\n <div class=\"entity-identity\">\n <div class=\"entity-icon\" [style.background-color]=\"'var(--mj-brand-primary)'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @if (IsVirtualEntity) {\n <span class=\"status-badge isa-badge virtual\">\n <i class=\"fa-solid fa-eye\"></i> Virtual\n </span>\n }\n @if (IsChildType) {\n <span class=\"status-badge isa-badge child-type\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Click to navigate to parent entity\">\n <i class=\"fa-solid fa-arrow-up\"></i> IS-A {{ ParentChain[0]?.Name }}\n </span>\n }\n @if (IsParentType) {\n <span class=\"status-badge isa-badge parent-type\">\n <i class=\"fa-solid fa-sitemap\"></i> {{ ChildEntities.length }} child type{{ ChildEntities.length !== 1 ? 's' : '' }}\n </span>\n @if (HasOverlappingSubtypes) {\n <span class=\"status-badge isa-badge overlapping\" title=\"Multiple child types can coexist for a single parent record\">\n <i class=\"fa-solid fa-clone\"></i> Overlapping Subtypes\n </span>\n }\n }\n </div>\n @if (IsChildType) {\n <div class=\"isa-breadcrumb\">\n <i class=\"fa-solid fa-layer-group\"></i>\n {{ IsaBreadcrumb }}\n </div>\n }\n <div class=\"entity-subtitle\">\n <span class=\"schema-table\">{{ entity.SchemaName }}.{{ entity.BaseTable }}</span>\n <span class=\"separator\">|</span>\n @if (entity.Description) {\n <span class=\"entity-description\" [title]=\"entity.Description\">\n {{ entity.Description | slice:0:80 }}{{ entity.Description.length > 80 ? '...' : '' }}\n </span>\n }\n </div>\n </div>\n </div>\n <div class=\"header-stats\">\n <div class=\"stat-item\" (click)=\"setActiveSection('fields')\">\n <i class=\"fa-solid fa-table-columns\"></i>\n <span class=\"stat-value\">{{ stats.fieldCount }}</span>\n <span class=\"stat-label\">Fields</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('relationships')\">\n <i class=\"fa-solid fa-link\"></i>\n <span class=\"stat-value\">{{ stats.relationshipCount }}</span>\n <span class=\"stat-label\">Relations</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('permissions')\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <span class=\"stat-value\">{{ stats.permissionCount }}</span>\n <span class=\"stat-label\">Roles</span>\n </div>\n <div class=\"stat-item\" (click)=\"setActiveSection('data')\">\n <i class=\"fa-solid fa-database\"></i>\n @if (!isRowCountLoading) {\n <span class=\"stat-value\">{{ formattedRowCount }}</span>\n }\n @if (isRowCountLoading) {\n <span class=\"stat-value loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n </span>\n }\n <span class=\"stat-label\">Rows</span>\n </div>\n </div>\n </header>\n <!-- ============================================================ -->\n <!-- MAIN CONTENT AREA -->\n <!-- ============================================================ -->\n <div class=\"explorer-body\">\n <!-- Navigation Rail -->\n <nav class=\"nav-rail\">\n @for (item of navItems; track item) {\n <button\n class=\"nav-item\"\n [class.active]=\"activeSection === item.id\"\n (click)=\"setActiveSection(item.id)\"\n [title]=\"item.label\">\n <i [class]=\"item.icon\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n @if (item.badge) {\n <span class=\"nav-badge\">{{ item.badge }}</span>\n }\n </button>\n }\n </nav>\n <!-- Main Canvas -->\n <main class=\"main-canvas\" [class.panel-open]=\"detailPanelOpen\">\n <!-- ============================================================ -->\n <!-- OVERVIEW SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'overview') {\n <section class=\"section overview-section\">\n <div class=\"section-content\">\n <!-- Stats Cards Row - Clickable to navigate to sections -->\n <div class=\"stats-cards\">\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('fields')\" title=\"View all fields\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>Fields</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.fieldCount }}</div>\n <div class=\"stat-details\">\n <span>{{ stats.primaryKeyCount }} PKs</span>\n <span>{{ stats.foreignKeyCount }} FKs</span>\n @if (stats.encryptedFieldCount) {\n <span>{{ stats.encryptedFieldCount }} Encrypted</span>\n }\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('relationships')\" title=\"View relationships\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n <span>Relationships</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.relationshipCount }}</div>\n <div class=\"stat-details\">\n <span>{{ groupedOutgoingRelationships.length }} Out</span>\n <span>{{ groupedIncomingRelationships.length }} In</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card clickable\" (click)=\"setActiveSection('permissions')\" title=\"View security settings\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-lock\"></i>\n <span>Security</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ stats.permissionCount }}</div>\n <div class=\"stat-details\">\n <span>Roles configured</span>\n </div>\n </div>\n <div class=\"stat-card-action\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n </div>\n <div class=\"stat-card\">\n <div class=\"stat-card-header\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </div>\n <div class=\"stat-card-body\">\n <div class=\"stat-main\">{{ formattedRowCount }}</div>\n <div class=\"stat-details\">\n @if (entity.RowCountRunAt) {\n <span>Updated {{ entity.RowCountRunAt | date:'short' }}</span>\n }\n @if (!entity.RowCountRunAt) {\n <span>Row count</span>\n }\n </div>\n </div>\n </div>\n </div>\n <!-- Capabilities -->\n <div class=\"info-panel capabilities-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-bolt\"></i>\n Capabilities\n </h3>\n <div class=\"capability-tags\">\n @for (cap of capabilitySummary; track cap) {\n <span class=\"capability-tag\">\n <i class=\"fa-solid fa-check\"></i>\n {{ cap }}\n </span>\n }\n @if (!entity.IncludeInAPI) {\n <span class=\"capability-tag disabled\">\n <i class=\"fa-solid fa-xmark\"></i>\n No API\n </span>\n }\n </div>\n </div>\n <!-- IS-A Type Hierarchy -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"info-panel isa-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Hierarchy\n </h3>\n @if (IsVirtualEntity) {\n <div class=\"isa-info-row virtual-info\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Virtual Entity \u2014 read-only view backed by <span class=\"code\">{{ entity.BaseView }}</span></span>\n </div>\n }\n @if (IsChildType) {\n <div class=\"isa-chain\">\n <div class=\"isa-chain-label\">Inheritance Chain</div>\n <div class=\"isa-chain-nodes\">\n <span class=\"isa-node current\">{{ entity.Name }}</span>\n @for (parent of ParentChain; track parent.ID) {\n <i class=\"fa-solid fa-arrow-right isa-arrow\"></i>\n <span class=\"isa-node parent clickable\" (click)=\"NavigateToEntity(parent)\" [title]=\"'Navigate to ' + parent.Name\">\n {{ parent.Name }}\n </span>\n }\n </div>\n <div class=\"isa-inherited-fields\">\n <i class=\"fa-solid fa-table-cells\"></i>\n <span>{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }} inherited from parent{{ ParentChain.length > 1 ? 's' : '' }}</span>\n </div>\n </div>\n <!-- IS-A Field Inspector: shows fields grouped by source entity -->\n @if (isaFieldGroups.length > 1) {\n <div class=\"isa-field-inspector\">\n <div class=\"isa-chain-label clickable\" (click)=\"isaFieldInspectorExpanded = !isaFieldInspectorExpanded\">\n <i class=\"fa-solid\" [ngClass]=\"isaFieldInspectorExpanded ? 'fa-chevron-down' : 'fa-chevron-right'\"></i>\n Field Source Inspector\n </div>\n @if (isaFieldInspectorExpanded) {\n <div class=\"isa-inspector-groups\">\n @for (group of isaFieldGroups; track group.EntityName) {\n <div class=\"isa-inspector-group\" [class.own]=\"group.Level === 0\" [class.inherited]=\"group.Level > 0\">\n <div class=\"isa-inspector-header\">\n <span class=\"isa-inspector-entity\">\n @if (group.Level === 0) {\n <i class=\"fa-solid fa-circle\" style=\"color: var(--mj-brand-primary); font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: var(--mj-brand-primary); font-size: 10px;\"></i>\n }\n {{ group.Label }}\n </span>\n <span class=\"isa-inspector-count\">{{ group.Fields.length }} field{{ group.Fields.length !== 1 ? 's' : '' }}</span>\n </div>\n <div class=\"isa-inspector-fields\">\n @for (field of group.Fields; track field.ID) {\n <span class=\"isa-inspector-field\" [title]=\"field.Description || field.Name\">\n {{ field.DisplayName || field.Name }}\n <span class=\"isa-inspector-type\">{{ field.Type }}</span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- Sibling Types -->\n @if (SiblingEntities.length > 0) {\n <div class=\"isa-siblings\">\n <div class=\"isa-chain-label\">Sibling Types ({{ ParentChain[0]?.AllowMultipleSubtypes ? 'overlapping' : 'disjoint' }} under {{ ParentChain[0]?.Name }})</div>\n <div class=\"isa-child-list\">\n @for (sibling of SiblingEntities; track sibling.ID) {\n <span class=\"isa-sibling-chip clickable\" (click)=\"NavigateToEntity(sibling)\" [title]=\"'Navigate to ' + sibling.Name\">\n <i class=\"fa-solid fa-arrows-left-right\"></i>\n {{ sibling.Name }}\n </span>\n }\n </div>\n </div>\n }\n }\n @if (IsParentType) {\n <div class=\"isa-children\">\n <div class=\"isa-chain-label\">Child Types</div>\n <div class=\"isa-child-list\">\n @for (childCount of childEntityCounts; track childCount.EntityName) {\n <span class=\"isa-child-chip clickable\" (click)=\"NavigateToEntity(childCount.EntityInfo)\" [title]=\"'Navigate to ' + childCount.EntityName\">\n <i class=\"fa-solid fa-arrow-down\"></i>\n {{ childCount.EntityName }}\n <span class=\"isa-child-count\">\n @if (childCount.IsLoading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n {{ childCount.RecordCount | number }}\n }\n </span>\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Database Info -->\n <div class=\"info-panel database-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-server\"></i>\n Database\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Schema</span>\n <span class=\"info-value\">{{ entity.SchemaName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Table</span>\n <span class=\"info-value\">{{ entity.BaseTable }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">View</span>\n <span class=\"info-value\">{{ entity.BaseView }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Delete Type</span>\n <span class=\"info-value\">{{ entity.DeleteType }}</span>\n </div>\n @if (entity.spCreate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Create</span>\n <span class=\"info-value code\">{{ entity.spCreate }}</span>\n </div>\n }\n @if (entity.spUpdate) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Update</span>\n <span class=\"info-value code\">{{ entity.spUpdate }}</span>\n </div>\n }\n @if (entity.spDelete) {\n <div class=\"info-item\">\n <span class=\"info-label\">SP Delete</span>\n <span class=\"info-value code\">{{ entity.spDelete }}</span>\n </div>\n }\n </div>\n </div>\n <!-- Code Gen Info -->\n <div class=\"info-panel codegen-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-code\"></i>\n Code Generation\n </h3>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Class Name</span>\n <span class=\"info-value code\">{{ entity.ClassName }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Code Name</span>\n <span class=\"info-value code\">{{ entity.CodeName }}</span>\n </div>\n @if (entity.EntityObjectSubclassName) {\n <div class=\"info-item\">\n <span class=\"info-label\">Subclass</span>\n <span class=\"info-value code\">{{ entity.EntityObjectSubclassName }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- FIELDS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'fields') {\n <section class=\"section fields-section\">\n <div class=\"section-header\">\n <div class=\"search-box\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n type=\"text\"\n placeholder=\"Search fields...\"\n [ngModel]=\"fieldSearchTerm\"\n (ngModelChange)=\"onFieldSearch($event)\">\n </div>\n <div class=\"header-controls\">\n <!-- View mode toggle -->\n <div class=\"view-mode-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'grouped'\"\n (click)=\"fieldViewMode = 'grouped'\"\n title=\"Group by category\">\n <i class=\"fa-solid fa-layer-group\"></i>\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"fieldViewMode === 'list'\"\n (click)=\"fieldViewMode = 'list'\"\n title=\"List view\">\n <i class=\"fa-solid fa-list\"></i>\n </button>\n </div>\n <!-- Expand/Collapse controls (only in grouped mode) -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"expand-collapse-controls\">\n <button\n class=\"control-btn\"\n (click)=\"expandAllFieldGroups()\"\n [disabled]=\"allFieldGroupsExpanded\"\n title=\"Expand all\">\n <i class=\"fa-solid fa-angles-down\"></i>\n </button>\n <button\n class=\"control-btn\"\n (click)=\"collapseAllFieldGroups()\"\n [disabled]=\"allFieldGroupsCollapsed\"\n title=\"Collapse all\">\n <i class=\"fa-solid fa-angles-up\"></i>\n </button>\n </div>\n }\n </div>\n </div>\n <div class=\"section-content fields-content\">\n <!-- Grouped View -->\n @if (fieldViewMode === 'grouped') {\n <div class=\"field-groups\">\n @for (group of getFilteredFieldGroups(); track group) {\n <div\n class=\"field-group\"\n [class.expanded]=\"isFieldGroupExpanded(group.id)\">\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 @if (isFieldGroupExpanded(group.id)) {\n <div class=\"group-content\">\n @for (field of group.fields; track field) {\n <div\n class=\"field-item\"\n (click)=\"selectField(field)\"\n [class.selected]=\"IsFieldSelected(field)\">\n <div class=\"field-icon\">\n <i [class]=\"getFieldTypeIcon(field)\"></i>\n </div>\n <div class=\"field-info\">\n <div class=\"field-name\">{{ field.DisplayName || field.Name }}</div>\n <div class=\"field-db-name\">{{ field.Name }}</div>\n <div class=\"field-meta\">\n <span class=\"field-type\">{{ formatFieldType(field) }}</span>\n @if (!field.AllowsNull) {\n <span class=\"field-nullable\">Required</span>\n }\n @if (field.RelatedEntityID) {\n <span class=\"field-related\" (click)=\"navigateToRelatedEntity(field); $event.stopPropagation()\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n {{ getRelatedEntityName(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"field-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"badge pk\" title=\"Primary Key\">PK</span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"badge fk\" title=\"Foreign Key\">FK</span>\n }\n @if (field.Encrypt) {\n <span class=\"badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n <!-- List View - Modern Card-style Table -->\n @if (fieldViewMode === 'list') {\n <div class=\"fields-list-view\">\n <!-- Table Header -->\n <div class=\"list-header\">\n <div class=\"list-col col-seq sortable\" (click)=\"sortFieldList('Sequence')\" [class.sorted]=\"fieldListSortColumn === 'Sequence'\">\n #\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Sequence' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-name sortable\" (click)=\"sortFieldList('Name')\" [class.sorted]=\"fieldListSortColumn === 'Name'\">\n Field Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Name' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-display-name sortable\" (click)=\"sortFieldList('DisplayName')\" [class.sorted]=\"fieldListSortColumn === 'DisplayName'\">\n Display Name\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'DisplayName' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-type sortable\" (click)=\"sortFieldList('Type')\" [class.sorted]=\"fieldListSortColumn === 'Type'\">\n Type\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Type' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-length sortable\" (click)=\"sortFieldList('Length')\" [class.sorted]=\"fieldListSortColumn === 'Length'\">\n Length\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Length' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-nullable sortable\" (click)=\"sortFieldList('AllowsNull')\" [class.sorted]=\"fieldListSortColumn === 'AllowsNull'\">\n Required\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'AllowsNull' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n <div class=\"list-col col-flags\">Flags</div>\n <div class=\"list-col col-desc sortable\" (click)=\"sortFieldList('Description')\" [class.sorted]=\"fieldListSortColumn === 'Description'\">\n Description\n <i class=\"sort-icon fa-solid\" [ngClass]=\"fieldListSortColumn === 'Description' ? (fieldListSortDirection === 'asc' ? 'fa-caret-up' : 'fa-caret-down') : 'fa-sort'\"></i>\n </div>\n </div>\n <!-- Table Body -->\n <div class=\"list-body\">\n @for (field of getFilteredFieldsList(); track field; let i = $index) {\n <div\n class=\"list-row\"\n [class.selected]=\"IsFieldSelected(field)\"\n (click)=\"selectField(field)\">\n <div class=\"list-col col-seq\">\n <span class=\"seq-num\">{{ field.Sequence }}</span>\n </div>\n <div class=\"list-col col-name\">\n <i [class]=\"getFieldTypeIcon(field)\" class=\"field-type-icon\"></i>\n <span class=\"field-name-text\">{{ field.Name }}</span>\n </div>\n <div class=\"list-col col-display-name\">\n <span class=\"display-name-text\">{{ field.DisplayName || field.Name }}</span>\n </div>\n <div class=\"list-col col-type\">\n <span class=\"type-tag\">{{ field.Type }}</span>\n </div>\n <div class=\"list-col col-length\">\n @if (field.Length > 0) {\n <span class=\"length-value\">{{ field.Length }}</span>\n }\n @if (field.Length <= 0) {\n <span class=\"length-value muted\">\u2014</span>\n }\n </div>\n <div class=\"list-col col-nullable\">\n <span class=\"required-indicator\" [class.required]=\"!field.AllowsNull\" [class.optional]=\"field.AllowsNull\">\n <i [class]=\"field.AllowsNull ? 'fa-solid fa-circle-minus' : 'fa-solid fa-circle-check'\"></i>\n {{ field.AllowsNull ? 'Optional' : 'Required' }}\n </span>\n </div>\n <div class=\"list-col col-flags\">\n <div class=\"flag-badges\">\n @if (field.IsPrimaryKey) {\n <span class=\"flag-badge pk\" title=\"Primary Key\">\n <i class=\"fa-solid fa-key\"></i> PK\n </span>\n }\n @if (field.RelatedEntityID && !field.IsPrimaryKey) {\n <span class=\"flag-badge fk\" title=\"Foreign Key\">\n <i class=\"fa-solid fa-link\"></i> FK\n </span>\n }\n @if (field.Encrypt) {\n <span class=\"flag-badge encrypted\" title=\"Encrypted\">\n <i class=\"fa-solid fa-lock\"></i>\n </span>\n }\n @if (IsInheritedField(field)) {\n <span class=\"flag-badge inherited\" [title]=\"'Inherited from ' + GetISAFieldSource(field)\">\n <i class=\"fa-solid fa-arrow-up\"></i> {{ GetISAFieldSource(field) }}\n </span>\n }\n </div>\n </div>\n <div class=\"list-col col-desc\">\n <span class=\"desc-text\" [title]=\"field.Description || ''\">{{ field.Description || '\u2014' }}</span>\n </div>\n </div>\n }\n </div>\n <!-- Empty state -->\n @if (getFilteredFieldsList().length === 0) {\n <div class=\"list-empty\">\n <i class=\"fa-solid fa-search\"></i>\n <span>No fields match your search</span>\n </div>\n }\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- RELATIONSHIPS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'relationships') {\n <section class=\"section relationships-section\">\n <div class=\"section-header\">\n <div class=\"view-toggle\">\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'diagram'\"\n (click)=\"relationshipViewMode = 'diagram'\">\n <i class=\"fa-solid fa-diagram-project\"></i>\n Diagram\n </button>\n <button\n class=\"toggle-btn\"\n [class.active]=\"relationshipViewMode === 'list'\"\n (click)=\"relationshipViewMode = 'list'\">\n <i class=\"fa-solid fa-list\"></i>\n List\n </button>\n </div>\n <!-- Depth selector (only in diagram mode) -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"depth-selector\">\n <span class=\"depth-label\">Depth:</span>\n <div class=\"depth-buttons\">\n @for (d of [1, 2, 3, 4, 5]; track d) {\n <button\n class=\"depth-btn\"\n [class.active]=\"erdDepth === d\"\n (click)=\"setErdDepth(d)\"\n [title]=\"'Show ' + d + ' level(s) of relationships'\">\n {{ d }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n <div class=\"section-content\">\n <!-- Diagram View using the ERD composite component -->\n @if (relationshipViewMode === 'diagram') {\n <div class=\"relationships-graph\">\n <mj-erd-composite\n [focusEntities]=\"entity ? [entity] : []\"\n [showFilterPanel]=\"false\"\n [showHeader]=\"false\"\n [depth]=\"erdDepth\"\n (stateChange)=\"onERDStateChange($event)\"\n (openRecord)=\"onERDOpenRecord($event)\">\n </mj-erd-composite>\n </div>\n }\n <!-- List View -->\n @if (relationshipViewMode === 'list') {\n <div class=\"relationships-list\">\n <!-- Outgoing Relationships (FK fields on this entity) - Grouped by target entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (References to other entities)\n <span class=\"group-count\">{{ groupedOutgoingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedOutgoingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip outgoing\"\n [title]=\"field.Description || field.Name\"\n (click)=\"selectField(field)\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.Name }}\n </span>\n }\n </div>\n </div>\n }\n @if (groupedOutgoingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No outgoing relationships</p>\n </div>\n }\n </div>\n </div>\n <!-- Incoming Relationships - Grouped by source entity -->\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Entities that reference this one)\n <span class=\"group-count\">{{ groupedIncomingRelationships.length }}</span>\n </h3>\n <div class=\"relationship-items grouped\">\n @for (group of groupedIncomingRelationships; track group) {\n <div\n class=\"relationship-item-grouped\"\n >\n <div class=\"rel-header\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <div class=\"rel-entity-name\">{{ group.entityName }}</div>\n </div>\n <div class=\"rel-fields-chips\">\n @for (field of group.fields; track field) {\n <span\n class=\"field-chip incoming\"\n [title]=\"'Type: ' + field.type\">\n <i class=\"fa-solid fa-link\"></i>\n {{ field.fieldName }}\n @if (field.bundleInAPI) {\n <i class=\"fa-solid fa-box bundle-icon\" title=\"Bundled in API\"></i>\n }\n </span>\n }\n </div>\n </div>\n }\n @if (groupedIncomingRelationships.length === 0) {\n <div class=\"empty-state\">\n <p>No incoming relationships</p>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- ORGANIC KEYS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'organicKeys') {\n <section class=\"section organic-keys-section\">\n <div class=\"section-content\">\n @if (organicKeysOutgoing.length === 0 && organicKeysIncoming.length === 0) {\n <div class=\"empty-state-card\">\n <i class=\"fa-solid fa-fingerprint empty-state-icon\"></i>\n <h3>No Organic Keys</h3>\n <p>This entity has no organic key relationships configured. Organic keys enable cross-system matching by shared business data like email addresses, phone numbers, or domain names \u2014 without requiring foreign key constraints.</p>\n </div>\n } @else {\n <!-- Outgoing: Keys defined on THIS entity -->\n @if (organicKeysOutgoing.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-from-bracket\"></i>\n Outgoing (Matches from this entity)\n <span class=\"group-count\">{{ organicKeysOutgoing.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (okGroup of organicKeysOutgoing; track okGroup.OrganicKey.ID) {\n <div class=\"organic-key-card\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <i class=\"fa-solid fa-fingerprint organic-key-icon\"></i>\n {{ okGroup.OrganicKey.Name }}\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"organic-key-badge strategy\">{{ okGroup.OrganicKey.NormalizationStrategy }}</span>\n <span class=\"organic-key-badge fields\">{{ okGroup.OrganicKey.MatchFieldNames }}</span>\n </div>\n </div>\n @if (okGroup.OrganicKey.Description) {\n <p class=\"organic-key-description\">{{ okGroup.OrganicKey.Description }}</p>\n }\n <div class=\"organic-key-targets\">\n @for (target of okGroup.RelatedEntities; track target.Info.ID) {\n <div class=\"organic-key-target clickable\" (click)=\"NavigateToEntityByID(target.Info.RelatedEntityID)\">\n <div class=\"rel-icon outgoing\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"target-main\">\n <div class=\"target-header\">\n <i [class]=\"target.EntityIcon\" class=\"target-entity-icon\"></i>\n <span class=\"target-entity-name\">{{ target.Info.DisplayName || target.EntityName }}</span>\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"target-match-detail\">\n @if (target.Info.IsDirectMatch) {\n <span class=\"match-type-badge direct\">Direct</span>\n <span class=\"match-fields\">{{ okGroup.OrganicKey.MatchFieldNames }} \u2192 {{ target.Info.RelatedEntityFieldNames }}</span>\n } @else {\n <span class=\"match-type-badge transitive\">Transitive</span>\n <span class=\"match-fields\" [title]=\"target.Info.TransitiveObjectName || ''\">via {{ target.Info.TransitiveObjectName }}</span>\n }\n </div>\n </div>\n </div>\n }\n </div>\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Incoming: Keys on OTHER entities targeting THIS entity -->\n @if (organicKeysIncoming.length > 0) {\n <div class=\"relationship-group\">\n <h3 class=\"relationship-group-title\">\n <i class=\"fa-solid fa-arrow-right-to-bracket\"></i>\n Incoming (Other entities matching to this one)\n <span class=\"group-count\">{{ organicKeysIncoming.length }}</span>\n </h3>\n <div class=\"organic-key-cards\">\n @for (incoming of organicKeysIncoming; track incoming.OrganicKey.ID + incoming.SourceEntityName) {\n <div class=\"organic-key-card incoming clickable\" (click)=\"NavigateToEntityByID(incoming.SourceEntityID)\">\n <div class=\"organic-key-card-header\">\n <div class=\"organic-key-name\">\n <div class=\"rel-icon incoming\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </div>\n <i [class]=\"incoming.SourceEntityIcon\" class=\"target-entity-icon\"></i>\n {{ incoming.SourceEntityName }}\n <i class=\"fa-solid fa-external-link-alt target-nav-icon\"></i>\n </div>\n <div class=\"organic-key-badges\">\n <span class=\"match-type-badge\" [class.direct]=\"incoming.MatchType === 'Direct'\" [class.transitive]=\"incoming.MatchType === 'Transitive'\">{{ incoming.MatchType }}</span>\n </div>\n </div>\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Key:</span>\n <span class=\"detail-value\">{{ incoming.OrganicKey.Name }}</span>\n <span class=\"organic-key-badge fields\">{{ incoming.OrganicKey.MatchFieldNames }}</span>\n <span class=\"organic-key-badge strategy\">{{ incoming.OrganicKey.NormalizationStrategy }}</span>\n </div>\n @if (incoming.RelatedEntityConfig.IsDirectMatch) {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Matched via:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.RelatedEntityFieldNames }}</span>\n </div>\n } @else {\n <div class=\"organic-key-detail-row\">\n <span class=\"detail-label\">Bridge:</span>\n <span class=\"detail-value\">{{ incoming.RelatedEntityConfig.TransitiveObjectName }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- PERMISSIONS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'permissions') {\n <section class=\"section permissions-section\">\n <div class=\"section-content\">\n <div class=\"permissions-matrix\">\n <table class=\"matrix-table\">\n <thead>\n <tr>\n <th>Role</th>\n <th class=\"center\">Create</th>\n <th class=\"center\">Read</th>\n <th class=\"center\">Update</th>\n <th class=\"center\">Delete</th>\n <th>RLS</th>\n </tr>\n </thead>\n <tbody>\n @for (perm of entity.Permissions; track perm) {\n <tr>\n <td class=\"role-name\">{{ getRoleName(perm) }}</td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanCreate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanRead ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanUpdate ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"center\">\n <i class=\"permission-icon\" [ngClass]=\"perm.CanDelete ? 'fa-solid fa-check granted' : 'fa-solid fa-xmark denied'\"></i>\n </td>\n <td class=\"rls-info\">\n @if (perm.ReadRLSFilterID) {\n <span class=\"rls-badge\" title=\"Read RLS\">R</span>\n }\n @if (perm.CreateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Create RLS\">C</span>\n }\n @if (perm.UpdateRLSFilterID) {\n <span class=\"rls-badge\" title=\"Update RLS\">U</span>\n }\n @if (perm.DeleteRLSFilterID) {\n <span class=\"rls-badge\" title=\"Delete RLS\">D</span>\n }\n @if (!perm.ReadRLSFilterID && !perm.CreateRLSFilterID && !perm.UpdateRLSFilterID && !perm.DeleteRLSFilterID) {\n <span class=\"no-rls\">None</span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n @if (entity.Permissions.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-shield-halved\"></i>\n <p>No permissions configured</p>\n </div>\n }\n </div>\n <div class=\"api-capabilities\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-plug\"></i>\n API Capabilities\n </h3>\n <div class=\"capability-grid\">\n <div class=\"capability-item\" [class.enabled]=\"entity.IncludeInAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.IncludeInAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Include in API</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowAllRowsAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowAllRowsAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow All Rows</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowCreateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowCreateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Create</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUpdateAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUpdateAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Update</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowDeleteAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowDeleteAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Allow Delete</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.AllowUserSearchAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AllowUserSearchAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>User Search</span>\n </div>\n <div class=\"capability-item\" [class.enabled]=\"entity.CustomResolverAPI\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CustomResolverAPI ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Custom Resolver</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- DATA SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'data') {\n <section class=\"section data-section\">\n <div class=\"data-viewer-container\">\n @if (entity) {\n <mj-entity-viewer\n [entity]=\"entity\"\n [showGridToolbar]=\"true\"\n (recordOpened)=\"OnRecordOpened($event)\"\n (addRequested)=\"OnAddRequested()\">\n </mj-entity-viewer>\n }\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- LINEAGE SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'lineage') {\n <section class=\"section lineage-section\">\n <div class=\"section-content\">\n <div class=\"lineage-diagram\">\n <div class=\"lineage-stage sources\">\n <h4>Data Sources</h4>\n <div class=\"lineage-items\">\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-keyboard\"></i>\n <span>Manual Entry</span>\n </div>\n @if (entity.IncludeInAPI) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-plug\"></i>\n <span>API Create</span>\n </div>\n }\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage entity-node\">\n <div class=\"entity-box\">\n <i [class]=\"entityIcon\"></i>\n <span>{{ entity.Name }}</span>\n </div>\n </div>\n <div class=\"lineage-arrow\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </div>\n <div class=\"lineage-stage sinks\">\n <h4>Data Sinks</h4>\n <div class=\"lineage-items\">\n @if (entity.TrackRecordChanges) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n <span>Record Changes</span>\n </div>\n }\n @if (entity.AuditRecordAccess) {\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-eye\"></i>\n <span>Access Audit</span>\n </div>\n }\n <div class=\"lineage-item\">\n <i class=\"fa-solid fa-link\"></i>\n <span>Related Entities ({{ stats.relationshipCount }})</span>\n </div>\n </div>\n </div>\n </div>\n <div class=\"tracking-config\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-clock-rotate-left\"></i>\n Tracking Configuration\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-item\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Track Record Changes</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditRecordAccess\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditRecordAccess ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit Record Access</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.AuditViewRuns\">\n <i class=\"fa-solid\" [ngClass]=\"entity.AuditViewRuns ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Audit View Runs</span>\n </div>\n <div class=\"config-item\">\n <span class=\"config-label\">Delete Type:</span>\n <span class=\"config-value\">{{ entity.DeleteType }}</span>\n </div>\n <div class=\"config-item\" [class.enabled]=\"entity.CascadeDeletes\">\n <i class=\"fa-solid\" [ngClass]=\"entity.CascadeDeletes ? 'fa-check' : 'fa-xmark'\"></i>\n <span>Cascade Deletes</span>\n </div>\n </div>\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- HISTORY SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'history') {\n <section class=\"section history-section\">\n <div class=\"section-content\">\n <div class=\"history-config\">\n <div class=\"config-status\" [class.enabled]=\"entity.TrackRecordChanges\">\n <i class=\"fa-solid\" [ngClass]=\"entity.TrackRecordChanges ? 'fa-circle-check' : 'fa-circle-xmark'\"></i>\n <div class=\"config-text\">\n <strong>Record Change Tracking</strong>\n <span>{{ entity.TrackRecordChanges ? 'Enabled - All changes are recorded' : 'Disabled - Changes are not tracked' }}</span>\n </div>\n </div>\n </div>\n <div class=\"history-info\">\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-info-circle\"></i>\n About Change Tracking\n </h4>\n @if (entity.TrackRecordChanges) {\n <p>\n This entity has change tracking enabled. All modifications to records are stored in the\n <code>RecordChange</code> table, including the user who made the change, timestamp, and\n the before/after values.\n </p>\n }\n @if (!entity.TrackRecordChanges) {\n <p>\n This entity does not have change tracking enabled. To enable it, set\n <code>TrackRecordChanges</code> to <code>true</code> in the entity metadata.\n </p>\n }\n </div>\n @if (entity.TrackRecordChanges) {\n <div class=\"info-card\">\n <h4>\n <i class=\"fa-solid fa-database\"></i>\n Audit Fields\n </h4>\n <ul class=\"audit-fields-list\">\n <li>\n <code>__mj_CreatedAt</code> - Record creation timestamp\n </li>\n <li>\n <code>__mj_UpdatedAt</code> - Last modification timestamp\n </li>\n @if (entity.DeleteType === 'Soft') {\n <li>\n <code>__mj_DeletedAt</code> - Soft delete timestamp (when applicable)\n </li>\n }\n </ul>\n </div>\n }\n </div>\n </div>\n </section>\n }\n <!-- ============================================================ -->\n <!-- SETTINGS SECTION -->\n <!-- ============================================================ -->\n @if (activeSection === 'settings') {\n <section class=\"section settings-section\">\n <div class=\"section-content\">\n <!-- IS-A Type Relationship Configuration -->\n @if (HasISARelationship || IsVirtualEntity) {\n <div class=\"settings-panel isa-settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-layer-group\"></i>\n Type Relationship (IS-A)\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Virtual Entity</span>\n <span class=\"config-value\">\n @if (IsVirtualEntity) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: var(--mj-brand-primary);\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: var(--mj-text-muted);\"></i> No\n }\n </span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Parent Entity</span>\n <span class=\"config-value\">\n @if (IsChildType) {\n <span class=\"link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to parent entity\">\n {{ ParentChain[0]?.Name }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n } @else {\n <span class=\"muted\">None</span>\n }\n </span>\n </div>\n @if (IsChildType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Full Inheritance Chain</span>\n <span class=\"config-value\">{{ IsaBreadcrumb }}</span>\n </div>\n <div class=\"config-row\">\n <span class=\"config-label\">Inherited Fields</span>\n <span class=\"config-value\">{{ InheritedFieldCount }} field{{ InheritedFieldCount !== 1 ? 's' : '' }}</span>\n </div>\n }\n @if (IsParentType) {\n <div class=\"config-row\">\n <span class=\"config-label\">Child Types</span>\n <span class=\"config-value\">\n @for (child of ChildEntities; track child.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(child)\">{{ child.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n @if (SiblingEntities.length > 0) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sibling Types</span>\n <span class=\"config-value\">\n @for (sibling of SiblingEntities; track sibling.ID; let last = $last) {\n <span class=\"link\" (click)=\"NavigateToEntity(sibling)\">{{ sibling.Name }}</span>{{ last ? '' : ', ' }}\n }\n </span>\n </div>\n }\n <div class=\"config-row\">\n <span class=\"config-label\">Disjoint Subtypes</span>\n <span class=\"config-value\">\n @if (IsParentType || IsChildType) {\n <i class=\"fa-solid fa-circle-check\" style=\"color: #059669;\"></i> Enforced \u2014 a parent record can only be one child type\n } @else {\n <span class=\"muted\">N/A</span>\n }\n </span>\n </div>\n </div>\n </div>\n }\n <!-- Entity Settings -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-sliders\"></i>\n Entity Settings\n </h3>\n @if (entity.Settings.length > 0) {\n <div class=\"settings-list\">\n @for (setting of entity.Settings; track setting) {\n <div class=\"setting-item\">\n <div class=\"setting-name\">{{ setting.Name }}</div>\n @if (isJsonValue(setting.Value)) {\n <div class=\"setting-value-json\">\n <mj-code-editor\n [value]=\"formatJsonValue(setting.Value)\"\n language=\"json\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\"\n setup=\"minimal\">\n </mj-code-editor>\n </div>\n } @else {\n <div class=\"setting-value\">{{ setting.Value }}</div>\n }\n @if (setting.Comments) {\n <div class=\"setting-comment\">{{ setting.Comments }}</div>\n }\n </div>\n }\n </div>\n }\n @if (entity.Settings.length === 0) {\n <div class=\"empty-state\">\n <p>No custom settings configured</p>\n </div>\n }\n </div>\n <!-- Full Text Search -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n Full-Text Search\n </h3>\n @if (entity.FullTextSearchEnabled) {\n <div class=\"fts-config\">\n <div class=\"config-row\">\n <span class=\"config-label\">Status</span>\n <span class=\"config-value enabled\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Enabled\n </span>\n </div>\n @if (entity.FullTextCatalog) {\n <div class=\"config-row\">\n <span class=\"config-label\">Catalog</span>\n <span class=\"config-value code\">{{ entity.FullTextCatalog }}</span>\n </div>\n }\n @if (entity.FullTextIndex) {\n <div class=\"config-row\">\n <span class=\"config-label\">Index</span>\n <span class=\"config-value code\">{{ entity.FullTextIndex }}</span>\n </div>\n }\n @if (entity.FullTextSearchFunction) {\n <div class=\"config-row\">\n <span class=\"config-label\">Function</span>\n <span class=\"config-value code\">{{ entity.FullTextSearchFunction }}</span>\n </div>\n }\n </div>\n }\n @if (!entity.FullTextSearchEnabled) {\n <div class=\"empty-state\">\n <p>Full-text search is not enabled for this entity</p>\n </div>\n }\n </div>\n <!-- Row Packaging -->\n <div class=\"settings-panel\">\n <h3 class=\"panel-title\">\n <i class=\"fa-solid fa-box\"></i>\n Schema Packaging\n </h3>\n <div class=\"config-grid\">\n <div class=\"config-row\">\n <span class=\"config-label\">Rows to Pack</span>\n <span class=\"config-value\">{{ entity.RowsToPackWithSchema || 'None' }}</span>\n </div>\n @if (entity.RowsToPackSampleCount) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Count</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleCount }}</span>\n </div>\n }\n @if (entity.RowsToPackSampleMethod) {\n <div class=\"config-row\">\n <span class=\"config-label\">Sample Method</span>\n <span class=\"config-value\">{{ entity.RowsToPackSampleMethod }}</span>\n </div>\n }\n </div>\n </div>\n </div>\n </section>\n }\n </main>\n <!-- ============================================================ -->\n <!-- DETAIL PANEL (Slides in from right) -->\n <!-- ============================================================ -->\n <aside class=\"detail-panel\" [class.open]=\"detailPanelOpen\">\n <div class=\"panel-header\">\n @if (selectedField) {\n <h3>Field Details</h3>\n }\n @if (selectedRelationship) {\n <h3>Relationship Details</h3>\n }\n <button class=\"close-btn\" (click)=\"closeDetailPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <!-- Field Details -->\n @if (selectedField) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedField.DisplayName || selectedField.Name }}</h4>\n <div class=\"detail-field-db-name\">{{ selectedField.Name }}</div>\n @if (selectedField.Description) {\n <p class=\"field-description\">{{ selectedField.Description }}</p>\n }\n </div>\n <div class=\"detail-section\">\n <h5>Type Information</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">SQL Type</span>\n <span class=\"value code\">{{ formatFieldType(selectedField) }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">TypeScript Type</span>\n <span class=\"value code\">{{ selectedField.TSType }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Nullable</span>\n <span class=\"value\">{{ selectedField.AllowsNull ? 'Yes' : 'No' }}</span>\n </div>\n @if (selectedField.DefaultValue) {\n <div class=\"detail-item\">\n <span class=\"label\">Default</span>\n <span class=\"value code\">{{ selectedField.DefaultValue }}</span>\n </div>\n }\n </div>\n </div>\n @if (IsInheritedField(selectedField)) {\n <div class=\"detail-section isa-source-section\">\n <h5>\n <i class=\"fa-solid fa-arrow-up\"></i>\n IS-A Inherited Field\n </h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Source Entity</span>\n <span class=\"value link\" (click)=\"NavigateToEntity(ParentChain[0])\" title=\"Navigate to source entity\">\n {{ GetISAFieldSource(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Routing</span>\n <span class=\"value\">ORM routes Set/Get to parent</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.RelatedEntityID) {\n <div class=\"detail-section\">\n <h5>Relationship</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Related Entity</span>\n <span class=\"value link\" (click)=\"navigateToRelatedEntity(selectedField)\">\n {{ getRelatedEntityName(selectedField) }}\n <i class=\"fa-solid fa-arrow-right\"></i>\n </span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Display Type</span>\n <span class=\"value\">{{ selectedField.RelatedEntityDisplayType }}</span>\n </div>\n </div>\n </div>\n }\n @if (selectedField.Encrypt) {\n <div class=\"detail-section\">\n <h5>Encryption</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Encrypted</span>\n <span class=\"value\">Yes</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Decrypt in API</span>\n <span class=\"value\">{{ selectedField.AllowDecryptInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n }\n <div class=\"detail-section\">\n <h5>API Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Allow Update</span>\n <span class=\"value\">{{ selectedField.AllowUpdateAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Include in Search</span>\n <span class=\"value\">{{ selectedField.IncludeInUserSearchAPI ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Full-Text Search</span>\n <span class=\"value\">{{ selectedField.FullTextSearchEnabled ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Form Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Include in Form</span>\n <span class=\"value\">{{ selectedField.IncludeInGeneratedForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Section</span>\n <span class=\"value\">{{ selectedField.GeneratedFormSection }}</span>\n </div>\n @if (selectedField.Category) {\n <div class=\"detail-item\">\n <span class=\"label\">Category</span>\n <span class=\"value\">{{ selectedField.Category }}</span>\n </div>\n }\n <div class=\"detail-item\">\n <span class=\"label\">Sequence</span>\n <span class=\"value\">{{ selectedField.Sequence }}</span>\n </div>\n </div>\n </div>\n @if (selectedField.EntityFieldValues.length > 0) {\n <div class=\"detail-section\">\n <h5>Allowed Values</h5>\n <div class=\"value-list\">\n @for (val of selectedField.EntityFieldValues; track val) {\n <div class=\"value-item\">\n @if (val.Code !== val.Value) {\n <span class=\"value-code\">{{ val.Code }}</span>\n }\n <span class=\"value-display\">{{ val.Value }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n <!-- Relationship Details -->\n @if (selectedRelationship) {\n <div class=\"panel-content\">\n <div class=\"detail-section\">\n <h4>{{ selectedRelationship.DisplayName || selectedRelationship.Entity }}</h4>\n </div>\n <div class=\"detail-section\">\n <h5>Connection</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">From Entity</span>\n <span class=\"value\">{{ selectedRelationship.Entity }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Join Field</span>\n <span class=\"value code\">{{ selectedRelationship.RelatedEntityJoinField }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Type</span>\n <span class=\"value\">{{ selectedRelationship.Type }}</span>\n </div>\n </div>\n </div>\n <div class=\"detail-section\">\n <h5>Display Settings</h5>\n <div class=\"detail-grid\">\n <div class=\"detail-item\">\n <span class=\"label\">Display in Form</span>\n <span class=\"value\">{{ selectedRelationship.DisplayInForm ? 'Yes' : 'No' }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Location</span>\n <span class=\"value\">{{ selectedRelationship.DisplayLocation }}</span>\n </div>\n <div class=\"detail-item\">\n <span class=\"label\">Bundle in API</span>\n <span class=\"value\">{{ selectedRelationship.BundleInAPI ? 'Yes' : 'No' }}</span>\n </div>\n </div>\n </div>\n </div>\n }\n </aside>\n </div>\n </div>\n} @else {\n @if (isExplorerLoading) {\n <div class=\"explorer-loading\">\n <mj-loading text=\"Loading entity...\"></mj-loading>\n </div>\n }\n @if (!isExplorerLoading && explorerError) {\n <div class=\"explorer-error\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <p>{{ explorerError }}</p>\n </div>\n }\n @if (!isExplorerLoading && !explorerError && !entity) {\n <div class=\"explorer-empty\">\n <i class=\"fa-solid fa-database\"></i>\n <p>Entity metadata not available</p>\n </div>\n }\n}\n\n<!-- Loading / Error State -->\n", styles: ["/* ============================================================\n ENTITY EXPLORER FORM - MAIN STYLES\n A world-class exploration-focused entity intelligence hub\n ============================================================ */\n\n/* CSS Variables */\n:host {\n --nav-rail-width: 64px;\n --header-height: 80px;\n --detail-panel-width: 400px;\n\n --bg-primary: var(--mj-bg-surface);\n --bg-secondary: var(--mj-bg-surface-sunken);\n --bg-tertiary: var(--mj-bg-surface-sunken);\n\n --text-primary: var(--mj-text-primary);\n --text-secondary: var(--mj-text-secondary);\n --text-muted: var(--mj-text-muted);\n\n --border-color: var(--mj-border-default);\n --border-light: var(--mj-border-default);\n\n --accent-color: var(--mj-brand-primary);\n --accent-light: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n --accent-dark: var(--mj-brand-primary);\n\n --success-color: var(--mj-status-success);\n --warning-color: var(--mj-status-warning);\n --danger-color: var(--mj-status-error);\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.status-badge.status-deprecated {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.status-badge.status-disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: 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 display: flex;\n flex-direction: column;\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: 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 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: var(--bg-secondary);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n/* Column-specific styling */\n.col-seq {\n text-align: center;\n}\n\n.seq-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row:hover .seq-num,\n.list-row.selected .seq-num {\n background: var(--accent-color);\n color: 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 font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n}\n\n.col-display-name {\n min-width: 0;\n}\n\n.display-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted {\n color: var(--text-muted);\n}\n\n.required-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required {\n color: var(--danger-color);\n background: color-mix(in srgb, var(--mj-status-error) 10%, transparent);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: var(--mj-status-warning);\n color: var(--mj-bg-surface);\n}\n\n.flag-badge.fk {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.flag-badge.encrypted {\n background: var(--mj-brand-primary);\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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n color: var(--mj-status-error);\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n.field-group {\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: var(--bg-secondary);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header:hover {\n background: var(--bg-tertiary);\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-db-name {\n font-size: 11px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 2px;\n}\n\n.field-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable {\n color: var(--danger-color);\n}\n\n.field-related {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related:hover {\n text-decoration: underline;\n}\n\n.field-badges {\n display: flex;\n gap: 4px;\n}\n\n.badge {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk {\n background: color-mix(in srgb, var(--mj-status-warning) 15%, var(--mj-bg-surface));\n color: var(--mj-status-warning);\n}\n\n.badge.fk {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.badge.encrypted {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph 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: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.rel-icon.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n border: 1px solid var(--mj-brand-primary);\n}\n\n.field-chip.outgoing:hover {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.field-chip.incoming {\n background: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n border: 1px solid var(--mj-status-success);\n}\n\n.field-chip.incoming:hover {\n background: var(--mj-status-success);\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: 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: color-mix(in srgb, var(--mj-status-success) 15%, var(--mj-bg-surface));\n color: var(--mj-status-success);\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: var(--mj-bg-surface-sunken);\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: var(--mj-bg-surface-sunken);\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.detail-field-db-name {\n font-size: 12px;\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-secondary);\n margin-top: 4px;\n margin-bottom: 4px;\n}\n\n.field-description {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item .label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item .value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item .value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item .value.link {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item .value.link:hover {\n text-decoration: underline;\n}\n\n.value-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display {\n color: var(--text-primary);\n}\n\n/* ============================================================\n 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\n/* ============================================================\n IS-A TYPE HIERARCHY & VIRTUAL ENTITY STYLES\n ============================================================ */\n\n/* Badge variants for header */\n.isa-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n gap: 5px;\n cursor: default;\n white-space: nowrap;\n}\n\n.isa-badge.virtual {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n}\n\n.isa-badge.child-type {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 25%, transparent);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 22%, transparent);\n}\n\n.isa-badge.parent-type {\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 25%, transparent);\n}\n\n.isa-badge.overlapping {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 25%, transparent);\n}\n\n/* Breadcrumb under title */\n.isa-breadcrumb {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--mj-brand-primary);\n font-weight: 500;\n margin-top: 2px;\n padding: 2px 0;\n}\n\n.isa-breadcrumb i {\n font-size: 11px;\n opacity: 0.7;\n}\n\n/* IS-A Panel (overview section) */\n.isa-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-info-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n border-radius: 6px;\n font-size: 13px;\n color: var(--text-primary);\n}\n\n.isa-info-row.virtual-info {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, transparent);\n}\n\n.isa-info-row.virtual-info i {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.isa-info-row .code {\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n font-size: 12px;\n background: color-mix(in srgb, var(--mj-text-primary) 6%, transparent);\n padding: 1px 6px;\n border-radius: 3px;\n color: var(--mj-brand-primary);\n}\n\n/* Inheritance chain */\n.isa-chain {\n padding: 8px 0;\n}\n\n.isa-chain-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin-bottom: 8px;\n}\n\n.isa-chain-nodes {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n padding: 6px 0;\n}\n\n.isa-node {\n display: inline-flex;\n align-items: center;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.isa-node.current {\n background: var(--mj-brand-primary);\n color: white;\n}\n\n.isa-node.parent {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n}\n\n.isa-arrow {\n color: var(--text-muted);\n font-size: 11px;\n}\n\n.isa-inherited-fields {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: var(--mj-brand-primary);\n}\n\n/* Child types list */\n.isa-children {\n padding: 8px 0;\n}\n\n.isa-child-list {\n display: flex;\n flex-wrap: wrap;\n gap: 6px;\n padding: 4px 0;\n}\n\n.isa-child-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-success) 10%, transparent);\n color: var(--mj-status-success);\n border: 1px solid color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n}\n\n/* Clickable elements */\n.clickable {\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.clickable:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.isa-node.parent.clickable:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 35%, transparent);\n}\n\n.isa-child-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-success) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-success) 35%, transparent);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n font-size: 10px;\n font-weight: 600;\n gap: 3px;\n}\n\n.flag-badge.inherited {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.flag-badge.inherited i {\n font-size: 9px;\n}\n\n/* IS-A source section in field detail panel */\n.isa-source-section {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: var(--mj-brand-primary);\n}\n\n.isa-source-section h5 i {\n margin-right: 4px;\n}\n\n/* IS-A settings panel */\n.isa-settings-panel {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.isa-settings-panel .link {\n color: var(--mj-brand-primary);\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: var(--mj-brand-primary);\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted);\n}\n\n/* IS-A Field Inspector */\n.isa-field-inspector {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border-color);\n}\n\n.isa-field-inspector > .isa-chain-label {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.isa-inspector-groups {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 8px;\n}\n\n.isa-inspector-group {\n border-radius: 6px;\n padding: 8px 12px;\n border: 1px solid var(--border-color);\n}\n\n.isa-inspector-group.own {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-group.inherited {\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n border-color: color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n.isa-inspector-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 6px;\n}\n\n.isa-inspector-entity {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 12px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted);\n font-weight: 500;\n}\n\n.isa-inspector-fields {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.isa-inspector-field {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 4px;\n background: color-mix(in srgb, var(--mj-text-primary) 4%, transparent);\n color: var(--text-primary);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted);\n font-family: 'SF Mono', 'Cascadia Code', 'Consolas', monospace;\n}\n\n/* Sibling chips */\n.isa-siblings {\n padding: 8px 0;\n}\n\n.isa-sibling-chip {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 5px 12px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n background: color-mix(in srgb, var(--mj-status-warning) 10%, transparent);\n color: var(--mj-status-warning);\n border: 1px solid color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: color-mix(in srgb, var(--mj-status-warning) 20%, transparent);\n border-color: color-mix(in srgb, var(--mj-status-warning) 35%, transparent);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: color-mix(in srgb, var(--mj-text-primary) 8%, transparent);\n padding: 1px 6px;\n border-radius: 8px;\n margin-left: 2px;\n font-weight: 600;\n}\n\n.isa-child-count i {\n font-size: 10px;\n}\n\n/* ============================================================\n DATA SECTION\n ============================================================ */\n.data-section {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n padding: 0;\n overflow: hidden;\n}\n\n.data-viewer-container {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n/* ============================================================\n ORGANIC KEYS SECTION\n ============================================================ */\n\n.organic-key-cards {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 4px 0;\n}\n\n.organic-key-card {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n padding: 16px;\n transition: border-color 0.15s ease;\n}\n\n.organic-key-card:hover {\n border-color: var(--mj-border-strong);\n}\n\n.organic-key-card.incoming {\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.organic-key-card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-bottom: 8px;\n}\n\n.organic-key-name {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 600;\n font-size: 14px;\n color: var(--mj-text-primary);\n}\n\n.organic-key-icon {\n color: var(--mj-brand-primary);\n font-size: 14px;\n}\n\n.organic-key-badges {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.organic-key-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.organic-key-badge.strategy {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.organic-key-badge.fields {\n background: color-mix(in srgb, var(--mj-status-info) 10%, var(--mj-bg-surface));\n color: var(--mj-status-info-text, var(--mj-status-info));\n}\n\n.organic-key-description {\n font-size: 12px;\n color: var(--mj-text-muted);\n margin: 0 0 12px 0;\n line-height: 1.4;\n}\n\n.organic-key-targets {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.organic-key-target {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n padding: 10px 12px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n font-size: 13px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n\n.organic-key-target.clickable,\n.organic-key-card.clickable {\n cursor: pointer;\n}\n\n.organic-key-target.clickable:hover,\n.organic-key-card.clickable:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.target-main {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n flex: 1;\n}\n\n.target-header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.target-entity-icon {\n font-size: 12px;\n color: var(--mj-text-muted);\n width: 16px;\n text-align: center;\n}\n\n.target-entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n min-width: 0;\n}\n\n.target-nav-icon {\n font-size: 10px;\n color: var(--mj-text-disabled);\n margin-left: 4px;\n transition: color 0.15s ease;\n}\n\n.organic-key-target.clickable:hover .target-nav-icon,\n.organic-key-card.clickable:hover .target-nav-icon {\n color: var(--mj-brand-primary);\n}\n\n.target-match-detail {\n display: flex;\n align-items: center;\n gap: 6px;\n padding-left: 24px;\n}\n\n.match-type-badge {\n display: inline-flex;\n align-items: center;\n padding: 2px 8px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.match-type-badge.direct {\n background: color-mix(in srgb, var(--mj-status-success) 12%, var(--mj-bg-surface));\n color: var(--mj-status-success-text, var(--mj-status-success));\n}\n\n.match-type-badge.transitive {\n background: color-mix(in srgb, var(--mj-status-warning) 12%, var(--mj-bg-surface));\n color: var(--mj-status-warning-text, var(--mj-status-warning));\n}\n\n.match-fields {\n font-size: 11px;\n font-family: 'SF Mono', 'Fira Code', monospace;\n color: var(--mj-text-secondary);\n}\n\n.organic-key-detail-row {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 4px 0;\n font-size: 12px;\n}\n\n.detail-label {\n color: var(--mj-text-muted);\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.detail-value {\n color: var(--mj-text-secondary);\n font-family: 'SF Mono', 'Fira Code', monospace;\n}\n\n.empty-state-card {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-state-icon {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.3;\n}\n\n.empty-state-card h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px 0;\n}\n\n.empty-state-card p {\n font-size: 13px;\n line-height: 1.5;\n max-width: 500px;\n margin: 0;\n}\n", ".k-pane {\n background-color: var(--mj-bg-surface);\n}\n\n.content-margin {\n margin: 10px;\n}\n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: var(--mj-bg-surface);\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: var(--mj-bg-surface);\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n}\n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: var(--mj-bg-surface);\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: var(--mj-bg-surface-card);\n border-radius: 8px;\n box-shadow: 0 2px 4px var(--mj-shadow-sm);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: var(--mj-bg-surface-sunken);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: var(--mj-brand-primary);\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.collapsible-header .collapse-icon {\n color: var(--mj-text-muted);\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: var(--mj-bg-surface-card);\n border-left: 3px solid var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-header {\n background: var(--mj-bg-surface-sunken);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: var(--mj-bg-surface-card);\n border-bottom-color: var(--mj-brand-primary);\n}\n\n.form-card.related-entity .collapsible-title i {\n color: var(--mj-brand-primary);\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: var(--mj-bg-surface-card);\n border-bottom: 2px solid var(--mj-border-default);\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px var(--mj-shadow-sm);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-secondary);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n transform: translateY(-1px);\n box-shadow: 0 2px 4px var(--mj-shadow-md);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid var(--mj-border-strong);\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n}\n\n.form-section-controls .section-search::placeholder {\n color: var(--mj-text-muted);\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: var(--mj-status-warning);\n color: var(--mj-text-primary);\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: var(--mj-text-muted);\n}\n"] }]
|
|
3304
3589
|
}], null, null); })();
|
|
3305
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber:
|
|
3590
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber: 155 }); })();
|
|
3306
3591
|
//# sourceMappingURL=entity-form.component.js.map
|