@memberjunction/ng-core-entity-forms 5.8.0 → 5.9.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/Entities/entity-form.component.d.ts +1 -1
- package/dist/lib/custom/Entities/entity-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Entities/entity-form.component.js +530 -484
- package/dist/lib/custom/Entities/entity-form.component.js.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.d.ts +3 -0
- package/dist/lib/custom/Queries/query-form.component.d.ts.map +1 -1
- package/dist/lib/custom/Queries/query-form.component.js +314 -276
- package/dist/lib/custom/Queries/query-form.component.js.map +1 -1
- package/dist/lib/custom/custom-forms.module.d.ts +2 -1
- package/dist/lib/custom/custom-forms.module.d.ts.map +1 -1
- package/dist/lib/custom/custom-forms.module.js +7 -3
- package/dist/lib/custom/custom-forms.module.js.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js +61 -35
- package/dist/lib/generated/Entities/MJCompanyIntegration/mjcompanyintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.d.ts.map +1 -1
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js +24 -6
- package/dist/lib/generated/Entities/MJIntegration/mjintegration.form.component.js.map +1 -1
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js +137 -0
- package/dist/lib/generated/Entities/MJIntegrationObject/mjintegrationobject.form.component.js.map +1 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts +10 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.d.ts.map +1 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js +103 -0
- package/dist/lib/generated/Entities/MJIntegrationObjectField/mjintegrationobjectfield.form.component.js.map +1 -0
- package/dist/lib/generated/generated-forms.module.d.ts +119 -117
- package/dist/lib/generated/generated-forms.module.d.ts.map +1 -1
- package/dist/lib/generated/generated-forms.module.js +48 -42
- package/dist/lib/generated/generated-forms.module.js.map +1 -1
- package/package.json +30 -30
|
@@ -18,6 +18,7 @@ import * as i2 from "@angular/forms";
|
|
|
18
18
|
import * as i3 from "@memberjunction/ng-code-editor";
|
|
19
19
|
import * as i4 from "@memberjunction/ng-shared-generic";
|
|
20
20
|
import * as i5 from "@memberjunction/ng-entity-relationship-diagram";
|
|
21
|
+
import * as i6 from "@memberjunction/ng-entity-viewer";
|
|
21
22
|
const _c0 = () => [1, 2, 3, 4, 5];
|
|
22
23
|
const _c1 = a0 => [a0];
|
|
23
24
|
const _c2 = () => [];
|
|
@@ -91,7 +92,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_42_Template(rf,
|
|
|
91
92
|
i0.ɵɵtextInterpolate(ctx_r2.formattedRowCount);
|
|
92
93
|
} }
|
|
93
94
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_43_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
-
i0.ɵɵelementStart(0, "span",
|
|
95
|
+
i0.ɵɵelementStart(0, "span", 23);
|
|
95
96
|
i0.ɵɵelement(1, "i", 49);
|
|
96
97
|
i0.ɵɵelementEnd();
|
|
97
98
|
} }
|
|
@@ -424,7 +425,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Conditional_
|
|
|
424
425
|
} }
|
|
425
426
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
426
427
|
const _r6 = i0.ɵɵgetCurrentView();
|
|
427
|
-
i0.ɵɵelementStart(0, "section",
|
|
428
|
+
i0.ɵɵelementStart(0, "section", 28)(1, "div", 53)(2, "div", 54)(3, "div", 55);
|
|
428
429
|
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")); });
|
|
429
430
|
i0.ɵɵelementStart(4, "div", 56);
|
|
430
431
|
i0.ɵɵelement(5, "i", 57);
|
|
@@ -481,7 +482,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template(rf,
|
|
|
481
482
|
i0.ɵɵelement(46, "i", 62);
|
|
482
483
|
i0.ɵɵelementEnd()();
|
|
483
484
|
i0.ɵɵelementStart(47, "div", 67)(48, "div", 56);
|
|
484
|
-
i0.ɵɵelement(49, "i",
|
|
485
|
+
i0.ɵɵelement(49, "i", 22);
|
|
485
486
|
i0.ɵɵelementStart(50, "span");
|
|
486
487
|
i0.ɵɵtext(51, "Data");
|
|
487
488
|
i0.ɵɵelementEnd()();
|
|
@@ -619,15 +620,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
619
620
|
i0.ɵɵadvance(2);
|
|
620
621
|
i0.ɵɵproperty("disabled", ctx_r2.allFieldGroupsCollapsed);
|
|
621
622
|
} }
|
|
622
|
-
function
|
|
623
|
-
i0.ɵɵelementStart(0, "span",
|
|
623
|
+
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", 151);
|
|
624
625
|
i0.ɵɵtext(1, "Required");
|
|
625
626
|
i0.ɵɵelementEnd();
|
|
626
627
|
} }
|
|
627
|
-
function
|
|
628
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
628
629
|
const _r23 = i0.ɵɵgetCurrentView();
|
|
629
|
-
i0.ɵɵelementStart(0, "span",
|
|
630
|
-
i0.ɵɵlistener("click", function
|
|
630
|
+
i0.ɵɵelementStart(0, "span", 158);
|
|
631
|
+
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()); });
|
|
631
632
|
i0.ɵɵelement(1, "i", 62);
|
|
632
633
|
i0.ɵɵtext(2);
|
|
633
634
|
i0.ɵɵelementEnd();
|
|
@@ -637,23 +638,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
637
638
|
i0.ɵɵadvance(2);
|
|
638
639
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.getRelatedEntityName(field_r22), " ");
|
|
639
640
|
} }
|
|
640
|
-
function
|
|
641
|
-
i0.ɵɵelementStart(0, "span",
|
|
641
|
+
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", 154);
|
|
642
643
|
i0.ɵɵtext(1, "PK");
|
|
643
644
|
i0.ɵɵelementEnd();
|
|
644
645
|
} }
|
|
645
|
-
function
|
|
646
|
-
i0.ɵɵelementStart(0, "span",
|
|
646
|
+
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", 155);
|
|
647
648
|
i0.ɵɵtext(1, "FK");
|
|
648
649
|
i0.ɵɵelementEnd();
|
|
649
650
|
} }
|
|
650
|
-
function
|
|
651
|
-
i0.ɵɵelementStart(0, "span",
|
|
651
|
+
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", 156);
|
|
652
653
|
i0.ɵɵelement(1, "i", 66);
|
|
653
654
|
i0.ɵɵelementEnd();
|
|
654
655
|
} }
|
|
655
|
-
function
|
|
656
|
-
i0.ɵɵelementStart(0, "span",
|
|
656
|
+
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", 157);
|
|
657
658
|
i0.ɵɵelement(1, "i", 43);
|
|
658
659
|
i0.ɵɵtext(2);
|
|
659
660
|
i0.ɵɵelementEnd();
|
|
@@ -674,17 +675,20 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
674
675
|
i0.ɵɵelementStart(3, "div", 146)(4, "div", 147);
|
|
675
676
|
i0.ɵɵtext(5);
|
|
676
677
|
i0.ɵɵelementEnd();
|
|
677
|
-
i0.ɵɵelementStart(6, "div", 148)
|
|
678
|
-
i0.ɵɵtext(
|
|
678
|
+
i0.ɵɵelementStart(6, "div", 148);
|
|
679
|
+
i0.ɵɵtext(7);
|
|
679
680
|
i0.ɵɵelementEnd();
|
|
680
|
-
i0.ɵɵ
|
|
681
|
-
i0.ɵɵ
|
|
681
|
+
i0.ɵɵelementStart(8, "div", 149)(9, "span", 150);
|
|
682
|
+
i0.ɵɵtext(10);
|
|
683
|
+
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", 151);
|
|
685
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_12_Template, 3, 1, "span", 152);
|
|
682
686
|
i0.ɵɵelementEnd()();
|
|
683
|
-
i0.ɵɵelementStart(
|
|
684
|
-
i0.ɵɵconditionalCreate(
|
|
685
|
-
i0.ɵɵconditionalCreate(
|
|
686
|
-
i0.ɵɵconditionalCreate(
|
|
687
|
-
i0.ɵɵconditionalCreate(
|
|
687
|
+
i0.ɵɵelementStart(13, "div", 153);
|
|
688
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_14_Template, 2, 0, "span", 154);
|
|
689
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_15_Template, 2, 0, "span", 155);
|
|
690
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_16_Template, 2, 0, "span", 156);
|
|
691
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Conditional_17_Template, 3, 2, "span", 157);
|
|
688
692
|
i0.ɵɵelementEnd()();
|
|
689
693
|
} if (rf & 2) {
|
|
690
694
|
const field_r22 = ctx.$implicit;
|
|
@@ -694,24 +698,26 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
694
698
|
i0.ɵɵclassMap(ctx_r2.getFieldTypeIcon(field_r22));
|
|
695
699
|
i0.ɵɵadvance(3);
|
|
696
700
|
i0.ɵɵtextInterpolate(field_r22.DisplayName || field_r22.Name);
|
|
701
|
+
i0.ɵɵadvance(2);
|
|
702
|
+
i0.ɵɵtextInterpolate(field_r22.Name);
|
|
697
703
|
i0.ɵɵadvance(3);
|
|
698
704
|
i0.ɵɵtextInterpolate(ctx_r2.formatFieldType(field_r22));
|
|
699
705
|
i0.ɵɵadvance();
|
|
700
|
-
i0.ɵɵconditional(!field_r22.AllowsNull ?
|
|
706
|
+
i0.ɵɵconditional(!field_r22.AllowsNull ? 11 : -1);
|
|
701
707
|
i0.ɵɵadvance();
|
|
702
|
-
i0.ɵɵconditional(field_r22.RelatedEntityID ?
|
|
708
|
+
i0.ɵɵconditional(field_r22.RelatedEntityID ? 12 : -1);
|
|
703
709
|
i0.ɵɵadvance(2);
|
|
704
|
-
i0.ɵɵconditional(field_r22.IsPrimaryKey ?
|
|
710
|
+
i0.ɵɵconditional(field_r22.IsPrimaryKey ? 14 : -1);
|
|
705
711
|
i0.ɵɵadvance();
|
|
706
|
-
i0.ɵɵconditional(field_r22.RelatedEntityID && !field_r22.IsPrimaryKey ?
|
|
712
|
+
i0.ɵɵconditional(field_r22.RelatedEntityID && !field_r22.IsPrimaryKey ? 15 : -1);
|
|
707
713
|
i0.ɵɵadvance();
|
|
708
|
-
i0.ɵɵconditional(field_r22.Encrypt ?
|
|
714
|
+
i0.ɵɵconditional(field_r22.Encrypt ? 16 : -1);
|
|
709
715
|
i0.ɵɵadvance();
|
|
710
|
-
i0.ɵɵconditional(ctx_r2.IsInheritedField(field_r22) ?
|
|
716
|
+
i0.ɵɵconditional(ctx_r2.IsInheritedField(field_r22) ? 17 : -1);
|
|
711
717
|
} }
|
|
712
718
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
713
719
|
i0.ɵɵelementStart(0, "div", 142);
|
|
714
|
-
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Template,
|
|
720
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_For_2_Conditional_8_For_2_Template, 18, 13, "div", 143, i0.ɵɵrepeaterTrackByIdentity);
|
|
715
721
|
i0.ɵɵelementEnd();
|
|
716
722
|
} if (rf & 2) {
|
|
717
723
|
const group_r20 = i0.ɵɵnextContext().$implicit;
|
|
@@ -755,8 +761,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
755
761
|
i0.ɵɵadvance();
|
|
756
762
|
i0.ɵɵrepeater(ctx_r2.getFilteredFieldGroups());
|
|
757
763
|
} }
|
|
758
|
-
function
|
|
759
|
-
i0.ɵɵelementStart(0, "span",
|
|
764
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
765
|
+
i0.ɵɵelementStart(0, "span", 183);
|
|
760
766
|
i0.ɵɵtext(1);
|
|
761
767
|
i0.ɵɵelementEnd();
|
|
762
768
|
} if (rf & 2) {
|
|
@@ -764,30 +770,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
764
770
|
i0.ɵɵadvance();
|
|
765
771
|
i0.ɵɵtextInterpolate(field_r26.Length);
|
|
766
772
|
} }
|
|
767
|
-
function
|
|
768
|
-
i0.ɵɵelementStart(0, "span",
|
|
773
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
774
|
+
i0.ɵɵelementStart(0, "span", 184);
|
|
769
775
|
i0.ɵɵtext(1, "\u2014");
|
|
770
776
|
i0.ɵɵelementEnd();
|
|
771
777
|
} }
|
|
772
|
-
function
|
|
773
|
-
i0.ɵɵelementStart(0, "span",
|
|
774
|
-
i0.ɵɵelement(1, "i",
|
|
778
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
779
|
+
i0.ɵɵelementStart(0, "span", 188);
|
|
780
|
+
i0.ɵɵelement(1, "i", 194);
|
|
775
781
|
i0.ɵɵtext(2, " PK ");
|
|
776
782
|
i0.ɵɵelementEnd();
|
|
777
783
|
} }
|
|
778
|
-
function
|
|
779
|
-
i0.ɵɵelementStart(0, "span",
|
|
784
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
785
|
+
i0.ɵɵelementStart(0, "span", 189);
|
|
780
786
|
i0.ɵɵelement(1, "i", 20);
|
|
781
787
|
i0.ɵɵtext(2, " FK ");
|
|
782
788
|
i0.ɵɵelementEnd();
|
|
783
789
|
} }
|
|
784
|
-
function
|
|
785
|
-
i0.ɵɵelementStart(0, "span",
|
|
790
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
791
|
+
i0.ɵɵelementStart(0, "span", 190);
|
|
786
792
|
i0.ɵɵelement(1, "i", 66);
|
|
787
793
|
i0.ɵɵelementEnd();
|
|
788
794
|
} }
|
|
789
|
-
function
|
|
790
|
-
i0.ɵɵelementStart(0, "span",
|
|
795
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
796
|
+
i0.ɵɵelementStart(0, "span", 191);
|
|
791
797
|
i0.ɵɵelement(1, "i", 43);
|
|
792
798
|
i0.ɵɵtext(2);
|
|
793
799
|
i0.ɵɵelementEnd();
|
|
@@ -798,37 +804,40 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
798
804
|
i0.ɵɵadvance(2);
|
|
799
805
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.GetISAFieldSource(field_r26), " ");
|
|
800
806
|
} }
|
|
801
|
-
function
|
|
807
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Template(rf, ctx) { if (rf & 1) {
|
|
802
808
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
803
|
-
i0.ɵɵelementStart(0, "div",
|
|
804
|
-
i0.ɵɵlistener("click", function
|
|
805
|
-
i0.ɵɵelementStart(1, "div",
|
|
809
|
+
i0.ɵɵelementStart(0, "div", 172);
|
|
810
|
+
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", 173)(2, "span", 174);
|
|
806
812
|
i0.ɵɵtext(3);
|
|
807
813
|
i0.ɵɵelementEnd()();
|
|
808
|
-
i0.ɵɵelementStart(4, "div",
|
|
809
|
-
i0.ɵɵelement(5, "i",
|
|
810
|
-
i0.ɵɵelementStart(6, "span",
|
|
814
|
+
i0.ɵɵelementStart(4, "div", 175);
|
|
815
|
+
i0.ɵɵelement(5, "i", 176);
|
|
816
|
+
i0.ɵɵelementStart(6, "span", 177);
|
|
811
817
|
i0.ɵɵtext(7);
|
|
812
818
|
i0.ɵɵelementEnd()();
|
|
813
|
-
i0.ɵɵelementStart(8, "div",
|
|
819
|
+
i0.ɵɵelementStart(8, "div", 178)(9, "span", 179);
|
|
814
820
|
i0.ɵɵtext(10);
|
|
815
821
|
i0.ɵɵelementEnd()();
|
|
816
|
-
i0.ɵɵelementStart(11, "div",
|
|
817
|
-
i0.ɵɵ
|
|
818
|
-
i0.ɵɵ
|
|
822
|
+
i0.ɵɵelementStart(11, "div", 180)(12, "span", 181);
|
|
823
|
+
i0.ɵɵtext(13);
|
|
824
|
+
i0.ɵɵelementEnd()();
|
|
825
|
+
i0.ɵɵelementStart(14, "div", 182);
|
|
826
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_15_Template, 2, 1, "span", 183);
|
|
827
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_16_Template, 2, 0, "span", 184);
|
|
819
828
|
i0.ɵɵelementEnd();
|
|
820
|
-
i0.ɵɵelementStart(
|
|
821
|
-
i0.ɵɵelement(
|
|
822
|
-
i0.ɵɵtext(
|
|
829
|
+
i0.ɵɵelementStart(17, "div", 185)(18, "span", 186);
|
|
830
|
+
i0.ɵɵelement(19, "i");
|
|
831
|
+
i0.ɵɵtext(20);
|
|
823
832
|
i0.ɵɵelementEnd()();
|
|
824
|
-
i0.ɵɵelementStart(
|
|
825
|
-
i0.ɵɵconditionalCreate(
|
|
826
|
-
i0.ɵɵconditionalCreate(
|
|
827
|
-
i0.ɵɵconditionalCreate(
|
|
828
|
-
i0.ɵɵconditionalCreate(
|
|
833
|
+
i0.ɵɵelementStart(21, "div", 167)(22, "div", 187);
|
|
834
|
+
i0.ɵɵconditionalCreate(23, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_23_Template, 3, 0, "span", 188);
|
|
835
|
+
i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_24_Template, 3, 0, "span", 189);
|
|
836
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_25_Template, 2, 0, "span", 190);
|
|
837
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Conditional_26_Template, 3, 2, "span", 191);
|
|
829
838
|
i0.ɵɵelementEnd()();
|
|
830
|
-
i0.ɵɵelementStart(
|
|
831
|
-
i0.ɵɵtext(
|
|
839
|
+
i0.ɵɵelementStart(27, "div", 192)(28, "span", 193);
|
|
840
|
+
i0.ɵɵtext(29);
|
|
832
841
|
i0.ɵɵelementEnd()()();
|
|
833
842
|
} if (rf & 2) {
|
|
834
843
|
const field_r26 = ctx.$implicit;
|
|
@@ -839,13 +848,15 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
839
848
|
i0.ɵɵadvance(2);
|
|
840
849
|
i0.ɵɵclassMap(ctx_r2.getFieldTypeIcon(field_r26));
|
|
841
850
|
i0.ɵɵadvance(2);
|
|
851
|
+
i0.ɵɵtextInterpolate(field_r26.Name);
|
|
852
|
+
i0.ɵɵadvance(3);
|
|
842
853
|
i0.ɵɵtextInterpolate(field_r26.DisplayName || field_r26.Name);
|
|
843
854
|
i0.ɵɵadvance(3);
|
|
844
855
|
i0.ɵɵtextInterpolate(field_r26.Type);
|
|
845
856
|
i0.ɵɵadvance(2);
|
|
846
|
-
i0.ɵɵconditional(field_r26.Length > 0 ?
|
|
857
|
+
i0.ɵɵconditional(field_r26.Length > 0 ? 15 : -1);
|
|
847
858
|
i0.ɵɵadvance();
|
|
848
|
-
i0.ɵɵconditional(field_r26.Length <= 0 ?
|
|
859
|
+
i0.ɵɵconditional(field_r26.Length <= 0 ? 16 : -1);
|
|
849
860
|
i0.ɵɵadvance(2);
|
|
850
861
|
i0.ɵɵclassProp("required", !field_r26.AllowsNull)("optional", field_r26.AllowsNull);
|
|
851
862
|
i0.ɵɵadvance();
|
|
@@ -853,20 +864,20 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
853
864
|
i0.ɵɵadvance();
|
|
854
865
|
i0.ɵɵtextInterpolate1(" ", field_r26.AllowsNull ? "Optional" : "Required", " ");
|
|
855
866
|
i0.ɵɵadvance(3);
|
|
856
|
-
i0.ɵɵconditional(field_r26.IsPrimaryKey ?
|
|
867
|
+
i0.ɵɵconditional(field_r26.IsPrimaryKey ? 23 : -1);
|
|
857
868
|
i0.ɵɵadvance();
|
|
858
|
-
i0.ɵɵconditional(field_r26.RelatedEntityID && !field_r26.IsPrimaryKey ?
|
|
869
|
+
i0.ɵɵconditional(field_r26.RelatedEntityID && !field_r26.IsPrimaryKey ? 24 : -1);
|
|
859
870
|
i0.ɵɵadvance();
|
|
860
|
-
i0.ɵɵconditional(field_r26.Encrypt ?
|
|
871
|
+
i0.ɵɵconditional(field_r26.Encrypt ? 25 : -1);
|
|
861
872
|
i0.ɵɵadvance();
|
|
862
|
-
i0.ɵɵconditional(ctx_r2.IsInheritedField(field_r26) ?
|
|
873
|
+
i0.ɵɵconditional(ctx_r2.IsInheritedField(field_r26) ? 26 : -1);
|
|
863
874
|
i0.ɵɵadvance(2);
|
|
864
875
|
i0.ɵɵproperty("title", field_r26.Description || "");
|
|
865
876
|
i0.ɵɵadvance();
|
|
866
877
|
i0.ɵɵtextInterpolate(field_r26.Description || "\u2014");
|
|
867
878
|
} }
|
|
868
|
-
function
|
|
869
|
-
i0.ɵɵelementStart(0, "div",
|
|
879
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
880
|
+
i0.ɵɵelementStart(0, "div", 171);
|
|
870
881
|
i0.ɵɵelement(1, "i", 120);
|
|
871
882
|
i0.ɵɵelementStart(2, "span");
|
|
872
883
|
i0.ɵɵtext(3, "No fields match your search");
|
|
@@ -874,43 +885,48 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
874
885
|
} }
|
|
875
886
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
876
887
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
877
|
-
i0.ɵɵelementStart(0, "div", 130)(1, "div",
|
|
888
|
+
i0.ɵɵelementStart(0, "div", 130)(1, "div", 159)(2, "div", 160);
|
|
878
889
|
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")); });
|
|
879
890
|
i0.ɵɵtext(3, " # ");
|
|
880
|
-
i0.ɵɵelement(4, "i",
|
|
891
|
+
i0.ɵɵelement(4, "i", 161);
|
|
881
892
|
i0.ɵɵelementEnd();
|
|
882
|
-
i0.ɵɵelementStart(5, "div",
|
|
893
|
+
i0.ɵɵelementStart(5, "div", 162);
|
|
883
894
|
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")); });
|
|
884
895
|
i0.ɵɵtext(6, " Field Name ");
|
|
885
|
-
i0.ɵɵelement(7, "i",
|
|
896
|
+
i0.ɵɵelement(7, "i", 161);
|
|
897
|
+
i0.ɵɵelementEnd();
|
|
898
|
+
i0.ɵɵelementStart(8, "div", 163);
|
|
899
|
+
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
|
+
i0.ɵɵtext(9, " Display Name ");
|
|
901
|
+
i0.ɵɵelement(10, "i", 161);
|
|
886
902
|
i0.ɵɵelementEnd();
|
|
887
|
-
i0.ɵɵelementStart(
|
|
888
|
-
i0.ɵɵlistener("click", function
|
|
889
|
-
i0.ɵɵtext(
|
|
890
|
-
i0.ɵɵelement(
|
|
903
|
+
i0.ɵɵelementStart(11, "div", 164);
|
|
904
|
+
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
|
+
i0.ɵɵtext(12, " Type ");
|
|
906
|
+
i0.ɵɵelement(13, "i", 161);
|
|
891
907
|
i0.ɵɵelementEnd();
|
|
892
|
-
i0.ɵɵelementStart(
|
|
893
|
-
i0.ɵɵlistener("click", function
|
|
894
|
-
i0.ɵɵtext(
|
|
895
|
-
i0.ɵɵelement(
|
|
908
|
+
i0.ɵɵelementStart(14, "div", 165);
|
|
909
|
+
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
|
+
i0.ɵɵtext(15, " Length ");
|
|
911
|
+
i0.ɵɵelement(16, "i", 161);
|
|
896
912
|
i0.ɵɵelementEnd();
|
|
897
|
-
i0.ɵɵelementStart(
|
|
898
|
-
i0.ɵɵlistener("click", function
|
|
899
|
-
i0.ɵɵtext(
|
|
900
|
-
i0.ɵɵelement(
|
|
913
|
+
i0.ɵɵelementStart(17, "div", 166);
|
|
914
|
+
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
|
+
i0.ɵɵtext(18, " Required ");
|
|
916
|
+
i0.ɵɵelement(19, "i", 161);
|
|
901
917
|
i0.ɵɵelementEnd();
|
|
902
|
-
i0.ɵɵelementStart(
|
|
903
|
-
i0.ɵɵtext(
|
|
918
|
+
i0.ɵɵelementStart(20, "div", 167);
|
|
919
|
+
i0.ɵɵtext(21, "Flags");
|
|
904
920
|
i0.ɵɵelementEnd();
|
|
905
|
-
i0.ɵɵelementStart(
|
|
906
|
-
i0.ɵɵlistener("click", function
|
|
907
|
-
i0.ɵɵtext(
|
|
908
|
-
i0.ɵɵelement(
|
|
921
|
+
i0.ɵɵelementStart(22, "div", 168);
|
|
922
|
+
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
|
+
i0.ɵɵtext(23, " Description ");
|
|
924
|
+
i0.ɵɵelement(24, "i", 161);
|
|
909
925
|
i0.ɵɵelementEnd()();
|
|
910
|
-
i0.ɵɵelementStart(
|
|
911
|
-
i0.ɵɵrepeaterCreate(
|
|
926
|
+
i0.ɵɵelementStart(25, "div", 169);
|
|
927
|
+
i0.ɵɵrepeaterCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_For_27_Template, 30, 23, "div", 170, i0.ɵɵrepeaterTrackByIdentity);
|
|
912
928
|
i0.ɵɵelementEnd();
|
|
913
|
-
i0.ɵɵconditionalCreate(
|
|
929
|
+
i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Conditional_28_Template, 4, 0, "div", 171);
|
|
914
930
|
i0.ɵɵelementEnd();
|
|
915
931
|
} if (rf & 2) {
|
|
916
932
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -923,6 +939,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
923
939
|
i0.ɵɵadvance(2);
|
|
924
940
|
i0.ɵɵproperty("ngClass", ctx_r2.fieldListSortColumn === "Name" ? ctx_r2.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
925
941
|
i0.ɵɵadvance();
|
|
942
|
+
i0.ɵɵclassProp("sorted", ctx_r2.fieldListSortColumn === "DisplayName");
|
|
943
|
+
i0.ɵɵadvance(2);
|
|
944
|
+
i0.ɵɵproperty("ngClass", ctx_r2.fieldListSortColumn === "DisplayName" ? ctx_r2.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
945
|
+
i0.ɵɵadvance();
|
|
926
946
|
i0.ɵɵclassProp("sorted", ctx_r2.fieldListSortColumn === "Type");
|
|
927
947
|
i0.ɵɵadvance(2);
|
|
928
948
|
i0.ɵɵproperty("ngClass", ctx_r2.fieldListSortColumn === "Type" ? ctx_r2.fieldListSortDirection === "asc" ? "fa-caret-up" : "fa-caret-down" : "fa-sort");
|
|
@@ -941,11 +961,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_
|
|
|
941
961
|
i0.ɵɵadvance(2);
|
|
942
962
|
i0.ɵɵrepeater(ctx_r2.getFilteredFieldsList());
|
|
943
963
|
i0.ɵɵadvance(2);
|
|
944
|
-
i0.ɵɵconditional(ctx_r2.getFilteredFieldsList().length === 0 ?
|
|
964
|
+
i0.ɵɵconditional(ctx_r2.getFilteredFieldsList().length === 0 ? 28 : -1);
|
|
945
965
|
} }
|
|
946
966
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
947
967
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
948
|
-
i0.ɵɵelementStart(0, "section",
|
|
968
|
+
i0.ɵɵelementStart(0, "section", 29)(1, "div", 118)(2, "div", 119);
|
|
949
969
|
i0.ɵɵelement(3, "i", 120);
|
|
950
970
|
i0.ɵɵelementStart(4, "input", 121);
|
|
951
971
|
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)); });
|
|
@@ -962,7 +982,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template(rf,
|
|
|
962
982
|
i0.ɵɵelementEnd()();
|
|
963
983
|
i0.ɵɵelementStart(12, "div", 128);
|
|
964
984
|
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_13_Template, 3, 0, "div", 129);
|
|
965
|
-
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template,
|
|
985
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Conditional_14_Template, 29, 22, "div", 130);
|
|
966
986
|
i0.ɵɵelementEnd()();
|
|
967
987
|
} if (rf & 2) {
|
|
968
988
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -981,7 +1001,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template(rf,
|
|
|
981
1001
|
} }
|
|
982
1002
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
983
1003
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
984
|
-
i0.ɵɵelementStart(0, "button",
|
|
1004
|
+
i0.ɵɵelementStart(0, "button", 203);
|
|
985
1005
|
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)); });
|
|
986
1006
|
i0.ɵɵtext(1);
|
|
987
1007
|
i0.ɵɵelementEnd();
|
|
@@ -994,11 +1014,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
994
1014
|
i0.ɵɵtextInterpolate1(" ", d_r29, " ");
|
|
995
1015
|
} }
|
|
996
1016
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
997
|
-
i0.ɵɵelementStart(0, "div",
|
|
1017
|
+
i0.ɵɵelementStart(0, "div", 197)(1, "span", 200);
|
|
998
1018
|
i0.ɵɵtext(2, "Depth:");
|
|
999
1019
|
i0.ɵɵelementEnd();
|
|
1000
|
-
i0.ɵɵelementStart(3, "div",
|
|
1001
|
-
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_For_5_Template, 2, 4, "button",
|
|
1020
|
+
i0.ɵɵelementStart(3, "div", 201);
|
|
1021
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_For_5_Template, 2, 4, "button", 202, i0.ɵɵrepeaterTrackByIdentity);
|
|
1002
1022
|
i0.ɵɵelementEnd()();
|
|
1003
1023
|
} if (rf & 2) {
|
|
1004
1024
|
i0.ɵɵadvance(4);
|
|
@@ -1006,7 +1026,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1006
1026
|
} }
|
|
1007
1027
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1008
1028
|
const _r30 = i0.ɵɵgetCurrentView();
|
|
1009
|
-
i0.ɵɵelementStart(0, "div",
|
|
1029
|
+
i0.ɵɵelementStart(0, "div", 198)(1, "mj-erd-composite", 204);
|
|
1010
1030
|
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)); });
|
|
1011
1031
|
i0.ɵɵelementEnd()();
|
|
1012
1032
|
} if (rf & 2) {
|
|
@@ -1016,7 +1036,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1016
1036
|
} }
|
|
1017
1037
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1018
1038
|
const _r31 = i0.ɵɵgetCurrentView();
|
|
1019
|
-
i0.ɵɵelementStart(0, "span",
|
|
1039
|
+
i0.ɵɵelementStart(0, "span", 217);
|
|
1020
1040
|
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)); });
|
|
1021
1041
|
i0.ɵɵelement(1, "i", 20);
|
|
1022
1042
|
i0.ɵɵtext(2);
|
|
@@ -1028,14 +1048,14 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1028
1048
|
i0.ɵɵtextInterpolate1(" ", field_r32.Name, " ");
|
|
1029
1049
|
} }
|
|
1030
1050
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1031
|
-
i0.ɵɵelementStart(0, "div",
|
|
1051
|
+
i0.ɵɵelementStart(0, "div", 209)(1, "div", 212)(2, "div", 213);
|
|
1032
1052
|
i0.ɵɵelement(3, "i", 62);
|
|
1033
1053
|
i0.ɵɵelementEnd();
|
|
1034
|
-
i0.ɵɵelementStart(4, "div",
|
|
1054
|
+
i0.ɵɵelementStart(4, "div", 214);
|
|
1035
1055
|
i0.ɵɵtext(5);
|
|
1036
1056
|
i0.ɵɵelementEnd()();
|
|
1037
|
-
i0.ɵɵelementStart(6, "div",
|
|
1038
|
-
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_For_8_Template, 3, 2, "span",
|
|
1057
|
+
i0.ɵɵelementStart(6, "div", 215);
|
|
1058
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_For_8_Template, 3, 2, "span", 216, i0.ɵɵrepeaterTrackByIdentity);
|
|
1039
1059
|
i0.ɵɵelementEnd()();
|
|
1040
1060
|
} if (rf & 2) {
|
|
1041
1061
|
const group_r33 = ctx.$implicit;
|
|
@@ -1045,18 +1065,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1045
1065
|
i0.ɵɵrepeater(group_r33.fields);
|
|
1046
1066
|
} }
|
|
1047
1067
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1048
|
-
i0.ɵɵelementStart(0, "div",
|
|
1068
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "p");
|
|
1049
1069
|
i0.ɵɵtext(2, "No outgoing relationships");
|
|
1050
1070
|
i0.ɵɵelementEnd()();
|
|
1051
1071
|
} }
|
|
1052
1072
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1053
|
-
i0.ɵɵelement(0, "i",
|
|
1073
|
+
i0.ɵɵelement(0, "i", 221);
|
|
1054
1074
|
} }
|
|
1055
1075
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Template(rf, ctx) { if (rf & 1) {
|
|
1056
|
-
i0.ɵɵelementStart(0, "span",
|
|
1076
|
+
i0.ɵɵelementStart(0, "span", 220);
|
|
1057
1077
|
i0.ɵɵelement(1, "i", 20);
|
|
1058
1078
|
i0.ɵɵtext(2);
|
|
1059
|
-
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Conditional_3_Template, 1, 0, "i",
|
|
1079
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Conditional_3_Template, 1, 0, "i", 221);
|
|
1060
1080
|
i0.ɵɵelementEnd();
|
|
1061
1081
|
} if (rf & 2) {
|
|
1062
1082
|
const field_r34 = ctx.$implicit;
|
|
@@ -1067,14 +1087,14 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1067
1087
|
i0.ɵɵconditional(field_r34.bundleInAPI ? 3 : -1);
|
|
1068
1088
|
} }
|
|
1069
1089
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_Template(rf, ctx) { if (rf & 1) {
|
|
1070
|
-
i0.ɵɵelementStart(0, "div",
|
|
1071
|
-
i0.ɵɵelement(3, "i",
|
|
1090
|
+
i0.ɵɵelementStart(0, "div", 209)(1, "div", 212)(2, "div", 218);
|
|
1091
|
+
i0.ɵɵelement(3, "i", 219);
|
|
1072
1092
|
i0.ɵɵelementEnd();
|
|
1073
|
-
i0.ɵɵelementStart(4, "div",
|
|
1093
|
+
i0.ɵɵelementStart(4, "div", 214);
|
|
1074
1094
|
i0.ɵɵtext(5);
|
|
1075
1095
|
i0.ɵɵelementEnd()();
|
|
1076
|
-
i0.ɵɵelementStart(6, "div",
|
|
1077
|
-
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Template, 4, 3, "span",
|
|
1096
|
+
i0.ɵɵelementStart(6, "div", 215);
|
|
1097
|
+
i0.ɵɵrepeaterCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_For_8_Template, 4, 3, "span", 220, i0.ɵɵrepeaterTrackByIdentity);
|
|
1078
1098
|
i0.ɵɵelementEnd()();
|
|
1079
1099
|
} if (rf & 2) {
|
|
1080
1100
|
const group_r35 = ctx.$implicit;
|
|
@@ -1084,30 +1104,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1084
1104
|
i0.ɵɵrepeater(group_r35.fields);
|
|
1085
1105
|
} }
|
|
1086
1106
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1087
|
-
i0.ɵɵelementStart(0, "div",
|
|
1107
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "p");
|
|
1088
1108
|
i0.ɵɵtext(2, "No incoming relationships");
|
|
1089
1109
|
i0.ɵɵelementEnd()();
|
|
1090
1110
|
} }
|
|
1091
1111
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1092
|
-
i0.ɵɵelementStart(0, "div",
|
|
1093
|
-
i0.ɵɵelement(3, "i",
|
|
1112
|
+
i0.ɵɵelementStart(0, "div", 199)(1, "div", 205)(2, "h3", 206);
|
|
1113
|
+
i0.ɵɵelement(3, "i", 207);
|
|
1094
1114
|
i0.ɵɵtext(4, " Outgoing (References to other entities) ");
|
|
1095
1115
|
i0.ɵɵelementStart(5, "span", 141);
|
|
1096
1116
|
i0.ɵɵtext(6);
|
|
1097
1117
|
i0.ɵɵelementEnd()();
|
|
1098
|
-
i0.ɵɵelementStart(7, "div",
|
|
1099
|
-
i0.ɵɵrepeaterCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_Template, 9, 1, "div",
|
|
1100
|
-
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_10_Template, 3, 0, "div",
|
|
1118
|
+
i0.ɵɵelementStart(7, "div", 208);
|
|
1119
|
+
i0.ɵɵrepeaterCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_9_Template, 9, 1, "div", 209, i0.ɵɵrepeaterTrackByIdentity);
|
|
1120
|
+
i0.ɵɵconditionalCreate(10, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_10_Template, 3, 0, "div", 210);
|
|
1101
1121
|
i0.ɵɵelementEnd()();
|
|
1102
|
-
i0.ɵɵelementStart(11, "div",
|
|
1103
|
-
i0.ɵɵelement(13, "i",
|
|
1122
|
+
i0.ɵɵelementStart(11, "div", 205)(12, "h3", 206);
|
|
1123
|
+
i0.ɵɵelement(13, "i", 211);
|
|
1104
1124
|
i0.ɵɵtext(14, " Incoming (Entities that reference this one) ");
|
|
1105
1125
|
i0.ɵɵelementStart(15, "span", 141);
|
|
1106
1126
|
i0.ɵɵtext(16);
|
|
1107
1127
|
i0.ɵɵelementEnd()();
|
|
1108
|
-
i0.ɵɵelementStart(17, "div",
|
|
1109
|
-
i0.ɵɵrepeaterCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_Template, 9, 1, "div",
|
|
1110
|
-
i0.ɵɵconditionalCreate(20, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_20_Template, 3, 0, "div",
|
|
1128
|
+
i0.ɵɵelementStart(17, "div", 208);
|
|
1129
|
+
i0.ɵɵrepeaterCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_For_19_Template, 9, 1, "div", 209, i0.ɵɵrepeaterTrackByIdentity);
|
|
1130
|
+
i0.ɵɵconditionalCreate(20, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Conditional_20_Template, 3, 0, "div", 210);
|
|
1111
1131
|
i0.ɵɵelementEnd()()();
|
|
1112
1132
|
} if (rf & 2) {
|
|
1113
1133
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1126,21 +1146,21 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_
|
|
|
1126
1146
|
} }
|
|
1127
1147
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
1128
1148
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
1129
|
-
i0.ɵɵelementStart(0, "section",
|
|
1149
|
+
i0.ɵɵelementStart(0, "section", 30)(1, "div", 118)(2, "div", 195)(3, "button", 196);
|
|
1130
1150
|
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"); });
|
|
1131
1151
|
i0.ɵɵelement(4, "i", 64);
|
|
1132
1152
|
i0.ɵɵtext(5, " Diagram ");
|
|
1133
1153
|
i0.ɵɵelementEnd();
|
|
1134
|
-
i0.ɵɵelementStart(6, "button",
|
|
1154
|
+
i0.ɵɵelementStart(6, "button", 196);
|
|
1135
1155
|
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"); });
|
|
1136
1156
|
i0.ɵɵelement(7, "i", 126);
|
|
1137
1157
|
i0.ɵɵtext(8, " List ");
|
|
1138
1158
|
i0.ɵɵelementEnd()();
|
|
1139
|
-
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_Template, 6, 1, "div",
|
|
1159
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_9_Template, 6, 1, "div", 197);
|
|
1140
1160
|
i0.ɵɵelementEnd();
|
|
1141
1161
|
i0.ɵɵelementStart(10, "div", 53);
|
|
1142
|
-
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template, 2, 7, "div",
|
|
1143
|
-
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Template, 21, 4, "div",
|
|
1162
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_11_Template, 2, 7, "div", 198);
|
|
1163
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Conditional_12_Template, 21, 4, "div", 199);
|
|
1144
1164
|
i0.ɵɵelementEnd()();
|
|
1145
1165
|
} if (rf & 2) {
|
|
1146
1166
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1156,52 +1176,52 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template(rf,
|
|
|
1156
1176
|
i0.ɵɵconditional(ctx_r2.relationshipViewMode === "list" ? 12 : -1);
|
|
1157
1177
|
} }
|
|
1158
1178
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1159
|
-
i0.ɵɵelementStart(0, "span",
|
|
1179
|
+
i0.ɵɵelementStart(0, "span", 232);
|
|
1160
1180
|
i0.ɵɵtext(1, "R");
|
|
1161
1181
|
i0.ɵɵelementEnd();
|
|
1162
1182
|
} }
|
|
1163
1183
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1164
|
-
i0.ɵɵelementStart(0, "span",
|
|
1184
|
+
i0.ɵɵelementStart(0, "span", 233);
|
|
1165
1185
|
i0.ɵɵtext(1, "C");
|
|
1166
1186
|
i0.ɵɵelementEnd();
|
|
1167
1187
|
} }
|
|
1168
1188
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1169
|
-
i0.ɵɵelementStart(0, "span",
|
|
1189
|
+
i0.ɵɵelementStart(0, "span", 234);
|
|
1170
1190
|
i0.ɵɵtext(1, "U");
|
|
1171
1191
|
i0.ɵɵelementEnd();
|
|
1172
1192
|
} }
|
|
1173
1193
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1174
|
-
i0.ɵɵelementStart(0, "span",
|
|
1194
|
+
i0.ɵɵelementStart(0, "span", 235);
|
|
1175
1195
|
i0.ɵɵtext(1, "D");
|
|
1176
1196
|
i0.ɵɵelementEnd();
|
|
1177
1197
|
} }
|
|
1178
1198
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1179
|
-
i0.ɵɵelementStart(0, "span",
|
|
1199
|
+
i0.ɵɵelementStart(0, "span", 236);
|
|
1180
1200
|
i0.ɵɵtext(1, "None");
|
|
1181
1201
|
i0.ɵɵelementEnd();
|
|
1182
1202
|
} }
|
|
1183
1203
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Template(rf, ctx) { if (rf & 1) {
|
|
1184
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
1204
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 229);
|
|
1185
1205
|
i0.ɵɵtext(2);
|
|
1186
1206
|
i0.ɵɵelementEnd();
|
|
1187
|
-
i0.ɵɵelementStart(3, "td",
|
|
1188
|
-
i0.ɵɵelement(4, "i",
|
|
1207
|
+
i0.ɵɵelementStart(3, "td", 224);
|
|
1208
|
+
i0.ɵɵelement(4, "i", 230);
|
|
1189
1209
|
i0.ɵɵelementEnd();
|
|
1190
|
-
i0.ɵɵelementStart(5, "td",
|
|
1191
|
-
i0.ɵɵelement(6, "i",
|
|
1210
|
+
i0.ɵɵelementStart(5, "td", 224);
|
|
1211
|
+
i0.ɵɵelement(6, "i", 230);
|
|
1192
1212
|
i0.ɵɵelementEnd();
|
|
1193
|
-
i0.ɵɵelementStart(7, "td",
|
|
1194
|
-
i0.ɵɵelement(8, "i",
|
|
1213
|
+
i0.ɵɵelementStart(7, "td", 224);
|
|
1214
|
+
i0.ɵɵelement(8, "i", 230);
|
|
1195
1215
|
i0.ɵɵelementEnd();
|
|
1196
|
-
i0.ɵɵelementStart(9, "td",
|
|
1197
|
-
i0.ɵɵelement(10, "i",
|
|
1216
|
+
i0.ɵɵelementStart(9, "td", 224);
|
|
1217
|
+
i0.ɵɵelement(10, "i", 230);
|
|
1198
1218
|
i0.ɵɵelementEnd();
|
|
1199
|
-
i0.ɵɵelementStart(11, "td",
|
|
1200
|
-
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_12_Template, 2, 0, "span",
|
|
1201
|
-
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_13_Template, 2, 0, "span",
|
|
1202
|
-
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_14_Template, 2, 0, "span",
|
|
1203
|
-
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_15_Template, 2, 0, "span",
|
|
1204
|
-
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_16_Template, 2, 0, "span",
|
|
1219
|
+
i0.ɵɵelementStart(11, "td", 231);
|
|
1220
|
+
i0.ɵɵconditionalCreate(12, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_12_Template, 2, 0, "span", 232);
|
|
1221
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_13_Template, 2, 0, "span", 233);
|
|
1222
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_14_Template, 2, 0, "span", 234);
|
|
1223
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_15_Template, 2, 0, "span", 235);
|
|
1224
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Conditional_16_Template, 2, 0, "span", 236);
|
|
1205
1225
|
i0.ɵɵelementEnd()();
|
|
1206
1226
|
} if (rf & 2) {
|
|
1207
1227
|
const perm_r36 = ctx.$implicit;
|
|
@@ -1228,26 +1248,26 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Templ
|
|
|
1228
1248
|
i0.ɵɵconditional(!perm_r36.ReadRLSFilterID && !perm_r36.CreateRLSFilterID && !perm_r36.UpdateRLSFilterID && !perm_r36.DeleteRLSFilterID ? 16 : -1);
|
|
1229
1249
|
} }
|
|
1230
1250
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
1231
|
-
i0.ɵɵelementStart(0, "div",
|
|
1251
|
+
i0.ɵɵelementStart(0, "div", 210);
|
|
1232
1252
|
i0.ɵɵelement(1, "i", 21);
|
|
1233
1253
|
i0.ɵɵelementStart(2, "p");
|
|
1234
1254
|
i0.ɵɵtext(3, "No permissions configured");
|
|
1235
1255
|
i0.ɵɵelementEnd()();
|
|
1236
1256
|
} }
|
|
1237
1257
|
function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
1238
|
-
i0.ɵɵelementStart(0, "section",
|
|
1258
|
+
i0.ɵɵelementStart(0, "section", 31)(1, "div", 53)(2, "div", 222)(3, "table", 223)(4, "thead")(5, "tr")(6, "th");
|
|
1239
1259
|
i0.ɵɵtext(7, "Role");
|
|
1240
1260
|
i0.ɵɵelementEnd();
|
|
1241
|
-
i0.ɵɵelementStart(8, "th",
|
|
1261
|
+
i0.ɵɵelementStart(8, "th", 224);
|
|
1242
1262
|
i0.ɵɵtext(9, "Create");
|
|
1243
1263
|
i0.ɵɵelementEnd();
|
|
1244
|
-
i0.ɵɵelementStart(10, "th",
|
|
1264
|
+
i0.ɵɵelementStart(10, "th", 224);
|
|
1245
1265
|
i0.ɵɵtext(11, "Read");
|
|
1246
1266
|
i0.ɵɵelementEnd();
|
|
1247
|
-
i0.ɵɵelementStart(12, "th",
|
|
1267
|
+
i0.ɵɵelementStart(12, "th", 224);
|
|
1248
1268
|
i0.ɵɵtext(13, "Update");
|
|
1249
1269
|
i0.ɵɵelementEnd();
|
|
1250
|
-
i0.ɵɵelementStart(14, "th",
|
|
1270
|
+
i0.ɵɵelementStart(14, "th", 224);
|
|
1251
1271
|
i0.ɵɵtext(15, "Delete");
|
|
1252
1272
|
i0.ɵɵelementEnd();
|
|
1253
1273
|
i0.ɵɵelementStart(16, "th");
|
|
@@ -1256,43 +1276,43 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template(rf,
|
|
|
1256
1276
|
i0.ɵɵelementStart(18, "tbody");
|
|
1257
1277
|
i0.ɵɵrepeaterCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_54_For_20_Template, 17, 10, "tr", null, i0.ɵɵrepeaterTrackByIdentity);
|
|
1258
1278
|
i0.ɵɵelementEnd()();
|
|
1259
|
-
i0.ɵɵconditionalCreate(21, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_21_Template, 4, 0, "div",
|
|
1279
|
+
i0.ɵɵconditionalCreate(21, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Conditional_21_Template, 4, 0, "div", 210);
|
|
1260
1280
|
i0.ɵɵelementEnd();
|
|
1261
|
-
i0.ɵɵelementStart(22, "div",
|
|
1262
|
-
i0.ɵɵelement(24, "i",
|
|
1281
|
+
i0.ɵɵelementStart(22, "div", 225)(23, "h3", 69);
|
|
1282
|
+
i0.ɵɵelement(24, "i", 226);
|
|
1263
1283
|
i0.ɵɵtext(25, " API Capabilities ");
|
|
1264
1284
|
i0.ɵɵelementEnd();
|
|
1265
|
-
i0.ɵɵelementStart(26, "div",
|
|
1285
|
+
i0.ɵɵelementStart(26, "div", 227)(27, "div", 228);
|
|
1266
1286
|
i0.ɵɵelement(28, "i", 98);
|
|
1267
1287
|
i0.ɵɵelementStart(29, "span");
|
|
1268
1288
|
i0.ɵɵtext(30, "Include in API");
|
|
1269
1289
|
i0.ɵɵelementEnd()();
|
|
1270
|
-
i0.ɵɵelementStart(31, "div",
|
|
1290
|
+
i0.ɵɵelementStart(31, "div", 228);
|
|
1271
1291
|
i0.ɵɵelement(32, "i", 98);
|
|
1272
1292
|
i0.ɵɵelementStart(33, "span");
|
|
1273
1293
|
i0.ɵɵtext(34, "Allow All Rows");
|
|
1274
1294
|
i0.ɵɵelementEnd()();
|
|
1275
|
-
i0.ɵɵelementStart(35, "div",
|
|
1295
|
+
i0.ɵɵelementStart(35, "div", 228);
|
|
1276
1296
|
i0.ɵɵelement(36, "i", 98);
|
|
1277
1297
|
i0.ɵɵelementStart(37, "span");
|
|
1278
1298
|
i0.ɵɵtext(38, "Allow Create");
|
|
1279
1299
|
i0.ɵɵelementEnd()();
|
|
1280
|
-
i0.ɵɵelementStart(39, "div",
|
|
1300
|
+
i0.ɵɵelementStart(39, "div", 228);
|
|
1281
1301
|
i0.ɵɵelement(40, "i", 98);
|
|
1282
1302
|
i0.ɵɵelementStart(41, "span");
|
|
1283
1303
|
i0.ɵɵtext(42, "Allow Update");
|
|
1284
1304
|
i0.ɵɵelementEnd()();
|
|
1285
|
-
i0.ɵɵelementStart(43, "div",
|
|
1305
|
+
i0.ɵɵelementStart(43, "div", 228);
|
|
1286
1306
|
i0.ɵɵelement(44, "i", 98);
|
|
1287
1307
|
i0.ɵɵelementStart(45, "span");
|
|
1288
1308
|
i0.ɵɵtext(46, "Allow Delete");
|
|
1289
1309
|
i0.ɵɵelementEnd()();
|
|
1290
|
-
i0.ɵɵelementStart(47, "div",
|
|
1310
|
+
i0.ɵɵelementStart(47, "div", 228);
|
|
1291
1311
|
i0.ɵɵelement(48, "i", 98);
|
|
1292
1312
|
i0.ɵɵelementStart(49, "span");
|
|
1293
1313
|
i0.ɵɵtext(50, "User Search");
|
|
1294
1314
|
i0.ɵɵelementEnd()();
|
|
1295
|
-
i0.ɵɵelementStart(51, "div",
|
|
1315
|
+
i0.ɵɵelementStart(51, "div", 228);
|
|
1296
1316
|
i0.ɵɵelement(52, "i", 98);
|
|
1297
1317
|
i0.ɵɵelementStart(53, "span");
|
|
1298
1318
|
i0.ɵɵtext(54, "Custom Resolver");
|
|
@@ -1332,86 +1352,101 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template(rf,
|
|
|
1332
1352
|
i0.ɵɵadvance();
|
|
1333
1353
|
i0.ɵɵproperty("ngClass", ctx_r2.entity.CustomResolverAPI ? "fa-check" : "fa-xmark");
|
|
1334
1354
|
} }
|
|
1335
|
-
function
|
|
1336
|
-
i0.ɵɵ
|
|
1337
|
-
|
|
1355
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1356
|
+
i0.ɵɵelement(0, "mj-entity-viewer", 238);
|
|
1357
|
+
} if (rf & 2) {
|
|
1358
|
+
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1359
|
+
i0.ɵɵproperty("entity", ctx_r2.entity)("showGridToolbar", true);
|
|
1360
|
+
} }
|
|
1361
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
1362
|
+
i0.ɵɵelementStart(0, "section", 32)(1, "div", 237);
|
|
1363
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Conditional_2_Template, 1, 2, "mj-entity-viewer", 238);
|
|
1364
|
+
i0.ɵɵelementEnd()();
|
|
1365
|
+
} if (rf & 2) {
|
|
1366
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
1367
|
+
i0.ɵɵadvance(2);
|
|
1368
|
+
i0.ɵɵconditional(ctx_r2.entity ? 2 : -1);
|
|
1369
|
+
} }
|
|
1370
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1371
|
+
i0.ɵɵelementStart(0, "div", 242);
|
|
1372
|
+
i0.ɵɵelement(1, "i", 226);
|
|
1338
1373
|
i0.ɵɵelementStart(2, "span");
|
|
1339
1374
|
i0.ɵɵtext(3, "API Create");
|
|
1340
1375
|
i0.ɵɵelementEnd()();
|
|
1341
1376
|
} }
|
|
1342
|
-
function
|
|
1343
|
-
i0.ɵɵelementStart(0, "div",
|
|
1344
|
-
i0.ɵɵelement(1, "i",
|
|
1377
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1378
|
+
i0.ɵɵelementStart(0, "div", 242);
|
|
1379
|
+
i0.ɵɵelement(1, "i", 249);
|
|
1345
1380
|
i0.ɵɵelementStart(2, "span");
|
|
1346
1381
|
i0.ɵɵtext(3, "Record Changes");
|
|
1347
1382
|
i0.ɵɵelementEnd()();
|
|
1348
1383
|
} }
|
|
1349
|
-
function
|
|
1350
|
-
i0.ɵɵelementStart(0, "div",
|
|
1384
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1385
|
+
i0.ɵɵelementStart(0, "div", 242);
|
|
1351
1386
|
i0.ɵɵelement(1, "i", 41);
|
|
1352
1387
|
i0.ɵɵelementStart(2, "span");
|
|
1353
1388
|
i0.ɵɵtext(3, "Access Audit");
|
|
1354
1389
|
i0.ɵɵelementEnd()();
|
|
1355
1390
|
} }
|
|
1356
|
-
function
|
|
1357
|
-
i0.ɵɵelementStart(0, "section", 33)(1, "div", 53)(2, "div",
|
|
1391
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
1392
|
+
i0.ɵɵelementStart(0, "section", 33)(1, "div", 53)(2, "div", 239)(3, "div", 240)(4, "h4");
|
|
1358
1393
|
i0.ɵɵtext(5, "Data Sources");
|
|
1359
1394
|
i0.ɵɵelementEnd();
|
|
1360
|
-
i0.ɵɵelementStart(6, "div",
|
|
1361
|
-
i0.ɵɵelement(8, "i",
|
|
1395
|
+
i0.ɵɵelementStart(6, "div", 241)(7, "div", 242);
|
|
1396
|
+
i0.ɵɵelement(8, "i", 243);
|
|
1362
1397
|
i0.ɵɵelementStart(9, "span");
|
|
1363
1398
|
i0.ɵɵtext(10, "Manual Entry");
|
|
1364
1399
|
i0.ɵɵelementEnd()();
|
|
1365
|
-
i0.ɵɵconditionalCreate(11,
|
|
1400
|
+
i0.ɵɵconditionalCreate(11, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_11_Template, 4, 0, "div", 242);
|
|
1366
1401
|
i0.ɵɵelementEnd()();
|
|
1367
|
-
i0.ɵɵelementStart(12, "div",
|
|
1402
|
+
i0.ɵɵelementStart(12, "div", 244);
|
|
1368
1403
|
i0.ɵɵelement(13, "i", 62);
|
|
1369
1404
|
i0.ɵɵelementEnd();
|
|
1370
|
-
i0.ɵɵelementStart(14, "div",
|
|
1405
|
+
i0.ɵɵelementStart(14, "div", 245)(15, "div", 246);
|
|
1371
1406
|
i0.ɵɵelement(16, "i");
|
|
1372
1407
|
i0.ɵɵelementStart(17, "span");
|
|
1373
1408
|
i0.ɵɵtext(18);
|
|
1374
1409
|
i0.ɵɵelementEnd()()();
|
|
1375
|
-
i0.ɵɵelementStart(19, "div",
|
|
1410
|
+
i0.ɵɵelementStart(19, "div", 244);
|
|
1376
1411
|
i0.ɵɵelement(20, "i", 62);
|
|
1377
1412
|
i0.ɵɵelementEnd();
|
|
1378
|
-
i0.ɵɵelementStart(21, "div",
|
|
1413
|
+
i0.ɵɵelementStart(21, "div", 247)(22, "h4");
|
|
1379
1414
|
i0.ɵɵtext(23, "Data Sinks");
|
|
1380
1415
|
i0.ɵɵelementEnd();
|
|
1381
|
-
i0.ɵɵelementStart(24, "div",
|
|
1382
|
-
i0.ɵɵconditionalCreate(25,
|
|
1383
|
-
i0.ɵɵconditionalCreate(26,
|
|
1384
|
-
i0.ɵɵelementStart(27, "div",
|
|
1416
|
+
i0.ɵɵelementStart(24, "div", 241);
|
|
1417
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_25_Template, 4, 0, "div", 242);
|
|
1418
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_26_Template, 4, 0, "div", 242);
|
|
1419
|
+
i0.ɵɵelementStart(27, "div", 242);
|
|
1385
1420
|
i0.ɵɵelement(28, "i", 20);
|
|
1386
1421
|
i0.ɵɵelementStart(29, "span");
|
|
1387
1422
|
i0.ɵɵtext(30);
|
|
1388
1423
|
i0.ɵɵelementEnd()()()()();
|
|
1389
|
-
i0.ɵɵelementStart(31, "div",
|
|
1390
|
-
i0.ɵɵelement(33, "i",
|
|
1424
|
+
i0.ɵɵelementStart(31, "div", 248)(32, "h3", 69);
|
|
1425
|
+
i0.ɵɵelement(33, "i", 249);
|
|
1391
1426
|
i0.ɵɵtext(34, " Tracking Configuration ");
|
|
1392
1427
|
i0.ɵɵelementEnd();
|
|
1393
|
-
i0.ɵɵelementStart(35, "div",
|
|
1428
|
+
i0.ɵɵelementStart(35, "div", 250)(36, "div", 251);
|
|
1394
1429
|
i0.ɵɵelement(37, "i", 98);
|
|
1395
1430
|
i0.ɵɵelementStart(38, "span");
|
|
1396
1431
|
i0.ɵɵtext(39, "Track Record Changes");
|
|
1397
1432
|
i0.ɵɵelementEnd()();
|
|
1398
|
-
i0.ɵɵelementStart(40, "div",
|
|
1433
|
+
i0.ɵɵelementStart(40, "div", 251);
|
|
1399
1434
|
i0.ɵɵelement(41, "i", 98);
|
|
1400
1435
|
i0.ɵɵelementStart(42, "span");
|
|
1401
1436
|
i0.ɵɵtext(43, "Audit Record Access");
|
|
1402
1437
|
i0.ɵɵelementEnd()();
|
|
1403
|
-
i0.ɵɵelementStart(44, "div",
|
|
1438
|
+
i0.ɵɵelementStart(44, "div", 251);
|
|
1404
1439
|
i0.ɵɵelement(45, "i", 98);
|
|
1405
1440
|
i0.ɵɵelementStart(46, "span");
|
|
1406
1441
|
i0.ɵɵtext(47, "Audit View Runs");
|
|
1407
1442
|
i0.ɵɵelementEnd()();
|
|
1408
|
-
i0.ɵɵelementStart(48, "div",
|
|
1443
|
+
i0.ɵɵelementStart(48, "div", 251)(49, "span", 252);
|
|
1409
1444
|
i0.ɵɵtext(50, "Delete Type:");
|
|
1410
1445
|
i0.ɵɵelementEnd();
|
|
1411
|
-
i0.ɵɵelementStart(51, "span",
|
|
1446
|
+
i0.ɵɵelementStart(51, "span", 253);
|
|
1412
1447
|
i0.ɵɵtext(52);
|
|
1413
1448
|
i0.ɵɵelementEnd()();
|
|
1414
|
-
i0.ɵɵelementStart(53, "div",
|
|
1449
|
+
i0.ɵɵelementStart(53, "div", 251);
|
|
1415
1450
|
i0.ɵɵelement(54, "i", 98);
|
|
1416
1451
|
i0.ɵɵelementStart(55, "span");
|
|
1417
1452
|
i0.ɵɵtext(56, "Cascade Deletes");
|
|
@@ -1449,7 +1484,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template(rf,
|
|
|
1449
1484
|
i0.ɵɵadvance();
|
|
1450
1485
|
i0.ɵɵproperty("ngClass", ctx_r2.entity.CascadeDeletes ? "fa-check" : "fa-xmark");
|
|
1451
1486
|
} }
|
|
1452
|
-
function
|
|
1487
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1453
1488
|
i0.ɵɵelementStart(0, "p");
|
|
1454
1489
|
i0.ɵɵtext(1, " This entity has change tracking enabled. All modifications to records are stored in the ");
|
|
1455
1490
|
i0.ɵɵelementStart(2, "code");
|
|
@@ -1458,7 +1493,7 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_
|
|
|
1458
1493
|
i0.ɵɵtext(4, " table, including the user who made the change, timestamp, and the before/after values. ");
|
|
1459
1494
|
i0.ɵɵelementEnd();
|
|
1460
1495
|
} }
|
|
1461
|
-
function
|
|
1496
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1462
1497
|
i0.ɵɵelementStart(0, "p");
|
|
1463
1498
|
i0.ɵɵtext(1, " This entity does not have change tracking enabled. To enable it, set ");
|
|
1464
1499
|
i0.ɵɵelementStart(2, "code");
|
|
@@ -1471,19 +1506,19 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_
|
|
|
1471
1506
|
i0.ɵɵtext(7, " in the entity metadata. ");
|
|
1472
1507
|
i0.ɵɵelementEnd();
|
|
1473
1508
|
} }
|
|
1474
|
-
function
|
|
1509
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_17_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1475
1510
|
i0.ɵɵelementStart(0, "li")(1, "code");
|
|
1476
1511
|
i0.ɵɵtext(2, "__mj_DeletedAt");
|
|
1477
1512
|
i0.ɵɵelementEnd();
|
|
1478
1513
|
i0.ɵɵtext(3, " - Soft delete timestamp (when applicable) ");
|
|
1479
1514
|
i0.ɵɵelementEnd();
|
|
1480
1515
|
} }
|
|
1481
|
-
function
|
|
1482
|
-
i0.ɵɵelementStart(0, "div",
|
|
1483
|
-
i0.ɵɵelement(2, "i",
|
|
1516
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1517
|
+
i0.ɵɵelementStart(0, "div", 258)(1, "h4");
|
|
1518
|
+
i0.ɵɵelement(2, "i", 22);
|
|
1484
1519
|
i0.ɵɵtext(3, " Audit Fields ");
|
|
1485
1520
|
i0.ɵɵelementEnd();
|
|
1486
|
-
i0.ɵɵelementStart(4, "ul",
|
|
1521
|
+
i0.ɵɵelementStart(4, "ul", 260)(5, "li")(6, "code");
|
|
1487
1522
|
i0.ɵɵtext(7, "__mj_CreatedAt");
|
|
1488
1523
|
i0.ɵɵelementEnd();
|
|
1489
1524
|
i0.ɵɵtext(8, " - Record creation timestamp ");
|
|
@@ -1493,30 +1528,30 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Conditional_
|
|
|
1493
1528
|
i0.ɵɵelementEnd();
|
|
1494
1529
|
i0.ɵɵtext(12, " - Last modification timestamp ");
|
|
1495
1530
|
i0.ɵɵelementEnd();
|
|
1496
|
-
i0.ɵɵconditionalCreate(13,
|
|
1531
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_17_Conditional_13_Template, 4, 0, "li");
|
|
1497
1532
|
i0.ɵɵelementEnd()();
|
|
1498
1533
|
} if (rf & 2) {
|
|
1499
1534
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1500
1535
|
i0.ɵɵadvance(13);
|
|
1501
1536
|
i0.ɵɵconditional(ctx_r2.entity.DeleteType === "Soft" ? 13 : -1);
|
|
1502
1537
|
} }
|
|
1503
|
-
function
|
|
1504
|
-
i0.ɵɵelementStart(0, "section", 34)(1, "div", 53)(2, "div",
|
|
1538
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
1539
|
+
i0.ɵɵelementStart(0, "section", 34)(1, "div", 53)(2, "div", 254)(3, "div", 255);
|
|
1505
1540
|
i0.ɵɵelement(4, "i", 98);
|
|
1506
|
-
i0.ɵɵelementStart(5, "div",
|
|
1541
|
+
i0.ɵɵelementStart(5, "div", 256)(6, "strong");
|
|
1507
1542
|
i0.ɵɵtext(7, "Record Change Tracking");
|
|
1508
1543
|
i0.ɵɵelementEnd();
|
|
1509
1544
|
i0.ɵɵelementStart(8, "span");
|
|
1510
1545
|
i0.ɵɵtext(9);
|
|
1511
1546
|
i0.ɵɵelementEnd()()()();
|
|
1512
|
-
i0.ɵɵelementStart(10, "div",
|
|
1513
|
-
i0.ɵɵelement(13, "i",
|
|
1547
|
+
i0.ɵɵelementStart(10, "div", 257)(11, "div", 258)(12, "h4");
|
|
1548
|
+
i0.ɵɵelement(13, "i", 259);
|
|
1514
1549
|
i0.ɵɵtext(14, " About Change Tracking ");
|
|
1515
1550
|
i0.ɵɵelementEnd();
|
|
1516
|
-
i0.ɵɵconditionalCreate(15,
|
|
1517
|
-
i0.ɵɵconditionalCreate(16,
|
|
1551
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_15_Template, 5, 0, "p");
|
|
1552
|
+
i0.ɵɵconditionalCreate(16, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_16_Template, 8, 0, "p");
|
|
1518
1553
|
i0.ɵɵelementEnd();
|
|
1519
|
-
i0.ɵɵconditionalCreate(17,
|
|
1554
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_17_Template, 14, 1, "div", 258);
|
|
1520
1555
|
i0.ɵɵelementEnd()()();
|
|
1521
1556
|
} if (rf & 2) {
|
|
1522
1557
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1533,18 +1568,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template(rf,
|
|
|
1533
1568
|
i0.ɵɵadvance();
|
|
1534
1569
|
i0.ɵɵconditional(ctx_r2.entity.TrackRecordChanges ? 17 : -1);
|
|
1535
1570
|
} }
|
|
1536
|
-
function
|
|
1537
|
-
i0.ɵɵelement(0, "i",
|
|
1571
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1572
|
+
i0.ɵɵelement(0, "i", 271);
|
|
1538
1573
|
i0.ɵɵtext(1, " Yes \u2014 read-only view ");
|
|
1539
1574
|
} }
|
|
1540
|
-
function
|
|
1541
|
-
i0.ɵɵelement(0, "i",
|
|
1575
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1576
|
+
i0.ɵɵelement(0, "i", 272);
|
|
1542
1577
|
i0.ɵɵtext(1, " No ");
|
|
1543
1578
|
} }
|
|
1544
|
-
function
|
|
1579
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
1545
1580
|
const _r37 = i0.ɵɵgetCurrentView();
|
|
1546
|
-
i0.ɵɵelementStart(0, "span",
|
|
1547
|
-
i0.ɵɵlistener("click", function
|
|
1581
|
+
i0.ɵɵelementStart(0, "span", 273);
|
|
1582
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_15_Template_span_click_0_listener() { i0.ɵɵrestoreView(_r37); const ctx_r2 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
1548
1583
|
i0.ɵɵtext(1);
|
|
1549
1584
|
i0.ɵɵelement(2, "i", 62);
|
|
1550
1585
|
i0.ɵɵelementEnd();
|
|
@@ -1553,22 +1588,22 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1553
1588
|
i0.ɵɵadvance();
|
|
1554
1589
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.ParentChain[0] == null ? null : ctx_r2.ParentChain[0].Name, " ");
|
|
1555
1590
|
} }
|
|
1556
|
-
function
|
|
1557
|
-
i0.ɵɵelementStart(0, "span",
|
|
1591
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1592
|
+
i0.ɵɵelementStart(0, "span", 270);
|
|
1558
1593
|
i0.ɵɵtext(1, "None");
|
|
1559
1594
|
i0.ɵɵelementEnd();
|
|
1560
1595
|
} }
|
|
1561
|
-
function
|
|
1562
|
-
i0.ɵɵelementStart(0, "div",
|
|
1596
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1597
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1563
1598
|
i0.ɵɵtext(2, "Full Inheritance Chain");
|
|
1564
1599
|
i0.ɵɵelementEnd();
|
|
1565
|
-
i0.ɵɵelementStart(3, "span",
|
|
1600
|
+
i0.ɵɵelementStart(3, "span", 253);
|
|
1566
1601
|
i0.ɵɵtext(4);
|
|
1567
1602
|
i0.ɵɵelementEnd()();
|
|
1568
|
-
i0.ɵɵelementStart(5, "div",
|
|
1603
|
+
i0.ɵɵelementStart(5, "div", 268)(6, "span", 252);
|
|
1569
1604
|
i0.ɵɵtext(7, "Inherited Fields");
|
|
1570
1605
|
i0.ɵɵelementEnd();
|
|
1571
|
-
i0.ɵɵelementStart(8, "span",
|
|
1606
|
+
i0.ɵɵelementStart(8, "span", 253);
|
|
1572
1607
|
i0.ɵɵtext(9);
|
|
1573
1608
|
i0.ɵɵelementEnd()();
|
|
1574
1609
|
} if (rf & 2) {
|
|
@@ -1578,96 +1613,96 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1578
1613
|
i0.ɵɵadvance(5);
|
|
1579
1614
|
i0.ɵɵtextInterpolate2("", ctx_r2.InheritedFieldCount, " field", ctx_r2.InheritedFieldCount !== 1 ? "s" : "");
|
|
1580
1615
|
} }
|
|
1581
|
-
function
|
|
1616
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_18_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1582
1617
|
const _r38 = i0.ɵɵgetCurrentView();
|
|
1583
|
-
i0.ɵɵelementStart(0, "span",
|
|
1584
|
-
i0.ɵɵlistener("click", function
|
|
1618
|
+
i0.ɵɵelementStart(0, "span", 274);
|
|
1619
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_18_For_5_Template_span_click_0_listener() { const child_r39 = i0.ɵɵrestoreView(_r38).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(child_r39)); });
|
|
1585
1620
|
i0.ɵɵtext(1);
|
|
1586
1621
|
i0.ɵɵelementEnd();
|
|
1587
1622
|
i0.ɵɵtext(2);
|
|
1588
1623
|
} if (rf & 2) {
|
|
1589
1624
|
const child_r39 = ctx.$implicit;
|
|
1590
|
-
const ɵ$
|
|
1591
|
-
const ɵ$
|
|
1625
|
+
const ɵ$index_1255_r40 = ctx.$index;
|
|
1626
|
+
const ɵ$count_1255_r41 = ctx.$count;
|
|
1592
1627
|
i0.ɵɵadvance();
|
|
1593
1628
|
i0.ɵɵtextInterpolate(child_r39.Name);
|
|
1594
1629
|
i0.ɵɵadvance();
|
|
1595
|
-
i0.ɵɵtextInterpolate1("", ɵ$
|
|
1630
|
+
i0.ɵɵtextInterpolate1("", ɵ$index_1255_r40 === ɵ$count_1255_r41 - 1 ? "" : ", ", " ");
|
|
1596
1631
|
} }
|
|
1597
|
-
function
|
|
1598
|
-
i0.ɵɵelementStart(0, "div",
|
|
1632
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1633
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1599
1634
|
i0.ɵɵtext(2, "Child Types");
|
|
1600
1635
|
i0.ɵɵelementEnd();
|
|
1601
|
-
i0.ɵɵelementStart(3, "span",
|
|
1602
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1636
|
+
i0.ɵɵelementStart(3, "span", 253);
|
|
1637
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_18_For_5_Template, 3, 2, null, null, _forTrack0);
|
|
1603
1638
|
i0.ɵɵelementEnd()();
|
|
1604
1639
|
} if (rf & 2) {
|
|
1605
1640
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1606
1641
|
i0.ɵɵadvance(4);
|
|
1607
1642
|
i0.ɵɵrepeater(ctx_r2.ChildEntities);
|
|
1608
1643
|
} }
|
|
1609
|
-
function
|
|
1644
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_19_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
1610
1645
|
const _r42 = i0.ɵɵgetCurrentView();
|
|
1611
|
-
i0.ɵɵelementStart(0, "span",
|
|
1612
|
-
i0.ɵɵlistener("click", function
|
|
1646
|
+
i0.ɵɵelementStart(0, "span", 274);
|
|
1647
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_19_For_5_Template_span_click_0_listener() { const sibling_r43 = i0.ɵɵrestoreView(_r42).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(sibling_r43)); });
|
|
1613
1648
|
i0.ɵɵtext(1);
|
|
1614
1649
|
i0.ɵɵelementEnd();
|
|
1615
1650
|
i0.ɵɵtext(2);
|
|
1616
1651
|
} if (rf & 2) {
|
|
1617
1652
|
const sibling_r43 = ctx.$implicit;
|
|
1618
|
-
const ɵ$
|
|
1619
|
-
const ɵ$
|
|
1653
|
+
const ɵ$index_1268_r44 = ctx.$index;
|
|
1654
|
+
const ɵ$count_1268_r45 = ctx.$count;
|
|
1620
1655
|
i0.ɵɵadvance();
|
|
1621
1656
|
i0.ɵɵtextInterpolate(sibling_r43.Name);
|
|
1622
1657
|
i0.ɵɵadvance();
|
|
1623
|
-
i0.ɵɵtextInterpolate1("", ɵ$
|
|
1658
|
+
i0.ɵɵtextInterpolate1("", ɵ$index_1268_r44 === ɵ$count_1268_r45 - 1 ? "" : ", ", " ");
|
|
1624
1659
|
} }
|
|
1625
|
-
function
|
|
1626
|
-
i0.ɵɵelementStart(0, "div",
|
|
1660
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1661
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1627
1662
|
i0.ɵɵtext(2, "Sibling Types");
|
|
1628
1663
|
i0.ɵɵelementEnd();
|
|
1629
|
-
i0.ɵɵelementStart(3, "span",
|
|
1630
|
-
i0.ɵɵrepeaterCreate(4,
|
|
1664
|
+
i0.ɵɵelementStart(3, "span", 253);
|
|
1665
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_19_For_5_Template, 3, 2, null, null, _forTrack0);
|
|
1631
1666
|
i0.ɵɵelementEnd()();
|
|
1632
1667
|
} if (rf & 2) {
|
|
1633
1668
|
const ctx_r2 = i0.ɵɵnextContext(4);
|
|
1634
1669
|
i0.ɵɵadvance(4);
|
|
1635
1670
|
i0.ɵɵrepeater(ctx_r2.SiblingEntities);
|
|
1636
1671
|
} }
|
|
1637
|
-
function
|
|
1638
|
-
i0.ɵɵelement(0, "i",
|
|
1672
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1673
|
+
i0.ɵɵelement(0, "i", 275);
|
|
1639
1674
|
i0.ɵɵtext(1, " Enforced \u2014 a parent record can only be one child type ");
|
|
1640
1675
|
} }
|
|
1641
|
-
function
|
|
1642
|
-
i0.ɵɵelementStart(0, "span",
|
|
1676
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1677
|
+
i0.ɵɵelementStart(0, "span", 270);
|
|
1643
1678
|
i0.ɵɵtext(1, "N/A");
|
|
1644
1679
|
i0.ɵɵelementEnd();
|
|
1645
1680
|
} }
|
|
1646
|
-
function
|
|
1647
|
-
i0.ɵɵelementStart(0, "div",
|
|
1681
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1682
|
+
i0.ɵɵelementStart(0, "div", 261)(1, "h3", 69);
|
|
1648
1683
|
i0.ɵɵelement(2, "i", 48);
|
|
1649
1684
|
i0.ɵɵtext(3, " Type Relationship (IS-A) ");
|
|
1650
1685
|
i0.ɵɵelementEnd();
|
|
1651
|
-
i0.ɵɵelementStart(4, "div",
|
|
1686
|
+
i0.ɵɵelementStart(4, "div", 250)(5, "div", 268)(6, "span", 252);
|
|
1652
1687
|
i0.ɵɵtext(7, "Virtual Entity");
|
|
1653
1688
|
i0.ɵɵelementEnd();
|
|
1654
|
-
i0.ɵɵelementStart(8, "span",
|
|
1655
|
-
i0.ɵɵconditionalCreate(9,
|
|
1689
|
+
i0.ɵɵelementStart(8, "span", 253);
|
|
1690
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_9_Template, 2, 0)(10, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_10_Template, 2, 0);
|
|
1656
1691
|
i0.ɵɵelementEnd()();
|
|
1657
|
-
i0.ɵɵelementStart(11, "div",
|
|
1692
|
+
i0.ɵɵelementStart(11, "div", 268)(12, "span", 252);
|
|
1658
1693
|
i0.ɵɵtext(13, "Parent Entity");
|
|
1659
1694
|
i0.ɵɵelementEnd();
|
|
1660
|
-
i0.ɵɵelementStart(14, "span",
|
|
1661
|
-
i0.ɵɵconditionalCreate(15,
|
|
1695
|
+
i0.ɵɵelementStart(14, "span", 253);
|
|
1696
|
+
i0.ɵɵconditionalCreate(15, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_15_Template, 3, 1, "span", 269)(16, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_16_Template, 2, 0, "span", 270);
|
|
1662
1697
|
i0.ɵɵelementEnd()();
|
|
1663
|
-
i0.ɵɵconditionalCreate(17,
|
|
1664
|
-
i0.ɵɵconditionalCreate(18,
|
|
1665
|
-
i0.ɵɵconditionalCreate(19,
|
|
1666
|
-
i0.ɵɵelementStart(20, "div",
|
|
1698
|
+
i0.ɵɵconditionalCreate(17, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_17_Template, 10, 3);
|
|
1699
|
+
i0.ɵɵconditionalCreate(18, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_18_Template, 6, 0, "div", 268);
|
|
1700
|
+
i0.ɵɵconditionalCreate(19, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_19_Template, 6, 0, "div", 268);
|
|
1701
|
+
i0.ɵɵelementStart(20, "div", 268)(21, "span", 252);
|
|
1667
1702
|
i0.ɵɵtext(22, "Disjoint Subtypes");
|
|
1668
1703
|
i0.ɵɵelementEnd();
|
|
1669
|
-
i0.ɵɵelementStart(23, "span",
|
|
1670
|
-
i0.ɵɵconditionalCreate(24,
|
|
1704
|
+
i0.ɵɵelementStart(23, "span", 253);
|
|
1705
|
+
i0.ɵɵconditionalCreate(24, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_24_Template, 2, 0)(25, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Conditional_25_Template, 2, 0, "span", 270);
|
|
1671
1706
|
i0.ɵɵelementEnd()()()();
|
|
1672
1707
|
} if (rf & 2) {
|
|
1673
1708
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1684,9 +1719,9 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1684
1719
|
i0.ɵɵadvance(5);
|
|
1685
1720
|
i0.ɵɵconditional(ctx_r2.IsParentType || ctx_r2.IsChildType ? 24 : 25);
|
|
1686
1721
|
} }
|
|
1687
|
-
function
|
|
1688
|
-
i0.ɵɵelementStart(0, "div",
|
|
1689
|
-
i0.ɵɵelement(1, "mj-code-editor",
|
|
1722
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1723
|
+
i0.ɵɵelementStart(0, "div", 278);
|
|
1724
|
+
i0.ɵɵelement(1, "mj-code-editor", 281);
|
|
1690
1725
|
i0.ɵɵelementEnd();
|
|
1691
1726
|
} if (rf & 2) {
|
|
1692
1727
|
const setting_r46 = i0.ɵɵnextContext().$implicit;
|
|
@@ -1694,8 +1729,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1694
1729
|
i0.ɵɵadvance();
|
|
1695
1730
|
i0.ɵɵproperty("value", ctx_r2.formatJsonValue(setting_r46.Value))("readonly", true)("lineWrapping", true);
|
|
1696
1731
|
} }
|
|
1697
|
-
function
|
|
1698
|
-
i0.ɵɵelementStart(0, "div",
|
|
1732
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1733
|
+
i0.ɵɵelementStart(0, "div", 279);
|
|
1699
1734
|
i0.ɵɵtext(1);
|
|
1700
1735
|
i0.ɵɵelementEnd();
|
|
1701
1736
|
} if (rf & 2) {
|
|
@@ -1703,8 +1738,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1703
1738
|
i0.ɵɵadvance();
|
|
1704
1739
|
i0.ɵɵtextInterpolate(setting_r46.Value);
|
|
1705
1740
|
} }
|
|
1706
|
-
function
|
|
1707
|
-
i0.ɵɵelementStart(0, "div",
|
|
1741
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1742
|
+
i0.ɵɵelementStart(0, "div", 280);
|
|
1708
1743
|
i0.ɵɵtext(1);
|
|
1709
1744
|
i0.ɵɵelementEnd();
|
|
1710
1745
|
} if (rf & 2) {
|
|
@@ -1712,12 +1747,12 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1712
1747
|
i0.ɵɵadvance();
|
|
1713
1748
|
i0.ɵɵtextInterpolate(setting_r46.Comments);
|
|
1714
1749
|
} }
|
|
1715
|
-
function
|
|
1716
|
-
i0.ɵɵelementStart(0, "div",
|
|
1750
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1751
|
+
i0.ɵɵelementStart(0, "div", 276)(1, "div", 277);
|
|
1717
1752
|
i0.ɵɵtext(2);
|
|
1718
1753
|
i0.ɵɵelementEnd();
|
|
1719
|
-
i0.ɵɵconditionalCreate(3,
|
|
1720
|
-
i0.ɵɵconditionalCreate(5,
|
|
1754
|
+
i0.ɵɵconditionalCreate(3, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Conditional_3_Template, 2, 3, "div", 278)(4, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Conditional_4_Template, 2, 1, "div", 279);
|
|
1755
|
+
i0.ɵɵconditionalCreate(5, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Conditional_5_Template, 2, 1, "div", 280);
|
|
1721
1756
|
i0.ɵɵelementEnd();
|
|
1722
1757
|
} if (rf & 2) {
|
|
1723
1758
|
const setting_r46 = ctx.$implicit;
|
|
@@ -1729,25 +1764,25 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1729
1764
|
i0.ɵɵadvance(2);
|
|
1730
1765
|
i0.ɵɵconditional(setting_r46.Comments ? 5 : -1);
|
|
1731
1766
|
} }
|
|
1732
|
-
function
|
|
1733
|
-
i0.ɵɵelementStart(0, "div",
|
|
1734
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1767
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1768
|
+
i0.ɵɵelementStart(0, "div", 264);
|
|
1769
|
+
i0.ɵɵrepeaterCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_For_2_Template, 6, 3, "div", 276, i0.ɵɵrepeaterTrackByIdentity);
|
|
1735
1770
|
i0.ɵɵelementEnd();
|
|
1736
1771
|
} if (rf & 2) {
|
|
1737
1772
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
1738
1773
|
i0.ɵɵadvance();
|
|
1739
1774
|
i0.ɵɵrepeater(ctx_r2.entity.Settings);
|
|
1740
1775
|
} }
|
|
1741
|
-
function
|
|
1742
|
-
i0.ɵɵelementStart(0, "div",
|
|
1776
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1777
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "p");
|
|
1743
1778
|
i0.ɵɵtext(2, "No custom settings configured");
|
|
1744
1779
|
i0.ɵɵelementEnd()();
|
|
1745
1780
|
} }
|
|
1746
|
-
function
|
|
1747
|
-
i0.ɵɵelementStart(0, "div",
|
|
1781
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1782
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1748
1783
|
i0.ɵɵtext(2, "Catalog");
|
|
1749
1784
|
i0.ɵɵelementEnd();
|
|
1750
|
-
i0.ɵɵelementStart(3, "span",
|
|
1785
|
+
i0.ɵɵelementStart(3, "span", 284);
|
|
1751
1786
|
i0.ɵɵtext(4);
|
|
1752
1787
|
i0.ɵɵelementEnd()();
|
|
1753
1788
|
} if (rf & 2) {
|
|
@@ -1755,11 +1790,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1755
1790
|
i0.ɵɵadvance(4);
|
|
1756
1791
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextCatalog);
|
|
1757
1792
|
} }
|
|
1758
|
-
function
|
|
1759
|
-
i0.ɵɵelementStart(0, "div",
|
|
1793
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1794
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1760
1795
|
i0.ɵɵtext(2, "Index");
|
|
1761
1796
|
i0.ɵɵelementEnd();
|
|
1762
|
-
i0.ɵɵelementStart(3, "span",
|
|
1797
|
+
i0.ɵɵelementStart(3, "span", 284);
|
|
1763
1798
|
i0.ɵɵtext(4);
|
|
1764
1799
|
i0.ɵɵelementEnd()();
|
|
1765
1800
|
} if (rf & 2) {
|
|
@@ -1767,11 +1802,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1767
1802
|
i0.ɵɵadvance(4);
|
|
1768
1803
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextIndex);
|
|
1769
1804
|
} }
|
|
1770
|
-
function
|
|
1771
|
-
i0.ɵɵelementStart(0, "div",
|
|
1805
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1806
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1772
1807
|
i0.ɵɵtext(2, "Function");
|
|
1773
1808
|
i0.ɵɵelementEnd();
|
|
1774
|
-
i0.ɵɵelementStart(3, "span",
|
|
1809
|
+
i0.ɵɵelementStart(3, "span", 284);
|
|
1775
1810
|
i0.ɵɵtext(4);
|
|
1776
1811
|
i0.ɵɵelementEnd()();
|
|
1777
1812
|
} if (rf & 2) {
|
|
@@ -1779,17 +1814,17 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1779
1814
|
i0.ɵɵadvance(4);
|
|
1780
1815
|
i0.ɵɵtextInterpolate(ctx_r2.entity.FullTextSearchFunction);
|
|
1781
1816
|
} }
|
|
1782
|
-
function
|
|
1783
|
-
i0.ɵɵelementStart(0, "div",
|
|
1817
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1818
|
+
i0.ɵɵelementStart(0, "div", 266)(1, "div", 268)(2, "span", 252);
|
|
1784
1819
|
i0.ɵɵtext(3, "Status");
|
|
1785
1820
|
i0.ɵɵelementEnd();
|
|
1786
|
-
i0.ɵɵelementStart(4, "span",
|
|
1787
|
-
i0.ɵɵelement(5, "i",
|
|
1821
|
+
i0.ɵɵelementStart(4, "span", 282);
|
|
1822
|
+
i0.ɵɵelement(5, "i", 283);
|
|
1788
1823
|
i0.ɵɵtext(6, " Enabled ");
|
|
1789
1824
|
i0.ɵɵelementEnd()();
|
|
1790
|
-
i0.ɵɵconditionalCreate(7,
|
|
1791
|
-
i0.ɵɵconditionalCreate(8,
|
|
1792
|
-
i0.ɵɵconditionalCreate(9,
|
|
1825
|
+
i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Conditional_7_Template, 5, 1, "div", 268);
|
|
1826
|
+
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Conditional_8_Template, 5, 1, "div", 268);
|
|
1827
|
+
i0.ɵɵconditionalCreate(9, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Conditional_9_Template, 5, 1, "div", 268);
|
|
1793
1828
|
i0.ɵɵelementEnd();
|
|
1794
1829
|
} if (rf & 2) {
|
|
1795
1830
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
@@ -1800,16 +1835,16 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1800
1835
|
i0.ɵɵadvance();
|
|
1801
1836
|
i0.ɵɵconditional(ctx_r2.entity.FullTextSearchFunction ? 9 : -1);
|
|
1802
1837
|
} }
|
|
1803
|
-
function
|
|
1804
|
-
i0.ɵɵelementStart(0, "div",
|
|
1838
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1839
|
+
i0.ɵɵelementStart(0, "div", 210)(1, "p");
|
|
1805
1840
|
i0.ɵɵtext(2, "Full-text search is not enabled for this entity");
|
|
1806
1841
|
i0.ɵɵelementEnd()();
|
|
1807
1842
|
} }
|
|
1808
|
-
function
|
|
1809
|
-
i0.ɵɵelementStart(0, "div",
|
|
1843
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1844
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1810
1845
|
i0.ɵɵtext(2, "Sample Count");
|
|
1811
1846
|
i0.ɵɵelementEnd();
|
|
1812
|
-
i0.ɵɵelementStart(3, "span",
|
|
1847
|
+
i0.ɵɵelementStart(3, "span", 253);
|
|
1813
1848
|
i0.ɵɵtext(4);
|
|
1814
1849
|
i0.ɵɵelementEnd()();
|
|
1815
1850
|
} if (rf & 2) {
|
|
@@ -1817,11 +1852,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1817
1852
|
i0.ɵɵadvance(4);
|
|
1818
1853
|
i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleCount);
|
|
1819
1854
|
} }
|
|
1820
|
-
function
|
|
1821
|
-
i0.ɵɵelementStart(0, "div",
|
|
1855
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1856
|
+
i0.ɵɵelementStart(0, "div", 268)(1, "span", 252);
|
|
1822
1857
|
i0.ɵɵtext(2, "Sample Method");
|
|
1823
1858
|
i0.ɵɵelementEnd();
|
|
1824
|
-
i0.ɵɵelementStart(3, "span",
|
|
1859
|
+
i0.ɵɵelementStart(3, "span", 253);
|
|
1825
1860
|
i0.ɵɵtext(4);
|
|
1826
1861
|
i0.ɵɵelementEnd()();
|
|
1827
1862
|
} if (rf & 2) {
|
|
@@ -1829,35 +1864,35 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Conditional_
|
|
|
1829
1864
|
i0.ɵɵadvance(4);
|
|
1830
1865
|
i0.ɵɵtextInterpolate(ctx_r2.entity.RowsToPackSampleMethod);
|
|
1831
1866
|
} }
|
|
1832
|
-
function
|
|
1867
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template(rf, ctx) { if (rf & 1) {
|
|
1833
1868
|
i0.ɵɵelementStart(0, "section", 35)(1, "div", 53);
|
|
1834
|
-
i0.ɵɵconditionalCreate(2,
|
|
1835
|
-
i0.ɵɵelementStart(3, "div",
|
|
1836
|
-
i0.ɵɵelement(5, "i",
|
|
1869
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_2_Template, 26, 6, "div", 261);
|
|
1870
|
+
i0.ɵɵelementStart(3, "div", 262)(4, "h3", 69);
|
|
1871
|
+
i0.ɵɵelement(5, "i", 263);
|
|
1837
1872
|
i0.ɵɵtext(6, " Entity Settings ");
|
|
1838
1873
|
i0.ɵɵelementEnd();
|
|
1839
|
-
i0.ɵɵconditionalCreate(7,
|
|
1840
|
-
i0.ɵɵconditionalCreate(8,
|
|
1874
|
+
i0.ɵɵconditionalCreate(7, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_7_Template, 3, 0, "div", 264);
|
|
1875
|
+
i0.ɵɵconditionalCreate(8, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_8_Template, 3, 0, "div", 210);
|
|
1841
1876
|
i0.ɵɵelementEnd();
|
|
1842
|
-
i0.ɵɵelementStart(9, "div",
|
|
1843
|
-
i0.ɵɵelement(11, "i",
|
|
1877
|
+
i0.ɵɵelementStart(9, "div", 262)(10, "h3", 69);
|
|
1878
|
+
i0.ɵɵelement(11, "i", 265);
|
|
1844
1879
|
i0.ɵɵtext(12, " Full-Text Search ");
|
|
1845
1880
|
i0.ɵɵelementEnd();
|
|
1846
|
-
i0.ɵɵconditionalCreate(13,
|
|
1847
|
-
i0.ɵɵconditionalCreate(14,
|
|
1881
|
+
i0.ɵɵconditionalCreate(13, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_13_Template, 10, 3, "div", 266);
|
|
1882
|
+
i0.ɵɵconditionalCreate(14, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_14_Template, 3, 0, "div", 210);
|
|
1848
1883
|
i0.ɵɵelementEnd();
|
|
1849
|
-
i0.ɵɵelementStart(15, "div",
|
|
1850
|
-
i0.ɵɵelement(17, "i",
|
|
1884
|
+
i0.ɵɵelementStart(15, "div", 262)(16, "h3", 69);
|
|
1885
|
+
i0.ɵɵelement(17, "i", 267);
|
|
1851
1886
|
i0.ɵɵtext(18, " Schema Packaging ");
|
|
1852
1887
|
i0.ɵɵelementEnd();
|
|
1853
|
-
i0.ɵɵelementStart(19, "div",
|
|
1888
|
+
i0.ɵɵelementStart(19, "div", 250)(20, "div", 268)(21, "span", 252);
|
|
1854
1889
|
i0.ɵɵtext(22, "Rows to Pack");
|
|
1855
1890
|
i0.ɵɵelementEnd();
|
|
1856
|
-
i0.ɵɵelementStart(23, "span",
|
|
1891
|
+
i0.ɵɵelementStart(23, "span", 253);
|
|
1857
1892
|
i0.ɵɵtext(24);
|
|
1858
1893
|
i0.ɵɵelementEnd()();
|
|
1859
|
-
i0.ɵɵconditionalCreate(25,
|
|
1860
|
-
i0.ɵɵconditionalCreate(26,
|
|
1894
|
+
i0.ɵɵconditionalCreate(25, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_25_Template, 5, 1, "div", 268);
|
|
1895
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Conditional_26_Template, 5, 1, "div", 268);
|
|
1861
1896
|
i0.ɵɵelementEnd()()()();
|
|
1862
1897
|
} if (rf & 2) {
|
|
1863
1898
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -1878,18 +1913,18 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template(rf,
|
|
|
1878
1913
|
i0.ɵɵadvance();
|
|
1879
1914
|
i0.ɵɵconditional(ctx_r2.entity.RowsToPackSampleMethod ? 26 : -1);
|
|
1880
1915
|
} }
|
|
1881
|
-
function
|
|
1916
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_61_Template(rf, ctx) { if (rf & 1) {
|
|
1882
1917
|
i0.ɵɵelementStart(0, "h3");
|
|
1883
1918
|
i0.ɵɵtext(1, "Field Details");
|
|
1884
1919
|
i0.ɵɵelementEnd();
|
|
1885
1920
|
} }
|
|
1886
|
-
function
|
|
1921
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_62_Template(rf, ctx) { if (rf & 1) {
|
|
1887
1922
|
i0.ɵɵelementStart(0, "h3");
|
|
1888
1923
|
i0.ɵɵtext(1, "Relationship Details");
|
|
1889
1924
|
i0.ɵɵelementEnd();
|
|
1890
1925
|
} }
|
|
1891
|
-
function
|
|
1892
|
-
i0.ɵɵelementStart(0, "p",
|
|
1926
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1927
|
+
i0.ɵɵelementStart(0, "p", 287);
|
|
1893
1928
|
i0.ɵɵtext(1);
|
|
1894
1929
|
i0.ɵɵelementEnd();
|
|
1895
1930
|
} if (rf & 2) {
|
|
@@ -1897,11 +1932,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
1897
1932
|
i0.ɵɵadvance();
|
|
1898
1933
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Description);
|
|
1899
1934
|
} }
|
|
1900
|
-
function
|
|
1901
|
-
i0.ɵɵelementStart(0, "div",
|
|
1935
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
1936
|
+
i0.ɵɵelementStart(0, "div", 289)(1, "span", 290);
|
|
1902
1937
|
i0.ɵɵtext(2, "Default");
|
|
1903
1938
|
i0.ɵɵelementEnd();
|
|
1904
|
-
i0.ɵɵelementStart(3, "span",
|
|
1939
|
+
i0.ɵɵelementStart(3, "span", 291);
|
|
1905
1940
|
i0.ɵɵtext(4);
|
|
1906
1941
|
i0.ɵɵelementEnd()();
|
|
1907
1942
|
} if (rf & 2) {
|
|
@@ -1909,24 +1944,24 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
1909
1944
|
i0.ɵɵadvance(4);
|
|
1910
1945
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.DefaultValue);
|
|
1911
1946
|
} }
|
|
1912
|
-
function
|
|
1947
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
1913
1948
|
const _r47 = i0.ɵɵgetCurrentView();
|
|
1914
|
-
i0.ɵɵelementStart(0, "div",
|
|
1949
|
+
i0.ɵɵelementStart(0, "div", 293)(1, "h5");
|
|
1915
1950
|
i0.ɵɵelement(2, "i", 43);
|
|
1916
1951
|
i0.ɵɵtext(3, " IS-A Inherited Field ");
|
|
1917
1952
|
i0.ɵɵelementEnd();
|
|
1918
|
-
i0.ɵɵelementStart(4, "div",
|
|
1953
|
+
i0.ɵɵelementStart(4, "div", 288)(5, "div", 289)(6, "span", 290);
|
|
1919
1954
|
i0.ɵɵtext(7, "Source Entity");
|
|
1920
1955
|
i0.ɵɵelementEnd();
|
|
1921
|
-
i0.ɵɵelementStart(8, "span",
|
|
1922
|
-
i0.ɵɵlistener("click", function
|
|
1956
|
+
i0.ɵɵelementStart(8, "span", 294);
|
|
1957
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_27_Template_span_click_8_listener() { i0.ɵɵrestoreView(_r47); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.NavigateToEntity(ctx_r2.ParentChain[0])); });
|
|
1923
1958
|
i0.ɵɵtext(9);
|
|
1924
1959
|
i0.ɵɵelement(10, "i", 62);
|
|
1925
1960
|
i0.ɵɵelementEnd()();
|
|
1926
|
-
i0.ɵɵelementStart(11, "div",
|
|
1961
|
+
i0.ɵɵelementStart(11, "div", 289)(12, "span", 290);
|
|
1927
1962
|
i0.ɵɵtext(13, "Routing");
|
|
1928
1963
|
i0.ɵɵelementEnd();
|
|
1929
|
-
i0.ɵɵelementStart(14, "span",
|
|
1964
|
+
i0.ɵɵelementStart(14, "span", 292);
|
|
1930
1965
|
i0.ɵɵtext(15, "ORM routes Set/Get to parent");
|
|
1931
1966
|
i0.ɵɵelementEnd()()()();
|
|
1932
1967
|
} if (rf & 2) {
|
|
@@ -1934,23 +1969,23 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
1934
1969
|
i0.ɵɵadvance(9);
|
|
1935
1970
|
i0.ɵɵtextInterpolate1(" ", ctx_r2.GetISAFieldSource(ctx_r2.selectedField), " ");
|
|
1936
1971
|
} }
|
|
1937
|
-
function
|
|
1972
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
1938
1973
|
const _r48 = i0.ɵɵgetCurrentView();
|
|
1939
|
-
i0.ɵɵelementStart(0, "div",
|
|
1974
|
+
i0.ɵɵelementStart(0, "div", 285)(1, "h5");
|
|
1940
1975
|
i0.ɵɵtext(2, "Relationship");
|
|
1941
1976
|
i0.ɵɵelementEnd();
|
|
1942
|
-
i0.ɵɵelementStart(3, "div",
|
|
1977
|
+
i0.ɵɵelementStart(3, "div", 288)(4, "div", 289)(5, "span", 290);
|
|
1943
1978
|
i0.ɵɵtext(6, "Related Entity");
|
|
1944
1979
|
i0.ɵɵelementEnd();
|
|
1945
|
-
i0.ɵɵelementStart(7, "span",
|
|
1946
|
-
i0.ɵɵlistener("click", function
|
|
1980
|
+
i0.ɵɵelementStart(7, "span", 295);
|
|
1981
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_28_Template_span_click_7_listener() { i0.ɵɵrestoreView(_r48); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.navigateToRelatedEntity(ctx_r2.selectedField)); });
|
|
1947
1982
|
i0.ɵɵtext(8);
|
|
1948
1983
|
i0.ɵɵelement(9, "i", 62);
|
|
1949
1984
|
i0.ɵɵelementEnd()();
|
|
1950
|
-
i0.ɵɵelementStart(10, "div",
|
|
1985
|
+
i0.ɵɵelementStart(10, "div", 289)(11, "span", 290);
|
|
1951
1986
|
i0.ɵɵtext(12, "Display Type");
|
|
1952
1987
|
i0.ɵɵelementEnd();
|
|
1953
|
-
i0.ɵɵelementStart(13, "span",
|
|
1988
|
+
i0.ɵɵelementStart(13, "span", 292);
|
|
1954
1989
|
i0.ɵɵtext(14);
|
|
1955
1990
|
i0.ɵɵelementEnd()()()();
|
|
1956
1991
|
} if (rf & 2) {
|
|
@@ -1960,20 +1995,20 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
1960
1995
|
i0.ɵɵadvance(6);
|
|
1961
1996
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.RelatedEntityDisplayType);
|
|
1962
1997
|
} }
|
|
1963
|
-
function
|
|
1964
|
-
i0.ɵɵelementStart(0, "div",
|
|
1998
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
1999
|
+
i0.ɵɵelementStart(0, "div", 285)(1, "h5");
|
|
1965
2000
|
i0.ɵɵtext(2, "Encryption");
|
|
1966
2001
|
i0.ɵɵelementEnd();
|
|
1967
|
-
i0.ɵɵelementStart(3, "div",
|
|
2002
|
+
i0.ɵɵelementStart(3, "div", 288)(4, "div", 289)(5, "span", 290);
|
|
1968
2003
|
i0.ɵɵtext(6, "Encrypted");
|
|
1969
2004
|
i0.ɵɵelementEnd();
|
|
1970
|
-
i0.ɵɵelementStart(7, "span",
|
|
2005
|
+
i0.ɵɵelementStart(7, "span", 292);
|
|
1971
2006
|
i0.ɵɵtext(8, "Yes");
|
|
1972
2007
|
i0.ɵɵelementEnd()();
|
|
1973
|
-
i0.ɵɵelementStart(9, "div",
|
|
2008
|
+
i0.ɵɵelementStart(9, "div", 289)(10, "span", 290);
|
|
1974
2009
|
i0.ɵɵtext(11, "Decrypt in API");
|
|
1975
2010
|
i0.ɵɵelementEnd();
|
|
1976
|
-
i0.ɵɵelementStart(12, "span",
|
|
2011
|
+
i0.ɵɵelementStart(12, "span", 292);
|
|
1977
2012
|
i0.ɵɵtext(13);
|
|
1978
2013
|
i0.ɵɵelementEnd()()()();
|
|
1979
2014
|
} if (rf & 2) {
|
|
@@ -1981,11 +2016,11 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
1981
2016
|
i0.ɵɵadvance(13);
|
|
1982
2017
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.AllowDecryptInAPI ? "Yes" : "No");
|
|
1983
2018
|
} }
|
|
1984
|
-
function
|
|
1985
|
-
i0.ɵɵelementStart(0, "div",
|
|
2019
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_63_Template(rf, ctx) { if (rf & 1) {
|
|
2020
|
+
i0.ɵɵelementStart(0, "div", 289)(1, "span", 290);
|
|
1986
2021
|
i0.ɵɵtext(2, "Category");
|
|
1987
2022
|
i0.ɵɵelementEnd();
|
|
1988
|
-
i0.ɵɵelementStart(3, "span",
|
|
2023
|
+
i0.ɵɵelementStart(3, "span", 292);
|
|
1989
2024
|
i0.ɵɵtext(4);
|
|
1990
2025
|
i0.ɵɵelementEnd()();
|
|
1991
2026
|
} if (rf & 2) {
|
|
@@ -1993,8 +2028,8 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
1993
2028
|
i0.ɵɵadvance(4);
|
|
1994
2029
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Category);
|
|
1995
2030
|
} }
|
|
1996
|
-
function
|
|
1997
|
-
i0.ɵɵelementStart(0, "span",
|
|
2031
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_69_For_5_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2032
|
+
i0.ɵɵelementStart(0, "span", 298);
|
|
1998
2033
|
i0.ɵɵtext(1);
|
|
1999
2034
|
i0.ɵɵelementEnd();
|
|
2000
2035
|
} if (rf & 2) {
|
|
@@ -2002,10 +2037,10 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
2002
2037
|
i0.ɵɵadvance();
|
|
2003
2038
|
i0.ɵɵtextInterpolate(val_r49.Code);
|
|
2004
2039
|
} }
|
|
2005
|
-
function
|
|
2006
|
-
i0.ɵɵelementStart(0, "div",
|
|
2007
|
-
i0.ɵɵconditionalCreate(1,
|
|
2008
|
-
i0.ɵɵelementStart(2, "span",
|
|
2040
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_69_For_5_Template(rf, ctx) { if (rf & 1) {
|
|
2041
|
+
i0.ɵɵelementStart(0, "div", 297);
|
|
2042
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_69_For_5_Conditional_1_Template, 2, 1, "span", 298);
|
|
2043
|
+
i0.ɵɵelementStart(2, "span", 299);
|
|
2009
2044
|
i0.ɵɵtext(3);
|
|
2010
2045
|
i0.ɵɵelementEnd()();
|
|
2011
2046
|
} if (rf & 2) {
|
|
@@ -2015,101 +2050,106 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Conditional_
|
|
|
2015
2050
|
i0.ɵɵadvance(2);
|
|
2016
2051
|
i0.ɵɵtextInterpolate(val_r49.Value);
|
|
2017
2052
|
} }
|
|
2018
|
-
function
|
|
2019
|
-
i0.ɵɵelementStart(0, "div",
|
|
2053
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_69_Template(rf, ctx) { if (rf & 1) {
|
|
2054
|
+
i0.ɵɵelementStart(0, "div", 285)(1, "h5");
|
|
2020
2055
|
i0.ɵɵtext(2, "Allowed Values");
|
|
2021
2056
|
i0.ɵɵelementEnd();
|
|
2022
|
-
i0.ɵɵelementStart(3, "div",
|
|
2023
|
-
i0.ɵɵrepeaterCreate(4,
|
|
2057
|
+
i0.ɵɵelementStart(3, "div", 296);
|
|
2058
|
+
i0.ɵɵrepeaterCreate(4, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_69_For_5_Template, 4, 2, "div", 297, i0.ɵɵrepeaterTrackByIdentity);
|
|
2024
2059
|
i0.ɵɵelementEnd()();
|
|
2025
2060
|
} if (rf & 2) {
|
|
2026
2061
|
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
2027
2062
|
i0.ɵɵadvance(4);
|
|
2028
2063
|
i0.ɵɵrepeater(ctx_r2.selectedField.EntityFieldValues);
|
|
2029
2064
|
} }
|
|
2030
|
-
function
|
|
2031
|
-
i0.ɵɵelementStart(0, "div", 40)(1, "div",
|
|
2065
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_65_Template(rf, ctx) { if (rf & 1) {
|
|
2066
|
+
i0.ɵɵelementStart(0, "div", 40)(1, "div", 285)(2, "h4");
|
|
2032
2067
|
i0.ɵɵtext(3);
|
|
2033
2068
|
i0.ɵɵelementEnd();
|
|
2034
|
-
i0.ɵɵ
|
|
2069
|
+
i0.ɵɵelementStart(4, "div", 286);
|
|
2070
|
+
i0.ɵɵtext(5);
|
|
2071
|
+
i0.ɵɵelementEnd();
|
|
2072
|
+
i0.ɵɵconditionalCreate(6, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_6_Template, 2, 1, "p", 287);
|
|
2035
2073
|
i0.ɵɵelementEnd();
|
|
2036
|
-
i0.ɵɵelementStart(
|
|
2037
|
-
i0.ɵɵtext(
|
|
2074
|
+
i0.ɵɵelementStart(7, "div", 285)(8, "h5");
|
|
2075
|
+
i0.ɵɵtext(9, "Type Information");
|
|
2038
2076
|
i0.ɵɵelementEnd();
|
|
2039
|
-
i0.ɵɵelementStart(
|
|
2040
|
-
i0.ɵɵtext(
|
|
2077
|
+
i0.ɵɵelementStart(10, "div", 288)(11, "div", 289)(12, "span", 290);
|
|
2078
|
+
i0.ɵɵtext(13, "SQL Type");
|
|
2041
2079
|
i0.ɵɵelementEnd();
|
|
2042
|
-
i0.ɵɵelementStart(
|
|
2043
|
-
i0.ɵɵtext(
|
|
2080
|
+
i0.ɵɵelementStart(14, "span", 291);
|
|
2081
|
+
i0.ɵɵtext(15);
|
|
2044
2082
|
i0.ɵɵelementEnd()();
|
|
2045
|
-
i0.ɵɵelementStart(
|
|
2046
|
-
i0.ɵɵtext(
|
|
2083
|
+
i0.ɵɵelementStart(16, "div", 289)(17, "span", 290);
|
|
2084
|
+
i0.ɵɵtext(18, "TypeScript Type");
|
|
2047
2085
|
i0.ɵɵelementEnd();
|
|
2048
|
-
i0.ɵɵelementStart(
|
|
2049
|
-
i0.ɵɵtext(
|
|
2086
|
+
i0.ɵɵelementStart(19, "span", 291);
|
|
2087
|
+
i0.ɵɵtext(20);
|
|
2050
2088
|
i0.ɵɵelementEnd()();
|
|
2051
|
-
i0.ɵɵelementStart(
|
|
2052
|
-
i0.ɵɵtext(
|
|
2089
|
+
i0.ɵɵelementStart(21, "div", 289)(22, "span", 290);
|
|
2090
|
+
i0.ɵɵtext(23, "Nullable");
|
|
2053
2091
|
i0.ɵɵelementEnd();
|
|
2054
|
-
i0.ɵɵelementStart(
|
|
2055
|
-
i0.ɵɵtext(
|
|
2092
|
+
i0.ɵɵelementStart(24, "span", 292);
|
|
2093
|
+
i0.ɵɵtext(25);
|
|
2056
2094
|
i0.ɵɵelementEnd()();
|
|
2057
|
-
i0.ɵɵconditionalCreate(
|
|
2095
|
+
i0.ɵɵconditionalCreate(26, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_26_Template, 5, 1, "div", 289);
|
|
2058
2096
|
i0.ɵɵelementEnd()();
|
|
2059
|
-
i0.ɵɵconditionalCreate(
|
|
2060
|
-
i0.ɵɵconditionalCreate(
|
|
2061
|
-
i0.ɵɵconditionalCreate(
|
|
2062
|
-
i0.ɵɵelementStart(
|
|
2063
|
-
i0.ɵɵtext(
|
|
2097
|
+
i0.ɵɵconditionalCreate(27, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_27_Template, 16, 1, "div", 293);
|
|
2098
|
+
i0.ɵɵconditionalCreate(28, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_28_Template, 15, 2, "div", 285);
|
|
2099
|
+
i0.ɵɵconditionalCreate(29, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_29_Template, 14, 1, "div", 285);
|
|
2100
|
+
i0.ɵɵelementStart(30, "div", 285)(31, "h5");
|
|
2101
|
+
i0.ɵɵtext(32, "API Settings");
|
|
2064
2102
|
i0.ɵɵelementEnd();
|
|
2065
|
-
i0.ɵɵelementStart(
|
|
2066
|
-
i0.ɵɵtext(
|
|
2103
|
+
i0.ɵɵelementStart(33, "div", 288)(34, "div", 289)(35, "span", 290);
|
|
2104
|
+
i0.ɵɵtext(36, "Allow Update");
|
|
2067
2105
|
i0.ɵɵelementEnd();
|
|
2068
|
-
i0.ɵɵelementStart(
|
|
2069
|
-
i0.ɵɵtext(
|
|
2106
|
+
i0.ɵɵelementStart(37, "span", 292);
|
|
2107
|
+
i0.ɵɵtext(38);
|
|
2070
2108
|
i0.ɵɵelementEnd()();
|
|
2071
|
-
i0.ɵɵelementStart(
|
|
2072
|
-
i0.ɵɵtext(
|
|
2109
|
+
i0.ɵɵelementStart(39, "div", 289)(40, "span", 290);
|
|
2110
|
+
i0.ɵɵtext(41, "Include in Search");
|
|
2073
2111
|
i0.ɵɵelementEnd();
|
|
2074
|
-
i0.ɵɵelementStart(
|
|
2075
|
-
i0.ɵɵtext(
|
|
2112
|
+
i0.ɵɵelementStart(42, "span", 292);
|
|
2113
|
+
i0.ɵɵtext(43);
|
|
2076
2114
|
i0.ɵɵelementEnd()();
|
|
2077
|
-
i0.ɵɵelementStart(
|
|
2078
|
-
i0.ɵɵtext(
|
|
2115
|
+
i0.ɵɵelementStart(44, "div", 289)(45, "span", 290);
|
|
2116
|
+
i0.ɵɵtext(46, "Full-Text Search");
|
|
2079
2117
|
i0.ɵɵelementEnd();
|
|
2080
|
-
i0.ɵɵelementStart(
|
|
2081
|
-
i0.ɵɵtext(
|
|
2118
|
+
i0.ɵɵelementStart(47, "span", 292);
|
|
2119
|
+
i0.ɵɵtext(48);
|
|
2082
2120
|
i0.ɵɵelementEnd()()()();
|
|
2083
|
-
i0.ɵɵelementStart(
|
|
2084
|
-
i0.ɵɵtext(
|
|
2121
|
+
i0.ɵɵelementStart(49, "div", 285)(50, "h5");
|
|
2122
|
+
i0.ɵɵtext(51, "Form Settings");
|
|
2085
2123
|
i0.ɵɵelementEnd();
|
|
2086
|
-
i0.ɵɵelementStart(
|
|
2087
|
-
i0.ɵɵtext(
|
|
2124
|
+
i0.ɵɵelementStart(52, "div", 288)(53, "div", 289)(54, "span", 290);
|
|
2125
|
+
i0.ɵɵtext(55, "Include in Form");
|
|
2088
2126
|
i0.ɵɵelementEnd();
|
|
2089
|
-
i0.ɵɵelementStart(
|
|
2090
|
-
i0.ɵɵtext(
|
|
2127
|
+
i0.ɵɵelementStart(56, "span", 292);
|
|
2128
|
+
i0.ɵɵtext(57);
|
|
2091
2129
|
i0.ɵɵelementEnd()();
|
|
2092
|
-
i0.ɵɵelementStart(
|
|
2093
|
-
i0.ɵɵtext(
|
|
2130
|
+
i0.ɵɵelementStart(58, "div", 289)(59, "span", 290);
|
|
2131
|
+
i0.ɵɵtext(60, "Section");
|
|
2094
2132
|
i0.ɵɵelementEnd();
|
|
2095
|
-
i0.ɵɵelementStart(
|
|
2096
|
-
i0.ɵɵtext(
|
|
2133
|
+
i0.ɵɵelementStart(61, "span", 292);
|
|
2134
|
+
i0.ɵɵtext(62);
|
|
2097
2135
|
i0.ɵɵelementEnd()();
|
|
2098
|
-
i0.ɵɵconditionalCreate(
|
|
2099
|
-
i0.ɵɵelementStart(
|
|
2100
|
-
i0.ɵɵtext(
|
|
2136
|
+
i0.ɵɵconditionalCreate(63, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_63_Template, 5, 1, "div", 289);
|
|
2137
|
+
i0.ɵɵelementStart(64, "div", 289)(65, "span", 290);
|
|
2138
|
+
i0.ɵɵtext(66, "Sequence");
|
|
2101
2139
|
i0.ɵɵelementEnd();
|
|
2102
|
-
i0.ɵɵelementStart(
|
|
2103
|
-
i0.ɵɵtext(
|
|
2140
|
+
i0.ɵɵelementStart(67, "span", 292);
|
|
2141
|
+
i0.ɵɵtext(68);
|
|
2104
2142
|
i0.ɵɵelementEnd()()()();
|
|
2105
|
-
i0.ɵɵconditionalCreate(
|
|
2143
|
+
i0.ɵɵconditionalCreate(69, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Conditional_69_Template, 6, 0, "div", 285);
|
|
2106
2144
|
i0.ɵɵelementEnd();
|
|
2107
2145
|
} if (rf & 2) {
|
|
2108
2146
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
2109
2147
|
i0.ɵɵadvance(3);
|
|
2110
2148
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.DisplayName || ctx_r2.selectedField.Name);
|
|
2149
|
+
i0.ɵɵadvance(2);
|
|
2150
|
+
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Name);
|
|
2111
2151
|
i0.ɵɵadvance();
|
|
2112
|
-
i0.ɵɵconditional(ctx_r2.selectedField.Description ?
|
|
2152
|
+
i0.ɵɵconditional(ctx_r2.selectedField.Description ? 6 : -1);
|
|
2113
2153
|
i0.ɵɵadvance(9);
|
|
2114
2154
|
i0.ɵɵtextInterpolate(ctx_r2.formatFieldType(ctx_r2.selectedField));
|
|
2115
2155
|
i0.ɵɵadvance(5);
|
|
@@ -2117,13 +2157,13 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Template(rf,
|
|
|
2117
2157
|
i0.ɵɵadvance(5);
|
|
2118
2158
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.AllowsNull ? "Yes" : "No");
|
|
2119
2159
|
i0.ɵɵadvance();
|
|
2120
|
-
i0.ɵɵconditional(ctx_r2.selectedField.DefaultValue ?
|
|
2160
|
+
i0.ɵɵconditional(ctx_r2.selectedField.DefaultValue ? 26 : -1);
|
|
2121
2161
|
i0.ɵɵadvance();
|
|
2122
|
-
i0.ɵɵconditional(ctx_r2.IsInheritedField(ctx_r2.selectedField) ?
|
|
2162
|
+
i0.ɵɵconditional(ctx_r2.IsInheritedField(ctx_r2.selectedField) ? 27 : -1);
|
|
2123
2163
|
i0.ɵɵadvance();
|
|
2124
|
-
i0.ɵɵconditional(ctx_r2.selectedField.RelatedEntityID ?
|
|
2164
|
+
i0.ɵɵconditional(ctx_r2.selectedField.RelatedEntityID ? 28 : -1);
|
|
2125
2165
|
i0.ɵɵadvance();
|
|
2126
|
-
i0.ɵɵconditional(ctx_r2.selectedField.Encrypt ?
|
|
2166
|
+
i0.ɵɵconditional(ctx_r2.selectedField.Encrypt ? 29 : -1);
|
|
2127
2167
|
i0.ɵɵadvance(9);
|
|
2128
2168
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.AllowUpdateAPI ? "Yes" : "No");
|
|
2129
2169
|
i0.ɵɵadvance(5);
|
|
@@ -2135,56 +2175,56 @@ function MJEntityFormComponentExtended_Conditional_0_Conditional_64_Template(rf,
|
|
|
2135
2175
|
i0.ɵɵadvance(5);
|
|
2136
2176
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.GeneratedFormSection);
|
|
2137
2177
|
i0.ɵɵadvance();
|
|
2138
|
-
i0.ɵɵconditional(ctx_r2.selectedField.Category ?
|
|
2178
|
+
i0.ɵɵconditional(ctx_r2.selectedField.Category ? 63 : -1);
|
|
2139
2179
|
i0.ɵɵadvance(5);
|
|
2140
2180
|
i0.ɵɵtextInterpolate(ctx_r2.selectedField.Sequence);
|
|
2141
2181
|
i0.ɵɵadvance();
|
|
2142
|
-
i0.ɵɵconditional(ctx_r2.selectedField.EntityFieldValues.length > 0 ?
|
|
2182
|
+
i0.ɵɵconditional(ctx_r2.selectedField.EntityFieldValues.length > 0 ? 69 : -1);
|
|
2143
2183
|
} }
|
|
2144
|
-
function
|
|
2145
|
-
i0.ɵɵelementStart(0, "div", 40)(1, "div",
|
|
2184
|
+
function MJEntityFormComponentExtended_Conditional_0_Conditional_66_Template(rf, ctx) { if (rf & 1) {
|
|
2185
|
+
i0.ɵɵelementStart(0, "div", 40)(1, "div", 285)(2, "h4");
|
|
2146
2186
|
i0.ɵɵtext(3);
|
|
2147
2187
|
i0.ɵɵelementEnd()();
|
|
2148
|
-
i0.ɵɵelementStart(4, "div",
|
|
2188
|
+
i0.ɵɵelementStart(4, "div", 285)(5, "h5");
|
|
2149
2189
|
i0.ɵɵtext(6, "Connection");
|
|
2150
2190
|
i0.ɵɵelementEnd();
|
|
2151
|
-
i0.ɵɵelementStart(7, "div",
|
|
2191
|
+
i0.ɵɵelementStart(7, "div", 288)(8, "div", 289)(9, "span", 290);
|
|
2152
2192
|
i0.ɵɵtext(10, "From Entity");
|
|
2153
2193
|
i0.ɵɵelementEnd();
|
|
2154
|
-
i0.ɵɵelementStart(11, "span",
|
|
2194
|
+
i0.ɵɵelementStart(11, "span", 292);
|
|
2155
2195
|
i0.ɵɵtext(12);
|
|
2156
2196
|
i0.ɵɵelementEnd()();
|
|
2157
|
-
i0.ɵɵelementStart(13, "div",
|
|
2197
|
+
i0.ɵɵelementStart(13, "div", 289)(14, "span", 290);
|
|
2158
2198
|
i0.ɵɵtext(15, "Join Field");
|
|
2159
2199
|
i0.ɵɵelementEnd();
|
|
2160
|
-
i0.ɵɵelementStart(16, "span",
|
|
2200
|
+
i0.ɵɵelementStart(16, "span", 291);
|
|
2161
2201
|
i0.ɵɵtext(17);
|
|
2162
2202
|
i0.ɵɵelementEnd()();
|
|
2163
|
-
i0.ɵɵelementStart(18, "div",
|
|
2203
|
+
i0.ɵɵelementStart(18, "div", 289)(19, "span", 290);
|
|
2164
2204
|
i0.ɵɵtext(20, "Type");
|
|
2165
2205
|
i0.ɵɵelementEnd();
|
|
2166
|
-
i0.ɵɵelementStart(21, "span",
|
|
2206
|
+
i0.ɵɵelementStart(21, "span", 292);
|
|
2167
2207
|
i0.ɵɵtext(22);
|
|
2168
2208
|
i0.ɵɵelementEnd()()()();
|
|
2169
|
-
i0.ɵɵelementStart(23, "div",
|
|
2209
|
+
i0.ɵɵelementStart(23, "div", 285)(24, "h5");
|
|
2170
2210
|
i0.ɵɵtext(25, "Display Settings");
|
|
2171
2211
|
i0.ɵɵelementEnd();
|
|
2172
|
-
i0.ɵɵelementStart(26, "div",
|
|
2212
|
+
i0.ɵɵelementStart(26, "div", 288)(27, "div", 289)(28, "span", 290);
|
|
2173
2213
|
i0.ɵɵtext(29, "Display in Form");
|
|
2174
2214
|
i0.ɵɵelementEnd();
|
|
2175
|
-
i0.ɵɵelementStart(30, "span",
|
|
2215
|
+
i0.ɵɵelementStart(30, "span", 292);
|
|
2176
2216
|
i0.ɵɵtext(31);
|
|
2177
2217
|
i0.ɵɵelementEnd()();
|
|
2178
|
-
i0.ɵɵelementStart(32, "div",
|
|
2218
|
+
i0.ɵɵelementStart(32, "div", 289)(33, "span", 290);
|
|
2179
2219
|
i0.ɵɵtext(34, "Location");
|
|
2180
2220
|
i0.ɵɵelementEnd();
|
|
2181
|
-
i0.ɵɵelementStart(35, "span",
|
|
2221
|
+
i0.ɵɵelementStart(35, "span", 292);
|
|
2182
2222
|
i0.ɵɵtext(36);
|
|
2183
2223
|
i0.ɵɵelementEnd()();
|
|
2184
|
-
i0.ɵɵelementStart(37, "div",
|
|
2224
|
+
i0.ɵɵelementStart(37, "div", 289)(38, "span", 290);
|
|
2185
2225
|
i0.ɵɵtext(39, "Bundle in API");
|
|
2186
2226
|
i0.ɵɵelementEnd();
|
|
2187
|
-
i0.ɵɵelementStart(40, "span",
|
|
2227
|
+
i0.ɵɵelementStart(40, "span", 292);
|
|
2188
2228
|
i0.ɵɵtext(41);
|
|
2189
2229
|
i0.ɵɵelementEnd()()()()();
|
|
2190
2230
|
} if (rf & 2) {
|
|
@@ -2255,34 +2295,36 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
2255
2295
|
i0.ɵɵelementStart(38, "span", 19);
|
|
2256
2296
|
i0.ɵɵtext(39, "Roles");
|
|
2257
2297
|
i0.ɵɵelementEnd()();
|
|
2258
|
-
i0.ɵɵelementStart(40, "div",
|
|
2259
|
-
i0.ɵɵ
|
|
2298
|
+
i0.ɵɵelementStart(40, "div", 16);
|
|
2299
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Template_div_click_40_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.setActiveSection("data")); });
|
|
2300
|
+
i0.ɵɵelement(41, "i", 22);
|
|
2260
2301
|
i0.ɵɵconditionalCreate(42, MJEntityFormComponentExtended_Conditional_0_Conditional_42_Template, 2, 1, "span", 18);
|
|
2261
|
-
i0.ɵɵconditionalCreate(43, MJEntityFormComponentExtended_Conditional_0_Conditional_43_Template, 2, 0, "span",
|
|
2302
|
+
i0.ɵɵconditionalCreate(43, MJEntityFormComponentExtended_Conditional_0_Conditional_43_Template, 2, 0, "span", 23);
|
|
2262
2303
|
i0.ɵɵelementStart(44, "span", 19);
|
|
2263
2304
|
i0.ɵɵtext(45, "Rows");
|
|
2264
2305
|
i0.ɵɵelementEnd()()()();
|
|
2265
|
-
i0.ɵɵelementStart(46, "div",
|
|
2266
|
-
i0.ɵɵrepeaterCreate(48, MJEntityFormComponentExtended_Conditional_0_For_49_Template, 5, 7, "button",
|
|
2267
|
-
i0.ɵɵelementEnd();
|
|
2268
|
-
i0.ɵɵelementStart(50, "main",
|
|
2269
|
-
i0.ɵɵconditionalCreate(51, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template, 111, 23, "section",
|
|
2270
|
-
i0.ɵɵconditionalCreate(52, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template, 15, 8, "section",
|
|
2271
|
-
i0.ɵɵconditionalCreate(53, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template, 13, 7, "section",
|
|
2272
|
-
i0.ɵɵconditionalCreate(54, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template, 55, 22, "section",
|
|
2273
|
-
i0.ɵɵconditionalCreate(55, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template,
|
|
2274
|
-
i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template,
|
|
2275
|
-
i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template,
|
|
2276
|
-
i0.ɵɵ
|
|
2277
|
-
i0.ɵɵ
|
|
2278
|
-
i0.ɵɵ
|
|
2306
|
+
i0.ɵɵelementStart(46, "div", 24)(47, "nav", 25);
|
|
2307
|
+
i0.ɵɵrepeaterCreate(48, MJEntityFormComponentExtended_Conditional_0_For_49_Template, 5, 7, "button", 26, i0.ɵɵrepeaterTrackByIdentity);
|
|
2308
|
+
i0.ɵɵelementEnd();
|
|
2309
|
+
i0.ɵɵelementStart(50, "main", 27);
|
|
2310
|
+
i0.ɵɵconditionalCreate(51, MJEntityFormComponentExtended_Conditional_0_Conditional_51_Template, 111, 23, "section", 28);
|
|
2311
|
+
i0.ɵɵconditionalCreate(52, MJEntityFormComponentExtended_Conditional_0_Conditional_52_Template, 15, 8, "section", 29);
|
|
2312
|
+
i0.ɵɵconditionalCreate(53, MJEntityFormComponentExtended_Conditional_0_Conditional_53_Template, 13, 7, "section", 30);
|
|
2313
|
+
i0.ɵɵconditionalCreate(54, MJEntityFormComponentExtended_Conditional_0_Conditional_54_Template, 55, 22, "section", 31);
|
|
2314
|
+
i0.ɵɵconditionalCreate(55, MJEntityFormComponentExtended_Conditional_0_Conditional_55_Template, 3, 1, "section", 32);
|
|
2315
|
+
i0.ɵɵconditionalCreate(56, MJEntityFormComponentExtended_Conditional_0_Conditional_56_Template, 57, 20, "section", 33);
|
|
2316
|
+
i0.ɵɵconditionalCreate(57, MJEntityFormComponentExtended_Conditional_0_Conditional_57_Template, 18, 7, "section", 34);
|
|
2317
|
+
i0.ɵɵconditionalCreate(58, MJEntityFormComponentExtended_Conditional_0_Conditional_58_Template, 27, 8, "section", 35);
|
|
2318
|
+
i0.ɵɵelementEnd();
|
|
2319
|
+
i0.ɵɵelementStart(59, "aside", 36)(60, "div", 37);
|
|
2279
2320
|
i0.ɵɵconditionalCreate(61, MJEntityFormComponentExtended_Conditional_0_Conditional_61_Template, 2, 0, "h3");
|
|
2280
|
-
i0.ɵɵ
|
|
2281
|
-
i0.ɵɵ
|
|
2282
|
-
i0.ɵɵ
|
|
2321
|
+
i0.ɵɵconditionalCreate(62, MJEntityFormComponentExtended_Conditional_0_Conditional_62_Template, 2, 0, "h3");
|
|
2322
|
+
i0.ɵɵelementStart(63, "button", 38);
|
|
2323
|
+
i0.ɵɵlistener("click", function MJEntityFormComponentExtended_Conditional_0_Template_button_click_63_listener() { i0.ɵɵrestoreView(_r1); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.closeDetailPanel()); });
|
|
2324
|
+
i0.ɵɵelement(64, "i", 39);
|
|
2283
2325
|
i0.ɵɵelementEnd()();
|
|
2284
|
-
i0.ɵɵconditionalCreate(
|
|
2285
|
-
i0.ɵɵconditionalCreate(
|
|
2326
|
+
i0.ɵɵconditionalCreate(65, MJEntityFormComponentExtended_Conditional_0_Conditional_65_Template, 70, 18, "div", 40);
|
|
2327
|
+
i0.ɵɵconditionalCreate(66, MJEntityFormComponentExtended_Conditional_0_Conditional_66_Template, 42, 7, "div", 40);
|
|
2286
2328
|
i0.ɵɵelementEnd()()();
|
|
2287
2329
|
} if (rf & 2) {
|
|
2288
2330
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
@@ -2331,30 +2373,32 @@ function MJEntityFormComponentExtended_Conditional_0_Template(rf, ctx) { if (rf
|
|
|
2331
2373
|
i0.ɵɵadvance();
|
|
2332
2374
|
i0.ɵɵconditional(ctx_r2.activeSection === "permissions" ? 54 : -1);
|
|
2333
2375
|
i0.ɵɵadvance();
|
|
2334
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "
|
|
2376
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "data" ? 55 : -1);
|
|
2377
|
+
i0.ɵɵadvance();
|
|
2378
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "lineage" ? 56 : -1);
|
|
2335
2379
|
i0.ɵɵadvance();
|
|
2336
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "history" ?
|
|
2380
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "history" ? 57 : -1);
|
|
2337
2381
|
i0.ɵɵadvance();
|
|
2338
|
-
i0.ɵɵconditional(ctx_r2.activeSection === "settings" ?
|
|
2382
|
+
i0.ɵɵconditional(ctx_r2.activeSection === "settings" ? 58 : -1);
|
|
2339
2383
|
i0.ɵɵadvance();
|
|
2340
2384
|
i0.ɵɵclassProp("open", ctx_r2.detailPanelOpen);
|
|
2341
2385
|
i0.ɵɵadvance(2);
|
|
2342
|
-
i0.ɵɵconditional(ctx_r2.selectedField ?
|
|
2386
|
+
i0.ɵɵconditional(ctx_r2.selectedField ? 61 : -1);
|
|
2343
2387
|
i0.ɵɵadvance();
|
|
2344
|
-
i0.ɵɵconditional(ctx_r2.selectedRelationship ?
|
|
2388
|
+
i0.ɵɵconditional(ctx_r2.selectedRelationship ? 62 : -1);
|
|
2345
2389
|
i0.ɵɵadvance(3);
|
|
2346
|
-
i0.ɵɵconditional(ctx_r2.selectedField ?
|
|
2390
|
+
i0.ɵɵconditional(ctx_r2.selectedField ? 65 : -1);
|
|
2347
2391
|
i0.ɵɵadvance();
|
|
2348
|
-
i0.ɵɵconditional(ctx_r2.selectedRelationship ?
|
|
2392
|
+
i0.ɵɵconditional(ctx_r2.selectedRelationship ? 66 : -1);
|
|
2349
2393
|
} }
|
|
2350
2394
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
2351
|
-
i0.ɵɵelementStart(0, "div",
|
|
2352
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
2395
|
+
i0.ɵɵelementStart(0, "div", 300);
|
|
2396
|
+
i0.ɵɵelement(1, "mj-loading", 303);
|
|
2353
2397
|
i0.ɵɵelementEnd();
|
|
2354
2398
|
} }
|
|
2355
2399
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2356
|
-
i0.ɵɵelementStart(0, "div",
|
|
2357
|
-
i0.ɵɵelement(1, "i",
|
|
2400
|
+
i0.ɵɵelementStart(0, "div", 301);
|
|
2401
|
+
i0.ɵɵelement(1, "i", 304);
|
|
2358
2402
|
i0.ɵɵelementStart(2, "p");
|
|
2359
2403
|
i0.ɵɵtext(3);
|
|
2360
2404
|
i0.ɵɵelementEnd()();
|
|
@@ -2364,16 +2408,16 @@ function MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template(rf,
|
|
|
2364
2408
|
i0.ɵɵtextInterpolate(ctx_r2.explorerError);
|
|
2365
2409
|
} }
|
|
2366
2410
|
function MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
2367
|
-
i0.ɵɵelementStart(0, "div",
|
|
2368
|
-
i0.ɵɵelement(1, "i",
|
|
2411
|
+
i0.ɵɵelementStart(0, "div", 302);
|
|
2412
|
+
i0.ɵɵelement(1, "i", 22);
|
|
2369
2413
|
i0.ɵɵelementStart(2, "p");
|
|
2370
2414
|
i0.ɵɵtext(3, "Entity metadata not available");
|
|
2371
2415
|
i0.ɵɵelementEnd()();
|
|
2372
2416
|
} }
|
|
2373
2417
|
function MJEntityFormComponentExtended_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
2374
|
-
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div",
|
|
2375
|
-
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 4, 1, "div",
|
|
2376
|
-
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 4, 0, "div",
|
|
2418
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_1_Conditional_0_Template, 2, 0, "div", 300);
|
|
2419
|
+
i0.ɵɵconditionalCreate(1, MJEntityFormComponentExtended_Conditional_1_Conditional_1_Template, 4, 1, "div", 301);
|
|
2420
|
+
i0.ɵɵconditionalCreate(2, MJEntityFormComponentExtended_Conditional_1_Conditional_2_Template, 4, 0, "div", 302);
|
|
2377
2421
|
} if (rf & 2) {
|
|
2378
2422
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
2379
2423
|
i0.ɵɵconditional(ctx_r2.isExplorerLoading ? 0 : -1);
|
|
@@ -2416,6 +2460,7 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2416
2460
|
{ id: 'fields', icon: 'fa-solid fa-table-cells', label: 'Fields' },
|
|
2417
2461
|
{ id: 'relationships', icon: 'fa-solid fa-diagram-project', label: 'Relations' },
|
|
2418
2462
|
{ id: 'permissions', icon: 'fa-solid fa-lock', label: 'Security' },
|
|
2463
|
+
{ id: 'data', icon: 'fa-solid fa-table-list', label: 'Data' },
|
|
2419
2464
|
{ id: 'lineage', icon: 'fa-solid fa-code-branch', label: 'Lineage' },
|
|
2420
2465
|
{ id: 'history', icon: 'fa-solid fa-clock-rotate-left', label: 'History' },
|
|
2421
2466
|
{ id: 'settings', icon: 'fa-solid fa-sliders', label: 'Settings' }
|
|
@@ -2899,7 +2944,8 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
2899
2944
|
getFieldSortValue(field, column) {
|
|
2900
2945
|
switch (column) {
|
|
2901
2946
|
case 'Sequence': return field.Sequence;
|
|
2902
|
-
case 'Name': return field.
|
|
2947
|
+
case 'Name': return field.Name;
|
|
2948
|
+
case 'DisplayName': return field.DisplayName || field.Name;
|
|
2903
2949
|
case 'Type': return field.Type;
|
|
2904
2950
|
case 'Length': return field.Length;
|
|
2905
2951
|
case 'AllowsNull': return field.AllowsNull;
|
|
@@ -3215,11 +3261,11 @@ let MJEntityFormComponentExtended = class MJEntityFormComponentExtended extends
|
|
|
3215
3261
|
}
|
|
3216
3262
|
}
|
|
3217
3263
|
static { this.ɵfac = /*@__PURE__*/ (() => { let ɵMJEntityFormComponentExtended_BaseFactory; return function MJEntityFormComponentExtended_Factory(__ngFactoryType__) { return (ɵMJEntityFormComponentExtended_BaseFactory || (ɵMJEntityFormComponentExtended_BaseFactory = i0.ɵɵgetInheritedFactory(MJEntityFormComponentExtended)))(__ngFactoryType__ || MJEntityFormComponentExtended); }; })(); }
|
|
3218
|
-
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, "stat-item"], [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", "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", "#3b82f6", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "#6366f1", "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-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-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-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, "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", "#7c3aed"], [1, "fa-solid", "fa-circle-minus", 2, "color", "#94a3b8"], ["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, "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) {
|
|
3219
|
-
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Template,
|
|
3264
|
+
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", "#3b82f6", "font-size", "8px"], [1, "fa-solid", "fa-arrow-up", 2, "color", "#6366f1", "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"], [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", "#7c3aed"], [1, "fa-solid", "fa-circle-minus", 2, "color", "#94a3b8"], ["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) {
|
|
3265
|
+
i0.ɵɵconditionalCreate(0, MJEntityFormComponentExtended_Conditional_0_Template, 67, 35, "div", 0)(1, MJEntityFormComponentExtended_Conditional_1_Template, 3, 3);
|
|
3220
3266
|
} if (rf & 2) {
|
|
3221
3267
|
i0.ɵɵconditional(!ctx.isExplorerLoading && ctx.entity ? 0 : 1);
|
|
3222
|
-
} }, dependencies: [i1.NgClass, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgModel, i3.CodeEditorComponent, i4.LoadingComponent, i5.ERDCompositeComponent, 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: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-tertiary: #f1f5f9;\n\n --text-primary: #1e293b;\n --text-secondary: #64748b;\n --text-muted: #94a3b8;\n\n --border-color: #e2e8f0;\n --border-light: #f1f5f9;\n\n --accent-color: #3b82f6;\n --accent-light: #eff6ff;\n --accent-dark: #1d4ed8;\n\n --success-color: #10b981;\n --warning-color: #f59e0b;\n --danger-color: #ef4444;\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n\n.explorer-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info[_ngcontent-%COMP%] {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n\n\n\n.explorer-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n\n\n.nav-rail[_ngcontent-%COMP%] {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.nav-item.active[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n\n\n\n\n\n.main-canvas[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n\n.section[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-muted);\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.depth-selector[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n\n\n.fields-list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n.col-seq[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.seq-num[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row[_ngcontent-%COMP%]:hover .seq-num[_ngcontent-%COMP%], \n.list-row.selected[_ngcontent-%COMP%] .seq-num[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n.col-name[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon[_ngcontent-%COMP%] {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.required-indicator[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required[_ngcontent-%COMP%] {\n color: var(--danger-color);\n background: rgba(239, 68, 68, 0.1);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: #78350f;\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);\n color: white;\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #a78bfa 0%, #8b5cf6 100%);\n color: white;\n}\n\n.col-desc[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.desc-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n.list-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--text-muted);\n gap: 12px;\n}\n\n.list-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n opacity: 0.5;\n}\n\n.list-empty[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n\n\n\n.stats-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover .stat-card-action[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action[_ngcontent-%COMP%] {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-main[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n\n\n.info-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n\n\n.capability-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #dcfce7;\n color: #166534;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n\n\n\n\n\n.fields-content[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.field-group[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-group[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n user-select: none;\n background: linear-gradient(to right, var(--bg-secondary), transparent);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(to right, var(--bg-tertiary), var(--bg-secondary));\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n width: 16px;\n transition: transform var(--transition-fast);\n}\n\n.group-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count[_ngcontent-%COMP%] {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content[_ngcontent-%COMP%] {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.field-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.field-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.field-related[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.field-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.badge[_ngcontent-%COMP%] {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.badge.fk[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.badge.encrypted[_ngcontent-%COMP%] {\n background: #fce7f3;\n color: #9d174d;\n}\n\n\n\n\n\n\n.relationships-graph[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-erd[_ngcontent-%COMP%], \n.relationships-graph[_ngcontent-%COMP%] mj-erd-composite[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n\n\n.relationships-graph[_ngcontent-%COMP%] .erd-splitter[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph[_ngcontent-%COMP%] kendo-splitter-pane[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-details[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.relationship-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.relationship-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.rel-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.rel-entity[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.rel-field[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type[_ngcontent-%COMP%], \n.rel-display-type[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n.relationship-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%] {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.rel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing[_ngcontent-%COMP%] {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n}\n\n.rel-icon.incoming[_ngcontent-%COMP%] {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n\n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n border: 1px solid var(--info-border, #90caf9);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--info-color, #1976d2);\n color: white;\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n border: 1px solid var(--success-border, #a5d6a7);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--success-color, #388e3c);\n color: white;\n}\n\n.field-chip[_ngcontent-%COMP%] .bundle-icon[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n\n\n\n\n\n.permissions-matrix[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table[_ngcontent-%COMP%] th.center[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td.center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.matrix-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.permission-icon.granted[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.permission-icon.denied[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.rls-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n\n\n.api-capabilities[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n\n.lineage-diagram[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.lineage-stage[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.lineage-arrow[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.tracking-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n\n\n\n\n\n.history-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.config-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.info-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n\n\n\n.settings-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json[_ngcontent-%COMP%] {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: #fafafa;\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: #fafafa;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: #f0f0f0;\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.field-description[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item[_ngcontent-%COMP%] .value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%] {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item[_ngcontent-%COMP%] .value.link[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.value-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display[_ngcontent-%COMP%] {\n color: var(--text-primary);\n}\n\n\n\n\n\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 14px;\n}\n\n\n\n\n\n\n.explorer-loading[_ngcontent-%COMP%], \n.explorer-error[_ngcontent-%COMP%], \n.explorer-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n.explorer-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%], \n.explorer-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.explorer-error[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.explorer-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n opacity: 1;\n}\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: rgba(139, 92, 246, 0.12);\n color: #7c3aed;\n border: 1px solid rgba(139, 92, 246, 0.25);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: rgba(59, 130, 246, 0.12);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.25);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: rgba(59, 130, 246, 0.22);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.12);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.25);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: rgba(245, 158, 11, 0.12);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.25);\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: #6366f1;\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 #6366f1;\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, #334155);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: rgba(139, 92, 246, 0.06);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #7c3aed;\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: rgba(0, 0, 0, 0.06);\n padding: 1px 6px;\n border-radius: 3px;\n color: #7c3aed;\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, #94a3b8);\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: #3b82f6;\n color: white;\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: rgba(59, 130, 246, 0.1);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.2);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted, #94a3b8);\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, #94a3b8);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color, #e2e8f0);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6366f1;\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: rgba(16, 185, 129, 0.1);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.2);\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: rgba(59, 130, 246, 0.2);\n border-color: rgba(59, 130, 246, 0.35);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: rgba(16, 185, 129, 0.2);\n border-color: rgba(16, 185, 129, 0.35);\n}\n\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border: 1px solid rgba(99, 102, 241, 0.2);\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: rgba(99, 102, 241, 0.04);\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: #6366f1;\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 #6366f1;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: #3b82f6;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: #2563eb;\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted, #94a3b8);\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, #e2e8f0);\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, #e2e8f0);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: rgba(59, 130, 246, 0.04);\n border-color: rgba(59, 130, 246, 0.15);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.04);\n border-color: rgba(99, 102, 241, 0.15);\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, #334155);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted, #94a3b8);\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: rgba(0, 0, 0, 0.04);\n color: var(--text-primary, #334155);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted, #94a3b8);\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: rgba(245, 158, 11, 0.1);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.2);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: rgba(245, 158, 11, 0.2);\n border-color: rgba(245, 158, 11, 0.35);\n}\n\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: rgba(0, 0, 0, 0.08);\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}", ".k-pane[_ngcontent-%COMP%] {\n background-color: #F5F6FA;\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n} \n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: #9ca3af;\n}"], changeDetection: 0 }); }
|
|
3268
|
+
} }, 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: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-tertiary: #f1f5f9;\n\n --text-primary: #1e293b;\n --text-secondary: #64748b;\n --text-muted: #94a3b8;\n\n --border-color: #e2e8f0;\n --border-light: #f1f5f9;\n\n --accent-color: #3b82f6;\n --accent-light: #eff6ff;\n --accent-dark: #1d4ed8;\n\n --success-color: #10b981;\n --warning-color: #f59e0b;\n --danger-color: #ef4444;\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n\n\n\n\n\n.explorer-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info[_ngcontent-%COMP%] {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge[_ngcontent-%COMP%] {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge.status-deprecated[_ngcontent-%COMP%] {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-badge.status-disabled[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.entity-subtitle[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator[_ngcontent-%COMP%] {\n color: var(--border-color);\n}\n\n.entity-description[_ngcontent-%COMP%] {\n color: var(--text-secondary);\n}\n\n\n\n.header-stats[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.stat-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n\n\n\n\n\n.explorer-body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n\n\n.nav-rail[_ngcontent-%COMP%] {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label[_ngcontent-%COMP%] {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge[_ngcontent-%COMP%] {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item[_ngcontent-%COMP%]:hover i[_ngcontent-%COMP%] {\n transform: scale(1.1);\n}\n\n.nav-item.active[_ngcontent-%COMP%] {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n transform: scale(1.05);\n}\n\n.nav-item.active[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n\n\n\n\n\n.main-canvas[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n}\n\n.main-canvas.panel-open[_ngcontent-%COMP%] {\n margin-right: var(--detail-panel-width);\n}\n\n\n\n.section[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n.section-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n\n\n.search-box[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--text-muted);\n}\n\n\n\n.view-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn[_ngcontent-%COMP%] {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.depth-selector[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn[_ngcontent-%COMP%]:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active[_ngcontent-%COMP%] {\n background: var(--accent-color);\n color: white;\n}\n\n\n\n.header-controls[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.control-btn[_ngcontent-%COMP%] {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n\n\n.fields-list-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable[_ngcontent-%COMP%]:hover {\n color: var(--accent-color);\n}\n\n.list-header[_ngcontent-%COMP%] .list-col.sortable.sorted[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable[_ngcontent-%COMP%]:hover .sort-icon[_ngcontent-%COMP%] {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted[_ngcontent-%COMP%] .sort-icon[_ngcontent-%COMP%] {\n opacity: 1;\n}\n\n.list-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 50px 1fr 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: rgba(239, 68, 68, 0.1);\n}\n\n.required-indicator.required[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--danger-color);\n}\n\n.required-indicator.optional[_ngcontent-%COMP%] {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: #78350f;\n}\n\n.flag-badge.fk[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);\n color: white;\n}\n\n.flag-badge.encrypted[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #a78bfa 0%, #8b5cf6 100%);\n color: white;\n}\n\n.col-desc[_ngcontent-%COMP%] {\n min-width: 0;\n}\n\n.desc-text[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n.list-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--text-muted);\n gap: 12px;\n}\n\n.list-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 32px;\n opacity: 0.5;\n}\n\n.list-empty[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n\n\n\n\n\n.stats-cards[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable[_ngcontent-%COMP%]:hover .stat-card-action[_ngcontent-%COMP%] {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action[_ngcontent-%COMP%] {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-main[_ngcontent-%COMP%] {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body[_ngcontent-%COMP%] .stat-details[_ngcontent-%COMP%] {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n\n\n.info-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n\n\n.capability-tags[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #dcfce7;\n color: #166534;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.capability-tag.disabled[_ngcontent-%COMP%] {\n background: #fee2e2;\n color: #991b1b;\n}\n\n\n\n.info-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label[_ngcontent-%COMP%] {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n\n\n\n\n\n.fields-content[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.field-group[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-group[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.group-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n user-select: none;\n background: linear-gradient(to right, var(--bg-secondary), transparent);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(to right, var(--bg-tertiary), var(--bg-secondary));\n}\n\n.expand-icon[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted);\n width: 16px;\n transition: transform var(--transition-fast);\n}\n\n.group-icon[_ngcontent-%COMP%] {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count[_ngcontent-%COMP%] {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content[_ngcontent-%COMP%] {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.field-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected[_ngcontent-%COMP%] {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon[_ngcontent-%COMP%] {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.field-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-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: #fef3c7;\n color: #92400e;\n}\n\n.badge.fk[_ngcontent-%COMP%] {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.badge.encrypted[_ngcontent-%COMP%] {\n background: #fce7f3;\n color: #9d174d;\n}\n\n\n\n\n\n\n.relationships-graph[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-erd[_ngcontent-%COMP%], \n.relationships-graph[_ngcontent-%COMP%] mj-erd-composite[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n\n\n.relationships-graph[_ngcontent-%COMP%] .erd-splitter[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph[_ngcontent-%COMP%] kendo-splitter-pane[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationships-graph[_ngcontent-%COMP%] mj-entity-details[_ngcontent-%COMP%] {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0;\n}\n\n.graph-placeholder[_ngcontent-%COMP%] .hint[_ngcontent-%COMP%] {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.relationship-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.relationship-item[_ngcontent-%COMP%]:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n.rel-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.rel-entity[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity[_ngcontent-%COMP%]:hover {\n text-decoration: underline;\n}\n\n.rel-field[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type[_ngcontent-%COMP%], \n.rel-display-type[_ngcontent-%COMP%] {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n.relationship-group-title[_ngcontent-%COMP%] .group-count[_ngcontent-%COMP%] {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped[_ngcontent-%COMP%] {\n padding: 8px 0;\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.rel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing[_ngcontent-%COMP%] {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n}\n\n.rel-icon.incoming[_ngcontent-%COMP%] {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n}\n\n.rel-entity-name[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips[_ngcontent-%COMP%] {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; \n\n}\n\n.field-chip[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 10px;\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%] {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n border: 1px solid var(--info-border, #90caf9);\n}\n\n.field-chip.outgoing[_ngcontent-%COMP%]:hover {\n background: var(--info-color, #1976d2);\n color: white;\n}\n\n.field-chip.incoming[_ngcontent-%COMP%] {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n border: 1px solid var(--success-border, #a5d6a7);\n}\n\n.field-chip.incoming[_ngcontent-%COMP%]:hover {\n background: var(--success-color, #388e3c);\n color: white;\n}\n\n.field-chip[_ngcontent-%COMP%] .bundle-icon[_ngcontent-%COMP%] {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n\n\n\n\n\n.permissions-matrix[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table[_ngcontent-%COMP%] th.center[_ngcontent-%COMP%], \n.matrix-table[_ngcontent-%COMP%] td.center[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.matrix-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover {\n background: var(--bg-secondary);\n}\n\n.role-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon[_ngcontent-%COMP%] {\n font-size: 14px;\n}\n\n.permission-icon.granted[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.permission-icon.denied[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.rls-info[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge[_ngcontent-%COMP%] {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls[_ngcontent-%COMP%] {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n\n\n.api-capabilities[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.capability-item.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n\n\n\n\n\n.lineage-diagram[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage[_ngcontent-%COMP%] {\n text-align: center;\n}\n\n.lineage-stage[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.lineage-arrow[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node[_ngcontent-%COMP%] .entity-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n}\n\n.tracking-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled[_ngcontent-%COMP%] {\n background: #dcfce7;\n color: #166534;\n}\n\n.config-item[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n color: var(--text-muted);\n}\n\n.config-item[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n\n\n\n\n\n.history-config[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--success-color);\n}\n\n.config-text[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--accent-color);\n}\n\n.info-card[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%] {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n\n\n\n\n\n.settings-panel[_ngcontent-%COMP%] {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item[_ngcontent-%COMP%] {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json[_ngcontent-%COMP%] {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: #fafafa;\n}\n\n.setting-value-json[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-editor {\n font-size: 12px;\n background: #fafafa;\n}\n\n.setting-value-json[_ngcontent-%COMP%] .cm-gutters {\n background: #f0f0f0;\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config[_ngcontent-%COMP%], \n.settings-section[_ngcontent-%COMP%] .config-grid[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row[_ngcontent-%COMP%] .config-label[_ngcontent-%COMP%] {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.code[_ngcontent-%COMP%] {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row[_ngcontent-%COMP%] .config-value.enabled[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n\n\n\n\n\n.detail-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.panel-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn[_ngcontent-%COMP%]:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section[_ngcontent-%COMP%] {\n margin-bottom: 24px;\n}\n\n.detail-section[_ngcontent-%COMP%]:last-child {\n margin-bottom: 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.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: rgba(139, 92, 246, 0.12);\n color: #7c3aed;\n border: 1px solid rgba(139, 92, 246, 0.25);\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%] {\n background: rgba(59, 130, 246, 0.12);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.25);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type[_ngcontent-%COMP%]:hover {\n background: rgba(59, 130, 246, 0.22);\n}\n\n.isa-badge.parent-type[_ngcontent-%COMP%] {\n background: rgba(16, 185, 129, 0.12);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.25);\n}\n\n.isa-badge.overlapping[_ngcontent-%COMP%] {\n background: rgba(245, 158, 11, 0.12);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.25);\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: #6366f1;\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 #6366f1;\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, #334155);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] {\n background: rgba(139, 92, 246, 0.06);\n}\n\n.isa-info-row.virtual-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #7c3aed;\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: rgba(0, 0, 0, 0.06);\n padding: 1px 6px;\n border-radius: 3px;\n color: #7c3aed;\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, #94a3b8);\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: #3b82f6;\n color: white;\n}\n\n.isa-node.parent[_ngcontent-%COMP%] {\n background: rgba(59, 130, 246, 0.1);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.2);\n}\n\n.isa-arrow[_ngcontent-%COMP%] {\n color: var(--text-muted, #94a3b8);\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, #94a3b8);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color, #e2e8f0);\n}\n\n.isa-inherited-fields[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n color: #6366f1;\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: rgba(16, 185, 129, 0.1);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.2);\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: rgba(59, 130, 246, 0.2);\n border-color: rgba(59, 130, 246, 0.35);\n}\n\n.isa-child-chip.clickable[_ngcontent-%COMP%]:hover {\n background: rgba(16, 185, 129, 0.2);\n border-color: rgba(16, 185, 129, 0.35);\n}\n\n\n\n.badge.inherited[_ngcontent-%COMP%], \n.flag-badge.inherited[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border: 1px solid rgba(99, 102, 241, 0.2);\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: rgba(99, 102, 241, 0.04);\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: #6366f1;\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 #6366f1;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%] {\n color: #3b82f6;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .link[_ngcontent-%COMP%]:hover {\n color: #2563eb;\n text-decoration: underline;\n}\n\n.isa-settings-panel[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n color: var(--text-muted, #94a3b8);\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, #e2e8f0);\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, #e2e8f0);\n}\n\n.isa-inspector-group.own[_ngcontent-%COMP%] {\n background: rgba(59, 130, 246, 0.04);\n border-color: rgba(59, 130, 246, 0.15);\n}\n\n.isa-inspector-group.inherited[_ngcontent-%COMP%] {\n background: rgba(99, 102, 241, 0.04);\n border-color: rgba(99, 102, 241, 0.15);\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, #334155);\n}\n\n.isa-inspector-count[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--text-muted, #94a3b8);\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: rgba(0, 0, 0, 0.04);\n color: var(--text-primary, #334155);\n}\n\n.isa-inspector-type[_ngcontent-%COMP%] {\n font-size: 10px;\n color: var(--text-muted, #94a3b8);\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: rgba(245, 158, 11, 0.1);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.2);\n}\n\n.isa-sibling-chip.clickable[_ngcontent-%COMP%]:hover {\n background: rgba(245, 158, 11, 0.2);\n border-color: rgba(245, 158, 11, 0.35);\n}\n\n\n\n.isa-child-count[_ngcontent-%COMP%] {\n font-size: 11px;\n background: rgba(0, 0, 0, 0.08);\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 height: 100%;\n display: flex;\n flex-direction: column;\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: #F5F6FA;\n}\n\n.content-margin[_ngcontent-%COMP%] {\n margin: 10px;\n} \n\n\na[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group[_ngcontent-%COMP%] {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton[_ngcontent-%COMP%] {\n margin-right: 5px;\n}\n\n.record-form[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] {\n margin-bottom: 10px;\n}\n\n.k-splitter[_ngcontent-%COMP%] {\n border-width: 0px;\n}\n\n.record-form-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form[_ngcontent-%COMP%] .record-form-row[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row[_ngcontent-%COMP%] {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row[_ngcontent-%COMP%] label[_ngcontent-%COMP%] {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] > .form-card[_ngcontent-%COMP%] {\n width: 100%;\n}\n\n\n\n.form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n\n\n@media (min-width: 1400px) {\n .form-panels-container[_ngcontent-%COMP%] .related-entity-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card[_ngcontent-%COMP%] {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n.collapsible-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header[_ngcontent-%COMP%] .collapse-icon[_ngcontent-%COMP%] {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body[_ngcontent-%COMP%] {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed[_ngcontent-%COMP%] {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body[_ngcontent-%COMP%] {\n padding: 24px;\n}\n\n\n\n.form-card.related-entity[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-header[_ngcontent-%COMP%]:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity[_ngcontent-%COMP%] .collapsible-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: #3b82f6;\n}\n\n\n\n.form-section-controls[_ngcontent-%COMP%] {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .control-group[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:active {\n transform: translateY(0);\n}\n\n.form-section-controls[_ngcontent-%COMP%] button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%] {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-search[_ngcontent-%COMP%]::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls[_ngcontent-%COMP%] .section-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n\n\n.form-card.search-hidden[_ngcontent-%COMP%] {\n display: none;\n}\n\n\n\n.section-count-badge[_ngcontent-%COMP%] {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] .search-highlight[_ngcontent-%COMP%] {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge[_ngcontent-%COMP%] {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n\n\n.collapsible-title[_ngcontent-%COMP%] .row-count-badge.zero-rows[_ngcontent-%COMP%] {\n background: #9ca3af;\n}"], changeDetection: 0 }); }
|
|
3223
3269
|
};
|
|
3224
3270
|
MJEntityFormComponentExtended = __decorate([
|
|
3225
3271
|
RegisterClass(BaseFormComponent, 'MJ: Entities')
|
|
@@ -3227,7 +3273,7 @@ MJEntityFormComponentExtended = __decorate([
|
|
|
3227
3273
|
export { MJEntityFormComponentExtended };
|
|
3228
3274
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MJEntityFormComponentExtended, [{
|
|
3229
3275
|
type: Component,
|
|
3230
|
-
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]=\"'#3b82f6'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @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\">\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: #3b82f6; font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: #6366f1; 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-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-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.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 <!-- 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: #7c3aed;\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: #94a3b8;\"></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 @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: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-tertiary: #f1f5f9;\n\n --text-primary: #1e293b;\n --text-secondary: #64748b;\n --text-muted: #94a3b8;\n\n --border-color: #e2e8f0;\n --border-light: #f1f5f9;\n\n --accent-color: #3b82f6;\n --accent-light: #eff6ff;\n --accent-dark: #1d4ed8;\n\n --success-color: #10b981;\n --warning-color: #f59e0b;\n --danger-color: #ef4444;\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge.status-deprecated {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-badge.status-disabled {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item:hover i {\n transform: scale(1.1);\n}\n\n.nav-item.active {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active i {\n transform: scale(1.05);\n}\n\n.nav-item.active::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n/* ============================================================\n MAIN CANVAS\n ============================================================ */\n\n.main-canvas {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Depth Selector */\n.depth-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Header Controls (view mode + expand/collapse) */\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls {\n display: flex;\n gap: 4px;\n}\n\n.control-btn {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Fields List View - Modern Design */\n.fields-list-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header {\n display: grid;\n grid-template-columns: 50px 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--border-light);\n cursor: pointer;\n transition: all var(--transition-fast);\n align-items: center;\n}\n\n.list-row:hover {\n background: var(--bg-secondary);\n}\n\n.list-row.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 17px;\n}\n\n.list-row:last-child {\n border-bottom: none;\n}\n\n/* Column-specific styling */\n.col-seq {\n text-align: center;\n}\n\n.seq-num {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n background: var(--bg-tertiary);\n border-radius: 50%;\n font-size: 11px;\n font-weight: 600;\n color: var(--text-secondary);\n}\n\n.list-row:hover .seq-num,\n.list-row.selected .seq-num {\n background: var(--accent-color);\n color: white;\n}\n\n.col-name {\n display: flex;\n align-items: center;\n gap: 10px;\n min-width: 0;\n}\n\n.field-type-icon {\n color: var(--accent-color);\n font-size: 16px;\n width: 20px;\n flex-shrink: 0;\n}\n\n.field-name-text {\n font-weight: 500;\n color: var(--text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.type-tag {\n display: inline-block;\n padding: 4px 10px;\n background: var(--bg-tertiary);\n border-radius: 20px;\n font-size: 11px;\n font-weight: 500;\n color: var(--text-secondary);\n font-family: 'SF Mono', 'Consolas', monospace;\n}\n\n.length-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-primary);\n}\n\n.length-value.muted {\n color: var(--text-muted);\n}\n\n.required-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 500;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.required-indicator.required {\n color: var(--danger-color);\n background: rgba(239, 68, 68, 0.1);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: #78350f;\n}\n\n.flag-badge.fk {\n background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);\n color: white;\n}\n\n.flag-badge.encrypted {\n background: linear-gradient(135deg, #a78bfa 0%, #8b5cf6 100%);\n color: white;\n}\n\n.col-desc {\n min-width: 0;\n}\n\n.desc-text {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n.list-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--text-muted);\n gap: 12px;\n}\n\n.list-empty i {\n font-size: 32px;\n opacity: 0.5;\n}\n\n.list-empty span {\n font-size: 14px;\n}\n\n/* ============================================================\n OVERVIEW SECTION\n ============================================================ */\n\n.stats-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable {\n cursor: pointer;\n}\n\n.stat-card.clickable:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable:hover .stat-card-action {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action i {\n font-size: 14px;\n}\n\n.stat-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header i {\n font-size: 14px;\n}\n\n.stat-card-body .stat-main {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body .stat-details {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n/* Info Panels */\n.info-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title i {\n color: var(--accent-color);\n}\n\n/* Capability Tags */\n.capability-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #dcfce7;\n color: #166534;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: #fee2e2;\n color: #991b1b;\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n.field-group {\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-group:last-child {\n border-bottom: none;\n}\n\n.group-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n user-select: none;\n background: linear-gradient(to right, var(--bg-secondary), transparent);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header:hover {\n background: linear-gradient(to right, var(--bg-tertiary), var(--bg-secondary));\n}\n\n.expand-icon {\n font-size: 10px;\n color: var(--text-muted);\n width: 16px;\n transition: transform var(--transition-fast);\n}\n\n.group-icon {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item:last-child {\n border-bottom: none;\n}\n\n.field-item:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info {\n flex: 1;\n min-width: 0;\n}\n\n.field-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 2px;\n font-size: 12px;\n}\n\n.field-type {\n font-family: 'SF Mono', 'Consolas', monospace;\n color: var(--text-muted);\n}\n\n.field-nullable {\n color: var(--danger-color);\n}\n\n.field-related {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.field-related:hover {\n text-decoration: underline;\n}\n\n.field-badges {\n display: flex;\n gap: 4px;\n}\n\n.badge {\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-size: 10px;\n font-weight: 600;\n}\n\n.badge.pk {\n background: #fef3c7;\n color: #92400e;\n}\n\n.badge.fk {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.badge.encrypted {\n background: #fce7f3;\n color: #9d174d;\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph kendo-splitter-pane {\n display: flex;\n flex-direction: column;\n}\n\n.relationships-graph mj-entity-details {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder p {\n margin: 0;\n}\n\n.graph-placeholder .hint {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title i {\n color: var(--accent-color);\n}\n\n.relationship-items {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item:last-child {\n border-bottom: none;\n}\n\n.relationship-item:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden {\n display: none;\n}\n\n.rel-icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info {\n flex: 1;\n}\n\n.rel-entity {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity:hover {\n text-decoration: underline;\n}\n\n.rel-field {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type,\n.rel-display-type {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle {\n color: var(--success-color);\n}\n\n/* Grouped relationship styles */\n.relationship-group-title .group-count {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped {\n padding: 8px 0;\n}\n\n.relationship-item-grouped {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped:last-child {\n border-bottom: none;\n}\n\n.rel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n}\n\n.rel-icon.incoming {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n border: 1px solid var(--info-border, #90caf9);\n}\n\n.field-chip.outgoing:hover {\n background: var(--info-color, #1976d2);\n color: white;\n}\n\n.field-chip.incoming {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n border: 1px solid var(--success-border, #a5d6a7);\n}\n\n.field-chip.incoming:hover {\n background: var(--success-color, #388e3c);\n color: white;\n}\n\n.field-chip .bundle-icon {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n/* ============================================================\n PERMISSIONS SECTION\n ============================================================ */\n\n.permissions-matrix {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table th,\n.matrix-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table th {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table th.center,\n.matrix-table td.center {\n text-align: center;\n}\n\n.matrix-table tbody tr:hover {\n background: var(--bg-secondary);\n}\n\n.role-name {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon {\n font-size: 14px;\n}\n\n.permission-icon.granted {\n color: var(--success-color);\n}\n\n.permission-icon.denied {\n color: var(--text-muted);\n}\n\n.rls-info {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n/* API Capabilities */\n.api-capabilities {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item i {\n font-size: 12px;\n}\n\n.capability-item.enabled {\n background: #dcfce7;\n color: #166534;\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node .entity-box i {\n font-size: 24px;\n}\n\n.tracking-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled {\n background: #dcfce7;\n color: #166534;\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: #fafafa;\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: #fafafa;\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: #f0f0f0;\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.field-description {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.5;\n margin: 0;\n}\n\n.detail-grid {\n display: grid;\n grid-template-columns: repeat(2, 1fr);\n gap: 12px;\n}\n\n.detail-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.detail-item .label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.detail-item .value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.detail-item .value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.detail-item .value.link {\n color: var(--accent-color);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n\n.detail-item .value.link:hover {\n text-decoration: underline;\n}\n\n.value-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.value-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n}\n\n.value-code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 11px;\n color: var(--accent-dark);\n background: var(--bg-primary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n}\n\n.value-display {\n color: var(--text-primary);\n}\n\n/* ============================================================\n EMPTY STATES\n ============================================================ */\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n.empty-state i {\n font-size: 32px;\n margin-bottom: 12px;\n opacity: 0.5;\n}\n\n.empty-state p {\n margin: 0;\n font-size: 14px;\n}\n\n/* ============================================================\n LOADING / ERROR STATES\n ============================================================ */\n\n.explorer-loading,\n.explorer-error,\n.explorer-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 40px;\n text-align: center;\n color: var(--text-muted);\n}\n\n.explorer-error i,\n.explorer-empty i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.explorer-error {\n color: var(--danger-color);\n}\n\n.explorer-error i {\n opacity: 1;\n}\n\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: rgba(139, 92, 246, 0.12);\n color: #7c3aed;\n border: 1px solid rgba(139, 92, 246, 0.25);\n}\n\n.isa-badge.child-type {\n background: rgba(59, 130, 246, 0.12);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.25);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: rgba(59, 130, 246, 0.22);\n}\n\n.isa-badge.parent-type {\n background: rgba(16, 185, 129, 0.12);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.25);\n}\n\n.isa-badge.overlapping {\n background: rgba(245, 158, 11, 0.12);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.25);\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: #6366f1;\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 #6366f1;\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, #334155);\n}\n\n.isa-info-row.virtual-info {\n background: rgba(139, 92, 246, 0.06);\n}\n\n.isa-info-row.virtual-info i {\n color: #7c3aed;\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: rgba(0, 0, 0, 0.06);\n padding: 1px 6px;\n border-radius: 3px;\n color: #7c3aed;\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, #94a3b8);\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: #3b82f6;\n color: white;\n}\n\n.isa-node.parent {\n background: rgba(59, 130, 246, 0.1);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.2);\n}\n\n.isa-arrow {\n color: var(--text-muted, #94a3b8);\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, #94a3b8);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color, #e2e8f0);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: #6366f1;\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: rgba(16, 185, 129, 0.1);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.2);\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: rgba(59, 130, 246, 0.2);\n border-color: rgba(59, 130, 246, 0.35);\n}\n\n.isa-child-chip.clickable:hover {\n background: rgba(16, 185, 129, 0.2);\n border-color: rgba(16, 185, 129, 0.35);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border: 1px solid rgba(99, 102, 241, 0.2);\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: rgba(99, 102, 241, 0.04);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: #6366f1;\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 #6366f1;\n}\n\n.isa-settings-panel .link {\n color: #3b82f6;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: #2563eb;\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted, #94a3b8);\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, #e2e8f0);\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, #e2e8f0);\n}\n\n.isa-inspector-group.own {\n background: rgba(59, 130, 246, 0.04);\n border-color: rgba(59, 130, 246, 0.15);\n}\n\n.isa-inspector-group.inherited {\n background: rgba(99, 102, 241, 0.04);\n border-color: rgba(99, 102, 241, 0.15);\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, #334155);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted, #94a3b8);\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: rgba(0, 0, 0, 0.04);\n color: var(--text-primary, #334155);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted, #94a3b8);\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: rgba(245, 158, 11, 0.1);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.2);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: rgba(245, 158, 11, 0.2);\n border-color: rgba(245, 158, 11, 0.35);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: rgba(0, 0, 0, 0.08);\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", ".k-pane {\n background-color: #F5F6FA;\n}\n\n.content-margin {\n margin: 10px;\n} \n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n/* .record-form .record-form-row:nth-child(odd) {\n background-color: #f2f2f2; \n} */\n\n/* \n.record-form .record-form-row:nth-child(even) {\n background-color: #ffffff; \n} */\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header .collapse-icon {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity .collapsible-header {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity .collapsible-title i {\n color: #3b82f6;\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls .section-search::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: #9ca3af;\n}\n"] }]
|
|
3276
|
+
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]=\"'#3b82f6'\">\n <i [class]=\"entityIcon\"></i>\n </div>\n <div class=\"entity-info\">\n <div class=\"entity-title-row\">\n <h1 class=\"entity-name\">{{ entityDisplayName }}</h1>\n <span class=\"status-badge\" [ngClass]=\"statusClass\">\n {{ entity.Status }}\n </span>\n @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: #3b82f6; font-size: 8px;\"></i>\n } @else {\n <i class=\"fa-solid fa-arrow-up\" style=\"color: #6366f1; 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 </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: #7c3aed;\"></i> Yes \u2014 read-only view\n } @else {\n <i class=\"fa-solid fa-circle-minus\" style=\"color: #94a3b8;\"></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: #ffffff;\n --bg-secondary: #f8fafc;\n --bg-tertiary: #f1f5f9;\n\n --text-primary: #1e293b;\n --text-secondary: #64748b;\n --text-muted: #94a3b8;\n\n --border-color: #e2e8f0;\n --border-light: #f1f5f9;\n\n --accent-color: #3b82f6;\n --accent-light: #eff6ff;\n --accent-dark: #1d4ed8;\n\n --success-color: #10b981;\n --warning-color: #f59e0b;\n --danger-color: #ef4444;\n\n --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);\n --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);\n --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);\n\n --radius-sm: 4px;\n --radius-md: 8px;\n --radius-lg: 12px;\n\n --transition-fast: 150ms ease;\n --transition-normal: 250ms ease;\n\n display: block;\n height: 100%;\n width: 100%;\n}\n\n.entity-explorer {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-secondary);\n overflow: hidden;\n}\n\n/* ============================================================\n HEADER BAR\n ============================================================ */\n\n.explorer-header {\n display: flex;\n align-items: center;\n gap: 24px;\n padding: 16px 24px;\n background: var(--bg-primary);\n border-bottom: 1px solid var(--border-color);\n min-height: var(--header-height);\n}\n\n.entity-identity {\n display: flex;\n align-items: center;\n gap: 16px;\n flex: 1;\n min-width: 0;\n}\n\n.entity-icon {\n width: 48px;\n height: 48px;\n border-radius: var(--radius-md);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 20px;\n flex-shrink: 0;\n}\n\n.entity-info {\n min-width: 0;\n flex: 1;\n}\n\n.entity-title-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.entity-name {\n font-size: 20px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.status-badge {\n padding: 2px 8px;\n border-radius: 9999px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge.status-active {\n background: #dcfce7;\n color: #166534;\n}\n\n.status-badge.status-deprecated {\n background: #fef3c7;\n color: #92400e;\n}\n\n.status-badge.status-disabled {\n background: #fee2e2;\n color: #991b1b;\n}\n\n.entity-subtitle {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 4px;\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.schema-table {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.separator {\n color: var(--border-color);\n}\n\n.entity-description {\n color: var(--text-secondary);\n}\n\n/* Header Stats */\n.header-stats {\n display: flex;\n gap: 4px;\n}\n\n.stat-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 8px 16px;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: background var(--transition-fast);\n}\n\n.stat-item:hover {\n background: var(--bg-tertiary);\n}\n\n.stat-item i {\n font-size: 16px;\n color: var(--text-muted);\n margin-bottom: 4px;\n}\n\n.stat-value {\n font-size: 18px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.stat-label {\n font-size: 11px;\n color: var(--text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n/* ============================================================\n MAIN BODY (NAV RAIL + CANVAS)\n ============================================================ */\n\n.explorer-body {\n display: flex;\n flex: 1;\n overflow: hidden;\n}\n\n/* Navigation Rail - Minimalist Icon-First Design */\n.nav-rail {\n width: var(--nav-rail-width);\n background: var(--bg-primary);\n border-right: 1px solid var(--border-color);\n display: flex;\n flex-direction: column;\n padding: 8px 0;\n flex-shrink: 0;\n gap: 2px;\n}\n\n.nav-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 12px 4px 8px 4px;\n margin: 0 8px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n transition: all var(--transition-fast);\n position: relative;\n color: var(--text-muted);\n min-height: 54px;\n}\n\n.nav-item i {\n font-size: 18px;\n margin-bottom: 4px;\n transition: transform var(--transition-fast);\n}\n\n.nav-label {\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0.2px;\n white-space: nowrap;\n text-align: center;\n line-height: 1;\n opacity: 0.9;\n}\n\n.nav-badge {\n position: absolute;\n top: 4px;\n right: 4px;\n min-width: 18px;\n height: 18px;\n padding: 0 5px;\n background: var(--accent-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n border-radius: 9999px;\n display: flex;\n align-items: center;\n justify-content: center;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15);\n}\n\n.nav-item:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.nav-item:hover i {\n transform: scale(1.1);\n}\n\n.nav-item.active {\n background: var(--accent-light);\n color: var(--accent-color);\n}\n\n.nav-item.active i {\n transform: scale(1.05);\n}\n\n.nav-item.active::before {\n content: '';\n position: absolute;\n left: -8px;\n top: 50%;\n transform: translateY(-50%);\n width: 3px;\n height: 28px;\n background: var(--accent-color);\n border-radius: 0 3px 3px 0;\n}\n\n/* ============================================================\n MAIN CANVAS\n ============================================================ */\n\n.main-canvas {\n flex: 1;\n overflow: auto;\n transition: margin-right var(--transition-normal);\n}\n\n.main-canvas.panel-open {\n margin-right: var(--detail-panel-width);\n}\n\n/* Sections */\n.section {\n padding: 24px;\n}\n\n.section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 20px;\n}\n\n.section-content {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n/* Search Box */\n.search-box {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 10px 16px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n width: 300px;\n}\n\n.search-box i {\n color: var(--text-muted);\n}\n\n.search-box input {\n flex: 1;\n border: none;\n background: transparent;\n font-size: 14px;\n outline: none;\n color: var(--text-primary);\n}\n\n.search-box input::placeholder {\n color: var(--text-muted);\n}\n\n/* View Toggle */\n.view-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.toggle-btn {\n padding: 8px 16px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 13px;\n transition: all var(--transition-fast);\n}\n\n.toggle-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.toggle-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.toggle-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Depth Selector */\n.depth-selector {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-left: auto;\n}\n\n.depth-label {\n font-size: 13px;\n color: var(--text-secondary);\n font-weight: 500;\n}\n\n.depth-buttons {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.depth-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition-fast);\n}\n\n.depth-btn:not(:last-child) {\n border-right: 1px solid var(--border-color);\n}\n\n.depth-btn:hover {\n background: var(--bg-tertiary);\n}\n\n.depth-btn.active {\n background: var(--accent-color);\n color: white;\n}\n\n/* Header Controls (view mode + expand/collapse) */\n.header-controls {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.view-mode-toggle {\n display: flex;\n border: 1px solid var(--border-color);\n border-radius: var(--radius-md);\n overflow: hidden;\n}\n\n.expand-collapse-controls {\n display: flex;\n gap: 4px;\n}\n\n.control-btn {\n padding: 6px 10px;\n border: 1px solid var(--border-color);\n background: var(--bg-primary);\n color: var(--text-secondary);\n cursor: pointer;\n border-radius: var(--radius-sm);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all var(--transition-fast);\n}\n\n.control-btn:hover:not(:disabled) {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.control-btn:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* Fields List View - Modern Design */\n.fields-list-view {\n display: flex;\n flex-direction: column;\n height: 100%;\n background: var(--bg-primary);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.list-header {\n display: grid;\n grid-template-columns: 50px 1fr 1fr 100px 70px 100px 100px 1fr;\n gap: 12px;\n padding: 12px 20px;\n background: linear-gradient(135deg, var(--bg-secondary) 0%, var(--bg-tertiary) 100%);\n border-bottom: 2px solid var(--border-color);\n position: sticky;\n top: 0;\n z-index: 10;\n}\n\n.list-header .list-col {\n font-size: 11px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--text-secondary);\n}\n\n.list-header .list-col.sortable {\n cursor: pointer;\n display: flex;\n align-items: center;\n gap: 6px;\n transition: color var(--transition-fast);\n user-select: none;\n}\n\n.list-header .list-col.sortable:hover {\n color: var(--accent-color);\n}\n\n.list-header .list-col.sortable.sorted {\n color: var(--accent-color);\n}\n\n.sort-icon {\n font-size: 10px;\n opacity: 0.4;\n transition: opacity var(--transition-fast);\n}\n\n.list-col.sortable:hover .sort-icon {\n opacity: 0.7;\n}\n\n.list-col.sortable.sorted .sort-icon {\n opacity: 1;\n}\n\n.list-body {\n flex: 1;\n overflow-y: auto;\n}\n\n.list-row {\n display: grid;\n grid-template-columns: 50px 1fr 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: rgba(239, 68, 68, 0.1);\n}\n\n.required-indicator.required i {\n color: var(--danger-color);\n}\n\n.required-indicator.optional {\n color: var(--text-muted);\n background: transparent;\n}\n\n.flag-badges {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.flag-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n border-radius: 4px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n}\n\n.flag-badge.pk {\n background: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);\n color: #78350f;\n}\n\n.flag-badge.fk {\n background: linear-gradient(135deg, #60a5fa 0%, #3b82f6 100%);\n color: white;\n}\n\n.flag-badge.encrypted {\n background: linear-gradient(135deg, #a78bfa 0%, #8b5cf6 100%);\n color: white;\n}\n\n.col-desc {\n min-width: 0;\n}\n\n.desc-text {\n font-size: 13px;\n color: var(--text-secondary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n}\n\n.list-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 20px;\n color: var(--text-muted);\n gap: 12px;\n}\n\n.list-empty i {\n font-size: 32px;\n opacity: 0.5;\n}\n\n.list-empty span {\n font-size: 14px;\n}\n\n/* ============================================================\n OVERVIEW SECTION\n ============================================================ */\n\n.stats-cards {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 16px;\n}\n\n.stat-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 16px;\n position: relative;\n transition: all var(--transition-fast);\n}\n\n.stat-card.clickable {\n cursor: pointer;\n}\n\n.stat-card.clickable:hover {\n border-color: var(--accent-color);\n box-shadow: var(--shadow-md);\n transform: translateY(-2px);\n}\n\n.stat-card.clickable:hover .stat-card-action {\n opacity: 1;\n transform: translateX(0);\n}\n\n.stat-card-action {\n position: absolute;\n right: 16px;\n top: 50%;\n transform: translateY(-50%) translateX(-4px);\n color: var(--accent-color);\n opacity: 0;\n transition: all var(--transition-fast);\n}\n\n.stat-card-action i {\n font-size: 14px;\n}\n\n.stat-card-header {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--text-secondary);\n font-size: 13px;\n margin-bottom: 12px;\n}\n\n.stat-card-header i {\n font-size: 14px;\n}\n\n.stat-card-body .stat-main {\n font-size: 32px;\n font-weight: 700;\n color: var(--text-primary);\n line-height: 1;\n margin-bottom: 8px;\n}\n\n.stat-card-body .stat-details {\n display: flex;\n gap: 12px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n/* Info Panels */\n.info-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.panel-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 16px 0;\n}\n\n.panel-title i {\n color: var(--accent-color);\n}\n\n/* Capability Tags */\n.capability-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.capability-tag {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n background: #dcfce7;\n color: #166534;\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 500;\n}\n\n.capability-tag i {\n font-size: 10px;\n}\n\n.capability-tag.disabled {\n background: #fee2e2;\n color: #991b1b;\n}\n\n/* Info Grid */\n.info-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.info-item {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.info-label {\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.info-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.info-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 13px;\n color: var(--accent-dark);\n}\n\n/* ============================================================\n FIELDS SECTION\n ============================================================ */\n\n.fields-content {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.field-groups {\n display: flex;\n flex-direction: column;\n}\n\n.field-group {\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-group:last-child {\n border-bottom: none;\n}\n\n.group-header {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n user-select: none;\n background: linear-gradient(to right, var(--bg-secondary), transparent);\n border-left: 3px solid var(--accent-color);\n}\n\n.group-header:hover {\n background: linear-gradient(to right, var(--bg-tertiary), var(--bg-secondary));\n}\n\n.expand-icon {\n font-size: 10px;\n color: var(--text-muted);\n width: 16px;\n transition: transform var(--transition-fast);\n}\n\n.group-icon {\n font-size: 16px;\n color: var(--accent-color);\n width: 20px;\n text-align: center;\n}\n\n.group-label {\n flex: 1;\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n letter-spacing: 0.01em;\n text-transform: uppercase;\n}\n\n.group-count {\n padding: 3px 10px;\n background: var(--accent-light);\n border-radius: 9999px;\n font-size: 12px;\n font-weight: 600;\n color: var(--accent-color);\n}\n\n.group-content {\n border-top: 1px solid var(--border-light);\n background: var(--bg-secondary);\n}\n\n.field-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px 12px 48px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.field-item:last-child {\n border-bottom: none;\n}\n\n.field-item:hover {\n background: var(--accent-light);\n}\n\n.field-item.selected {\n background: var(--accent-light);\n border-left: 3px solid var(--accent-color);\n padding-left: 45px;\n}\n\n.field-icon {\n width: 28px;\n height: 28px;\n border-radius: var(--radius-sm);\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n color: var(--text-muted);\n flex-shrink: 0;\n}\n\n.field-info {\n flex: 1;\n min-width: 0;\n}\n\n.field-name {\n font-size: 14px;\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.field-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: #fef3c7;\n color: #92400e;\n}\n\n.badge.fk {\n background: #dbeafe;\n color: #1e40af;\n}\n\n.badge.encrypted {\n background: #fce7f3;\n color: #9d174d;\n}\n\n/* ============================================================\n RELATIONSHIPS SECTION\n ============================================================ */\n\n.relationships-graph {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n min-height: 600px;\n height: calc(100vh - 280px);\n max-height: 800px;\n display: flex;\n align-items: stretch;\n justify-content: stretch;\n overflow: hidden;\n}\n\n.relationships-graph mj-entity-erd,\n.relationships-graph mj-erd-composite {\n width: 100%;\n height: 100%;\n flex: 1;\n}\n\n/* ERD Splitter for details panel */\n.relationships-graph .erd-splitter {\n width: 100%;\n height: 100%;\n}\n\n.relationships-graph kendo-splitter-pane {\n display: flex;\n flex-direction: column;\n}\n\n.relationships-graph mj-entity-details {\n height: 100%;\n overflow: auto;\n}\n\n.graph-placeholder {\n text-align: center;\n color: var(--text-muted);\n}\n\n.graph-placeholder i {\n font-size: 48px;\n margin-bottom: 16px;\n opacity: 0.5;\n}\n\n.graph-placeholder p {\n margin: 0;\n}\n\n.graph-placeholder .hint {\n font-size: 12px;\n margin-top: 8px;\n}\n\n.relationships-list {\n display: flex;\n flex-direction: column;\n gap: 24px;\n}\n\n.relationship-group {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.relationship-group-title {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 14px 20px;\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: var(--text-primary);\n background: var(--bg-tertiary);\n border-bottom: 1px solid var(--border-color);\n}\n\n.relationship-group-title i {\n color: var(--accent-color);\n}\n\n.relationship-items {\n display: flex;\n flex-direction: column;\n}\n\n.relationship-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 20px;\n cursor: pointer;\n transition: background var(--transition-fast);\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item:last-child {\n border-bottom: none;\n}\n\n.relationship-item:hover {\n background: var(--accent-light);\n}\n\n.relationship-item.hidden {\n display: none;\n}\n\n.rel-icon {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background: var(--accent-light);\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--accent-color);\n font-size: 12px;\n}\n\n.rel-info {\n flex: 1;\n}\n\n.rel-entity {\n font-size: 14px;\n font-weight: 500;\n color: var(--accent-color);\n cursor: pointer;\n}\n\n.rel-entity:hover {\n text-decoration: underline;\n}\n\n.rel-field {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.rel-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.rel-type,\n.rel-display-type {\n padding: 2px 8px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-sm);\n font-size: 11px;\n color: var(--text-muted);\n}\n\n.rel-bundle {\n color: var(--success-color);\n}\n\n/* Grouped relationship styles */\n.relationship-group-title .group-count {\n margin-left: auto;\n background: var(--accent-light);\n color: var(--accent-color);\n padding: 2px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n.relationship-items.grouped {\n padding: 8px 0;\n}\n\n.relationship-item-grouped {\n padding: 12px 20px;\n border-bottom: 1px solid var(--border-light);\n}\n\n.relationship-item-grouped:last-child {\n border-bottom: none;\n}\n\n.rel-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 10px;\n}\n\n.rel-icon.outgoing {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n}\n\n.rel-icon.incoming {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n}\n\n.rel-entity-name {\n font-size: 15px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.rel-fields-chips {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding-left: 44px; /* Align with entity name (icon width + gap) */\n}\n\n.field-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n border-radius: 16px;\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition-fast);\n}\n\n.field-chip i {\n font-size: 10px;\n}\n\n.field-chip.outgoing {\n background: var(--info-light, #e3f2fd);\n color: var(--info-color, #1976d2);\n border: 1px solid var(--info-border, #90caf9);\n}\n\n.field-chip.outgoing:hover {\n background: var(--info-color, #1976d2);\n color: white;\n}\n\n.field-chip.incoming {\n background: var(--success-light, #e8f5e9);\n color: var(--success-color, #388e3c);\n border: 1px solid var(--success-border, #a5d6a7);\n}\n\n.field-chip.incoming:hover {\n background: var(--success-color, #388e3c);\n color: white;\n}\n\n.field-chip .bundle-icon {\n font-size: 9px;\n margin-left: 2px;\n opacity: 0.8;\n}\n\n/* ============================================================\n PERMISSIONS SECTION\n ============================================================ */\n\n.permissions-matrix {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n overflow: hidden;\n}\n\n.matrix-table {\n width: 100%;\n border-collapse: collapse;\n}\n\n.matrix-table th,\n.matrix-table td {\n padding: 12px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border-light);\n}\n\n.matrix-table th {\n background: var(--bg-tertiary);\n font-size: 12px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n}\n\n.matrix-table th.center,\n.matrix-table td.center {\n text-align: center;\n}\n\n.matrix-table tbody tr:hover {\n background: var(--bg-secondary);\n}\n\n.role-name {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n.permission-icon {\n font-size: 14px;\n}\n\n.permission-icon.granted {\n color: var(--success-color);\n}\n\n.permission-icon.denied {\n color: var(--text-muted);\n}\n\n.rls-info {\n display: flex;\n gap: 4px;\n}\n\n.rls-badge {\n width: 20px;\n height: 20px;\n border-radius: var(--radius-sm);\n background: var(--warning-color);\n color: white;\n font-size: 10px;\n font-weight: 600;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.no-rls {\n color: var(--text-muted);\n font-size: 12px;\n}\n\n/* API Capabilities */\n.api-capabilities {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.capability-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n gap: 12px;\n}\n\n.capability-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.capability-item i {\n font-size: 12px;\n}\n\n.capability-item.enabled {\n background: #dcfce7;\n color: #166534;\n}\n\n.capability-item.enabled i {\n color: var(--success-color);\n}\n\n/* ============================================================\n LINEAGE SECTION\n ============================================================ */\n\n.lineage-diagram {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 24px;\n padding: 40px;\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n}\n\n.lineage-stage {\n text-align: center;\n}\n\n.lineage-stage h4 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.lineage-items {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.lineage-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 16px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-secondary);\n}\n\n.lineage-item i {\n color: var(--accent-color);\n}\n\n.lineage-arrow {\n font-size: 24px;\n color: var(--text-muted);\n}\n\n.entity-node .entity-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n padding: 24px 32px;\n background: var(--accent-color);\n color: white;\n border-radius: var(--radius-lg);\n font-weight: 600;\n}\n\n.entity-node .entity-box i {\n font-size: 24px;\n}\n\n.tracking-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-grid {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));\n gap: 12px;\n}\n\n.config-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n font-size: 13px;\n color: var(--text-muted);\n}\n\n.config-item.enabled {\n background: #dcfce7;\n color: #166534;\n}\n\n.config-item .config-label {\n color: var(--text-muted);\n}\n\n.config-item .config-value {\n font-weight: 500;\n color: var(--text-primary);\n}\n\n/* ============================================================\n HISTORY SECTION\n ============================================================ */\n\n.history-config {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.config-status {\n display: flex;\n align-items: flex-start;\n gap: 12px;\n}\n\n.config-status i {\n font-size: 24px;\n color: var(--text-muted);\n margin-top: 2px;\n}\n\n.config-status.enabled i {\n color: var(--success-color);\n}\n\n.config-text strong {\n display: block;\n font-size: 16px;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.config-text span {\n font-size: 14px;\n color: var(--text-secondary);\n}\n\n.history-info {\n display: grid;\n grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));\n gap: 16px;\n}\n\n.info-card {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.info-card h4 {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n color: var(--text-primary);\n margin: 0 0 12px 0;\n}\n\n.info-card h4 i {\n color: var(--accent-color);\n}\n\n.info-card p {\n font-size: 14px;\n color: var(--text-secondary);\n line-height: 1.6;\n margin: 0;\n}\n\n.info-card code {\n background: var(--bg-tertiary);\n padding: 2px 6px;\n border-radius: var(--radius-sm);\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.audit-fields-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.audit-fields-list li {\n padding: 8px 0;\n font-size: 14px;\n color: var(--text-secondary);\n border-bottom: 1px solid var(--border-light);\n}\n\n.audit-fields-list li:last-child {\n border-bottom: none;\n}\n\n/* ============================================================\n SETTINGS SECTION\n ============================================================ */\n\n.settings-panel {\n background: var(--bg-primary);\n border: 1px solid var(--border-color);\n border-radius: var(--radius-lg);\n padding: 20px;\n}\n\n.settings-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.setting-item {\n padding: 12px;\n background: var(--bg-tertiary);\n border-radius: var(--radius-md);\n}\n\n.setting-name {\n font-weight: 500;\n color: var(--text-primary);\n margin-bottom: 4px;\n}\n\n.setting-value {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n word-break: break-all;\n}\n\n.setting-value-json {\n margin-top: 8px;\n border-radius: var(--radius-sm);\n overflow: hidden;\n border: 1px solid var(--border-color);\n background: #fafafa;\n}\n\n.setting-value-json mj-code-editor {\n display: block;\n max-height: 300px;\n}\n\n.setting-value-json ::ng-deep .cm-editor {\n font-size: 12px;\n background: #fafafa;\n}\n\n.setting-value-json ::ng-deep .cm-gutters {\n background: #f0f0f0;\n border-right: 1px solid var(--border-color);\n}\n\n.setting-comment {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 8px;\n}\n\n.fts-config,\n.settings-section .config-grid {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.config-row {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n\n.config-row .config-label {\n width: 100px;\n font-size: 12px;\n color: var(--text-muted);\n}\n\n.config-row .config-value {\n font-size: 14px;\n color: var(--text-primary);\n}\n\n.config-row .config-value.code {\n font-family: 'SF Mono', 'Consolas', monospace;\n font-size: 12px;\n color: var(--accent-dark);\n}\n\n.config-row .config-value.enabled {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--success-color);\n}\n\n/* ============================================================\n DETAIL PANEL (Slide-in from right)\n ============================================================ */\n\n.detail-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: var(--detail-panel-width);\n height: 100%;\n background: var(--bg-primary);\n border-left: 1px solid var(--border-color);\n box-shadow: var(--shadow-lg);\n transform: translateX(100%);\n transition: transform var(--transition-normal);\n z-index: 100;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.detail-panel.open {\n transform: translateX(0);\n}\n\n.panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border-color);\n flex-shrink: 0;\n}\n\n.panel-header h3 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n}\n\n.close-btn {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n border-radius: var(--radius-md);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--text-muted);\n transition: all var(--transition-fast);\n}\n\n.close-btn:hover {\n background: var(--bg-tertiary);\n color: var(--text-primary);\n}\n\n.panel-content {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n}\n\n.detail-section {\n margin-bottom: 24px;\n}\n\n.detail-section:last-child {\n margin-bottom: 0;\n}\n\n.detail-section h4 {\n font-size: 16px;\n font-weight: 600;\n color: var(--text-primary);\n margin: 0 0 8px 0;\n}\n\n.detail-section h5 {\n font-size: 12px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: var(--text-muted);\n margin: 0 0 12px 0;\n}\n\n.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: rgba(139, 92, 246, 0.12);\n color: #7c3aed;\n border: 1px solid rgba(139, 92, 246, 0.25);\n}\n\n.isa-badge.child-type {\n background: rgba(59, 130, 246, 0.12);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.25);\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.isa-badge.child-type:hover {\n background: rgba(59, 130, 246, 0.22);\n}\n\n.isa-badge.parent-type {\n background: rgba(16, 185, 129, 0.12);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.25);\n}\n\n.isa-badge.overlapping {\n background: rgba(245, 158, 11, 0.12);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.25);\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: #6366f1;\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 #6366f1;\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, #334155);\n}\n\n.isa-info-row.virtual-info {\n background: rgba(139, 92, 246, 0.06);\n}\n\n.isa-info-row.virtual-info i {\n color: #7c3aed;\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: rgba(0, 0, 0, 0.06);\n padding: 1px 6px;\n border-radius: 3px;\n color: #7c3aed;\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, #94a3b8);\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: #3b82f6;\n color: white;\n}\n\n.isa-node.parent {\n background: rgba(59, 130, 246, 0.1);\n color: #2563eb;\n border: 1px solid rgba(59, 130, 246, 0.2);\n}\n\n.isa-arrow {\n color: var(--text-muted, #94a3b8);\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, #94a3b8);\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid var(--border-color, #e2e8f0);\n}\n\n.isa-inherited-fields i {\n font-size: 12px;\n color: #6366f1;\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: rgba(16, 185, 129, 0.1);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.2);\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: rgba(59, 130, 246, 0.2);\n border-color: rgba(59, 130, 246, 0.35);\n}\n\n.isa-child-chip.clickable:hover {\n background: rgba(16, 185, 129, 0.2);\n border-color: rgba(16, 185, 129, 0.35);\n}\n\n/* Field inherited badge (card and list views) */\n.badge.inherited,\n.flag-badge.inherited {\n background: rgba(99, 102, 241, 0.1);\n color: #6366f1;\n border: 1px solid rgba(99, 102, 241, 0.2);\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: rgba(99, 102, 241, 0.04);\n border-radius: 6px;\n padding: 12px;\n margin: -4px -12px 8px;\n}\n\n.isa-source-section h5 {\n color: #6366f1;\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 #6366f1;\n}\n\n.isa-settings-panel .link {\n color: #3b82f6;\n cursor: pointer;\n transition: color 0.15s ease;\n}\n\n.isa-settings-panel .link:hover {\n color: #2563eb;\n text-decoration: underline;\n}\n\n.isa-settings-panel .muted {\n color: var(--text-muted, #94a3b8);\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, #e2e8f0);\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, #e2e8f0);\n}\n\n.isa-inspector-group.own {\n background: rgba(59, 130, 246, 0.04);\n border-color: rgba(59, 130, 246, 0.15);\n}\n\n.isa-inspector-group.inherited {\n background: rgba(99, 102, 241, 0.04);\n border-color: rgba(99, 102, 241, 0.15);\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, #334155);\n}\n\n.isa-inspector-count {\n font-size: 11px;\n color: var(--text-muted, #94a3b8);\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: rgba(0, 0, 0, 0.04);\n color: var(--text-primary, #334155);\n}\n\n.isa-inspector-type {\n font-size: 10px;\n color: var(--text-muted, #94a3b8);\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: rgba(245, 158, 11, 0.1);\n color: #d97706;\n border: 1px solid rgba(245, 158, 11, 0.2);\n}\n\n.isa-sibling-chip.clickable:hover {\n background: rgba(245, 158, 11, 0.2);\n border-color: rgba(245, 158, 11, 0.35);\n}\n\n/* Child count badge */\n.isa-child-count {\n font-size: 11px;\n background: rgba(0, 0, 0, 0.08);\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 height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n.data-viewer-container {\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n", ".k-pane {\n background-color: #F5F6FA;\n}\n\n.content-margin {\n margin: 10px;\n} \n\n\na {\n font-size: 14px;\n font-weight: bolder;\n}\n\n.tab-header-icon {\n margin-right: 5px;\n}\n\n.record-form {\n display: block;\n flex-direction: column;\n background-color: #F5F6FA;\n padding: 0;\n min-height: 100vh;\n}\n\n.record-form-group {\n margin-top: 0px;\n background-color: #F5F6FA;\n}\n\nbutton {\n margin-right: 5px;\n}\n\n.record-form h2 {\n margin-bottom: 10px;\n}\n\n.k-splitter {\n border-width: 0px;\n}\n\n.record-form-row {\n display: grid;\n grid-template-columns: auto 1fr;\n align-items: start;\n gap: 10px;\n margin-bottom: 12px;\n padding-top: 5px;\n padding-bottom: 5px;\n}\n\n\n/* .record-form .record-form-row:nth-child(odd) {\n background-color: #f2f2f2; \n} */\n\n/* \n.record-form .record-form-row:nth-child(even) {\n background-color: #ffffff; \n} */\n\n.record-form .record-form-row > :first-child {\n font-weight: bold;\n padding-right: 10px;\n} \n\n.record-form .record-form-row > span {\n white-space: pre-line;\n max-height: 300px;\n overflow: auto;\n}\n\n \n\n@media (min-width: 768px) {\n .record-form-row {\n flex-direction: row;\n align-items: center;\n }\n\n .record-form-row label {\n width: 240px;\n margin-bottom: 0;\n }\n}\n\n/* Collapsible Panel Styles */\n.form-panels-container {\n display: flex;\n flex-direction: column;\n gap: 16px;\n padding: 16px;\n background-color: #F5F6FA;\n}\n\n/* All field sections take full width */\n.form-panels-container > .form-card {\n width: 100%;\n}\n\n/* Related entity grid container - responsive layout */\n.form-panels-container .related-entity-grid {\n display: grid;\n grid-template-columns: 1fr;\n gap: 16px;\n width: 100%;\n}\n\n/* Responsive multi-column layout for related entities on wider screens */\n@media (min-width: 1400px) {\n .form-panels-container .related-entity-grid {\n grid-template-columns: repeat(auto-fit, minmax(600px, 1fr));\n }\n}\n\n.form-card {\n background: white;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n overflow: hidden;\n}\n\n.collapsible-card {\n overflow: hidden;\n}\n\n.collapsible-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n cursor: pointer;\n user-select: none;\n transition: all 0.3s ease;\n}\n\n.collapsible-header:hover {\n background: linear-gradient(135deg, #f3f4f6 0%, #f9fafb 100%);\n border-bottom-color: #667eea;\n}\n\n.collapsible-title {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n}\n\n.collapsible-title i {\n font-size: 20px;\n color: #667eea;\n}\n\n.collapsible-title h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #1f2937;\n}\n\n.collapsible-header .collapse-icon {\n color: #6b7280;\n transition: transform 0.3s ease;\n}\n\n.collapsible-body {\n max-height: 2000px;\n overflow: hidden;\n transition: max-height 0.4s ease, padding 0.4s ease, opacity 0.3s ease;\n opacity: 1;\n}\n\n.collapsible-body.collapsed {\n max-height: 0;\n padding: 0;\n opacity: 0;\n}\n\n.form-body {\n padding: 24px;\n}\n\n/* Related Entity Sections - Visual Distinction */\n.form-card.related-entity {\n background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);\n border-left: 3px solid #3b82f6;\n}\n\n.form-card.related-entity .collapsible-header {\n background: linear-gradient(135deg, #e0f2fe 0%, #f0f9ff 100%);\n}\n\n.form-card.related-entity .collapsible-header:hover {\n background: linear-gradient(135deg, #bfdbfe 0%, #e0f2fe 100%);\n border-bottom-color: #3b82f6;\n}\n\n.form-card.related-entity .collapsible-title i {\n color: #3b82f6;\n}\n\n/* Section Controls */\n.form-section-controls {\n display: flex;\n gap: 10px;\n padding: 14px 18px;\n background: linear-gradient(135deg, #f9fafb 0%, #ffffff 100%);\n border-bottom: 2px solid #e5e7eb;\n align-items: center;\n flex-wrap: wrap;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n}\n\n.form-section-controls .control-group {\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.form-section-controls button {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n background: white;\n color: #374151;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n margin-right: 0;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n font-weight: 500;\n}\n\n.form-section-controls button:hover {\n background: #667eea;\n color: white;\n border-color: #667eea;\n transform: translateY(-1px);\n box-shadow: 0 2px 4px rgba(102, 126, 234, 0.2);\n}\n\n.form-section-controls button:active {\n transform: translateY(0);\n}\n\n.form-section-controls button i {\n margin-right: 0;\n font-size: 14px;\n}\n\n.form-section-controls .section-search {\n padding: 8px 14px;\n font-size: 13px;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n width: 240px;\n transition: all 0.2s;\n background: white;\n}\n\n.form-section-controls .section-search:focus {\n outline: none;\n border-color: #667eea;\n box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);\n}\n\n.form-section-controls .section-search::placeholder {\n color: #9ca3af;\n font-style: italic;\n}\n\n.form-section-controls .section-count {\n font-size: 13px;\n color: #6b7280;\n margin-left: auto;\n font-weight: 500;\n}\n\n/* Hidden sections for search filter */\n.form-card.search-hidden {\n display: none;\n}\n\n/* Section count badge */\n.section-count-badge {\n background: #667eea;\n color: white;\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n}\n\n/* Search highlighting in section names */\n.collapsible-title h3 .search-highlight {\n background-color: #fef08a;\n color: #854d0e;\n padding: 2px 4px;\n border-radius: 3px;\n font-weight: 700;\n}\n\n/* Row count badge in section headers */\n.collapsible-title .row-count-badge {\n background: #10b981;\n color: white;\n padding: 3px 6px 2px 6px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n margin-left: 8px;\n vertical-align: middle;\n position: relative;\n top: -2px;\n display: inline-block;\n line-height: 1;\n}\n\n/* Gray badge for zero rows (loaded but empty) */\n.collapsible-title .row-count-badge.zero-rows {\n background: #9ca3af;\n}\n"] }]
|
|
3231
3277
|
}], null, null); })();
|
|
3232
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber:
|
|
3278
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MJEntityFormComponentExtended, { className: "MJEntityFormComponentExtended", filePath: "src/lib/custom/Entities/entity-form.component.ts", lineNumber: 131 }); })();
|
|
3233
3279
|
//# sourceMappingURL=entity-form.component.js.map
|