@memberjunction/ng-dashboards 5.32.0 → 5.33.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.
Files changed (69) hide show
  1. package/dist/Admin/admin-data-schema.component.d.ts +16 -0
  2. package/dist/Admin/admin-data-schema.component.d.ts.map +1 -0
  3. package/dist/Admin/admin-data-schema.component.js +136 -0
  4. package/dist/Admin/admin-data-schema.component.js.map +1 -0
  5. package/dist/Admin/admin-dev-tools-resource.component.d.ts +14 -0
  6. package/dist/Admin/admin-dev-tools-resource.component.d.ts.map +1 -0
  7. package/dist/Admin/admin-dev-tools-resource.component.js +162 -0
  8. package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -0
  9. package/dist/Admin/admin-identity-access.component.d.ts +15 -0
  10. package/dist/Admin/admin-identity-access.component.d.ts.map +1 -0
  11. package/dist/Admin/admin-identity-access.component.js +156 -0
  12. package/dist/Admin/admin-identity-access.component.js.map +1 -0
  13. package/dist/Admin/admin-monitoring.component.d.ts +15 -0
  14. package/dist/Admin/admin-monitoring.component.d.ts.map +1 -0
  15. package/dist/Admin/admin-monitoring.component.js +130 -0
  16. package/dist/Admin/admin-monitoring.component.js.map +1 -0
  17. package/dist/Admin/base-admin-container.component.d.ts +80 -0
  18. package/dist/Admin/base-admin-container.component.d.ts.map +1 -0
  19. package/dist/Admin/base-admin-container.component.js +198 -0
  20. package/dist/Admin/base-admin-container.component.js.map +1 -0
  21. package/dist/Admin/index.d.ts +6 -0
  22. package/dist/Admin/index.d.ts.map +1 -0
  23. package/dist/Admin/index.js +6 -0
  24. package/dist/Admin/index.js.map +1 -0
  25. package/dist/DevTools/app-state-inspector.component.d.ts +53 -0
  26. package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -0
  27. package/dist/DevTools/app-state-inspector.component.js +301 -0
  28. package/dist/DevTools/app-state-inspector.component.js.map +1 -0
  29. package/dist/DevTools/class-registry.component.d.ts +64 -0
  30. package/dist/DevTools/class-registry.component.d.ts.map +1 -0
  31. package/dist/DevTools/class-registry.component.js +423 -0
  32. package/dist/DevTools/class-registry.component.js.map +1 -0
  33. package/dist/DevTools/dev-tools-prefs.d.ts +21 -0
  34. package/dist/DevTools/dev-tools-prefs.d.ts.map +1 -0
  35. package/dist/DevTools/dev-tools-prefs.js +48 -0
  36. package/dist/DevTools/dev-tools-prefs.js.map +1 -0
  37. package/dist/DevTools/event-monitor.component.d.ts +78 -0
  38. package/dist/DevTools/event-monitor.component.d.ts.map +1 -0
  39. package/dist/DevTools/event-monitor.component.js +659 -0
  40. package/dist/DevTools/event-monitor.component.js.map +1 -0
  41. package/dist/DevTools/graphql-console.component.d.ts +153 -0
  42. package/dist/DevTools/graphql-console.component.d.ts.map +1 -0
  43. package/dist/DevTools/graphql-console.component.js +1463 -0
  44. package/dist/DevTools/graphql-console.component.js.map +1 -0
  45. package/dist/DevTools/index.d.ts +8 -0
  46. package/dist/DevTools/index.d.ts.map +1 -0
  47. package/dist/DevTools/index.js +8 -0
  48. package/dist/DevTools/index.js.map +1 -0
  49. package/dist/DevTools/layout-inspector.component.d.ts +42 -0
  50. package/dist/DevTools/layout-inspector.component.d.ts.map +1 -0
  51. package/dist/DevTools/layout-inspector.component.js +208 -0
  52. package/dist/DevTools/layout-inspector.component.js.map +1 -0
  53. package/dist/DevTools/lazy-module-status.component.d.ts +65 -0
  54. package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -0
  55. package/dist/DevTools/lazy-module-status.component.js +388 -0
  56. package/dist/DevTools/lazy-module-status.component.js.map +1 -0
  57. package/dist/DevTools/settings-explorer.component.d.ts +55 -0
  58. package/dist/DevTools/settings-explorer.component.d.ts.map +1 -0
  59. package/dist/DevTools/settings-explorer.component.js +394 -0
  60. package/dist/DevTools/settings-explorer.component.js.map +1 -0
  61. package/dist/core-dashboards.module.d.ts +45 -34
  62. package/dist/core-dashboards.module.d.ts.map +1 -1
  63. package/dist/core-dashboards.module.js +57 -0
  64. package/dist/core-dashboards.module.js.map +1 -1
  65. package/dist/public-api.d.ts +2 -0
  66. package/dist/public-api.d.ts.map +1 -1
  67. package/dist/public-api.js +2 -0
  68. package/dist/public-api.js.map +1 -1
  69. package/package.json +52 -52
