@memberjunction/ng-dashboards 5.35.0 → 5.36.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/AI/components/agents/agent-configuration.component.js +3 -3
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +4 -4
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +137 -142
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +111 -116
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +13 -65
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +13 -65
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +13 -65
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +97 -99
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +842 -855
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +78 -89
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +19 -19
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +543 -629
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +50 -49
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +1 -1
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +16 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -7
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +13 -4
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +16 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +13 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +1 -1
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +13 -1
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
|
@@ -24,53 +24,44 @@ const _forTrack0 = ($index, $item) => $item.Integration.ID;
|
|
|
24
24
|
const _forTrack1 = ($index, $item) => $item.Name;
|
|
25
25
|
const _forTrack2 = ($index, $item) => $item.ID;
|
|
26
26
|
const _forTrack3 = ($index, $item) => $item.Number;
|
|
27
|
-
function
|
|
28
|
-
i0.ɵɵ
|
|
29
|
-
i0.ɵɵ
|
|
30
|
-
i0.ɵɵ
|
|
31
|
-
|
|
32
|
-
const ctx_r0 = i0.ɵɵnextContext();
|
|
33
|
-
i0.ɵɵadvance();
|
|
34
|
-
i0.ɵɵproperty("Count", ctx_r0.Connections.length)("Label", ctx_r0.Connections.length === 1 ? "integration" : "integrations");
|
|
35
|
-
} }
|
|
36
|
-
function ConnectionsComponent_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
const _r2 = i0.ɵɵgetCurrentView();
|
|
38
|
-
i0.ɵɵelementStart(0, "button", 14);
|
|
39
|
-
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.OpenWizard()); });
|
|
40
|
-
i0.ɵɵelement(1, "i", 15);
|
|
27
|
+
function ConnectionsComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
28
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
29
|
+
i0.ɵɵelementStart(0, "button", 12);
|
|
30
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OpenWizard()); });
|
|
31
|
+
i0.ɵɵelement(1, "i", 13);
|
|
41
32
|
i0.ɵɵtext(2, " Add Integration ");
|
|
42
33
|
i0.ɵɵelementEnd();
|
|
43
34
|
} }
|
|
44
|
-
function
|
|
45
|
-
i0.ɵɵelementStart(0, "div",
|
|
46
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
35
|
+
function ConnectionsComponent_Conditional_7_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
36
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
37
|
+
i0.ɵɵelement(1, "mj-loading", 17);
|
|
47
38
|
i0.ɵɵelementEnd();
|
|
48
39
|
} }
|
|
49
|
-
function
|
|
40
|
+
function ConnectionsComponent_Conditional_7_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
50
41
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
51
|
-
i0.ɵɵelementStart(0, "div",
|
|
52
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
i0.ɵɵelementStart(0, "div", 15);
|
|
43
|
+
i0.ɵɵelement(1, "i", 18);
|
|
53
44
|
i0.ɵɵelementStart(2, "h3");
|
|
54
45
|
i0.ɵɵtext(3, "No integrations yet");
|
|
55
46
|
i0.ɵɵelementEnd();
|
|
56
47
|
i0.ɵɵelementStart(4, "p");
|
|
57
48
|
i0.ɵɵtext(5, "Connect your first external system to start syncing data.");
|
|
58
49
|
i0.ɵɵelementEnd();
|
|
59
|
-
i0.ɵɵelementStart(6, "button",
|
|
60
|
-
i0.ɵɵlistener("click", function
|
|
61
|
-
i0.ɵɵelement(7, "i",
|
|
50
|
+
i0.ɵɵelementStart(6, "button", 19);
|
|
51
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_1_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenWizard()); });
|
|
52
|
+
i0.ɵɵelement(7, "i", 13);
|
|
62
53
|
i0.ɵɵtext(8, " Add Your First Integration ");
|
|
63
54
|
i0.ɵɵelementEnd()();
|
|
64
55
|
} }
|
|
65
|
-
function
|
|
66
|
-
i0.ɵɵelement(0, "i",
|
|
56
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
57
|
+
i0.ɵɵelement(0, "i", 48);
|
|
67
58
|
} }
|
|
68
|
-
function
|
|
69
|
-
i0.ɵɵelement(0, "i",
|
|
59
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵelement(0, "i", 49);
|
|
70
61
|
} }
|
|
71
|
-
function
|
|
72
|
-
i0.ɵɵelementStart(0, "div",
|
|
73
|
-
i0.ɵɵconditionalCreate(1,
|
|
62
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
63
|
+
i0.ɵɵelementStart(0, "div", 47);
|
|
64
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_1_Template, 1, 0, "i", 48)(2, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Conditional_2_Template, 1, 0, "i", 49);
|
|
74
65
|
i0.ɵɵelementStart(3, "span");
|
|
75
66
|
i0.ɵɵtext(4);
|
|
76
67
|
i0.ɵɵelementEnd()();
|
|
@@ -82,336 +73,336 @@ function ConnectionsComponent_Conditional_8_Conditional_2_For_2_Conditional_22_T
|
|
|
82
73
|
i0.ɵɵadvance(3);
|
|
83
74
|
i0.ɵɵtextInterpolate(testResult_r7.Message);
|
|
84
75
|
} }
|
|
85
|
-
function
|
|
86
|
-
i0.ɵɵelement(0, "i",
|
|
76
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
77
|
+
i0.ɵɵelement(0, "i", 42);
|
|
87
78
|
i0.ɵɵtext(1, " Deleting... ");
|
|
88
79
|
} }
|
|
89
|
-
function
|
|
80
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
90
81
|
i0.ɵɵtext(0, " Delete ");
|
|
91
82
|
} }
|
|
92
|
-
function
|
|
83
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
93
84
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
94
|
-
i0.ɵɵelementStart(0, "div",
|
|
95
|
-
i0.ɵɵelement(2, "i",
|
|
96
|
-
i0.ɵɵelementStart(3, "span",
|
|
85
|
+
i0.ɵɵelementStart(0, "div", 39)(1, "div", 50);
|
|
86
|
+
i0.ɵɵelement(2, "i", 51);
|
|
87
|
+
i0.ɵɵelementStart(3, "span", 52);
|
|
97
88
|
i0.ɵɵtext(4, "Delete this integration and all its entity maps?");
|
|
98
89
|
i0.ɵɵelementEnd();
|
|
99
|
-
i0.ɵɵelementStart(5, "div",
|
|
100
|
-
i0.ɵɵlistener("click", function
|
|
101
|
-
i0.ɵɵconditionalCreate(7,
|
|
90
|
+
i0.ɵɵelementStart(5, "div", 53)(6, "button", 54);
|
|
91
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const summary_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ConfirmDelete(summary_r6.Integration.ID)); });
|
|
92
|
+
i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_7_Template, 2, 0)(8, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Conditional_8_Template, 1, 0);
|
|
102
93
|
i0.ɵɵelementEnd();
|
|
103
|
-
i0.ɵɵelementStart(9, "button",
|
|
104
|
-
i0.ɵɵlistener("click", function
|
|
94
|
+
i0.ɵɵelementStart(9, "button", 43);
|
|
95
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.CancelDelete()); });
|
|
105
96
|
i0.ɵɵtext(10, " Cancel ");
|
|
106
97
|
i0.ɵɵelementEnd()()()();
|
|
107
98
|
} if (rf & 2) {
|
|
108
|
-
const
|
|
99
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
109
100
|
i0.ɵɵadvance(6);
|
|
110
|
-
i0.ɵɵproperty("disabled",
|
|
101
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsDeleting);
|
|
111
102
|
i0.ɵɵadvance();
|
|
112
|
-
i0.ɵɵconditional(
|
|
103
|
+
i0.ɵɵconditional(ctx_r1.IsDeleting ? 7 : 8);
|
|
113
104
|
} }
|
|
114
|
-
function
|
|
115
|
-
i0.ɵɵelement(0, "i",
|
|
105
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
106
|
+
i0.ɵɵelement(0, "i", 42);
|
|
116
107
|
} }
|
|
117
|
-
function
|
|
108
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
118
109
|
i0.ɵɵtext(0, " Test ");
|
|
119
110
|
} }
|
|
120
|
-
function
|
|
121
|
-
i0.ɵɵelement(0, "i",
|
|
111
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
112
|
+
i0.ɵɵelement(0, "i", 42);
|
|
122
113
|
i0.ɵɵtext(1, " Syncing... ");
|
|
123
114
|
} }
|
|
124
|
-
function
|
|
125
|
-
i0.ɵɵelement(0, "i",
|
|
115
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
i0.ɵɵelement(0, "i", 37);
|
|
126
117
|
i0.ɵɵtext(1, " Sync ");
|
|
127
|
-
i0.ɵɵelement(2, "i",
|
|
118
|
+
i0.ɵɵelement(2, "i", 57);
|
|
128
119
|
} }
|
|
129
|
-
function
|
|
120
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
130
121
|
const _r10 = i0.ɵɵgetCurrentView();
|
|
131
|
-
i0.ɵɵelementStart(0, "div",
|
|
122
|
+
i0.ɵɵelementStart(0, "div", 56)(1, "div", 58)(2, "span", 59);
|
|
132
123
|
i0.ɵɵtext(3, "Pull (External \u2192 MJ)");
|
|
133
124
|
i0.ɵɵelementEnd();
|
|
134
|
-
i0.ɵɵelementStart(4, "button",
|
|
135
|
-
i0.ɵɵlistener("click", function
|
|
136
|
-
i0.ɵɵelement(5, "i",
|
|
125
|
+
i0.ɵɵelementStart(4, "button", 60);
|
|
126
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, false, "Pull", $event)); });
|
|
127
|
+
i0.ɵɵelement(5, "i", 61);
|
|
137
128
|
i0.ɵɵtext(6, " Incremental Pull ");
|
|
138
129
|
i0.ɵɵelementEnd();
|
|
139
|
-
i0.ɵɵelementStart(7, "button",
|
|
140
|
-
i0.ɵɵlistener("click", function
|
|
141
|
-
i0.ɵɵelement(8, "i",
|
|
130
|
+
i0.ɵɵelementStart(7, "button", 60);
|
|
131
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, true, "Pull", $event)); });
|
|
132
|
+
i0.ɵɵelement(8, "i", 62);
|
|
142
133
|
i0.ɵɵtext(9, " Full Pull ");
|
|
143
134
|
i0.ɵɵelementEnd()();
|
|
144
|
-
i0.ɵɵelementStart(10, "div",
|
|
135
|
+
i0.ɵɵelementStart(10, "div", 58)(11, "span", 59);
|
|
145
136
|
i0.ɵɵtext(12, "Push (MJ \u2192 External)");
|
|
146
137
|
i0.ɵɵelementEnd();
|
|
147
|
-
i0.ɵɵelementStart(13, "button",
|
|
148
|
-
i0.ɵɵlistener("click", function
|
|
149
|
-
i0.ɵɵelement(14, "i",
|
|
138
|
+
i0.ɵɵelementStart(13, "button", 60);
|
|
139
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, false, "Push", $event)); });
|
|
140
|
+
i0.ɵɵelement(14, "i", 63);
|
|
150
141
|
i0.ɵɵtext(15, " Incremental Push ");
|
|
151
142
|
i0.ɵɵelementEnd();
|
|
152
|
-
i0.ɵɵelementStart(16, "button",
|
|
153
|
-
i0.ɵɵlistener("click", function
|
|
154
|
-
i0.ɵɵelement(17, "i",
|
|
143
|
+
i0.ɵɵelementStart(16, "button", 60);
|
|
144
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_16_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, true, "Push", $event)); });
|
|
145
|
+
i0.ɵɵelement(17, "i", 62);
|
|
155
146
|
i0.ɵɵtext(18, " Full Push ");
|
|
156
147
|
i0.ɵɵelementEnd()();
|
|
157
|
-
i0.ɵɵelementStart(19, "div",
|
|
148
|
+
i0.ɵɵelementStart(19, "div", 58)(20, "span", 59);
|
|
158
149
|
i0.ɵɵtext(21, "Bidirectional");
|
|
159
150
|
i0.ɵɵelementEnd();
|
|
160
|
-
i0.ɵɵelementStart(22, "button",
|
|
161
|
-
i0.ɵɵlistener("click", function
|
|
162
|
-
i0.ɵɵelement(23, "i",
|
|
151
|
+
i0.ɵɵelementStart(22, "button", 60);
|
|
152
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_22_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, false, "Bidirectional", $event)); });
|
|
153
|
+
i0.ɵɵelement(23, "i", 37);
|
|
163
154
|
i0.ɵɵtext(24, " Incremental Both ");
|
|
164
155
|
i0.ɵɵelementEnd();
|
|
165
|
-
i0.ɵɵelementStart(25, "button",
|
|
166
|
-
i0.ɵɵlistener("click", function
|
|
167
|
-
i0.ɵɵelement(26, "i",
|
|
156
|
+
i0.ɵɵelementStart(25, "button", 60);
|
|
157
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template_button_click_25_listener($event) { i0.ɵɵrestoreView(_r10); const summary_r6 = i0.ɵɵnextContext(2).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(summary_r6.Integration.ID, true, "Bidirectional", $event)); });
|
|
158
|
+
i0.ɵɵelement(26, "i", 62);
|
|
168
159
|
i0.ɵɵtext(27, " Full Both ");
|
|
169
160
|
i0.ɵɵelementEnd()()();
|
|
170
161
|
} }
|
|
171
|
-
function
|
|
162
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
172
163
|
const _r9 = i0.ɵɵgetCurrentView();
|
|
173
|
-
i0.ɵɵelementStart(0, "div",
|
|
174
|
-
i0.ɵɵlistener("click", function
|
|
175
|
-
i0.ɵɵconditionalCreate(2,
|
|
164
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "button", 55);
|
|
165
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r9); const summary_r6 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleSyncMenu(summary_r6.Integration.ID, $event)); });
|
|
166
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_2_Template, 2, 0)(3, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_3_Template, 3, 0);
|
|
176
167
|
i0.ɵɵelementEnd();
|
|
177
|
-
i0.ɵɵconditionalCreate(4,
|
|
168
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Conditional_4_Template, 28, 0, "div", 56);
|
|
178
169
|
i0.ɵɵelementEnd();
|
|
179
170
|
} if (rf & 2) {
|
|
180
171
|
const summary_r6 = i0.ɵɵnextContext().$implicit;
|
|
181
|
-
const
|
|
172
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
182
173
|
i0.ɵɵadvance();
|
|
183
|
-
i0.ɵɵproperty("disabled", !!
|
|
174
|
+
i0.ɵɵproperty("disabled", !!ctx_r1.SyncingIntegrationID);
|
|
184
175
|
i0.ɵɵadvance();
|
|
185
|
-
i0.ɵɵconditional(
|
|
176
|
+
i0.ɵɵconditional(ctx_r1.IsSyncing(summary_r6.Integration.ID) ? 2 : 3);
|
|
186
177
|
i0.ɵɵadvance(2);
|
|
187
|
-
i0.ɵɵconditional(
|
|
178
|
+
i0.ɵɵconditional(ctx_r1.SyncMenuIntegrationID === summary_r6.Integration.ID ? 4 : -1);
|
|
188
179
|
} }
|
|
189
|
-
function
|
|
180
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
190
181
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
191
|
-
i0.ɵɵelementStart(0, "div",
|
|
192
|
-
i0.ɵɵlistener("click", function
|
|
193
|
-
i0.ɵɵelementStart(2, "div",
|
|
194
|
-
i0.ɵɵelement(4, "i",
|
|
182
|
+
i0.ɵɵelementStart(0, "div", 20)(1, "div", 25);
|
|
183
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_div_click_1_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SelectIntegrationCard(summary_r6)); });
|
|
184
|
+
i0.ɵɵelementStart(2, "div", 26)(3, "div", 27);
|
|
185
|
+
i0.ɵɵelement(4, "i", 28);
|
|
195
186
|
i0.ɵɵelementEnd();
|
|
196
187
|
i0.ɵɵelementStart(5, "span");
|
|
197
188
|
i0.ɵɵtext(6);
|
|
198
189
|
i0.ɵɵelementEnd()();
|
|
199
|
-
i0.ɵɵelementStart(7, "div",
|
|
190
|
+
i0.ɵɵelementStart(7, "div", 29)(8, "div", 30);
|
|
200
191
|
i0.ɵɵtext(9);
|
|
201
192
|
i0.ɵɵelementEnd();
|
|
202
|
-
i0.ɵɵelementStart(10, "div",
|
|
193
|
+
i0.ɵɵelementStart(10, "div", 31);
|
|
203
194
|
i0.ɵɵtext(11);
|
|
204
195
|
i0.ɵɵelementEnd();
|
|
205
|
-
i0.ɵɵelementStart(12, "div",
|
|
196
|
+
i0.ɵɵelementStart(12, "div", 32)(13, "span", 33);
|
|
206
197
|
i0.ɵɵtext(14);
|
|
207
198
|
i0.ɵɵelementEnd();
|
|
208
|
-
i0.ɵɵelementStart(15, "span",
|
|
199
|
+
i0.ɵɵelementStart(15, "span", 34);
|
|
209
200
|
i0.ɵɵtext(16, "\u00B7");
|
|
210
201
|
i0.ɵɵelementEnd();
|
|
211
|
-
i0.ɵɵelementStart(17, "span",
|
|
202
|
+
i0.ɵɵelementStart(17, "span", 35);
|
|
212
203
|
i0.ɵɵtext(18);
|
|
213
204
|
i0.ɵɵelementEnd()();
|
|
214
|
-
i0.ɵɵelementStart(19, "div",
|
|
215
|
-
i0.ɵɵelement(20, "i",
|
|
205
|
+
i0.ɵɵelementStart(19, "div", 36);
|
|
206
|
+
i0.ɵɵelement(20, "i", 37);
|
|
216
207
|
i0.ɵɵtext(21);
|
|
217
208
|
i0.ɵɵelementEnd();
|
|
218
|
-
i0.ɵɵconditionalCreate(22,
|
|
209
|
+
i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_22_Template, 5, 6, "div", 38);
|
|
219
210
|
i0.ɵɵelementEnd()();
|
|
220
|
-
i0.ɵɵconditionalCreate(23,
|
|
221
|
-
i0.ɵɵelementStart(24, "div",
|
|
222
|
-
i0.ɵɵlistener("click", function
|
|
223
|
-
i0.ɵɵconditionalCreate(26,
|
|
211
|
+
i0.ɵɵconditionalCreate(23, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_23_Template, 11, 2, "div", 39);
|
|
212
|
+
i0.ɵɵelementStart(24, "div", 40)(25, "button", 41);
|
|
213
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_button_click_25_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.TestExistingConnection(summary_r6.Integration.ID)); });
|
|
214
|
+
i0.ɵɵconditionalCreate(26, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_26_Template, 1, 0, "i", 42)(27, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_27_Template, 1, 0);
|
|
224
215
|
i0.ɵɵelementEnd();
|
|
225
|
-
i0.ɵɵelementStart(28, "button",
|
|
226
|
-
i0.ɵɵlistener("click", function
|
|
216
|
+
i0.ɵɵelementStart(28, "button", 43);
|
|
217
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_button_click_28_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnMenuAction("edit", summary_r6)); });
|
|
227
218
|
i0.ɵɵtext(29, " Configure ");
|
|
228
219
|
i0.ɵɵelementEnd();
|
|
229
|
-
i0.ɵɵconditionalCreate(30,
|
|
230
|
-
i0.ɵɵelementStart(31, "button",
|
|
231
|
-
i0.ɵɵlistener("click", function
|
|
232
|
-
i0.ɵɵelement(32, "i",
|
|
220
|
+
i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Conditional_30_Template, 5, 3, "div", 44);
|
|
221
|
+
i0.ɵɵelementStart(31, "button", 45);
|
|
222
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template_button_click_31_listener() { const summary_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnMenuAction("delete", summary_r6)); });
|
|
223
|
+
i0.ɵɵelement(32, "i", 46);
|
|
233
224
|
i0.ɵɵelementEnd()()();
|
|
234
225
|
} if (rf & 2) {
|
|
235
226
|
let tmp_21_0;
|
|
236
227
|
const summary_r6 = ctx.$implicit;
|
|
237
|
-
const
|
|
228
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
238
229
|
i0.ɵɵadvance(3);
|
|
239
|
-
i0.ɵɵstyleProp("background-color",
|
|
230
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.GetIconBrandColor(summary_r6.Integration.Integration));
|
|
240
231
|
i0.ɵɵadvance();
|
|
241
|
-
i0.ɵɵclassMap(
|
|
232
|
+
i0.ɵɵclassMap(ctx_r1.GetIntegrationIcon(summary_r6.Integration.Integration, summary_r6.Icon));
|
|
242
233
|
i0.ɵɵadvance();
|
|
243
|
-
i0.ɵɵclassMap(
|
|
234
|
+
i0.ɵɵclassMap(ctx_r1.GetStatusBadgeClass(summary_r6));
|
|
244
235
|
i0.ɵɵadvance();
|
|
245
|
-
i0.ɵɵtextInterpolate(
|
|
236
|
+
i0.ɵɵtextInterpolate(ctx_r1.GetStatusBadge(summary_r6));
|
|
246
237
|
i0.ɵɵadvance(3);
|
|
247
238
|
i0.ɵɵtextInterpolate(summary_r6.Integration.Name);
|
|
248
239
|
i0.ɵɵadvance(2);
|
|
249
240
|
i0.ɵɵtextInterpolate(summary_r6.Integration.Company);
|
|
250
241
|
i0.ɵɵadvance(3);
|
|
251
|
-
i0.ɵɵtextInterpolate(
|
|
242
|
+
i0.ɵɵtextInterpolate(ctx_r1.GetSourceTypeLabel(summary_r6));
|
|
252
243
|
i0.ɵɵadvance(4);
|
|
253
|
-
i0.ɵɵtextInterpolate(
|
|
244
|
+
i0.ɵɵtextInterpolate(ctx_r1.GetCredentialHint(summary_r6));
|
|
254
245
|
i0.ɵɵadvance(3);
|
|
255
|
-
i0.ɵɵtextInterpolate1(" Syncing ",
|
|
246
|
+
i0.ɵɵtextInterpolate1(" Syncing ", ctx_r1.GetEntityMapCount(summary_r6.Integration.ID), " entities ");
|
|
256
247
|
i0.ɵɵadvance();
|
|
257
|
-
i0.ɵɵconditional((tmp_21_0 =
|
|
248
|
+
i0.ɵɵconditional((tmp_21_0 = ctx_r1.GetCardTestResult(summary_r6.Integration.ID)) ? 22 : -1, tmp_21_0);
|
|
258
249
|
i0.ɵɵadvance();
|
|
259
|
-
i0.ɵɵconditional(
|
|
250
|
+
i0.ɵɵconditional(ctx_r1.IsDeleteConfirming(summary_r6.Integration.ID) ? 23 : -1);
|
|
260
251
|
i0.ɵɵadvance(2);
|
|
261
|
-
i0.ɵɵproperty("disabled", !!
|
|
252
|
+
i0.ɵɵproperty("disabled", !!ctx_r1.TestingCardID);
|
|
262
253
|
i0.ɵɵadvance();
|
|
263
|
-
i0.ɵɵconditional(
|
|
254
|
+
i0.ɵɵconditional(ctx_r1.IsTestingCard(summary_r6.Integration.ID) ? 26 : 27);
|
|
264
255
|
i0.ɵɵadvance(4);
|
|
265
|
-
i0.ɵɵconditional(
|
|
256
|
+
i0.ɵɵconditional(ctx_r1.IsConnectionActive(summary_r6) ? 30 : -1);
|
|
266
257
|
} }
|
|
267
|
-
function
|
|
258
|
+
function ConnectionsComponent_Conditional_7_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
268
259
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
269
|
-
i0.ɵɵelementStart(0, "div",
|
|
270
|
-
i0.ɵɵrepeaterCreate(1,
|
|
271
|
-
i0.ɵɵelementStart(3, "div",
|
|
272
|
-
i0.ɵɵlistener("click", function
|
|
273
|
-
i0.ɵɵelementStart(4, "div",
|
|
274
|
-
i0.ɵɵelement(6, "i",
|
|
275
|
-
i0.ɵɵelementEnd();
|
|
276
|
-
i0.ɵɵelementStart(7, "span",
|
|
260
|
+
i0.ɵɵelementStart(0, "div", 16);
|
|
261
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_7_Conditional_2_For_2_Template, 33, 17, "div", 20, _forTrack0);
|
|
262
|
+
i0.ɵɵelementStart(3, "div", 21);
|
|
263
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_7_Conditional_2_Template_div_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenWizard()); });
|
|
264
|
+
i0.ɵɵelementStart(4, "div", 22)(5, "div", 23);
|
|
265
|
+
i0.ɵɵelement(6, "i", 13);
|
|
266
|
+
i0.ɵɵelementEnd();
|
|
267
|
+
i0.ɵɵelementStart(7, "span", 24);
|
|
277
268
|
i0.ɵɵtext(8, "Add Integration");
|
|
278
269
|
i0.ɵɵelementEnd()()()();
|
|
279
270
|
} if (rf & 2) {
|
|
280
|
-
const
|
|
271
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
281
272
|
i0.ɵɵadvance();
|
|
282
|
-
i0.ɵɵrepeater(
|
|
273
|
+
i0.ɵɵrepeater(ctx_r1.Connections);
|
|
283
274
|
} }
|
|
284
|
-
function
|
|
285
|
-
i0.ɵɵconditionalCreate(0,
|
|
286
|
-
i0.ɵɵconditionalCreate(1,
|
|
287
|
-
i0.ɵɵconditionalCreate(2,
|
|
275
|
+
function ConnectionsComponent_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
276
|
+
i0.ɵɵconditionalCreate(0, ConnectionsComponent_Conditional_7_Conditional_0_Template, 2, 0, "div", 14);
|
|
277
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_7_Conditional_1_Template, 9, 0, "div", 15);
|
|
278
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_7_Conditional_2_Template, 9, 0, "div", 16);
|
|
288
279
|
} if (rf & 2) {
|
|
289
|
-
const
|
|
290
|
-
i0.ɵɵconditional(
|
|
280
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
281
|
+
i0.ɵɵconditional(ctx_r1.IsLoading ? 0 : -1);
|
|
291
282
|
i0.ɵɵadvance();
|
|
292
|
-
i0.ɵɵconditional(!
|
|
283
|
+
i0.ɵɵconditional(!ctx_r1.IsLoading && ctx_r1.Connections.length === 0 ? 1 : -1);
|
|
293
284
|
i0.ɵɵadvance();
|
|
294
|
-
i0.ɵɵconditional(!
|
|
285
|
+
i0.ɵɵconditional(!ctx_r1.IsLoading && ctx_r1.Connections.length > 0 ? 2 : -1);
|
|
295
286
|
} }
|
|
296
|
-
function
|
|
287
|
+
function ConnectionsComponent_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
297
288
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
298
|
-
i0.ɵɵelementStart(0, "app-visual-field-editor",
|
|
299
|
-
i0.ɵɵlistener("Close", function
|
|
289
|
+
i0.ɵɵelementStart(0, "app-visual-field-editor", 65);
|
|
290
|
+
i0.ɵɵlistener("Close", function ConnectionsComponent_Conditional_8_Conditional_1_Template_app_visual_field_editor_Close_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseEntityMapEditor()); });
|
|
300
291
|
i0.ɵɵelementEnd();
|
|
301
292
|
} if (rf & 2) {
|
|
302
|
-
const
|
|
303
|
-
i0.ɵɵproperty("EntityMap",
|
|
293
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
294
|
+
i0.ɵɵproperty("EntityMap", ctx_r1.EditorEntityMap)("CompanyIntegrationID", ctx_r1.SelectedSummary.Integration.ID)("RunViewProvider", ctx_r1.RunViewToUse);
|
|
304
295
|
} }
|
|
305
|
-
function
|
|
306
|
-
i0.ɵɵelement(0, "i",
|
|
296
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
+
i0.ɵɵelement(0, "i", 42);
|
|
307
298
|
i0.ɵɵtext(1, " Syncing... ");
|
|
308
299
|
} }
|
|
309
|
-
function
|
|
310
|
-
i0.ɵɵelement(0, "i",
|
|
300
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
301
|
+
i0.ɵɵelement(0, "i", 37);
|
|
311
302
|
i0.ɵɵtext(1, " Sync ");
|
|
312
|
-
i0.ɵɵelement(2, "i",
|
|
303
|
+
i0.ɵɵelement(2, "i", 57);
|
|
313
304
|
} }
|
|
314
|
-
function
|
|
305
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
315
306
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
316
|
-
i0.ɵɵelementStart(0, "div",
|
|
307
|
+
i0.ɵɵelementStart(0, "div", 97)(1, "div", 58)(2, "span", 59);
|
|
317
308
|
i0.ɵɵtext(3, "Pull (External \u2192 MJ)");
|
|
318
309
|
i0.ɵɵelementEnd();
|
|
319
|
-
i0.ɵɵelementStart(4, "button",
|
|
320
|
-
i0.ɵɵlistener("click", function
|
|
321
|
-
i0.ɵɵelement(5, "i",
|
|
310
|
+
i0.ɵɵelementStart(4, "button", 60);
|
|
311
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_4_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, false, "Pull", $event)); });
|
|
312
|
+
i0.ɵɵelement(5, "i", 61);
|
|
322
313
|
i0.ɵɵtext(6, " Incremental Pull ");
|
|
323
314
|
i0.ɵɵelementEnd();
|
|
324
|
-
i0.ɵɵelementStart(7, "button",
|
|
325
|
-
i0.ɵɵlistener("click", function
|
|
326
|
-
i0.ɵɵelement(8, "i",
|
|
315
|
+
i0.ɵɵelementStart(7, "button", 60);
|
|
316
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_7_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, true, "Pull", $event)); });
|
|
317
|
+
i0.ɵɵelement(8, "i", 62);
|
|
327
318
|
i0.ɵɵtext(9, " Full Pull ");
|
|
328
319
|
i0.ɵɵelementEnd()();
|
|
329
|
-
i0.ɵɵelementStart(10, "div",
|
|
320
|
+
i0.ɵɵelementStart(10, "div", 58)(11, "span", 59);
|
|
330
321
|
i0.ɵɵtext(12, "Push (MJ \u2192 External)");
|
|
331
322
|
i0.ɵɵelementEnd();
|
|
332
|
-
i0.ɵɵelementStart(13, "button",
|
|
333
|
-
i0.ɵɵlistener("click", function
|
|
334
|
-
i0.ɵɵelement(14, "i",
|
|
323
|
+
i0.ɵɵelementStart(13, "button", 60);
|
|
324
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_13_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, false, "Push", $event)); });
|
|
325
|
+
i0.ɵɵelement(14, "i", 63);
|
|
335
326
|
i0.ɵɵtext(15, " Incremental Push ");
|
|
336
327
|
i0.ɵɵelementEnd();
|
|
337
|
-
i0.ɵɵelementStart(16, "button",
|
|
338
|
-
i0.ɵɵlistener("click", function
|
|
339
|
-
i0.ɵɵelement(17, "i",
|
|
328
|
+
i0.ɵɵelementStart(16, "button", 60);
|
|
329
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_16_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, true, "Push", $event)); });
|
|
330
|
+
i0.ɵɵelement(17, "i", 62);
|
|
340
331
|
i0.ɵɵtext(18, " Full Push ");
|
|
341
332
|
i0.ɵɵelementEnd()();
|
|
342
|
-
i0.ɵɵelementStart(19, "div",
|
|
333
|
+
i0.ɵɵelementStart(19, "div", 58)(20, "span", 59);
|
|
343
334
|
i0.ɵɵtext(21, "Bidirectional");
|
|
344
335
|
i0.ɵɵelementEnd();
|
|
345
|
-
i0.ɵɵelementStart(22, "button",
|
|
346
|
-
i0.ɵɵlistener("click", function
|
|
347
|
-
i0.ɵɵelement(23, "i",
|
|
336
|
+
i0.ɵɵelementStart(22, "button", 60);
|
|
337
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_22_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, false, "Bidirectional", $event)); });
|
|
338
|
+
i0.ɵɵelement(23, "i", 37);
|
|
348
339
|
i0.ɵɵtext(24, " Incremental Both ");
|
|
349
340
|
i0.ɵɵelementEnd();
|
|
350
|
-
i0.ɵɵelementStart(25, "button",
|
|
351
|
-
i0.ɵɵlistener("click", function
|
|
352
|
-
i0.ɵɵelement(26, "i",
|
|
341
|
+
i0.ɵɵelementStart(25, "button", 60);
|
|
342
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template_button_click_25_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.RunSyncWithDirection(ctx_r1.SelectedSummary.Integration.ID, true, "Bidirectional", $event)); });
|
|
343
|
+
i0.ɵɵelement(26, "i", 62);
|
|
353
344
|
i0.ɵɵtext(27, " Full Both ");
|
|
354
345
|
i0.ɵɵelementEnd()()();
|
|
355
346
|
} }
|
|
356
|
-
function
|
|
347
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Template(rf, ctx) { if (rf & 1) {
|
|
357
348
|
const _r13 = i0.ɵɵgetCurrentView();
|
|
358
|
-
i0.ɵɵelementStart(0, "div",
|
|
359
|
-
i0.ɵɵlistener("click", function
|
|
360
|
-
i0.ɵɵconditionalCreate(2,
|
|
349
|
+
i0.ɵɵelementStart(0, "div", 44)(1, "button", 55);
|
|
350
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Template_button_click_1_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleSyncMenu(ctx_r1.SelectedSummary.Integration.ID, $event)); });
|
|
351
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_2_Template, 2, 0)(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_3_Template, 3, 0);
|
|
361
352
|
i0.ɵɵelementEnd();
|
|
362
|
-
i0.ɵɵconditionalCreate(4,
|
|
353
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Conditional_4_Template, 28, 0, "div", 97);
|
|
363
354
|
i0.ɵɵelementEnd();
|
|
364
355
|
} if (rf & 2) {
|
|
365
|
-
const
|
|
356
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
366
357
|
i0.ɵɵadvance();
|
|
367
|
-
i0.ɵɵproperty("disabled", !!
|
|
358
|
+
i0.ɵɵproperty("disabled", !!ctx_r1.SyncingIntegrationID);
|
|
368
359
|
i0.ɵɵadvance();
|
|
369
|
-
i0.ɵɵconditional(
|
|
360
|
+
i0.ɵɵconditional(ctx_r1.IsSyncing(ctx_r1.SelectedSummary.Integration.ID) ? 2 : 3);
|
|
370
361
|
i0.ɵɵadvance(2);
|
|
371
|
-
i0.ɵɵconditional(
|
|
362
|
+
i0.ɵɵconditional(ctx_r1.SyncMenuIntegrationID === ctx_r1.SelectedSummary.Integration.ID ? 4 : -1);
|
|
372
363
|
} }
|
|
373
|
-
function
|
|
364
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
374
365
|
const _r15 = i0.ɵɵgetCurrentView();
|
|
375
|
-
i0.ɵɵelementStart(0, "mj-scheduled-job-summary",
|
|
376
|
-
i0.ɵɵlistener("EditRequested", function
|
|
366
|
+
i0.ɵɵelementStart(0, "mj-scheduled-job-summary", 98);
|
|
367
|
+
i0.ɵɵlistener("EditRequested", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Template_mj_scheduled_job_summary_EditRequested_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenSchedulePanel()); });
|
|
377
368
|
i0.ɵɵelementEnd();
|
|
378
369
|
} if (rf & 2) {
|
|
379
|
-
const
|
|
380
|
-
i0.ɵɵproperty("ScheduledJobID",
|
|
370
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
371
|
+
i0.ɵɵproperty("ScheduledJobID", ctx_r1.ScheduledJobID);
|
|
381
372
|
} }
|
|
382
|
-
function
|
|
373
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
383
374
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
384
|
-
i0.ɵɵelementStart(0, "div",
|
|
375
|
+
i0.ɵɵelementStart(0, "div", 81)(1, "span", 99);
|
|
385
376
|
i0.ɵɵtext(2, "No sync schedule configured");
|
|
386
377
|
i0.ɵɵelementEnd();
|
|
387
|
-
i0.ɵɵelementStart(3, "button",
|
|
388
|
-
i0.ɵɵlistener("click", function
|
|
389
|
-
i0.ɵɵelement(4, "i",
|
|
378
|
+
i0.ɵɵelementStart(3, "button", 100);
|
|
379
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_29_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenSchedulePanel()); });
|
|
380
|
+
i0.ɵɵelement(4, "i", 13);
|
|
390
381
|
i0.ɵɵtext(5, " Schedule Sync ");
|
|
391
382
|
i0.ɵɵelementEnd()();
|
|
392
383
|
} }
|
|
393
|
-
function
|
|
394
|
-
i0.ɵɵelement(0, "i",
|
|
384
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
385
|
+
i0.ɵɵelement(0, "i", 48);
|
|
395
386
|
} }
|
|
396
|
-
function
|
|
397
|
-
i0.ɵɵelement(0, "i",
|
|
387
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
388
|
+
i0.ɵɵelement(0, "i", 49);
|
|
398
389
|
} }
|
|
399
|
-
function
|
|
400
|
-
i0.ɵɵelementStart(0, "div",
|
|
401
|
-
i0.ɵɵconditionalCreate(1,
|
|
390
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Template(rf, ctx) { if (rf & 1) {
|
|
391
|
+
i0.ɵɵelementStart(0, "div", 101);
|
|
392
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_1_Template, 1, 0, "i", 48)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Conditional_2_Template, 1, 0, "i", 49);
|
|
402
393
|
i0.ɵɵelementStart(3, "span");
|
|
403
394
|
i0.ɵɵtext(4);
|
|
404
395
|
i0.ɵɵelementEnd()();
|
|
405
396
|
} if (rf & 2) {
|
|
406
|
-
const
|
|
407
|
-
i0.ɵɵclassProp("sync-success",
|
|
397
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
398
|
+
i0.ɵɵclassProp("sync-success", ctx_r1.SyncResult.Success)("sync-failure", !ctx_r1.SyncResult.Success);
|
|
408
399
|
i0.ɵɵadvance();
|
|
409
|
-
i0.ɵɵconditional(
|
|
400
|
+
i0.ɵɵconditional(ctx_r1.SyncResult.Success ? 1 : 2);
|
|
410
401
|
i0.ɵɵadvance(3);
|
|
411
|
-
i0.ɵɵtextInterpolate(
|
|
402
|
+
i0.ɵɵtextInterpolate(ctx_r1.SyncResult.Message || (ctx_r1.SyncResult.Success ? "Sync completed successfully" : "Sync failed"));
|
|
412
403
|
} }
|
|
413
|
-
function
|
|
414
|
-
i0.ɵɵelementStart(0, "option",
|
|
404
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
405
|
+
i0.ɵɵelementStart(0, "option", 108);
|
|
415
406
|
i0.ɵɵtext(1);
|
|
416
407
|
i0.ɵɵelementEnd();
|
|
417
408
|
} if (rf & 2) {
|
|
@@ -420,33 +411,33 @@ function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_For_13_
|
|
|
420
411
|
i0.ɵɵadvance();
|
|
421
412
|
i0.ɵɵtextInterpolate(schema_r18);
|
|
422
413
|
} }
|
|
423
|
-
function
|
|
424
|
-
i0.ɵɵelement(0, "i",
|
|
414
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_26_Template(rf, ctx) { if (rf & 1) {
|
|
415
|
+
i0.ɵɵelement(0, "i", 42);
|
|
425
416
|
i0.ɵɵtext(1, " Mapping... ");
|
|
426
417
|
} }
|
|
427
|
-
function
|
|
428
|
-
i0.ɵɵelement(0, "i",
|
|
418
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
419
|
+
i0.ɵɵelement(0, "i", 93);
|
|
429
420
|
i0.ɵɵtext(1, " Auto-Map ");
|
|
430
421
|
} }
|
|
431
|
-
function
|
|
432
|
-
i0.ɵɵelementStart(0, "div",
|
|
433
|
-
i0.ɵɵelement(1, "i",
|
|
422
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
423
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
424
|
+
i0.ɵɵelement(1, "i", 48);
|
|
434
425
|
i0.ɵɵtext(2);
|
|
435
426
|
i0.ɵɵelementEnd();
|
|
436
427
|
} if (rf & 2) {
|
|
437
|
-
const
|
|
428
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
438
429
|
i0.ɵɵadvance(2);
|
|
439
|
-
i0.ɵɵtextInterpolate4(" Created ",
|
|
430
|
+
i0.ɵɵtextInterpolate4(" Created ", ctx_r1.AutoMapResult.EntityMapsCreated, " entity map", ctx_r1.AutoMapResult.EntityMapsCreated !== 1 ? "s" : "", " with ", ctx_r1.AutoMapResult.FieldMapsCreated, " field map", ctx_r1.AutoMapResult.FieldMapsCreated !== 1 ? "s" : "", " ");
|
|
440
431
|
} }
|
|
441
|
-
function
|
|
442
|
-
i0.ɵɵelementStart(0, "div",
|
|
443
|
-
i0.ɵɵelement(1, "i",
|
|
432
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
433
|
+
i0.ɵɵelementStart(0, "div", 122);
|
|
434
|
+
i0.ɵɵelement(1, "i", 124);
|
|
444
435
|
i0.ɵɵtext(2, " All entities in this schema are already mapped. ");
|
|
445
436
|
i0.ɵɵelementEnd();
|
|
446
437
|
} }
|
|
447
|
-
function
|
|
448
|
-
i0.ɵɵelementStart(0, "div",
|
|
449
|
-
i0.ɵɵelement(1, "i",
|
|
438
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
439
|
+
i0.ɵɵelementStart(0, "div", 125);
|
|
440
|
+
i0.ɵɵelement(1, "i", 126);
|
|
450
441
|
i0.ɵɵtext(2);
|
|
451
442
|
i0.ɵɵelementEnd();
|
|
452
443
|
} if (rf & 2) {
|
|
@@ -454,114 +445,114 @@ function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_52_Conditi
|
|
|
454
445
|
i0.ɵɵadvance(2);
|
|
455
446
|
i0.ɵɵtextInterpolate1(" ", err_r19);
|
|
456
447
|
} }
|
|
457
|
-
function
|
|
458
|
-
i0.ɵɵelementStart(0, "div",
|
|
459
|
-
i0.ɵɵrepeaterCreate(1,
|
|
448
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
+
i0.ɵɵelementStart(0, "div", 123);
|
|
450
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_For_2_Template, 3, 1, "div", 125, i0.ɵɵrepeaterTrackByIdentity);
|
|
460
451
|
i0.ɵɵelementEnd();
|
|
461
452
|
} if (rf & 2) {
|
|
462
|
-
const
|
|
453
|
+
const ctx_r1 = i0.ɵɵnextContext(5);
|
|
463
454
|
i0.ɵɵadvance();
|
|
464
|
-
i0.ɵɵrepeater(
|
|
455
|
+
i0.ɵɵrepeater(ctx_r1.AutoMapResult.Errors);
|
|
465
456
|
} }
|
|
466
|
-
function
|
|
467
|
-
i0.ɵɵelementStart(0, "div",
|
|
468
|
-
i0.ɵɵconditionalCreate(1,
|
|
469
|
-
i0.ɵɵconditionalCreate(3,
|
|
457
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
458
|
+
i0.ɵɵelementStart(0, "div", 121);
|
|
459
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_1_Template, 3, 4, "div", 122)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_2_Template, 3, 0, "div", 122);
|
|
460
|
+
i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Conditional_3_Template, 3, 0, "div", 123);
|
|
470
461
|
i0.ɵɵelementEnd();
|
|
471
462
|
} if (rf & 2) {
|
|
472
|
-
const
|
|
473
|
-
i0.ɵɵclassProp("auto-map-success",
|
|
463
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
464
|
+
i0.ɵɵclassProp("auto-map-success", ctx_r1.AutoMapResult.Errors.length === 0)("auto-map-partial", ctx_r1.AutoMapResult.Errors.length > 0 && ctx_r1.AutoMapResult.EntityMapsCreated > 0)("auto-map-failure", ctx_r1.AutoMapResult.EntityMapsCreated === 0 && ctx_r1.AutoMapResult.Errors.length > 0);
|
|
474
465
|
i0.ɵɵadvance();
|
|
475
|
-
i0.ɵɵconditional(
|
|
466
|
+
i0.ɵɵconditional(ctx_r1.AutoMapResult.EntityMapsCreated > 0 ? 1 : ctx_r1.AutoMapResult.Errors.length === 0 ? 2 : -1);
|
|
476
467
|
i0.ɵɵadvance(2);
|
|
477
|
-
i0.ɵɵconditional(
|
|
468
|
+
i0.ɵɵconditional(ctx_r1.AutoMapResult.Errors.length > 0 ? 3 : -1);
|
|
478
469
|
} }
|
|
479
|
-
function
|
|
470
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template(rf, ctx) { if (rf & 1) {
|
|
480
471
|
const _r17 = i0.ɵɵgetCurrentView();
|
|
481
|
-
i0.ɵɵelementStart(0, "div",
|
|
482
|
-
i0.ɵɵelement(2, "i",
|
|
472
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "div", 102);
|
|
473
|
+
i0.ɵɵelement(2, "i", 93);
|
|
483
474
|
i0.ɵɵelementStart(3, "span");
|
|
484
475
|
i0.ɵɵtext(4, "Auto-map all entities in a schema to this integration with 1:1 field mappings");
|
|
485
476
|
i0.ɵɵelementEnd()();
|
|
486
|
-
i0.ɵɵelementStart(5, "div",
|
|
477
|
+
i0.ɵɵelementStart(5, "div", 103)(6, "div", 104)(7, "label", 105);
|
|
487
478
|
i0.ɵɵtext(8, "Target Schema");
|
|
488
479
|
i0.ɵɵelementEnd();
|
|
489
|
-
i0.ɵɵelementStart(9, "select",
|
|
490
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
491
|
-
i0.ɵɵelementStart(10, "option",
|
|
480
|
+
i0.ɵɵelementStart(9, "select", 106);
|
|
481
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_select_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.AutoMapSelectedSchema, $event) || (ctx_r1.AutoMapSelectedSchema = $event); return i0.ɵɵresetView($event); });
|
|
482
|
+
i0.ɵɵelementStart(10, "option", 107);
|
|
492
483
|
i0.ɵɵtext(11, "Select schema...");
|
|
493
484
|
i0.ɵɵelementEnd();
|
|
494
|
-
i0.ɵɵrepeaterCreate(12,
|
|
485
|
+
i0.ɵɵrepeaterCreate(12, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_For_13_Template, 2, 2, "option", 108, i0.ɵɵrepeaterTrackByIdentity);
|
|
495
486
|
i0.ɵɵelementEnd()();
|
|
496
|
-
i0.ɵɵelementStart(14, "div",
|
|
487
|
+
i0.ɵɵelementStart(14, "div", 109)(15, "label", 105);
|
|
497
488
|
i0.ɵɵtext(16, "Direction");
|
|
498
489
|
i0.ɵɵelementEnd();
|
|
499
|
-
i0.ɵɵelementStart(17, "div",
|
|
500
|
-
i0.ɵɵlistener("click", function
|
|
501
|
-
i0.ɵɵelement(19, "i",
|
|
490
|
+
i0.ɵɵelementStart(17, "div", 110)(18, "button", 111);
|
|
491
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AutoMapDirection = "Pull"); });
|
|
492
|
+
i0.ɵɵelement(19, "i", 112);
|
|
502
493
|
i0.ɵɵelementEnd();
|
|
503
|
-
i0.ɵɵelementStart(20, "button",
|
|
504
|
-
i0.ɵɵlistener("click", function
|
|
505
|
-
i0.ɵɵelement(21, "i",
|
|
494
|
+
i0.ɵɵelementStart(20, "button", 113);
|
|
495
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_20_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AutoMapDirection = "Bidirectional"); });
|
|
496
|
+
i0.ɵɵelement(21, "i", 114);
|
|
506
497
|
i0.ɵɵelementEnd();
|
|
507
|
-
i0.ɵɵelementStart(22, "button",
|
|
508
|
-
i0.ɵɵlistener("click", function
|
|
509
|
-
i0.ɵɵelement(23, "i",
|
|
498
|
+
i0.ɵɵelementStart(22, "button", 115);
|
|
499
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_22_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AutoMapDirection = "Push"); });
|
|
500
|
+
i0.ɵɵelement(23, "i", 68);
|
|
510
501
|
i0.ɵɵelementEnd()()();
|
|
511
|
-
i0.ɵɵelementStart(24, "div",
|
|
512
|
-
i0.ɵɵlistener("click", function
|
|
513
|
-
i0.ɵɵconditionalCreate(26,
|
|
502
|
+
i0.ɵɵelementStart(24, "div", 116)(25, "button", 117);
|
|
503
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_25_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunAutoMap()); });
|
|
504
|
+
i0.ɵɵconditionalCreate(26, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_26_Template, 2, 0)(27, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_27_Template, 2, 0);
|
|
514
505
|
i0.ɵɵelementEnd();
|
|
515
|
-
i0.ɵɵelementStart(28, "button",
|
|
516
|
-
i0.ɵɵlistener("click", function
|
|
517
|
-
i0.ɵɵelement(29, "i",
|
|
506
|
+
i0.ɵɵelementStart(28, "button", 118);
|
|
507
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseAutoMapPanel()); });
|
|
508
|
+
i0.ɵɵelement(29, "i", 119);
|
|
518
509
|
i0.ɵɵelementEnd()()();
|
|
519
|
-
i0.ɵɵconditionalCreate(30,
|
|
510
|
+
i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Conditional_30_Template, 4, 8, "div", 120);
|
|
520
511
|
i0.ɵɵelementEnd();
|
|
521
512
|
} if (rf & 2) {
|
|
522
|
-
const
|
|
513
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
523
514
|
i0.ɵɵadvance(9);
|
|
524
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
515
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.AutoMapSelectedSchema);
|
|
525
516
|
i0.ɵɵadvance();
|
|
526
517
|
i0.ɵɵproperty("ngValue", "");
|
|
527
518
|
i0.ɵɵadvance(2);
|
|
528
|
-
i0.ɵɵrepeater(
|
|
519
|
+
i0.ɵɵrepeater(ctx_r1.AutoMapSchemas);
|
|
529
520
|
i0.ɵɵadvance(6);
|
|
530
|
-
i0.ɵɵclassProp("active",
|
|
521
|
+
i0.ɵɵclassProp("active", ctx_r1.AutoMapDirection === "Pull");
|
|
531
522
|
i0.ɵɵadvance(2);
|
|
532
|
-
i0.ɵɵclassProp("active",
|
|
523
|
+
i0.ɵɵclassProp("active", ctx_r1.AutoMapDirection === "Bidirectional");
|
|
533
524
|
i0.ɵɵadvance(2);
|
|
534
|
-
i0.ɵɵclassProp("active",
|
|
525
|
+
i0.ɵɵclassProp("active", ctx_r1.AutoMapDirection === "Push");
|
|
535
526
|
i0.ɵɵadvance(3);
|
|
536
|
-
i0.ɵɵproperty("disabled", !
|
|
527
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanAutoMap);
|
|
537
528
|
i0.ɵɵadvance();
|
|
538
|
-
i0.ɵɵconditional(
|
|
529
|
+
i0.ɵɵconditional(ctx_r1.IsAutoMapping ? 26 : 27);
|
|
539
530
|
i0.ɵɵadvance(4);
|
|
540
|
-
i0.ɵɵconditional(
|
|
531
|
+
i0.ɵɵconditional(ctx_r1.AutoMapResult ? 30 : -1);
|
|
541
532
|
} }
|
|
542
|
-
function
|
|
543
|
-
i0.ɵɵelement(0, "i",
|
|
533
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
534
|
+
i0.ɵɵelement(0, "i", 42);
|
|
544
535
|
i0.ɵɵtext(1, " Creating... ");
|
|
545
536
|
} }
|
|
546
|
-
function
|
|
547
|
-
i0.ɵɵelement(0, "i",
|
|
537
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
538
|
+
i0.ɵɵelement(0, "i", 91);
|
|
548
539
|
i0.ɵɵtext(1);
|
|
549
540
|
} if (rf & 2) {
|
|
550
|
-
const
|
|
541
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
551
542
|
i0.ɵɵadvance();
|
|
552
|
-
i0.ɵɵtextInterpolate2(" Create ",
|
|
543
|
+
i0.ɵɵtextInterpolate2(" Create ", ctx_r1.CreateTablesSelectedCount, " Table", ctx_r1.CreateTablesSelectedCount !== 1 ? "s" : "", " ");
|
|
553
544
|
} }
|
|
554
|
-
function
|
|
555
|
-
i0.ɵɵelement(0, "mj-loading",
|
|
545
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
546
|
+
i0.ɵɵelement(0, "mj-loading", 127);
|
|
556
547
|
} }
|
|
557
|
-
function
|
|
558
|
-
i0.ɵɵelementStart(0, "div",
|
|
559
|
-
i0.ɵɵelement(1, "i",
|
|
548
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
549
|
+
i0.ɵɵelementStart(0, "div", 128);
|
|
550
|
+
i0.ɵɵelement(1, "i", 124);
|
|
560
551
|
i0.ɵɵtext(2, " No source objects available from this connector. ");
|
|
561
552
|
i0.ɵɵelementEnd();
|
|
562
553
|
} }
|
|
563
|
-
function
|
|
564
|
-
i0.ɵɵelementStart(0, "span",
|
|
554
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
555
|
+
i0.ɵɵelementStart(0, "span", 137);
|
|
565
556
|
i0.ɵɵtext(1);
|
|
566
557
|
i0.ɵɵelementEnd();
|
|
567
558
|
} if (rf & 2) {
|
|
@@ -569,27 +560,27 @@ function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditi
|
|
|
569
560
|
i0.ɵɵadvance();
|
|
570
561
|
i0.ɵɵtextInterpolate(obj_r23.Name);
|
|
571
562
|
} }
|
|
572
|
-
function
|
|
573
|
-
i0.ɵɵelementStart(0, "span",
|
|
563
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
564
|
+
i0.ɵɵelementStart(0, "span", 138);
|
|
574
565
|
i0.ɵɵtext(1, "Custom");
|
|
575
566
|
i0.ɵɵelementEnd();
|
|
576
567
|
} }
|
|
577
|
-
function
|
|
578
|
-
i0.ɵɵelementStart(0, "span",
|
|
568
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
569
|
+
i0.ɵɵelementStart(0, "span", 139);
|
|
579
570
|
i0.ɵɵtext(1, "Registered");
|
|
580
571
|
i0.ɵɵelementEnd();
|
|
581
572
|
} }
|
|
582
|
-
function
|
|
573
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
583
574
|
const _r22 = i0.ɵɵgetCurrentView();
|
|
584
|
-
i0.ɵɵelementStart(0, "label",
|
|
585
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
575
|
+
i0.ɵɵelementStart(0, "label", 134)(1, "input", 136);
|
|
576
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Template_input_ngModelChange_1_listener($event) { const obj_r23 = i0.ɵɵrestoreView(_r22).$implicit; i0.ɵɵtwoWayBindingSet(obj_r23.Selected, $event) || (obj_r23.Selected = $event); return i0.ɵɵresetView($event); });
|
|
586
577
|
i0.ɵɵelementEnd();
|
|
587
578
|
i0.ɵɵelementStart(2, "span");
|
|
588
579
|
i0.ɵɵtext(3);
|
|
589
580
|
i0.ɵɵelementEnd();
|
|
590
|
-
i0.ɵɵconditionalCreate(4,
|
|
591
|
-
i0.ɵɵconditionalCreate(5,
|
|
592
|
-
i0.ɵɵconditionalCreate(6,
|
|
581
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_4_Template, 2, 1, "span", 137);
|
|
582
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_5_Template, 2, 0, "span", 138);
|
|
583
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Conditional_6_Template, 2, 0, "span", 139);
|
|
593
584
|
i0.ɵɵelementEnd();
|
|
594
585
|
} if (rf & 2) {
|
|
595
586
|
const obj_r23 = ctx.$implicit;
|
|
@@ -604,92 +595,92 @@ function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_53_Conditi
|
|
|
604
595
|
i0.ɵɵadvance();
|
|
605
596
|
i0.ɵɵconditional(obj_r23.AlreadyPersisted ? 6 : -1);
|
|
606
597
|
} }
|
|
607
|
-
function
|
|
598
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
608
599
|
const _r21 = i0.ɵɵgetCurrentView();
|
|
609
|
-
i0.ɵɵelementStart(0, "div",
|
|
610
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
600
|
+
i0.ɵɵelementStart(0, "div", 130)(1, "input", 131);
|
|
601
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template_input_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.CreateTablesSearch, $event) || (ctx_r1.CreateTablesSearch = $event); return i0.ɵɵresetView($event); });
|
|
611
602
|
i0.ɵɵelementEnd()();
|
|
612
|
-
i0.ɵɵelementStart(2, "div",
|
|
613
|
-
i0.ɵɵlistener("change", function
|
|
603
|
+
i0.ɵɵelementStart(2, "div", 132)(3, "div", 133)(4, "label", 134)(5, "input", 135);
|
|
604
|
+
i0.ɵɵlistener("change", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template_input_change_5_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.ToggleAllCreateTablesObjects($event.target.checked)); });
|
|
614
605
|
i0.ɵɵelementEnd();
|
|
615
606
|
i0.ɵɵelementStart(6, "span");
|
|
616
607
|
i0.ɵɵtext(7);
|
|
617
608
|
i0.ɵɵelementEnd()()();
|
|
618
|
-
i0.ɵɵrepeaterCreate(8,
|
|
609
|
+
i0.ɵɵrepeaterCreate(8, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_For_9_Template, 7, 5, "label", 134, _forTrack1);
|
|
619
610
|
i0.ɵɵelementEnd();
|
|
620
611
|
} if (rf & 2) {
|
|
621
|
-
const
|
|
612
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
622
613
|
i0.ɵɵadvance();
|
|
623
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
614
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.CreateTablesSearch);
|
|
624
615
|
i0.ɵɵadvance(4);
|
|
625
|
-
i0.ɵɵproperty("checked",
|
|
616
|
+
i0.ɵɵproperty("checked", ctx_r1.FilteredCreateTablesObjects.length > 0 && ctx_r1.CreateTablesSelectedCount === ctx_r1.FilteredCreateTablesObjects.length);
|
|
626
617
|
i0.ɵɵadvance(2);
|
|
627
|
-
i0.ɵɵtextInterpolate2("Select All (",
|
|
618
|
+
i0.ɵɵtextInterpolate2("Select All (", ctx_r1.FilteredCreateTablesObjects.length, " of ", ctx_r1.CreateTablesObjects.length, ")");
|
|
628
619
|
i0.ɵɵadvance();
|
|
629
|
-
i0.ɵɵrepeater(
|
|
620
|
+
i0.ɵɵrepeater(ctx_r1.FilteredCreateTablesObjects);
|
|
630
621
|
} }
|
|
631
|
-
function
|
|
632
|
-
i0.ɵɵelement(0, "i",
|
|
622
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
623
|
+
i0.ɵɵelement(0, "i", 48);
|
|
633
624
|
} }
|
|
634
|
-
function
|
|
635
|
-
i0.ɵɵelement(0, "i",
|
|
625
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
626
|
+
i0.ɵɵelement(0, "i", 49);
|
|
636
627
|
} }
|
|
637
|
-
function
|
|
638
|
-
i0.ɵɵelementStart(0, "div",
|
|
639
|
-
i0.ɵɵconditionalCreate(1,
|
|
628
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
629
|
+
i0.ɵɵelementStart(0, "div", 121);
|
|
630
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_1_Template, 1, 0, "i", 48)(2, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Conditional_2_Template, 1, 0, "i", 49);
|
|
640
631
|
i0.ɵɵelementStart(3, "span");
|
|
641
632
|
i0.ɵɵtext(4);
|
|
642
633
|
i0.ɵɵelementEnd()();
|
|
643
634
|
} if (rf & 2) {
|
|
644
|
-
const
|
|
645
|
-
i0.ɵɵclassProp("auto-map-success",
|
|
635
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
636
|
+
i0.ɵɵclassProp("auto-map-success", ctx_r1.CreateTablesResult.Success)("auto-map-failure", !ctx_r1.CreateTablesResult.Success);
|
|
646
637
|
i0.ɵɵadvance();
|
|
647
|
-
i0.ɵɵconditional(
|
|
638
|
+
i0.ɵɵconditional(ctx_r1.CreateTablesResult.Success ? 1 : 2);
|
|
648
639
|
i0.ɵɵadvance(3);
|
|
649
|
-
i0.ɵɵtextInterpolate(
|
|
640
|
+
i0.ɵɵtextInterpolate(ctx_r1.CreateTablesResult.Message);
|
|
650
641
|
} }
|
|
651
|
-
function
|
|
642
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template(rf, ctx) { if (rf & 1) {
|
|
652
643
|
const _r20 = i0.ɵɵgetCurrentView();
|
|
653
|
-
i0.ɵɵelementStart(0, "div",
|
|
654
|
-
i0.ɵɵelement(2, "i",
|
|
644
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "div", 102);
|
|
645
|
+
i0.ɵɵelement(2, "i", 91);
|
|
655
646
|
i0.ɵɵelementStart(3, "span");
|
|
656
647
|
i0.ɵɵtext(4, "Select source objects to create as entity tables in your database");
|
|
657
648
|
i0.ɵɵelementEnd()();
|
|
658
|
-
i0.ɵɵelementStart(5, "div",
|
|
659
|
-
i0.ɵɵlistener("click", function
|
|
660
|
-
i0.ɵɵconditionalCreate(8,
|
|
649
|
+
i0.ɵɵelementStart(5, "div", 103)(6, "div", 116)(7, "button", 117);
|
|
650
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.RunCreateTables()); });
|
|
651
|
+
i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_8_Template, 2, 0)(9, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_9_Template, 2, 2);
|
|
661
652
|
i0.ɵɵelementEnd();
|
|
662
|
-
i0.ɵɵelementStart(10, "button",
|
|
663
|
-
i0.ɵɵlistener("click", function
|
|
664
|
-
i0.ɵɵelement(11, "i",
|
|
653
|
+
i0.ɵɵelementStart(10, "button", 118);
|
|
654
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseCreateTablesPanel()); });
|
|
655
|
+
i0.ɵɵelement(11, "i", 119);
|
|
665
656
|
i0.ɵɵelementEnd()()();
|
|
666
|
-
i0.ɵɵconditionalCreate(12,
|
|
667
|
-
i0.ɵɵconditionalCreate(15,
|
|
657
|
+
i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_12_Template, 1, 0, "mj-loading", 127)(13, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_13_Template, 3, 0, "div", 128)(14, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_14_Template, 10, 4);
|
|
658
|
+
i0.ɵɵconditionalCreate(15, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Conditional_15_Template, 5, 6, "div", 129);
|
|
668
659
|
i0.ɵɵelementEnd();
|
|
669
660
|
} if (rf & 2) {
|
|
670
|
-
const
|
|
661
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
671
662
|
i0.ɵɵadvance(7);
|
|
672
|
-
i0.ɵɵproperty("disabled", !
|
|
663
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanCreateTables);
|
|
673
664
|
i0.ɵɵadvance();
|
|
674
|
-
i0.ɵɵconditional(
|
|
665
|
+
i0.ɵɵconditional(ctx_r1.IsCreatingTables ? 8 : 9);
|
|
675
666
|
i0.ɵɵadvance(4);
|
|
676
|
-
i0.ɵɵconditional(
|
|
667
|
+
i0.ɵɵconditional(ctx_r1.IsLoadingCreateTablesObjects ? 12 : ctx_r1.CreateTablesObjects.length === 0 ? 13 : 14);
|
|
677
668
|
i0.ɵɵadvance(3);
|
|
678
|
-
i0.ɵɵconditional(
|
|
669
|
+
i0.ɵɵconditional(ctx_r1.CreateTablesResult ? 15 : -1);
|
|
679
670
|
} }
|
|
680
|
-
function
|
|
681
|
-
i0.ɵɵelementStart(0, "div",
|
|
682
|
-
i0.ɵɵelement(1, "i",
|
|
671
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
672
|
+
i0.ɵɵelementStart(0, "div", 140);
|
|
673
|
+
i0.ɵɵelement(1, "i", 42);
|
|
683
674
|
i0.ɵɵtext(2, " Loading...");
|
|
684
675
|
i0.ɵɵelementEnd();
|
|
685
676
|
} }
|
|
686
|
-
function
|
|
687
|
-
i0.ɵɵelementStart(0, "div",
|
|
677
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
678
|
+
i0.ɵɵelementStart(0, "div", 141);
|
|
688
679
|
i0.ɵɵtext(1, "No source objects found in metadata");
|
|
689
680
|
i0.ɵɵelementEnd();
|
|
690
681
|
} }
|
|
691
|
-
function
|
|
692
|
-
i0.ɵɵelementStart(0, "option",
|
|
682
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
683
|
+
i0.ɵɵelementStart(0, "option", 108);
|
|
693
684
|
i0.ɵɵtext(1);
|
|
694
685
|
i0.ɵɵelementEnd();
|
|
695
686
|
} if (rf & 2) {
|
|
@@ -698,148 +689,148 @@ function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_54_Conditi
|
|
|
698
689
|
i0.ɵɵadvance();
|
|
699
690
|
i0.ɵɵtextInterpolate(obj_r26.Label || obj_r26.Name);
|
|
700
691
|
} }
|
|
701
|
-
function
|
|
692
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
702
693
|
const _r25 = i0.ɵɵgetCurrentView();
|
|
703
|
-
i0.ɵɵelementStart(0, "select",
|
|
704
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
705
|
-
i0.ɵɵelementStart(1, "option",
|
|
694
|
+
i0.ɵɵelementStart(0, "select", 106);
|
|
695
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r25); const ctx_r1 = i0.ɵɵnextContext(4); i0.ɵɵtwoWayBindingSet(ctx_r1.AddMapSourceObjectName, $event) || (ctx_r1.AddMapSourceObjectName = $event); return i0.ɵɵresetView($event); });
|
|
696
|
+
i0.ɵɵelementStart(1, "option", 107);
|
|
706
697
|
i0.ɵɵtext(2, "Select source object...");
|
|
707
698
|
i0.ɵɵelementEnd();
|
|
708
|
-
i0.ɵɵrepeaterCreate(3,
|
|
699
|
+
i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_For_4_Template, 2, 2, "option", 108, _forTrack1);
|
|
709
700
|
i0.ɵɵelementEnd();
|
|
710
701
|
} if (rf & 2) {
|
|
711
|
-
const
|
|
712
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
702
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
703
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.AddMapSourceObjectName);
|
|
713
704
|
i0.ɵɵadvance();
|
|
714
705
|
i0.ɵɵproperty("ngValue", "");
|
|
715
706
|
i0.ɵɵadvance(2);
|
|
716
|
-
i0.ɵɵrepeater(
|
|
707
|
+
i0.ɵɵrepeater(ctx_r1.AvailableSourceObjects);
|
|
717
708
|
} }
|
|
718
|
-
function
|
|
719
|
-
i0.ɵɵelement(0, "i",
|
|
709
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
710
|
+
i0.ɵɵelement(0, "i", 42);
|
|
720
711
|
} }
|
|
721
|
-
function
|
|
722
|
-
i0.ɵɵelement(0, "i",
|
|
712
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
713
|
+
i0.ɵɵelement(0, "i", 147);
|
|
723
714
|
i0.ɵɵtext(1, " Add ");
|
|
724
715
|
} }
|
|
725
|
-
function
|
|
716
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template(rf, ctx) { if (rf & 1) {
|
|
726
717
|
const _r24 = i0.ɵɵgetCurrentView();
|
|
727
|
-
i0.ɵɵelementStart(0, "div",
|
|
718
|
+
i0.ɵɵelementStart(0, "div", 95)(1, "div", 103)(2, "div", 104)(3, "label", 105);
|
|
728
719
|
i0.ɵɵtext(4, "Source Object");
|
|
729
720
|
i0.ɵɵelementEnd();
|
|
730
|
-
i0.ɵɵconditionalCreate(5,
|
|
721
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_5_Template, 3, 0, "div", 140)(6, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_6_Template, 2, 0, "div", 141)(7, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_7_Template, 5, 2, "select", 142);
|
|
731
722
|
i0.ɵɵelementEnd();
|
|
732
|
-
i0.ɵɵelementStart(8, "div",
|
|
723
|
+
i0.ɵɵelementStart(8, "div", 109)(9, "label", 105);
|
|
733
724
|
i0.ɵɵtext(10, "Direction");
|
|
734
725
|
i0.ɵɵelementEnd();
|
|
735
|
-
i0.ɵɵelementStart(11, "div",
|
|
736
|
-
i0.ɵɵlistener("click", function
|
|
737
|
-
i0.ɵɵelement(13, "i",
|
|
726
|
+
i0.ɵɵelementStart(11, "div", 110)(12, "button", 111);
|
|
727
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_12_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddMapDirection = "Pull"); });
|
|
728
|
+
i0.ɵɵelement(13, "i", 112);
|
|
738
729
|
i0.ɵɵelementEnd();
|
|
739
|
-
i0.ɵɵelementStart(14, "button",
|
|
740
|
-
i0.ɵɵlistener("click", function
|
|
741
|
-
i0.ɵɵelement(15, "i",
|
|
730
|
+
i0.ɵɵelementStart(14, "button", 113);
|
|
731
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddMapDirection = "Bidirectional"); });
|
|
732
|
+
i0.ɵɵelement(15, "i", 114);
|
|
742
733
|
i0.ɵɵelementEnd();
|
|
743
|
-
i0.ɵɵelementStart(16, "button",
|
|
744
|
-
i0.ɵɵlistener("click", function
|
|
745
|
-
i0.ɵɵelement(17, "i",
|
|
734
|
+
i0.ɵɵelementStart(16, "button", 115);
|
|
735
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_16_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.AddMapDirection = "Push"); });
|
|
736
|
+
i0.ɵɵelement(17, "i", 68);
|
|
746
737
|
i0.ɵɵelementEnd()()();
|
|
747
|
-
i0.ɵɵelementStart(18, "div",
|
|
738
|
+
i0.ɵɵelementStart(18, "div", 143)(19, "label", 105);
|
|
748
739
|
i0.ɵɵtext(20, "MJ Entity");
|
|
749
740
|
i0.ɵɵelementEnd();
|
|
750
|
-
i0.ɵɵelementStart(21, "div",
|
|
751
|
-
i0.ɵɵlistener("SelectionChange", function
|
|
741
|
+
i0.ɵɵelementStart(21, "div", 144)(22, "mj-tree-dropdown", 145, 0);
|
|
742
|
+
i0.ɵɵlistener("SelectionChange", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_mj_tree_dropdown_SelectionChange_22_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnEntityTreeSelection($event)); });
|
|
752
743
|
i0.ɵɵelementEnd();
|
|
753
|
-
i0.ɵɵelementStart(24, "button",
|
|
754
|
-
i0.ɵɵlistener("click", function
|
|
755
|
-
i0.ɵɵelement(25, "i",
|
|
744
|
+
i0.ɵɵelementStart(24, "button", 146);
|
|
745
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_24_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenNewEntityDialog()); });
|
|
746
|
+
i0.ɵɵelement(25, "i", 13);
|
|
756
747
|
i0.ɵɵtext(26, " New ");
|
|
757
748
|
i0.ɵɵelementEnd()()();
|
|
758
|
-
i0.ɵɵelementStart(27, "div",
|
|
759
|
-
i0.ɵɵlistener("click", function
|
|
760
|
-
i0.ɵɵconditionalCreate(29,
|
|
749
|
+
i0.ɵɵelementStart(27, "div", 116)(28, "button", 117);
|
|
750
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SaveAddMap()); });
|
|
751
|
+
i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_29_Template, 1, 0, "i", 42)(30, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Conditional_30_Template, 2, 0);
|
|
761
752
|
i0.ɵɵelementEnd();
|
|
762
|
-
i0.ɵɵelementStart(31, "button",
|
|
763
|
-
i0.ɵɵlistener("click", function
|
|
764
|
-
i0.ɵɵelement(32, "i",
|
|
753
|
+
i0.ɵɵelementStart(31, "button", 118);
|
|
754
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r24); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.CloseAddMapPanel()); });
|
|
755
|
+
i0.ɵɵelement(32, "i", 119);
|
|
765
756
|
i0.ɵɵelementEnd()()()();
|
|
766
757
|
} if (rf & 2) {
|
|
767
|
-
const
|
|
758
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
768
759
|
i0.ɵɵadvance(5);
|
|
769
|
-
i0.ɵɵconditional(
|
|
760
|
+
i0.ɵɵconditional(ctx_r1.IsLoadingSourceObjects ? 5 : ctx_r1.AvailableSourceObjects.length === 0 ? 6 : 7);
|
|
770
761
|
i0.ɵɵadvance(7);
|
|
771
|
-
i0.ɵɵclassProp("active",
|
|
762
|
+
i0.ɵɵclassProp("active", ctx_r1.AddMapDirection === "Pull");
|
|
772
763
|
i0.ɵɵadvance(2);
|
|
773
|
-
i0.ɵɵclassProp("active",
|
|
764
|
+
i0.ɵɵclassProp("active", ctx_r1.AddMapDirection === "Bidirectional");
|
|
774
765
|
i0.ɵɵadvance(2);
|
|
775
|
-
i0.ɵɵclassProp("active",
|
|
766
|
+
i0.ɵɵclassProp("active", ctx_r1.AddMapDirection === "Push");
|
|
776
767
|
i0.ɵɵadvance(6);
|
|
777
|
-
i0.ɵɵproperty("BranchConfig",
|
|
768
|
+
i0.ɵɵproperty("BranchConfig", ctx_r1.EntityBranchConfig)("LeafConfig", ctx_r1.EntityLeafConfig)("Value", ctx_r1.AddMapEntityIDAsKey)("SelectableTypes", "leaf")("SelectionMode", "single")("Placeholder", "Search entities by schema...")("EnableSearch", true);
|
|
778
769
|
i0.ɵɵadvance(6);
|
|
779
|
-
i0.ɵɵproperty("disabled", !
|
|
770
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanSaveAddMap || ctx_r1.IsSavingAddMap);
|
|
780
771
|
i0.ɵɵadvance();
|
|
781
|
-
i0.ɵɵconditional(
|
|
772
|
+
i0.ɵɵconditional(ctx_r1.IsSavingAddMap ? 29 : 30);
|
|
782
773
|
} }
|
|
783
|
-
function
|
|
784
|
-
i0.ɵɵelementStart(0, "div",
|
|
785
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
774
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_55_Template(rf, ctx) { if (rf & 1) {
|
|
775
|
+
i0.ɵɵelementStart(0, "div", 14);
|
|
776
|
+
i0.ɵɵelement(1, "mj-loading", 148);
|
|
786
777
|
i0.ɵɵelementEnd();
|
|
787
778
|
} }
|
|
788
|
-
function
|
|
779
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_56_Template(rf, ctx) { if (rf & 1) {
|
|
789
780
|
const _r27 = i0.ɵɵgetCurrentView();
|
|
790
|
-
i0.ɵɵelementStart(0, "div",
|
|
791
|
-
i0.ɵɵelement(1, "i",
|
|
781
|
+
i0.ɵɵelementStart(0, "div", 96);
|
|
782
|
+
i0.ɵɵelement(1, "i", 149);
|
|
792
783
|
i0.ɵɵelementStart(2, "h3");
|
|
793
784
|
i0.ɵɵtext(3, "No entity maps configured");
|
|
794
785
|
i0.ɵɵelementEnd();
|
|
795
786
|
i0.ɵɵelementStart(4, "p");
|
|
796
787
|
i0.ɵɵtext(5, "Entity maps define how external objects sync to MJ entities.");
|
|
797
788
|
i0.ɵɵelementEnd();
|
|
798
|
-
i0.ɵɵelementStart(6, "button",
|
|
799
|
-
i0.ɵɵlistener("click", function
|
|
800
|
-
i0.ɵɵelement(7, "i",
|
|
789
|
+
i0.ɵɵelementStart(6, "button", 150);
|
|
790
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_56_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r27); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ToggleAddMapPanel()); });
|
|
791
|
+
i0.ɵɵelement(7, "i", 13);
|
|
801
792
|
i0.ɵɵtext(8, " Add Your First Entity Map ");
|
|
802
793
|
i0.ɵɵelementEnd()();
|
|
803
794
|
} }
|
|
804
|
-
function
|
|
805
|
-
i0.ɵɵelementStart(0, "span",
|
|
806
|
-
i0.ɵɵelement(1, "i",
|
|
795
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
796
|
+
i0.ɵɵelementStart(0, "span", 168);
|
|
797
|
+
i0.ɵɵelement(1, "i", 172);
|
|
807
798
|
i0.ɵɵelementEnd();
|
|
808
799
|
} }
|
|
809
|
-
function
|
|
800
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
810
801
|
const _r28 = i0.ɵɵgetCurrentView();
|
|
811
|
-
i0.ɵɵelementStart(0, "div",
|
|
812
|
-
i0.ɵɵlistener("click", function
|
|
813
|
-
i0.ɵɵelementStart(1, "span",
|
|
814
|
-
i0.ɵɵlistener("click", function
|
|
815
|
-
i0.ɵɵelementStart(2, "label",
|
|
816
|
-
i0.ɵɵlistener("change", function
|
|
817
|
-
i0.ɵɵelementEnd();
|
|
818
|
-
i0.ɵɵelement(4, "span",
|
|
802
|
+
i0.ɵɵelementStart(0, "div", 160);
|
|
803
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_div_click_0_listener() { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnEntityMapClick(em_r29)); });
|
|
804
|
+
i0.ɵɵelementStart(1, "span", 161);
|
|
805
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_span_click_1_listener($event) { i0.ɵɵrestoreView(_r28); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
806
|
+
i0.ɵɵelementStart(2, "label", 162)(3, "input", 135);
|
|
807
|
+
i0.ɵɵlistener("change", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_input_change_3_listener($event) { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.OnToggleMapEnabled(em_r29, $event)); });
|
|
808
|
+
i0.ɵɵelementEnd();
|
|
809
|
+
i0.ɵɵelement(4, "span", 163);
|
|
819
810
|
i0.ɵɵelementEnd()();
|
|
820
|
-
i0.ɵɵelementStart(5, "span",
|
|
811
|
+
i0.ɵɵelementStart(5, "span", 164);
|
|
821
812
|
i0.ɵɵtext(6);
|
|
822
813
|
i0.ɵɵelementEnd();
|
|
823
|
-
i0.ɵɵelementStart(7, "span",
|
|
824
|
-
i0.ɵɵlistener("click", function
|
|
825
|
-
i0.ɵɵelementStart(8, "button",
|
|
826
|
-
i0.ɵɵlistener("click", function
|
|
814
|
+
i0.ɵɵelementStart(7, "span", 165);
|
|
815
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_span_click_7_listener($event) { i0.ɵɵrestoreView(_r28); return i0.ɵɵresetView($event.stopPropagation()); });
|
|
816
|
+
i0.ɵɵelementStart(8, "button", 166);
|
|
817
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template_button_click_8_listener() { const em_r29 = i0.ɵɵrestoreView(_r28).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.CycleSyncDirection(em_r29)); });
|
|
827
818
|
i0.ɵɵtext(9);
|
|
828
819
|
i0.ɵɵelementEnd()();
|
|
829
|
-
i0.ɵɵelementStart(10, "span",
|
|
820
|
+
i0.ɵɵelementStart(10, "span", 167);
|
|
830
821
|
i0.ɵɵtext(11);
|
|
831
822
|
i0.ɵɵelementEnd();
|
|
832
|
-
i0.ɵɵelementStart(12, "span",
|
|
833
|
-
i0.ɵɵconditionalCreate(13,
|
|
834
|
-
i0.ɵɵelementStart(14, "span",
|
|
835
|
-
i0.ɵɵelement(15, "i",
|
|
823
|
+
i0.ɵɵelementStart(12, "span", 156);
|
|
824
|
+
i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Conditional_13_Template, 2, 0, "span", 168);
|
|
825
|
+
i0.ɵɵelementStart(14, "span", 169);
|
|
826
|
+
i0.ɵɵelement(15, "i", 37);
|
|
836
827
|
i0.ɵɵelementEnd();
|
|
837
|
-
i0.ɵɵelementStart(16, "span",
|
|
838
|
-
i0.ɵɵelement(17, "i",
|
|
828
|
+
i0.ɵɵelementStart(16, "span", 170);
|
|
829
|
+
i0.ɵɵelement(17, "i", 171);
|
|
839
830
|
i0.ɵɵelementEnd()()();
|
|
840
831
|
} if (rf & 2) {
|
|
841
832
|
const em_r29 = ctx.$implicit;
|
|
842
|
-
const
|
|
833
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
843
834
|
i0.ɵɵclassProp("sync-disabled", !em_r29.SyncEnabled);
|
|
844
835
|
i0.ɵɵadvance(2);
|
|
845
836
|
i0.ɵɵproperty("title", em_r29.SyncEnabled ? "Sync enabled" : "Sync disabled");
|
|
@@ -850,10 +841,10 @@ function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_
|
|
|
850
841
|
i0.ɵɵadvance();
|
|
851
842
|
i0.ɵɵtextInterpolate1(" ", em_r29.ExternalObjectLabel ?? em_r29.ExternalObjectName, " ");
|
|
852
843
|
i0.ɵɵadvance(2);
|
|
853
|
-
i0.ɵɵclassMap(
|
|
844
|
+
i0.ɵɵclassMap(ctx_r1.DirectionBadgeClass(em_r29.SyncDirection));
|
|
854
845
|
i0.ɵɵproperty("title", "Click to change sync direction (currently: " + em_r29.SyncDirection + ")");
|
|
855
846
|
i0.ɵɵadvance();
|
|
856
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
847
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DirectionText(em_r29.SyncDirection), " ");
|
|
857
848
|
i0.ɵɵadvance();
|
|
858
849
|
i0.ɵɵproperty("title", em_r29.Entity);
|
|
859
850
|
i0.ɵɵadvance();
|
|
@@ -863,213 +854,213 @@ function ConnectionsComponent_Conditional_9_Conditional_2_Conditional_57_For_12_
|
|
|
863
854
|
i0.ɵɵadvance();
|
|
864
855
|
i0.ɵɵproperty("title", "Conflict: " + em_r29.ConflictResolution);
|
|
865
856
|
} }
|
|
866
|
-
function
|
|
867
|
-
i0.ɵɵelementStart(0, "div",
|
|
857
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_ForEmpty_13_Template(rf, ctx) { if (rf & 1) {
|
|
858
|
+
i0.ɵɵelementStart(0, "div", 159);
|
|
868
859
|
i0.ɵɵtext(1, " No entity maps match your filter. ");
|
|
869
860
|
i0.ɵɵelementEnd();
|
|
870
861
|
} }
|
|
871
|
-
function
|
|
872
|
-
i0.ɵɵelementStart(0, "div",
|
|
862
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_Template(rf, ctx) { if (rf & 1) {
|
|
863
|
+
i0.ɵɵelementStart(0, "div", 151)(1, "span", 152);
|
|
873
864
|
i0.ɵɵtext(2, "Sync");
|
|
874
865
|
i0.ɵɵelementEnd();
|
|
875
|
-
i0.ɵɵelementStart(3, "span",
|
|
866
|
+
i0.ɵɵelementStart(3, "span", 153);
|
|
876
867
|
i0.ɵɵtext(4, "External Object");
|
|
877
868
|
i0.ɵɵelementEnd();
|
|
878
|
-
i0.ɵɵelement(5, "span",
|
|
879
|
-
i0.ɵɵelementStart(6, "span",
|
|
869
|
+
i0.ɵɵelement(5, "span", 154);
|
|
870
|
+
i0.ɵɵelementStart(6, "span", 155);
|
|
880
871
|
i0.ɵɵtext(7, "MJ Entity");
|
|
881
872
|
i0.ɵɵelementEnd();
|
|
882
|
-
i0.ɵɵelementStart(8, "span",
|
|
873
|
+
i0.ɵɵelementStart(8, "span", 156);
|
|
883
874
|
i0.ɵɵtext(9, "Config");
|
|
884
875
|
i0.ɵɵelementEnd()();
|
|
885
|
-
i0.ɵɵelementStart(10, "div",
|
|
886
|
-
i0.ɵɵrepeaterCreate(11,
|
|
876
|
+
i0.ɵɵelementStart(10, "div", 157);
|
|
877
|
+
i0.ɵɵrepeaterCreate(11, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_For_12_Template, 18, 14, "div", 158, _forTrack2, false, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_ForEmpty_13_Template, 2, 0, "div", 159);
|
|
887
878
|
i0.ɵɵelementEnd();
|
|
888
879
|
} if (rf & 2) {
|
|
889
|
-
const
|
|
880
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
890
881
|
i0.ɵɵadvance(11);
|
|
891
|
-
i0.ɵɵrepeater(
|
|
882
|
+
i0.ɵɵrepeater(ctx_r1.DetailFilteredMaps);
|
|
892
883
|
} }
|
|
893
|
-
function
|
|
884
|
+
function ConnectionsComponent_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
894
885
|
const _r12 = i0.ɵɵgetCurrentView();
|
|
895
|
-
i0.ɵɵelementStart(0, "div",
|
|
896
|
-
i0.ɵɵlistener("click", function
|
|
897
|
-
i0.ɵɵelement(2, "i",
|
|
886
|
+
i0.ɵɵelementStart(0, "div", 66)(1, "button", 67);
|
|
887
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseDetailView()); });
|
|
888
|
+
i0.ɵɵelement(2, "i", 68);
|
|
898
889
|
i0.ɵɵelementEnd();
|
|
899
|
-
i0.ɵɵelementStart(3, "div",
|
|
900
|
-
i0.ɵɵelement(5, "i",
|
|
890
|
+
i0.ɵɵelementStart(3, "div", 69)(4, "div", 27);
|
|
891
|
+
i0.ɵɵelement(5, "i", 28);
|
|
901
892
|
i0.ɵɵelementEnd();
|
|
902
|
-
i0.ɵɵelementStart(6, "div",
|
|
893
|
+
i0.ɵɵelementStart(6, "div", 70)(7, "h2", 71);
|
|
903
894
|
i0.ɵɵtext(8);
|
|
904
895
|
i0.ɵɵelementEnd();
|
|
905
|
-
i0.ɵɵelementStart(9, "span",
|
|
896
|
+
i0.ɵɵelementStart(9, "span", 72);
|
|
906
897
|
i0.ɵɵtext(10);
|
|
907
|
-
i0.ɵɵelementStart(11, "span",
|
|
898
|
+
i0.ɵɵelementStart(11, "span", 34);
|
|
908
899
|
i0.ɵɵtext(12, "\u00B7");
|
|
909
900
|
i0.ɵɵelementEnd();
|
|
910
901
|
i0.ɵɵtext(13);
|
|
911
|
-
i0.ɵɵelementStart(14, "span",
|
|
902
|
+
i0.ɵɵelementStart(14, "span", 34);
|
|
912
903
|
i0.ɵɵtext(15, "\u00B7");
|
|
913
904
|
i0.ɵɵelementEnd();
|
|
914
905
|
i0.ɵɵelementStart(16, "span");
|
|
915
906
|
i0.ɵɵtext(17);
|
|
916
907
|
i0.ɵɵelementEnd()()()();
|
|
917
|
-
i0.ɵɵelementStart(18, "div",
|
|
918
|
-
i0.ɵɵlistener("click", function
|
|
919
|
-
i0.ɵɵelement(20, "i",
|
|
908
|
+
i0.ɵɵelementStart(18, "div", 73)(19, "button", 74);
|
|
909
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OpenEditPanel(ctx_r1.SelectedSummary)); });
|
|
910
|
+
i0.ɵɵelement(20, "i", 75);
|
|
920
911
|
i0.ɵɵelementEnd();
|
|
921
|
-
i0.ɵɵconditionalCreate(21,
|
|
912
|
+
i0.ɵɵconditionalCreate(21, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_21_Template, 5, 3, "div", 44);
|
|
922
913
|
i0.ɵɵelementEnd()();
|
|
923
|
-
i0.ɵɵelementStart(22, "div",
|
|
924
|
-
i0.ɵɵelement(25, "i",
|
|
914
|
+
i0.ɵɵelementStart(22, "div", 76)(23, "div", 77)(24, "div", 78);
|
|
915
|
+
i0.ɵɵelement(25, "i", 79);
|
|
925
916
|
i0.ɵɵelementStart(26, "span");
|
|
926
917
|
i0.ɵɵtext(27, "Sync Schedule");
|
|
927
918
|
i0.ɵɵelementEnd()()();
|
|
928
|
-
i0.ɵɵconditionalCreate(28,
|
|
919
|
+
i0.ɵɵconditionalCreate(28, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_28_Template, 1, 1, "mj-scheduled-job-summary", 80)(29, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_29_Template, 6, 0, "div", 81);
|
|
929
920
|
i0.ɵɵelementEnd();
|
|
930
|
-
i0.ɵɵelementStart(30, "mj-scheduled-job-slide-panel",
|
|
931
|
-
i0.ɵɵlistener("Close", function
|
|
921
|
+
i0.ɵɵelementStart(30, "mj-scheduled-job-slide-panel", 82);
|
|
922
|
+
i0.ɵɵlistener("Close", function ConnectionsComponent_Conditional_8_Conditional_2_Template_mj_scheduled_job_slide_panel_Close_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseSchedulePanel()); })("Saved", function ConnectionsComponent_Conditional_8_Conditional_2_Template_mj_scheduled_job_slide_panel_Saved_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnScheduleSaved()); })("Deleted", function ConnectionsComponent_Conditional_8_Conditional_2_Template_mj_scheduled_job_slide_panel_Deleted_30_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnScheduleDeleted()); });
|
|
932
923
|
i0.ɵɵelementEnd();
|
|
933
|
-
i0.ɵɵelementStart(31, "div",
|
|
924
|
+
i0.ɵɵelementStart(31, "div", 83)(32, "div", 84)(33, "span", 85);
|
|
934
925
|
i0.ɵɵtext(34);
|
|
935
|
-
i0.ɵɵelementStart(35, "span",
|
|
926
|
+
i0.ɵɵelementStart(35, "span", 34);
|
|
936
927
|
i0.ɵɵtext(36, "\u00B7");
|
|
937
928
|
i0.ɵɵelementEnd();
|
|
938
929
|
i0.ɵɵtext(37);
|
|
939
930
|
i0.ɵɵelementEnd()();
|
|
940
|
-
i0.ɵɵelementStart(38, "div",
|
|
941
|
-
i0.ɵɵelement(40, "i",
|
|
942
|
-
i0.ɵɵelementStart(41, "input",
|
|
943
|
-
i0.ɵɵlistener("input", function
|
|
931
|
+
i0.ɵɵelementStart(38, "div", 86)(39, "div", 87);
|
|
932
|
+
i0.ɵɵelement(40, "i", 88);
|
|
933
|
+
i0.ɵɵelementStart(41, "input", 89);
|
|
934
|
+
i0.ɵɵlistener("input", function ConnectionsComponent_Conditional_8_Conditional_2_Template_input_input_41_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnDetailSearch($event)); });
|
|
944
935
|
i0.ɵɵelementEnd()();
|
|
945
|
-
i0.ɵɵelementStart(42, "button",
|
|
946
|
-
i0.ɵɵlistener("click", function
|
|
947
|
-
i0.ɵɵelement(43, "i",
|
|
936
|
+
i0.ɵɵelementStart(42, "button", 90);
|
|
937
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_42_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleCreateTablesPanel()); });
|
|
938
|
+
i0.ɵɵelement(43, "i", 91);
|
|
948
939
|
i0.ɵɵtext(44, " Create Tables ");
|
|
949
940
|
i0.ɵɵelementEnd();
|
|
950
|
-
i0.ɵɵelementStart(45, "button",
|
|
951
|
-
i0.ɵɵlistener("click", function
|
|
952
|
-
i0.ɵɵelement(46, "i",
|
|
941
|
+
i0.ɵɵelementStart(45, "button", 92);
|
|
942
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_45_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleAutoMapPanel()); });
|
|
943
|
+
i0.ɵɵelement(46, "i", 93);
|
|
953
944
|
i0.ɵɵtext(47, " Auto-Map Schema ");
|
|
954
945
|
i0.ɵɵelementEnd();
|
|
955
|
-
i0.ɵɵelementStart(48, "button",
|
|
956
|
-
i0.ɵɵlistener("click", function
|
|
957
|
-
i0.ɵɵelement(49, "i",
|
|
946
|
+
i0.ɵɵelementStart(48, "button", 92);
|
|
947
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_8_Conditional_2_Template_button_click_48_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.ToggleAddMapPanel()); });
|
|
948
|
+
i0.ɵɵelement(49, "i", 13);
|
|
958
949
|
i0.ɵɵtext(50, " Add Map ");
|
|
959
950
|
i0.ɵɵelementEnd()()();
|
|
960
|
-
i0.ɵɵconditionalCreate(51,
|
|
961
|
-
i0.ɵɵconditionalCreate(52,
|
|
962
|
-
i0.ɵɵconditionalCreate(53,
|
|
963
|
-
i0.ɵɵconditionalCreate(54,
|
|
964
|
-
i0.ɵɵconditionalCreate(55,
|
|
951
|
+
i0.ɵɵconditionalCreate(51, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_51_Template, 5, 6, "div", 94);
|
|
952
|
+
i0.ɵɵconditionalCreate(52, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_52_Template, 31, 11, "div", 95);
|
|
953
|
+
i0.ɵɵconditionalCreate(53, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_53_Template, 16, 4, "div", 95);
|
|
954
|
+
i0.ɵɵconditionalCreate(54, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_54_Template, 33, 16, "div", 95);
|
|
955
|
+
i0.ɵɵconditionalCreate(55, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_55_Template, 2, 0, "div", 14)(56, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_56_Template, 9, 0, "div", 96)(57, ConnectionsComponent_Conditional_8_Conditional_2_Conditional_57_Template, 14, 1);
|
|
965
956
|
} if (rf & 2) {
|
|
966
|
-
const
|
|
957
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
967
958
|
i0.ɵɵadvance(4);
|
|
968
|
-
i0.ɵɵstyleProp("background-color",
|
|
959
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.GetIconBrandColor(ctx_r1.SelectedSummary.Integration.Integration));
|
|
969
960
|
i0.ɵɵadvance();
|
|
970
|
-
i0.ɵɵclassMap(
|
|
961
|
+
i0.ɵɵclassMap(ctx_r1.GetIntegrationIcon(ctx_r1.SelectedSummary.Integration.Integration));
|
|
971
962
|
i0.ɵɵadvance(3);
|
|
972
|
-
i0.ɵɵtextInterpolate(
|
|
963
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedSummary.Integration.Name);
|
|
973
964
|
i0.ɵɵadvance(2);
|
|
974
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
965
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.SelectedSummary.Integration.Company, " ");
|
|
975
966
|
i0.ɵɵadvance(3);
|
|
976
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
967
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.GetSourceTypeLabel(ctx_r1.SelectedSummary), " ");
|
|
977
968
|
i0.ɵɵadvance(3);
|
|
978
|
-
i0.ɵɵclassMap(
|
|
969
|
+
i0.ɵɵclassMap(ctx_r1.GetStatusBadgeClass(ctx_r1.SelectedSummary));
|
|
979
970
|
i0.ɵɵadvance();
|
|
980
|
-
i0.ɵɵtextInterpolate(
|
|
971
|
+
i0.ɵɵtextInterpolate(ctx_r1.GetStatusBadge(ctx_r1.SelectedSummary));
|
|
981
972
|
i0.ɵɵadvance(4);
|
|
982
|
-
i0.ɵɵconditional(
|
|
973
|
+
i0.ɵɵconditional(ctx_r1.IsConnectionActive(ctx_r1.SelectedSummary) ? 21 : -1);
|
|
983
974
|
i0.ɵɵadvance(7);
|
|
984
|
-
i0.ɵɵconditional(
|
|
975
|
+
i0.ɵɵconditional(ctx_r1.ScheduledJobID ? 28 : 29);
|
|
985
976
|
i0.ɵɵadvance(2);
|
|
986
|
-
i0.ɵɵproperty("IsOpen",
|
|
977
|
+
i0.ɵɵproperty("IsOpen", ctx_r1.ShowScheduleSlidePanel)("ScheduledJobID", ctx_r1.ScheduledJobID)("JobTypeID", ctx_r1.IntegrationSyncJobTypeID)("DefaultConfiguration", ctx_r1.ScheduleDefaultConfiguration)("HideJobType", true);
|
|
987
978
|
i0.ɵɵadvance(4);
|
|
988
|
-
i0.ɵɵtextInterpolate2(" ",
|
|
979
|
+
i0.ɵɵtextInterpolate2(" ", ctx_r1.DetailEntityMaps.length, " entity map", ctx_r1.DetailEntityMaps.length !== 1 ? "s" : "", " ");
|
|
989
980
|
i0.ɵɵadvance(3);
|
|
990
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
981
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.DetailActiveMapCount, " active ");
|
|
991
982
|
i0.ɵɵadvance(4);
|
|
992
|
-
i0.ɵɵproperty("value",
|
|
983
|
+
i0.ɵɵproperty("value", ctx_r1.DetailSearchTerm);
|
|
993
984
|
i0.ɵɵadvance();
|
|
994
|
-
i0.ɵɵclassProp("active",
|
|
985
|
+
i0.ɵɵclassProp("active", ctx_r1.ShowCreateTablesPanel);
|
|
995
986
|
i0.ɵɵadvance(3);
|
|
996
|
-
i0.ɵɵclassProp("active",
|
|
987
|
+
i0.ɵɵclassProp("active", ctx_r1.ShowAutoMapPanel);
|
|
997
988
|
i0.ɵɵadvance(3);
|
|
998
|
-
i0.ɵɵclassProp("active",
|
|
989
|
+
i0.ɵɵclassProp("active", ctx_r1.ShowAddMapPanel);
|
|
999
990
|
i0.ɵɵadvance(3);
|
|
1000
|
-
i0.ɵɵconditional(
|
|
991
|
+
i0.ɵɵconditional(ctx_r1.SyncResult ? 51 : -1);
|
|
1001
992
|
i0.ɵɵadvance();
|
|
1002
|
-
i0.ɵɵconditional(
|
|
993
|
+
i0.ɵɵconditional(ctx_r1.ShowAutoMapPanel ? 52 : -1);
|
|
1003
994
|
i0.ɵɵadvance();
|
|
1004
|
-
i0.ɵɵconditional(
|
|
995
|
+
i0.ɵɵconditional(ctx_r1.ShowCreateTablesPanel ? 53 : -1);
|
|
1005
996
|
i0.ɵɵadvance();
|
|
1006
|
-
i0.ɵɵconditional(
|
|
997
|
+
i0.ɵɵconditional(ctx_r1.ShowAddMapPanel ? 54 : -1);
|
|
1007
998
|
i0.ɵɵadvance();
|
|
1008
|
-
i0.ɵɵconditional(
|
|
999
|
+
i0.ɵɵconditional(ctx_r1.IsDetailLoading ? 55 : ctx_r1.DetailEntityMaps.length === 0 && !ctx_r1.ShowAddMapPanel ? 56 : ctx_r1.DetailEntityMaps.length > 0 ? 57 : -1);
|
|
1009
1000
|
} }
|
|
1010
|
-
function
|
|
1011
|
-
i0.ɵɵelementStart(0, "div",
|
|
1012
|
-
i0.ɵɵconditionalCreate(1,
|
|
1001
|
+
function ConnectionsComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1002
|
+
i0.ɵɵelementStart(0, "div", 7);
|
|
1003
|
+
i0.ɵɵconditionalCreate(1, ConnectionsComponent_Conditional_8_Conditional_1_Template, 1, 3, "app-visual-field-editor", 64)(2, ConnectionsComponent_Conditional_8_Conditional_2_Template, 58, 32);
|
|
1013
1004
|
i0.ɵɵelementEnd();
|
|
1014
1005
|
} if (rf & 2) {
|
|
1015
|
-
const
|
|
1006
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1016
1007
|
i0.ɵɵadvance();
|
|
1017
|
-
i0.ɵɵconditional(
|
|
1008
|
+
i0.ɵɵconditional(ctx_r1.EditorEntityMap ? 1 : 2);
|
|
1018
1009
|
} }
|
|
1019
|
-
function
|
|
1020
|
-
i0.ɵɵelement(0, "i",
|
|
1010
|
+
function ConnectionsComponent_Conditional_9_For_9_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1011
|
+
i0.ɵɵelement(0, "i", 147);
|
|
1021
1012
|
} }
|
|
1022
|
-
function
|
|
1013
|
+
function ConnectionsComponent_Conditional_9_For_9_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1023
1014
|
i0.ɵɵtext(0);
|
|
1024
1015
|
} if (rf & 2) {
|
|
1025
1016
|
const step_r31 = i0.ɵɵnextContext().$implicit;
|
|
1026
1017
|
i0.ɵɵtextInterpolate1(" ", step_r31.Number, " ");
|
|
1027
1018
|
} }
|
|
1028
|
-
function
|
|
1029
|
-
i0.ɵɵelement(0, "div",
|
|
1019
|
+
function ConnectionsComponent_Conditional_9_For_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1020
|
+
i0.ɵɵelement(0, "div", 188);
|
|
1030
1021
|
} if (rf & 2) {
|
|
1031
1022
|
const step_r31 = i0.ɵɵnextContext().$implicit;
|
|
1032
|
-
const
|
|
1033
|
-
i0.ɵɵclassProp("step-line-active",
|
|
1023
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1024
|
+
i0.ɵɵclassProp("step-line-active", ctx_r1.IsStepCompleted(step_r31.Number));
|
|
1034
1025
|
} }
|
|
1035
|
-
function
|
|
1036
|
-
i0.ɵɵelementStart(0, "div",
|
|
1037
|
-
i0.ɵɵconditionalCreate(2,
|
|
1026
|
+
function ConnectionsComponent_Conditional_9_For_9_Template(rf, ctx) { if (rf & 1) {
|
|
1027
|
+
i0.ɵɵelementStart(0, "div", 184)(1, "div", 185);
|
|
1028
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_9_For_9_Conditional_2_Template, 1, 0, "i", 147)(3, ConnectionsComponent_Conditional_9_For_9_Conditional_3_Template, 1, 1);
|
|
1038
1029
|
i0.ɵɵelementEnd();
|
|
1039
|
-
i0.ɵɵelementStart(4, "span",
|
|
1030
|
+
i0.ɵɵelementStart(4, "span", 186);
|
|
1040
1031
|
i0.ɵɵtext(5);
|
|
1041
1032
|
i0.ɵɵelementEnd()();
|
|
1042
|
-
i0.ɵɵconditionalCreate(6,
|
|
1033
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_For_9_Conditional_6_Template, 1, 2, "div", 187);
|
|
1043
1034
|
} if (rf & 2) {
|
|
1044
1035
|
const step_r31 = ctx.$implicit;
|
|
1045
|
-
const
|
|
1046
|
-
i0.ɵɵclassProp("step-active",
|
|
1036
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1037
|
+
i0.ɵɵclassProp("step-active", ctx_r1.IsStepActive(step_r31.Number))("step-completed", ctx_r1.IsStepCompleted(step_r31.Number));
|
|
1047
1038
|
i0.ɵɵadvance(2);
|
|
1048
|
-
i0.ɵɵconditional(
|
|
1039
|
+
i0.ɵɵconditional(ctx_r1.IsStepCompleted(step_r31.Number) ? 2 : 3);
|
|
1049
1040
|
i0.ɵɵadvance(3);
|
|
1050
1041
|
i0.ɵɵtextInterpolate(step_r31.Label);
|
|
1051
1042
|
i0.ɵɵadvance();
|
|
1052
|
-
i0.ɵɵconditional(step_r31.Number <
|
|
1043
|
+
i0.ɵɵconditional(step_r31.Number < ctx_r1.WizardSteps.length ? 6 : -1);
|
|
1053
1044
|
} }
|
|
1054
|
-
function
|
|
1055
|
-
i0.ɵɵelementStart(0, "div",
|
|
1056
|
-
i0.ɵɵelement(1, "i",
|
|
1045
|
+
function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1046
|
+
i0.ɵɵelementStart(0, "div", 193);
|
|
1047
|
+
i0.ɵɵelement(1, "i", 195);
|
|
1057
1048
|
i0.ɵɵelementStart(2, "p");
|
|
1058
1049
|
i0.ɵɵtext(3, "No integrations configured");
|
|
1059
1050
|
i0.ɵɵelementEnd();
|
|
1060
|
-
i0.ɵɵelementStart(4, "span",
|
|
1051
|
+
i0.ɵɵelementStart(4, "span", 196);
|
|
1061
1052
|
i0.ɵɵtext(5, "Configure integration definitions in the admin area first.");
|
|
1062
1053
|
i0.ɵɵelementEnd()();
|
|
1063
1054
|
} }
|
|
1064
|
-
function
|
|
1065
|
-
i0.ɵɵelementStart(0, "div",
|
|
1066
|
-
i0.ɵɵelement(1, "i",
|
|
1055
|
+
function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1056
|
+
i0.ɵɵelementStart(0, "div", 193);
|
|
1057
|
+
i0.ɵɵelement(1, "i", 197);
|
|
1067
1058
|
i0.ɵɵelementStart(2, "p");
|
|
1068
1059
|
i0.ɵɵtext(3, "No matching integrations");
|
|
1069
1060
|
i0.ɵɵelementEnd()();
|
|
1070
1061
|
} }
|
|
1071
|
-
function
|
|
1072
|
-
i0.ɵɵelementStart(0, "div",
|
|
1062
|
+
function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1063
|
+
i0.ɵɵelementStart(0, "div", 202);
|
|
1073
1064
|
i0.ɵɵtext(1);
|
|
1074
1065
|
i0.ɵɵelementEnd();
|
|
1075
1066
|
} if (rf & 2) {
|
|
@@ -1077,61 +1068,61 @@ function ConnectionsComponent_Conditional_10_Conditional_11_Conditional_8_For_2_
|
|
|
1077
1068
|
i0.ɵɵadvance();
|
|
1078
1069
|
i0.ɵɵtextInterpolate(def_r34.Description);
|
|
1079
1070
|
} }
|
|
1080
|
-
function
|
|
1071
|
+
function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1081
1072
|
const _r33 = i0.ɵɵgetCurrentView();
|
|
1082
|
-
i0.ɵɵelementStart(0, "div",
|
|
1083
|
-
i0.ɵɵlistener("click", function
|
|
1084
|
-
i0.ɵɵelementStart(1, "div",
|
|
1073
|
+
i0.ɵɵelementStart(0, "div", 199);
|
|
1074
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Template_div_click_0_listener() { const def_r34 = i0.ɵɵrestoreView(_r33).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectIntegration(def_r34)); });
|
|
1075
|
+
i0.ɵɵelementStart(1, "div", 200);
|
|
1085
1076
|
i0.ɵɵelement(2, "i");
|
|
1086
1077
|
i0.ɵɵelementEnd();
|
|
1087
|
-
i0.ɵɵelementStart(3, "div",
|
|
1078
|
+
i0.ɵɵelementStart(3, "div", 201);
|
|
1088
1079
|
i0.ɵɵtext(4);
|
|
1089
1080
|
i0.ɵɵelementEnd();
|
|
1090
|
-
i0.ɵɵconditionalCreate(5,
|
|
1081
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Conditional_5_Template, 2, 1, "div", 202);
|
|
1091
1082
|
i0.ɵɵelementEnd();
|
|
1092
1083
|
} if (rf & 2) {
|
|
1093
1084
|
const def_r34 = ctx.$implicit;
|
|
1094
|
-
const
|
|
1095
|
-
i0.ɵɵclassProp("picker-selected",
|
|
1085
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1086
|
+
i0.ɵɵclassProp("picker-selected", ctx_r1.IsSelectedIntegration(def_r34));
|
|
1096
1087
|
i0.ɵɵadvance();
|
|
1097
|
-
i0.ɵɵstyleProp("background-color",
|
|
1088
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.GetIconBrandColor(def_r34.Name));
|
|
1098
1089
|
i0.ɵɵadvance();
|
|
1099
|
-
i0.ɵɵclassMap(
|
|
1090
|
+
i0.ɵɵclassMap(ctx_r1.GetIntegrationIcon(def_r34.Name, def_r34.Get("Icon")));
|
|
1100
1091
|
i0.ɵɵadvance(2);
|
|
1101
1092
|
i0.ɵɵtextInterpolate(def_r34.Name);
|
|
1102
1093
|
i0.ɵɵadvance();
|
|
1103
1094
|
i0.ɵɵconditional(def_r34.Description ? 5 : -1);
|
|
1104
1095
|
} }
|
|
1105
|
-
function
|
|
1106
|
-
i0.ɵɵelementStart(0, "div",
|
|
1107
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1096
|
+
function ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1097
|
+
i0.ɵɵelementStart(0, "div", 194);
|
|
1098
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_For_2_Template, 6, 8, "div", 198, _forTrack2);
|
|
1108
1099
|
i0.ɵɵelementEnd();
|
|
1109
1100
|
} if (rf & 2) {
|
|
1110
|
-
const
|
|
1101
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1111
1102
|
i0.ɵɵadvance();
|
|
1112
|
-
i0.ɵɵrepeater(
|
|
1103
|
+
i0.ɵɵrepeater(ctx_r1.FilteredIntegrations);
|
|
1113
1104
|
} }
|
|
1114
|
-
function
|
|
1105
|
+
function ConnectionsComponent_Conditional_9_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1115
1106
|
const _r32 = i0.ɵɵgetCurrentView();
|
|
1116
|
-
i0.ɵɵelementStart(0, "div",
|
|
1107
|
+
i0.ɵɵelementStart(0, "div", 178)(1, "h3", 189);
|
|
1117
1108
|
i0.ɵɵtext(2, "What system do you want to connect?");
|
|
1118
1109
|
i0.ɵɵelementEnd();
|
|
1119
|
-
i0.ɵɵelementStart(3, "div",
|
|
1120
|
-
i0.ɵɵelement(4, "i",
|
|
1121
|
-
i0.ɵɵelementStart(5, "input",
|
|
1122
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1110
|
+
i0.ɵɵelementStart(3, "div", 190);
|
|
1111
|
+
i0.ɵɵelement(4, "i", 191);
|
|
1112
|
+
i0.ɵɵelementStart(5, "input", 192);
|
|
1113
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_11_Template_input_ngModelChange_5_listener($event) { i0.ɵɵrestoreView(_r32); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.SearchQuery, $event) || (ctx_r1.SearchQuery = $event); return i0.ɵɵresetView($event); });
|
|
1123
1114
|
i0.ɵɵelementEnd()();
|
|
1124
|
-
i0.ɵɵconditionalCreate(6,
|
|
1115
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_6_Template, 6, 0, "div", 193)(7, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_7_Template, 4, 0, "div", 193)(8, ConnectionsComponent_Conditional_9_Conditional_11_Conditional_8_Template, 3, 0, "div", 194);
|
|
1125
1116
|
i0.ɵɵelementEnd();
|
|
1126
1117
|
} if (rf & 2) {
|
|
1127
|
-
const
|
|
1118
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1128
1119
|
i0.ɵɵadvance(5);
|
|
1129
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1120
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SearchQuery);
|
|
1130
1121
|
i0.ɵɵadvance();
|
|
1131
|
-
i0.ɵɵconditional(
|
|
1122
|
+
i0.ɵɵconditional(ctx_r1.FilteredIntegrations.length === 0 && ctx_r1.AvailableIntegrations.length === 0 ? 6 : ctx_r1.FilteredIntegrations.length === 0 ? 7 : 8);
|
|
1132
1123
|
} }
|
|
1133
|
-
function
|
|
1134
|
-
i0.ɵɵelementStart(0, "option",
|
|
1124
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
1125
|
+
i0.ɵɵelementStart(0, "option", 108);
|
|
1135
1126
|
i0.ɵɵtext(1);
|
|
1136
1127
|
i0.ɵɵelementEnd();
|
|
1137
1128
|
} if (rf & 2) {
|
|
@@ -1140,73 +1131,73 @@ function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_10_For_4
|
|
|
1140
1131
|
i0.ɵɵadvance();
|
|
1141
1132
|
i0.ɵɵtextInterpolate(company_r37.Name);
|
|
1142
1133
|
} }
|
|
1143
|
-
function
|
|
1134
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
1144
1135
|
const _r36 = i0.ɵɵgetCurrentView();
|
|
1145
|
-
i0.ɵɵelementStart(0, "select",
|
|
1146
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1147
|
-
i0.ɵɵelementStart(1, "option",
|
|
1136
|
+
i0.ɵɵelementStart(0, "select", 218);
|
|
1137
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Template_select_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r1 = i0.ɵɵnextContext(3); i0.ɵɵtwoWayBindingSet(ctx_r1.SelectedCompanyID, $event) || (ctx_r1.SelectedCompanyID = $event); return i0.ɵɵresetView($event); });
|
|
1138
|
+
i0.ɵɵelementStart(1, "option", 107);
|
|
1148
1139
|
i0.ɵɵtext(2, "Select a company...");
|
|
1149
1140
|
i0.ɵɵelementEnd();
|
|
1150
|
-
i0.ɵɵrepeaterCreate(3,
|
|
1141
|
+
i0.ɵɵrepeaterCreate(3, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_For_4_Template, 2, 2, "option", 108, _forTrack2);
|
|
1151
1142
|
i0.ɵɵelementEnd();
|
|
1152
1143
|
} if (rf & 2) {
|
|
1153
|
-
const
|
|
1154
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1144
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1145
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.SelectedCompanyID);
|
|
1155
1146
|
i0.ɵɵadvance();
|
|
1156
1147
|
i0.ɵɵproperty("ngValue", null);
|
|
1157
1148
|
i0.ɵɵadvance(2);
|
|
1158
|
-
i0.ɵɵrepeater(
|
|
1149
|
+
i0.ɵɵrepeater(ctx_r1.Companies);
|
|
1159
1150
|
} }
|
|
1160
|
-
function
|
|
1161
|
-
i0.ɵɵelement(0, "input",
|
|
1151
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
1152
|
+
i0.ɵɵelement(0, "input", 208);
|
|
1162
1153
|
} if (rf & 2) {
|
|
1163
|
-
const
|
|
1164
|
-
i0.ɵɵproperty("value",
|
|
1154
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1155
|
+
i0.ɵɵproperty("value", ctx_r1.Companies[0].Name);
|
|
1165
1156
|
} }
|
|
1166
|
-
function
|
|
1167
|
-
i0.ɵɵelementStart(0, "div",
|
|
1157
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1158
|
+
i0.ɵɵelementStart(0, "div", 209);
|
|
1168
1159
|
i0.ɵɵtext(1, "No companies available. Create one in the admin area.");
|
|
1169
1160
|
i0.ɵɵelementEnd();
|
|
1170
1161
|
} }
|
|
1171
|
-
function
|
|
1162
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
1172
1163
|
const _r38 = i0.ɵɵgetCurrentView();
|
|
1173
|
-
i0.ɵɵelementStart(0, "div",
|
|
1174
|
-
i0.ɵɵelement(2, "i",
|
|
1164
|
+
i0.ɵɵelementStart(0, "div", 214)(1, "div", 219);
|
|
1165
|
+
i0.ɵɵelement(2, "i", 220);
|
|
1175
1166
|
i0.ɵɵelementStart(3, "span");
|
|
1176
1167
|
i0.ɵɵtext(4);
|
|
1177
1168
|
i0.ɵɵelementEnd()();
|
|
1178
|
-
i0.ɵɵelementStart(5, "button",
|
|
1179
|
-
i0.ɵɵlistener("click", function
|
|
1180
|
-
i0.ɵɵelement(6, "i",
|
|
1169
|
+
i0.ɵɵelementStart(5, "button", 221);
|
|
1170
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r38); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ClearCredential()); });
|
|
1171
|
+
i0.ɵɵelement(6, "i", 119);
|
|
1181
1172
|
i0.ɵɵelementEnd()();
|
|
1182
1173
|
} if (rf & 2) {
|
|
1183
|
-
const
|
|
1174
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1184
1175
|
i0.ɵɵadvance(4);
|
|
1185
|
-
i0.ɵɵtextInterpolate(
|
|
1176
|
+
i0.ɵɵtextInterpolate(ctx_r1.SelectedCredential.Name);
|
|
1186
1177
|
} }
|
|
1187
|
-
function
|
|
1178
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
1188
1179
|
const _r39 = i0.ɵɵgetCurrentView();
|
|
1189
|
-
i0.ɵɵelementStart(0, "div",
|
|
1190
|
-
i0.ɵɵlistener("click", function
|
|
1191
|
-
i0.ɵɵelement(2, "i",
|
|
1180
|
+
i0.ɵɵelementStart(0, "div", 215)(1, "button", 43);
|
|
1181
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ShowExistingCredentials()); });
|
|
1182
|
+
i0.ɵɵelement(2, "i", 220);
|
|
1192
1183
|
i0.ɵɵtext(3, " Choose Existing Credential ");
|
|
1193
1184
|
i0.ɵɵelementEnd();
|
|
1194
|
-
i0.ɵɵelementStart(4, "button",
|
|
1195
|
-
i0.ɵɵlistener("click", function
|
|
1196
|
-
i0.ɵɵelement(5, "i",
|
|
1185
|
+
i0.ɵɵelementStart(4, "button", 43);
|
|
1186
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r39); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenCredentialDialog()); });
|
|
1187
|
+
i0.ɵɵelement(5, "i", 13);
|
|
1197
1188
|
i0.ɵɵtext(6, " Create New Credential ");
|
|
1198
1189
|
i0.ɵɵelementEnd()();
|
|
1199
1190
|
} }
|
|
1200
|
-
function
|
|
1201
|
-
i0.ɵɵelementStart(0, "div",
|
|
1202
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
1191
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_24_Template(rf, ctx) { if (rf & 1) {
|
|
1192
|
+
i0.ɵɵelementStart(0, "div", 216);
|
|
1193
|
+
i0.ɵɵelement(1, "mj-loading", 222);
|
|
1203
1194
|
i0.ɵɵelementEnd();
|
|
1204
1195
|
} }
|
|
1205
|
-
function
|
|
1196
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1206
1197
|
const _r40 = i0.ɵɵgetCurrentView();
|
|
1207
|
-
i0.ɵɵelementStart(0, "div",
|
|
1208
|
-
i0.ɵɵlistener("click", function
|
|
1209
|
-
i0.ɵɵelement(1, "i",
|
|
1198
|
+
i0.ɵɵelementStart(0, "div", 224);
|
|
1199
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_Template_div_click_0_listener() { const cred_r41 = i0.ɵɵrestoreView(_r40).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.SelectExistingCredential(cred_r41)); });
|
|
1200
|
+
i0.ɵɵelement(1, "i", 220);
|
|
1210
1201
|
i0.ɵɵelementStart(2, "span");
|
|
1211
1202
|
i0.ɵɵtext(3);
|
|
1212
1203
|
i0.ɵɵelementEnd()();
|
|
@@ -1215,228 +1206,228 @@ function ConnectionsComponent_Conditional_10_Conditional_12_Conditional_25_For_2
|
|
|
1215
1206
|
i0.ɵɵadvance(3);
|
|
1216
1207
|
i0.ɵɵtextInterpolate(cred_r41.Name);
|
|
1217
1208
|
} }
|
|
1218
|
-
function
|
|
1219
|
-
i0.ɵɵelementStart(0, "div",
|
|
1220
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1209
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_Template(rf, ctx) { if (rf & 1) {
|
|
1210
|
+
i0.ɵɵelementStart(0, "div", 217);
|
|
1211
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_For_2_Template, 4, 1, "div", 223, _forTrack2);
|
|
1221
1212
|
i0.ɵɵelementEnd();
|
|
1222
1213
|
} if (rf & 2) {
|
|
1223
|
-
const
|
|
1214
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1224
1215
|
i0.ɵɵadvance();
|
|
1225
|
-
i0.ɵɵrepeater(
|
|
1216
|
+
i0.ɵɵrepeater(ctx_r1.ExistingCredentials);
|
|
1226
1217
|
} }
|
|
1227
|
-
function
|
|
1218
|
+
function ConnectionsComponent_Conditional_9_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1228
1219
|
const _r35 = i0.ɵɵgetCurrentView();
|
|
1229
|
-
i0.ɵɵelementStart(0, "div",
|
|
1220
|
+
i0.ɵɵelementStart(0, "div", 178)(1, "h3", 189);
|
|
1230
1221
|
i0.ɵɵtext(2, "Set up your connection");
|
|
1231
1222
|
i0.ɵɵelementEnd();
|
|
1232
|
-
i0.ɵɵelementStart(3, "div",
|
|
1223
|
+
i0.ɵɵelementStart(3, "div", 203)(4, "label", 204);
|
|
1233
1224
|
i0.ɵɵtext(5, "Connection Name");
|
|
1234
1225
|
i0.ɵɵelementEnd();
|
|
1235
|
-
i0.ɵɵelementStart(6, "input",
|
|
1236
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1226
|
+
i0.ɵɵelementStart(6, "input", 205);
|
|
1227
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_12_Template_input_ngModelChange_6_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ConnectionName, $event) || (ctx_r1.ConnectionName = $event); return i0.ɵɵresetView($event); });
|
|
1237
1228
|
i0.ɵɵelementEnd()();
|
|
1238
|
-
i0.ɵɵelementStart(7, "div",
|
|
1229
|
+
i0.ɵɵelementStart(7, "div", 203)(8, "label", 206);
|
|
1239
1230
|
i0.ɵɵtext(9, "Company");
|
|
1240
1231
|
i0.ɵɵelementEnd();
|
|
1241
|
-
i0.ɵɵconditionalCreate(10,
|
|
1232
|
+
i0.ɵɵconditionalCreate(10, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_10_Template, 5, 2, "select", 207)(11, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_11_Template, 1, 1, "input", 208)(12, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_12_Template, 2, 0, "div", 209);
|
|
1242
1233
|
i0.ɵɵelementEnd();
|
|
1243
|
-
i0.ɵɵelementStart(13, "div",
|
|
1234
|
+
i0.ɵɵelementStart(13, "div", 203)(14, "label", 210);
|
|
1244
1235
|
i0.ɵɵtext(15, "Description ");
|
|
1245
|
-
i0.ɵɵelementStart(16, "span",
|
|
1236
|
+
i0.ɵɵelementStart(16, "span", 211);
|
|
1246
1237
|
i0.ɵɵtext(17, "(optional)");
|
|
1247
1238
|
i0.ɵɵelementEnd()();
|
|
1248
|
-
i0.ɵɵelementStart(18, "textarea",
|
|
1249
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1239
|
+
i0.ɵɵelementStart(18, "textarea", 212);
|
|
1240
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_9_Conditional_12_Template_textarea_ngModelChange_18_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.ConnectionDescription, $event) || (ctx_r1.ConnectionDescription = $event); return i0.ɵɵresetView($event); });
|
|
1250
1241
|
i0.ɵɵelementEnd()();
|
|
1251
|
-
i0.ɵɵelementStart(19, "div",
|
|
1242
|
+
i0.ɵɵelementStart(19, "div", 203)(20, "label", 213);
|
|
1252
1243
|
i0.ɵɵtext(21, "Credential");
|
|
1253
1244
|
i0.ɵɵelementEnd();
|
|
1254
|
-
i0.ɵɵconditionalCreate(22,
|
|
1255
|
-
i0.ɵɵconditionalCreate(24,
|
|
1256
|
-
i0.ɵɵconditionalCreate(25,
|
|
1245
|
+
i0.ɵɵconditionalCreate(22, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_22_Template, 7, 1, "div", 214)(23, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_23_Template, 7, 0, "div", 215);
|
|
1246
|
+
i0.ɵɵconditionalCreate(24, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_24_Template, 2, 0, "div", 216);
|
|
1247
|
+
i0.ɵɵconditionalCreate(25, ConnectionsComponent_Conditional_9_Conditional_12_Conditional_25_Template, 3, 0, "div", 217);
|
|
1257
1248
|
i0.ɵɵelementEnd()();
|
|
1258
1249
|
} if (rf & 2) {
|
|
1259
|
-
const
|
|
1250
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1260
1251
|
i0.ɵɵadvance(6);
|
|
1261
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1252
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ConnectionName);
|
|
1262
1253
|
i0.ɵɵadvance(4);
|
|
1263
|
-
i0.ɵɵconditional(
|
|
1254
|
+
i0.ɵɵconditional(ctx_r1.NeedsCompanyPicker ? 10 : ctx_r1.Companies.length === 1 ? 11 : 12);
|
|
1264
1255
|
i0.ɵɵadvance(8);
|
|
1265
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1256
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.ConnectionDescription);
|
|
1266
1257
|
i0.ɵɵadvance(4);
|
|
1267
|
-
i0.ɵɵconditional(
|
|
1258
|
+
i0.ɵɵconditional(ctx_r1.SelectedCredential ? 22 : 23);
|
|
1268
1259
|
i0.ɵɵadvance(2);
|
|
1269
|
-
i0.ɵɵconditional(
|
|
1260
|
+
i0.ɵɵconditional(ctx_r1.IsLoadingCredentials ? 24 : -1);
|
|
1270
1261
|
i0.ɵɵadvance();
|
|
1271
|
-
i0.ɵɵconditional(!
|
|
1262
|
+
i0.ɵɵconditional(!ctx_r1.IsLoadingCredentials && ctx_r1.ExistingCredentials.length > 0 && !ctx_r1.SelectedCredential ? 25 : -1);
|
|
1272
1263
|
} }
|
|
1273
|
-
function
|
|
1264
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1274
1265
|
const _r42 = i0.ɵɵgetCurrentView();
|
|
1275
|
-
i0.ɵɵelementStart(0, "div",
|
|
1276
|
-
i0.ɵɵlistener("click", function
|
|
1277
|
-
i0.ɵɵelement(2, "i",
|
|
1266
|
+
i0.ɵɵelementStart(0, "div", 225)(1, "button", 228);
|
|
1267
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r42); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.TestNewConnection()); });
|
|
1268
|
+
i0.ɵɵelement(2, "i", 229);
|
|
1278
1269
|
i0.ɵɵtext(3, " Test Connection ");
|
|
1279
1270
|
i0.ɵɵelementEnd();
|
|
1280
|
-
i0.ɵɵelementStart(4, "p",
|
|
1271
|
+
i0.ɵɵelementStart(4, "p", 230);
|
|
1281
1272
|
i0.ɵɵtext(5, "We'll verify we can reach your system and authenticate.");
|
|
1282
1273
|
i0.ɵɵelementEnd()();
|
|
1283
1274
|
} }
|
|
1284
|
-
function
|
|
1285
|
-
i0.ɵɵelementStart(0, "div",
|
|
1286
|
-
i0.ɵɵelement(2, "i",
|
|
1275
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1276
|
+
i0.ɵɵelementStart(0, "div", 226)(1, "div", 231);
|
|
1277
|
+
i0.ɵɵelement(2, "i", 232);
|
|
1287
1278
|
i0.ɵɵelementEnd();
|
|
1288
1279
|
i0.ɵɵelementStart(3, "p");
|
|
1289
1280
|
i0.ɵɵtext(4, "Testing connection...");
|
|
1290
1281
|
i0.ɵɵelementEnd()();
|
|
1291
1282
|
} }
|
|
1292
|
-
function
|
|
1293
|
-
i0.ɵɵelement(0, "i",
|
|
1283
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
1284
|
+
i0.ɵɵelement(0, "i", 48);
|
|
1294
1285
|
} }
|
|
1295
|
-
function
|
|
1296
|
-
i0.ɵɵelement(0, "i",
|
|
1286
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
1287
|
+
i0.ɵɵelement(0, "i", 49);
|
|
1297
1288
|
} }
|
|
1298
|
-
function
|
|
1299
|
-
i0.ɵɵelementStart(0, "div",
|
|
1289
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1290
|
+
i0.ɵɵelementStart(0, "div", 236);
|
|
1300
1291
|
i0.ɵɵtext(1);
|
|
1301
1292
|
i0.ɵɵelementEnd();
|
|
1302
1293
|
} if (rf & 2) {
|
|
1303
|
-
const
|
|
1294
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1304
1295
|
i0.ɵɵadvance();
|
|
1305
|
-
i0.ɵɵtextInterpolate1(" Server version: ",
|
|
1296
|
+
i0.ɵɵtextInterpolate1(" Server version: ", ctx_r1.TestResult.ServerVersion, " ");
|
|
1306
1297
|
} }
|
|
1307
|
-
function
|
|
1298
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
1308
1299
|
const _r43 = i0.ɵɵgetCurrentView();
|
|
1309
|
-
i0.ɵɵelementStart(0, "button",
|
|
1310
|
-
i0.ɵɵlistener("click", function
|
|
1311
|
-
i0.ɵɵelement(1, "i",
|
|
1300
|
+
i0.ɵɵelementStart(0, "button", 238);
|
|
1301
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r43); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.TestNewConnection()); });
|
|
1302
|
+
i0.ɵɵelement(1, "i", 239);
|
|
1312
1303
|
i0.ɵɵtext(2, " Retry ");
|
|
1313
1304
|
i0.ɵɵelementEnd();
|
|
1314
1305
|
} }
|
|
1315
|
-
function
|
|
1316
|
-
i0.ɵɵelementStart(0, "div",
|
|
1317
|
-
i0.ɵɵconditionalCreate(2,
|
|
1306
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1307
|
+
i0.ɵɵelementStart(0, "div", 233)(1, "div", 234);
|
|
1308
|
+
i0.ɵɵconditionalCreate(2, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_2_Template, 1, 0, "i", 48)(3, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_3_Template, 1, 0, "i", 49);
|
|
1318
1309
|
i0.ɵɵelementEnd();
|
|
1319
|
-
i0.ɵɵelementStart(4, "div",
|
|
1310
|
+
i0.ɵɵelementStart(4, "div", 235);
|
|
1320
1311
|
i0.ɵɵtext(5);
|
|
1321
1312
|
i0.ɵɵelementEnd();
|
|
1322
|
-
i0.ɵɵconditionalCreate(6,
|
|
1323
|
-
i0.ɵɵconditionalCreate(7,
|
|
1313
|
+
i0.ɵɵconditionalCreate(6, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_6_Template, 2, 1, "div", 236);
|
|
1314
|
+
i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Conditional_7_Template, 3, 0, "button", 237);
|
|
1324
1315
|
i0.ɵɵelementEnd();
|
|
1325
1316
|
} if (rf & 2) {
|
|
1326
|
-
const
|
|
1327
|
-
i0.ɵɵclassProp("test-result-success",
|
|
1317
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1318
|
+
i0.ɵɵclassProp("test-result-success", ctx_r1.TestResult.Success)("test-result-failure", !ctx_r1.TestResult.Success);
|
|
1328
1319
|
i0.ɵɵadvance(2);
|
|
1329
|
-
i0.ɵɵconditional(
|
|
1320
|
+
i0.ɵɵconditional(ctx_r1.TestResult.Success ? 2 : 3);
|
|
1330
1321
|
i0.ɵɵadvance(3);
|
|
1331
|
-
i0.ɵɵtextInterpolate(
|
|
1322
|
+
i0.ɵɵtextInterpolate(ctx_r1.TestResult.Message);
|
|
1332
1323
|
i0.ɵɵadvance();
|
|
1333
|
-
i0.ɵɵconditional(
|
|
1324
|
+
i0.ɵɵconditional(ctx_r1.TestResult.Success && ctx_r1.TestResult.ServerVersion ? 6 : -1);
|
|
1334
1325
|
i0.ɵɵadvance();
|
|
1335
|
-
i0.ɵɵconditional(!
|
|
1326
|
+
i0.ɵɵconditional(!ctx_r1.TestResult.Success ? 7 : -1);
|
|
1336
1327
|
} }
|
|
1337
|
-
function
|
|
1338
|
-
i0.ɵɵelementStart(0, "div",
|
|
1328
|
+
function ConnectionsComponent_Conditional_9_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1329
|
+
i0.ɵɵelementStart(0, "div", 179)(1, "h3", 189);
|
|
1339
1330
|
i0.ɵɵtext(2, "Let's verify everything works");
|
|
1340
1331
|
i0.ɵɵelementEnd();
|
|
1341
|
-
i0.ɵɵconditionalCreate(3,
|
|
1342
|
-
i0.ɵɵconditionalCreate(4,
|
|
1343
|
-
i0.ɵɵconditionalCreate(5,
|
|
1332
|
+
i0.ɵɵconditionalCreate(3, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_3_Template, 6, 0, "div", 225);
|
|
1333
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_4_Template, 5, 0, "div", 226);
|
|
1334
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_9_Conditional_13_Conditional_5_Template, 8, 8, "div", 227);
|
|
1344
1335
|
i0.ɵɵelementEnd();
|
|
1345
1336
|
} if (rf & 2) {
|
|
1346
|
-
const
|
|
1337
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1347
1338
|
i0.ɵɵadvance(3);
|
|
1348
|
-
i0.ɵɵconditional(!
|
|
1339
|
+
i0.ɵɵconditional(!ctx_r1.TestResult && !ctx_r1.IsTesting ? 3 : -1);
|
|
1349
1340
|
i0.ɵɵadvance();
|
|
1350
|
-
i0.ɵɵconditional(
|
|
1341
|
+
i0.ɵɵconditional(ctx_r1.IsTesting ? 4 : -1);
|
|
1351
1342
|
i0.ɵɵadvance();
|
|
1352
|
-
i0.ɵɵconditional(
|
|
1343
|
+
i0.ɵɵconditional(ctx_r1.TestResult ? 5 : -1);
|
|
1353
1344
|
} }
|
|
1354
|
-
function
|
|
1345
|
+
function ConnectionsComponent_Conditional_9_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1355
1346
|
const _r44 = i0.ɵɵgetCurrentView();
|
|
1356
|
-
i0.ɵɵelementStart(0, "button",
|
|
1357
|
-
i0.ɵɵlistener("click", function
|
|
1347
|
+
i0.ɵɵelementStart(0, "button", 43);
|
|
1348
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Conditional_17_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r44); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PreviousStep()); });
|
|
1358
1349
|
i0.ɵɵtext(1, " Back ");
|
|
1359
1350
|
i0.ɵɵelementEnd();
|
|
1360
1351
|
} }
|
|
1361
|
-
function
|
|
1362
|
-
i0.ɵɵelement(0, "i",
|
|
1352
|
+
function ConnectionsComponent_Conditional_9_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
1353
|
+
i0.ɵɵelement(0, "i", 42);
|
|
1363
1354
|
i0.ɵɵtext(1, " Saving... ");
|
|
1364
1355
|
} }
|
|
1365
|
-
function
|
|
1356
|
+
function ConnectionsComponent_Conditional_9_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
1366
1357
|
i0.ɵɵtext(0);
|
|
1367
1358
|
} if (rf & 2) {
|
|
1368
|
-
const
|
|
1369
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1359
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1360
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.NextButtonLabel, " ");
|
|
1370
1361
|
} }
|
|
1371
|
-
function
|
|
1362
|
+
function ConnectionsComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1372
1363
|
const _r30 = i0.ɵɵgetCurrentView();
|
|
1373
|
-
i0.ɵɵelementStart(0, "div",
|
|
1374
|
-
i0.ɵɵlistener("click", function
|
|
1375
|
-
i0.ɵɵelement(3, "i",
|
|
1364
|
+
i0.ɵɵelementStart(0, "div", 8)(1, "div", 173)(2, "button", 174);
|
|
1365
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseWizard()); });
|
|
1366
|
+
i0.ɵɵelement(3, "i", 68);
|
|
1376
1367
|
i0.ɵɵtext(4, " Back to Integrations ");
|
|
1377
1368
|
i0.ɵɵelementEnd();
|
|
1378
|
-
i0.ɵɵelementStart(5, "h2",
|
|
1369
|
+
i0.ɵɵelementStart(5, "h2", 175);
|
|
1379
1370
|
i0.ɵɵtext(6, "New Integration");
|
|
1380
1371
|
i0.ɵɵelementEnd()();
|
|
1381
|
-
i0.ɵɵelementStart(7, "div",
|
|
1382
|
-
i0.ɵɵrepeaterCreate(8,
|
|
1383
|
-
i0.ɵɵelementEnd();
|
|
1384
|
-
i0.ɵɵelementStart(10, "div",
|
|
1385
|
-
i0.ɵɵconditionalCreate(11,
|
|
1386
|
-
i0.ɵɵconditionalCreate(12,
|
|
1387
|
-
i0.ɵɵconditionalCreate(13,
|
|
1388
|
-
i0.ɵɵelementEnd();
|
|
1389
|
-
i0.ɵɵelementStart(14, "div",
|
|
1390
|
-
i0.ɵɵelement(15, "div",
|
|
1391
|
-
i0.ɵɵelementStart(16, "div",
|
|
1392
|
-
i0.ɵɵconditionalCreate(17,
|
|
1393
|
-
i0.ɵɵelementStart(18, "button",
|
|
1394
|
-
i0.ɵɵlistener("click", function
|
|
1395
|
-
i0.ɵɵconditionalCreate(19,
|
|
1372
|
+
i0.ɵɵelementStart(7, "div", 176);
|
|
1373
|
+
i0.ɵɵrepeaterCreate(8, ConnectionsComponent_Conditional_9_For_9_Template, 7, 7, null, null, _forTrack3);
|
|
1374
|
+
i0.ɵɵelementEnd();
|
|
1375
|
+
i0.ɵɵelementStart(10, "div", 177);
|
|
1376
|
+
i0.ɵɵconditionalCreate(11, ConnectionsComponent_Conditional_9_Conditional_11_Template, 9, 2, "div", 178);
|
|
1377
|
+
i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_9_Conditional_12_Template, 26, 6, "div", 178);
|
|
1378
|
+
i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_9_Conditional_13_Template, 6, 3, "div", 179);
|
|
1379
|
+
i0.ɵɵelementEnd();
|
|
1380
|
+
i0.ɵɵelementStart(14, "div", 180);
|
|
1381
|
+
i0.ɵɵelement(15, "div", 181);
|
|
1382
|
+
i0.ɵɵelementStart(16, "div", 182);
|
|
1383
|
+
i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_9_Conditional_17_Template, 2, 0, "button", 183);
|
|
1384
|
+
i0.ɵɵelementStart(18, "button", 55);
|
|
1385
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_9_Template_button_click_18_listener() { i0.ɵɵrestoreView(_r30); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.FinishWizard()); });
|
|
1386
|
+
i0.ɵɵconditionalCreate(19, ConnectionsComponent_Conditional_9_Conditional_19_Template, 2, 0)(20, ConnectionsComponent_Conditional_9_Conditional_20_Template, 1, 1);
|
|
1396
1387
|
i0.ɵɵelementEnd()()()();
|
|
1397
1388
|
} if (rf & 2) {
|
|
1398
|
-
const
|
|
1389
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1399
1390
|
i0.ɵɵadvance(8);
|
|
1400
|
-
i0.ɵɵrepeater(
|
|
1391
|
+
i0.ɵɵrepeater(ctx_r1.WizardSteps);
|
|
1401
1392
|
i0.ɵɵadvance(3);
|
|
1402
|
-
i0.ɵɵconditional(
|
|
1393
|
+
i0.ɵɵconditional(ctx_r1.WizardStep === 1 ? 11 : -1);
|
|
1403
1394
|
i0.ɵɵadvance();
|
|
1404
|
-
i0.ɵɵconditional(
|
|
1395
|
+
i0.ɵɵconditional(ctx_r1.WizardStep === 2 ? 12 : -1);
|
|
1405
1396
|
i0.ɵɵadvance();
|
|
1406
|
-
i0.ɵɵconditional(
|
|
1397
|
+
i0.ɵɵconditional(ctx_r1.WizardStep === 3 ? 13 : -1);
|
|
1407
1398
|
i0.ɵɵadvance(4);
|
|
1408
|
-
i0.ɵɵconditional(
|
|
1399
|
+
i0.ɵɵconditional(ctx_r1.WizardStep > 1 ? 17 : -1);
|
|
1409
1400
|
i0.ɵɵadvance();
|
|
1410
|
-
i0.ɵɵproperty("disabled",
|
|
1401
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsNextDisabled || ctx_r1.IsSaving);
|
|
1411
1402
|
i0.ɵɵadvance();
|
|
1412
|
-
i0.ɵɵconditional(
|
|
1403
|
+
i0.ɵɵconditional(ctx_r1.IsSaving ? 19 : 20);
|
|
1413
1404
|
} }
|
|
1414
|
-
function
|
|
1415
|
-
i0.ɵɵelementStart(0, "div",
|
|
1416
|
-
i0.ɵɵelement(1, "mj-loading",
|
|
1405
|
+
function ConnectionsComponent_Conditional_12_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
1406
|
+
i0.ɵɵelementStart(0, "div", 244);
|
|
1407
|
+
i0.ɵɵelement(1, "mj-loading", 245);
|
|
1417
1408
|
i0.ɵɵelementEnd();
|
|
1418
1409
|
} }
|
|
1419
|
-
function
|
|
1410
|
+
function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1420
1411
|
const _r47 = i0.ɵɵgetCurrentView();
|
|
1421
|
-
i0.ɵɵelementStart(0, "div",
|
|
1422
|
-
i0.ɵɵelement(2, "i",
|
|
1412
|
+
i0.ɵɵelementStart(0, "div", 253)(1, "div", 256);
|
|
1413
|
+
i0.ɵɵelement(2, "i", 220);
|
|
1423
1414
|
i0.ɵɵelementStart(3, "span");
|
|
1424
1415
|
i0.ɵɵtext(4);
|
|
1425
1416
|
i0.ɵɵelementEnd()();
|
|
1426
|
-
i0.ɵɵelementStart(5, "button",
|
|
1427
|
-
i0.ɵɵlistener("click", function
|
|
1428
|
-
i0.ɵɵelement(6, "i",
|
|
1417
|
+
i0.ɵɵelementStart(5, "button", 257);
|
|
1418
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r47); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.ClearEditCredential()); });
|
|
1419
|
+
i0.ɵɵelement(6, "i", 119);
|
|
1429
1420
|
i0.ɵɵelementEnd()();
|
|
1430
1421
|
} if (rf & 2) {
|
|
1431
|
-
const
|
|
1422
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1432
1423
|
i0.ɵɵadvance(4);
|
|
1433
|
-
i0.ɵɵtextInterpolate(
|
|
1424
|
+
i0.ɵɵtextInterpolate(ctx_r1.EditCredential.Name);
|
|
1434
1425
|
} }
|
|
1435
|
-
function
|
|
1426
|
+
function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1436
1427
|
const _r49 = i0.ɵɵgetCurrentView();
|
|
1437
|
-
i0.ɵɵelementStart(0, "div",
|
|
1438
|
-
i0.ɵɵlistener("click", function
|
|
1439
|
-
i0.ɵɵelement(1, "i",
|
|
1428
|
+
i0.ɵɵelementStart(0, "div", 262);
|
|
1429
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_For_2_Template_div_click_0_listener() { const cred_r50 = i0.ɵɵrestoreView(_r49).$implicit; const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.SelectEditCredential(cred_r50)); });
|
|
1430
|
+
i0.ɵɵelement(1, "i", 220);
|
|
1440
1431
|
i0.ɵɵelementStart(2, "span");
|
|
1441
1432
|
i0.ɵɵtext(3);
|
|
1442
1433
|
i0.ɵɵelementEnd()();
|
|
@@ -1445,145 +1436,145 @@ function ConnectionsComponent_Conditional_13_Conditional_9_Conditional_18_Condit
|
|
|
1445
1436
|
i0.ɵɵadvance(3);
|
|
1446
1437
|
i0.ɵɵtextInterpolate(cred_r50.Name);
|
|
1447
1438
|
} }
|
|
1448
|
-
function
|
|
1449
|
-
i0.ɵɵelementStart(0, "div",
|
|
1450
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1439
|
+
function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
1440
|
+
i0.ɵɵelementStart(0, "div", 260);
|
|
1441
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_For_2_Template, 4, 1, "div", 261, _forTrack2);
|
|
1451
1442
|
i0.ɵɵelementEnd();
|
|
1452
1443
|
} if (rf & 2) {
|
|
1453
|
-
const
|
|
1444
|
+
const ctx_r1 = i0.ɵɵnextContext(4);
|
|
1454
1445
|
i0.ɵɵadvance();
|
|
1455
|
-
i0.ɵɵrepeater(
|
|
1446
|
+
i0.ɵɵrepeater(ctx_r1.EditCredentials);
|
|
1456
1447
|
} }
|
|
1457
|
-
function
|
|
1448
|
+
function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
1458
1449
|
const _r48 = i0.ɵɵgetCurrentView();
|
|
1459
|
-
i0.ɵɵelementStart(0, "div",
|
|
1460
|
-
i0.ɵɵlistener("click", function
|
|
1461
|
-
i0.ɵɵelement(2, "i",
|
|
1450
|
+
i0.ɵɵelementStart(0, "div", 258)(1, "button", 259);
|
|
1451
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r48); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OpenEditCredentialDialog()); });
|
|
1452
|
+
i0.ɵɵelement(2, "i", 13);
|
|
1462
1453
|
i0.ɵɵtext(3, " New Credential ");
|
|
1463
1454
|
i0.ɵɵelementEnd()();
|
|
1464
|
-
i0.ɵɵconditionalCreate(4,
|
|
1455
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Conditional_4_Template, 3, 0, "div", 260);
|
|
1465
1456
|
} if (rf & 2) {
|
|
1466
|
-
const
|
|
1457
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
1467
1458
|
i0.ɵɵadvance(4);
|
|
1468
|
-
i0.ɵɵconditional(
|
|
1459
|
+
i0.ɵɵconditional(ctx_r1.EditCredentials.length > 0 ? 4 : -1);
|
|
1469
1460
|
} }
|
|
1470
|
-
function
|
|
1471
|
-
i0.ɵɵelement(0, "i",
|
|
1461
|
+
function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
1462
|
+
i0.ɵɵelement(0, "i", 42);
|
|
1472
1463
|
i0.ɵɵtext(1, " Saving... ");
|
|
1473
1464
|
} }
|
|
1474
|
-
function
|
|
1465
|
+
function ConnectionsComponent_Conditional_12_Conditional_9_Conditional_32_Template(rf, ctx) { if (rf & 1) {
|
|
1475
1466
|
i0.ɵɵtext(0, " Save Changes ");
|
|
1476
1467
|
} }
|
|
1477
|
-
function
|
|
1468
|
+
function ConnectionsComponent_Conditional_12_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
1478
1469
|
const _r46 = i0.ɵɵgetCurrentView();
|
|
1479
|
-
i0.ɵɵelementStart(0, "div",
|
|
1470
|
+
i0.ɵɵelementStart(0, "div", 246)(1, "div", 247)(2, "label", 248);
|
|
1480
1471
|
i0.ɵɵtext(3, "Connection Name");
|
|
1481
1472
|
i0.ɵɵelementEnd();
|
|
1482
|
-
i0.ɵɵelementStart(4, "input",
|
|
1483
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1473
|
+
i0.ɵɵelementStart(4, "input", 249);
|
|
1474
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_12_Conditional_9_Template_input_ngModelChange_4_listener($event) { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditName, $event) || (ctx_r1.EditName = $event); return i0.ɵɵresetView($event); });
|
|
1484
1475
|
i0.ɵɵelementEnd()();
|
|
1485
|
-
i0.ɵɵelementStart(5, "div",
|
|
1476
|
+
i0.ɵɵelementStart(5, "div", 247)(6, "label", 248);
|
|
1486
1477
|
i0.ɵɵtext(7, "Status");
|
|
1487
1478
|
i0.ɵɵelementEnd();
|
|
1488
|
-
i0.ɵɵelementStart(8, "div",
|
|
1489
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1479
|
+
i0.ɵɵelementStart(8, "div", 250)(9, "label", 251)(10, "input", 136);
|
|
1480
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_12_Conditional_9_Template_input_ngModelChange_10_listener($event) { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.EditIsActive, $event) || (ctx_r1.EditIsActive = $event); return i0.ɵɵresetView($event); });
|
|
1490
1481
|
i0.ɵɵelementEnd();
|
|
1491
|
-
i0.ɵɵelement(11, "span",
|
|
1482
|
+
i0.ɵɵelement(11, "span", 163);
|
|
1492
1483
|
i0.ɵɵelementEnd();
|
|
1493
|
-
i0.ɵɵelementStart(12, "span",
|
|
1484
|
+
i0.ɵɵelementStart(12, "span", 252);
|
|
1494
1485
|
i0.ɵɵtext(13);
|
|
1495
1486
|
i0.ɵɵelementEnd()()();
|
|
1496
|
-
i0.ɵɵelementStart(14, "div",
|
|
1487
|
+
i0.ɵɵelementStart(14, "div", 247)(15, "label", 248);
|
|
1497
1488
|
i0.ɵɵtext(16, "Credential");
|
|
1498
1489
|
i0.ɵɵelementEnd();
|
|
1499
|
-
i0.ɵɵconditionalCreate(17,
|
|
1490
|
+
i0.ɵɵconditionalCreate(17, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_17_Template, 7, 1, "div", 253)(18, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_18_Template, 5, 1);
|
|
1500
1491
|
i0.ɵɵelementEnd();
|
|
1501
|
-
i0.ɵɵelementStart(19, "div",
|
|
1492
|
+
i0.ɵɵelementStart(19, "div", 247)(20, "label", 248);
|
|
1502
1493
|
i0.ɵɵtext(21, "Integration");
|
|
1503
1494
|
i0.ɵɵelementEnd();
|
|
1504
|
-
i0.ɵɵelementStart(22, "div",
|
|
1495
|
+
i0.ɵɵelementStart(22, "div", 254);
|
|
1505
1496
|
i0.ɵɵtext(23);
|
|
1506
1497
|
i0.ɵɵelementEnd()();
|
|
1507
|
-
i0.ɵɵelementStart(24, "div",
|
|
1498
|
+
i0.ɵɵelementStart(24, "div", 247)(25, "label", 248);
|
|
1508
1499
|
i0.ɵɵtext(26, "Company");
|
|
1509
1500
|
i0.ɵɵelementEnd();
|
|
1510
|
-
i0.ɵɵelementStart(27, "div",
|
|
1501
|
+
i0.ɵɵelementStart(27, "div", 254);
|
|
1511
1502
|
i0.ɵɵtext(28);
|
|
1512
1503
|
i0.ɵɵelementEnd()()();
|
|
1513
|
-
i0.ɵɵelementStart(29, "div",
|
|
1514
|
-
i0.ɵɵlistener("click", function
|
|
1515
|
-
i0.ɵɵconditionalCreate(31,
|
|
1504
|
+
i0.ɵɵelementStart(29, "div", 255)(30, "button", 55);
|
|
1505
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.SaveEditChanges()); });
|
|
1506
|
+
i0.ɵɵconditionalCreate(31, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_31_Template, 2, 0)(32, ConnectionsComponent_Conditional_12_Conditional_9_Conditional_32_Template, 1, 0);
|
|
1516
1507
|
i0.ɵɵelementEnd();
|
|
1517
|
-
i0.ɵɵelementStart(33, "button",
|
|
1518
|
-
i0.ɵɵlistener("click", function
|
|
1508
|
+
i0.ɵɵelementStart(33, "button", 43);
|
|
1509
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Conditional_9_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r46); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CloseEditPanel()); });
|
|
1519
1510
|
i0.ɵɵtext(34, " Cancel ");
|
|
1520
1511
|
i0.ɵɵelementEnd()();
|
|
1521
1512
|
} if (rf & 2) {
|
|
1522
|
-
const
|
|
1513
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1523
1514
|
i0.ɵɵadvance(4);
|
|
1524
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1515
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditName);
|
|
1525
1516
|
i0.ɵɵadvance(6);
|
|
1526
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1517
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.EditIsActive);
|
|
1527
1518
|
i0.ɵɵadvance(2);
|
|
1528
|
-
i0.ɵɵclassProp("active",
|
|
1519
|
+
i0.ɵɵclassProp("active", ctx_r1.EditIsActive);
|
|
1529
1520
|
i0.ɵɵadvance();
|
|
1530
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1521
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.EditIsActive ? "Active" : "Inactive", " ");
|
|
1531
1522
|
i0.ɵɵadvance(4);
|
|
1532
|
-
i0.ɵɵconditional(
|
|
1523
|
+
i0.ɵɵconditional(ctx_r1.EditCredential ? 17 : 18);
|
|
1533
1524
|
i0.ɵɵadvance(6);
|
|
1534
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1525
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.EditingSummary.Integration.Integration, " ");
|
|
1535
1526
|
i0.ɵɵadvance(5);
|
|
1536
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1527
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.EditingSummary.Integration.Company, " ");
|
|
1537
1528
|
i0.ɵɵadvance(2);
|
|
1538
|
-
i0.ɵɵproperty("disabled",
|
|
1529
|
+
i0.ɵɵproperty("disabled", ctx_r1.IsEditSaving || !ctx_r1.EditName.trim());
|
|
1539
1530
|
i0.ɵɵadvance();
|
|
1540
|
-
i0.ɵɵconditional(
|
|
1531
|
+
i0.ɵɵconditional(ctx_r1.IsEditSaving ? 31 : 32);
|
|
1541
1532
|
} }
|
|
1542
|
-
function
|
|
1533
|
+
function ConnectionsComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
1543
1534
|
const _r45 = i0.ɵɵgetCurrentView();
|
|
1544
|
-
i0.ɵɵelementStart(0, "div",
|
|
1535
|
+
i0.ɵɵelementStart(0, "div", 240)(1, "div", 241)(2, "div", 242);
|
|
1545
1536
|
i0.ɵɵelement(3, "i");
|
|
1546
1537
|
i0.ɵɵelementEnd();
|
|
1547
1538
|
i0.ɵɵelementStart(4, "span");
|
|
1548
1539
|
i0.ɵɵtext(5, "Configure Integration");
|
|
1549
1540
|
i0.ɵɵelementEnd()();
|
|
1550
|
-
i0.ɵɵelementStart(6, "button",
|
|
1551
|
-
i0.ɵɵlistener("click", function
|
|
1552
|
-
i0.ɵɵelement(7, "i",
|
|
1541
|
+
i0.ɵɵelementStart(6, "button", 243);
|
|
1542
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_12_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r45); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseEditPanel()); });
|
|
1543
|
+
i0.ɵɵelement(7, "i", 119);
|
|
1553
1544
|
i0.ɵɵelementEnd()();
|
|
1554
|
-
i0.ɵɵconditionalCreate(8,
|
|
1545
|
+
i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_12_Conditional_8_Template, 2, 0, "div", 244)(9, ConnectionsComponent_Conditional_12_Conditional_9_Template, 35, 10);
|
|
1555
1546
|
} if (rf & 2) {
|
|
1556
|
-
const
|
|
1547
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1557
1548
|
i0.ɵɵadvance(2);
|
|
1558
|
-
i0.ɵɵstyleProp("background-color",
|
|
1549
|
+
i0.ɵɵstyleProp("background-color", ctx_r1.GetIconBrandColor(ctx_r1.EditingSummary.Integration.Integration));
|
|
1559
1550
|
i0.ɵɵadvance();
|
|
1560
|
-
i0.ɵɵclassMap(
|
|
1551
|
+
i0.ɵɵclassMap(ctx_r1.GetIntegrationIcon(ctx_r1.EditingSummary.Integration.Integration, ctx_r1.EditingSummary.Icon));
|
|
1561
1552
|
i0.ɵɵadvance(5);
|
|
1562
|
-
i0.ɵɵconditional(
|
|
1553
|
+
i0.ɵɵconditional(ctx_r1.IsEditLoading ? 8 : 9);
|
|
1563
1554
|
} }
|
|
1564
|
-
function
|
|
1555
|
+
function ConnectionsComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
1565
1556
|
const _r51 = i0.ɵɵgetCurrentView();
|
|
1566
|
-
i0.ɵɵelementStart(0, "mj-credential-dialog",
|
|
1567
|
-
i0.ɵɵlistener("close", function
|
|
1557
|
+
i0.ɵɵelementStart(0, "mj-credential-dialog", 263);
|
|
1558
|
+
i0.ɵɵlistener("close", function ConnectionsComponent_Conditional_13_Template_mj_credential_dialog_close_0_listener($event) { i0.ɵɵrestoreView(_r51); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.EditPanelOpen ? ctx_r1.OnEditCredentialDialogClose($event) : ctx_r1.OnCredentialDialogClose($event)); });
|
|
1568
1559
|
i0.ɵɵelementEnd();
|
|
1569
1560
|
} if (rf & 2) {
|
|
1570
|
-
const
|
|
1571
|
-
i0.ɵɵproperty("Visible", true)("PreselectedTypeId",
|
|
1561
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1562
|
+
i0.ɵɵproperty("Visible", true)("PreselectedTypeId", ctx_r1.PreselectedCredentialTypeId);
|
|
1572
1563
|
} }
|
|
1573
|
-
function
|
|
1564
|
+
function ConnectionsComponent_Conditional_14_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
1574
1565
|
i0.ɵɵtext(0);
|
|
1575
1566
|
} if (rf & 2) {
|
|
1576
|
-
const
|
|
1577
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
1567
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1568
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.AddMapSourceObjectName, " ");
|
|
1578
1569
|
} }
|
|
1579
|
-
function
|
|
1580
|
-
i0.ɵɵelementStart(0, "span",
|
|
1570
|
+
function ConnectionsComponent_Conditional_14_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
1571
|
+
i0.ɵɵelementStart(0, "span", 275);
|
|
1581
1572
|
i0.ɵɵtext(1, "Select a source object in the Add Map form first");
|
|
1582
1573
|
i0.ɵɵelementEnd();
|
|
1583
1574
|
} }
|
|
1584
|
-
function
|
|
1585
|
-
i0.ɵɵelementStart(0, "div",
|
|
1586
|
-
i0.ɵɵelement(1, "i",
|
|
1575
|
+
function ConnectionsComponent_Conditional_14_Conditional_29_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
1576
|
+
i0.ɵɵelementStart(0, "div", 286);
|
|
1577
|
+
i0.ɵɵelement(1, "i", 126);
|
|
1587
1578
|
i0.ɵɵtext(2);
|
|
1588
1579
|
i0.ɵɵelementEnd();
|
|
1589
1580
|
} if (rf & 2) {
|
|
@@ -1591,45 +1582,45 @@ function ConnectionsComponent_Conditional_15_Conditional_29_For_2_Template(rf, c
|
|
|
1591
1582
|
i0.ɵɵadvance(2);
|
|
1592
1583
|
i0.ɵɵtextInterpolate1(" ", warn_r53);
|
|
1593
1584
|
} }
|
|
1594
|
-
function
|
|
1595
|
-
i0.ɵɵelementStart(0, "div",
|
|
1596
|
-
i0.ɵɵrepeaterCreate(1,
|
|
1585
|
+
function ConnectionsComponent_Conditional_14_Conditional_29_Template(rf, ctx) { if (rf & 1) {
|
|
1586
|
+
i0.ɵɵelementStart(0, "div", 280);
|
|
1587
|
+
i0.ɵɵrepeaterCreate(1, ConnectionsComponent_Conditional_14_Conditional_29_For_2_Template, 3, 1, "div", 286, i0.ɵɵrepeaterTrackByIdentity);
|
|
1597
1588
|
i0.ɵɵelementEnd();
|
|
1598
1589
|
} if (rf & 2) {
|
|
1599
|
-
const
|
|
1590
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1600
1591
|
i0.ɵɵadvance();
|
|
1601
|
-
i0.ɵɵrepeater(
|
|
1592
|
+
i0.ɵɵrepeater(ctx_r1.DDLPreviewWarnings);
|
|
1602
1593
|
} }
|
|
1603
|
-
function
|
|
1604
|
-
i0.ɵɵelement(0, "i",
|
|
1594
|
+
function ConnectionsComponent_Conditional_14_Conditional_30_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
1595
|
+
i0.ɵɵelement(0, "i", 147);
|
|
1605
1596
|
i0.ɵɵtext(1, " Copied ");
|
|
1606
1597
|
} }
|
|
1607
|
-
function
|
|
1608
|
-
i0.ɵɵelement(0, "i",
|
|
1598
|
+
function ConnectionsComponent_Conditional_14_Conditional_30_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
1599
|
+
i0.ɵɵelement(0, "i", 290);
|
|
1609
1600
|
i0.ɵɵtext(1, " Copy ");
|
|
1610
1601
|
} }
|
|
1611
|
-
function
|
|
1602
|
+
function ConnectionsComponent_Conditional_14_Conditional_30_Template(rf, ctx) { if (rf & 1) {
|
|
1612
1603
|
const _r54 = i0.ɵɵgetCurrentView();
|
|
1613
|
-
i0.ɵɵelementStart(0, "div",
|
|
1604
|
+
i0.ɵɵelementStart(0, "div", 281)(1, "div", 287)(2, "span");
|
|
1614
1605
|
i0.ɵɵtext(3, "SQL Preview");
|
|
1615
1606
|
i0.ɵɵelementEnd();
|
|
1616
|
-
i0.ɵɵelementStart(4, "button",
|
|
1617
|
-
i0.ɵɵlistener("click", function
|
|
1618
|
-
i0.ɵɵconditionalCreate(5,
|
|
1607
|
+
i0.ɵɵelementStart(4, "button", 288);
|
|
1608
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Conditional_30_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r54); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.CopyDDLToClipboard()); });
|
|
1609
|
+
i0.ɵɵconditionalCreate(5, ConnectionsComponent_Conditional_14_Conditional_30_Conditional_5_Template, 2, 0)(6, ConnectionsComponent_Conditional_14_Conditional_30_Conditional_6_Template, 2, 0);
|
|
1619
1610
|
i0.ɵɵelementEnd()();
|
|
1620
|
-
i0.ɵɵelementStart(7, "pre",
|
|
1611
|
+
i0.ɵɵelementStart(7, "pre", 289);
|
|
1621
1612
|
i0.ɵɵtext(8);
|
|
1622
1613
|
i0.ɵɵelementEnd()();
|
|
1623
1614
|
} if (rf & 2) {
|
|
1624
|
-
const
|
|
1615
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
1625
1616
|
i0.ɵɵadvance(5);
|
|
1626
|
-
i0.ɵɵconditional(
|
|
1617
|
+
i0.ɵɵconditional(ctx_r1.DDLCopied ? 5 : 6);
|
|
1627
1618
|
i0.ɵɵadvance(3);
|
|
1628
|
-
i0.ɵɵtextInterpolate(
|
|
1619
|
+
i0.ɵɵtextInterpolate(ctx_r1.DDLPreview);
|
|
1629
1620
|
} }
|
|
1630
|
-
function
|
|
1631
|
-
i0.ɵɵelementStart(0, "div",
|
|
1632
|
-
i0.ɵɵelement(2, "i",
|
|
1621
|
+
function ConnectionsComponent_Conditional_14_Conditional_31_Template(rf, ctx) { if (rf & 1) {
|
|
1622
|
+
i0.ɵɵelementStart(0, "div", 282)(1, "h4");
|
|
1623
|
+
i0.ɵɵelement(2, "i", 291);
|
|
1633
1624
|
i0.ɵɵtext(3, " Next Steps");
|
|
1634
1625
|
i0.ɵɵelementEnd();
|
|
1635
1626
|
i0.ɵɵelementStart(4, "ol")(5, "li");
|
|
@@ -1645,80 +1636,80 @@ function ConnectionsComponent_Conditional_15_Conditional_31_Template(rf, ctx) {
|
|
|
1645
1636
|
i0.ɵɵtext(12, "Refresh the page \u2014 the new entity will appear in the entity picker");
|
|
1646
1637
|
i0.ɵɵelementEnd()()();
|
|
1647
1638
|
} }
|
|
1648
|
-
function
|
|
1649
|
-
i0.ɵɵelement(0, "i",
|
|
1639
|
+
function ConnectionsComponent_Conditional_14_Conditional_34_Template(rf, ctx) { if (rf & 1) {
|
|
1640
|
+
i0.ɵɵelement(0, "i", 42);
|
|
1650
1641
|
i0.ɵɵtext(1, " Generating... ");
|
|
1651
1642
|
} }
|
|
1652
|
-
function
|
|
1653
|
-
i0.ɵɵelement(0, "i",
|
|
1643
|
+
function ConnectionsComponent_Conditional_14_Conditional_35_Template(rf, ctx) { if (rf & 1) {
|
|
1644
|
+
i0.ɵɵelement(0, "i", 292);
|
|
1654
1645
|
i0.ɵɵtext(1, " Generate SQL ");
|
|
1655
1646
|
} }
|
|
1656
|
-
function
|
|
1647
|
+
function ConnectionsComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
1657
1648
|
const _r52 = i0.ɵɵgetCurrentView();
|
|
1658
|
-
i0.ɵɵelementStart(0, "div",
|
|
1659
|
-
i0.ɵɵlistener("click", function
|
|
1649
|
+
i0.ɵɵelementStart(0, "div", 264);
|
|
1650
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseNewEntityDialog()); });
|
|
1660
1651
|
i0.ɵɵelementEnd();
|
|
1661
|
-
i0.ɵɵelementStart(1, "div",
|
|
1652
|
+
i0.ɵɵelementStart(1, "div", 265)(2, "div", 266)(3, "h3");
|
|
1662
1653
|
i0.ɵɵtext(4, "Create New Entity Table");
|
|
1663
1654
|
i0.ɵɵelementEnd();
|
|
1664
|
-
i0.ɵɵelementStart(5, "button",
|
|
1665
|
-
i0.ɵɵlistener("click", function
|
|
1666
|
-
i0.ɵɵelement(6, "i",
|
|
1655
|
+
i0.ɵɵelementStart(5, "button", 267);
|
|
1656
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseNewEntityDialog()); });
|
|
1657
|
+
i0.ɵɵelement(6, "i", 119);
|
|
1667
1658
|
i0.ɵɵelementEnd()();
|
|
1668
|
-
i0.ɵɵelementStart(7, "div",
|
|
1659
|
+
i0.ɵɵelementStart(7, "div", 268)(8, "p", 269);
|
|
1669
1660
|
i0.ɵɵtext(9, " Generate a SQL migration to create a new database table for this integration's data. After running the migration and CodeGen, the new entity will appear in the entity picker. ");
|
|
1670
1661
|
i0.ɵɵelementEnd();
|
|
1671
|
-
i0.ɵɵelementStart(10, "div",
|
|
1662
|
+
i0.ɵɵelementStart(10, "div", 270)(11, "div", 271)(12, "div", 272)(13, "label", 273);
|
|
1672
1663
|
i0.ɵɵtext(14, "Source Object");
|
|
1673
1664
|
i0.ɵɵelementEnd();
|
|
1674
|
-
i0.ɵɵelementStart(15, "div",
|
|
1675
|
-
i0.ɵɵconditionalCreate(16,
|
|
1665
|
+
i0.ɵɵelementStart(15, "div", 274);
|
|
1666
|
+
i0.ɵɵconditionalCreate(16, ConnectionsComponent_Conditional_14_Conditional_16_Template, 1, 1)(17, ConnectionsComponent_Conditional_14_Conditional_17_Template, 2, 0, "span", 275);
|
|
1676
1667
|
i0.ɵɵelementEnd()()();
|
|
1677
|
-
i0.ɵɵelementStart(18, "div",
|
|
1668
|
+
i0.ɵɵelementStart(18, "div", 271)(19, "div", 272)(20, "label", 273);
|
|
1678
1669
|
i0.ɵɵtext(21, "Schema");
|
|
1679
1670
|
i0.ɵɵelementEnd();
|
|
1680
|
-
i0.ɵɵelementStart(22, "input",
|
|
1681
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1671
|
+
i0.ɵɵelementStart(22, "input", 276);
|
|
1672
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_14_Template_input_ngModelChange_22_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntitySchema, $event) || (ctx_r1.NewEntitySchema = $event); return i0.ɵɵresetView($event); });
|
|
1682
1673
|
i0.ɵɵelementEnd()();
|
|
1683
|
-
i0.ɵɵelementStart(23, "span",
|
|
1674
|
+
i0.ɵɵelementStart(23, "span", 277);
|
|
1684
1675
|
i0.ɵɵtext(24, ".");
|
|
1685
1676
|
i0.ɵɵelementEnd();
|
|
1686
|
-
i0.ɵɵelementStart(25, "div",
|
|
1677
|
+
i0.ɵɵelementStart(25, "div", 278)(26, "label", 273);
|
|
1687
1678
|
i0.ɵɵtext(27, "Table Name");
|
|
1688
1679
|
i0.ɵɵelementEnd();
|
|
1689
|
-
i0.ɵɵelementStart(28, "input",
|
|
1690
|
-
i0.ɵɵtwoWayListener("ngModelChange", function
|
|
1680
|
+
i0.ɵɵelementStart(28, "input", 279);
|
|
1681
|
+
i0.ɵɵtwoWayListener("ngModelChange", function ConnectionsComponent_Conditional_14_Template_input_ngModelChange_28_listener($event) { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.NewEntityTable, $event) || (ctx_r1.NewEntityTable = $event); return i0.ɵɵresetView($event); });
|
|
1691
1682
|
i0.ɵɵelementEnd()()()();
|
|
1692
|
-
i0.ɵɵconditionalCreate(29,
|
|
1693
|
-
i0.ɵɵconditionalCreate(30,
|
|
1694
|
-
i0.ɵɵconditionalCreate(31,
|
|
1683
|
+
i0.ɵɵconditionalCreate(29, ConnectionsComponent_Conditional_14_Conditional_29_Template, 3, 0, "div", 280);
|
|
1684
|
+
i0.ɵɵconditionalCreate(30, ConnectionsComponent_Conditional_14_Conditional_30_Template, 9, 2, "div", 281);
|
|
1685
|
+
i0.ɵɵconditionalCreate(31, ConnectionsComponent_Conditional_14_Conditional_31_Template, 13, 0, "div", 282);
|
|
1695
1686
|
i0.ɵɵelementEnd();
|
|
1696
|
-
i0.ɵɵelementStart(32, "div",
|
|
1697
|
-
i0.ɵɵlistener("click", function
|
|
1698
|
-
i0.ɵɵconditionalCreate(34,
|
|
1687
|
+
i0.ɵɵelementStart(32, "div", 283)(33, "button", 284);
|
|
1688
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_button_click_33_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.PreviewDDL()); });
|
|
1689
|
+
i0.ɵɵconditionalCreate(34, ConnectionsComponent_Conditional_14_Conditional_34_Template, 2, 0)(35, ConnectionsComponent_Conditional_14_Conditional_35_Template, 2, 0);
|
|
1699
1690
|
i0.ɵɵelementEnd();
|
|
1700
|
-
i0.ɵɵelementStart(36, "button",
|
|
1701
|
-
i0.ɵɵlistener("click", function
|
|
1691
|
+
i0.ɵɵelementStart(36, "button", 285);
|
|
1692
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Conditional_14_Template_button_click_36_listener() { i0.ɵɵrestoreView(_r52); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.CloseNewEntityDialog()); });
|
|
1702
1693
|
i0.ɵɵtext(37, " Done ");
|
|
1703
1694
|
i0.ɵɵelementEnd()()();
|
|
1704
1695
|
} if (rf & 2) {
|
|
1705
|
-
const
|
|
1696
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
1706
1697
|
i0.ɵɵadvance(16);
|
|
1707
|
-
i0.ɵɵconditional(
|
|
1698
|
+
i0.ɵɵconditional(ctx_r1.AddMapSourceObjectName ? 16 : 17);
|
|
1708
1699
|
i0.ɵɵadvance(6);
|
|
1709
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1700
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewEntitySchema);
|
|
1710
1701
|
i0.ɵɵadvance(6);
|
|
1711
|
-
i0.ɵɵtwoWayProperty("ngModel",
|
|
1702
|
+
i0.ɵɵtwoWayProperty("ngModel", ctx_r1.NewEntityTable);
|
|
1712
1703
|
i0.ɵɵadvance();
|
|
1713
|
-
i0.ɵɵconditional(
|
|
1704
|
+
i0.ɵɵconditional(ctx_r1.DDLPreviewWarnings.length > 0 ? 29 : -1);
|
|
1714
1705
|
i0.ɵɵadvance();
|
|
1715
|
-
i0.ɵɵconditional(
|
|
1706
|
+
i0.ɵɵconditional(ctx_r1.DDLPreview ? 30 : -1);
|
|
1716
1707
|
i0.ɵɵadvance();
|
|
1717
|
-
i0.ɵɵconditional(
|
|
1708
|
+
i0.ɵɵconditional(ctx_r1.DDLPreview ? 31 : -1);
|
|
1718
1709
|
i0.ɵɵadvance(2);
|
|
1719
|
-
i0.ɵɵproperty("disabled", !
|
|
1710
|
+
i0.ɵɵproperty("disabled", !ctx_r1.CanGenerateSQL || ctx_r1.IsGeneratingDDL);
|
|
1720
1711
|
i0.ɵɵadvance();
|
|
1721
|
-
i0.ɵɵconditional(
|
|
1712
|
+
i0.ɵɵconditional(ctx_r1.IsGeneratingDDL ? 34 : 35);
|
|
1722
1713
|
} }
|
|
1723
1714
|
/** Brand color mapping for known integration names */
|
|
1724
1715
|
const BRAND_COLOR_MAP = [
|
|
@@ -3088,56 +3079,52 @@ let ConnectionsComponent = class ConnectionsComponent extends BaseResourceCompon
|
|
|
3088
3079
|
} if (rf & 2) {
|
|
3089
3080
|
let _t;
|
|
3090
3081
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.entityTreeDropdown = _t.first);
|
|
3091
|
-
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 16, vars: 19, consts: [["entityTreeDropdown", ""], ["Title", "Integrations", "Icon", "fa-solid fa-plug", "Subtitle", "Connected systems and data sources"], ["meta", ""], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Flex", "Padding"], [1, "connections-container"], [1, "detail-view"], [1, "wizard-inline"], [1, "edit-panel-backdrop", 3, "click"], [1, "edit-panel"], [3, "Visible", "PreselectedTypeId"], [3, "Count", "Label"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "loading-container"], [1, "empty-state"], [1, "card-grid"], ["text", "Loading integrations..."], [1, "fa-solid", "fa-plug", "empty-icon"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "connection-card"], [1, "connection-card", "new-connection-card", 3, "click"], [1, "new-card-content"], [1, "new-card-icon"], [1, "new-card-label"], [1, "card-clickable", 3, "click"], [1, "card-header"], [1, "icon-circle"], [1, "icon-large"], [1, "card-body"], [1, "card-name"], [1, "card-company"], [1, "card-meta"], [1, "meta-label"], [1, "meta-separator"], [1, "meta-value"], [1, "card-sync-info"], [1, "fa-solid", "fa-arrows-rotate"], [1, "card-test-result", 3, "test-success", "test-failure"], [1, "delete-confirm-overlay"], [1, "card-footer"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "sync-menu-wrapper"], ["title", "Delete integration", 1, "card-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "card-test-result"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "delete-confirm-content"], [1, "fa-solid", "fa-triangle-exclamation", "delete-warn-icon"], [1, "delete-confirm-text"], [1, "delete-confirm-actions"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "sync-dropdown"], [1, "fa-solid", "fa-chevron-down", "sync-caret"], [1, "sync-dropdown-group"], [1, "sync-dropdown-label"], [1, "sync-dropdown-item", 3, "click"], [1, "fa-solid", "fa-arrow-down-to-line"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-arrow-up-from-line"], [3, "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [3, "Close", "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [1, "detail-header"], ["title", "Back to Integrations", 1, "detail-back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "detail-header-info"], [1, "detail-header-text"], [1, "detail-title"], [1, "detail-subtitle"], [1, "detail-header-actions"], ["title", "Configure", 1, "detail-edit-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "schedule-section"], [1, "schedule-section-header"], [1, "schedule-section-title"], [1, "fa-solid", "fa-calendar-check"], [3, "ScheduledJobID"], [1, "schedule-empty"], [3, "Close", "Saved", "Deleted", "IsOpen", "ScheduledJobID", "JobTypeID", "DefaultConfiguration", "HideJobType"], [1, "detail-toolbar"], [1, "detail-toolbar-left"], [1, "detail-map-count"], [1, "detail-toolbar-right"], [1, "detail-search"], [1, "fa-solid", "fa-filter"], ["type", "text", "placeholder", "Filter entity maps...", 3, "input", "value"], ["title", "Select source objects and create entity tables", 1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-table"], [1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "sync-result-banner", 3, "sync-success", "sync-failure"], [1, "add-map-panel"], [1, "detail-empty"], [1, "sync-dropdown", "sync-dropdown-left"], [3, "EditRequested", "ScheduledJobID"], [1, "schedule-empty-text"], [1, "schedule-create-btn", 3, "click"], [1, "sync-result-banner"], [1, "auto-map-header"], [1, "add-map-row"], [1, "add-map-field"], [1, "add-map-label"], [1, "add-map-select", 3, "ngModelChange", "ngModel"], ["disabled", "", 3, "ngValue"], [3, "value"], [1, "add-map-direction-col"], [1, "add-map-direction-btns"], ["title", "Pull from source", 3, "click"], [1, "fa-solid", "fa-arrow-right"], ["title", "Bidirectional sync", 3, "click"], [1, "fa-solid", "fa-right-left"], ["title", "Push to source", 3, "click"], [1, "add-map-actions"], [1, "add-map-save-btn", 3, "click", "disabled"], [1, "add-map-cancel-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-partial", "auto-map-failure"], [1, "auto-map-result"], [1, "auto-map-result-summary"], [1, "auto-map-errors"], [1, "fa-solid", "fa-circle-info"], [1, "auto-map-error"], [1, "fa-solid", "fa-triangle-exclamation"], ["text", "Loading source objects...", "size", "small"], [1, "auto-map-result", "auto-map-success"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-failure"], [1, "create-tables-filters"], ["type", "text", "placeholder", "Search by name or label...", 1, "create-tables-search", "mj-input", 3, "ngModelChange", "ngModel"], [1, "create-tables-list"], [1, "create-tables-select-all"], [1, "create-tables-checkbox"], ["type", "checkbox", 3, "change", "checked"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "create-tables-name-hint"], [1, "create-tables-badge", "create-tables-badge-custom"], [1, "create-tables-badge", "create-tables-badge-registered"], [1, "add-map-loading"], [1, "add-map-hint"], [1, "add-map-select", 3, "ngModel"], [1, "add-map-field", "add-map-entity-field"], [1, "entity-picker-row"], [3, "SelectionChange", "BranchConfig", "LeafConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch"], ["title", "Create new entity table", 1, "new-entity-btn", 3, "click"], [1, "fa-solid", "fa-check"], ["text", "Loading entity maps..."], [1, "fa-solid", "fa-cube"], [1, "add-map-btn", "add-map-btn-lg", 3, "click"], [1, "detail-table-head"], [1, "dt-col-toggle"], [1, "dt-col-source"], [1, "dt-col-direction"], [1, "dt-col-dest"], [1, "dt-col-meta"], [1, "detail-table-body"], [1, "detail-map-row", 3, "sync-disabled"], [1, "detail-table-empty"], [1, "detail-map-row", 3, "click"], [1, "dt-col-toggle", 3, "click"], [1, "toggle-switch", 3, "title"], [1, "toggle-slider"], [1, "dt-col-source", 3, "title"], [1, "dt-col-direction", 3, "click"], [1, "direction-toggle", 3, "click", "title"], [1, "dt-col-dest", 3, "title"], ["title", "Match strategy configured", 1, "detail-config-badge"], [1, "detail-config-badge", 3, "title"], [1, "map-edit-hint"], [1, "fa-solid", "fa-chevron-right"], [1, "fa-solid", "fa-link"], [1, "wizard-header"], [1, "wizard-back-btn", 3, "click"], [1, "wizard-title"], [1, "step-indicator"], [1, "wizard-body"], [1, "step-content"], [1, "step-content", "step-content-centered"], [1, "wizard-footer"], [1, "footer-left"], [1, "footer-right"], ["mjButton", "", "variant", "outline"], [1, "step-item"], [1, "step-circle"], [1, "step-label"], [1, "step-line", 3, "step-line-active"], [1, "step-line"], [1, "step-title"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search integrations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "no-integrations"], [1, "integration-picker-grid"], [1, "fa-solid", "fa-puzzle-piece"], [1, "no-integrations-hint"], [1, "fa-solid", "fa-search"], [1, "integration-picker-card", 3, "picker-selected"], [1, "integration-picker-card", 3, "click"], [1, "picker-icon-circle"], [1, "picker-name"], [1, "picker-description"], [1, "form-group"], ["for", "connectionName", 1, "form-label"], ["id", "connectionName", "type", "text", "placeholder", "e.g. Production HubSpot", 1, "form-input", 3, "ngModelChange", "ngModel"], ["for", "companySelect", 1, "form-label"], ["id", "companySelect", 1, "form-input", 3, "ngModel"], ["type", "text", "disabled", "", 1, "form-input", 3, "value"], [1, "form-hint"], ["for", "connectionDescription", 1, "form-label"], [1, "optional-label"], ["id", "connectionDescription", "placeholder", "Notes about this connection...", "rows", "3", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "form-label"], [1, "credential-selected"], [1, "credential-actions"], [1, "credential-loading"], [1, "credential-list"], ["id", "companySelect", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "credential-info"], [1, "fa-solid", "fa-key"], [1, "credential-clear", 3, "click"], ["text", "Loading credentials...", "size", "small"], [1, "credential-list-item"], [1, "credential-list-item", 3, "click"], [1, "test-prompt"], [1, "test-running"], [1, "test-result", 3, "test-result-success", "test-result-failure"], ["mjButton", "", "variant", "primary", "size", "lg", 3, "click"], [1, "fa-solid", "fa-vial"], [1, "test-hint"], [1, "test-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "test-result"], [1, "test-result-icon"], [1, "test-result-message"], [1, "test-result-detail"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn", 3, "click"], [1, "fa-solid", "fa-rotate-right"], [1, "edit-panel-header"], [1, "edit-panel-title"], [1, "edit-icon-circle"], [1, "edit-close-btn", 3, "click"], [1, "edit-panel-loading"], ["text", "Loading...", "size", "small"], [1, "edit-panel-body"], [1, "edit-form-group"], [1, "edit-form-label"], ["type", "text", "placeholder", "Connection name...", 1, "edit-form-input", 3, "ngModelChange", "ngModel"], [1, "edit-toggle-row"], [1, "toggle-switch"], [1, "edit-toggle-label"], [1, "edit-credential-selected"], [1, "edit-readonly-field"], [1, "edit-panel-footer"], [1, "edit-credential-info"], [1, "edit-credential-clear", 3, "click"], [1, "edit-credential-actions"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "edit-credential-list"], [1, "edit-credential-item"], [1, "edit-credential-item", 3, "click"], [3, "close", "Visible", "PreselectedTypeId"], [1, "new-entity-backdrop", 3, "click"], [1, "new-entity-dialog"], [1, "new-entity-dialog-header"], [1, "new-entity-dialog-close", 3, "click"], [1, "new-entity-dialog-body"], [1, "new-entity-dialog-desc"], [1, "new-entity-dialog-form"], [1, "new-entity-dialog-row"], [1, "new-entity-dialog-field"], [1, "new-entity-dialog-label"], [1, "new-entity-dialog-value"], [1, "new-entity-dialog-hint"], ["type", "text", "placeholder", "e.g. hubspot", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "new-entity-dialog-dot"], [1, "new-entity-dialog-field", "new-entity-dialog-field-wide"], ["type", "text", "placeholder", "e.g. Contact", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "ddl-warnings"], [1, "ddl-preview-block"], [1, "new-entity-next-steps"], [1, "new-entity-dialog-footer"], [1, "new-entity-preview-btn", 3, "click", "disabled"], [1, "new-entity-dialog-done-btn", 3, "click"], [1, "ddl-warning"], [1, "ddl-preview-header"], ["title", "Copy to clipboard", 1, "ddl-copy-btn", 3, "click"], [1, "ddl-preview-code"], [1, "fa-regular", "fa-copy"], [1, "fa-solid", "fa-list-check"], [1, "fa-solid", "fa-code"]], template: function ConnectionsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
3092
|
-
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1);
|
|
3093
|
-
i0.ɵɵ
|
|
3094
|
-
i0.ɵɵelementStart(3, "div", 3)(4, "mj-refresh-button", 4);
|
|
3095
|
-
i0.ɵɵlistener("Clicked", function ConnectionsComponent_Template_mj_refresh_button_Clicked_4_listener() { return ctx.LoadData(); });
|
|
3082
|
+
} }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 15, vars: 18, consts: [["entityTreeDropdown", ""], ["Title", "Integrations", "Icon", "fa-solid fa-plug", "Subtitle", "Connected systems and data sources"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm"], [3, "Flex", "Padding"], [1, "connections-container"], [1, "detail-view"], [1, "wizard-inline"], [1, "edit-panel-backdrop", 3, "click"], [1, "edit-panel"], [3, "Visible", "PreselectedTypeId"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], [1, "fa-solid", "fa-plus"], [1, "loading-container"], [1, "empty-state"], [1, "card-grid"], ["text", "Loading integrations..."], [1, "fa-solid", "fa-plug", "empty-icon"], ["mjButton", "", "variant", "primary", 3, "click"], [1, "connection-card"], [1, "connection-card", "new-connection-card", 3, "click"], [1, "new-card-content"], [1, "new-card-icon"], [1, "new-card-label"], [1, "card-clickable", 3, "click"], [1, "card-header"], [1, "icon-circle"], [1, "icon-large"], [1, "card-body"], [1, "card-name"], [1, "card-company"], [1, "card-meta"], [1, "meta-label"], [1, "meta-separator"], [1, "meta-value"], [1, "card-sync-info"], [1, "fa-solid", "fa-arrows-rotate"], [1, "card-test-result", 3, "test-success", "test-failure"], [1, "delete-confirm-overlay"], [1, "card-footer"], ["mjButton", "", "variant", "outline", 3, "click", "disabled"], [1, "fa-solid", "fa-spinner", "fa-spin"], ["mjButton", "", "variant", "outline", 3, "click"], [1, "sync-menu-wrapper"], ["title", "Delete integration", 1, "card-delete-btn", 3, "click"], [1, "fa-solid", "fa-trash-can"], [1, "card-test-result"], [1, "fa-solid", "fa-circle-check"], [1, "fa-solid", "fa-circle-xmark"], [1, "delete-confirm-content"], [1, "fa-solid", "fa-triangle-exclamation", "delete-warn-icon"], [1, "delete-confirm-text"], [1, "delete-confirm-actions"], ["mjButton", "", "variant", "danger", 3, "click", "disabled"], ["mjButton", "", "variant", "primary", 3, "click", "disabled"], [1, "sync-dropdown"], [1, "fa-solid", "fa-chevron-down", "sync-caret"], [1, "sync-dropdown-group"], [1, "sync-dropdown-label"], [1, "sync-dropdown-item", 3, "click"], [1, "fa-solid", "fa-arrow-down-to-line"], [1, "fa-solid", "fa-rotate"], [1, "fa-solid", "fa-arrow-up-from-line"], [3, "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [3, "Close", "EntityMap", "CompanyIntegrationID", "RunViewProvider"], [1, "detail-header"], ["title", "Back to Integrations", 1, "detail-back-btn", 3, "click"], [1, "fa-solid", "fa-arrow-left"], [1, "detail-header-info"], [1, "detail-header-text"], [1, "detail-title"], [1, "detail-subtitle"], [1, "detail-header-actions"], ["title", "Configure", 1, "detail-edit-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "schedule-section"], [1, "schedule-section-header"], [1, "schedule-section-title"], [1, "fa-solid", "fa-calendar-check"], [3, "ScheduledJobID"], [1, "schedule-empty"], [3, "Close", "Saved", "Deleted", "IsOpen", "ScheduledJobID", "JobTypeID", "DefaultConfiguration", "HideJobType"], [1, "detail-toolbar"], [1, "detail-toolbar-left"], [1, "detail-map-count"], [1, "detail-toolbar-right"], [1, "detail-search"], [1, "fa-solid", "fa-filter"], ["type", "text", "placeholder", "Filter entity maps...", 3, "input", "value"], ["title", "Select source objects and create entity tables", 1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-table"], [1, "add-map-btn", 3, "click"], [1, "fa-solid", "fa-wand-magic-sparkles"], [1, "sync-result-banner", 3, "sync-success", "sync-failure"], [1, "add-map-panel"], [1, "detail-empty"], [1, "sync-dropdown", "sync-dropdown-left"], [3, "EditRequested", "ScheduledJobID"], [1, "schedule-empty-text"], [1, "schedule-create-btn", 3, "click"], [1, "sync-result-banner"], [1, "auto-map-header"], [1, "add-map-row"], [1, "add-map-field"], [1, "add-map-label"], [1, "add-map-select", 3, "ngModelChange", "ngModel"], ["disabled", "", 3, "ngValue"], [3, "value"], [1, "add-map-direction-col"], [1, "add-map-direction-btns"], ["title", "Pull from source", 3, "click"], [1, "fa-solid", "fa-arrow-right"], ["title", "Bidirectional sync", 3, "click"], [1, "fa-solid", "fa-right-left"], ["title", "Push to source", 3, "click"], [1, "add-map-actions"], [1, "add-map-save-btn", 3, "click", "disabled"], [1, "add-map-cancel-btn", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-partial", "auto-map-failure"], [1, "auto-map-result"], [1, "auto-map-result-summary"], [1, "auto-map-errors"], [1, "fa-solid", "fa-circle-info"], [1, "auto-map-error"], [1, "fa-solid", "fa-triangle-exclamation"], ["text", "Loading source objects...", "size", "small"], [1, "auto-map-result", "auto-map-success"], [1, "auto-map-result", 3, "auto-map-success", "auto-map-failure"], [1, "create-tables-filters"], ["type", "text", "placeholder", "Search by name or label...", 1, "create-tables-search", "mj-input", 3, "ngModelChange", "ngModel"], [1, "create-tables-list"], [1, "create-tables-select-all"], [1, "create-tables-checkbox"], ["type", "checkbox", 3, "change", "checked"], ["type", "checkbox", 3, "ngModelChange", "ngModel"], [1, "create-tables-name-hint"], [1, "create-tables-badge", "create-tables-badge-custom"], [1, "create-tables-badge", "create-tables-badge-registered"], [1, "add-map-loading"], [1, "add-map-hint"], [1, "add-map-select", 3, "ngModel"], [1, "add-map-field", "add-map-entity-field"], [1, "entity-picker-row"], [3, "SelectionChange", "BranchConfig", "LeafConfig", "Value", "SelectableTypes", "SelectionMode", "Placeholder", "EnableSearch"], ["title", "Create new entity table", 1, "new-entity-btn", 3, "click"], [1, "fa-solid", "fa-check"], ["text", "Loading entity maps..."], [1, "fa-solid", "fa-cube"], [1, "add-map-btn", "add-map-btn-lg", 3, "click"], [1, "detail-table-head"], [1, "dt-col-toggle"], [1, "dt-col-source"], [1, "dt-col-direction"], [1, "dt-col-dest"], [1, "dt-col-meta"], [1, "detail-table-body"], [1, "detail-map-row", 3, "sync-disabled"], [1, "detail-table-empty"], [1, "detail-map-row", 3, "click"], [1, "dt-col-toggle", 3, "click"], [1, "toggle-switch", 3, "title"], [1, "toggle-slider"], [1, "dt-col-source", 3, "title"], [1, "dt-col-direction", 3, "click"], [1, "direction-toggle", 3, "click", "title"], [1, "dt-col-dest", 3, "title"], ["title", "Match strategy configured", 1, "detail-config-badge"], [1, "detail-config-badge", 3, "title"], [1, "map-edit-hint"], [1, "fa-solid", "fa-chevron-right"], [1, "fa-solid", "fa-link"], [1, "wizard-header"], [1, "wizard-back-btn", 3, "click"], [1, "wizard-title"], [1, "step-indicator"], [1, "wizard-body"], [1, "step-content"], [1, "step-content", "step-content-centered"], [1, "wizard-footer"], [1, "footer-left"], [1, "footer-right"], ["mjButton", "", "variant", "outline"], [1, "step-item"], [1, "step-circle"], [1, "step-label"], [1, "step-line", 3, "step-line-active"], [1, "step-line"], [1, "step-title"], [1, "search-bar"], [1, "fa-solid", "fa-search", "search-icon"], ["type", "text", "placeholder", "Search integrations...", 1, "search-input", 3, "ngModelChange", "ngModel"], [1, "no-integrations"], [1, "integration-picker-grid"], [1, "fa-solid", "fa-puzzle-piece"], [1, "no-integrations-hint"], [1, "fa-solid", "fa-search"], [1, "integration-picker-card", 3, "picker-selected"], [1, "integration-picker-card", 3, "click"], [1, "picker-icon-circle"], [1, "picker-name"], [1, "picker-description"], [1, "form-group"], ["for", "connectionName", 1, "form-label"], ["id", "connectionName", "type", "text", "placeholder", "e.g. Production HubSpot", 1, "form-input", 3, "ngModelChange", "ngModel"], ["for", "companySelect", 1, "form-label"], ["id", "companySelect", 1, "form-input", 3, "ngModel"], ["type", "text", "disabled", "", 1, "form-input", 3, "value"], [1, "form-hint"], ["for", "connectionDescription", 1, "form-label"], [1, "optional-label"], ["id", "connectionDescription", "placeholder", "Notes about this connection...", "rows", "3", 1, "form-input", "form-textarea", 3, "ngModelChange", "ngModel"], [1, "form-label"], [1, "credential-selected"], [1, "credential-actions"], [1, "credential-loading"], [1, "credential-list"], ["id", "companySelect", 1, "form-input", 3, "ngModelChange", "ngModel"], [1, "credential-info"], [1, "fa-solid", "fa-key"], [1, "credential-clear", 3, "click"], ["text", "Loading credentials...", "size", "small"], [1, "credential-list-item"], [1, "credential-list-item", 3, "click"], [1, "test-prompt"], [1, "test-running"], [1, "test-result", 3, "test-result-success", "test-result-failure"], ["mjButton", "", "variant", "primary", "size", "lg", 3, "click"], [1, "fa-solid", "fa-vial"], [1, "test-hint"], [1, "test-spinner"], [1, "fa-solid", "fa-spinner", "fa-spin", "fa-3x"], [1, "test-result"], [1, "test-result-icon"], [1, "test-result-message"], [1, "test-result-detail"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn"], ["mjButton", "", "variant", "outline", 1, "test-retry-btn", 3, "click"], [1, "fa-solid", "fa-rotate-right"], [1, "edit-panel-header"], [1, "edit-panel-title"], [1, "edit-icon-circle"], [1, "edit-close-btn", 3, "click"], [1, "edit-panel-loading"], ["text", "Loading...", "size", "small"], [1, "edit-panel-body"], [1, "edit-form-group"], [1, "edit-form-label"], ["type", "text", "placeholder", "Connection name...", 1, "edit-form-input", 3, "ngModelChange", "ngModel"], [1, "edit-toggle-row"], [1, "toggle-switch"], [1, "edit-toggle-label"], [1, "edit-credential-selected"], [1, "edit-readonly-field"], [1, "edit-panel-footer"], [1, "edit-credential-info"], [1, "edit-credential-clear", 3, "click"], [1, "edit-credential-actions"], ["mjButton", "", "variant", "outline", "size", "sm", 3, "click"], [1, "edit-credential-list"], [1, "edit-credential-item"], [1, "edit-credential-item", 3, "click"], [3, "close", "Visible", "PreselectedTypeId"], [1, "new-entity-backdrop", 3, "click"], [1, "new-entity-dialog"], [1, "new-entity-dialog-header"], [1, "new-entity-dialog-close", 3, "click"], [1, "new-entity-dialog-body"], [1, "new-entity-dialog-desc"], [1, "new-entity-dialog-form"], [1, "new-entity-dialog-row"], [1, "new-entity-dialog-field"], [1, "new-entity-dialog-label"], [1, "new-entity-dialog-value"], [1, "new-entity-dialog-hint"], ["type", "text", "placeholder", "e.g. hubspot", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "new-entity-dialog-dot"], [1, "new-entity-dialog-field", "new-entity-dialog-field-wide"], ["type", "text", "placeholder", "e.g. Contact", 1, "new-entity-dialog-input", 3, "ngModelChange", "ngModel"], [1, "ddl-warnings"], [1, "ddl-preview-block"], [1, "new-entity-next-steps"], [1, "new-entity-dialog-footer"], [1, "new-entity-preview-btn", 3, "click", "disabled"], [1, "new-entity-dialog-done-btn", 3, "click"], [1, "ddl-warning"], [1, "ddl-preview-header"], ["title", "Copy to clipboard", 1, "ddl-copy-btn", 3, "click"], [1, "ddl-preview-code"], [1, "fa-regular", "fa-copy"], [1, "fa-solid", "fa-list-check"], [1, "fa-solid", "fa-code"]], template: function ConnectionsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
3083
|
+
i0.ɵɵelementStart(0, "mj-page-layout")(1, "mj-page-header", 1)(2, "div", 2)(3, "mj-refresh-button", 3);
|
|
3084
|
+
i0.ɵɵlistener("Clicked", function ConnectionsComponent_Template_mj_refresh_button_Clicked_3_listener() { return ctx.LoadData(); });
|
|
3096
3085
|
i0.ɵɵelementEnd();
|
|
3097
|
-
i0.ɵɵconditionalCreate(
|
|
3086
|
+
i0.ɵɵconditionalCreate(4, ConnectionsComponent_Conditional_4_Template, 3, 0, "button", 4);
|
|
3098
3087
|
i0.ɵɵelementEnd()();
|
|
3099
|
-
i0.ɵɵelementStart(
|
|
3100
|
-
i0.ɵɵconditionalCreate(
|
|
3101
|
-
i0.ɵɵconditionalCreate(
|
|
3102
|
-
i0.ɵɵconditionalCreate(
|
|
3088
|
+
i0.ɵɵelementStart(5, "mj-page-body", 5)(6, "div", 6);
|
|
3089
|
+
i0.ɵɵconditionalCreate(7, ConnectionsComponent_Conditional_7_Template, 3, 3);
|
|
3090
|
+
i0.ɵɵconditionalCreate(8, ConnectionsComponent_Conditional_8_Template, 3, 1, "div", 7);
|
|
3091
|
+
i0.ɵɵconditionalCreate(9, ConnectionsComponent_Conditional_9_Template, 21, 6, "div", 8);
|
|
3103
3092
|
i0.ɵɵelementEnd();
|
|
3104
|
-
i0.ɵɵelementStart(
|
|
3105
|
-
i0.ɵɵlistener("click", function
|
|
3093
|
+
i0.ɵɵelementStart(10, "div", 9);
|
|
3094
|
+
i0.ɵɵlistener("click", function ConnectionsComponent_Template_div_click_10_listener() { return ctx.CloseEditPanel(); });
|
|
3106
3095
|
i0.ɵɵelementEnd();
|
|
3107
|
-
i0.ɵɵelementStart(
|
|
3108
|
-
i0.ɵɵconditionalCreate(
|
|
3096
|
+
i0.ɵɵelementStart(11, "div", 10);
|
|
3097
|
+
i0.ɵɵconditionalCreate(12, ConnectionsComponent_Conditional_12_Template, 10, 5);
|
|
3109
3098
|
i0.ɵɵelementEnd();
|
|
3110
|
-
i0.ɵɵconditionalCreate(
|
|
3111
|
-
i0.ɵɵconditionalCreate(
|
|
3099
|
+
i0.ɵɵconditionalCreate(13, ConnectionsComponent_Conditional_13_Template, 1, 2, "mj-credential-dialog", 11);
|
|
3100
|
+
i0.ɵɵconditionalCreate(14, ConnectionsComponent_Conditional_14_Template, 38, 8);
|
|
3112
3101
|
i0.ɵɵelementEnd()();
|
|
3113
3102
|
} if (rf & 2) {
|
|
3114
|
-
i0.ɵɵadvance(
|
|
3115
|
-
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary && ctx.Connections.length > 0 ? 2 : -1);
|
|
3116
|
-
i0.ɵɵadvance(2);
|
|
3103
|
+
i0.ɵɵadvance(3);
|
|
3117
3104
|
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
3118
3105
|
i0.ɵɵadvance();
|
|
3119
|
-
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary ?
|
|
3106
|
+
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary ? 4 : -1);
|
|
3120
3107
|
i0.ɵɵadvance();
|
|
3121
3108
|
i0.ɵɵproperty("Flex", true)("Padding", false);
|
|
3122
3109
|
i0.ɵɵadvance();
|
|
3123
3110
|
i0.ɵɵclassProp("detail-active", !!ctx.SelectedSummary)("editor-active", !!ctx.EditorEntityMap);
|
|
3124
3111
|
i0.ɵɵadvance();
|
|
3125
|
-
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary ?
|
|
3112
|
+
i0.ɵɵconditional(!ctx.WizardOpen && !ctx.SelectedSummary ? 7 : -1);
|
|
3126
3113
|
i0.ɵɵadvance();
|
|
3127
|
-
i0.ɵɵconditional(!ctx.WizardOpen && ctx.SelectedSummary ?
|
|
3114
|
+
i0.ɵɵconditional(!ctx.WizardOpen && ctx.SelectedSummary ? 8 : -1);
|
|
3128
3115
|
i0.ɵɵadvance();
|
|
3129
|
-
i0.ɵɵconditional(ctx.WizardOpen ?
|
|
3116
|
+
i0.ɵɵconditional(ctx.WizardOpen ? 9 : -1);
|
|
3130
3117
|
i0.ɵɵadvance();
|
|
3131
3118
|
i0.ɵɵclassProp("open", ctx.EditPanelOpen);
|
|
3132
3119
|
i0.ɵɵadvance();
|
|
3133
3120
|
i0.ɵɵclassProp("open", ctx.EditPanelOpen);
|
|
3134
3121
|
i0.ɵɵadvance();
|
|
3135
|
-
i0.ɵɵconditional(ctx.EditingSummary ?
|
|
3122
|
+
i0.ɵɵconditional(ctx.EditingSummary ? 12 : -1);
|
|
3136
3123
|
i0.ɵɵadvance();
|
|
3137
|
-
i0.ɵɵconditional(ctx.ShowCredentialDialog ?
|
|
3124
|
+
i0.ɵɵconditional(ctx.ShowCredentialDialog ? 13 : -1);
|
|
3138
3125
|
i0.ɵɵadvance();
|
|
3139
|
-
i0.ɵɵconditional(ctx.ShowCreateEntity ?
|
|
3140
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJPageLayoutComponent, i2.MJPageHeaderComponent, i2.MJPageBodyComponent, i2.MJStatBadgeComponent, i2.MJRefreshButtonComponent, i3.LoadingComponent, i4.CredentialDialogComponent, i5.TreeDropdownComponent, i6.ScheduledJobSummaryComponent, i6.ScheduledJobSlidePanelComponent, i7.VisualFieldEditorComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n.connections-container[_ngcontent-%COMP%] {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n\n\n\n.connections-container.detail-active[_ngcontent-%COMP%], \n.connections-container.editor-active[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n\n\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n\n\n\n\n\n.card-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n\n\n\n\n\n.connection-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large[_ngcontent-%COMP%] {\n font-size: 22px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n\n\n.card-body[_ngcontent-%COMP%] {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator[_ngcontent-%COMP%] {\n margin: 0 6px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.card-sync-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.card-test-result[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.sync-menu-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left[_ngcontent-%COMP%] {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n\n\n.card-delete-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n}\n\n\n\n\n\n\n.new-connection-card[_ngcontent-%COMP%] {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-icon[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n.wizard-inline[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n\n\n.wizard-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.step-line[_ngcontent-%COMP%] {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n\n\n\n\n\n.wizard-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content[_ngcontent-%COMP%] {\n min-height: 300px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] .step-title[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n\n\n.search-bar[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.no-integrations[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.integration-picker-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card[_ngcontent-%COMP%] {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n\n\n\n\n\n.form-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%]:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n\n\n.credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.credential-clear[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.credential-loading[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.credential-list[_ngcontent-%COMP%] {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.test-prompt[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n\n\n.test-result[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n animation: _ngcontent-%COMP%_scaleIn 0.3s ease-out;\n}\n\n.test-result-success[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.test-result-failure[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n@keyframes _ngcontent-%COMP%_scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn[_ngcontent-%COMP%] {\n margin-top: 4px;\n}\n\n\n\n.toggle-switch[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider[_ngcontent-%COMP%] {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%]::before {\n transform: translateX(20px);\n}\n\n\n\n\n\n\n.wizard-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n\n\n\n\n\n@media (max-width: 768px) {\n .connections-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .card-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line[_ngcontent-%COMP%] {\n width: 24px;\n }\n\n .credential-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\n\n.delete-confirm-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: _ngcontent-%COMP%_fadeIn 150ms ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon[_ngcontent-%COMP%] {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n\n\n\n\n\n.edit-panel-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.edit-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(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input[_ngcontent-%COMP%] {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.card-clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n\n\n\n\n\n.detail-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n\n\n.schedule-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.detail-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.add-map-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n\n\n.add-map-panel[_ngcontent-%COMP%] {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.add-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select[_ngcontent-%COMP%] {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n\n\n.add-map-entity-field[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 280px;\n}\n\n\n\n.entity-picker-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row[_ngcontent-%COMP%] mj-tree-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n\n.sync-result-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n\n\n\n\n\n.auto-map-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n\n\n\n\n\n.new-entity-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease;\n}\n\n.new-entity-dialog[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-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(--mj-border-default);\n}\n\n.new-entity-dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.new-entity-dialog-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.new-entity-next-steps[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n\n\n.ddl-copy-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.ddl-warnings[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n.ddl-preview-block[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.detail-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n\n\n.detail-table-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n\n\n.dt-col-toggle[_ngcontent-%COMP%] {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n\n\n.direction-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n\n\nbutton.direction-toggle[_ngcontent-%COMP%] {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n\n\n.create-tables-list[_ngcontent-%COMP%] {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search[_ngcontent-%COMP%] {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin: 0;\n}\n.create-tables-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n.detail-config-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n\n\n.detail-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.detail-edit-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover .map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.ve-header-title-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n\n.discovered-objects-section[_ngcontent-%COMP%] {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading[_ngcontent-%COMP%], \n.discovered-empty[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.discovered-objects-list[_ngcontent-%COMP%] {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}"] });
|
|
3126
|
+
i0.ɵɵconditional(ctx.ShowCreateEntity ? 14 : -1);
|
|
3127
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i1.DefaultValueAccessor, i1.CheckboxControlValueAccessor, i1.SelectControlValueAccessor, i1.NgControlStatus, i1.NgModel, i2.MJButtonDirective, i2.MJPageLayoutComponent, i2.MJPageHeaderComponent, i2.MJPageBodyComponent, i2.MJRefreshButtonComponent, i3.LoadingComponent, i4.CredentialDialogComponent, i5.TreeDropdownComponent, i6.ScheduledJobSummaryComponent, i6.ScheduledJobSlidePanelComponent, i7.VisualFieldEditorComponent], styles: ["\n\n\n\n\n[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n\n\n\n.connections-container[_ngcontent-%COMP%] {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n\n\n\n.connections-container.detail-active[_ngcontent-%COMP%], \n.connections-container.editor-active[_ngcontent-%COMP%] {\n overflow: hidden;\n}\n\n\n\n\n\n\n.loading-container[_ngcontent-%COMP%] {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n\n\n\n\n\n.card-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n\n\n\n\n\n.connection-card[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card[_ngcontent-%COMP%]:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n\n\n.card-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle[_ngcontent-%COMP%] {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large[_ngcontent-%COMP%] {\n font-size: 22px;\n}\n\n\n\n.status-badge[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n\n\n.card-body[_ngcontent-%COMP%] {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator[_ngcontent-%COMP%] {\n margin: 0 6px;\n}\n\n.meta-label[_ngcontent-%COMP%] {\n font-weight: 500;\n}\n\n.card-sync-info[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n\n\n.card-test-result[_ngcontent-%COMP%] {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result[_ngcontent-%COMP%] span[_ngcontent-%COMP%] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n\n\n.card-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.sync-menu-wrapper[_ngcontent-%COMP%] {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret[_ngcontent-%COMP%] {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left[_ngcontent-%COMP%] {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%] {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n\n\n.card-delete-btn[_ngcontent-%COMP%] {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown[_ngcontent-%COMP%] {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n}\n\n\n\n\n\n\n.new-connection-card[_ngcontent-%COMP%] {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon[_ngcontent-%COMP%] {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-icon[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card[_ngcontent-%COMP%]:hover .new-card-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n\n\n\n.wizard-inline[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n\n\n.wizard-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n\n\n\n\n\n.step-indicator[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed[_ngcontent-%COMP%] .step-circle[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed[_ngcontent-%COMP%] .step-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.step-line[_ngcontent-%COMP%] {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active[_ngcontent-%COMP%] {\n background: var(--mj-status-success);\n}\n\n\n\n\n\n\n.wizard-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content[_ngcontent-%COMP%] {\n min-height: 300px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered[_ngcontent-%COMP%] .step-title[_ngcontent-%COMP%] {\n margin-bottom: 32px;\n}\n\n\n\n.search-bar[_ngcontent-%COMP%] {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.no-integrations[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n\n\n.integration-picker-grid[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card[_ngcontent-%COMP%] {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected[_ngcontent-%COMP%] {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n\n\n\n\n\n.form-group[_ngcontent-%COMP%] {\n margin-bottom: 20px;\n}\n\n.form-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input[_ngcontent-%COMP%]:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea[_ngcontent-%COMP%] {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n\n\n.credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.credential-clear[_ngcontent-%COMP%] {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear[_ngcontent-%COMP%]:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n font-size: 13px;\n}\n\n.credential-loading[_ngcontent-%COMP%] {\n padding: 16px 0;\n}\n\n.credential-list[_ngcontent-%COMP%] {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.credential-list-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n}\n\n\n\n\n\n\n.test-prompt[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint[_ngcontent-%COMP%] {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner[_ngcontent-%COMP%] {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n\n\n.test-result[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon[_ngcontent-%COMP%] {\n font-size: 48px;\n animation: _ngcontent-%COMP%_scaleIn 0.3s ease-out;\n}\n\n.test-result-success[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.test-result-failure[_ngcontent-%COMP%] .test-result-icon[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n\n@keyframes _ngcontent-%COMP%_scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message[_ngcontent-%COMP%] {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn[_ngcontent-%COMP%] {\n margin-top: 4px;\n}\n\n\n\n.toggle-switch[_ngcontent-%COMP%] {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider[_ngcontent-%COMP%] {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .toggle-slider[_ngcontent-%COMP%]::before {\n transform: translateX(20px);\n}\n\n\n\n\n\n\n.wizard-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n}\n\n.footer-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n\n\n\n\n\n@media (max-width: 768px) {\n .connections-container[_ngcontent-%COMP%] {\n padding: 16px;\n }\n\n .card-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line[_ngcontent-%COMP%] {\n width: 24px;\n }\n\n .credential-actions[_ngcontent-%COMP%] {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid[_ngcontent-%COMP%] {\n grid-template-columns: 1fr;\n }\n\n .card-footer[_ngcontent-%COMP%] {\n flex-wrap: wrap;\n }\n}\n\n\n\n\n\n\n.delete-confirm-overlay[_ngcontent-%COMP%] {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: _ngcontent-%COMP%_fadeIn 150ms ease;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon[_ngcontent-%COMP%] {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n\n\n\n\n\n.edit-panel-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open[_ngcontent-%COMP%] {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel[_ngcontent-%COMP%] {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open[_ngcontent-%COMP%] {\n transform: translateX(0);\n}\n\n.edit-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(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label[_ngcontent-%COMP%] {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input[_ngcontent-%COMP%] {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field[_ngcontent-%COMP%] {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear[_ngcontent-%COMP%] {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear[_ngcontent-%COMP%]:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n\n\n\n\n\n.card-clickable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n\n\n\n\n\n.detail-view[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n\n\n.schedule-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header[_ngcontent-%COMP%] {\n margin-bottom: 12px;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text[_ngcontent-%COMP%] {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn[_ngcontent-%COMP%]:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n\n\n.detail-toolbar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%] {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder {\n color: var(--mj-text-disabled);\n}\n\n\n\n.add-map-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg[_ngcontent-%COMP%] {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n\n\n.add-map-panel[_ngcontent-%COMP%] {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.add-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label[_ngcontent-%COMP%] {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select[_ngcontent-%COMP%] {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select[_ngcontent-%COMP%]:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col[_ngcontent-%COMP%] {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%] {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n\n\n.add-map-entity-field[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 280px;\n}\n\n\n\n.entity-picker-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row[_ngcontent-%COMP%] mj-tree-dropdown[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn[_ngcontent-%COMP%] {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n\n\n\n\n\n.sync-result-banner[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: _ngcontent-%COMP%_fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n\n\n\n\n\n.auto-map-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result[_ngcontent-%COMP%] {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure[_ngcontent-%COMP%] {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors[_ngcontent-%COMP%] {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n\n\n\n\n\n.new-entity-backdrop[_ngcontent-%COMP%] {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: _ngcontent-%COMP%_fadeIn 0.15s ease;\n}\n\n.new-entity-dialog[_ngcontent-%COMP%] {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: _ngcontent-%COMP%_fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-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(--mj-border-default);\n}\n\n.new-entity-dialog-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body[_ngcontent-%COMP%] {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide[_ngcontent-%COMP%] {\n flex: 1;\n}\n\n.new-entity-dialog-label[_ngcontent-%COMP%] {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%] {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot[_ngcontent-%COMP%] {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint[_ngcontent-%COMP%] {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.new-entity-next-steps[_ngcontent-%COMP%] {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.new-entity-next-steps[_ngcontent-%COMP%] ol[_ngcontent-%COMP%] {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n\n\n.ddl-copy-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n\n\n.ddl-warnings[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning[_ngcontent-%COMP%] {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 4px;\n}\n\n.ddl-preview-block[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code[_ngcontent-%COMP%] {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes _ngcontent-%COMP%_fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n\n\n.detail-empty[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n\n\n.detail-table-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body[_ngcontent-%COMP%] {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled[_ngcontent-%COMP%] {\n opacity: 0.5;\n}\n\n\n\n.dt-col-toggle[_ngcontent-%COMP%] {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest[_ngcontent-%COMP%] {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta[_ngcontent-%COMP%] {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n\n\n.direction-badge[_ngcontent-%COMP%] {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n\n\nbutton.direction-toggle[_ngcontent-%COMP%] {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull[_ngcontent-%COMP%] {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional[_ngcontent-%COMP%] {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n\n\n.create-tables-list[_ngcontent-%COMP%] {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all[_ngcontent-%COMP%] {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search[_ngcontent-%COMP%] {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n margin: 0;\n}\n.create-tables-badge[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered[_ngcontent-%COMP%] {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input[_ngcontent-%COMP%] {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n\n\n.detail-config-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n\n\n.detail-back-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.detail-edit-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n\n\n.map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row[_ngcontent-%COMP%]:hover .map-edit-hint[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n\n\n.ve-header-title-inline[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline[_ngcontent-%COMP%] strong[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty[_ngcontent-%COMP%] {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n\n\n\n\n\n.discovered-objects-section[_ngcontent-%COMP%] {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count[_ngcontent-%COMP%] {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions[_ngcontent-%COMP%] {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading[_ngcontent-%COMP%], \n.discovered-empty[_ngcontent-%COMP%] {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n margin-right: 6px;\n}\n\n.discovered-objects-list[_ngcontent-%COMP%] {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row[_ngcontent-%COMP%] input[type=\"checkbox\"][_ngcontent-%COMP%] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name[_ngcontent-%COMP%] {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges[_ngcontent-%COMP%] {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}"] });
|
|
3141
3128
|
};
|
|
3142
3129
|
ConnectionsComponent = ConnectionsComponent_1 = __decorate([
|
|
3143
3130
|
RegisterClass(BaseResourceComponent, 'IntegrationConnections')
|
|
@@ -3145,7 +3132,7 @@ ConnectionsComponent = ConnectionsComponent_1 = __decorate([
|
|
|
3145
3132
|
export { ConnectionsComponent };
|
|
3146
3133
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ConnectionsComponent, [{
|
|
3147
3134
|
type: Component,
|
|
3148
|
-
args: [{ standalone: false, selector: 'app-integration-connections', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integrations\"\n Icon=\"fa-solid fa-plug\"\n Subtitle=\"Connected systems and data sources\">\n @if (!WizardOpen && !SelectedSummary && Connections.length > 0) {\n <div meta>\n <mj-stat-badge\n [Count]=\"Connections.length\"\n [Label]=\"Connections.length === 1 ? 'integration' : 'integrations'\">\n </mj-stat-badge>\n </div>\n }\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n @if (!WizardOpen && !SelectedSummary) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i> Add Integration\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button mjButton variant=\"primary\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration, summary.Icon)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">·</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button mjButton\n variant=\"danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button mjButton\n variant=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(summary.Integration.ID, $event)\">\n @if (IsSyncing(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === summary.Integration.ID) {\n <div class=\"sync-dropdown\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n <button class=\"card-delete-btn\" (click)=\"OnMenuAction('delete', summary)\" title=\"Delete integration\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">·</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">·</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(SelectedSummary.Integration.ID, $event)\">\n @if (IsSyncing(SelectedSummary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === SelectedSummary.Integration.ID) {\n <div class=\"sync-dropdown sync-dropdown-left\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Schedule section -->\n <div class=\"schedule-section\">\n <div class=\"schedule-section-header\">\n <div class=\"schedule-section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Sync Schedule</span>\n </div>\n </div>\n @if (ScheduledJobID) {\n <mj-scheduled-job-summary\n [ScheduledJobID]=\"ScheduledJobID\"\n (EditRequested)=\"OpenSchedulePanel()\">\n </mj-scheduled-job-summary>\n } @else {\n <div class=\"schedule-empty\">\n <span class=\"schedule-empty-text\">No sync schedule configured</span>\n <button class=\"schedule-create-btn\" (click)=\"OpenSchedulePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Schedule Sync\n </button>\n </div>\n }\n </div>\n\n <!-- Schedule slide panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"ShowScheduleSlidePanel\"\n [ScheduledJobID]=\"ScheduledJobID\"\n [JobTypeID]=\"IntegrationSyncJobTypeID\"\n [DefaultConfiguration]=\"ScheduleDefaultConfiguration\"\n [HideJobType]=\"true\"\n (Close)=\"CloseSchedulePanel()\"\n (Saved)=\"OnScheduleSaved()\"\n (Deleted)=\"OnScheduleDeleted()\">\n </mj-scheduled-job-slide-panel>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">·</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleCreateTablesPanel()\" [class.active]=\"ShowCreateTablesPanel\"\n title=\"Select source objects and create entity tables\">\n <i class=\"fa-solid fa-table\"></i> Create Tables\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAutoMapPanel()\" [class.active]=\"ShowAutoMapPanel\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map Schema\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Sync result banner -->\n @if (SyncResult) {\n <div class=\"sync-result-banner\" [class.sync-success]=\"SyncResult.Success\" [class.sync-failure]=\"!SyncResult.Success\">\n @if (SyncResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ SyncResult.Message || (SyncResult.Success ? 'Sync completed successfully' : 'Sync failed') }}</span>\n </div>\n }\n\n <!-- Auto-Map Schema panel -->\n @if (ShowAutoMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Auto-map all entities in a schema to this integration with 1:1 field mappings</span>\n </div>\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Target Schema</label>\n <select class=\"add-map-select\" [(ngModel)]=\"AutoMapSelectedSchema\">\n <option [ngValue]=\"''\" disabled>Select schema...</option>\n @for (schema of AutoMapSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AutoMapDirection === 'Pull'\" (click)=\"AutoMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Bidirectional'\" (click)=\"AutoMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Push'\" (click)=\"AutoMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanAutoMap\"\n (click)=\"RunAutoMap()\">\n @if (IsAutoMapping) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Mapping...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAutoMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (AutoMapResult) {\n <div class=\"auto-map-result\" [class.auto-map-success]=\"AutoMapResult.Errors.length === 0\"\n [class.auto-map-partial]=\"AutoMapResult.Errors.length > 0 && AutoMapResult.EntityMapsCreated > 0\"\n [class.auto-map-failure]=\"AutoMapResult.EntityMapsCreated === 0 && AutoMapResult.Errors.length > 0\">\n @if (AutoMapResult.EntityMapsCreated > 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Created {{ AutoMapResult.EntityMapsCreated }} entity map{{ AutoMapResult.EntityMapsCreated !== 1 ? 's' : '' }}\n with {{ AutoMapResult.FieldMapsCreated }} field map{{ AutoMapResult.FieldMapsCreated !== 1 ? 's' : '' }}\n </div>\n } @else if (AutoMapResult.Errors.length === 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-info\"></i>\n All entities in this schema are already mapped.\n </div>\n }\n @if (AutoMapResult.Errors.length > 0) {\n <div class=\"auto-map-errors\">\n @for (err of AutoMapResult.Errors; track err) {\n <div class=\"auto-map-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ err }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Create Tables panel (select source objects \u2192 create entity tables) -->\n @if (ShowCreateTablesPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-table\"></i>\n <span>Select source objects to create as entity tables in your database</span>\n </div>\n\n <div class=\"add-map-row\">\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanCreateTables\"\n (click)=\"RunCreateTables()\">\n @if (IsCreatingTables) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-table\"></i> Create {{ CreateTablesSelectedCount }} Table{{ CreateTablesSelectedCount !== 1 ? 's' : '' }}\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseCreateTablesPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (IsLoadingCreateTablesObjects) {\n <mj-loading text=\"Loading source objects...\" size=\"small\"></mj-loading>\n } @else if (CreateTablesObjects.length === 0) {\n <div class=\"auto-map-result auto-map-success\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No source objects available from this connector.\n </div>\n } @else {\n <div class=\"create-tables-filters\">\n <input type=\"text\"\n class=\"create-tables-search mj-input\"\n placeholder=\"Search by name or label...\"\n [(ngModel)]=\"CreateTablesSearch\" />\n </div>\n <div class=\"create-tables-list\">\n <div class=\"create-tables-select-all\">\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\"\n [checked]=\"FilteredCreateTablesObjects.length > 0 && CreateTablesSelectedCount === FilteredCreateTablesObjects.length\"\n (change)=\"ToggleAllCreateTablesObjects($any($event.target).checked)\" />\n <span>Select All ({{ FilteredCreateTablesObjects.length }} of {{ CreateTablesObjects.length }})</span>\n </label>\n </div>\n @for (obj of FilteredCreateTablesObjects; track obj.Name) {\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"obj.Selected\" />\n <span>{{ obj.Label }}</span>\n @if (obj.Label !== obj.Name) {\n <span class=\"create-tables-name-hint\">{{ obj.Name }}</span>\n }\n @if (obj.IsCustom) {\n <span class=\"create-tables-badge create-tables-badge-custom\">Custom</span>\n }\n @if (obj.AlreadyPersisted) {\n <span class=\"create-tables-badge create-tables-badge-registered\">Registered</span>\n }\n </label>\n }\n </div>\n }\n\n @if (CreateTablesResult) {\n <div class=\"auto-map-result\"\n [class.auto-map-success]=\"CreateTablesResult.Success\"\n [class.auto-map-failure]=\"!CreateTablesResult.Success\">\n @if (CreateTablesResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ CreateTablesResult.Message }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\" (click)=\"$event.stopPropagation()\">\n <button class=\"direction-toggle\" [class]=\"DirectionBadgeClass(em.SyncDirection)\"\n (click)=\"CycleSyncDirection(em)\"\n [title]=\"'Click to change sync direction (currently: ' + em.SyncDirection + ')'\">\n {{ DirectionText(em.SyncDirection) }}\n </button>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name, def.Get('Icon'))\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button mjButton variant=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button mjButton variant=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button mjButton\n variant=\"primary\"\n size=\"lg\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button mjButton variant=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button mjButton variant=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration, EditingSummary.Icon)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page — the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ---------------------------------------------------------------------------\n Host & Container \u2014 flex chain for scrollable detail view\n --------------------------------------------------------------------------- */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.connections-container {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n/* When detail or editor view is active, prevent container scrolling\n so the inner .detail-table-body handles its own scroll */\n.connections-container.detail-active,\n.connections-container.editor-active {\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Loading & Empty States\n --------------------------------------------------------------------------- */\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n/* ---------------------------------------------------------------------------\n Card Grid\n --------------------------------------------------------------------------- */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n/* ---------------------------------------------------------------------------\n Connection Card\n --------------------------------------------------------------------------- */\n\n.connection-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n/* Card Header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large {\n font-size: 22px;\n}\n\n/* Status Badge */\n.status-badge {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator {\n margin: 0 6px;\n}\n\n.meta-label {\n font-weight: 500;\n}\n\n.card-sync-info {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info i {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n/* Card inline test result */\n.card-test-result {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Card Footer */\n.card-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer button {\n font-size: 13px;\n}\n\n/* Sync dropdown menu */\n.sync-menu-wrapper {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n/* Card Delete Button */\n.card-delete-btn {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger i {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger:hover {\n background: var(--mj-status-error-bg);\n}\n\n/* ---------------------------------------------------------------------------\n New Connection Card\n --------------------------------------------------------------------------- */\n\n.new-connection-card {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card:hover .new-card-icon {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card:hover .new-card-label {\n color: var(--mj-brand-primary);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard (inline, replaces card grid)\n --------------------------------------------------------------------------- */\n\n.wizard-inline {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n/* Wizard Header */\n.wizard-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Step Indicator\n --------------------------------------------------------------------------- */\n\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active .step-circle {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed .step-circle {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active .step-label {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed .step-label {\n color: var(--mj-status-success);\n}\n\n.step-line {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active {\n background: var(--mj-status-success);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Body\n --------------------------------------------------------------------------- */\n\n.wizard-body {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content {\n min-height: 300px;\n}\n\n.step-content-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered .step-title {\n margin-bottom: 32px;\n}\n\n/* Search bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* No integrations */\n.no-integrations {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations i {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations p {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint {\n font-size: 13px;\n}\n\n/* Integration picker grid */\n.integration-picker-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* ---------------------------------------------------------------------------\n Form Controls (Step 2)\n --------------------------------------------------------------------------- */\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n/* Credential section */\n.credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info i {\n color: var(--mj-status-success);\n}\n\n.credential-clear {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions button {\n font-size: 13px;\n}\n\n.credential-loading {\n padding: 16px 0;\n}\n\n.credential-list {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item:last-child {\n border-bottom: none;\n}\n\n.credential-list-item:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item i {\n color: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Test Connection (Step 3)\n --------------------------------------------------------------------------- */\n\n.test-prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running p {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n/* Test result */\n.test-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon {\n font-size: 48px;\n animation: scaleIn 0.3s ease-out;\n}\n\n.test-result-success .test-result-icon {\n color: var(--mj-status-success);\n}\n\n.test-result-failure .test-result-icon {\n color: var(--mj-status-error);\n}\n\n@keyframes scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn {\n margin-top: 4px;\n}\n\n/* Toggle switch */\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch input:checked + .toggle-slider {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch input:checked + .toggle-slider::before {\n transform: translateX(20px);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Footer\n --------------------------------------------------------------------------- */\n\n.wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left {\n display: flex;\n align-items: center;\n}\n\n.footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ---------------------------------------------------------------------------\n Responsive\n --------------------------------------------------------------------------- */\n\n@media (max-width: 768px) {\n .connections-container {\n padding: 16px;\n }\n\n .card-grid {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line {\n width: 24px;\n }\n\n .credential-actions {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid {\n grid-template-columns: 1fr;\n }\n\n .card-footer {\n flex-wrap: wrap;\n }\n}\n\n/* ---------------------------------------------------------------------------\n Delete confirmation overlay\n --------------------------------------------------------------------------- */\n\n.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: fadeIn 150ms ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Edit panel (slide-in)\n --------------------------------------------------------------------------- */\n\n.edit-panel-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open {\n transform: translateX(0);\n}\n\n.edit-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info i {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Card clickable area\n --------------------------------------------------------------------------- */\n\n.card-clickable {\n cursor: pointer;\n}\n\n/* ---------------------------------------------------------------------------\n Detail View (entity maps for a selected integration)\n --------------------------------------------------------------------------- */\n\n.detail-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Schedule section */\n.schedule-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header {\n margin-bottom: 12px;\n}\n\n.schedule-section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title i {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail toolbar */\n.detail-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* Add Map button */\n.add-map-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n/* Add map inline panel */\n.add-map-panel {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: fadeIn 200ms ease;\n}\n\n.add-map-row {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns button {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns button:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns button:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns button.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading i {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n/* Entity field needs more room for tree dropdown */\n.add-map-entity-field {\n flex: 2;\n min-width: 280px;\n}\n\n/* Entity picker row: tree dropdown + New button side by side */\n.entity-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row mj-tree-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------------------------------------------------------------------------\n Sync Result Banner\n --------------------------------------------------------------------------- */\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n/* ---------------------------------------------------------------------------\n Auto-Map Schema Panel\n --------------------------------------------------------------------------- */\n\n.auto-map-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header i {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n/* ---------------------------------------------------------------------------\n New Entity Dialog\n --------------------------------------------------------------------------- */\n\n.new-entity-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: fadeIn 0.15s ease;\n}\n\n.new-entity-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide {\n flex: 1;\n}\n\n.new-entity-dialog-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* Next steps callout inside dialog */\n.new-entity-next-steps {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps h4 {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps h4 i {\n margin-right: 6px;\n}\n\n.new-entity-next-steps ol {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n/* DDL copy button */\n.ddl-copy-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* DDL Preview */\n.ddl-warnings {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning i {\n margin-right: 4px;\n}\n\n.ddl-preview-block {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Detail empty state */\n.detail-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty i {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n/* Detail table */\n.detail-table-head {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row:last-child {\n border-bottom: none;\n}\n\n.detail-map-row:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled {\n opacity: 0.5;\n}\n\n/* Column widths (shared between head and body) */\n.dt-col-toggle {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n/* Direction badge */\n.direction-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n/* Clickable direction toggle button */\nbutton.direction-toggle {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n/* Create Tables list */\n.create-tables-list {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle input[type=\"checkbox\"] {\n margin: 0;\n}\n.create-tables-badge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* Config badges */\n.detail-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n/* Detail back button (icon-only) */\n.detail-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Detail edit button (icon-only) */\n.detail-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Chevron hint on entity map rows */\n.map-edit-hint {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row:hover .map-edit-hint {\n color: var(--mj-brand-primary);\n}\n\n/* Entity map editor header */\n.ve-header-title-inline {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n Discovered Source Objects Section\n --------------------------------------------------------------------------- */\n\n.discovered-objects-section {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title i {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading,\n.discovered-empty {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading i {\n margin-right: 6px;\n}\n\n.discovered-objects-list {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row input[type=\"checkbox\"] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n"] }]
|
|
3135
|
+
args: [{ standalone: false, selector: 'app-integration-connections', template: "<mj-page-layout>\n <mj-page-header\n Title=\"Integrations\"\n Icon=\"fa-solid fa-plug\"\n Subtitle=\"Connected systems and data sources\">\n <!-- [meta] intentionally omitted \u2014 chrome slot discipline audit Task B.\n \"Connections.length integrations\" badge mirrored the visible card\n grid row count. -->\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"LoadData()\"></mj-refresh-button>\n @if (!WizardOpen && !SelectedSummary) {\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i> Add Integration\n </button>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body [Flex]=\"true\" [Padding]=\"false\">\n<!-- Main container -->\n<div class=\"connections-container\" [class.detail-active]=\"!!SelectedSummary\"\n [class.editor-active]=\"!!EditorEntityMap\">\n\n <!-- ======================================================================\n CARD GRID VIEW (shown when no wizard and no detail selected)\n ====================================================================== -->\n @if (!WizardOpen && !SelectedSummary) {\n <!-- Loading state -->\n @if (IsLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading integrations...\"></mj-loading>\n </div>\n }\n\n <!-- Empty state -->\n @if (!IsLoading && Connections.length === 0) {\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-plug empty-icon\"></i>\n <h3>No integrations yet</h3>\n <p>Connect your first external system to start syncing data.</p>\n <button mjButton variant=\"primary\" (click)=\"OpenWizard()\">\n <i class=\"fa-solid fa-plus\"></i>\n Add Your First Integration\n </button>\n </div>\n }\n\n <!-- Card grid -->\n @if (!IsLoading && Connections.length > 0) {\n <div class=\"card-grid\">\n @for (summary of Connections; track summary.Integration.ID) {\n <div class=\"connection-card\">\n <!-- Card header + body: clickable to open detail view -->\n <div class=\"card-clickable\" (click)=\"SelectIntegrationCard(summary)\">\n <div class=\"card-header\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(summary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(summary.Integration.Integration, summary.Icon)\" class=\"icon-large\"></i>\n </div>\n <span [class]=\"GetStatusBadgeClass(summary)\">{{ GetStatusBadge(summary) }}</span>\n </div>\n\n <!-- Card body -->\n <div class=\"card-body\">\n <div class=\"card-name\">{{ summary.Integration.Name }}</div>\n <div class=\"card-company\">{{ summary.Integration.Company }}</div>\n <div class=\"card-meta\">\n <span class=\"meta-label\">{{ GetSourceTypeLabel(summary) }}</span>\n <span class=\"meta-separator\">·</span>\n <span class=\"meta-value\">{{ GetCredentialHint(summary) }}</span>\n </div>\n <div class=\"card-sync-info\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n Syncing {{ GetEntityMapCount(summary.Integration.ID) }} entities\n </div>\n\n <!-- Inline test result -->\n @if (GetCardTestResult(summary.Integration.ID); as testResult) {\n <div class=\"card-test-result\" [class.test-success]=\"testResult.Success\" [class.test-failure]=\"!testResult.Success\">\n @if (testResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ testResult.Message }}</span>\n </div>\n }\n </div>\n </div><!-- /card-clickable -->\n\n <!-- Delete confirmation overlay -->\n @if (IsDeleteConfirming(summary.Integration.ID)) {\n <div class=\"delete-confirm-overlay\">\n <div class=\"delete-confirm-content\">\n <i class=\"fa-solid fa-triangle-exclamation delete-warn-icon\"></i>\n <span class=\"delete-confirm-text\">Delete this integration and all its entity maps?</span>\n <div class=\"delete-confirm-actions\">\n <button mjButton\n variant=\"danger\"\n [disabled]=\"IsDeleting\"\n (click)=\"ConfirmDelete(summary.Integration.ID)\">\n @if (IsDeleting) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Deleting...\n } @else {\n Delete\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CancelDelete()\">\n Cancel\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Card footer -->\n <div class=\"card-footer\">\n <button mjButton\n variant=\"outline\"\n [disabled]=\"!!TestingCardID\"\n (click)=\"TestExistingConnection(summary.Integration.ID)\">\n @if (IsTestingCard(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n Test\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"OnMenuAction('edit', summary)\">\n Configure\n </button>\n @if (IsConnectionActive(summary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(summary.Integration.ID, $event)\">\n @if (IsSyncing(summary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === summary.Integration.ID) {\n <div class=\"sync-dropdown\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(summary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n <button class=\"card-delete-btn\" (click)=\"OnMenuAction('delete', summary)\" title=\"Delete integration\">\n <i class=\"fa-solid fa-trash-can\"></i>\n </button>\n </div>\n </div>\n }\n\n <!-- New connection card -->\n <div class=\"connection-card new-connection-card\" (click)=\"OpenWizard()\">\n <div class=\"new-card-content\">\n <div class=\"new-card-icon\">\n <i class=\"fa-solid fa-plus\"></i>\n </div>\n <span class=\"new-card-label\">Add Integration</span>\n </div>\n </div>\n </div>\n }\n }\n\n <!-- ======================================================================\n DETAIL VIEW (entity maps for selected integration)\n ====================================================================== -->\n @if (!WizardOpen && SelectedSummary) {\n <div class=\"detail-view\">\n\n <!-- ================================================================\n ENTITY MAP EDITOR (field mapping detail for a selected map)\n ================================================================ -->\n @if (EditorEntityMap) {\n <app-visual-field-editor\n [EntityMap]=\"EditorEntityMap\"\n [CompanyIntegrationID]=\"SelectedSummary!.Integration.ID\"\n [RunViewProvider]=\"RunViewToUse\"\n (Close)=\"CloseEntityMapEditor()\">\n </app-visual-field-editor>\n\n <!-- ================================================================\n ENTITY MAPS LIST (shown when no editor map is selected)\n ================================================================ -->\n } @else {\n <!-- Detail header -->\n <div class=\"detail-header\">\n <button class=\"detail-back-btn\" (click)=\"CloseDetailView()\" title=\"Back to Integrations\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n <div class=\"detail-header-info\">\n <div class=\"icon-circle\" [style.background-color]=\"GetIconBrandColor(SelectedSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(SelectedSummary.Integration.Integration)\" class=\"icon-large\"></i>\n </div>\n <div class=\"detail-header-text\">\n <h2 class=\"detail-title\">{{ SelectedSummary.Integration.Name }}</h2>\n <span class=\"detail-subtitle\">\n {{ SelectedSummary.Integration.Company }}\n <span class=\"meta-separator\">·</span>\n {{ GetSourceTypeLabel(SelectedSummary) }}\n <span class=\"meta-separator\">·</span>\n <span [class]=\"GetStatusBadgeClass(SelectedSummary)\">{{ GetStatusBadge(SelectedSummary) }}</span>\n </span>\n </div>\n </div>\n <div class=\"detail-header-actions\">\n <button class=\"detail-edit-btn\" (click)=\"OpenEditPanel(SelectedSummary)\" title=\"Configure\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n </button>\n @if (IsConnectionActive(SelectedSummary)) {\n <div class=\"sync-menu-wrapper\">\n <button mjButton variant=\"primary\"\n [disabled]=\"!!SyncingIntegrationID\"\n (click)=\"ToggleSyncMenu(SelectedSummary.Integration.ID, $event)\">\n @if (IsSyncing(SelectedSummary.Integration.ID)) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Syncing...\n } @else {\n <i class=\"fa-solid fa-arrows-rotate\"></i> Sync\n <i class=\"fa-solid fa-chevron-down sync-caret\"></i>\n }\n </button>\n @if (SyncMenuIntegrationID === SelectedSummary.Integration.ID) {\n <div class=\"sync-dropdown sync-dropdown-left\">\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Pull (External \u2192 MJ)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Pull', $event)\">\n <i class=\"fa-solid fa-arrow-down-to-line\"></i> Incremental Pull\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Pull', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Pull\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Push (MJ \u2192 External)</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Push', $event)\">\n <i class=\"fa-solid fa-arrow-up-from-line\"></i> Incremental Push\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Push', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Push\n </button>\n </div>\n <div class=\"sync-dropdown-group\">\n <span class=\"sync-dropdown-label\">Bidirectional</span>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, false, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-arrows-rotate\"></i> Incremental Both\n </button>\n <button class=\"sync-dropdown-item\" (click)=\"RunSyncWithDirection(SelectedSummary.Integration.ID, true, 'Bidirectional', $event)\">\n <i class=\"fa-solid fa-rotate\"></i> Full Both\n </button>\n </div>\n </div>\n }\n </div>\n }\n </div>\n </div>\n\n <!-- Schedule section -->\n <div class=\"schedule-section\">\n <div class=\"schedule-section-header\">\n <div class=\"schedule-section-title\">\n <i class=\"fa-solid fa-calendar-check\"></i>\n <span>Sync Schedule</span>\n </div>\n </div>\n @if (ScheduledJobID) {\n <mj-scheduled-job-summary\n [ScheduledJobID]=\"ScheduledJobID\"\n (EditRequested)=\"OpenSchedulePanel()\">\n </mj-scheduled-job-summary>\n } @else {\n <div class=\"schedule-empty\">\n <span class=\"schedule-empty-text\">No sync schedule configured</span>\n <button class=\"schedule-create-btn\" (click)=\"OpenSchedulePanel()\">\n <i class=\"fa-solid fa-plus\"></i>\n Schedule Sync\n </button>\n </div>\n }\n </div>\n\n <!-- Schedule slide panel -->\n <mj-scheduled-job-slide-panel\n [IsOpen]=\"ShowScheduleSlidePanel\"\n [ScheduledJobID]=\"ScheduledJobID\"\n [JobTypeID]=\"IntegrationSyncJobTypeID\"\n [DefaultConfiguration]=\"ScheduleDefaultConfiguration\"\n [HideJobType]=\"true\"\n (Close)=\"CloseSchedulePanel()\"\n (Saved)=\"OnScheduleSaved()\"\n (Deleted)=\"OnScheduleDeleted()\">\n </mj-scheduled-job-slide-panel>\n\n <!-- Entity maps toolbar -->\n <div class=\"detail-toolbar\">\n <div class=\"detail-toolbar-left\">\n <span class=\"detail-map-count\">\n {{ DetailEntityMaps.length }} entity map{{ DetailEntityMaps.length !== 1 ? 's' : '' }}\n <span class=\"meta-separator\">·</span>\n {{ DetailActiveMapCount }} active\n </span>\n </div>\n <div class=\"detail-toolbar-right\">\n <div class=\"detail-search\">\n <i class=\"fa-solid fa-filter\"></i>\n <input type=\"text\"\n placeholder=\"Filter entity maps...\"\n [value]=\"DetailSearchTerm\"\n (input)=\"OnDetailSearch($event)\" />\n </div>\n <button class=\"add-map-btn\" (click)=\"ToggleCreateTablesPanel()\" [class.active]=\"ShowCreateTablesPanel\"\n title=\"Select source objects and create entity tables\">\n <i class=\"fa-solid fa-table\"></i> Create Tables\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAutoMapPanel()\" [class.active]=\"ShowAutoMapPanel\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map Schema\n </button>\n <button class=\"add-map-btn\" (click)=\"ToggleAddMapPanel()\" [class.active]=\"ShowAddMapPanel\">\n <i class=\"fa-solid fa-plus\"></i> Add Map\n </button>\n </div>\n </div>\n\n <!-- Sync result banner -->\n @if (SyncResult) {\n <div class=\"sync-result-banner\" [class.sync-success]=\"SyncResult.Success\" [class.sync-failure]=\"!SyncResult.Success\">\n @if (SyncResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ SyncResult.Message || (SyncResult.Success ? 'Sync completed successfully' : 'Sync failed') }}</span>\n </div>\n }\n\n <!-- Auto-Map Schema panel -->\n @if (ShowAutoMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i>\n <span>Auto-map all entities in a schema to this integration with 1:1 field mappings</span>\n </div>\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Target Schema</label>\n <select class=\"add-map-select\" [(ngModel)]=\"AutoMapSelectedSchema\">\n <option [ngValue]=\"''\" disabled>Select schema...</option>\n @for (schema of AutoMapSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AutoMapDirection === 'Pull'\" (click)=\"AutoMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Bidirectional'\" (click)=\"AutoMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AutoMapDirection === 'Push'\" (click)=\"AutoMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanAutoMap\"\n (click)=\"RunAutoMap()\">\n @if (IsAutoMapping) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Mapping...\n } @else {\n <i class=\"fa-solid fa-wand-magic-sparkles\"></i> Auto-Map\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAutoMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (AutoMapResult) {\n <div class=\"auto-map-result\" [class.auto-map-success]=\"AutoMapResult.Errors.length === 0\"\n [class.auto-map-partial]=\"AutoMapResult.Errors.length > 0 && AutoMapResult.EntityMapsCreated > 0\"\n [class.auto-map-failure]=\"AutoMapResult.EntityMapsCreated === 0 && AutoMapResult.Errors.length > 0\">\n @if (AutoMapResult.EntityMapsCreated > 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-check\"></i>\n Created {{ AutoMapResult.EntityMapsCreated }} entity map{{ AutoMapResult.EntityMapsCreated !== 1 ? 's' : '' }}\n with {{ AutoMapResult.FieldMapsCreated }} field map{{ AutoMapResult.FieldMapsCreated !== 1 ? 's' : '' }}\n </div>\n } @else if (AutoMapResult.Errors.length === 0) {\n <div class=\"auto-map-result-summary\">\n <i class=\"fa-solid fa-circle-info\"></i>\n All entities in this schema are already mapped.\n </div>\n }\n @if (AutoMapResult.Errors.length > 0) {\n <div class=\"auto-map-errors\">\n @for (err of AutoMapResult.Errors; track err) {\n <div class=\"auto-map-error\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ err }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Create Tables panel (select source objects \u2192 create entity tables) -->\n @if (ShowCreateTablesPanel) {\n <div class=\"add-map-panel\">\n <div class=\"auto-map-header\">\n <i class=\"fa-solid fa-table\"></i>\n <span>Select source objects to create as entity tables in your database</span>\n </div>\n\n <div class=\"add-map-row\">\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanCreateTables\"\n (click)=\"RunCreateTables()\">\n @if (IsCreatingTables) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Creating...\n } @else {\n <i class=\"fa-solid fa-table\"></i> Create {{ CreateTablesSelectedCount }} Table{{ CreateTablesSelectedCount !== 1 ? 's' : '' }}\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseCreateTablesPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n\n @if (IsLoadingCreateTablesObjects) {\n <mj-loading text=\"Loading source objects...\" size=\"small\"></mj-loading>\n } @else if (CreateTablesObjects.length === 0) {\n <div class=\"auto-map-result auto-map-success\">\n <i class=\"fa-solid fa-circle-info\"></i>\n No source objects available from this connector.\n </div>\n } @else {\n <div class=\"create-tables-filters\">\n <input type=\"text\"\n class=\"create-tables-search mj-input\"\n placeholder=\"Search by name or label...\"\n [(ngModel)]=\"CreateTablesSearch\" />\n </div>\n <div class=\"create-tables-list\">\n <div class=\"create-tables-select-all\">\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\"\n [checked]=\"FilteredCreateTablesObjects.length > 0 && CreateTablesSelectedCount === FilteredCreateTablesObjects.length\"\n (change)=\"ToggleAllCreateTablesObjects($any($event.target).checked)\" />\n <span>Select All ({{ FilteredCreateTablesObjects.length }} of {{ CreateTablesObjects.length }})</span>\n </label>\n </div>\n @for (obj of FilteredCreateTablesObjects; track obj.Name) {\n <label class=\"create-tables-checkbox\">\n <input type=\"checkbox\" [(ngModel)]=\"obj.Selected\" />\n <span>{{ obj.Label }}</span>\n @if (obj.Label !== obj.Name) {\n <span class=\"create-tables-name-hint\">{{ obj.Name }}</span>\n }\n @if (obj.IsCustom) {\n <span class=\"create-tables-badge create-tables-badge-custom\">Custom</span>\n }\n @if (obj.AlreadyPersisted) {\n <span class=\"create-tables-badge create-tables-badge-registered\">Registered</span>\n }\n </label>\n }\n </div>\n }\n\n @if (CreateTablesResult) {\n <div class=\"auto-map-result\"\n [class.auto-map-success]=\"CreateTablesResult.Success\"\n [class.auto-map-failure]=\"!CreateTablesResult.Success\">\n @if (CreateTablesResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n <span>{{ CreateTablesResult.Message }}</span>\n </div>\n }\n </div>\n }\n\n <!-- Add Entity Map inline form -->\n @if (ShowAddMapPanel) {\n <div class=\"add-map-panel\">\n <div class=\"add-map-row\">\n <div class=\"add-map-field\">\n <label class=\"add-map-label\">Source Object</label>\n @if (IsLoadingSourceObjects) {\n <div class=\"add-map-loading\"><i class=\"fa-solid fa-spinner fa-spin\"></i> Loading...</div>\n } @else if (AvailableSourceObjects.length === 0) {\n <div class=\"add-map-hint\">No source objects found in metadata</div>\n } @else {\n <select class=\"add-map-select\" [(ngModel)]=\"AddMapSourceObjectName\">\n <option [ngValue]=\"''\" disabled>Select source object...</option>\n @for (obj of AvailableSourceObjects; track obj.Name) {\n <option [value]=\"obj.Name\">{{ obj.Label || obj.Name }}</option>\n }\n </select>\n }\n </div>\n\n <div class=\"add-map-direction-col\">\n <label class=\"add-map-label\">Direction</label>\n <div class=\"add-map-direction-btns\">\n <button [class.active]=\"AddMapDirection === 'Pull'\" (click)=\"AddMapDirection = 'Pull'\" title=\"Pull from source\">\n <i class=\"fa-solid fa-arrow-right\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Bidirectional'\" (click)=\"AddMapDirection = 'Bidirectional'\" title=\"Bidirectional sync\">\n <i class=\"fa-solid fa-right-left\"></i>\n </button>\n <button [class.active]=\"AddMapDirection === 'Push'\" (click)=\"AddMapDirection = 'Push'\" title=\"Push to source\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"add-map-field add-map-entity-field\">\n <label class=\"add-map-label\">MJ Entity</label>\n <div class=\"entity-picker-row\">\n <mj-tree-dropdown\n #entityTreeDropdown\n [BranchConfig]=\"EntityBranchConfig\"\n [LeafConfig]=\"EntityLeafConfig\"\n [Value]=\"AddMapEntityIDAsKey\"\n [SelectableTypes]=\"'leaf'\"\n [SelectionMode]=\"'single'\"\n [Placeholder]=\"'Search entities by schema...'\"\n [EnableSearch]=\"true\"\n (SelectionChange)=\"OnEntityTreeSelection($event)\">\n </mj-tree-dropdown>\n <button class=\"new-entity-btn\" (click)=\"OpenNewEntityDialog()\" title=\"Create new entity table\">\n <i class=\"fa-solid fa-plus\"></i> New\n </button>\n </div>\n </div>\n\n <div class=\"add-map-actions\">\n <button class=\"add-map-save-btn\"\n [disabled]=\"!CanSaveAddMap || IsSavingAddMap\"\n (click)=\"SaveAddMap()\">\n @if (IsSavingAddMap) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n } @else {\n <i class=\"fa-solid fa-check\"></i> Add\n }\n </button>\n <button class=\"add-map-cancel-btn\" (click)=\"CloseAddMapPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n </div>\n </div>\n }\n\n <!-- Entity maps table -->\n @if (IsDetailLoading) {\n <div class=\"loading-container\">\n <mj-loading text=\"Loading entity maps...\"></mj-loading>\n </div>\n } @else if (DetailEntityMaps.length === 0 && !ShowAddMapPanel) {\n <div class=\"detail-empty\">\n <i class=\"fa-solid fa-cube\"></i>\n <h3>No entity maps configured</h3>\n <p>Entity maps define how external objects sync to MJ entities.</p>\n <button class=\"add-map-btn add-map-btn-lg\" (click)=\"ToggleAddMapPanel()\">\n <i class=\"fa-solid fa-plus\"></i> Add Your First Entity Map\n </button>\n </div>\n } @else if (DetailEntityMaps.length > 0) {\n <!-- Table header -->\n <div class=\"detail-table-head\">\n <span class=\"dt-col-toggle\">Sync</span>\n <span class=\"dt-col-source\">External Object</span>\n <span class=\"dt-col-direction\"></span>\n <span class=\"dt-col-dest\">MJ Entity</span>\n <span class=\"dt-col-meta\">Config</span>\n </div>\n\n <!-- Table body -->\n <div class=\"detail-table-body\">\n @for (em of DetailFilteredMaps; track em.ID) {\n <div class=\"detail-map-row\" [class.sync-disabled]=\"!em.SyncEnabled\" (click)=\"OnEntityMapClick(em)\">\n <span class=\"dt-col-toggle\" (click)=\"$event.stopPropagation()\">\n <label class=\"toggle-switch\" [title]=\"em.SyncEnabled ? 'Sync enabled' : 'Sync disabled'\">\n <input type=\"checkbox\"\n [checked]=\"em.SyncEnabled\"\n (change)=\"OnToggleMapEnabled(em, $event)\" />\n <span class=\"toggle-slider\"></span>\n </label>\n </span>\n <span class=\"dt-col-source\" [title]=\"em.ExternalObjectName\">\n {{ em.ExternalObjectLabel ?? em.ExternalObjectName }}\n </span>\n <span class=\"dt-col-direction\" (click)=\"$event.stopPropagation()\">\n <button class=\"direction-toggle\" [class]=\"DirectionBadgeClass(em.SyncDirection)\"\n (click)=\"CycleSyncDirection(em)\"\n [title]=\"'Click to change sync direction (currently: ' + em.SyncDirection + ')'\">\n {{ DirectionText(em.SyncDirection) }}\n </button>\n </span>\n <span class=\"dt-col-dest\" [title]=\"em.Entity\">\n {{ em.Entity }}\n </span>\n <span class=\"dt-col-meta\">\n @if (em.MatchStrategy) {\n <span class=\"detail-config-badge\" title=\"Match strategy configured\">\n <i class=\"fa-solid fa-link\"></i>\n </span>\n }\n <span class=\"detail-config-badge\" [title]=\"'Conflict: ' + em.ConflictResolution\">\n <i class=\"fa-solid fa-arrows-rotate\"></i>\n </span>\n <span class=\"map-edit-hint\">\n <i class=\"fa-solid fa-chevron-right\"></i>\n </span>\n </span>\n </div>\n } @empty {\n <div class=\"detail-table-empty\">\n No entity maps match your filter.\n </div>\n }\n </div>\n }\n }\n\n </div>\n }\n\n <!-- ======================================================================\n WIZARD (inline, replaces card grid when open)\n ====================================================================== -->\n @if (WizardOpen) {\n <div class=\"wizard-inline\">\n <!-- Wizard header -->\n <div class=\"wizard-header\">\n <button class=\"wizard-back-btn\" (click)=\"CloseWizard()\">\n <i class=\"fa-solid fa-arrow-left\"></i>\n Back to Integrations\n </button>\n <h2 class=\"wizard-title\">New Integration</h2>\n </div>\n\n <!-- Step indicator -->\n <div class=\"step-indicator\">\n @for (step of WizardSteps; track step.Number) {\n <div class=\"step-item\" [class.step-active]=\"IsStepActive(step.Number)\" [class.step-completed]=\"IsStepCompleted(step.Number)\">\n <div class=\"step-circle\">\n @if (IsStepCompleted(step.Number)) {\n <i class=\"fa-solid fa-check\"></i>\n } @else {\n {{ step.Number }}\n }\n </div>\n <span class=\"step-label\">{{ step.Label }}</span>\n </div>\n @if (step.Number < WizardSteps.length) {\n <div class=\"step-line\" [class.step-line-active]=\"IsStepCompleted(step.Number)\"></div>\n }\n }\n </div>\n\n <!-- Step content -->\n <div class=\"wizard-body\">\n\n <!-- Step 1: Choose Integration -->\n @if (WizardStep === 1) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">What system do you want to connect?</h3>\n <div class=\"search-bar\">\n <i class=\"fa-solid fa-search search-icon\"></i>\n <input type=\"text\"\n class=\"search-input\"\n placeholder=\"Search integrations...\"\n [(ngModel)]=\"SearchQuery\" />\n </div>\n\n @if (FilteredIntegrations.length === 0 && AvailableIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-puzzle-piece\"></i>\n <p>No integrations configured</p>\n <span class=\"no-integrations-hint\">Configure integration definitions in the admin area first.</span>\n </div>\n } @else if (FilteredIntegrations.length === 0) {\n <div class=\"no-integrations\">\n <i class=\"fa-solid fa-search\"></i>\n <p>No matching integrations</p>\n </div>\n } @else {\n <div class=\"integration-picker-grid\">\n @for (def of FilteredIntegrations; track def.ID) {\n <div class=\"integration-picker-card\"\n [class.picker-selected]=\"IsSelectedIntegration(def)\"\n (click)=\"SelectIntegration(def)\">\n <div class=\"picker-icon-circle\" [style.background-color]=\"GetIconBrandColor(def.Name)\">\n <i [class]=\"GetIntegrationIcon(def.Name, def.Get('Icon'))\"></i>\n </div>\n <div class=\"picker-name\">{{ def.Name }}</div>\n @if (def.Description) {\n <div class=\"picker-description\">{{ def.Description }}</div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- Step 2: Configure Connection -->\n @if (WizardStep === 2) {\n <div class=\"step-content\">\n <h3 class=\"step-title\">Set up your connection</h3>\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionName\">Connection Name</label>\n <input id=\"connectionName\"\n type=\"text\"\n class=\"form-input\"\n placeholder=\"e.g. Production HubSpot\"\n [(ngModel)]=\"ConnectionName\" />\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"companySelect\">Company</label>\n @if (NeedsCompanyPicker) {\n <select id=\"companySelect\" class=\"form-input\" [(ngModel)]=\"SelectedCompanyID\">\n <option [ngValue]=\"null\" disabled>Select a company...</option>\n @for (company of Companies; track company.ID) {\n <option [value]=\"company.ID\">{{ company.Name }}</option>\n }\n </select>\n } @else if (Companies.length === 1) {\n <input type=\"text\" class=\"form-input\" [value]=\"Companies[0].Name\" disabled />\n } @else {\n <div class=\"form-hint\">No companies available. Create one in the admin area.</div>\n }\n </div>\n\n <div class=\"form-group\">\n <label class=\"form-label\" for=\"connectionDescription\">Description <span class=\"optional-label\">(optional)</span></label>\n <textarea id=\"connectionDescription\"\n class=\"form-input form-textarea\"\n placeholder=\"Notes about this connection...\"\n [(ngModel)]=\"ConnectionDescription\"\n rows=\"3\"></textarea>\n </div>\n\n <!-- Credential section -->\n <div class=\"form-group\">\n <label class=\"form-label\">Credential</label>\n @if (SelectedCredential) {\n <div class=\"credential-selected\">\n <div class=\"credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ SelectedCredential.Name }}</span>\n </div>\n <button class=\"credential-clear\" (click)=\"ClearCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"credential-actions\">\n <button mjButton variant=\"outline\" (click)=\"ShowExistingCredentials()\">\n <i class=\"fa-solid fa-key\"></i>\n Choose Existing Credential\n </button>\n <button mjButton variant=\"outline\" (click)=\"OpenCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create New Credential\n </button>\n </div>\n }\n\n @if (IsLoadingCredentials) {\n <div class=\"credential-loading\">\n <mj-loading text=\"Loading credentials...\" size=\"small\"></mj-loading>\n </div>\n }\n\n @if (!IsLoadingCredentials && ExistingCredentials.length > 0 && !SelectedCredential) {\n <div class=\"credential-list\">\n @for (cred of ExistingCredentials; track cred.ID) {\n <div class=\"credential-list-item\" (click)=\"SelectExistingCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Step 3: Test Connection -->\n @if (WizardStep === 3) {\n <div class=\"step-content step-content-centered\">\n <h3 class=\"step-title\">Let's verify everything works</h3>\n\n @if (!TestResult && !IsTesting) {\n <div class=\"test-prompt\">\n <button mjButton\n variant=\"primary\"\n size=\"lg\"\n (click)=\"TestNewConnection()\">\n <i class=\"fa-solid fa-vial\"></i>\n Test Connection\n </button>\n <p class=\"test-hint\">We'll verify we can reach your system and authenticate.</p>\n </div>\n }\n\n @if (IsTesting) {\n <div class=\"test-running\">\n <div class=\"test-spinner\">\n <i class=\"fa-solid fa-spinner fa-spin fa-3x\"></i>\n </div>\n <p>Testing connection...</p>\n </div>\n }\n\n @if (TestResult) {\n <div class=\"test-result\" [class.test-result-success]=\"TestResult.Success\" [class.test-result-failure]=\"!TestResult.Success\">\n <div class=\"test-result-icon\">\n @if (TestResult.Success) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-solid fa-circle-xmark\"></i>\n }\n </div>\n <div class=\"test-result-message\">{{ TestResult.Message }}</div>\n @if (TestResult.Success && TestResult.ServerVersion) {\n <div class=\"test-result-detail\">\n Server version: {{ TestResult.ServerVersion }}\n </div>\n }\n @if (!TestResult.Success) {\n <button mjButton variant=\"outline\" (click)=\"TestNewConnection()\" class=\"test-retry-btn\">\n <i class=\"fa-solid fa-rotate-right\"></i>\n Retry\n </button>\n }\n </div>\n }\n </div>\n }\n\n </div>\n\n <!-- Wizard footer -->\n <div class=\"wizard-footer\">\n <div class=\"footer-left\"></div>\n <div class=\"footer-right\">\n @if (WizardStep > 1) {\n <button mjButton variant=\"outline\" (click)=\"PreviousStep()\">\n Back\n </button>\n }\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsNextDisabled || IsSaving\"\n (click)=\"FinishWizard()\">\n @if (IsSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n Saving...\n } @else {\n {{ NextButtonLabel }}\n }\n </button>\n </div>\n </div>\n </div>\n }\n\n</div>\n\n<!-- Edit panel (slide-in) -->\n<div class=\"edit-panel-backdrop\"\n [class.open]=\"EditPanelOpen\"\n (click)=\"CloseEditPanel()\"></div>\n<div class=\"edit-panel\" [class.open]=\"EditPanelOpen\">\n @if (EditingSummary) {\n <!-- Header -->\n <div class=\"edit-panel-header\">\n <div class=\"edit-panel-title\">\n <div class=\"edit-icon-circle\"\n [style.background-color]=\"GetIconBrandColor(EditingSummary.Integration.Integration)\">\n <i [class]=\"GetIntegrationIcon(EditingSummary.Integration.Integration, EditingSummary.Icon)\"></i>\n </div>\n <span>Configure Integration</span>\n </div>\n <button class=\"edit-close-btn\" (click)=\"CloseEditPanel()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n\n @if (IsEditLoading) {\n <div class=\"edit-panel-loading\">\n <mj-loading text=\"Loading...\" size=\"small\"></mj-loading>\n </div>\n } @else {\n <!-- Edit form -->\n <div class=\"edit-panel-body\">\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Connection Name</label>\n <input type=\"text\"\n class=\"edit-form-input\"\n [(ngModel)]=\"EditName\"\n placeholder=\"Connection name...\" />\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Status</label>\n <div class=\"edit-toggle-row\">\n <label class=\"toggle-switch\">\n <input type=\"checkbox\" [(ngModel)]=\"EditIsActive\" />\n <span class=\"toggle-slider\"></span>\n </label>\n <span class=\"edit-toggle-label\" [class.active]=\"EditIsActive\">\n {{ EditIsActive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Credential</label>\n @if (EditCredential) {\n <div class=\"edit-credential-selected\">\n <div class=\"edit-credential-info\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ EditCredential.Name }}</span>\n </div>\n <button class=\"edit-credential-clear\" (click)=\"ClearEditCredential()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n } @else {\n <div class=\"edit-credential-actions\">\n <button mjButton variant=\"outline\" size=\"sm\" (click)=\"OpenEditCredentialDialog()\">\n <i class=\"fa-solid fa-plus\"></i> New Credential\n </button>\n </div>\n @if (EditCredentials.length > 0) {\n <div class=\"edit-credential-list\">\n @for (cred of EditCredentials; track cred.ID) {\n <div class=\"edit-credential-item\" (click)=\"SelectEditCredential(cred)\">\n <i class=\"fa-solid fa-key\"></i>\n <span>{{ cred.Name }}</span>\n </div>\n }\n </div>\n }\n }\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Integration</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Integration }}\n </div>\n </div>\n\n <div class=\"edit-form-group\">\n <label class=\"edit-form-label\">Company</label>\n <div class=\"edit-readonly-field\">\n {{ EditingSummary.Integration.Company }}\n </div>\n </div>\n </div>\n\n <!-- Footer -->\n <div class=\"edit-panel-footer\">\n <button mjButton\n variant=\"primary\"\n [disabled]=\"IsEditSaving || !EditName.trim()\"\n (click)=\"SaveEditChanges()\">\n @if (IsEditSaving) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Saving...\n } @else {\n Save Changes\n }\n </button>\n <button mjButton variant=\"outline\" (click)=\"CloseEditPanel()\">\n Cancel\n </button>\n </div>\n }\n }\n</div>\n\n<!-- Credential dialog (shared between wizard and edit panel) -->\n@if (ShowCredentialDialog) {\n <mj-credential-dialog\n [Visible]=\"true\"\n [PreselectedTypeId]=\"PreselectedCredentialTypeId\"\n (close)=\"EditPanelOpen ? OnEditCredentialDialogClose($event) : OnCredentialDialogClose($event)\">\n </mj-credential-dialog>\n}\n\n<!-- New Entity dialog -->\n@if (ShowCreateEntity) {\n <div class=\"new-entity-backdrop\" (click)=\"CloseNewEntityDialog()\"></div>\n <div class=\"new-entity-dialog\">\n <div class=\"new-entity-dialog-header\">\n <h3>Create New Entity Table</h3>\n <button class=\"new-entity-dialog-close\" (click)=\"CloseNewEntityDialog()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n </div>\n <div class=\"new-entity-dialog-body\">\n <p class=\"new-entity-dialog-desc\">\n Generate a SQL migration to create a new database table for this integration's data.\n After running the migration and CodeGen, the new entity will appear in the entity picker.\n </p>\n\n <div class=\"new-entity-dialog-form\">\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Source Object</label>\n <div class=\"new-entity-dialog-value\">\n @if (AddMapSourceObjectName) {\n {{ AddMapSourceObjectName }}\n } @else {\n <span class=\"new-entity-dialog-hint\">Select a source object in the Add Map form first</span>\n }\n </div>\n </div>\n </div>\n <div class=\"new-entity-dialog-row\">\n <div class=\"new-entity-dialog-field\">\n <label class=\"new-entity-dialog-label\">Schema</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. hubspot\"\n [(ngModel)]=\"NewEntitySchema\" />\n </div>\n <span class=\"new-entity-dialog-dot\">.</span>\n <div class=\"new-entity-dialog-field new-entity-dialog-field-wide\">\n <label class=\"new-entity-dialog-label\">Table Name</label>\n <input type=\"text\"\n class=\"new-entity-dialog-input\"\n placeholder=\"e.g. Contact\"\n [(ngModel)]=\"NewEntityTable\" />\n </div>\n </div>\n </div>\n\n @if (DDLPreviewWarnings.length > 0) {\n <div class=\"ddl-warnings\">\n @for (warn of DDLPreviewWarnings; track warn) {\n <div class=\"ddl-warning\"><i class=\"fa-solid fa-triangle-exclamation\"></i> {{ warn }}</div>\n }\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"ddl-preview-block\">\n <div class=\"ddl-preview-header\">\n <span>SQL Preview</span>\n <button class=\"ddl-copy-btn\" (click)=\"CopyDDLToClipboard()\" title=\"Copy to clipboard\">\n @if (DDLCopied) {\n <i class=\"fa-solid fa-check\"></i> Copied\n } @else {\n <i class=\"fa-regular fa-copy\"></i> Copy\n }\n </button>\n </div>\n <pre class=\"ddl-preview-code\">{{ DDLPreview }}</pre>\n </div>\n }\n\n @if (DDLPreview) {\n <div class=\"new-entity-next-steps\">\n <h4><i class=\"fa-solid fa-list-check\"></i> Next Steps</h4>\n <ol>\n <li>Copy the SQL above and save it as a migration file</li>\n <li>Run the migration against your database</li>\n <li>Run CodeGen to register the new entity in MemberJunction</li>\n <li>Refresh the page — the new entity will appear in the entity picker</li>\n </ol>\n </div>\n }\n </div>\n <div class=\"new-entity-dialog-footer\">\n <button class=\"new-entity-preview-btn\"\n [disabled]=\"!CanGenerateSQL || IsGeneratingDDL\"\n (click)=\"PreviewDDL()\">\n @if (IsGeneratingDDL) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Generating...\n } @else {\n <i class=\"fa-solid fa-code\"></i> Generate SQL\n }\n </button>\n <button class=\"new-entity-dialog-done-btn\" (click)=\"CloseNewEntityDialog()\">\n Done\n </button>\n </div>\n </div>\n}\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* ---------------------------------------------------------------------------\n Host & Container \u2014 flex chain for scrollable detail view\n --------------------------------------------------------------------------- */\n\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n}\n\n/* Slot passthrough now in <mj-page-header>; stat badges now via <mj-stat-badge>. */\n\n.connections-container {\n padding: 24px;\n max-width: 1400px;\n width: 100%;\n margin: 0 auto;\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 0;\n overflow-y: auto;\n box-sizing: border-box;\n}\n\n/* When detail or editor view is active, prevent container scrolling\n so the inner .detail-table-body handles its own scroll */\n.connections-container.detail-active,\n.connections-container.editor-active {\n overflow: hidden;\n}\n\n/* ---------------------------------------------------------------------------\n Loading & Empty States\n --------------------------------------------------------------------------- */\n\n.loading-container {\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 300px;\n}\n\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n min-height: 400px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.empty-icon {\n font-size: 48px;\n color: var(--mj-text-disabled);\n margin-bottom: 16px;\n}\n\n.empty-state h3 {\n font-size: 20px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 8px;\n}\n\n.empty-state p {\n font-size: 14px;\n margin: 0 0 24px;\n}\n\n/* ---------------------------------------------------------------------------\n Card Grid\n --------------------------------------------------------------------------- */\n\n.card-grid {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));\n gap: 20px;\n}\n\n/* ---------------------------------------------------------------------------\n Connection Card\n --------------------------------------------------------------------------- */\n\n.connection-card {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.06);\n transition: box-shadow 0.2s ease, transform 0.2s ease;\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n}\n\n.connection-card:hover {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n transform: translateY(-2px);\n}\n\n/* Card Header */\n.card-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 16px 0;\n}\n\n.icon-circle {\n width: 48px;\n height: 48px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n flex-shrink: 0;\n}\n\n.icon-large {\n font-size: 22px;\n}\n\n/* Status Badge */\n.status-badge {\n font-size: 12px;\n font-weight: 600;\n padding: 4px 10px;\n border-radius: 20px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n}\n\n.status-badge-connected {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.status-badge-error {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.status-badge-inactive {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-muted);\n}\n\n.status-badge-syncing {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n/* Card Body */\n.card-body {\n padding: 12px 16px;\n flex: 1;\n}\n\n.card-name {\n font-size: 18px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin-bottom: 2px;\n}\n\n.card-company {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin-bottom: 10px;\n}\n\n.card-meta {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 6px;\n}\n\n.meta-separator {\n margin: 0 6px;\n}\n\n.meta-label {\n font-weight: 500;\n}\n\n.card-sync-info {\n font-size: 13px;\n color: var(--mj-text-muted);\n margin-bottom: 8px;\n}\n\n.card-sync-info i {\n margin-right: 4px;\n color: var(--mj-text-disabled);\n}\n\n/* Card inline test result */\n.card-test-result {\n font-size: 12px;\n padding: 6px 10px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 6px;\n margin-top: 8px;\n}\n\n.card-test-result.test-success {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.card-test-result.test-failure {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.card-test-result span {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Card Footer */\n.card-footer {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.card-footer button {\n font-size: 13px;\n}\n\n/* Sync dropdown menu */\n.sync-menu-wrapper {\n position: relative;\n display: inline-flex;\n}\n\n.sync-caret {\n font-size: 10px;\n margin-left: 4px;\n opacity: 0.8;\n}\n\n.sync-dropdown {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n z-index: 1000;\n background: var(--mj-bg-surface-elevated);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 8px 24px rgba(0,0,0,0.12);\n min-width: 220px;\n overflow: hidden;\n}\n\n.sync-dropdown-left {\n left: auto;\n right: 0;\n}\n\n.sync-dropdown-group {\n padding: 8px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.sync-dropdown-group:last-child {\n border-bottom: none;\n}\n\n.sync-dropdown-label {\n display: block;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--mj-text-muted);\n padding: 0 12px 4px;\n}\n\n.sync-dropdown-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 7px 12px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n text-align: left;\n transition: background 0.12s;\n}\n\n.sync-dropdown-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.sync-dropdown-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-secondary);\n flex-shrink: 0;\n}\n\n/* Card Delete Button */\n.card-delete-btn {\n margin-left: auto;\n background: none;\n border: 1px solid transparent;\n cursor: pointer;\n padding: 4px 8px;\n border-radius: 6px;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: all 0.15s;\n}\n\n.card-delete-btn:hover {\n background: var(--mj-status-error-bg);\n border-color: var(--mj-status-error-border);\n color: var(--mj-status-error);\n}\n\n.menu-trigger:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.card-menu-dropdown {\n position: absolute;\n right: 0;\n top: 100%;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n min-width: 160px;\n z-index: 50;\n padding: 4px;\n}\n\n.menu-item {\n display: flex;\n align-items: center;\n gap: 8px;\n width: 100%;\n padding: 8px 12px;\n border: none;\n background: none;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-secondary);\n border-radius: 6px;\n transition: background 0.15s;\n text-align: left;\n}\n\n.menu-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.menu-item i {\n width: 16px;\n text-align: center;\n color: var(--mj-text-muted);\n}\n\n.menu-item-danger {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger i {\n color: var(--mj-status-error);\n}\n\n.menu-item-danger:hover {\n background: var(--mj-status-error-bg);\n}\n\n/* ---------------------------------------------------------------------------\n New Connection Card\n --------------------------------------------------------------------------- */\n\n.new-connection-card {\n border: 2px dashed var(--mj-border-strong);\n background: var(--mj-bg-page);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 200px;\n transition: background 0.2s, border-color 0.2s;\n}\n\n.new-connection-card:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n box-shadow: none;\n transform: none;\n}\n\n.new-card-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n}\n\n.new-card-icon {\n width: 56px;\n height: 56px;\n border-radius: 50%;\n background: var(--mj-bg-surface-active);\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 24px;\n color: var(--mj-text-muted);\n transition: background 0.2s, color 0.2s;\n}\n\n.new-connection-card:hover .new-card-icon {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n}\n\n.new-card-label {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-muted);\n}\n\n.new-connection-card:hover .new-card-label {\n color: var(--mj-brand-primary);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard (inline, replaces card grid)\n --------------------------------------------------------------------------- */\n\n.wizard-inline {\n display: flex;\n flex-direction: column;\n height: 100%;\n max-width: 720px;\n margin: 0 auto;\n}\n\n/* Wizard Header */\n.wizard-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding: 0 0 20px;\n}\n\n.wizard-back-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n background: none;\n border: none;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-muted);\n padding: 6px 10px;\n border-radius: 6px;\n transition: background 0.15s, color 0.15s;\n}\n\n.wizard-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.wizard-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Step Indicator\n --------------------------------------------------------------------------- */\n\n.step-indicator {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 32px;\n gap: 0;\n}\n\n.step-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.step-circle {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 13px;\n font-weight: 600;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n border: 2px solid var(--mj-border-default);\n transition: all 0.2s;\n}\n\n.step-active .step-circle {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.step-completed .step-circle {\n background: var(--mj-status-success);\n color: var(--mj-text-inverse);\n border-color: var(--mj-status-success);\n}\n\n.step-label {\n font-size: 11px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n white-space: nowrap;\n}\n\n.step-active .step-label {\n color: var(--mj-brand-primary);\n font-weight: 600;\n}\n\n.step-completed .step-label {\n color: var(--mj-status-success);\n}\n\n.step-line {\n width: 48px;\n height: 2px;\n background: var(--mj-border-default);\n margin: 0 8px;\n margin-bottom: 20px;\n transition: background 0.2s;\n}\n\n.step-line-active {\n background: var(--mj-status-success);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Body\n --------------------------------------------------------------------------- */\n\n.wizard-body {\n flex: 1;\n overflow-y: auto;\n padding: 0 24px 24px;\n}\n\n.step-content {\n min-height: 300px;\n}\n\n.step-content-centered {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n}\n\n.step-title {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin: 0 0 20px;\n}\n\n.step-content-centered .step-title {\n margin-bottom: 32px;\n}\n\n/* Search bar */\n.search-bar {\n position: relative;\n margin-bottom: 20px;\n}\n\n.search-icon {\n position: absolute;\n left: 14px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.search-input {\n width: 100%;\n padding: 10px 14px 10px 40px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.search-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.search-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* No integrations */\n.no-integrations {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px 24px;\n color: var(--mj-text-disabled);\n text-align: center;\n}\n\n.no-integrations i {\n font-size: 36px;\n margin-bottom: 12px;\n}\n\n.no-integrations p {\n font-size: 16px;\n font-weight: 500;\n color: var(--mj-text-muted);\n margin: 0 0 4px;\n}\n\n.no-integrations-hint {\n font-size: 13px;\n}\n\n/* Integration picker grid */\n.integration-picker-grid {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n gap: 12px;\n}\n\n.integration-picker-card {\n border: 2px solid var(--mj-border-default);\n border-radius: 10px;\n padding: 16px;\n cursor: pointer;\n text-align: center;\n transition: border-color 0.2s, background 0.15s;\n}\n\n.integration-picker-card:hover {\n border-color: var(--mj-brand-primary);\n background: var(--mj-bg-page);\n}\n\n.integration-picker-card.picker-selected {\n border-color: var(--mj-brand-primary);\n background: var(--mj-status-info-bg);\n}\n\n.picker-icon-circle {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n margin: 0 auto 10px;\n font-size: 18px;\n}\n\n.picker-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n margin-bottom: 4px;\n}\n\n.picker-description {\n font-size: 12px;\n color: var(--mj-text-disabled);\n line-height: 1.3;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n}\n\n/* ---------------------------------------------------------------------------\n Form Controls (Step 2)\n --------------------------------------------------------------------------- */\n\n.form-group {\n margin-bottom: 20px;\n}\n\n.form-label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin-bottom: 6px;\n}\n\n.optional-label {\n font-weight: 400;\n color: var(--mj-text-disabled);\n}\n\n.form-input {\n width: 100%;\n padding: 10px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n transition: border-color 0.2s, box-shadow 0.2s;\n box-sizing: border-box;\n}\n\n.form-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.form-input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n.form-input:disabled {\n background: var(--mj-bg-page);\n color: var(--mj-text-muted);\n}\n\n.form-textarea {\n resize: vertical;\n min-height: 72px;\n}\n\n.form-hint {\n font-size: 13px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n/* Credential section */\n.credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n border-radius: 8px;\n}\n\n.credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n color: var(--mj-status-success-text);\n font-size: 14px;\n font-weight: 500;\n}\n\n.credential-info i {\n color: var(--mj-status-success);\n}\n\n.credential-clear {\n background: none;\n border: none;\n cursor: pointer;\n color: var(--mj-text-disabled);\n font-size: 14px;\n padding: 4px;\n border-radius: 4px;\n transition: color 0.15s;\n}\n\n.credential-clear:hover {\n color: var(--mj-status-error);\n}\n\n.credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.credential-actions button {\n font-size: 13px;\n}\n\n.credential-loading {\n padding: 16px 0;\n}\n\n.credential-list {\n margin-top: 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n overflow: hidden;\n}\n\n.credential-list-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n cursor: pointer;\n font-size: 14px;\n color: var(--mj-text-secondary);\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n}\n\n.credential-list-item:last-child {\n border-bottom: none;\n}\n\n.credential-list-item:hover {\n background: var(--mj-bg-page);\n}\n\n.credential-list-item i {\n color: var(--mj-text-disabled);\n}\n\n/* ---------------------------------------------------------------------------\n Test Connection (Step 3)\n --------------------------------------------------------------------------- */\n\n.test-prompt {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n}\n\n.test-hint {\n font-size: 14px;\n color: var(--mj-text-disabled);\n margin: 0;\n}\n\n.test-running {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n color: var(--mj-brand-primary);\n}\n\n.test-spinner {\n width: 64px;\n height: 64px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.test-running p {\n font-size: 15px;\n font-weight: 500;\n margin: 0;\n}\n\n/* Test result */\n.test-result {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 24px;\n border-radius: 12px;\n max-width: 400px;\n}\n\n.test-result-success {\n background: var(--mj-status-success-bg);\n}\n\n.test-result-failure {\n background: var(--mj-status-error-bg);\n}\n\n.test-result-icon {\n font-size: 48px;\n animation: scaleIn 0.3s ease-out;\n}\n\n.test-result-success .test-result-icon {\n color: var(--mj-status-success);\n}\n\n.test-result-failure .test-result-icon {\n color: var(--mj-status-error);\n}\n\n@keyframes scaleIn {\n from {\n transform: scale(0.5);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n.test-result-message {\n font-size: 15px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n text-align: center;\n}\n\n.test-result-detail {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.test-retry-btn {\n margin-top: 4px;\n}\n\n/* Toggle switch */\n.toggle-switch {\n position: relative;\n display: inline-block;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.toggle-switch input {\n opacity: 0;\n width: 0;\n height: 0;\n}\n\n.toggle-slider {\n position: absolute;\n cursor: pointer;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: var(--mj-border-strong);\n border-radius: 24px;\n transition: background 0.2s;\n}\n\n.toggle-slider::before {\n content: '';\n position: absolute;\n height: 18px;\n width: 18px;\n left: 3px;\n bottom: 3px;\n background: var(--mj-bg-surface);\n border-radius: 50%;\n transition: transform 0.2s;\n}\n\n.toggle-switch input:checked + .toggle-slider {\n background: var(--mj-brand-primary);\n}\n\n.toggle-switch input:checked + .toggle-slider::before {\n transform: translateX(20px);\n}\n\n/* ---------------------------------------------------------------------------\n Wizard Footer\n --------------------------------------------------------------------------- */\n\n.wizard-footer {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n border-top: 1px solid var(--mj-border-subtle);\n}\n\n.footer-left {\n display: flex;\n align-items: center;\n}\n\n.footer-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* ---------------------------------------------------------------------------\n Responsive\n --------------------------------------------------------------------------- */\n\n@media (max-width: 768px) {\n .connections-container {\n padding: 16px;\n }\n\n .card-grid {\n grid-template-columns: 1fr;\n }\n\n .integration-picker-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n\n .step-indicator {\n padding: 16px;\n overflow-x: auto;\n }\n\n .step-line {\n width: 24px;\n }\n\n .credential-actions {\n flex-direction: column;\n }\n}\n\n@media (max-width: 480px) {\n .integration-picker-grid {\n grid-template-columns: 1fr;\n }\n\n .card-footer {\n flex-wrap: wrap;\n }\n}\n\n/* ---------------------------------------------------------------------------\n Delete confirmation overlay\n --------------------------------------------------------------------------- */\n\n.delete-confirm-overlay {\n position: absolute;\n inset: 0;\n background: rgba(255, 255, 255, 0.95);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n border-radius: 12px;\n animation: fadeIn 150ms ease;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.delete-confirm-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n padding: 20px;\n text-align: center;\n}\n\n.delete-warn-icon {\n font-size: 28px;\n color: var(--mj-status-error);\n}\n\n.delete-confirm-text {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-secondary);\n max-width: 220px;\n}\n\n.delete-confirm-actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n/* ---------------------------------------------------------------------------\n Edit panel (slide-in)\n --------------------------------------------------------------------------- */\n\n.edit-panel-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.1);\n z-index: 99;\n opacity: 0;\n pointer-events: none;\n transition: opacity 300ms ease;\n}\n\n.edit-panel-backdrop.open {\n opacity: 1;\n pointer-events: auto;\n}\n\n.edit-panel {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n width: 400px;\n max-width: 100%;\n background: var(--mj-bg-surface);\n border-left: 1px solid var(--mj-border-default);\n box-shadow: -8px 0 24px rgba(0, 0, 0, 0.08);\n z-index: 100;\n transform: translateX(100%);\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.edit-panel.open {\n transform: translateX(0);\n}\n\n.edit-panel-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n.edit-panel-title {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.edit-icon-circle {\n width: 32px;\n height: 32px;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-inverse);\n font-size: 14px;\n}\n\n.edit-close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border: none;\n border-radius: 6px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n font-size: 14px;\n transition: all 150ms ease;\n}\n\n.edit-close-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-secondary);\n}\n\n.edit-panel-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 48px 20px;\n}\n\n.edit-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 20px;\n}\n\n.edit-form-group {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.edit-form-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n}\n\n.edit-form-input {\n height: 36px;\n padding: 0 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 14px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n transition: border-color 150ms ease;\n}\n\n.edit-form-input:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.edit-readonly-field {\n padding: 8px 12px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.edit-toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n}\n\n.edit-toggle-label {\n font-size: 13px;\n font-weight: 500;\n color: var(--mj-text-disabled);\n}\n\n.edit-toggle-label.active {\n color: var(--mj-status-success);\n}\n\n.edit-credential-selected {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-page);\n}\n\n.edit-credential-info {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.edit-credential-info i {\n color: var(--mj-brand-primary);\n}\n\n.edit-credential-clear {\n width: 24px;\n height: 24px;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: var(--mj-text-disabled);\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n transition: all 150ms ease;\n}\n\n.edit-credential-clear:hover {\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error);\n}\n\n.edit-credential-actions {\n display: flex;\n gap: 8px;\n}\n\n.edit-credential-list {\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin-top: 6px;\n max-height: 180px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n}\n\n.edit-credential-item {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 150ms ease;\n}\n\n.edit-credential-item:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.edit-credential-item i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.edit-panel-footer {\n display: flex;\n gap: 8px;\n padding: 16px 20px;\n border-top: 1px solid var(--mj-border-default);\n flex-shrink: 0;\n}\n\n/* ---------------------------------------------------------------------------\n Card clickable area\n --------------------------------------------------------------------------- */\n\n.card-clickable {\n cursor: pointer;\n}\n\n/* ---------------------------------------------------------------------------\n Detail View (entity maps for a selected integration)\n --------------------------------------------------------------------------- */\n\n.detail-view {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n\n.detail-header {\n display: flex;\n align-items: center;\n gap: 16px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n margin-bottom: 16px;\n flex-wrap: wrap;\n}\n\n.detail-header-info {\n display: flex;\n align-items: center;\n gap: 12px;\n flex: 1;\n min-width: 0;\n}\n\n.detail-header-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n}\n\n.detail-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-primary);\n margin: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.detail-subtitle {\n font-size: 13px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n\n.detail-header-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0;\n}\n\n/* Schedule section */\n.schedule-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 12px;\n padding: 16px 20px;\n margin-bottom: 16px;\n}\n\n.schedule-section-header {\n margin-bottom: 12px;\n}\n\n.schedule-section-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.8rem;\n font-weight: 700;\n color: var(--mj-text-secondary);\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.schedule-section-title i {\n color: var(--mj-brand-primary);\n}\n\n.schedule-empty {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 0;\n}\n\n.schedule-empty-text {\n font-size: 0.85rem;\n color: var(--mj-text-disabled);\n}\n\n.schedule-create-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n background: linear-gradient(135deg, var(--mj-brand-primary) 0%, var(--mj-brand-primary-active) 100%);\n color: white;\n border: none;\n border-radius: 8px;\n cursor: pointer;\n font-size: 0.8rem;\n font-weight: 600;\n transition: all 0.2s ease;\n}\n\n.schedule-create-btn:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px color-mix(in srgb, var(--mj-brand-primary) 40%, transparent);\n}\n\n/* Detail toolbar */\n.detail-toolbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n}\n\n.detail-toolbar-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.detail-map-count {\n font-size: 13px;\n color: var(--mj-text-muted);\n font-weight: 500;\n}\n\n.detail-search {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n}\n\n.detail-search i {\n color: var(--mj-text-disabled);\n font-size: 12px;\n}\n\n.detail-search input {\n border: none;\n outline: none;\n background: transparent;\n font-size: 13px;\n color: var(--mj-text-primary);\n width: 200px;\n}\n\n.detail-search input::placeholder {\n color: var(--mj-text-disabled);\n}\n\n/* Add Map button */\n.add-map-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface-card);\n color: var(--mj-brand-primary-hover);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-border-strong);\n}\n\n.add-map-btn.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn {\n background: var(--mj-brand-primary);\n color: var(--mj-text-inverse);\n border-color: var(--mj-brand-primary);\n}\n\n.apply-all-btn:hover {\n background: var(--mj-brand-primary-hover);\n border-color: var(--mj-brand-primary-hover);\n}\n\n.apply-all-btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.add-map-btn-lg {\n margin-top: 16px;\n padding: 10px 20px;\n font-size: 14px;\n}\n\n/* Add map inline panel */\n.add-map-panel {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n animation: fadeIn 200ms ease;\n}\n\n.add-map-row {\n display: flex;\n align-items: flex-end;\n gap: 12px;\n}\n\n.add-map-field {\n flex: 1;\n min-width: 0;\n}\n\n.add-map-label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.3px;\n margin-bottom: 6px;\n}\n\n.add-map-select {\n width: 100%;\n height: 34px;\n padding: 0 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n font-size: 13px;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n outline: none;\n cursor: pointer;\n}\n\n.add-map-select:focus {\n border-color: var(--mj-brand-primary);\n}\n\n.add-map-direction-col {\n flex-shrink: 0;\n}\n\n.add-map-direction-btns {\n display: flex;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n overflow: hidden;\n}\n\n.add-map-direction-btns button {\n padding: 7px 12px;\n border: none;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n font-size: 13px;\n cursor: pointer;\n transition: all 150ms ease;\n border-right: 1px solid var(--mj-border-default);\n}\n\n.add-map-direction-btns button:last-child {\n border-right: none;\n}\n\n.add-map-direction-btns button:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.add-map-direction-btns button.active {\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n}\n\n.add-map-actions {\n display: flex;\n gap: 6px;\n flex-shrink: 0;\n}\n\n.add-map-save-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 16px;\n border: none;\n border-radius: 6px;\n background: var(--mj-brand-primary);\n color: var(--mj-bg-surface);\n font-size: 13px;\n font-weight: 500;\n cursor: pointer;\n transition: all 150ms ease;\n white-space: nowrap;\n}\n\n.add-map-save-btn:hover {\n background: var(--mj-brand-primary-hover);\n}\n\n.add-map-save-btn:disabled {\n opacity: 0.5;\n cursor: default;\n}\n\n.add-map-cancel-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 34px;\n height: 34px;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-muted);\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n\n.add-map-cancel-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.add-map-loading {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n}\n\n.add-map-loading i {\n color: var(--mj-brand-primary);\n margin-right: 4px;\n}\n\n.add-map-hint {\n font-size: 12px;\n color: var(--mj-text-disabled);\n padding: 8px 0;\n font-style: italic;\n}\n\n/* Entity field needs more room for tree dropdown */\n.add-map-entity-field {\n flex: 2;\n min-width: 280px;\n}\n\n/* Entity picker row: tree dropdown + New button side by side */\n.entity-picker-row {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n\n.entity-picker-row mj-tree-dropdown {\n flex: 1;\n min-width: 0;\n}\n\n.new-entity-btn {\n flex-shrink: 0;\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 7px 12px;\n font-size: 12px;\n font-weight: 600;\n color: var(--mj-brand-primary);\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: all 0.15s ease;\n}\n\n.new-entity-btn:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 15%, var(--mj-bg-surface));\n border-color: color-mix(in srgb, var(--mj-brand-primary) 30%, transparent);\n}\n\n/* ---------------------------------------------------------------------------\n Sync Result Banner\n --------------------------------------------------------------------------- */\n\n.sync-result-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n font-weight: 500;\n margin-bottom: 12px;\n animation: fadeIn 200ms ease;\n}\n\n.sync-result-banner.sync-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.sync-result-banner.sync-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n/* ---------------------------------------------------------------------------\n Auto-Map Schema Panel\n --------------------------------------------------------------------------- */\n\n.auto-map-header {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 12px;\n font-size: 13px;\n color: var(--mj-text-secondary);\n}\n\n.auto-map-header i {\n color: var(--mj-brand-primary);\n}\n\n.auto-map-result {\n margin-top: 12px;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 13px;\n}\n\n.auto-map-result.auto-map-success {\n background: var(--mj-status-success-bg);\n border: 1px solid var(--mj-status-success-border);\n color: var(--mj-status-success-text);\n}\n\n.auto-map-result.auto-map-partial {\n background: var(--mj-status-warning-bg);\n border: 1px solid var(--mj-status-warning-border);\n color: var(--mj-status-warning-text);\n}\n\n.auto-map-result.auto-map-failure {\n background: var(--mj-status-error-bg);\n border: 1px solid var(--mj-status-error-border);\n color: var(--mj-status-error-text);\n}\n\n.auto-map-result-summary {\n display: flex;\n align-items: center;\n gap: 8px;\n font-weight: 500;\n}\n\n.auto-map-errors {\n margin-top: 6px;\n font-size: 12px;\n}\n\n.auto-map-error {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 2px 0;\n}\n\n/* ---------------------------------------------------------------------------\n New Entity Dialog\n --------------------------------------------------------------------------- */\n\n.new-entity-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.4);\n z-index: 1000;\n animation: fadeIn 0.15s ease;\n}\n\n.new-entity-dialog {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 640px;\n max-width: 90vw;\n max-height: 85vh;\n background: var(--mj-bg-surface);\n border-radius: var(--mj-radius-lg);\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.2);\n z-index: 1001;\n display: flex;\n flex-direction: column;\n animation: fadeIn 0.2s ease;\n}\n\n.new-entity-dialog-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n}\n\n.new-entity-dialog-header h3 {\n margin: 0;\n font-size: var(--mj-text-base);\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-close {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n font-size: var(--mj-text-sm);\n color: var(--mj-text-secondary);\n background: transparent;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-close:hover {\n background: var(--mj-bg-surface-card);\n color: var(--mj-text-primary);\n}\n\n.new-entity-dialog-body {\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.new-entity-dialog-desc {\n margin: 0;\n font-size: 13px;\n color: var(--mj-text-secondary);\n line-height: 1.5;\n}\n\n.new-entity-dialog-form {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.new-entity-dialog-row {\n display: flex;\n align-items: flex-end;\n gap: 8px;\n}\n\n.new-entity-dialog-field {\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 120px;\n}\n\n.new-entity-dialog-field-wide {\n flex: 1;\n}\n\n.new-entity-dialog-label {\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.new-entity-dialog-input {\n padding: 8px 12px;\n font-size: var(--mj-text-sm);\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n transition: border-color 0.15s ease;\n}\n\n.new-entity-dialog-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px rgba(99, 102, 241, 0.1);\n}\n\n.new-entity-dialog-dot {\n font-size: 20px;\n font-weight: 700;\n color: var(--mj-text-secondary);\n padding-bottom: 6px;\n user-select: none;\n}\n\n.new-entity-dialog-value {\n font-size: 14px;\n font-weight: 500;\n color: var(--mj-text-primary);\n padding: 8px 0 4px;\n}\n\n.new-entity-dialog-hint {\n font-style: italic;\n color: var(--mj-text-disabled);\n font-weight: 400;\n}\n\n.new-entity-dialog-footer {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 8px;\n padding: 12px 20px;\n border-top: 1px solid var(--mj-border-default);\n}\n\n.new-entity-preview-btn {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-inverse);\n background: var(--mj-brand-primary);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n white-space: nowrap;\n transition: background 0.15s ease;\n}\n\n.new-entity-preview-btn:hover:not(:disabled) {\n background: var(--mj-brand-primary-hover);\n}\n\n.new-entity-preview-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.new-entity-dialog-done-btn {\n display: inline-flex;\n align-items: center;\n padding: 8px 16px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-md);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.new-entity-dialog-done-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* Next steps callout inside dialog */\n.new-entity-next-steps {\n background: var(--mj-brand-primary-subtle);\n border: 1px solid color-mix(in srgb, var(--mj-brand-primary) 20%, transparent);\n border-radius: var(--mj-radius-md);\n padding: 14px 16px;\n}\n\n.new-entity-next-steps h4 {\n margin: 0 0 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-brand-primary-hover);\n}\n\n.new-entity-next-steps h4 i {\n margin-right: 6px;\n}\n\n.new-entity-next-steps ol {\n margin: 0;\n padding-left: 20px;\n font-size: 13px;\n color: var(--mj-brand-primary-hover);\n line-height: 1.7;\n}\n\n/* DDL copy button */\n.ddl-copy-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 3px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n background: transparent;\n border: 1px solid var(--mj-border-strong);\n border-radius: var(--mj-radius-sm);\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.ddl-copy-btn:hover {\n background: var(--mj-bg-surface-card);\n border-color: var(--mj-text-disabled);\n}\n\n/* DDL Preview */\n.ddl-warnings {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.ddl-warning {\n font-size: 12px;\n color: var(--mj-status-warning);\n background: var(--mj-status-warning-subtle);\n padding: 6px 10px;\n border-radius: var(--mj-radius-sm);\n border-left: 3px solid var(--mj-status-warning);\n}\n\n.ddl-warning i {\n margin-right: 4px;\n}\n\n.ddl-preview-block {\n border: 1px solid var(--mj-border-default);\n border-radius: var(--mj-radius-md);\n overflow: hidden;\n max-height: 300px;\n display: flex;\n flex-direction: column;\n}\n\n.ddl-preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-default);\n font-size: var(--mj-text-xs);\n font-weight: 600;\n color: var(--mj-text-secondary);\n}\n\n.ddl-preview-code {\n margin: 0;\n padding: 12px 16px;\n font-size: 12px;\n font-family: 'SF Mono', 'Fira Code', 'Cascadia Code', monospace;\n line-height: 1.6;\n color: var(--mj-text-primary);\n background: var(--mj-bg-surface);\n overflow: auto;\n white-space: pre-wrap;\n word-break: break-word;\n flex: 1;\n}\n\n@keyframes fadeIn {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n/* Detail empty state */\n.detail-empty {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 64px 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty i {\n font-size: 36px;\n margin-bottom: 12px;\n color: var(--mj-text-disabled);\n}\n\n.detail-empty h3 {\n font-size: 18px;\n font-weight: 600;\n color: var(--mj-text-secondary);\n margin: 0 0 6px;\n}\n\n.detail-empty p {\n font-size: 13px;\n margin: 0;\n max-width: 400px;\n}\n\n/* Detail table */\n.detail-table-head {\n display: flex;\n align-items: center;\n padding: 8px 16px;\n background: var(--mj-bg-page);\n border: 1px solid var(--mj-border-default);\n border-radius: 8px 8px 0 0;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n color: var(--mj-text-secondary);\n}\n\n.detail-table-body {\n border: 1px solid var(--mj-border-default);\n border-top: none;\n border-radius: 0 0 8px 8px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.detail-map-row {\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.15s;\n font-size: 13px;\n}\n\n.detail-map-row:last-child {\n border-bottom: none;\n}\n\n.detail-map-row:hover {\n background: var(--mj-bg-page);\n cursor: pointer;\n}\n\n.detail-map-row.sync-disabled {\n opacity: 0.5;\n}\n\n/* Column widths (shared between head and body) */\n.dt-col-toggle {\n width: 60px;\n flex-shrink: 0;\n}\n\n.dt-col-source {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.dt-col-direction {\n width: 80px;\n flex-shrink: 0;\n text-align: center;\n}\n\n.dt-col-dest {\n flex: 2;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--mj-text-primary);\n}\n\n.dt-col-meta {\n width: 80px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n gap: 6px;\n justify-content: flex-end;\n}\n\n/* Direction badge */\n.direction-badge {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 4px;\n white-space: nowrap;\n}\n\n/* Clickable direction toggle button */\nbutton.direction-toggle {\n border: 1px solid transparent;\n cursor: pointer;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\nbutton.direction-toggle:hover {\n border-color: var(--mj-border-strong);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n}\n\n.direction-badge.pull {\n background: var(--mj-status-info-bg);\n color: var(--mj-brand-primary);\n}\n\n.direction-badge.push {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success);\n}\n\n.direction-badge.bidirectional {\n background: var(--mj-status-warning-subtle);\n color: var(--mj-status-warning);\n}\n\n/* Create Tables list */\n.create-tables-list {\n max-height: 300px;\n overflow-y: auto;\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n margin-top: 8px;\n background: var(--mj-bg-surface);\n}\n.create-tables-select-all {\n padding: 8px 12px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface-card);\n font-weight: 600;\n}\n.create-tables-checkbox {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n cursor: pointer;\n font-size: 13px;\n color: var(--mj-text-primary);\n}\n.create-tables-checkbox:hover {\n background: var(--mj-bg-surface-hover);\n}\n.create-tables-checkbox input[type=\"checkbox\"] {\n width: 16px;\n height: 16px;\n cursor: pointer;\n}\n.create-tables-name-hint {\n color: var(--mj-text-muted);\n font-size: 11px;\n margin-left: 8px;\n}\n.create-tables-filters {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 8px 0;\n flex-wrap: wrap;\n}\n.create-tables-search {\n flex: 1 1 240px;\n min-width: 200px;\n}\n.create-tables-toggle {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n}\n.create-tables-toggle input[type=\"checkbox\"] {\n margin: 0;\n}\n.create-tables-badge {\n display: inline-block;\n margin-left: 6px;\n padding: 1px 6px;\n font-size: 10px;\n font-weight: 600;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n line-height: 1.4;\n}\n.create-tables-badge-custom {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n.create-tables-badge-registered {\n background: var(--mj-status-success-bg);\n color: var(--mj-status-success-text);\n}\n.add-map-input {\n width: 100%;\n padding: 6px 10px;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n font-size: 13px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n}\n.add-map-input:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n\n/* Config badges */\n.detail-config-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 4px;\n background: var(--mj-bg-surface-active);\n color: var(--mj-text-disabled);\n font-size: 11px;\n}\n\n/* Detail back button (icon-only) */\n.detail-back-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 16px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-back-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Detail edit button (icon-only) */\n.detail-edit-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n cursor: pointer;\n font-size: 14px;\n transition: background 0.15s, color 0.15s, border-color 0.15s;\n flex-shrink: 0;\n}\n\n.detail-edit-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n border-color: var(--mj-border-strong);\n}\n\n/* Chevron hint on entity map rows */\n.map-edit-hint {\n color: var(--mj-text-disabled);\n font-size: 11px;\n transition: color 0.15s;\n}\n\n.detail-map-row:hover .map-edit-hint {\n color: var(--mj-brand-primary);\n}\n\n/* Entity map editor header */\n.ve-header-title-inline {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 16px;\n font-weight: 600;\n}\n\n.ve-source-label {\n color: var(--mj-brand-primary);\n}\n\n.ve-direction-icon {\n color: var(--mj-text-disabled);\n font-size: 14px;\n}\n\n.ve-dest-label {\n color: var(--mj-status-success);\n}\n\n.ve-stat-inline {\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.ve-stat-inline strong {\n color: var(--mj-text-primary);\n font-weight: 600;\n}\n\n.detail-table-empty {\n padding: 24px;\n text-align: center;\n color: var(--mj-text-disabled);\n font-size: 13px;\n}\n\n/* ---------------------------------------------------------------------------\n Discovered Source Objects Section\n --------------------------------------------------------------------------- */\n\n.discovered-objects-section {\n margin: 12px 0;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n overflow: hidden;\n}\n\n.discovered-objects-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px 14px;\n background: var(--mj-bg-surface-card);\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.discovered-objects-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.discovered-objects-title i {\n color: var(--mj-brand-primary);\n}\n\n.discovered-count {\n font-weight: 400;\n color: var(--mj-text-muted);\n font-size: 12px;\n}\n\n.discovered-objects-actions {\n display: flex;\n gap: 8px;\n}\n\n.discovered-action-btn {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n background: none;\n border: 1px solid var(--mj-border-default);\n border-radius: 4px;\n padding: 3px 10px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n transition: background 0.15s, color 0.15s;\n}\n\n.discovered-action-btn:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n\n.discovered-action-btn:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.discovered-loading,\n.discovered-empty {\n padding: 16px;\n text-align: center;\n font-size: 13px;\n color: var(--mj-text-muted);\n}\n\n.discovered-loading i {\n margin-right: 6px;\n}\n\n.discovered-objects-list {\n max-height: 280px;\n overflow-y: auto;\n}\n\n.discovered-object-row {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 7px 14px;\n cursor: pointer;\n transition: background 0.1s;\n border-bottom: 1px solid var(--mj-border-subtle);\n font-size: 13px;\n}\n\n.discovered-object-row:last-child {\n border-bottom: none;\n}\n\n.discovered-object-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.discovered-object-row.selected {\n background: color-mix(in srgb, var(--mj-brand-primary) 6%, var(--mj-bg-surface));\n}\n\n.discovered-object-row input[type=\"checkbox\"] {\n flex-shrink: 0;\n width: 16px;\n height: 16px;\n accent-color: var(--mj-brand-primary);\n cursor: pointer;\n}\n\n.discovered-object-name {\n flex: 1;\n color: var(--mj-text-primary);\n font-weight: 500;\n}\n\n.discovered-object-api-name {\n flex: 1;\n color: var(--mj-text-muted);\n font-size: 12px;\n font-family: monospace;\n}\n\n.discovered-object-badges {\n display: flex;\n gap: 4px;\n}\n\n.discovered-badge {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n border-radius: 4px;\n font-size: 10px;\n}\n\n.discovered-badge.incremental {\n color: var(--mj-status-success);\n background: var(--mj-status-success-bg);\n}\n\n.discovered-badge.writable {\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, var(--mj-bg-surface));\n}\n"] }]
|
|
3149
3136
|
}], null, { entityTreeDropdown: [{
|
|
3150
3137
|
type: ViewChild,
|
|
3151
3138
|
args: ['entityTreeDropdown']
|