@memberjunction/ng-dashboards 5.35.0 → 5.37.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
|
@@ -14,8 +14,8 @@ import * as i0 from "@angular/core";
|
|
|
14
14
|
import * as i1 from "@angular/forms";
|
|
15
15
|
import * as i2 from "@memberjunction/ng-ui-components";
|
|
16
16
|
const _c0 = () => [1, 2, 3, 4];
|
|
17
|
-
function
|
|
18
|
-
i0.ɵɵelementStart(0, "option",
|
|
17
|
+
function EntityListComponent_Conditional_10_For_4_Template(rf, ctx) { if (rf & 1) {
|
|
18
|
+
i0.ɵɵelementStart(0, "option", 15);
|
|
19
19
|
i0.ɵɵtext(1);
|
|
20
20
|
i0.ɵɵelementEnd();
|
|
21
21
|
} if (rf & 2) {
|
|
@@ -24,14 +24,14 @@ function EntityListComponent_Conditional_11_For_4_Template(rf, ctx) { if (rf & 1
|
|
|
24
24
|
i0.ɵɵadvance();
|
|
25
25
|
i0.ɵɵtextInterpolate(schema_r3);
|
|
26
26
|
} }
|
|
27
|
-
function
|
|
27
|
+
function EntityListComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
28
28
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
29
|
-
i0.ɵɵelementStart(0, "select",
|
|
30
|
-
i0.ɵɵlistener("change", function
|
|
31
|
-
i0.ɵɵelementStart(1, "option",
|
|
29
|
+
i0.ɵɵelementStart(0, "select", 13);
|
|
30
|
+
i0.ɵɵlistener("change", function EntityListComponent_Conditional_10_Template_select_change_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.SelectedSchema = $event.target.value); });
|
|
31
|
+
i0.ɵɵelementStart(1, "option", 14);
|
|
32
32
|
i0.ɵɵtext(2, "All Schemas");
|
|
33
33
|
i0.ɵɵelementEnd();
|
|
34
|
-
i0.ɵɵrepeaterCreate(3,
|
|
34
|
+
i0.ɵɵrepeaterCreate(3, EntityListComponent_Conditional_10_For_4_Template, 2, 2, "option", 15, i0.ɵɵrepeaterTrackByIdentity);
|
|
35
35
|
i0.ɵɵelementEnd();
|
|
36
36
|
} if (rf & 2) {
|
|
37
37
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
@@ -39,9 +39,9 @@ function EntityListComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
|
39
39
|
i0.ɵɵadvance(3);
|
|
40
40
|
i0.ɵɵrepeater(ctx_r1.AvailableFilterSchemas);
|
|
41
41
|
} }
|
|
42
|
-
function
|
|
43
|
-
i0.ɵɵelementStart(0, "div",
|
|
44
|
-
i0.ɵɵelement(1, "i",
|
|
42
|
+
function EntityListComponent_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
44
|
+
i0.ɵɵelement(1, "i", 16);
|
|
45
45
|
i0.ɵɵtext(2);
|
|
46
46
|
i0.ɵɵelementEnd();
|
|
47
47
|
} if (rf & 2) {
|
|
@@ -49,77 +49,77 @@ function EntityListComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
|
49
49
|
i0.ɵɵadvance(2);
|
|
50
50
|
i0.ɵɵtextInterpolate1(" ", ctx_r1.ErrorMessage, " ");
|
|
51
51
|
} }
|
|
52
|
-
function
|
|
53
|
-
i0.ɵɵelementStart(0, "div",
|
|
54
|
-
i0.ɵɵelement(1, "div",
|
|
52
|
+
function EntityListComponent_Conditional_13_For_2_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
54
|
+
i0.ɵɵelement(1, "div", 18)(2, "div", 19)(3, "div", 20)(4, "div", 20)(5, "div", 19)(6, "div", 20);
|
|
55
55
|
i0.ɵɵelementEnd();
|
|
56
56
|
} }
|
|
57
|
-
function
|
|
58
|
-
i0.ɵɵelementStart(0, "div",
|
|
59
|
-
i0.ɵɵrepeaterCreate(1,
|
|
57
|
+
function EntityListComponent_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
58
|
+
i0.ɵɵelementStart(0, "div", 12);
|
|
59
|
+
i0.ɵɵrepeaterCreate(1, EntityListComponent_Conditional_13_For_2_Template, 7, 0, "div", 17, i0.ɵɵrepeaterTrackByIndex);
|
|
60
60
|
i0.ɵɵelementEnd();
|
|
61
61
|
} if (rf & 2) {
|
|
62
62
|
i0.ɵɵadvance();
|
|
63
63
|
i0.ɵɵrepeater(i0.ɵɵpureFunction0(0, _c0));
|
|
64
64
|
} }
|
|
65
|
-
function
|
|
66
|
-
i0.ɵɵelement(0, "i",
|
|
65
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
i0.ɵɵelement(0, "i", 35);
|
|
67
67
|
} if (rf & 2) {
|
|
68
68
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
69
69
|
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
|
|
70
70
|
} }
|
|
71
|
-
function
|
|
72
|
-
i0.ɵɵelement(0, "i",
|
|
71
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
72
|
+
i0.ɵɵelement(0, "i", 27);
|
|
73
73
|
} }
|
|
74
|
-
function
|
|
75
|
-
i0.ɵɵelement(0, "i",
|
|
74
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
i0.ɵɵelement(0, "i", 35);
|
|
76
76
|
} if (rf & 2) {
|
|
77
77
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
78
78
|
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
|
|
79
79
|
} }
|
|
80
|
-
function
|
|
81
|
-
i0.ɵɵelement(0, "i",
|
|
80
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
i0.ɵɵelement(0, "i", 27);
|
|
82
82
|
} }
|
|
83
|
-
function
|
|
84
|
-
i0.ɵɵelement(0, "i",
|
|
83
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
84
|
+
i0.ɵɵelement(0, "i", 35);
|
|
85
85
|
} if (rf & 2) {
|
|
86
86
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
87
87
|
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
|
|
88
88
|
} }
|
|
89
|
-
function
|
|
90
|
-
i0.ɵɵelement(0, "i",
|
|
89
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
90
|
+
i0.ɵɵelement(0, "i", 27);
|
|
91
91
|
} }
|
|
92
|
-
function
|
|
93
|
-
i0.ɵɵelement(0, "i",
|
|
92
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_22_Template(rf, ctx) { if (rf & 1) {
|
|
93
|
+
i0.ɵɵelement(0, "i", 35);
|
|
94
94
|
} if (rf & 2) {
|
|
95
95
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
96
96
|
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
|
|
97
97
|
} }
|
|
98
|
-
function
|
|
99
|
-
i0.ɵɵelement(0, "i",
|
|
98
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_23_Template(rf, ctx) { if (rf & 1) {
|
|
99
|
+
i0.ɵɵelement(0, "i", 27);
|
|
100
100
|
} }
|
|
101
|
-
function
|
|
102
|
-
i0.ɵɵelement(0, "i",
|
|
101
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_27_Template(rf, ctx) { if (rf & 1) {
|
|
102
|
+
i0.ɵɵelement(0, "i", 35);
|
|
103
103
|
} if (rf & 2) {
|
|
104
104
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
105
105
|
i0.ɵɵclassProp("fa-chevron-up", ctx_r1.SortDirection === "asc")("fa-chevron-down", ctx_r1.SortDirection === "desc");
|
|
106
106
|
} }
|
|
107
|
-
function
|
|
108
|
-
i0.ɵɵelement(0, "i",
|
|
107
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_28_Template(rf, ctx) { if (rf & 1) {
|
|
108
|
+
i0.ɵɵelement(0, "i", 27);
|
|
109
109
|
} }
|
|
110
|
-
function
|
|
111
|
-
i0.ɵɵelementStart(0, "span",
|
|
110
|
+
function EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
111
|
+
i0.ɵɵelementStart(0, "span", 39);
|
|
112
112
|
i0.ɵɵtext(1, "You");
|
|
113
113
|
i0.ɵɵelementEnd();
|
|
114
114
|
} }
|
|
115
|
-
function
|
|
116
|
-
i0.ɵɵelementStart(0, "span",
|
|
117
|
-
i0.ɵɵelement(1, "i",
|
|
115
|
+
function EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_13_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
+
i0.ɵɵelementStart(0, "span", 45);
|
|
117
|
+
i0.ɵɵelement(1, "i", 53);
|
|
118
118
|
i0.ɵɵtext(2, " You ");
|
|
119
119
|
i0.ɵɵelementEnd();
|
|
120
120
|
} }
|
|
121
|
-
function
|
|
122
|
-
i0.ɵɵelementStart(0, "span",
|
|
121
|
+
function EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
122
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
123
123
|
i0.ɵɵtext(1);
|
|
124
124
|
i0.ɵɵelementEnd();
|
|
125
125
|
} if (rf & 2) {
|
|
@@ -127,33 +127,33 @@ function EntityListComponent_Conditional_15_Conditional_0_For_33_Conditional_14_
|
|
|
127
127
|
i0.ɵɵadvance();
|
|
128
128
|
i0.ɵɵtextInterpolate(entity_r6.ownerDisplayName);
|
|
129
129
|
} }
|
|
130
|
-
function
|
|
131
|
-
i0.ɵɵelementStart(0, "span",
|
|
130
|
+
function EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
131
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
132
132
|
i0.ɵɵtext(1, "\u2014");
|
|
133
133
|
i0.ɵɵelementEnd();
|
|
134
134
|
} }
|
|
135
|
-
function
|
|
135
|
+
function EntityListComponent_Conditional_14_Conditional_0_For_33_Template(rf, ctx) { if (rf & 1) {
|
|
136
136
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
137
|
-
i0.ɵɵelementStart(0, "tr",
|
|
137
|
+
i0.ɵɵelementStart(0, "tr", 33)(1, "td", 36)(2, "div", 37)(3, "span", 38);
|
|
138
138
|
i0.ɵɵtext(4);
|
|
139
139
|
i0.ɵɵelementEnd();
|
|
140
|
-
i0.ɵɵconditionalCreate(5,
|
|
140
|
+
i0.ɵɵconditionalCreate(5, EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_5_Template, 2, 0, "span", 39);
|
|
141
141
|
i0.ɵɵelementEnd()();
|
|
142
|
-
i0.ɵɵelementStart(6, "td",
|
|
142
|
+
i0.ɵɵelementStart(6, "td", 40)(7, "span", 41);
|
|
143
143
|
i0.ɵɵtext(8);
|
|
144
144
|
i0.ɵɵelementEnd()();
|
|
145
|
-
i0.ɵɵelementStart(9, "td",
|
|
145
|
+
i0.ɵɵelementStart(9, "td", 42)(10, "code", 43);
|
|
146
146
|
i0.ɵɵtext(11);
|
|
147
147
|
i0.ɵɵelementEnd()();
|
|
148
|
-
i0.ɵɵelementStart(12, "td",
|
|
149
|
-
i0.ɵɵconditionalCreate(13,
|
|
148
|
+
i0.ɵɵelementStart(12, "td", 44);
|
|
149
|
+
i0.ɵɵconditionalCreate(13, EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_13_Template, 3, 0, "span", 45)(14, EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_14_Template, 2, 1, "span", 46)(15, EntityListComponent_Conditional_14_Conditional_0_For_33_Conditional_15_Template, 2, 0, "span", 47);
|
|
150
150
|
i0.ɵɵelementEnd();
|
|
151
|
-
i0.ɵɵelementStart(16, "td",
|
|
151
|
+
i0.ɵɵelementStart(16, "td", 48);
|
|
152
152
|
i0.ɵɵtext(17);
|
|
153
153
|
i0.ɵɵelementEnd();
|
|
154
|
-
i0.ɵɵelementStart(18, "td",
|
|
155
|
-
i0.ɵɵlistener("click", function
|
|
156
|
-
i0.ɵɵelement(21, "i",
|
|
154
|
+
i0.ɵɵelementStart(18, "td", 49)(19, "div", 50)(20, "button", 51);
|
|
155
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_0_For_33_Template_button_click_20_listener() { const entity_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnEditEntity(entity_r6)); });
|
|
156
|
+
i0.ɵɵelement(21, "i", 52);
|
|
157
157
|
i0.ɵɵtext(22, " Edit ");
|
|
158
158
|
i0.ɵɵelementEnd()()()();
|
|
159
159
|
} if (rf & 2) {
|
|
@@ -172,53 +172,53 @@ function EntityListComponent_Conditional_15_Conditional_0_For_33_Template(rf, ct
|
|
|
172
172
|
i0.ɵɵadvance(4);
|
|
173
173
|
i0.ɵɵtextInterpolate(ctx_r1.FormatDate(entity_r6.createdAt));
|
|
174
174
|
} }
|
|
175
|
-
function
|
|
175
|
+
function EntityListComponent_Conditional_14_Conditional_0_Conditional_36_Template(rf, ctx) { if (rf & 1) {
|
|
176
176
|
i0.ɵɵtext(0);
|
|
177
177
|
} if (rf & 2) {
|
|
178
178
|
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
179
179
|
i0.ɵɵtextInterpolate1(" matching \"", ctx_r1.SearchTerm, "\" ");
|
|
180
180
|
} }
|
|
181
|
-
function
|
|
181
|
+
function EntityListComponent_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
182
182
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
183
|
-
i0.ɵɵelementStart(0, "div",
|
|
184
|
-
i0.ɵɵlistener("click", function
|
|
183
|
+
i0.ɵɵelementStart(0, "div", 22)(1, "table", 23)(2, "thead")(3, "tr")(4, "th", 24);
|
|
184
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_0_Template_th_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("entityName")); });
|
|
185
185
|
i0.ɵɵtext(5, " Entity Name ");
|
|
186
|
-
i0.ɵɵelementStart(6, "span",
|
|
187
|
-
i0.ɵɵconditionalCreate(7,
|
|
186
|
+
i0.ɵɵelementStart(6, "span", 25);
|
|
187
|
+
i0.ɵɵconditionalCreate(7, EntityListComponent_Conditional_14_Conditional_0_Conditional_7_Template, 1, 4, "i", 26)(8, EntityListComponent_Conditional_14_Conditional_0_Conditional_8_Template, 1, 0, "i", 27);
|
|
188
188
|
i0.ɵɵelementEnd()();
|
|
189
|
-
i0.ɵɵelementStart(9, "th",
|
|
190
|
-
i0.ɵɵlistener("click", function
|
|
189
|
+
i0.ɵɵelementStart(9, "th", 28);
|
|
190
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_0_Template_th_click_9_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("schemaName")); });
|
|
191
191
|
i0.ɵɵtext(10, " Schema ");
|
|
192
|
-
i0.ɵɵelementStart(11, "span",
|
|
193
|
-
i0.ɵɵconditionalCreate(12,
|
|
192
|
+
i0.ɵɵelementStart(11, "span", 25);
|
|
193
|
+
i0.ɵɵconditionalCreate(12, EntityListComponent_Conditional_14_Conditional_0_Conditional_12_Template, 1, 4, "i", 26)(13, EntityListComponent_Conditional_14_Conditional_0_Conditional_13_Template, 1, 0, "i", 27);
|
|
194
194
|
i0.ɵɵelementEnd()();
|
|
195
|
-
i0.ɵɵelementStart(14, "th",
|
|
196
|
-
i0.ɵɵlistener("click", function
|
|
195
|
+
i0.ɵɵelementStart(14, "th", 29);
|
|
196
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_0_Template_th_click_14_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("tableName")); });
|
|
197
197
|
i0.ɵɵtext(15, " Table ");
|
|
198
|
-
i0.ɵɵelementStart(16, "span",
|
|
199
|
-
i0.ɵɵconditionalCreate(17,
|
|
198
|
+
i0.ɵɵelementStart(16, "span", 25);
|
|
199
|
+
i0.ɵɵconditionalCreate(17, EntityListComponent_Conditional_14_Conditional_0_Conditional_17_Template, 1, 4, "i", 26)(18, EntityListComponent_Conditional_14_Conditional_0_Conditional_18_Template, 1, 0, "i", 27);
|
|
200
200
|
i0.ɵɵelementEnd()();
|
|
201
|
-
i0.ɵɵelementStart(19, "th",
|
|
202
|
-
i0.ɵɵlistener("click", function
|
|
201
|
+
i0.ɵɵelementStart(19, "th", 30);
|
|
202
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_0_Template_th_click_19_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("owner")); });
|
|
203
203
|
i0.ɵɵtext(20, " Owner ");
|
|
204
|
-
i0.ɵɵelementStart(21, "span",
|
|
205
|
-
i0.ɵɵconditionalCreate(22,
|
|
204
|
+
i0.ɵɵelementStart(21, "span", 25);
|
|
205
|
+
i0.ɵɵconditionalCreate(22, EntityListComponent_Conditional_14_Conditional_0_Conditional_22_Template, 1, 4, "i", 26)(23, EntityListComponent_Conditional_14_Conditional_0_Conditional_23_Template, 1, 0, "i", 27);
|
|
206
206
|
i0.ɵɵelementEnd()();
|
|
207
|
-
i0.ɵɵelementStart(24, "th",
|
|
208
|
-
i0.ɵɵlistener("click", function
|
|
207
|
+
i0.ɵɵelementStart(24, "th", 31);
|
|
208
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_0_Template_th_click_24_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.OnSortChange("createdAt")); });
|
|
209
209
|
i0.ɵɵtext(25, " Created ");
|
|
210
|
-
i0.ɵɵelementStart(26, "span",
|
|
211
|
-
i0.ɵɵconditionalCreate(27,
|
|
210
|
+
i0.ɵɵelementStart(26, "span", 25);
|
|
211
|
+
i0.ɵɵconditionalCreate(27, EntityListComponent_Conditional_14_Conditional_0_Conditional_27_Template, 1, 4, "i", 26)(28, EntityListComponent_Conditional_14_Conditional_0_Conditional_28_Template, 1, 0, "i", 27);
|
|
212
212
|
i0.ɵɵelementEnd()();
|
|
213
|
-
i0.ɵɵelementStart(29, "th",
|
|
213
|
+
i0.ɵɵelementStart(29, "th", 32);
|
|
214
214
|
i0.ɵɵtext(30, "Actions");
|
|
215
215
|
i0.ɵɵelementEnd()()();
|
|
216
216
|
i0.ɵɵelementStart(31, "tbody");
|
|
217
|
-
i0.ɵɵrepeaterCreate(32,
|
|
217
|
+
i0.ɵɵrepeaterCreate(32, EntityListComponent_Conditional_14_Conditional_0_For_33_Template, 23, 6, "tr", 33, i0.ɵɵcomponentInstance().TrackByEntityId, true);
|
|
218
218
|
i0.ɵɵelementEnd()()();
|
|
219
|
-
i0.ɵɵelementStart(34, "div",
|
|
219
|
+
i0.ɵɵelementStart(34, "div", 34);
|
|
220
220
|
i0.ɵɵtext(35);
|
|
221
|
-
i0.ɵɵconditionalCreate(36,
|
|
221
|
+
i0.ɵɵconditionalCreate(36, EntityListComponent_Conditional_14_Conditional_0_Conditional_36_Template, 1, 1);
|
|
222
222
|
i0.ɵɵelementEnd();
|
|
223
223
|
} if (rf & 2) {
|
|
224
224
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -239,16 +239,16 @@ function EntityListComponent_Conditional_15_Conditional_0_Template(rf, ctx) { if
|
|
|
239
239
|
i0.ɵɵadvance();
|
|
240
240
|
i0.ɵɵconditional(ctx_r1.SearchTerm ? 36 : -1);
|
|
241
241
|
} }
|
|
242
|
-
function
|
|
242
|
+
function EntityListComponent_Conditional_14_Conditional_1_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
243
243
|
const _r7 = i0.ɵɵgetCurrentView();
|
|
244
|
-
i0.ɵɵelementStart(0, "h3",
|
|
244
|
+
i0.ɵɵelementStart(0, "h3", 56);
|
|
245
245
|
i0.ɵɵtext(1);
|
|
246
246
|
i0.ɵɵelementEnd();
|
|
247
|
-
i0.ɵɵelementStart(2, "p",
|
|
247
|
+
i0.ɵɵelementStart(2, "p", 57);
|
|
248
248
|
i0.ɵɵtext(3, "Try a different search term or clear the filter.");
|
|
249
249
|
i0.ɵɵelementEnd();
|
|
250
|
-
i0.ɵɵelementStart(4, "button",
|
|
251
|
-
i0.ɵɵlistener("click", function
|
|
250
|
+
i0.ɵɵelementStart(4, "button", 58);
|
|
251
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_1_Conditional_3_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.SearchTerm = ""); });
|
|
252
252
|
i0.ɵɵtext(5, " Clear search ");
|
|
253
253
|
i0.ɵɵelementEnd();
|
|
254
254
|
} if (rf & 2) {
|
|
@@ -256,33 +256,33 @@ function EntityListComponent_Conditional_15_Conditional_1_Conditional_3_Template
|
|
|
256
256
|
i0.ɵɵadvance();
|
|
257
257
|
i0.ɵɵtextInterpolate1("No entities match \"", ctx_r1.SearchTerm, "\"");
|
|
258
258
|
} }
|
|
259
|
-
function
|
|
259
|
+
function EntityListComponent_Conditional_14_Conditional_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
260
260
|
const _r8 = i0.ɵɵgetCurrentView();
|
|
261
|
-
i0.ɵɵelementStart(0, "h3",
|
|
261
|
+
i0.ɵɵelementStart(0, "h3", 56);
|
|
262
262
|
i0.ɵɵtext(1, "No entities yet");
|
|
263
263
|
i0.ɵɵelementEnd();
|
|
264
|
-
i0.ɵɵelementStart(2, "p",
|
|
264
|
+
i0.ɵɵelementStart(2, "p", 57);
|
|
265
265
|
i0.ɵɵtext(3, " Create your first user-defined entity. You can also use the Database Designer agent in a conversation for guided design. ");
|
|
266
266
|
i0.ɵɵelementEnd();
|
|
267
|
-
i0.ɵɵelementStart(4, "button",
|
|
268
|
-
i0.ɵɵlistener("click", function
|
|
269
|
-
i0.ɵɵelement(5, "i",
|
|
267
|
+
i0.ɵɵelementStart(4, "button", 59);
|
|
268
|
+
i0.ɵɵlistener("click", function EntityListComponent_Conditional_14_Conditional_1_Conditional_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.OnNewEntity()); });
|
|
269
|
+
i0.ɵɵelement(5, "i", 60);
|
|
270
270
|
i0.ɵɵtext(6, " Create Entity ");
|
|
271
271
|
i0.ɵɵelementEnd();
|
|
272
272
|
} }
|
|
273
|
-
function
|
|
274
|
-
i0.ɵɵelementStart(0, "div",
|
|
275
|
-
i0.ɵɵelement(2, "i",
|
|
273
|
+
function EntityListComponent_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
274
|
+
i0.ɵɵelementStart(0, "div", 21)(1, "div", 54);
|
|
275
|
+
i0.ɵɵelement(2, "i", 55);
|
|
276
276
|
i0.ɵɵelementEnd();
|
|
277
|
-
i0.ɵɵconditionalCreate(3,
|
|
277
|
+
i0.ɵɵconditionalCreate(3, EntityListComponent_Conditional_14_Conditional_1_Conditional_3_Template, 6, 1)(4, EntityListComponent_Conditional_14_Conditional_1_Conditional_4_Template, 7, 0);
|
|
278
278
|
i0.ɵɵelementEnd();
|
|
279
279
|
} if (rf & 2) {
|
|
280
280
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
281
281
|
i0.ɵɵadvance(3);
|
|
282
282
|
i0.ɵɵconditional(ctx_r1.SearchTerm ? 3 : 4);
|
|
283
283
|
} }
|
|
284
|
-
function
|
|
285
|
-
i0.ɵɵconditionalCreate(0,
|
|
284
|
+
function EntityListComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
|
|
285
|
+
i0.ɵɵconditionalCreate(0, EntityListComponent_Conditional_14_Conditional_0_Template, 37, 8)(1, EntityListComponent_Conditional_14_Conditional_1_Template, 5, 1, "div", 21);
|
|
286
286
|
} if (rf & 2) {
|
|
287
287
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
288
288
|
i0.ɵɵconditional(ctx_r1.FilteredEntities.length > 0 ? 0 : !ctx_r1.IsLoading ? 1 : -1);
|
|
@@ -298,6 +298,10 @@ export class EntityListComponent {
|
|
|
298
298
|
ErrorMessage = null;
|
|
299
299
|
/** Full unfiltered list from the engine. */
|
|
300
300
|
_allEntities = [];
|
|
301
|
+
/** Public accessor for the chrome's X-of-Y badge. */
|
|
302
|
+
get TotalEntityCount() {
|
|
303
|
+
return this._allEntities.length;
|
|
304
|
+
}
|
|
301
305
|
/** Cached sorted unique schema names — recomputed only when _allEntities changes. */
|
|
302
306
|
_availableFilterSchemas = [];
|
|
303
307
|
/** Currently displayed (filtered + sorted) rows. */
|
|
@@ -419,48 +423,50 @@ export class EntityListComponent {
|
|
|
419
423
|
}
|
|
420
424
|
}
|
|
421
425
|
static ɵfac = function EntityListComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || EntityListComponent)(); };
|
|
422
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityListComponent, selectors: [["mj-database-entity-list"]], outputs: { EditEntity: "EditEntity", ViewEntity: "ViewEntity", NewEntity: "NewEntity" }, standalone: false, decls:
|
|
423
|
-
i0.ɵɵelementStart(0, "mj-page-
|
|
424
|
-
i0.ɵɵelement(
|
|
426
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: EntityListComponent, selectors: [["mj-database-entity-list"]], outputs: { EditEntity: "EditEntity", ViewEntity: "ViewEntity", NewEntity: "NewEntity" }, standalone: false, decls: 15, vars: 9, consts: [["AriaLabel", "Database Designer", "Title", "Database Designer", "Subtitle", "Browse and create user-defined entities"], ["meta", ""], ["Label", "entities", 3, "Count", "Total"], ["actions", ""], [3, "Clicked", "Loading"], ["mjButton", "", "variant", "primary", "size", "sm", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-plus"], ["toolbar", ""], ["Placeholder", "Search by name, table, or schema...", 3, "ValueChange", "Value"], ["aria-label", "Filter by schema", 1, "mj-input", "schema-filter", 3, "value"], [3, "Padding"], ["role", "alert", 1, "entity-list-error"], ["aria-busy", "true", "aria-label", "Loading entities\u2026", 1, "skeleton-table"], ["aria-label", "Filter by schema", 1, "mj-input", "schema-filter", 3, "change", "value"], ["value", ""], [3, "value"], [1, "fa-solid", "fa-circle-exclamation"], [1, "skeleton-row"], [1, "skeleton-cell", "wide"], [1, "skeleton-cell", "medium"], [1, "skeleton-cell", "narrow"], [1, "zero-state"], [1, "table-wrap"], ["role", "grid", "aria-label", "User-defined entities", 1, "entity-table"], ["scope", "col", 1, "col-name", "sortable", 3, "click"], [1, "sort-icon"], [1, "fa-solid", 3, "fa-chevron-up", "fa-chevron-down"], [1, "fa-solid", "fa-chevron-up", "muted"], ["scope", "col", 1, "col-schema", "sortable", 3, "click"], ["scope", "col", 1, "col-table", "sortable", 3, "click"], ["scope", "col", 1, "col-owner", "sortable", 3, "click"], ["scope", "col", 1, "col-created", "sortable", 3, "click"], ["scope", "col", 1, "col-actions"], [1, "entity-row"], [1, "entity-count"], [1, "fa-solid"], [1, "col-name"], [1, "entity-name-cell"], [1, "entity-name"], ["title", "You own this entity", 1, "owner-badge", "owner-you"], [1, "col-schema"], [1, "schema-badge"], [1, "col-table"], [1, "table-name"], [1, "col-owner"], [1, "owner-self"], [1, "owner-other"], [1, "owner-other", "muted"], [1, "col-created"], [1, "col-actions"], [1, "row-actions"], ["mjButton", "", "buttonStyle", "secondary", "title", "Edit this entity", 1, "action-btn", 3, "click"], [1, "fa-solid", "fa-pen-to-square"], [1, "fa-solid", "fa-user-check"], [1, "zero-state-icon"], [1, "fa-regular", "fa-rectangle-list"], [1, "zero-state-title"], [1, "zero-state-body"], ["mjButton", "", "buttonStyle", "secondary", 3, "click"], ["mjButton", "", "buttonStyle", "primary", 3, "click"], [1, "fa-solid", "fa-plus"]], template: function EntityListComponent_Template(rf, ctx) { if (rf & 1) {
|
|
427
|
+
i0.ɵɵelementStart(0, "mj-page-header-interior", 0)(1, "div", 1);
|
|
428
|
+
i0.ɵɵelement(2, "mj-stat-badge", 2);
|
|
425
429
|
i0.ɵɵelementEnd();
|
|
426
|
-
i0.ɵɵelementStart(
|
|
427
|
-
i0.ɵɵlistener("Clicked", function
|
|
430
|
+
i0.ɵɵelementStart(3, "div", 3)(4, "mj-refresh-button", 4);
|
|
431
|
+
i0.ɵɵlistener("Clicked", function EntityListComponent_Template_mj_refresh_button_Clicked_4_listener() { return ctx.OnRefresh(); });
|
|
428
432
|
i0.ɵɵelementEnd();
|
|
429
|
-
i0.ɵɵelementStart(
|
|
430
|
-
i0.ɵɵlistener("click", function
|
|
431
|
-
i0.ɵɵelement(
|
|
432
|
-
i0.ɵɵtext(
|
|
433
|
+
i0.ɵɵelementStart(5, "button", 5);
|
|
434
|
+
i0.ɵɵlistener("click", function EntityListComponent_Template_button_click_5_listener() { return ctx.OnNewEntity(); });
|
|
435
|
+
i0.ɵɵelement(6, "i", 6);
|
|
436
|
+
i0.ɵɵtext(7, " New Entity ");
|
|
433
437
|
i0.ɵɵelementEnd()();
|
|
434
|
-
i0.ɵɵelementStart(
|
|
435
|
-
i0.ɵɵlistener("ValueChange", function
|
|
438
|
+
i0.ɵɵelementStart(8, "div", 7)(9, "mj-page-search", 8);
|
|
439
|
+
i0.ɵɵlistener("ValueChange", function EntityListComponent_Template_mj_page_search_ValueChange_9_listener($event) { return ctx.SearchTerm = $event; });
|
|
436
440
|
i0.ɵɵelementEnd();
|
|
437
|
-
i0.ɵɵconditionalCreate(
|
|
438
|
-
i0.ɵɵelementEnd()();
|
|
439
|
-
i0.ɵɵelementStart(12, "mj-page-body");
|
|
440
|
-
i0.ɵɵconditionalCreate(13, EntityListComponent_Conditional_13_Template, 3, 1, "div", 10);
|
|
441
|
-
i0.ɵɵconditionalCreate(14, EntityListComponent_Conditional_14_Template, 3, 1, "div", 11);
|
|
442
|
-
i0.ɵɵconditionalCreate(15, EntityListComponent_Conditional_15_Template, 2, 1);
|
|
441
|
+
i0.ɵɵconditionalCreate(10, EntityListComponent_Conditional_10_Template, 5, 1, "select", 9);
|
|
443
442
|
i0.ɵɵelementEnd()();
|
|
443
|
+
i0.ɵɵelementStart(11, "mj-page-body-interior", 10);
|
|
444
|
+
i0.ɵɵconditionalCreate(12, EntityListComponent_Conditional_12_Template, 3, 1, "div", 11);
|
|
445
|
+
i0.ɵɵconditionalCreate(13, EntityListComponent_Conditional_13_Template, 3, 1, "div", 12);
|
|
446
|
+
i0.ɵɵconditionalCreate(14, EntityListComponent_Conditional_14_Template, 2, 1);
|
|
447
|
+
i0.ɵɵelementEnd();
|
|
444
448
|
} if (rf & 2) {
|
|
445
|
-
i0.ɵɵadvance(
|
|
446
|
-
i0.ɵɵproperty("Count", ctx.FilteredEntities.length);
|
|
449
|
+
i0.ɵɵadvance(2);
|
|
450
|
+
i0.ɵɵproperty("Count", ctx.FilteredEntities.length)("Total", ctx.TotalEntityCount);
|
|
447
451
|
i0.ɵɵadvance(2);
|
|
448
452
|
i0.ɵɵproperty("Loading", ctx.IsLoading);
|
|
449
453
|
i0.ɵɵadvance(5);
|
|
450
454
|
i0.ɵɵproperty("Value", ctx.SearchTerm);
|
|
451
455
|
i0.ɵɵadvance();
|
|
452
|
-
i0.ɵɵconditional(ctx.AvailableFilterSchemas.length > 1 ?
|
|
453
|
-
i0.ɵɵadvance(
|
|
454
|
-
i0.ɵɵ
|
|
456
|
+
i0.ɵɵconditional(ctx.AvailableFilterSchemas.length > 1 ? 10 : -1);
|
|
457
|
+
i0.ɵɵadvance();
|
|
458
|
+
i0.ɵɵproperty("Padding", false);
|
|
459
|
+
i0.ɵɵadvance();
|
|
460
|
+
i0.ɵɵconditional(ctx.ErrorMessage ? 12 : -1);
|
|
455
461
|
i0.ɵɵadvance();
|
|
456
|
-
i0.ɵɵconditional(ctx.IsLoading && ctx.FilteredEntities.length === 0 ?
|
|
462
|
+
i0.ɵɵconditional(ctx.IsLoading && ctx.FilteredEntities.length === 0 ? 13 : -1);
|
|
457
463
|
i0.ɵɵadvance();
|
|
458
|
-
i0.ɵɵconditional(!ctx.IsLoading || ctx.FilteredEntities.length > 0 ?
|
|
459
|
-
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i2.MJButtonDirective, i2.
|
|
464
|
+
i0.ɵɵconditional(!ctx.IsLoading || ctx.FilteredEntities.length > 0 ? 14 : -1);
|
|
465
|
+
} }, dependencies: [i1.NgSelectOption, i1.ɵNgSelectMultipleOption, i2.MJButtonDirective, i2.MJPageHeaderInteriorComponent, i2.MJPageBodyInteriorComponent, i2.MJPageSearchComponent, i2.MJRefreshButtonComponent, i2.MJStatBadgeComponent], styles: ["\n\n\n\n\n\n\n\n[_nghost-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n background: var(--mj-bg-page);\n}\n\n\n\n.schema-filter[_ngcontent-%COMP%] {\n width: auto;\n min-width: 160px;\n max-width: 220px;\n flex-shrink: 0;\n}\n\n\n\n\n.entity-list-error[_ngcontent-%COMP%] {\n margin: 12px 24px;\n padding: 10px 14px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n}\n\n\n\n\n.skeleton-table[_ngcontent-%COMP%] {\n padding: 0 24px;\n margin-top: 8px;\n}\n\n.skeleton-row[_ngcontent-%COMP%] {\n display: flex;\n gap: 16px;\n padding: 12px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.skeleton-cell[_ngcontent-%COMP%] {\n height: 18px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n animation: _ngcontent-%COMP%_skeleton-pulse 1.4s ease-in-out infinite;\n}\n\n.skeleton-cell.wide[_ngcontent-%COMP%] { flex: 3; }\n.skeleton-cell.medium[_ngcontent-%COMP%] { flex: 2; }\n.skeleton-cell.narrow[_ngcontent-%COMP%] { flex: 1; }\n\n@keyframes _ngcontent-%COMP%_skeleton-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n\n\n\n\n.table-wrap[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n padding: 0 24px;\n}\n\n\n\n\n.entity-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9rem;\n}\n\n.entity-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.entity-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n padding: 10px 12px;\n text-align: left;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n white-space: nowrap;\n user-select: none;\n}\n\n.entity-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%] {\n cursor: pointer;\n}\n\n.entity-table[_ngcontent-%COMP%] th.sortable[_ngcontent-%COMP%]:hover {\n color: var(--mj-text-primary);\n}\n\n.sort-icon[_ngcontent-%COMP%] {\n display: inline-block;\n margin-left: 5px;\n font-size: 0.75rem;\n vertical-align: middle;\n min-width: 14px;\n}\n\n.sort-icon[_ngcontent-%COMP%] .muted[_ngcontent-%COMP%] {\n opacity: 0.3;\n}\n\n.entity-row[_ngcontent-%COMP%] {\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.1s;\n}\n\n.entity-row[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 12px 12px;\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n\n\n\n\n\n.entity-table[_ngcontent-%COMP%] {\n table-layout: fixed;\n}\n\n.col-name[_ngcontent-%COMP%] { width: 28%; }\n.col-schema[_ngcontent-%COMP%] { width: 14%; }\n.col-table[_ngcontent-%COMP%] { width: 18%; }\n.col-owner[_ngcontent-%COMP%] { width: 15%; }\n.col-created[_ngcontent-%COMP%] { width: 13%; white-space: nowrap; }\n.col-actions[_ngcontent-%COMP%] { width: 12%; }\n\n\n\n\n.entity-name-cell[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-name[_ngcontent-%COMP%] {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.owner-badge[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.owner-badge.owner-you[_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\n.schema-badge[_ngcontent-%COMP%] {\n display: inline-block;\n font-size: 0.8rem;\n font-family: monospace;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n}\n\ncode.table-name[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.owner-self[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n color: var(--mj-brand-primary);\n font-size: 0.875rem;\n}\n\n.owner-self[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 0.8rem;\n}\n\n.owner-other[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n}\n\n.owner-other.muted[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n}\n\n\n\n\n.row-actions[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn[_ngcontent-%COMP%] {\n font-size: 0.8125rem;\n padding: 6px 12px;\n}\n\n\n\n\n.entity-count[_ngcontent-%COMP%] {\n padding: 10px 24px;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n border-top: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n\n\n\n.zero-state[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n gap: 16px;\n}\n\n.zero-state-icon[_ngcontent-%COMP%] {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zero-state-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.zero-state-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.zero-state-body[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 0.9rem;\n color: var(--mj-text-secondary);\n max-width: 420px;\n line-height: 1.6;\n word-break: break-word;\n overflow-wrap: break-word;\n}"], changeDetection: 0 });
|
|
460
466
|
}
|
|
461
467
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityListComponent, [{
|
|
462
468
|
type: Component,
|
|
463
|
-
args: [{ standalone: false, selector: 'mj-database-entity-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mj-page-layout>\n <mj-page-header\n Title=\"Database Designer\"\n Icon=\"fa-solid fa-table-cells-large\"\n Subtitle=\"Browse and create user-defined entities\">\n <div meta>\n <mj-stat-badge [Count]=\"FilteredEntities.length\" Label=\"entities\"></mj-stat-badge>\n </div>\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"OnRefresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\"></i> New Entity\n </button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search by name, table, or schema...\"\n [Value]=\"SearchTerm\"\n (ValueChange)=\"SearchTerm = $event\">\n </mj-page-search>\n @if (AvailableFilterSchemas.length > 1) {\n <select\n class=\"mj-input schema-filter\"\n [value]=\"SelectedSchema\"\n (change)=\"SelectedSchema = $any($event.target).value\"\n aria-label=\"Filter by schema\">\n <option value=\"\">All Schemas</option>\n @for (schema of AvailableFilterSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n }\n </div>\n </mj-page-header>\n\n <mj-page-body>\n <!-- \u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (ErrorMessage) {\n <div class=\"entity-list-error\" role=\"alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ ErrorMessage }}\n </div>\n }\n\n <!-- \u2500\u2500 Loading skeleton \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (IsLoading && FilteredEntities.length === 0) {\n <div class=\"skeleton-table\" aria-busy=\"true\" aria-label=\"Loading entities\u2026\">\n @for (_ of [1, 2, 3, 4]; track $index) {\n <div class=\"skeleton-row\">\n <div class=\"skeleton-cell wide\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n </div>\n }\n </div>\n }\n\n <!-- \u2500\u2500 Entity table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!IsLoading || FilteredEntities.length > 0) {\n @if (FilteredEntities.length > 0) {\n <div class=\"table-wrap\">\n <table class=\"entity-table\" role=\"grid\" aria-label=\"User-defined entities\">\n <thead>\n <tr>\n <th class=\"col-name sortable\" (click)=\"OnSortChange('entityName')\" scope=\"col\">\n Entity Name\n <span class=\"sort-icon\">\n @if (SortField === 'entityName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-schema sortable\" (click)=\"OnSortChange('schemaName')\" scope=\"col\">\n Schema\n <span class=\"sort-icon\">\n @if (SortField === 'schemaName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-table sortable\" (click)=\"OnSortChange('tableName')\" scope=\"col\">\n Table\n <span class=\"sort-icon\">\n @if (SortField === 'tableName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-owner sortable\" (click)=\"OnSortChange('owner')\" scope=\"col\">\n Owner\n <span class=\"sort-icon\">\n @if (SortField === 'owner') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-created sortable\" (click)=\"OnSortChange('createdAt')\" scope=\"col\">\n Created\n <span class=\"sort-icon\">\n @if (SortField === 'createdAt') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-actions\" scope=\"col\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (entity of FilteredEntities; track TrackByEntityId($index, entity)) {\n <tr class=\"entity-row\">\n <td class=\"col-name\">\n <div class=\"entity-name-cell\">\n <span class=\"entity-name\">{{ entity.entityName }}</span>\n @if (entity.isOwner) {\n <span class=\"owner-badge owner-you\" title=\"You own this entity\">You</span>\n }\n </div>\n </td>\n <td class=\"col-schema\">\n <span class=\"schema-badge\">{{ entity.schemaName }}</span>\n </td>\n <td class=\"col-table\">\n <code class=\"table-name\">{{ entity.tableName }}</code>\n </td>\n <td class=\"col-owner\">\n @if (entity.isOwner) {\n <span class=\"owner-self\">\n <i class=\"fa-solid fa-user-check\"></i>\n You\n </span>\n } @else if (entity.ownerDisplayName) {\n <span class=\"owner-other\">{{ entity.ownerDisplayName }}</span>\n } @else {\n <span class=\"owner-other muted\">\u2014</span>\n }\n </td>\n <td class=\"col-created\">{{ FormatDate(entity.createdAt) }}</td>\n <td class=\"col-actions\">\n <div class=\"row-actions\">\n <button\n mjButton\n buttonStyle=\"secondary\"\n class=\"action-btn\"\n title=\"Edit this entity\"\n (click)=\"OnEditEntity(entity)\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"entity-count\">\n {{ FilteredEntities.length }} {{ FilteredEntities.length === 1 ? 'entity' : 'entities' }}\n @if (SearchTerm) { matching \"{{ SearchTerm }}\" }\n </div>\n } @else if (!IsLoading) {\n <!-- \u2500\u2500 Zero state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <div class=\"zero-state\">\n <div class=\"zero-state-icon\">\n <i class=\"fa-regular fa-rectangle-list\"></i>\n </div>\n @if (SearchTerm) {\n <h3 class=\"zero-state-title\">No entities match \"{{ SearchTerm }}\"</h3>\n <p class=\"zero-state-body\">Try a different search term or clear the filter.</p>\n <button mjButton buttonStyle=\"secondary\" (click)=\"SearchTerm = ''\">\n Clear search\n </button>\n } @else {\n <h3 class=\"zero-state-title\">No entities yet</h3>\n <p class=\"zero-state-body\">\n Create your first user-defined entity. You can also use the\n Database Designer agent in a conversation for guided design.\n </p>\n <button mjButton buttonStyle=\"primary\" (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Entity\n </button>\n }\n </div>\n }\n }\n </mj-page-body>\n</mj-page-layout>\n", styles: ["/* Schema filter used in the [toolbar] slot. */\n.schema-filter {\n width: auto;\n min-width: 160px;\n max-width: 220px;\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Error banner \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-list-error {\n margin: 12px 24px;\n padding: 10px 14px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n}\n\n/* \u2500\u2500 Skeleton loader \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.skeleton-table {\n padding: 0 24px;\n margin-top: 8px;\n}\n\n.skeleton-row {\n display: flex;\n gap: 16px;\n padding: 12px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.skeleton-cell {\n height: 18px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n animation: skeleton-pulse 1.4s ease-in-out infinite;\n}\n\n.skeleton-cell.wide { flex: 3; }\n.skeleton-cell.medium { flex: 2; }\n.skeleton-cell.narrow { flex: 1; }\n\n@keyframes skeleton-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n\n/* \u2500\u2500 Table wrap \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.table-wrap {\n flex: 1;\n overflow: auto;\n padding: 0 24px;\n}\n\n/* \u2500\u2500 Entity table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9rem;\n}\n\n.entity-table thead tr {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.entity-table th {\n padding: 10px 12px;\n text-align: left;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n white-space: nowrap;\n user-select: none;\n}\n\n.entity-table th.sortable {\n cursor: pointer;\n}\n\n.entity-table th.sortable:hover {\n color: var(--mj-text-primary);\n}\n\n.sort-icon {\n display: inline-block;\n margin-left: 5px;\n font-size: 0.75rem;\n vertical-align: middle;\n min-width: 14px;\n}\n\n.sort-icon .muted {\n opacity: 0.3;\n}\n\n.entity-row {\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.1s;\n}\n\n.entity-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-table td {\n padding: 12px 12px;\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n/* \u2500\u2500 Column sizing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* Fixed layout \u2014 percentages for content columns, px only for utility columns */\n\n.entity-table {\n table-layout: fixed;\n}\n\n.col-name { width: 28%; }\n.col-schema { width: 14%; }\n.col-table { width: 18%; }\n.col-owner { width: 15%; }\n.col-created { width: 13%; white-space: nowrap; }\n.col-actions { width: 12%; }\n\n/* \u2500\u2500 Cell content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.owner-badge {\n display: inline-flex;\n align-items: center;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.owner-badge.owner-you {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.schema-badge {\n display: inline-block;\n font-size: 0.8rem;\n font-family: monospace;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n}\n\ncode.table-name {\n font-size: 0.8rem;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.owner-self {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n color: var(--mj-brand-primary);\n font-size: 0.875rem;\n}\n\n.owner-self i {\n font-size: 0.8rem;\n}\n\n.owner-other {\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n}\n\n.owner-other.muted {\n color: var(--mj-text-muted);\n}\n\n/* \u2500\u2500 Row actions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.row-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn {\n font-size: 0.8125rem;\n padding: 6px 12px;\n}\n\n/* \u2500\u2500 Row count footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-count {\n padding: 10px 24px;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n border-top: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Zero state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.zero-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n gap: 16px;\n}\n\n.zero-state-icon {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zero-state-icon i {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.zero-state-title {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.zero-state-body {\n margin: 0;\n font-size: 0.9rem;\n color: var(--mj-text-secondary);\n max-width: 420px;\n line-height: 1.6;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n"] }]
|
|
469
|
+
args: [{ standalone: false, selector: 'mj-database-entity-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\n Database Designer is a sub-page of Admin \u2192 Data & Schema's left-nav shell, so\n per Section 9b/10 of plans/explorer-chrome-conventions.md we use the interior\n chrome pattern instead of <mj-page-layout> + <mj-page-header> (which would\n produce a doubled-header inside the Admin shell).\n-->\n<mj-page-header-interior\n AriaLabel=\"Database Designer\"\n Title=\"Database Designer\"\n Subtitle=\"Browse and create user-defined entities\">\n <!-- X-of-Y filtered count earns its meta spot per chrome conventions \u00A72.\n Material on this page (~300 entities per deployment) makes the\n narrowing signal valuable. -->\n <div meta>\n <mj-stat-badge\n [Count]=\"FilteredEntities.length\"\n [Total]=\"TotalEntityCount\"\n Label=\"entities\">\n </mj-stat-badge>\n </div>\n <div actions>\n <mj-refresh-button [Loading]=\"IsLoading\" (Clicked)=\"OnRefresh()\"></mj-refresh-button>\n <button mjButton variant=\"primary\" size=\"sm\" (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\" aria-hidden=\"true\"></i> New Entity\n </button>\n </div>\n <div toolbar>\n <mj-page-search\n Placeholder=\"Search by name, table, or schema...\"\n [Value]=\"SearchTerm\"\n (ValueChange)=\"SearchTerm = $event\">\n </mj-page-search>\n @if (AvailableFilterSchemas.length > 1) {\n <select\n class=\"mj-input schema-filter\"\n [value]=\"SelectedSchema\"\n (change)=\"SelectedSchema = $any($event.target).value\"\n aria-label=\"Filter by schema\">\n <option value=\"\">All Schemas</option>\n @for (schema of AvailableFilterSchemas; track schema) {\n <option [value]=\"schema\">{{ schema }}</option>\n }\n </select>\n }\n </div>\n</mj-page-header-interior>\n\n<mj-page-body-interior [Padding]=\"false\">\n <!-- \u2500\u2500 Error \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (ErrorMessage) {\n <div class=\"entity-list-error\" role=\"alert\">\n <i class=\"fa-solid fa-circle-exclamation\"></i>\n {{ ErrorMessage }}\n </div>\n }\n\n <!-- \u2500\u2500 Loading skeleton \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (IsLoading && FilteredEntities.length === 0) {\n <div class=\"skeleton-table\" aria-busy=\"true\" aria-label=\"Loading entities\u2026\">\n @for (_ of [1, 2, 3, 4]; track $index) {\n <div class=\"skeleton-row\">\n <div class=\"skeleton-cell wide\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n <div class=\"skeleton-cell medium\"></div>\n <div class=\"skeleton-cell narrow\"></div>\n </div>\n }\n </div>\n }\n\n <!-- \u2500\u2500 Entity table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n @if (!IsLoading || FilteredEntities.length > 0) {\n @if (FilteredEntities.length > 0) {\n <div class=\"table-wrap\">\n <table class=\"entity-table\" role=\"grid\" aria-label=\"User-defined entities\">\n <thead>\n <tr>\n <th class=\"col-name sortable\" (click)=\"OnSortChange('entityName')\" scope=\"col\">\n Entity Name\n <span class=\"sort-icon\">\n @if (SortField === 'entityName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-schema sortable\" (click)=\"OnSortChange('schemaName')\" scope=\"col\">\n Schema\n <span class=\"sort-icon\">\n @if (SortField === 'schemaName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-table sortable\" (click)=\"OnSortChange('tableName')\" scope=\"col\">\n Table\n <span class=\"sort-icon\">\n @if (SortField === 'tableName') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-owner sortable\" (click)=\"OnSortChange('owner')\" scope=\"col\">\n Owner\n <span class=\"sort-icon\">\n @if (SortField === 'owner') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-created sortable\" (click)=\"OnSortChange('createdAt')\" scope=\"col\">\n Created\n <span class=\"sort-icon\">\n @if (SortField === 'createdAt') {\n <i class=\"fa-solid\" [class.fa-chevron-up]=\"SortDirection === 'asc'\" [class.fa-chevron-down]=\"SortDirection === 'desc'\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-up muted\"></i>\n }\n </span>\n </th>\n <th class=\"col-actions\" scope=\"col\">Actions</th>\n </tr>\n </thead>\n <tbody>\n @for (entity of FilteredEntities; track TrackByEntityId($index, entity)) {\n <tr class=\"entity-row\">\n <td class=\"col-name\">\n <div class=\"entity-name-cell\">\n <span class=\"entity-name\">{{ entity.entityName }}</span>\n @if (entity.isOwner) {\n <span class=\"owner-badge owner-you\" title=\"You own this entity\">You</span>\n }\n </div>\n </td>\n <td class=\"col-schema\">\n <span class=\"schema-badge\">{{ entity.schemaName }}</span>\n </td>\n <td class=\"col-table\">\n <code class=\"table-name\">{{ entity.tableName }}</code>\n </td>\n <td class=\"col-owner\">\n @if (entity.isOwner) {\n <span class=\"owner-self\">\n <i class=\"fa-solid fa-user-check\"></i>\n You\n </span>\n } @else if (entity.ownerDisplayName) {\n <span class=\"owner-other\">{{ entity.ownerDisplayName }}</span>\n } @else {\n <span class=\"owner-other muted\">\u2014</span>\n }\n </td>\n <td class=\"col-created\">{{ FormatDate(entity.createdAt) }}</td>\n <td class=\"col-actions\">\n <div class=\"row-actions\">\n <button\n mjButton\n buttonStyle=\"secondary\"\n class=\"action-btn\"\n title=\"Edit this entity\"\n (click)=\"OnEditEntity(entity)\">\n <i class=\"fa-solid fa-pen-to-square\"></i>\n Edit\n </button>\n </div>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n <div class=\"entity-count\">\n {{ FilteredEntities.length }} {{ FilteredEntities.length === 1 ? 'entity' : 'entities' }}\n @if (SearchTerm) { matching \"{{ SearchTerm }}\" }\n </div>\n } @else if (!IsLoading) {\n <!-- \u2500\u2500 Zero state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n <div class=\"zero-state\">\n <div class=\"zero-state-icon\">\n <i class=\"fa-regular fa-rectangle-list\"></i>\n </div>\n @if (SearchTerm) {\n <h3 class=\"zero-state-title\">No entities match \"{{ SearchTerm }}\"</h3>\n <p class=\"zero-state-body\">Try a different search term or clear the filter.</p>\n <button mjButton buttonStyle=\"secondary\" (click)=\"SearchTerm = ''\">\n Clear search\n </button>\n } @else {\n <h3 class=\"zero-state-title\">No entities yet</h3>\n <p class=\"zero-state-body\">\n Create your first user-defined entity. You can also use the\n Database Designer agent in a conversation for guided design.\n </p>\n <button mjButton buttonStyle=\"primary\" (click)=\"OnNewEntity()\">\n <i class=\"fa-solid fa-plus\"></i>\n Create Entity\n </button>\n }\n </div>\n }\n }\n</mj-page-body-interior>\n", styles: ["/*\n Database Designer entity-list \u2014 sub-page of Admin \u2192 Data & Schema. Host is a\n flex column so <mj-page-header-interior> pins at the top and <mj-page-body-interior>\n fills the rest. The body primitive owns its own flex/scroll/padding \u2014 this\n component just needs the host-level layout. See Section 10 of\n plans/explorer-chrome-conventions.md.\n*/\n:host {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n background: var(--mj-bg-page);\n}\n\n/* Schema filter used in the [toolbar] slot. */\n.schema-filter {\n width: auto;\n min-width: 160px;\n max-width: 220px;\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Error banner \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-list-error {\n margin: 12px 24px;\n padding: 10px 14px;\n background: var(--mj-status-error-bg);\n color: var(--mj-status-error-text);\n border: 1px solid var(--mj-status-error-border);\n border-radius: 6px;\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 0.875rem;\n}\n\n/* \u2500\u2500 Skeleton loader \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.skeleton-table {\n padding: 0 24px;\n margin-top: 8px;\n}\n\n.skeleton-row {\n display: flex;\n gap: 16px;\n padding: 12px 0;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n\n.skeleton-cell {\n height: 18px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n animation: skeleton-pulse 1.4s ease-in-out infinite;\n}\n\n.skeleton-cell.wide { flex: 3; }\n.skeleton-cell.medium { flex: 2; }\n.skeleton-cell.narrow { flex: 1; }\n\n@keyframes skeleton-pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.45; }\n}\n\n/* \u2500\u2500 Table wrap \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.table-wrap {\n flex: 1;\n overflow: auto;\n padding: 0 24px;\n}\n\n/* \u2500\u2500 Entity table \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 0.9rem;\n}\n\n.entity-table thead tr {\n border-bottom: 2px solid var(--mj-border-default);\n}\n\n.entity-table th {\n padding: 10px 12px;\n text-align: left;\n font-weight: 600;\n color: var(--mj-text-secondary);\n font-size: 0.8125rem;\n text-transform: uppercase;\n letter-spacing: 0.03em;\n white-space: nowrap;\n user-select: none;\n}\n\n.entity-table th.sortable {\n cursor: pointer;\n}\n\n.entity-table th.sortable:hover {\n color: var(--mj-text-primary);\n}\n\n.sort-icon {\n display: inline-block;\n margin-left: 5px;\n font-size: 0.75rem;\n vertical-align: middle;\n min-width: 14px;\n}\n\n.sort-icon .muted {\n opacity: 0.3;\n}\n\n.entity-row {\n border-bottom: 1px solid var(--mj-border-subtle);\n transition: background 0.1s;\n}\n\n.entity-row:hover {\n background: var(--mj-bg-surface-hover);\n}\n\n.entity-table td {\n padding: 12px 12px;\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n\n/* \u2500\u2500 Column sizing \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n/* Fixed layout \u2014 percentages for content columns, px only for utility columns */\n\n.entity-table {\n table-layout: fixed;\n}\n\n.col-name { width: 28%; }\n.col-schema { width: 14%; }\n.col-table { width: 18%; }\n.col-owner { width: 15%; }\n.col-created { width: 13%; white-space: nowrap; }\n.col-actions { width: 12%; }\n\n/* \u2500\u2500 Cell content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-name-cell {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.entity-name {\n font-weight: 500;\n color: var(--mj-text-primary);\n}\n\n.owner-badge {\n display: inline-flex;\n align-items: center;\n font-size: 0.7rem;\n font-weight: 600;\n padding: 2px 6px;\n border-radius: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n\n.owner-badge.owner-you {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, var(--mj-bg-surface));\n color: var(--mj-brand-primary);\n}\n\n.schema-badge {\n display: inline-block;\n font-size: 0.8rem;\n font-family: monospace;\n padding: 2px 8px;\n border-radius: 4px;\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n border: 1px solid var(--mj-border-subtle);\n}\n\ncode.table-name {\n font-size: 0.8rem;\n font-family: monospace;\n color: var(--mj-text-secondary);\n}\n\n.owner-self {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n color: var(--mj-brand-primary);\n font-size: 0.875rem;\n}\n\n.owner-self i {\n font-size: 0.8rem;\n}\n\n.owner-other {\n color: var(--mj-text-secondary);\n font-size: 0.875rem;\n}\n\n.owner-other.muted {\n color: var(--mj-text-muted);\n}\n\n/* \u2500\u2500 Row actions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.row-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.action-btn {\n font-size: 0.8125rem;\n padding: 6px 12px;\n}\n\n/* \u2500\u2500 Row count footer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.entity-count {\n padding: 10px 24px;\n font-size: 0.8rem;\n color: var(--mj-text-muted);\n border-top: 1px solid var(--mj-border-subtle);\n flex-shrink: 0;\n}\n\n/* \u2500\u2500 Zero state \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.zero-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 60px 24px;\n text-align: center;\n gap: 16px;\n}\n\n.zero-state-icon {\n width: 72px;\n height: 72px;\n border-radius: 50%;\n background: var(--mj-bg-surface-sunken);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.zero-state-icon i {\n font-size: 2rem;\n color: var(--mj-text-muted);\n}\n\n.zero-state-title {\n margin: 0;\n font-size: 1.1rem;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n\n.zero-state-body {\n margin: 0;\n font-size: 0.9rem;\n color: var(--mj-text-secondary);\n max-width: 420px;\n line-height: 1.6;\n word-break: break-word;\n overflow-wrap: break-word;\n}\n"] }]
|
|
464
470
|
}], null, { EditEntity: [{
|
|
465
471
|
type: Output
|
|
466
472
|
}], ViewEntity: [{
|