@@ -0,0 +1,16 @@
1
+ import { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Admin → Data & Schema. ERD viewer, query browser, and the database
5
+ * designer wizard. Order matters here: ERD first (overview), then Query
6
+ * Browser (read), then Database Designer (write).
7
+ */
8
+ export declare class AdminDataSchemaComponent extends BaseAdminContainerComponent {
9
+ readonly ContainerTitle = "Data & Schema";
10
+ readonly ContainerIcon = "fa-solid fa-database";
11
+ readonly ContainerSubtitle = "Schema visualization, queries, and database design";
12
+ readonly Sections: AdminSection[];
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminDataSchemaComponent, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminDataSchemaComponent, "mj-admin-data-schema", never, {}, {}, never, never, false, never>;
15
+ }
16
+ //# sourceMappingURL=admin-data-schema.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-data-schema.component.d.ts","sourceRoot":"","sources":["../../src/Admin/admin-data-schema.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;AAE7F;;;;GAIG;AACH,qBAOa,wBAAyB,SAAQ,2BAA2B;IACrE,SAAgB,cAAc,mBAAmB;IACjD,SAAgB,aAAa,0BAA0B;IACvD,SAAgB,iBAAiB,wDAAwD;IAEzF,SAAgB,QAAQ,EAAE,YAAY,EAAE,CAsBtC;yCA3BO,wBAAwB;2CAAxB,wBAAwB;CA4BpC"}
@@ -0,0 +1,136 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
9
+ import { RegisterClass } from '@memberjunction/global';
10
+ import { BaseAdminContainerComponent } from './base-admin-container.component';
11
+ import * as i0 from "@angular/core";
12
+ const _forTrack0 = ($index, $item) => $item.id;
13
+ function AdminDataSchemaComponent_For_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div", 17);
15
+ i0.ɵɵtext(1);
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const section_r2 = i0.ɵɵnextContext().$implicit;
19
+ i0.ɵɵadvance();
20
+ i0.ɵɵtextInterpolate(section_r2.description);
21
+ } }
22
+ function AdminDataSchemaComponent_For_12_Template(rf, ctx) { if (rf & 1) {
23
+ const _r1 = i0.ɵɵgetCurrentView();
24
+ i0.ɵɵelementStart(0, "button", 13);
25
+ i0.ɵɵlistener("click", function AdminDataSchemaComponent_For_12_Template_button_click_0_listener() { const section_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionClick(section_r2)); });
26
+ i0.ɵɵelement(1, "i", 14);
27
+ i0.ɵɵelementStart(2, "div", 15)(3, "div", 16);
28
+ i0.ɵɵtext(4);
29
+ i0.ɵɵelementEnd();
30
+ i0.ɵɵconditionalCreate(5, AdminDataSchemaComponent_For_12_Conditional_5_Template, 2, 1, "div", 17);
31
+ i0.ɵɵelementEnd()();
32
+ } if (rf & 2) {
33
+ const section_r2 = ctx.$implicit;
34
+ const ctx_r2 = i0.ɵɵnextContext();
35
+ i0.ɵɵclassProp("admin-container__nav-item--active", ctx_r2.ActiveSection === section_r2.id);
36
+ i0.ɵɵadvance();
37
+ i0.ɵɵclassMap(section_r2.icon);
38
+ i0.ɵɵadvance(3);
39
+ i0.ɵɵtextInterpolate(section_r2.label);
40
+ i0.ɵɵadvance();
41
+ i0.ɵɵconditional(section_r2.description ? 5 : -1);
42
+ } }
43
+ function AdminDataSchemaComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "div", 10);
45
+ i0.ɵɵelement(1, "i", 18);
46
+ i0.ɵɵelementStart(2, "span");
47
+ i0.ɵɵtext(3);
48
+ i0.ɵɵelementEnd()();
49
+ } if (rf & 2) {
50
+ const ctx_r2 = i0.ɵɵnextContext();
51
+ i0.ɵɵadvance(3);
52
+ i0.ɵɵtextInterpolate(ctx_r2.LoadError);
53
+ } }
54
+ function AdminDataSchemaComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 11);
56
+ i0.ɵɵelement(1, "i", 19);
57
+ i0.ɵɵelementStart(2, "span");
58
+ i0.ɵɵtext(3, "Loading\u2026");
59
+ i0.ɵɵelementEnd()();
60
+ } }
61
+ /**
62
+ * Admin → Data & Schema. ERD viewer, query browser, and the database
63
+ * designer wizard. Order matters here: ERD first (overview), then Query
64
+ * Browser (read), then Database Designer (write).
65
+ */
66
+ let AdminDataSchemaComponent = class AdminDataSchemaComponent extends BaseAdminContainerComponent {
67
+ ContainerTitle = 'Data & Schema';
68
+ ContainerIcon = 'fa-solid fa-database';
69
+ ContainerSubtitle = 'Schema visualization, queries, and database design';
70
+ Sections = [
71
+ {
72
+ id: 'erd',
73
+ label: 'ERD',
74
+ icon: 'fa-solid fa-diagram-project',
75
+ description: 'Entity-relationship diagram',
76
+ source: { kind: 'dashboard', dashboardName: 'ERD' }
77
+ },
78
+ {
79
+ id: 'query-browser',
80
+ label: 'Query Browser',
81
+ icon: 'fa-solid fa-magnifying-glass',
82
+ description: 'Browse and run stored queries',
83
+ source: { kind: 'resource', driverClass: 'QueryBrowserResource' }
84
+ },
85
+ {
86
+ id: 'database-designer',
87
+ label: 'Database Designer',
88
+ icon: 'fa-solid fa-wand-magic-sparkles',
89
+ description: 'Create entities and fields',
90
+ source: { kind: 'resource', driverClass: 'DatabaseDesignerDashboard' }
91
+ }
92
+ ];
93
+ static ɵfac = /*@__PURE__*/ (() => { let ɵAdminDataSchemaComponent_BaseFactory; return function AdminDataSchemaComponent_Factory(__ngFactoryType__) { return (ɵAdminDataSchemaComponent_BaseFactory || (ɵAdminDataSchemaComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AdminDataSchemaComponent)))(__ngFactoryType__ || AdminDataSchemaComponent); }; })();
94
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminDataSchemaComponent, selectors: [["mj-admin-data-schema"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 7, consts: [["contentHost", ""], [1, "admin-container"], [1, "admin-container__header"], [1, "admin-container__header-icon"], [1, "admin-container__header-title"], [1, "admin-container__header-sub"], [1, "admin-container__body"], [1, "admin-container__nav"], ["type", "button", 1, "admin-container__nav-item", 3, "admin-container__nav-item--active"], [1, "admin-container__content"], [1, "admin-container__error"], [1, "admin-container__loading"], [1, "admin-container__host"], ["type", "button", 1, "admin-container__nav-item", 3, "click"], [1, "admin-container__nav-icon"], [1, "admin-container__nav-text"], [1, "admin-container__nav-label"], [1, "admin-container__nav-desc"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function AdminDataSchemaComponent_Template(rf, ctx) { if (rf & 1) {
95
+ i0.ɵɵelementStart(0, "div", 1)(1, "header", 2)(2, "div", 3);
96
+ i0.ɵɵelement(3, "i");
97
+ i0.ɵɵelementEnd();
98
+ i0.ɵɵelementStart(4, "div")(5, "h3", 4);
99
+ i0.ɵɵtext(6);
100
+ i0.ɵɵelementEnd();
101
+ i0.ɵɵelementStart(7, "div", 5);
102
+ i0.ɵɵtext(8);
103
+ i0.ɵɵelementEnd()()();
104
+ i0.ɵɵelementStart(9, "div", 6)(10, "aside", 7);
105
+ i0.ɵɵrepeaterCreate(11, AdminDataSchemaComponent_For_12_Template, 6, 6, "button", 8, _forTrack0);
106
+ i0.ɵɵelementEnd();
107
+ i0.ɵɵelementStart(13, "main", 9);
108
+ i0.ɵɵconditionalCreate(14, AdminDataSchemaComponent_Conditional_14_Template, 4, 1, "div", 10)(15, AdminDataSchemaComponent_Conditional_15_Template, 4, 0, "div", 11);
109
+ i0.ɵɵelementStart(16, "div", 12);
110
+ i0.ɵɵelementContainer(17, null, 0);
111
+ i0.ɵɵelementEnd()()()();
112
+ } if (rf & 2) {
113
+ i0.ɵɵadvance(3);
114
+ i0.ɵɵclassMap(ctx.ContainerIcon);
115
+ i0.ɵɵadvance(3);
116
+ i0.ɵɵtextInterpolate(ctx.ContainerTitle);
117
+ i0.ɵɵadvance(2);
118
+ i0.ɵɵtextInterpolate(ctx.ContainerSubtitle);
119
+ i0.ɵɵadvance(3);
120
+ i0.ɵɵrepeater(ctx.Sections);
121
+ i0.ɵɵadvance(3);
122
+ i0.ɵɵconditional(ctx.LoadError ? 14 : ctx.IsLoading ? 15 : -1);
123
+ i0.ɵɵadvance(2);
124
+ i0.ɵɵclassProp("admin-container__host--hidden", ctx.LoadError || ctx.IsLoading);
125
+ } }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.admin-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.admin-container__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n\n\n.admin-container__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav[_ngcontent-%COMP%] {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.admin-container__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] .admin-container__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.admin-container__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n\n\n.admin-container__host[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden[_ngcontent-%COMP%] { display: none; }\n.admin-container__host[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.admin-container__empty[_ngcontent-%COMP%], \n.admin-container__error[_ngcontent-%COMP%], \n.admin-container__loading[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.admin-container__error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 20px; }\n.admin-container__loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body[_ngcontent-%COMP%] { flex-direction: column; }\n .admin-container__nav[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc[_ngcontent-%COMP%] { display: none; }\n .admin-container__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}"] });
126
+ };
127
+ AdminDataSchemaComponent = __decorate([
128
+ RegisterClass(BaseResourceComponent, 'AdminDataSchema')
129
+ ], AdminDataSchemaComponent);
130
+ export { AdminDataSchemaComponent };
131
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminDataSchemaComponent, [{
132
+ type: Component,
133
+ args: [{ standalone: false, selector: 'mj-admin-data-schema', template: "<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading\u2026</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.admin-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Header */\n.admin-container__header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* Layout: sidebar + content */\n.admin-container__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text { flex: 1; min-width: 0; }\n.admin-container__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active .admin-container__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.admin-container__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n/* Dynamic host */\n.admin-container__host {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden { display: none; }\n.admin-container__host > * {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty + error + loading states */\n.admin-container__empty,\n.admin-container__error,\n.admin-container__loading {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error {\n color: var(--mj-status-error);\n}\n.admin-container__error i { font-size: 20px; }\n.admin-container__loading i { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body { flex-direction: column; }\n .admin-container__nav {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc { display: none; }\n .admin-container__header { padding: 12px 14px; gap: 10px; }\n}\n"] }]
134
+ }], null, null); })();
135
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AdminDataSchemaComponent, { className: "AdminDataSchemaComponent", filePath: "src/Admin/admin-data-schema.component.ts", lineNumber: 18 }); })();
136
+ //# sourceMappingURL=admin-data-schema.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-data-schema.component.js","sourceRoot":"","sources":["../../src/Admin/admin-data-schema.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAgB,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;;;ICiBjE,+BAAuC;IAAA,YAAyB;IAAA,iBAAM;;;IAA/B,cAAyB;IAAzB,4CAAyB;;;;IAR5E,kCAG0C;IAAlC,kNAAS,iCAAuB,KAAC;IACrC,wBAAgE;IAE5D,AADJ,+BAAuC,cACK;IAAA,YAAmB;IAAA,iBAAM;IACjE,kGAA2B;IAInC,AADI,iBAAM,EACD;;;;IATD,2FAAwE;IAEvC,cAAsB;IAAtB,8BAAsB;IAEf,eAAmB;IAAnB,sCAAmB;IAC3D,cAEC;IAFD,iDAEC;;;IAQT,+BAAoC;IAChC,wBAAgD;IAChD,4BAAM;IAAA,YAAe;IACzB,AADyB,iBAAO,EAC1B;;;IADI,eAAe;IAAf,sCAAe;;;IAGzB,+BAAsC;IAClC,wBAA2C;IAC3C,4BAAM;IAAA,6BAAQ;IAClB,AADkB,iBAAO,EACnB;;ADhCtB;;;;GAIG;AAQI,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,2BAA2B;IACrD,cAAc,GAAG,eAAe,CAAC;IACjC,aAAa,GAAG,sBAAsB,CAAC;IACvC,iBAAiB,GAAG,oDAAoD,CAAC;IAEzE,QAAQ,GAAmB;QACvC;YACI,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,6BAA6B;YACnC,WAAW,EAAE,6BAA6B;YAC1C,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,EAAE;SACtD;QACD;YACI,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,8BAA8B;YACpC,WAAW,EAAE,+BAA+B;YAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,sBAAsB,EAAE;SACpE;QACD;YACI,EAAE,EAAE,mBAAmB;YACvB,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,iCAAiC;YACvC,WAAW,EAAE,4BAA4B;YACzC,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2BAA2B,EAAE;SACzE;KACJ,CAAC;6QA3BO,wBAAwB,yBAAxB,wBAAwB;6DAAxB,wBAAwB;YCf7B,AADJ,AADJ,8BAA6B,gBACe,aACM;YAAA,oBAA+B;YAAA,iBAAM;YAE3E,AADJ,2BAAK,YACyC;YAAA,YAAoB;YAAA,iBAAK;YACnE,8BAAyC;YAAA,YAAuB;YAExE,AADI,AADoE,iBAAM,EACpE,EACD;YAGL,AADJ,8BAAmC,gBACK;YAChC,gGAaC;YACL,iBAAQ;YAER,gCAAuC;YAMjC,AALF,6FAAiB,uEAKO;YAMxB,gCAAkG;YAC9F,kCAA0C;YAI1D,AADI,AADI,AADI,iBAAM,EACH,EACL,EACJ;;YA1C+C,eAAuB;YAAvB,gCAAuB;YAEtB,eAAoB;YAApB,wCAAoB;YACrB,eAAuB;YAAvB,2CAAuB;YAMhE,eAaC;YAbD,2BAaC;YAID,eAUC;YAVD,8DAUC;YACkC,eAA8D;YAA9D,+EAA8D;;;ADtBhG,wBAAwB;IAPpC,aAAa,CAAC,qBAAqB,EAAE,iBAAiB,CAAC;GAO3C,wBAAwB,CA4BpC;;iFA5BY,wBAAwB;cANpC,SAAS;6BACM,KAAK,YACP,sBAAsB;;kFAIvB,wBAAwB","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Data & Schema. ERD viewer, query browser, and the database\n * designer wizard. Order matters here: ERD first (overview), then Query\n * Browser (read), then Database Designer (write).\n */\n@RegisterClass(BaseResourceComponent, 'AdminDataSchema')\n@Component({\n standalone: false,\n selector: 'mj-admin-data-schema',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminDataSchemaComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Data & Schema';\n public readonly ContainerIcon = 'fa-solid fa-database';\n public readonly ContainerSubtitle = 'Schema visualization, queries, and database design';\n\n public readonly Sections: AdminSection[] = [\n {\n id: 'erd',\n label: 'ERD',\n icon: 'fa-solid fa-diagram-project',\n description: 'Entity-relationship diagram',\n source: { kind: 'dashboard', dashboardName: 'ERD' }\n },\n {\n id: 'query-browser',\n label: 'Query Browser',\n icon: 'fa-solid fa-magnifying-glass',\n description: 'Browse and run stored queries',\n source: { kind: 'resource', driverClass: 'QueryBrowserResource' }\n },\n {\n id: 'database-designer',\n label: 'Database Designer',\n icon: 'fa-solid fa-wand-magic-sparkles',\n description: 'Create entities and fields',\n source: { kind: 'resource', driverClass: 'DatabaseDesignerDashboard' }\n }\n ];\n}\n","<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading…</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n"]}
@@ -0,0 +1,14 @@
1
+ import { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Admin → Developer Tools. Diagnostic and inspection sub-tools for developers.
5
+ */
6
+ export declare class AdminDevToolsResourceComponent extends BaseAdminContainerComponent {
7
+ readonly ContainerTitle = "Developer Tools";
8
+ readonly ContainerIcon = "fa-solid fa-screwdriver-wrench";
9
+ readonly ContainerSubtitle = "Diagnostic and inspection tools for developers";
10
+ readonly Sections: AdminSection[];
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminDevToolsResourceComponent, never>;
12
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminDevToolsResourceComponent, "mj-admin-dev-tools-resource", never, {}, {}, never, never, false, never>;
13
+ }
14
+ //# sourceMappingURL=admin-dev-tools-resource.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-dev-tools-resource.component.d.ts","sourceRoot":"","sources":["../../src/Admin/admin-dev-tools-resource.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;AAE7F;;GAEG;AACH,qBAOa,8BAA+B,SAAQ,2BAA2B;IAC3E,SAAgB,cAAc,qBAAqB;IACnD,SAAgB,aAAa,oCAAoC;IACjE,SAAgB,iBAAiB,oDAAoD;IAErF,SAAgB,QAAQ,EAAE,YAAY,EAAE,CAkDtC;yCAvDO,8BAA8B;2CAA9B,8BAA8B;CAwD1C"}
@@ -0,0 +1,162 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Component } from '@angular/core';
8
+ import { BaseResourceComponent } from '@memberjunction/ng-shared';
9
+ import { RegisterClass } from '@memberjunction/global';
10
+ import { BaseAdminContainerComponent } from './base-admin-container.component';
11
+ import * as i0 from "@angular/core";
12
+ const _forTrack0 = ($index, $item) => $item.id;
13
+ function AdminDevToolsResourceComponent_For_12_Conditional_5_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelementStart(0, "div", 17);
15
+ i0.ɵɵtext(1);
16
+ i0.ɵɵelementEnd();
17
+ } if (rf & 2) {
18
+ const section_r2 = i0.ɵɵnextContext().$implicit;
19
+ i0.ɵɵadvance();
20
+ i0.ɵɵtextInterpolate(section_r2.description);
21
+ } }
22
+ function AdminDevToolsResourceComponent_For_12_Template(rf, ctx) { if (rf & 1) {
23
+ const _r1 = i0.ɵɵgetCurrentView();
24
+ i0.ɵɵelementStart(0, "button", 13);
25
+ i0.ɵɵlistener("click", function AdminDevToolsResourceComponent_For_12_Template_button_click_0_listener() { const section_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.OnSectionClick(section_r2)); });
26
+ i0.ɵɵelement(1, "i", 14);
27
+ i0.ɵɵelementStart(2, "div", 15)(3, "div", 16);
28
+ i0.ɵɵtext(4);
29
+ i0.ɵɵelementEnd();
30
+ i0.ɵɵconditionalCreate(5, AdminDevToolsResourceComponent_For_12_Conditional_5_Template, 2, 1, "div", 17);
31
+ i0.ɵɵelementEnd()();
32
+ } if (rf & 2) {
33
+ const section_r2 = ctx.$implicit;
34
+ const ctx_r2 = i0.ɵɵnextContext();
35
+ i0.ɵɵclassProp("admin-container__nav-item--active", ctx_r2.ActiveSection === section_r2.id);
36
+ i0.ɵɵadvance();
37
+ i0.ɵɵclassMap(section_r2.icon);
38
+ i0.ɵɵadvance(3);
39
+ i0.ɵɵtextInterpolate(section_r2.label);
40
+ i0.ɵɵadvance();
41
+ i0.ɵɵconditional(section_r2.description ? 5 : -1);
42
+ } }
43
+ function AdminDevToolsResourceComponent_Conditional_14_Template(rf, ctx) { if (rf & 1) {
44
+ i0.ɵɵelementStart(0, "div", 10);
45
+ i0.ɵɵelement(1, "i", 18);
46
+ i0.ɵɵelementStart(2, "span");
47
+ i0.ɵɵtext(3);
48
+ i0.ɵɵelementEnd()();
49
+ } if (rf & 2) {
50
+ const ctx_r2 = i0.ɵɵnextContext();
51
+ i0.ɵɵadvance(3);
52
+ i0.ɵɵtextInterpolate(ctx_r2.LoadError);
53
+ } }
54
+ function AdminDevToolsResourceComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 11);
56
+ i0.ɵɵelement(1, "i", 19);
57
+ i0.ɵɵelementStart(2, "span");
58
+ i0.ɵɵtext(3, "Loading\u2026");
59
+ i0.ɵɵelementEnd()();
60
+ } }
61
+ /**
62
+ * Admin → Developer Tools. Diagnostic and inspection sub-tools for developers.
63
+ */
64
+ let AdminDevToolsResourceComponent = class AdminDevToolsResourceComponent extends BaseAdminContainerComponent {
65
+ ContainerTitle = 'Developer Tools';
66
+ ContainerIcon = 'fa-solid fa-screwdriver-wrench';
67
+ ContainerSubtitle = 'Diagnostic and inspection tools for developers';
68
+ Sections = [
69
+ {
70
+ id: 'graphql',
71
+ label: 'GraphQL Console',
72
+ icon: 'fa-solid fa-code',
73
+ description: 'Run queries against the API',
74
+ source: { kind: 'resource', driverClass: 'GraphQLConsoleInspector' }
75
+ },
76
+ {
77
+ id: 'events',
78
+ label: 'Event Monitor',
79
+ icon: 'fa-solid fa-bolt',
80
+ description: 'Live tail of MJ events',
81
+ source: { kind: 'resource', driverClass: 'EventMonitorInspector' }
82
+ },
83
+ {
84
+ id: 'classes',
85
+ label: 'Class Registry',
86
+ icon: 'fa-solid fa-cubes',
87
+ description: 'All @RegisterClass entries',
88
+ source: { kind: 'resource', driverClass: 'ClassRegistryInspector' }
89
+ },
90
+ {
91
+ id: 'lazy',
92
+ label: 'Lazy Loading',
93
+ icon: 'fa-solid fa-puzzle-piece',
94
+ description: 'Code-split chunk status',
95
+ source: { kind: 'resource', driverClass: 'LazyModuleStatusInspector' }
96
+ },
97
+ {
98
+ id: 'settings',
99
+ label: 'Settings Explorer',
100
+ icon: 'fa-solid fa-sliders',
101
+ description: 'User and instance settings',
102
+ source: { kind: 'resource', driverClass: 'SettingsExplorerInspector' }
103
+ },
104
+ {
105
+ id: 'app-state',
106
+ label: 'App State',
107
+ icon: 'fa-solid fa-magnifying-glass-chart',
108
+ description: 'Snapshot of user, provider, workspace',
109
+ source: { kind: 'resource', driverClass: 'AppStateInspector' }
110
+ },
111
+ {
112
+ id: 'layout',
113
+ label: 'Layout',
114
+ icon: 'fa-solid fa-table-columns',
115
+ description: 'Workspace + Golden Layout config',
116
+ source: { kind: 'resource', driverClass: 'LayoutInspector' }
117
+ }
118
+ ];
119
+ static ɵfac = /*@__PURE__*/ (() => { let ɵAdminDevToolsResourceComponent_BaseFactory; return function AdminDevToolsResourceComponent_Factory(__ngFactoryType__) { return (ɵAdminDevToolsResourceComponent_BaseFactory || (ɵAdminDevToolsResourceComponent_BaseFactory = i0.ɵɵgetInheritedFactory(AdminDevToolsResourceComponent)))(__ngFactoryType__ || AdminDevToolsResourceComponent); }; })();
120
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AdminDevToolsResourceComponent, selectors: [["mj-admin-dev-tools-resource"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 19, vars: 7, consts: [["contentHost", ""], [1, "admin-container"], [1, "admin-container__header"], [1, "admin-container__header-icon"], [1, "admin-container__header-title"], [1, "admin-container__header-sub"], [1, "admin-container__body"], [1, "admin-container__nav"], ["type", "button", 1, "admin-container__nav-item", 3, "admin-container__nav-item--active"], [1, "admin-container__content"], [1, "admin-container__error"], [1, "admin-container__loading"], [1, "admin-container__host"], ["type", "button", 1, "admin-container__nav-item", 3, "click"], [1, "admin-container__nav-icon"], [1, "admin-container__nav-text"], [1, "admin-container__nav-label"], [1, "admin-container__nav-desc"], [1, "fa-solid", "fa-triangle-exclamation"], [1, "fa-solid", "fa-spinner", "fa-spin"]], template: function AdminDevToolsResourceComponent_Template(rf, ctx) { if (rf & 1) {
121
+ i0.ɵɵelementStart(0, "div", 1)(1, "header", 2)(2, "div", 3);
122
+ i0.ɵɵelement(3, "i");
123
+ i0.ɵɵelementEnd();
124
+ i0.ɵɵelementStart(4, "div")(5, "h3", 4);
125
+ i0.ɵɵtext(6);
126
+ i0.ɵɵelementEnd();
127
+ i0.ɵɵelementStart(7, "div", 5);
128
+ i0.ɵɵtext(8);
129
+ i0.ɵɵelementEnd()()();
130
+ i0.ɵɵelementStart(9, "div", 6)(10, "aside", 7);
131
+ i0.ɵɵrepeaterCreate(11, AdminDevToolsResourceComponent_For_12_Template, 6, 6, "button", 8, _forTrack0);
132
+ i0.ɵɵelementEnd();
133
+ i0.ɵɵelementStart(13, "main", 9);
134
+ i0.ɵɵconditionalCreate(14, AdminDevToolsResourceComponent_Conditional_14_Template, 4, 1, "div", 10)(15, AdminDevToolsResourceComponent_Conditional_15_Template, 4, 0, "div", 11);
135
+ i0.ɵɵelementStart(16, "div", 12);
136
+ i0.ɵɵelementContainer(17, null, 0);
137
+ i0.ɵɵelementEnd()()()();
138
+ } if (rf & 2) {
139
+ i0.ɵɵadvance(3);
140
+ i0.ɵɵclassMap(ctx.ContainerIcon);
141
+ i0.ɵɵadvance(3);
142
+ i0.ɵɵtextInterpolate(ctx.ContainerTitle);
143
+ i0.ɵɵadvance(2);
144
+ i0.ɵɵtextInterpolate(ctx.ContainerSubtitle);
145
+ i0.ɵɵadvance(3);
146
+ i0.ɵɵrepeater(ctx.Sections);
147
+ i0.ɵɵadvance(3);
148
+ i0.ɵɵconditional(ctx.LoadError ? 14 : ctx.IsLoading ? 15 : -1);
149
+ i0.ɵɵadvance(2);
150
+ i0.ɵɵclassProp("admin-container__host--hidden", ctx.LoadError || ctx.IsLoading);
151
+ } }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.admin-container[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n\n\n.admin-container__header[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon[_ngcontent-%COMP%] {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n\n\n.admin-container__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav[_ngcontent-%COMP%] {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item[_ngcontent-%COMP%] {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon[_ngcontent-%COMP%] {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.admin-container__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active[_ngcontent-%COMP%] .admin-container__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.admin-container__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n\n\n.admin-container__host[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden[_ngcontent-%COMP%] { display: none; }\n.admin-container__host[_ngcontent-%COMP%] > *[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.admin-container__empty[_ngcontent-%COMP%], \n.admin-container__error[_ngcontent-%COMP%], \n.admin-container__loading[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n}\n.admin-container__error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 20px; }\n.admin-container__loading[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body[_ngcontent-%COMP%] { flex-direction: column; }\n .admin-container__nav[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc[_ngcontent-%COMP%] { display: none; }\n .admin-container__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}"] });
152
+ };
153
+ AdminDevToolsResourceComponent = __decorate([
154
+ RegisterClass(BaseResourceComponent, 'AdminDeveloperTools')
155
+ ], AdminDevToolsResourceComponent);
156
+ export { AdminDevToolsResourceComponent };
157
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AdminDevToolsResourceComponent, [{
158
+ type: Component,
159
+ args: [{ standalone: false, selector: 'mj-admin-dev-tools-resource', template: "<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading\u2026</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.admin-container {\n display: flex;\n flex-direction: column;\n height: 100%;\n min-height: 0;\n background: var(--mj-bg-page);\n color: var(--mj-text-primary);\n font-family: inherit;\n}\n\n/* Header */\n.admin-container__header {\n display: flex;\n align-items: center;\n gap: 14px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n flex-shrink: 0;\n}\n.admin-container__header-icon {\n width: 36px; height: 36px;\n border-radius: 9px;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: white;\n display: flex; align-items: center; justify-content: center;\n font-size: 15px;\n flex-shrink: 0;\n}\n.admin-container__header-title {\n margin: 0;\n font-size: 15px;\n font-weight: 600;\n color: var(--mj-text-primary);\n letter-spacing: -0.2px;\n}\n.admin-container__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n\n/* Layout: sidebar + content */\n.admin-container__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.admin-container__nav {\n width: 240px;\n border-right: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n overflow-y: auto;\n flex-shrink: 0;\n padding: 8px;\n}\n.admin-container__nav-item {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.12s;\n margin-bottom: 2px;\n font-family: inherit;\n border: none;\n background: transparent;\n color: var(--mj-text-secondary);\n text-align: left;\n width: 100%;\n}\n.admin-container__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.admin-container__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.admin-container__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.admin-container__nav-icon {\n width: 18px;\n text-align: center;\n font-size: 13px;\n margin-top: 1px;\n flex-shrink: 0;\n color: inherit;\n}\n.admin-container__nav-text { flex: 1; min-width: 0; }\n.admin-container__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.admin-container__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.admin-container__nav-item--active .admin-container__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.admin-container__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n overflow: hidden;\n}\n\n/* Dynamic host */\n.admin-container__host {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.admin-container__host--hidden { display: none; }\n.admin-container__host > * {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty + error + loading states */\n.admin-container__empty,\n.admin-container__error,\n.admin-container__loading {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 10px;\n color: var(--mj-text-muted);\n font-size: 13px;\n padding: 32px;\n text-align: center;\n}\n.admin-container__error {\n color: var(--mj-status-error);\n}\n.admin-container__error i { font-size: 20px; }\n.admin-container__loading i { font-size: 16px; color: var(--mj-brand-primary); }\n\n@media (max-width: 700px) {\n .admin-container__body { flex-direction: column; }\n .admin-container__nav {\n width: 100%;\n height: auto;\n max-height: 220px;\n border-right: none;\n border-bottom: 1px solid var(--mj-border-default);\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n .admin-container__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .admin-container__nav-desc { display: none; }\n .admin-container__header { padding: 12px 14px; gap: 10px; }\n}\n"] }]
160
+ }], null, null); })();
161
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(AdminDevToolsResourceComponent, { className: "AdminDevToolsResourceComponent", filePath: "src/Admin/admin-dev-tools-resource.component.ts", lineNumber: 16 }); })();
162
+ //# sourceMappingURL=admin-dev-tools-resource.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-dev-tools-resource.component.js","sourceRoot":"","sources":["../../src/Admin/admin-dev-tools-resource.component.ts","../../src/Admin/admin-container.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';\n\n/**\n * Admin → Developer Tools. Diagnostic and inspection sub-tools for developers.\n */\n@RegisterClass(BaseResourceComponent, 'AdminDeveloperTools')\n@Component({\n standalone: false,\n selector: 'mj-admin-dev-tools-resource',\n templateUrl: './admin-container.component.html',\n styleUrls: ['./admin-container.component.css']\n})\nexport class AdminDevToolsResourceComponent extends BaseAdminContainerComponent {\n public readonly ContainerTitle = 'Developer Tools';\n public readonly ContainerIcon = 'fa-solid fa-screwdriver-wrench';\n public readonly ContainerSubtitle = 'Diagnostic and inspection tools for developers';\n\n public readonly Sections: AdminSection[] = [\n {\n id: 'graphql',\n label: 'GraphQL Console',\n icon: 'fa-solid fa-code',\n description: 'Run queries against the API',\n source: { kind: 'resource', driverClass: 'GraphQLConsoleInspector' }\n },\n {\n id: 'events',\n label: 'Event Monitor',\n icon: 'fa-solid fa-bolt',\n description: 'Live tail of MJ events',\n source: { kind: 'resource', driverClass: 'EventMonitorInspector' }\n },\n {\n id: 'classes',\n label: 'Class Registry',\n icon: 'fa-solid fa-cubes',\n description: 'All @RegisterClass entries',\n source: { kind: 'resource', driverClass: 'ClassRegistryInspector' }\n },\n {\n id: 'lazy',\n label: 'Lazy Loading',\n icon: 'fa-solid fa-puzzle-piece',\n description: 'Code-split chunk status',\n source: { kind: 'resource', driverClass: 'LazyModuleStatusInspector' }\n },\n {\n id: 'settings',\n label: 'Settings Explorer',\n icon: 'fa-solid fa-sliders',\n description: 'User and instance settings',\n source: { kind: 'resource', driverClass: 'SettingsExplorerInspector' }\n },\n {\n id: 'app-state',\n label: 'App State',\n icon: 'fa-solid fa-magnifying-glass-chart',\n description: 'Snapshot of user, provider, workspace',\n source: { kind: 'resource', driverClass: 'AppStateInspector' }\n },\n {\n id: 'layout',\n label: 'Layout',\n icon: 'fa-solid fa-table-columns',\n description: 'Workspace + Golden Layout config',\n source: { kind: 'resource', driverClass: 'LayoutInspector' }\n }\n ];\n}\n","<div class=\"admin-container\">\n <header class=\"admin-container__header\">\n <div class=\"admin-container__header-icon\"><i [class]=\"ContainerIcon\"></i></div>\n <div>\n <h3 class=\"admin-container__header-title\">{{ ContainerTitle }}</h3>\n <div class=\"admin-container__header-sub\">{{ ContainerSubtitle }}</div>\n </div>\n </header>\n\n <div class=\"admin-container__body\">\n <aside class=\"admin-container__nav\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"admin-container__nav-item\"\n [class.admin-container__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"admin-container__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"admin-container__nav-text\">\n <div class=\"admin-container__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"admin-container__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <main class=\"admin-container__content\">\n @if (LoadError) {\n <div class=\"admin-container__error\">\n <i class=\"fa-solid fa-triangle-exclamation\"></i>\n <span>{{ LoadError }}</span>\n </div>\n } @else if (IsLoading) {\n <div class=\"admin-container__loading\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i>\n <span>Loading…</span>\n </div>\n }\n <div class=\"admin-container__host\" [class.admin-container__host--hidden]=\"LoadError || IsLoading\">\n <ng-container #contentHost></ng-container>\n </div>\n </main>\n </div>\n</div>\n"]}
@@ -0,0 +1,15 @@
1
+ import { AdminSection, BaseAdminContainerComponent } from './base-admin-container.component';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Admin → Identity & Access. Users, roles, app-role assignments,
5
+ * entity permissions, and API keys.
6
+ */
7
+ export declare class AdminIdentityAccessComponent extends BaseAdminContainerComponent {
8
+ readonly ContainerTitle = "Identity & Access";
9
+ readonly ContainerIcon = "fa-solid fa-shield-halved";
10
+ readonly ContainerSubtitle = "Users, roles, permissions, and API keys";
11
+ readonly Sections: AdminSection[];
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<AdminIdentityAccessComponent, never>;
13
+ static ɵcmp: i0.ɵɵComponentDeclaration<AdminIdentityAccessComponent, "mj-admin-identity-access", never, {}, {}, never, never, false, never>;
14
+ }
15
+ //# sourceMappingURL=admin-identity-access.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-identity-access.component.d.ts","sourceRoot":"","sources":["../../src/Admin/admin-identity-access.component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;;AAE7F;;;GAGG;AACH,qBAOa,4BAA6B,SAAQ,2BAA2B;IACzE,SAAgB,cAAc,uBAAuB;IACrD,SAAgB,aAAa,+BAA+B;IAC5D,SAAgB,iBAAiB,6CAA6C;IAE9E,SAAgB,QAAQ,EAAE,YAAY,EAAE,CA2CtC;yCAhDO,4BAA4B;2CAA5B,4BAA4B;CAiDxC"}