@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.
- package/dist/Admin/admin-data-schema.component.d.ts +16 -0
- package/dist/Admin/admin-data-schema.component.d.ts.map +1 -0
- package/dist/Admin/admin-data-schema.component.js +136 -0
- package/dist/Admin/admin-data-schema.component.js.map +1 -0
- package/dist/Admin/admin-dev-tools-resource.component.d.ts +14 -0
- package/dist/Admin/admin-dev-tools-resource.component.d.ts.map +1 -0
- package/dist/Admin/admin-dev-tools-resource.component.js +162 -0
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -0
- package/dist/Admin/admin-identity-access.component.d.ts +15 -0
- package/dist/Admin/admin-identity-access.component.d.ts.map +1 -0
- package/dist/Admin/admin-identity-access.component.js +156 -0
- package/dist/Admin/admin-identity-access.component.js.map +1 -0
- package/dist/Admin/admin-monitoring.component.d.ts +15 -0
- package/dist/Admin/admin-monitoring.component.d.ts.map +1 -0
- package/dist/Admin/admin-monitoring.component.js +130 -0
- package/dist/Admin/admin-monitoring.component.js.map +1 -0
- package/dist/Admin/base-admin-container.component.d.ts +80 -0
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -0
- package/dist/Admin/base-admin-container.component.js +198 -0
- package/dist/Admin/base-admin-container.component.js.map +1 -0
- package/dist/Admin/index.d.ts +6 -0
- package/dist/Admin/index.d.ts.map +1 -0
- package/dist/Admin/index.js +6 -0
- package/dist/Admin/index.js.map +1 -0
- package/dist/DevTools/app-state-inspector.component.d.ts +53 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -0
- package/dist/DevTools/app-state-inspector.component.js +301 -0
- package/dist/DevTools/app-state-inspector.component.js.map +1 -0
- package/dist/DevTools/class-registry.component.d.ts +64 -0
- package/dist/DevTools/class-registry.component.d.ts.map +1 -0
- package/dist/DevTools/class-registry.component.js +423 -0
- package/dist/DevTools/class-registry.component.js.map +1 -0
- package/dist/DevTools/dev-tools-prefs.d.ts +21 -0
- package/dist/DevTools/dev-tools-prefs.d.ts.map +1 -0
- package/dist/DevTools/dev-tools-prefs.js +48 -0
- package/dist/DevTools/dev-tools-prefs.js.map +1 -0
- package/dist/DevTools/event-monitor.component.d.ts +78 -0
- package/dist/DevTools/event-monitor.component.d.ts.map +1 -0
- package/dist/DevTools/event-monitor.component.js +659 -0
- package/dist/DevTools/event-monitor.component.js.map +1 -0
- package/dist/DevTools/graphql-console.component.d.ts +153 -0
- package/dist/DevTools/graphql-console.component.d.ts.map +1 -0
- package/dist/DevTools/graphql-console.component.js +1463 -0
- package/dist/DevTools/graphql-console.component.js.map +1 -0
- package/dist/DevTools/index.d.ts +8 -0
- package/dist/DevTools/index.d.ts.map +1 -0
- package/dist/DevTools/index.js +8 -0
- package/dist/DevTools/index.js.map +1 -0
- package/dist/DevTools/layout-inspector.component.d.ts +42 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -0
- package/dist/DevTools/layout-inspector.component.js +208 -0
- package/dist/DevTools/layout-inspector.component.js.map +1 -0
- package/dist/DevTools/lazy-module-status.component.d.ts +65 -0
- package/dist/DevTools/lazy-module-status.component.d.ts.map +1 -0
- package/dist/DevTools/lazy-module-status.component.js +388 -0
- package/dist/DevTools/lazy-module-status.component.js.map +1 -0
- package/dist/DevTools/settings-explorer.component.d.ts +55 -0
- package/dist/DevTools/settings-explorer.component.d.ts.map +1 -0
- package/dist/DevTools/settings-explorer.component.js +394 -0
- package/dist/DevTools/settings-explorer.component.js.map +1 -0
- package/dist/core-dashboards.module.d.ts +45 -34
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +57 -0
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +2 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +2 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +52 -52
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-state-inspector.component.js","sourceRoot":"","sources":["../../src/DevTools/app-state-inspector.component.ts","../../src/DevTools/app-state-inspector.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { GraphQLDataProvider } from '@memberjunction/graphql-dataprovider';\nimport { WorkspaceStateManager } from '@memberjunction/ng-base-application';\nimport { DeveloperModeService } from '@memberjunction/ng-shared';\n\ninterface InspectorSection {\n id: string;\n label: string;\n icon: string;\n enabled: boolean;\n description?: string;\n}\n\n/**\n * App State Inspector — read-only structured view of the Explorer's runtime\n * state. Replaces the legacy \"Inspect App State\" user-menu item which only\n * dumped to console. Lives in the Admin app's dev tools area.\n */\n@RegisterClass(BaseResourceComponent, 'AppStateInspector')\n@Component({\n standalone: false,\n selector: 'mj-app-state-inspector',\n templateUrl: './app-state-inspector.component.html',\n styleUrls: ['./inspector-shared.css']\n})\nexport class AppStateInspectorComponent extends BaseResourceComponent implements OnInit, OnDestroy {\n\n public Sections: InspectorSection[] = [\n { id: 'user', label: 'Current User', icon: 'fa-solid fa-user', enabled: true, description: 'Identity, roles, email' },\n { id: 'provider', label: 'Provider', icon: 'fa-solid fa-plug', enabled: true, description: 'API URL, entities loaded' },\n { id: 'workspace',label: 'Workspace', icon: 'fa-solid fa-table-columns', enabled: true, description: 'Tabs, layout, active state' },\n { id: 'app', label: 'Active Application', icon: 'fa-solid fa-th-large', enabled: true, description: 'Current app + nav items' },\n { id: 'dev', label: 'Developer Mode', icon: 'fa-solid fa-code', enabled: true, description: 'Dev mode flag, eligibility' },\n { id: 'browser', label: 'Browser & Session', icon: 'fa-solid fa-window-maximize',enabled: true, description: 'User agent, viewport, URL' }\n ];\n\n public ActiveSection = 'user';\n public StateJson = '{}';\n public SearchQuery = '';\n public CopyConfirmed = false;\n public LastRefreshed = new Date();\n\n constructor(\n private cdr: ChangeDetectorRef,\n private workspace: WorkspaceStateManager,\n private devMode: DeveloperModeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const p = DevToolsPrefs.Get<{ activeSection?: string }>('appStateInspector');\n if (p?.activeSection && this.Sections.some(s => s.id === p.activeSection)) {\n this.ActiveSection = p.activeSection;\n }\n this.refresh();\n this.NotifyLoadComplete();\n }\n\n public override ngOnDestroy(): void {\n DevToolsPrefs.Save('appStateInspector', { activeSection: this.ActiveSection });\n super.ngOnDestroy();\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'App State Inspector'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-magnifying-glass-chart'; }\n\n public OnSectionClick(section: InspectorSection): void {\n if (this.ActiveSection === section.id) return;\n this.ActiveSection = section.id;\n DevToolsPrefs.Save('appStateInspector', { activeSection: this.ActiveSection });\n this.refresh();\n }\n\n public refresh(): void {\n this.StateJson = JSON.stringify(this.computeSectionData(this.ActiveSection), this.jsonReplacer, 2);\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n }\n\n public async OnCopy(): Promise<void> {\n try {\n await navigator.clipboard.writeText(this.StateJson);\n this.CopyConfirmed = true;\n this.cdr.markForCheck();\n setTimeout(() => {\n this.CopyConfirmed = false;\n this.cdr.markForCheck();\n }, 1800);\n } catch {\n // clipboard unavailable\n }\n }\n\n public OnDownload(): void {\n const blob = new Blob([this.StateJson], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = `mj-app-state-${this.ActiveSection}-${this.timestampSlug()}.json`;\n a.click();\n URL.revokeObjectURL(url);\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public get SectionLabel(): string {\n return this.Sections.find(s => s.id === this.ActiveSection)?.label ?? '';\n }\n\n // ---------- private ----------\n\n private computeSectionData(section: string): unknown {\n switch (section) {\n case 'user': return this.userData();\n case 'provider': return this.providerData();\n case 'workspace': return this.workspaceData();\n case 'app': return this.appData();\n case 'dev': return this.devData();\n case 'browser': return this.browserData();\n default: return {};\n }\n }\n\n private userData(): unknown {\n const user = this.ProviderToUse?.CurrentUser;\n if (!user) return { error: 'No current user' };\n return {\n ID: user.ID,\n Name: user.Name,\n FirstName: user.FirstName,\n LastName: user.LastName,\n Email: user.Email,\n Type: user.Type,\n IsActive: user.IsActive,\n LinkedRecordType: user.LinkedRecordType,\n CreatedAt: user.__mj_CreatedAt,\n Roles: (user.UserRoles ?? []).map(r => ({ Role: r.Role, RoleID: r.RoleID }))\n };\n }\n\n private providerData(): unknown {\n const provider = this.ProviderToUse;\n if (!provider) return { error: 'No provider' };\n const data: Record<string, unknown> = {\n type: provider.constructor.name,\n EntitiesCount: provider.Entities?.length ?? 0,\n ApplicationsCount: provider.Applications?.length ?? 0,\n QueriesCount: provider.Queries?.length ?? 0,\n RolesCount: provider.Roles?.length ?? 0\n };\n if (provider instanceof GraphQLDataProvider) {\n data.URL = provider.ConfigData?.URL;\n data.WSURL = provider.ConfigData?.WSURL;\n }\n return data;\n }\n\n private workspaceData(): unknown {\n const config = this.workspace.GetConfiguration();\n return config;\n }\n\n private appData(): unknown {\n const config = this.workspace.GetConfiguration();\n if (!config) return { error: 'No workspace configuration' };\n const activeTab = config.tabs?.find(t => t.id === config.activeTabId);\n return {\n ActiveTabId: config.activeTabId,\n ActiveTab: activeTab,\n TabCount: config.tabs?.length ?? 0\n };\n }\n\n private devData(): unknown {\n return {\n IsEnabled: this.devMode.IsEnabled,\n IsDeveloper: this.devMode.IsDeveloper,\n EligibleRoles: ['Developer', 'Admin', 'System Administrator', 'Integration']\n };\n }\n\n private browserData(): unknown {\n return {\n UserAgent: navigator.userAgent,\n Language: navigator.language,\n Languages: navigator.languages,\n Platform: navigator.platform,\n Online: navigator.onLine,\n Viewport: { width: window.innerWidth, height: window.innerHeight, devicePixelRatio: window.devicePixelRatio },\n URL: window.location.href,\n Origin: window.location.origin,\n Path: window.location.pathname + window.location.search,\n Memory: this.readMemory()\n };\n }\n\n private jsonReplacer(_key: string, value: unknown): unknown {\n if (value instanceof Date) return value.toISOString();\n if (value instanceof Map) return Object.fromEntries(value.entries());\n if (value instanceof Set) return Array.from(value);\n if (typeof value === 'function') return `[Function ${(value as { name: string }).name || 'anonymous'}]`;\n return value;\n }\n\n private readMemory(): { usedJSHeapSize: number; totalJSHeapSize: number } | undefined {\n const memory = (performance as Performance & {\n memory?: { usedJSHeapSize: number; totalJSHeapSize: number };\n }).memory;\n if (!memory) return undefined;\n return { usedJSHeapSize: memory.usedJSHeapSize, totalJSHeapSize: memory.totalJSHeapSize };\n }\n\n private timestampSlug(): string {\n const d = new Date();\n const pad = (n: number) => n.toString().padStart(2, '0');\n return `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}-${pad(d.getHours())}${pad(d.getMinutes())}${pad(d.getSeconds())}`;\n }\n\n}\n","<div class=\"mj-inspector\">\n <div class=\"mj-inspector__header\">\n <div class=\"mj-inspector__header-icon\"><i class=\"fa-solid fa-magnifying-glass-chart\"></i></div>\n <div>\n <h3 class=\"mj-inspector__header-title\">App State Inspector</h3>\n <div class=\"mj-inspector__header-sub\">Read-only snapshot of Explorer runtime state</div>\n </div>\n <span class=\"mj-inspector__header-spacer\"></span>\n <div class=\"mj-inspector__header-actions\">\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"refresh()\" title=\"Refresh\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh\n </button>\n <button class=\"mj-inspector__btn\"\n [class.mj-inspector__btn--success]=\"CopyConfirmed\"\n type=\"button\" (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"OnDownload()\" title=\"Download as JSON\">\n <i class=\"fa-solid fa-download\"></i>\n </button>\n </div>\n </div>\n\n <div class=\"mj-inspector__body\">\n <aside class=\"mj-inspector__sidebar\">\n @for (section of Sections; track section.id) {\n <button type=\"button\"\n class=\"mj-inspector__nav-item\"\n [class.mj-inspector__nav-item--active]=\"ActiveSection === section.id\"\n (click)=\"OnSectionClick(section)\">\n <i class=\"mj-inspector__nav-icon\" [class]=\"section.icon\"></i>\n <div class=\"mj-inspector__nav-text\">\n <div class=\"mj-inspector__nav-label\">{{ section.label }}</div>\n @if (section.description) {\n <div class=\"mj-inspector__nav-desc\">{{ section.description }}</div>\n }\n </div>\n </button>\n }\n </aside>\n\n <div class=\"mj-inspector__content\">\n <div class=\"mj-inspector__content-head\">\n <h4 class=\"mj-inspector__content-title\">{{ SectionLabel }}</h4>\n <span class=\"mj-inspector__content-meta\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n <div class=\"mj-inspector__editor\">\n <mj-code-editor\n [(ngModel)]=\"StateJson\"\n [language]=\"'json'\"\n [readonly]=\"true\"\n [lineWrapping]=\"true\">\n </mj-code-editor>\n </div>\n </div>\n </div>\n</div>\n"]}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/** Local mirror of MJGlobal's ClassRegistration shape (avoids importing the type). */
|
|
5
|
+
interface ClassRegistration {
|
|
6
|
+
BaseClass: {
|
|
7
|
+
name?: string;
|
|
8
|
+
};
|
|
9
|
+
SubClass: {
|
|
10
|
+
name?: string;
|
|
11
|
+
};
|
|
12
|
+
Key: string | null;
|
|
13
|
+
Priority: number;
|
|
14
|
+
}
|
|
15
|
+
interface RegistrationGroup {
|
|
16
|
+
baseClassName: string;
|
|
17
|
+
count: number;
|
|
18
|
+
registrations: ClassRegistration[];
|
|
19
|
+
expanded: boolean;
|
|
20
|
+
/** Number of distinct keys (some keys can have multiple registrations at different priorities). */
|
|
21
|
+
uniqueKeys: number;
|
|
22
|
+
/** True when at least one key in this group has multiple registrations (priority resolution applies). */
|
|
23
|
+
hasOverrides: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Class Registry Browser — read-only inspector of every `@RegisterClass`
|
|
27
|
+
* registration tracked by `MJGlobal.Instance.ClassFactory`. Groups by base
|
|
28
|
+
* class, surfaces priority/override conflicts, supports search + copy.
|
|
29
|
+
*/
|
|
30
|
+
export declare class ClassRegistryInspectorComponent extends BaseResourceComponent implements OnInit, OnDestroy {
|
|
31
|
+
private cdr;
|
|
32
|
+
Groups: RegistrationGroup[];
|
|
33
|
+
Stats: {
|
|
34
|
+
total: number;
|
|
35
|
+
baseClasses: number;
|
|
36
|
+
withOverrides: number;
|
|
37
|
+
};
|
|
38
|
+
SearchQuery: string;
|
|
39
|
+
CopyConfirmed: boolean;
|
|
40
|
+
LastRefreshed: Date;
|
|
41
|
+
constructor(cdr: ChangeDetectorRef);
|
|
42
|
+
ngOnInit(): void;
|
|
43
|
+
ngOnDestroy(): void;
|
|
44
|
+
PersistPrefs(): void;
|
|
45
|
+
private savePrefs;
|
|
46
|
+
GetResourceDisplayName(): Promise<string>;
|
|
47
|
+
GetResourceIconClass(): Promise<string>;
|
|
48
|
+
refresh(): void;
|
|
49
|
+
ToggleGroup(group: RegistrationGroup): void;
|
|
50
|
+
ExpandAll(): void;
|
|
51
|
+
CollapseAll(): void;
|
|
52
|
+
OnSearchChange(value: string): void;
|
|
53
|
+
get FilteredGroups(): RegistrationGroup[];
|
|
54
|
+
IsConflictRow(group: RegistrationGroup, reg: ClassRegistration): boolean;
|
|
55
|
+
IsWinningRow(group: RegistrationGroup, reg: ClassRegistration): boolean;
|
|
56
|
+
OnCopy(): Promise<void>;
|
|
57
|
+
get LastRefreshedLabel(): string;
|
|
58
|
+
TrackByBase: (_i: number, g: RegistrationGroup) => string;
|
|
59
|
+
TrackByReg: (_i: number, r: ClassRegistration) => string;
|
|
60
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ClassRegistryInspectorComponent, never>;
|
|
61
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ClassRegistryInspectorComponent, "mj-class-registry-inspector", never, {}, {}, never, never, false, never>;
|
|
62
|
+
}
|
|
63
|
+
export {};
|
|
64
|
+
//# sourceMappingURL=class-registry.component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-registry.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/class-registry.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAIlE,sFAAsF;AACtF,UAAU,iBAAiB;IACvB,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,QAAQ,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,iBAAiB;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;IACnB,yGAAyG;IACzG,YAAY,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAOa,+BAAgC,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS;IAQvF,OAAO,CAAC,GAAG;IANhB,MAAM,EAAE,iBAAiB,EAAE,CAAM;IACjC,KAAK;;;;MAAkD;IACvD,WAAW,SAAM;IACjB,aAAa,UAAS;IACtB,aAAa,OAAc;gBAEd,GAAG,EAAE,iBAAiB;IAInC,QAAQ,IAAI,IAAI;IAaP,WAAW,IAAI,IAAI;IAK5B,YAAY,IAAI,IAAI;IAI3B,OAAO,CAAC,SAAS;IAOK,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAEtD,OAAO,IAAI,IAAI;IAoDf,WAAW,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAK3C,SAAS,IAAI,IAAI;IAKjB,WAAW,IAAI,IAAI;IAKnB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1C,IAAW,cAAc,IAAI,iBAAiB,EAAE,CAc/C;IAEM,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO;IAMxE,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO;IASjE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAuBpC,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAEM,WAAW,GAAI,IAAI,MAAM,EAAE,GAAG,iBAAiB,YAAqB;IACpE,UAAU,GAAI,IAAI,MAAM,EAAE,GAAG,iBAAiB,YAA8D;yCA/K1G,+BAA+B;2CAA/B,+BAA+B;CAgL3C"}
|
|
@@ -0,0 +1,423 @@
|
|
|
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, MJGlobal } from '@memberjunction/global';
|
|
10
|
+
import { DevToolsPrefs } from './dev-tools-prefs';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
function ClassRegistryInspectorComponent_Conditional_45_Template(rf, ctx) { if (rf & 1) {
|
|
13
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
14
|
+
i0.ɵɵelementStart(0, "button", 29);
|
|
15
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Conditional_45_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSearchChange("")); });
|
|
16
|
+
i0.ɵɵelement(1, "i", 30);
|
|
17
|
+
i0.ɵɵelementEnd();
|
|
18
|
+
} }
|
|
19
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵelementStart(0, "span", 37);
|
|
21
|
+
i0.ɵɵtext(1);
|
|
22
|
+
i0.ɵɵelementEnd();
|
|
23
|
+
} if (rf & 2) {
|
|
24
|
+
const group_r4 = i0.ɵɵnextContext().$implicit;
|
|
25
|
+
i0.ɵɵadvance();
|
|
26
|
+
i0.ɵɵtextInterpolate1("", group_r4.uniqueKeys, " keys");
|
|
27
|
+
} }
|
|
28
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
29
|
+
i0.ɵɵelementStart(0, "span", 38);
|
|
30
|
+
i0.ɵɵelement(1, "i", 40);
|
|
31
|
+
i0.ɵɵtext(2, " overrides ");
|
|
32
|
+
i0.ɵɵelementEnd();
|
|
33
|
+
} }
|
|
34
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
35
|
+
i0.ɵɵelementStart(0, "code");
|
|
36
|
+
i0.ɵɵtext(1);
|
|
37
|
+
i0.ɵɵelementEnd();
|
|
38
|
+
} if (rf & 2) {
|
|
39
|
+
const reg_r5 = i0.ɵɵnextContext().$implicit;
|
|
40
|
+
i0.ɵɵadvance();
|
|
41
|
+
i0.ɵɵtextInterpolate(reg_r5.Key);
|
|
42
|
+
} }
|
|
43
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵelementStart(0, "span", 47);
|
|
45
|
+
i0.ɵɵtext(1, "(no key)");
|
|
46
|
+
i0.ɵɵelementEnd();
|
|
47
|
+
} }
|
|
48
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
i0.ɵɵelementStart(0, "span", 51);
|
|
50
|
+
i0.ɵɵelement(1, "i", 53);
|
|
51
|
+
i0.ɵɵtext(2, " winner ");
|
|
52
|
+
i0.ɵɵelementEnd();
|
|
53
|
+
} }
|
|
54
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
55
|
+
i0.ɵɵelementStart(0, "span", 52);
|
|
56
|
+
i0.ɵɵtext(1, " shadowed ");
|
|
57
|
+
i0.ɵɵelementEnd();
|
|
58
|
+
} }
|
|
59
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 46);
|
|
61
|
+
i0.ɵɵconditionalCreate(2, ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_2_Template, 2, 1, "code")(3, ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_3_Template, 2, 0, "span", 47);
|
|
62
|
+
i0.ɵɵelementEnd();
|
|
63
|
+
i0.ɵɵelementStart(4, "td", 48);
|
|
64
|
+
i0.ɵɵtext(5);
|
|
65
|
+
i0.ɵɵelementEnd();
|
|
66
|
+
i0.ɵɵelementStart(6, "td", 49);
|
|
67
|
+
i0.ɵɵtext(7);
|
|
68
|
+
i0.ɵɵelementEnd();
|
|
69
|
+
i0.ɵɵelementStart(8, "td", 50);
|
|
70
|
+
i0.ɵɵconditionalCreate(9, ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_9_Template, 3, 0, "span", 51)(10, ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditional_10_Template, 2, 0, "span", 52);
|
|
71
|
+
i0.ɵɵelementEnd()();
|
|
72
|
+
} if (rf & 2) {
|
|
73
|
+
const reg_r5 = ctx.$implicit;
|
|
74
|
+
const group_r4 = i0.ɵɵnextContext(2).$implicit;
|
|
75
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
76
|
+
i0.ɵɵclassProp("cr-row--conflict", ctx_r1.IsConflictRow(group_r4, reg_r5))("cr-row--winning", ctx_r1.IsWinningRow(group_r4, reg_r5));
|
|
77
|
+
i0.ɵɵadvance(2);
|
|
78
|
+
i0.ɵɵconditional(reg_r5.Key ? 2 : 3);
|
|
79
|
+
i0.ɵɵadvance(3);
|
|
80
|
+
i0.ɵɵtextInterpolate(reg_r5.SubClass.name || "(anonymous)");
|
|
81
|
+
i0.ɵɵadvance(2);
|
|
82
|
+
i0.ɵɵtextInterpolate(reg_r5.Priority);
|
|
83
|
+
i0.ɵɵadvance(2);
|
|
84
|
+
i0.ɵɵconditional(ctx_r1.IsWinningRow(group_r4, reg_r5) ? 9 : ctx_r1.IsConflictRow(group_r4, reg_r5) ? 10 : -1);
|
|
85
|
+
} }
|
|
86
|
+
function ClassRegistryInspectorComponent_For_48_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
i0.ɵɵelementStart(0, "table", 39)(1, "thead")(2, "tr")(3, "th", 41);
|
|
88
|
+
i0.ɵɵtext(4, "Key");
|
|
89
|
+
i0.ɵɵelementEnd();
|
|
90
|
+
i0.ɵɵelementStart(5, "th", 42);
|
|
91
|
+
i0.ɵɵtext(6, "Subclass");
|
|
92
|
+
i0.ɵɵelementEnd();
|
|
93
|
+
i0.ɵɵelementStart(7, "th", 43);
|
|
94
|
+
i0.ɵɵtext(8, "Priority");
|
|
95
|
+
i0.ɵɵelementEnd();
|
|
96
|
+
i0.ɵɵelement(9, "th", 44);
|
|
97
|
+
i0.ɵɵelementEnd()();
|
|
98
|
+
i0.ɵɵelementStart(10, "tbody");
|
|
99
|
+
i0.ɵɵrepeaterCreate(11, ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Template, 11, 8, "tr", 45, i0.ɵɵcomponentInstance().TrackByReg, true);
|
|
100
|
+
i0.ɵɵelementEnd()();
|
|
101
|
+
} if (rf & 2) {
|
|
102
|
+
const group_r4 = i0.ɵɵnextContext().$implicit;
|
|
103
|
+
i0.ɵɵadvance(11);
|
|
104
|
+
i0.ɵɵrepeater(group_r4.registrations);
|
|
105
|
+
} }
|
|
106
|
+
function ClassRegistryInspectorComponent_For_48_Template(rf, ctx) { if (rf & 1) {
|
|
107
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
108
|
+
i0.ɵɵelementStart(0, "div", 31)(1, "button", 32);
|
|
109
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_For_48_Template_button_click_1_listener() { const group_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ToggleGroup(group_r4)); });
|
|
110
|
+
i0.ɵɵelement(2, "i", 33);
|
|
111
|
+
i0.ɵɵelementStart(3, "span", 34);
|
|
112
|
+
i0.ɵɵtext(4);
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵelementStart(5, "span", 35)(6, "span", 36);
|
|
115
|
+
i0.ɵɵtext(7);
|
|
116
|
+
i0.ɵɵelementEnd();
|
|
117
|
+
i0.ɵɵconditionalCreate(8, ClassRegistryInspectorComponent_For_48_Conditional_8_Template, 2, 1, "span", 37);
|
|
118
|
+
i0.ɵɵconditionalCreate(9, ClassRegistryInspectorComponent_For_48_Conditional_9_Template, 3, 0, "span", 38);
|
|
119
|
+
i0.ɵɵelementEnd()();
|
|
120
|
+
i0.ɵɵconditionalCreate(10, ClassRegistryInspectorComponent_For_48_Conditional_10_Template, 13, 0, "table", 39);
|
|
121
|
+
i0.ɵɵelementEnd();
|
|
122
|
+
} if (rf & 2) {
|
|
123
|
+
const group_r4 = ctx.$implicit;
|
|
124
|
+
i0.ɵɵclassProp("cr-group--expanded", group_r4.expanded);
|
|
125
|
+
i0.ɵɵadvance(2);
|
|
126
|
+
i0.ɵɵclassProp("cr-group-chev--down", group_r4.expanded);
|
|
127
|
+
i0.ɵɵadvance(2);
|
|
128
|
+
i0.ɵɵtextInterpolate(group_r4.baseClassName);
|
|
129
|
+
i0.ɵɵadvance(3);
|
|
130
|
+
i0.ɵɵtextInterpolate(group_r4.count);
|
|
131
|
+
i0.ɵɵadvance();
|
|
132
|
+
i0.ɵɵconditional(group_r4.uniqueKeys !== group_r4.count ? 8 : -1);
|
|
133
|
+
i0.ɵɵadvance();
|
|
134
|
+
i0.ɵɵconditional(group_r4.hasOverrides ? 9 : -1);
|
|
135
|
+
i0.ɵɵadvance();
|
|
136
|
+
i0.ɵɵconditional(group_r4.expanded ? 10 : -1);
|
|
137
|
+
} }
|
|
138
|
+
function ClassRegistryInspectorComponent_Conditional_49_Template(rf, ctx) { if (rf & 1) {
|
|
139
|
+
i0.ɵɵelementStart(0, "div", 27);
|
|
140
|
+
i0.ɵɵelement(1, "i", 54);
|
|
141
|
+
i0.ɵɵelementStart(2, "span");
|
|
142
|
+
i0.ɵɵtext(3);
|
|
143
|
+
i0.ɵɵelementEnd()();
|
|
144
|
+
} if (rf & 2) {
|
|
145
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
146
|
+
i0.ɵɵadvance(3);
|
|
147
|
+
i0.ɵɵtextInterpolate1("No registrations match \"", ctx_r1.SearchQuery, "\"");
|
|
148
|
+
} }
|
|
149
|
+
/**
|
|
150
|
+
* Class Registry Browser — read-only inspector of every `@RegisterClass`
|
|
151
|
+
* registration tracked by `MJGlobal.Instance.ClassFactory`. Groups by base
|
|
152
|
+
* class, surfaces priority/override conflicts, supports search + copy.
|
|
153
|
+
*/
|
|
154
|
+
let ClassRegistryInspectorComponent = class ClassRegistryInspectorComponent extends BaseResourceComponent {
|
|
155
|
+
cdr;
|
|
156
|
+
Groups = [];
|
|
157
|
+
Stats = { total: 0, baseClasses: 0, withOverrides: 0 };
|
|
158
|
+
SearchQuery = '';
|
|
159
|
+
CopyConfirmed = false;
|
|
160
|
+
LastRefreshed = new Date();
|
|
161
|
+
constructor(cdr) {
|
|
162
|
+
super();
|
|
163
|
+
this.cdr = cdr;
|
|
164
|
+
}
|
|
165
|
+
ngOnInit() {
|
|
166
|
+
const prefs = DevToolsPrefs.Get('classRegistry');
|
|
167
|
+
if (prefs?.search)
|
|
168
|
+
this.SearchQuery = prefs.search;
|
|
169
|
+
this.refresh();
|
|
170
|
+
// Restore expansion after groups are built
|
|
171
|
+
if (prefs?.expanded) {
|
|
172
|
+
for (const g of this.Groups) {
|
|
173
|
+
g.expanded = prefs.expanded.includes(g.baseClassName);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
this.NotifyLoadComplete();
|
|
177
|
+
}
|
|
178
|
+
ngOnDestroy() {
|
|
179
|
+
this.savePrefs();
|
|
180
|
+
super.ngOnDestroy();
|
|
181
|
+
}
|
|
182
|
+
PersistPrefs() {
|
|
183
|
+
this.savePrefs();
|
|
184
|
+
}
|
|
185
|
+
savePrefs() {
|
|
186
|
+
DevToolsPrefs.Save('classRegistry', {
|
|
187
|
+
search: this.SearchQuery,
|
|
188
|
+
expanded: this.Groups.filter(g => g.expanded).map(g => g.baseClassName)
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
async GetResourceDisplayName() { return 'Class Registry'; }
|
|
192
|
+
async GetResourceIconClass() { return 'fa-solid fa-cubes'; }
|
|
193
|
+
refresh() {
|
|
194
|
+
const factory = MJGlobal.Instance.ClassFactory;
|
|
195
|
+
const all = factory._registrations ?? [];
|
|
196
|
+
// Group by base class name
|
|
197
|
+
const byBase = new Map();
|
|
198
|
+
for (const reg of all) {
|
|
199
|
+
const baseName = reg.BaseClass?.name ?? '(unknown)';
|
|
200
|
+
const arr = byBase.get(baseName) ?? [];
|
|
201
|
+
arr.push(reg);
|
|
202
|
+
byBase.set(baseName, arr);
|
|
203
|
+
}
|
|
204
|
+
// Build groups
|
|
205
|
+
const groups = [];
|
|
206
|
+
for (const [baseClassName, registrations] of byBase) {
|
|
207
|
+
const keyCounts = new Map();
|
|
208
|
+
for (const r of registrations) {
|
|
209
|
+
const k = r.Key ?? '';
|
|
210
|
+
keyCounts.set(k, (keyCounts.get(k) ?? 0) + 1);
|
|
211
|
+
}
|
|
212
|
+
let hasOverrides = false;
|
|
213
|
+
for (const c of keyCounts.values()) {
|
|
214
|
+
if (c > 1) {
|
|
215
|
+
hasOverrides = true;
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
groups.push({
|
|
220
|
+
baseClassName,
|
|
221
|
+
count: registrations.length,
|
|
222
|
+
registrations: registrations.sort((a, b) => {
|
|
223
|
+
const ak = a.Key ?? '';
|
|
224
|
+
const bk = b.Key ?? '';
|
|
225
|
+
if (ak !== bk)
|
|
226
|
+
return ak.localeCompare(bk);
|
|
227
|
+
return b.Priority - a.Priority;
|
|
228
|
+
}),
|
|
229
|
+
expanded: false,
|
|
230
|
+
uniqueKeys: keyCounts.size,
|
|
231
|
+
hasOverrides
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
this.Groups = groups.sort((a, b) => b.count - a.count);
|
|
235
|
+
this.Stats = {
|
|
236
|
+
total: all.length,
|
|
237
|
+
baseClasses: byBase.size,
|
|
238
|
+
withOverrides: groups.filter(g => g.hasOverrides).length
|
|
239
|
+
};
|
|
240
|
+
this.LastRefreshed = new Date();
|
|
241
|
+
this.cdr.markForCheck();
|
|
242
|
+
}
|
|
243
|
+
ToggleGroup(group) {
|
|
244
|
+
group.expanded = !group.expanded;
|
|
245
|
+
this.savePrefs();
|
|
246
|
+
}
|
|
247
|
+
ExpandAll() {
|
|
248
|
+
for (const g of this.FilteredGroups)
|
|
249
|
+
g.expanded = true;
|
|
250
|
+
this.savePrefs();
|
|
251
|
+
}
|
|
252
|
+
CollapseAll() {
|
|
253
|
+
for (const g of this.Groups)
|
|
254
|
+
g.expanded = false;
|
|
255
|
+
this.savePrefs();
|
|
256
|
+
}
|
|
257
|
+
OnSearchChange(value) {
|
|
258
|
+
this.SearchQuery = value;
|
|
259
|
+
this.savePrefs();
|
|
260
|
+
}
|
|
261
|
+
get FilteredGroups() {
|
|
262
|
+
const q = this.SearchQuery.trim().toLowerCase();
|
|
263
|
+
if (!q)
|
|
264
|
+
return this.Groups;
|
|
265
|
+
return this.Groups
|
|
266
|
+
.map(g => ({
|
|
267
|
+
...g,
|
|
268
|
+
expanded: true,
|
|
269
|
+
registrations: g.registrations.filter(r => {
|
|
270
|
+
const sub = r.SubClass?.name?.toLowerCase() ?? '';
|
|
271
|
+
const key = r.Key?.toLowerCase() ?? '';
|
|
272
|
+
return g.baseClassName.toLowerCase().includes(q) || sub.includes(q) || key.includes(q);
|
|
273
|
+
})
|
|
274
|
+
}))
|
|
275
|
+
.filter(g => g.registrations.length > 0);
|
|
276
|
+
}
|
|
277
|
+
IsConflictRow(group, reg) {
|
|
278
|
+
if (!group.hasOverrides)
|
|
279
|
+
return false;
|
|
280
|
+
const sameKey = group.registrations.filter(r => (r.Key ?? '') === (reg.Key ?? ''));
|
|
281
|
+
return sameKey.length > 1;
|
|
282
|
+
}
|
|
283
|
+
IsWinningRow(group, reg) {
|
|
284
|
+
const sameKey = group.registrations.filter(r => (r.Key ?? '') === (reg.Key ?? ''));
|
|
285
|
+
if (sameKey.length === 1)
|
|
286
|
+
return false;
|
|
287
|
+
const max = Math.max(...sameKey.map(r => r.Priority));
|
|
288
|
+
// If multiple share max priority, the LAST registered wins (matches ClassFactory behavior).
|
|
289
|
+
const top = sameKey.filter(r => r.Priority === max);
|
|
290
|
+
return top[top.length - 1] === reg;
|
|
291
|
+
}
|
|
292
|
+
async OnCopy() {
|
|
293
|
+
const payload = {
|
|
294
|
+
stats: this.Stats,
|
|
295
|
+
groups: this.FilteredGroups.map(g => ({
|
|
296
|
+
baseClass: g.baseClassName,
|
|
297
|
+
count: g.count,
|
|
298
|
+
registrations: g.registrations.map(r => ({
|
|
299
|
+
key: r.Key,
|
|
300
|
+
subClass: r.SubClass?.name ?? '(anonymous)',
|
|
301
|
+
priority: r.Priority
|
|
302
|
+
}))
|
|
303
|
+
}))
|
|
304
|
+
};
|
|
305
|
+
try {
|
|
306
|
+
await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));
|
|
307
|
+
this.CopyConfirmed = true;
|
|
308
|
+
this.cdr.markForCheck();
|
|
309
|
+
setTimeout(() => { this.CopyConfirmed = false; this.cdr.markForCheck(); }, 1800);
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
// clipboard unavailable
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
get LastRefreshedLabel() {
|
|
316
|
+
return this.LastRefreshed.toLocaleTimeString();
|
|
317
|
+
}
|
|
318
|
+
TrackByBase = (_i, g) => g.baseClassName;
|
|
319
|
+
TrackByReg = (_i, r) => `${r.SubClass?.name ?? ''}|${r.Key ?? ''}|${r.Priority}`;
|
|
320
|
+
static ɵfac = function ClassRegistryInspectorComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ClassRegistryInspectorComponent)(i0.ɵɵdirectiveInject(i0.ChangeDetectorRef)); };
|
|
321
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClassRegistryInspectorComponent, selectors: [["mj-class-registry-inspector"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 52, vars: 17, consts: [[1, "mj-inspector", "mj-inspector--solo"], [1, "mj-inspector__header"], [1, "mj-inspector__header-icon"], [1, "fa-solid", "fa-cubes"], [1, "mj-inspector__header-title"], [1, "mj-inspector__header-sub"], [1, "mj-inspector__header-spacer"], [1, "mj-inspector__header-actions"], ["type", "button", "title", "Expand all groups", 1, "mj-inspector__btn", 3, "click"], [1, "fa-solid", "fa-expand"], ["type", "button", "title", "Collapse all groups", 1, "mj-inspector__btn", 3, "click"], [1, "fa-solid", "fa-compress"], ["type", "button", "title", "Re-scan registry", 1, "mj-inspector__btn", 3, "click"], [1, "fa-solid", "fa-rotate"], ["type", "button", 1, "mj-inspector__btn", 3, "click", "title"], [1, "fa-solid"], [1, "cr-stats-row"], [1, "cr-stat"], [1, "cr-stat__value"], [1, "cr-stat__label"], [1, "cr-stat", "cr-stat--inline"], [1, "cr-search-wrap"], [1, "fa-solid", "fa-search", "cr-search-icon"], ["type", "search", "placeholder", "Search base class, subclass, or key\u2026", 1, "cr-search", 3, "input", "value"], ["title", "Clear", 1, "cr-search-clear"], [1, "cr-groups"], [1, "cr-group", 3, "cr-group--expanded"], [1, "cr-empty"], [1, "mj-inspector__footer-meta"], ["title", "Clear", 1, "cr-search-clear", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "cr-group"], ["type", "button", 1, "cr-group-head", 3, "click"], [1, "fa-solid", "fa-chevron-right", "cr-group-chev"], [1, "cr-group-name"], [1, "cr-group-meta"], [1, "cr-pill", "cr-pill--neutral"], [1, "cr-pill", "cr-pill--info"], [1, "cr-pill", "cr-pill--warn"], [1, "cr-table"], [1, "fa-solid", "fa-bolt"], [1, "cr-th-key"], [1, "cr-th-class"], [1, "cr-th-prio"], [1, "cr-th-status"], [3, "cr-row--conflict", "cr-row--winning"], [1, "cr-td-key"], [1, "cr-td-empty"], [1, "cr-td-class"], [1, "cr-td-prio"], [1, "cr-td-status"], ["title", "Highest priority among same-key registrations", 1, "cr-status", "cr-status--win"], ["title", "Outranked by another registration with the same key", 1, "cr-status", "cr-status--shadowed"], [1, "fa-solid", "fa-crown"], [1, "fa-solid", "fa-magnifying-glass"]], template: function ClassRegistryInspectorComponent_Template(rf, ctx) { if (rf & 1) {
|
|
322
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "div", 1)(2, "div", 2);
|
|
323
|
+
i0.ɵɵelement(3, "i", 3);
|
|
324
|
+
i0.ɵɵelementEnd();
|
|
325
|
+
i0.ɵɵelementStart(4, "div")(5, "h3", 4);
|
|
326
|
+
i0.ɵɵtext(6, "Class Registry");
|
|
327
|
+
i0.ɵɵelementEnd();
|
|
328
|
+
i0.ɵɵelementStart(7, "div", 5);
|
|
329
|
+
i0.ɵɵtext(8, "Every class registered with ");
|
|
330
|
+
i0.ɵɵelementStart(9, "code");
|
|
331
|
+
i0.ɵɵtext(10, "@RegisterClass");
|
|
332
|
+
i0.ɵɵelementEnd()()();
|
|
333
|
+
i0.ɵɵelement(11, "span", 6);
|
|
334
|
+
i0.ɵɵelementStart(12, "div", 7)(13, "button", 8);
|
|
335
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Template_button_click_13_listener() { return ctx.ExpandAll(); });
|
|
336
|
+
i0.ɵɵelement(14, "i", 9);
|
|
337
|
+
i0.ɵɵtext(15, " Expand ");
|
|
338
|
+
i0.ɵɵelementEnd();
|
|
339
|
+
i0.ɵɵelementStart(16, "button", 10);
|
|
340
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Template_button_click_16_listener() { return ctx.CollapseAll(); });
|
|
341
|
+
i0.ɵɵelement(17, "i", 11);
|
|
342
|
+
i0.ɵɵtext(18, " Collapse ");
|
|
343
|
+
i0.ɵɵelementEnd();
|
|
344
|
+
i0.ɵɵelementStart(19, "button", 12);
|
|
345
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Template_button_click_19_listener() { return ctx.refresh(); });
|
|
346
|
+
i0.ɵɵelement(20, "i", 13);
|
|
347
|
+
i0.ɵɵtext(21, " Refresh ");
|
|
348
|
+
i0.ɵɵelementEnd();
|
|
349
|
+
i0.ɵɵelementStart(22, "button", 14);
|
|
350
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Template_button_click_22_listener() { return ctx.OnCopy(); });
|
|
351
|
+
i0.ɵɵelement(23, "i", 15);
|
|
352
|
+
i0.ɵɵtext(24);
|
|
353
|
+
i0.ɵɵelementEnd()()();
|
|
354
|
+
i0.ɵɵelementStart(25, "div", 16)(26, "div", 17)(27, "div", 18);
|
|
355
|
+
i0.ɵɵtext(28);
|
|
356
|
+
i0.ɵɵelementEnd();
|
|
357
|
+
i0.ɵɵelementStart(29, "div", 19);
|
|
358
|
+
i0.ɵɵtext(30, "Total registrations");
|
|
359
|
+
i0.ɵɵelementEnd()();
|
|
360
|
+
i0.ɵɵelementStart(31, "div", 17)(32, "div", 18);
|
|
361
|
+
i0.ɵɵtext(33);
|
|
362
|
+
i0.ɵɵelementEnd();
|
|
363
|
+
i0.ɵɵelementStart(34, "div", 19);
|
|
364
|
+
i0.ɵɵtext(35, "Base classes");
|
|
365
|
+
i0.ɵɵelementEnd()();
|
|
366
|
+
i0.ɵɵelementStart(36, "div", 17)(37, "div", 18);
|
|
367
|
+
i0.ɵɵtext(38);
|
|
368
|
+
i0.ɵɵelementEnd();
|
|
369
|
+
i0.ɵɵelementStart(39, "div", 19);
|
|
370
|
+
i0.ɵɵtext(40, "With overrides");
|
|
371
|
+
i0.ɵɵelementEnd()();
|
|
372
|
+
i0.ɵɵelementStart(41, "div", 20)(42, "div", 21);
|
|
373
|
+
i0.ɵɵelement(43, "i", 22);
|
|
374
|
+
i0.ɵɵelementStart(44, "input", 23);
|
|
375
|
+
i0.ɵɵlistener("input", function ClassRegistryInspectorComponent_Template_input_input_44_listener($event) { return ctx.OnSearchChange($event.target.value); });
|
|
376
|
+
i0.ɵɵelementEnd();
|
|
377
|
+
i0.ɵɵconditionalCreate(45, ClassRegistryInspectorComponent_Conditional_45_Template, 2, 0, "button", 24);
|
|
378
|
+
i0.ɵɵelementEnd()()();
|
|
379
|
+
i0.ɵɵelementStart(46, "div", 25);
|
|
380
|
+
i0.ɵɵrepeaterCreate(47, ClassRegistryInspectorComponent_For_48_Template, 11, 9, "div", 26, ctx.TrackByBase, true);
|
|
381
|
+
i0.ɵɵconditionalCreate(49, ClassRegistryInspectorComponent_Conditional_49_Template, 4, 1, "div", 27);
|
|
382
|
+
i0.ɵɵelementEnd();
|
|
383
|
+
i0.ɵɵelementStart(50, "div", 28);
|
|
384
|
+
i0.ɵɵtext(51);
|
|
385
|
+
i0.ɵɵelementEnd()();
|
|
386
|
+
} if (rf & 2) {
|
|
387
|
+
i0.ɵɵadvance(22);
|
|
388
|
+
i0.ɵɵclassProp("mj-inspector__btn--success", ctx.CopyConfirmed);
|
|
389
|
+
i0.ɵɵproperty("title", ctx.CopyConfirmed ? "Copied" : "Copy as JSON");
|
|
390
|
+
i0.ɵɵadvance();
|
|
391
|
+
i0.ɵɵclassProp("fa-clipboard", !ctx.CopyConfirmed)("fa-check", ctx.CopyConfirmed);
|
|
392
|
+
i0.ɵɵadvance();
|
|
393
|
+
i0.ɵɵtextInterpolate1(" ", ctx.CopyConfirmed ? "Copied" : "Copy", " ");
|
|
394
|
+
i0.ɵɵadvance(4);
|
|
395
|
+
i0.ɵɵtextInterpolate(ctx.Stats.total);
|
|
396
|
+
i0.ɵɵadvance(5);
|
|
397
|
+
i0.ɵɵtextInterpolate(ctx.Stats.baseClasses);
|
|
398
|
+
i0.ɵɵadvance(3);
|
|
399
|
+
i0.ɵɵclassProp("cr-stat--warn", ctx.Stats.withOverrides > 0);
|
|
400
|
+
i0.ɵɵadvance(2);
|
|
401
|
+
i0.ɵɵtextInterpolate(ctx.Stats.withOverrides);
|
|
402
|
+
i0.ɵɵadvance(6);
|
|
403
|
+
i0.ɵɵproperty("value", ctx.SearchQuery);
|
|
404
|
+
i0.ɵɵadvance();
|
|
405
|
+
i0.ɵɵconditional(ctx.SearchQuery ? 45 : -1);
|
|
406
|
+
i0.ɵɵadvance(2);
|
|
407
|
+
i0.ɵɵrepeater(ctx.FilteredGroups);
|
|
408
|
+
i0.ɵɵadvance(2);
|
|
409
|
+
i0.ɵɵconditional(ctx.FilteredGroups.length === 0 ? 49 : -1);
|
|
410
|
+
i0.ɵɵadvance(2);
|
|
411
|
+
i0.ɵɵtextInterpolate1("Refreshed ", ctx.LastRefreshedLabel);
|
|
412
|
+
} }, styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n.mj-inspector[_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.mj-inspector__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.mj-inspector__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.mj-inspector__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.mj-inspector__header-sub[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n.mj-inspector__header-spacer[_ngcontent-%COMP%] { flex: 1; }\n.mj-inspector__header-actions[_ngcontent-%COMP%] {\n display: flex; gap: 6px;\n}\n.mj-inspector__btn[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.mj-inspector__btn[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__btn--success[_ngcontent-%COMP%] {\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 30%, var(--mj-border-default));\n}\n\n\n\n.mj-inspector__body[_ngcontent-%COMP%] {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.mj-inspector__sidebar[_ngcontent-%COMP%] {\n width: 220px;\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.mj-inspector__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.mj-inspector__nav-item[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.mj-inspector__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.mj-inspector__nav-item--active[_ngcontent-%COMP%]:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.mj-inspector__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.mj-inspector__nav-text[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.mj-inspector__nav-label[_ngcontent-%COMP%] {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.mj-inspector__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.mj-inspector__nav-item--active[_ngcontent-%COMP%] .mj-inspector__nav-desc[_ngcontent-%COMP%] {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n\n\n.mj-inspector__content[_ngcontent-%COMP%] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head[_ngcontent-%COMP%] {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title[_ngcontent-%COMP%] {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor[_ngcontent-%COMP%] mj-code-editor[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n\n\n.mj-inspector__empty[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n@media (max-width: 700px) {\n .mj-inspector__body[_ngcontent-%COMP%] { flex-direction: column; }\n .mj-inspector__sidebar[_ngcontent-%COMP%] {\n width: 100%;\n height: auto;\n max-height: 200px;\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 .mj-inspector__nav-item[_ngcontent-%COMP%] { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .mj-inspector__nav-desc[_ngcontent-%COMP%] { display: none; }\n .mj-inspector__header[_ngcontent-%COMP%] { padding: 12px 14px; gap: 10px; }\n}", "\n\n\n.mj-inspector--solo[_ngcontent-%COMP%] {\n background: var(--mj-bg-page);\n}\n.mj-inspector--solo[_ngcontent-%COMP%] .mj-inspector__header[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n}\n\n\n\n.cr-stats-row[_ngcontent-%COMP%] {\n display: grid;\n grid-template-columns: repeat(3, max-content) 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n align-items: center;\n}\n.cr-stat[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 10px 16px;\n min-width: 120px;\n transition: border-color 0.15s;\n}\n.cr-stat--warn[_ngcontent-%COMP%] {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n background: color-mix(in srgb, var(--mj-status-warning) 4%, var(--mj-bg-surface-card));\n}\n.cr-stat--inline[_ngcontent-%COMP%] {\n background: transparent;\n border: none;\n padding: 0;\n min-width: 0;\n}\n.cr-stat__value[_ngcontent-%COMP%] {\n font-size: 22px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: -0.5px;\n color: var(--mj-text-primary);\n}\n.cr-stat--warn[_ngcontent-%COMP%] .cr-stat__value[_ngcontent-%COMP%] { color: var(--mj-status-warning); }\n.cr-stat__label[_ngcontent-%COMP%] {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n margin-top: 4px;\n}\n\n\n\n.cr-search-wrap[_ngcontent-%COMP%] {\n position: relative;\n width: 100%;\n max-width: 420px;\n margin-left: auto;\n}\n.cr-search-icon[_ngcontent-%COMP%] {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.cr-search[_ngcontent-%COMP%] {\n width: 100%;\n padding: 9px 32px 9px 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n font-family: inherit;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.cr-search[_ngcontent-%COMP%]:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.cr-search-clear[_ngcontent-%COMP%] {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.cr-search-clear[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n\n\n.cr-groups[_ngcontent-%COMP%] {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 12px 20px;\n}\n.cr-group[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n margin-bottom: 8px;\n overflow: hidden;\n transition: box-shadow 0.15s;\n}\n.cr-group--expanded[_ngcontent-%COMP%] {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n.cr-group-head[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n width: 100%;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n transition: background 0.12s;\n}\n.cr-group-head[_ngcontent-%COMP%]:hover { background: var(--mj-bg-surface-hover); }\n.cr-group-chev[_ngcontent-%COMP%] {\n color: var(--mj-text-muted);\n font-size: 11px;\n transition: transform 0.2s;\n width: 12px;\n}\n.cr-group-chev--down[_ngcontent-%COMP%] { transform: rotate(90deg); }\n.cr-group-name[_ngcontent-%COMP%] {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n letter-spacing: -0.2px;\n}\n.cr-group-meta[_ngcontent-%COMP%] { display: inline-flex; gap: 6px; }\n\n.cr-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10.5px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 100px;\n line-height: 1.4;\n}\n.cr-pill--neutral[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n.cr-pill--info[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.cr-pill--warn[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-warning) 16%, transparent);\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n\n\n\n.cr-table[_ngcontent-%COMP%] {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-subtle);\n}\n.cr-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n}\n.cr-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] {\n text-align: left;\n padding: 8px 14px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.cr-th-prio[_ngcontent-%COMP%] { text-align: right; width: 90px; }\n.cr-th-status[_ngcontent-%COMP%] { width: 110px; }\n.cr-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%] {\n padding: 7px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n.cr-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:first-child td[_ngcontent-%COMP%] { border-top: none; }\n.cr-td-key[_ngcontent-%COMP%] code[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n padding: 2px 7px;\n border-radius: 5px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-primary);\n}\n.cr-td-empty[_ngcontent-%COMP%] { color: var(--mj-text-muted); font-style: italic; font-size: 11.5px; }\n.cr-td-class[_ngcontent-%COMP%] {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n}\n.cr-td-prio[_ngcontent-%COMP%] {\n text-align: right;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n}\n.cr-td-status[_ngcontent-%COMP%] { text-align: left; }\n\n.cr-row--conflict[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-warning) 5%, transparent); }\n.cr-row--winning[_ngcontent-%COMP%] { background: color-mix(in srgb, var(--mj-status-success) 5%, transparent); }\n\n.cr-status[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10.5px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 100px;\n}\n.cr-status--win[_ngcontent-%COMP%] {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary));\n}\n.cr-status--shadowed[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n text-decoration: line-through;\n}\n\n.cr-empty[_ngcontent-%COMP%] {\n padding: 40px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.mj-inspector__footer-meta[_ngcontent-%COMP%] {\n padding: 8px 20px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n font-size: 11px;\n color: var(--mj-text-muted);\n text-align: right;\n flex-shrink: 0;\n}\n\n@media (max-width: 700px) {\n .cr-stats-row[_ngcontent-%COMP%] { grid-template-columns: repeat(2, 1fr); }\n .cr-stat--inline[_ngcontent-%COMP%] { grid-column: 1 / -1; }\n .cr-search-wrap[_ngcontent-%COMP%] { max-width: 100%; }\n .cr-groups[_ngcontent-%COMP%] { padding: 10px 14px; }\n .cr-th-status[_ngcontent-%COMP%] { display: none; }\n .cr-td-status[_ngcontent-%COMP%] { display: none; }\n}"] });
|
|
413
|
+
};
|
|
414
|
+
ClassRegistryInspectorComponent = __decorate([
|
|
415
|
+
RegisterClass(BaseResourceComponent, 'ClassRegistryInspector')
|
|
416
|
+
], ClassRegistryInspectorComponent);
|
|
417
|
+
export { ClassRegistryInspectorComponent };
|
|
418
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClassRegistryInspectorComponent, [{
|
|
419
|
+
type: Component,
|
|
420
|
+
args: [{ standalone: false, selector: 'mj-class-registry-inspector', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <div class=\"mj-inspector__header\">\n <div class=\"mj-inspector__header-icon\"><i class=\"fa-solid fa-cubes\"></i></div>\n <div>\n <h3 class=\"mj-inspector__header-title\">Class Registry</h3>\n <div class=\"mj-inspector__header-sub\">Every class registered with <code>@RegisterClass</code></div>\n </div>\n <span class=\"mj-inspector__header-spacer\"></span>\n <div class=\"mj-inspector__header-actions\">\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"ExpandAll()\" title=\"Expand all groups\">\n <i class=\"fa-solid fa-expand\"></i> Expand\n </button>\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"CollapseAll()\" title=\"Collapse all groups\">\n <i class=\"fa-solid fa-compress\"></i> Collapse\n </button>\n <button class=\"mj-inspector__btn\" type=\"button\" (click)=\"refresh()\" title=\"Re-scan registry\">\n <i class=\"fa-solid fa-rotate\"></i> Refresh\n </button>\n <button class=\"mj-inspector__btn\"\n [class.mj-inspector__btn--success]=\"CopyConfirmed\"\n type=\"button\" (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy as JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n </div>\n </div>\n\n <div class=\"cr-stats-row\">\n <div class=\"cr-stat\">\n <div class=\"cr-stat__value\">{{ Stats.total }}</div>\n <div class=\"cr-stat__label\">Total registrations</div>\n </div>\n <div class=\"cr-stat\">\n <div class=\"cr-stat__value\">{{ Stats.baseClasses }}</div>\n <div class=\"cr-stat__label\">Base classes</div>\n </div>\n <div class=\"cr-stat\" [class.cr-stat--warn]=\"Stats.withOverrides > 0\">\n <div class=\"cr-stat__value\">{{ Stats.withOverrides }}</div>\n <div class=\"cr-stat__label\">With overrides</div>\n </div>\n <div class=\"cr-stat cr-stat--inline\">\n <div class=\"cr-search-wrap\">\n <i class=\"fa-solid fa-search cr-search-icon\"></i>\n <input type=\"search\"\n class=\"cr-search\"\n placeholder=\"Search base class, subclass, or key\u2026\"\n [value]=\"SearchQuery\"\n (input)=\"OnSearchChange($any($event.target).value)\" />\n @if (SearchQuery) {\n <button class=\"cr-search-clear\" (click)=\"OnSearchChange('')\" title=\"Clear\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n }\n </div>\n </div>\n </div>\n\n <div class=\"cr-groups\">\n @for (group of FilteredGroups; track TrackByBase($index, group)) {\n <div class=\"cr-group\" [class.cr-group--expanded]=\"group.expanded\">\n <button type=\"button\" class=\"cr-group-head\" (click)=\"ToggleGroup(group)\">\n <i class=\"fa-solid fa-chevron-right cr-group-chev\"\n [class.cr-group-chev--down]=\"group.expanded\"></i>\n <span class=\"cr-group-name\">{{ group.baseClassName }}</span>\n <span class=\"cr-group-meta\">\n <span class=\"cr-pill cr-pill--neutral\">{{ group.count }}</span>\n @if (group.uniqueKeys !== group.count) {\n <span class=\"cr-pill cr-pill--info\">{{ group.uniqueKeys }} keys</span>\n }\n @if (group.hasOverrides) {\n <span class=\"cr-pill cr-pill--warn\">\n <i class=\"fa-solid fa-bolt\"></i> overrides\n </span>\n }\n </span>\n </button>\n @if (group.expanded) {\n <table class=\"cr-table\">\n <thead>\n <tr>\n <th class=\"cr-th-key\">Key</th>\n <th class=\"cr-th-class\">Subclass</th>\n <th class=\"cr-th-prio\">Priority</th>\n <th class=\"cr-th-status\"></th>\n </tr>\n </thead>\n <tbody>\n @for (reg of group.registrations; track TrackByReg($index, reg)) {\n <tr [class.cr-row--conflict]=\"IsConflictRow(group, reg)\"\n [class.cr-row--winning]=\"IsWinningRow(group, reg)\">\n <td class=\"cr-td-key\">\n @if (reg.Key) {\n <code>{{ reg.Key }}</code>\n } @else {\n <span class=\"cr-td-empty\">(no key)</span>\n }\n </td>\n <td class=\"cr-td-class\">{{ reg.SubClass.name || '(anonymous)' }}</td>\n <td class=\"cr-td-prio\">{{ reg.Priority }}</td>\n <td class=\"cr-td-status\">\n @if (IsWinningRow(group, reg)) {\n <span class=\"cr-status cr-status--win\" title=\"Highest priority among same-key registrations\">\n <i class=\"fa-solid fa-crown\"></i> winner\n </span>\n } @else if (IsConflictRow(group, reg)) {\n <span class=\"cr-status cr-status--shadowed\" title=\"Outranked by another registration with the same key\">\n shadowed\n </span>\n }\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n }\n @if (FilteredGroups.length === 0) {\n <div class=\"cr-empty\">\n <i class=\"fa-solid fa-magnifying-glass\"></i>\n <span>No registrations match \"{{ SearchQuery }}\"</span>\n </div>\n }\n </div>\n\n <div class=\"mj-inspector__footer-meta\">Refreshed {{ LastRefreshedLabel }}</div>\n</div>\n", styles: [":host { display: block; height: 100%; }\n\n.mj-inspector {\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.mj-inspector__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.mj-inspector__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.mj-inspector__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.mj-inspector__header-sub {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n}\n.mj-inspector__header-spacer { flex: 1; }\n.mj-inspector__header-actions {\n display: flex; gap: 6px;\n}\n.mj-inspector__btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n border: 1px solid var(--mj-border-default);\n background: var(--mj-bg-surface);\n color: var(--mj-text-secondary);\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n font-family: inherit;\n transition: all 0.15s;\n}\n.mj-inspector__btn:hover {\n background: var(--mj-bg-surface-hover);\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__btn--success {\n color: var(--mj-status-success);\n border-color: color-mix(in srgb, var(--mj-status-success) 30%, var(--mj-border-default));\n}\n\n/* Layout: sidebar + content */\n.mj-inspector__body {\n display: flex;\n flex: 1;\n min-height: 0;\n}\n.mj-inspector__sidebar {\n width: 220px;\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.mj-inspector__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.mj-inspector__nav-item:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-text-primary);\n}\n.mj-inspector__nav-item--active {\n background: color-mix(in srgb, var(--mj-brand-primary) 10%, transparent);\n color: var(--mj-brand-primary);\n}\n.mj-inspector__nav-item--active:hover {\n background: color-mix(in srgb, var(--mj-brand-primary) 14%, transparent);\n}\n.mj-inspector__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.mj-inspector__nav-text { flex: 1; min-width: 0; }\n.mj-inspector__nav-label {\n font-size: 13px;\n font-weight: 500;\n line-height: 1.2;\n}\n.mj-inspector__nav-desc {\n font-size: 11px;\n color: var(--mj-text-muted);\n margin-top: 3px;\n line-height: 1.3;\n}\n.mj-inspector__nav-item--active .mj-inspector__nav-desc {\n color: color-mix(in srgb, var(--mj-brand-primary) 70%, var(--mj-text-muted));\n}\n\n/* Content area */\n.mj-inspector__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-page);\n}\n.mj-inspector__content-head {\n padding: 12px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n display: flex;\n align-items: center;\n justify-content: space-between;\n background: var(--mj-bg-surface-card);\n}\n.mj-inspector__content-title {\n margin: 0;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n}\n.mj-inspector__content-meta {\n font-size: 11px;\n color: var(--mj-text-muted);\n}\n.mj-inspector__editor {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n.mj-inspector__editor mj-code-editor {\n flex: 1;\n min-height: 0;\n display: block;\n}\n\n/* Empty state */\n.mj-inspector__empty {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n}\n\n@media (max-width: 700px) {\n .mj-inspector__body { flex-direction: column; }\n .mj-inspector__sidebar {\n width: 100%;\n height: auto;\n max-height: 200px;\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 .mj-inspector__nav-item { flex: 1 1 calc(50% - 8px); margin-bottom: 0; }\n .mj-inspector__nav-desc { display: none; }\n .mj-inspector__header { padding: 12px 14px; gap: 10px; }\n}\n", "/* Class Registry Browser \u2014 overlays + extends inspector-shared.css */\n\n.mj-inspector--solo {\n background: var(--mj-bg-page);\n}\n.mj-inspector--solo .mj-inspector__header {\n background: var(--mj-bg-surface);\n}\n\n/* Stats row */\n.cr-stats-row {\n display: grid;\n grid-template-columns: repeat(3, max-content) 1fr;\n gap: 12px;\n padding: 14px 20px;\n border-bottom: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n align-items: center;\n}\n.cr-stat {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 10px 16px;\n min-width: 120px;\n transition: border-color 0.15s;\n}\n.cr-stat--warn {\n border-color: color-mix(in srgb, var(--mj-status-warning) 30%, var(--mj-border-subtle));\n background: color-mix(in srgb, var(--mj-status-warning) 4%, var(--mj-bg-surface-card));\n}\n.cr-stat--inline {\n background: transparent;\n border: none;\n padding: 0;\n min-width: 0;\n}\n.cr-stat__value {\n font-size: 22px;\n font-weight: 700;\n line-height: 1;\n letter-spacing: -0.5px;\n color: var(--mj-text-primary);\n}\n.cr-stat--warn .cr-stat__value { color: var(--mj-status-warning); }\n.cr-stat__label {\n font-size: 10.5px;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n font-weight: 600;\n letter-spacing: 0.5px;\n margin-top: 4px;\n}\n\n/* Search */\n.cr-search-wrap {\n position: relative;\n width: 100%;\n max-width: 420px;\n margin-left: auto;\n}\n.cr-search-icon {\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: var(--mj-text-muted);\n font-size: 12px;\n pointer-events: none;\n}\n.cr-search {\n width: 100%;\n padding: 9px 32px 9px 32px;\n border: 1px solid var(--mj-border-default);\n border-radius: 8px;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n font-size: 13px;\n font-family: inherit;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n.cr-search:focus {\n outline: none;\n border-color: var(--mj-brand-primary);\n box-shadow: 0 0 0 3px color-mix(in srgb, var(--mj-brand-primary) 15%, transparent);\n}\n.cr-search-clear {\n position: absolute;\n right: 8px;\n top: 50%;\n transform: translateY(-50%);\n background: transparent;\n border: none;\n color: var(--mj-text-muted);\n cursor: pointer;\n width: 22px;\n height: 22px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 11px;\n}\n.cr-search-clear:hover { background: var(--mj-bg-surface-hover); color: var(--mj-text-primary); }\n\n/* Groups */\n.cr-groups {\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 12px 20px;\n}\n.cr-group {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n margin-bottom: 8px;\n overflow: hidden;\n transition: box-shadow 0.15s;\n}\n.cr-group--expanded {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n.cr-group-head {\n display: flex;\n align-items: center;\n gap: 10px;\n padding: 10px 14px;\n width: 100%;\n background: transparent;\n border: none;\n cursor: pointer;\n text-align: left;\n font-family: inherit;\n transition: background 0.12s;\n}\n.cr-group-head:hover { background: var(--mj-bg-surface-hover); }\n.cr-group-chev {\n color: var(--mj-text-muted);\n font-size: 11px;\n transition: transform 0.2s;\n width: 12px;\n}\n.cr-group-chev--down { transform: rotate(90deg); }\n.cr-group-name {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n flex: 1;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n letter-spacing: -0.2px;\n}\n.cr-group-meta { display: inline-flex; gap: 6px; }\n\n.cr-pill {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10.5px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 100px;\n line-height: 1.4;\n}\n.cr-pill--neutral {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-secondary);\n}\n.cr-pill--info {\n background: color-mix(in srgb, var(--mj-brand-primary) 12%, transparent);\n color: var(--mj-brand-primary);\n}\n.cr-pill--warn {\n background: color-mix(in srgb, var(--mj-status-warning) 16%, transparent);\n color: color-mix(in srgb, var(--mj-status-warning) 70%, var(--mj-text-primary));\n}\n\n/* Table */\n.cr-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12.5px;\n background: var(--mj-bg-surface-card);\n border-top: 1px solid var(--mj-border-subtle);\n}\n.cr-table thead {\n background: var(--mj-bg-surface-sunken);\n}\n.cr-table th {\n text-align: left;\n padding: 8px 14px;\n font-size: 10px;\n font-weight: 700;\n color: var(--mj-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.5px;\n border-bottom: 1px solid var(--mj-border-subtle);\n}\n.cr-th-prio { text-align: right; width: 90px; }\n.cr-th-status { width: 110px; }\n.cr-table td {\n padding: 7px 14px;\n border-top: 1px solid var(--mj-border-subtle);\n color: var(--mj-text-primary);\n vertical-align: middle;\n}\n.cr-table tbody tr:first-child td { border-top: none; }\n.cr-td-key code {\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-subtle);\n padding: 2px 7px;\n border-radius: 5px;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-primary);\n}\n.cr-td-empty { color: var(--mj-text-muted); font-style: italic; font-size: 11.5px; }\n.cr-td-class {\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 12px;\n}\n.cr-td-prio {\n text-align: right;\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n color: var(--mj-text-secondary);\n}\n.cr-td-status { text-align: left; }\n\n.cr-row--conflict { background: color-mix(in srgb, var(--mj-status-warning) 5%, transparent); }\n.cr-row--winning { background: color-mix(in srgb, var(--mj-status-success) 5%, transparent); }\n\n.cr-status {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n font-size: 10.5px;\n font-weight: 600;\n padding: 2px 8px;\n border-radius: 100px;\n}\n.cr-status--win {\n background: color-mix(in srgb, var(--mj-status-success) 14%, transparent);\n color: color-mix(in srgb, var(--mj-status-success) 70%, var(--mj-text-primary));\n}\n.cr-status--shadowed {\n background: var(--mj-bg-surface-sunken);\n color: var(--mj-text-muted);\n text-decoration: line-through;\n}\n\n.cr-empty {\n padding: 40px;\n text-align: center;\n color: var(--mj-text-muted);\n font-size: 13px;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n}\n\n.mj-inspector__footer-meta {\n padding: 8px 20px;\n border-top: 1px solid var(--mj-border-subtle);\n background: var(--mj-bg-surface);\n font-size: 11px;\n color: var(--mj-text-muted);\n text-align: right;\n flex-shrink: 0;\n}\n\n@media (max-width: 700px) {\n .cr-stats-row { grid-template-columns: repeat(2, 1fr); }\n .cr-stat--inline { grid-column: 1 / -1; }\n .cr-search-wrap { max-width: 100%; }\n .cr-groups { padding: 10px 14px; }\n .cr-th-status { display: none; }\n .cr-td-status { display: none; }\n}\n"] }]
|
|
421
|
+
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
422
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClassRegistryInspectorComponent, { className: "ClassRegistryInspectorComponent", filePath: "src/DevTools/class-registry.component.ts", lineNumber: 37 }); })();
|
|
423
|
+
//# sourceMappingURL=class-registry.component.js.map
|