@memberjunction/ng-dashboards 5.35.0 → 5.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AI/components/agents/agent-configuration.component.js +3 -3
- package/dist/AI/components/agents/agent-configuration.component.js.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts +22 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.d.ts.map +1 -1
- package/dist/AI/components/analytics/ai-analytics-resource.component.js +157 -137
- package/dist/AI/components/analytics/ai-analytics-resource.component.js.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts +28 -0
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.d.ts.map +1 -1
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js +2075 -2068
- package/dist/AI/components/autotagging/autotagging-pipeline-resource.component.js.map +1 -1
- package/dist/AI/components/models/model-management.component.js +4 -4
- package/dist/AI/components/models/model-management.component.js.map +1 -1
- package/dist/AI/components/prompts/prompt-management.component.js +3 -3
- package/dist/AI/components/prompts/prompt-management.component.js.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.d.ts +15 -0
- package/dist/AI/components/tags/tags-resource.component.d.ts.map +1 -1
- package/dist/AI/components/tags/tags-resource.component.js +1411 -1424
- package/dist/AI/components/tags/tags-resource.component.js.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.d.ts +12 -8
- package/dist/APIKeys/api-keys-resource.component.d.ts.map +1 -1
- package/dist/APIKeys/api-keys-resource.component.js +329 -371
- package/dist/APIKeys/api-keys-resource.component.js.map +1 -1
- package/dist/Actions/components/actions-overview.component.js +137 -142
- package/dist/Actions/components/actions-overview.component.js.map +1 -1
- package/dist/Actions/components/execution-monitoring.component.js +111 -116
- package/dist/Actions/components/execution-monitoring.component.js.map +1 -1
- package/dist/Admin/admin-data-schema.component.js +13 -65
- package/dist/Admin/admin-data-schema.component.js.map +1 -1
- package/dist/Admin/admin-dev-tools-resource.component.js +13 -65
- package/dist/Admin/admin-dev-tools-resource.component.js.map +1 -1
- package/dist/Admin/admin-identity-access.component.js +13 -65
- package/dist/Admin/admin-identity-access.component.js.map +1 -1
- package/dist/Admin/admin-monitoring.component.js +13 -65
- package/dist/Admin/admin-monitoring.component.js.map +1 -1
- package/dist/Admin/base-admin-container.component.d.ts +9 -7
- package/dist/Admin/base-admin-container.component.d.ts.map +1 -1
- package/dist/Admin/base-admin-container.component.js +26 -17
- package/dist/Admin/base-admin-container.component.js.map +1 -1
- package/dist/ApplicationRoles/application-roles-resource.component.js +74 -67
- package/dist/ApplicationRoles/application-roles-resource.component.js.map +1 -1
- package/dist/Communication/communication-new-message-resource.component.d.ts +93 -0
- package/dist/Communication/communication-new-message-resource.component.d.ts.map +1 -0
- package/dist/Communication/communication-new-message-resource.component.js +661 -0
- package/dist/Communication/communication-new-message-resource.component.js.map +1 -0
- package/dist/Credentials/components/credentials-categories-resource.component.js +152 -159
- package/dist/Credentials/components/credentials-categories-resource.component.js.map +1 -1
- package/dist/Credentials/components/credentials-types-resource.component.js +151 -155
- package/dist/Credentials/components/credentials-types-resource.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js +20 -21
- package/dist/DatabaseDesigner/components/database-designer-dashboard.component.js.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts +2 -0
- package/dist/DatabaseDesigner/components/entity-list.component.d.ts.map +1 -1
- package/dist/DatabaseDesigner/components/entity-list.component.js +131 -125
- package/dist/DatabaseDesigner/components/entity-list.component.js.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.d.ts.map +1 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js +7 -1
- package/dist/DatabaseDesigner/database-designer-dashboards.module.js.map +1 -1
- package/dist/DevTools/app-state-inspector.component.d.ts +5 -0
- package/dist/DevTools/app-state-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/app-state-inspector.component.js +46 -72
- package/dist/DevTools/app-state-inspector.component.js.map +1 -1
- package/dist/DevTools/class-registry.component.js +88 -100
- package/dist/DevTools/class-registry.component.js.map +1 -1
- package/dist/DevTools/event-monitor.component.js +158 -168
- package/dist/DevTools/event-monitor.component.js.map +1 -1
- package/dist/DevTools/graphql-console.component.js +257 -264
- package/dist/DevTools/graphql-console.component.js.map +1 -1
- package/dist/DevTools/layout-inspector.component.d.ts +5 -0
- package/dist/DevTools/layout-inspector.component.d.ts.map +1 -1
- package/dist/DevTools/layout-inspector.component.js +46 -64
- package/dist/DevTools/layout-inspector.component.js.map +1 -1
- package/dist/DevTools/lazy-module-status.component.js +75 -84
- package/dist/DevTools/lazy-module-status.component.js.map +1 -1
- package/dist/DevTools/settings-explorer.component.js +76 -85
- package/dist/DevTools/settings-explorer.component.js.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts +2 -0
- package/dist/EntityAdmin/entity-admin-dashboard.component.d.ts.map +1 -1
- package/dist/EntityAdmin/entity-admin-dashboard.component.js +7 -3
- package/dist/EntityAdmin/entity-admin-dashboard.component.js.map +1 -1
- package/dist/Integration/components/activity/activity.component.js +97 -99
- package/dist/Integration/components/activity/activity.component.js.map +1 -1
- package/dist/Integration/components/connections/connections.component.js +842 -855
- package/dist/Integration/components/connections/connections.component.js.map +1 -1
- package/dist/Integration/components/pipelines/pipelines.component.js +502 -517
- package/dist/Integration/components/pipelines/pipelines.component.js.map +1 -1
- package/dist/Integration/components/schedules/schedules.component.js +78 -89
- package/dist/Integration/components/schedules/schedules.component.js.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts +5 -0
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js +1120 -1128
- package/dist/KnowledgeHub/components/analytics/analytics-resource.component.js.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts +11 -0
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.d.ts.map +1 -1
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js +606 -661
- package/dist/KnowledgeHub/components/config/knowledge-config-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.d.ts +102 -0
- package/dist/Lists/components/lists-browse-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-browse-resource.component.js +1179 -504
- package/dist/Lists/components/lists-browse-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.d.ts +133 -3
- package/dist/Lists/components/lists-operations-resource.component.d.ts.map +1 -1
- package/dist/Lists/components/lists-operations-resource.component.js +1527 -327
- package/dist/Lists/components/lists-operations-resource.component.js.map +1 -1
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts +29 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.d.ts.map +1 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js +77 -0
- package/dist/Lists/components/lists-shared-with-me-resource.component.js.map +1 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts +6 -0
- package/dist/Lists/components/venn-diagram/venn-diagram.component.d.ts.map +1 -1
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js +35 -7
- package/dist/Lists/components/venn-diagram/venn-diagram.component.js.map +1 -1
- package/dist/Lists/index.d.ts +1 -0
- package/dist/Lists/index.d.ts.map +1 -1
- package/dist/Lists/index.js +1 -0
- package/dist/Lists/index.js.map +1 -1
- package/dist/Lists/services/list-set-operations.service.d.ts +93 -2
- package/dist/Lists/services/list-set-operations.service.d.ts.map +1 -1
- package/dist/Lists/services/list-set-operations.service.js +236 -10
- package/dist/Lists/services/list-set-operations.service.js.map +1 -1
- package/dist/MCP/mcp-dashboard.component.js +19 -19
- package/dist/MCP/mcp-dashboard.component.js.map +1 -1
- package/dist/Scheduling/scheduling-dashboard.component.js +58 -60
- package/dist/Scheduling/scheduling-dashboard.component.js.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts +13 -3
- package/dist/SystemDiagnostics/system-diagnostics.component.d.ts.map +1 -1
- package/dist/SystemDiagnostics/system-diagnostics.component.js +1007 -1252
- package/dist/SystemDiagnostics/system-diagnostics.component.js.map +1 -1
- package/dist/Testing/components/testing-explorer.component.d.ts +31 -6
- package/dist/Testing/components/testing-explorer.component.d.ts.map +1 -1
- package/dist/Testing/components/testing-explorer.component.js +543 -629
- package/dist/Testing/components/testing-explorer.component.js.map +1 -1
- package/dist/Testing/testing-dashboard.component.js +50 -49
- package/dist/Testing/testing-dashboard.component.js.map +1 -1
- package/dist/ai-dashboards.module.d.ts +1 -1
- package/dist/ai-dashboards.module.d.ts.map +1 -1
- package/dist/ai-dashboards.module.js +16 -1
- package/dist/ai-dashboards.module.js.map +1 -1
- package/dist/communication-dashboards.module.d.ts +9 -7
- package/dist/communication-dashboards.module.d.ts.map +1 -1
- package/dist/communication-dashboards.module.js +13 -4
- package/dist/communication-dashboards.module.js.map +1 -1
- package/dist/core-dashboards.module.d.ts +1 -1
- package/dist/core-dashboards.module.d.ts.map +1 -1
- package/dist/core-dashboards.module.js +16 -1
- package/dist/core-dashboards.module.js.map +1 -1
- package/dist/lists-dashboards.module.d.ts +10 -9
- package/dist/lists-dashboards.module.d.ts.map +1 -1
- package/dist/lists-dashboards.module.js +13 -2
- package/dist/lists-dashboards.module.js.map +1 -1
- package/dist/public-api.d.ts +1 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -0
- package/dist/public-api.js.map +1 -1
- package/dist/testing-dashboards.module.d.ts +1 -1
- package/dist/testing-dashboards.module.d.ts.map +1 -1
- package/dist/testing-dashboards.module.js +13 -1
- package/dist/testing-dashboards.module.js.map +1 -1
- package/package.json +53 -52
|
@@ -1 +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"]}
|
|
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 { TabConfig } from '@memberjunction/ng-ui-components';\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 /** Sections rendered as horizontal tabs in the chrome's [toolbar] slot. */\n public get tabsConfig(): TabConfig[] {\n return this.Sections.map(s => ({\n key: s.id,\n label: s.label,\n icon: s.icon\n }));\n }\n\n /** Adapter for `<mj-tab-nav>`'s string-typed `(TabChange)` output. */\n public onTabChange(key: string): void {\n const section = this.Sections.find(s => s.id === key);\n if (section) {\n this.OnSectionClick(section);\n }\n }\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 mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"App State inspector\"\n Title=\"App State Inspector\"\n Subtitle=\"Read-only snapshot of Explorer runtime state\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"OnDownload()\" title=\"Download as JSON\" aria-label=\"Download as JSON\">\n <i class=\"fa-solid fa-download\" aria-hidden=\"true\"></i>\n </button>\n </div>\n <div toolbar>\n <mj-tab-nav\n [Tabs]=\"tabsConfig\"\n [ActiveKey]=\"ActiveSection\"\n (TabChange)=\"onTabChange($event)\">\n </mj-tab-nav>\n </div>\n </mj-page-header-interior>\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"]}
|
|
@@ -9,15 +9,16 @@ import { BaseResourceComponent } from '@memberjunction/ng-shared';
|
|
|
9
9
|
import { RegisterClass, MJGlobal } from '@memberjunction/global';
|
|
10
10
|
import { DevToolsPrefs } from './dev-tools-prefs';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
|
-
|
|
12
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
13
|
+
function ClassRegistryInspectorComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
|
|
13
14
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
14
|
-
i0.ɵɵelementStart(0, "button",
|
|
15
|
-
i0.ɵɵlistener("click", function
|
|
16
|
-
i0.ɵɵelement(1, "i",
|
|
15
|
+
i0.ɵɵelementStart(0, "button", 23);
|
|
16
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Conditional_33_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.OnSearchChange("")); });
|
|
17
|
+
i0.ɵɵelement(1, "i", 24);
|
|
17
18
|
i0.ɵɵelementEnd();
|
|
18
19
|
} }
|
|
19
|
-
function
|
|
20
|
-
i0.ɵɵelementStart(0, "span",
|
|
20
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
21
|
+
i0.ɵɵelementStart(0, "span", 31);
|
|
21
22
|
i0.ɵɵtext(1);
|
|
22
23
|
i0.ɵɵelementEnd();
|
|
23
24
|
} if (rf & 2) {
|
|
@@ -25,13 +26,13 @@ function ClassRegistryInspectorComponent_For_48_Conditional_8_Template(rf, ctx)
|
|
|
25
26
|
i0.ɵɵadvance();
|
|
26
27
|
i0.ɵɵtextInterpolate1("", group_r4.uniqueKeys, " keys");
|
|
27
28
|
} }
|
|
28
|
-
function
|
|
29
|
-
i0.ɵɵelementStart(0, "span",
|
|
30
|
-
i0.ɵɵelement(1, "i",
|
|
29
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
30
|
+
i0.ɵɵelementStart(0, "span", 32);
|
|
31
|
+
i0.ɵɵelement(1, "i", 34);
|
|
31
32
|
i0.ɵɵtext(2, " overrides ");
|
|
32
33
|
i0.ɵɵelementEnd();
|
|
33
34
|
} }
|
|
34
|
-
function
|
|
35
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
35
36
|
i0.ɵɵelementStart(0, "code");
|
|
36
37
|
i0.ɵɵtext(1);
|
|
37
38
|
i0.ɵɵelementEnd();
|
|
@@ -40,34 +41,34 @@ function ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Conditiona
|
|
|
40
41
|
i0.ɵɵadvance();
|
|
41
42
|
i0.ɵɵtextInterpolate(reg_r5.Key);
|
|
42
43
|
} }
|
|
43
|
-
function
|
|
44
|
-
i0.ɵɵelementStart(0, "span",
|
|
44
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
45
|
+
i0.ɵɵelementStart(0, "span", 41);
|
|
45
46
|
i0.ɵɵtext(1, "(no key)");
|
|
46
47
|
i0.ɵɵelementEnd();
|
|
47
48
|
} }
|
|
48
|
-
function
|
|
49
|
-
i0.ɵɵelementStart(0, "span",
|
|
50
|
-
i0.ɵɵelement(1, "i",
|
|
49
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
50
|
+
i0.ɵɵelementStart(0, "span", 45);
|
|
51
|
+
i0.ɵɵelement(1, "i", 47);
|
|
51
52
|
i0.ɵɵtext(2, " winner ");
|
|
52
53
|
i0.ɵɵelementEnd();
|
|
53
54
|
} }
|
|
54
|
-
function
|
|
55
|
-
i0.ɵɵelementStart(0, "span",
|
|
55
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
56
|
+
i0.ɵɵelementStart(0, "span", 46);
|
|
56
57
|
i0.ɵɵtext(1, " shadowed ");
|
|
57
58
|
i0.ɵɵelementEnd();
|
|
58
59
|
} }
|
|
59
|
-
function
|
|
60
|
-
i0.ɵɵelementStart(0, "tr")(1, "td",
|
|
61
|
-
i0.ɵɵconditionalCreate(2,
|
|
60
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
i0.ɵɵelementStart(0, "tr")(1, "td", 40);
|
|
62
|
+
i0.ɵɵconditionalCreate(2, ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_2_Template, 2, 1, "code")(3, ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_3_Template, 2, 0, "span", 41);
|
|
62
63
|
i0.ɵɵelementEnd();
|
|
63
|
-
i0.ɵɵelementStart(4, "td",
|
|
64
|
+
i0.ɵɵelementStart(4, "td", 42);
|
|
64
65
|
i0.ɵɵtext(5);
|
|
65
66
|
i0.ɵɵelementEnd();
|
|
66
|
-
i0.ɵɵelementStart(6, "td",
|
|
67
|
+
i0.ɵɵelementStart(6, "td", 43);
|
|
67
68
|
i0.ɵɵtext(7);
|
|
68
69
|
i0.ɵɵelementEnd();
|
|
69
|
-
i0.ɵɵelementStart(8, "td",
|
|
70
|
-
i0.ɵɵconditionalCreate(9,
|
|
70
|
+
i0.ɵɵelementStart(8, "td", 44);
|
|
71
|
+
i0.ɵɵconditionalCreate(9, ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_9_Template, 3, 0, "span", 45)(10, ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Conditional_10_Template, 2, 0, "span", 46);
|
|
71
72
|
i0.ɵɵelementEnd()();
|
|
72
73
|
} if (rf & 2) {
|
|
73
74
|
const reg_r5 = ctx.$implicit;
|
|
@@ -83,41 +84,41 @@ function ClassRegistryInspectorComponent_For_48_Conditional_10_For_12_Template(r
|
|
|
83
84
|
i0.ɵɵadvance(2);
|
|
84
85
|
i0.ɵɵconditional(ctx_r1.IsWinningRow(group_r4, reg_r5) ? 9 : ctx_r1.IsConflictRow(group_r4, reg_r5) ? 10 : -1);
|
|
85
86
|
} }
|
|
86
|
-
function
|
|
87
|
-
i0.ɵɵelementStart(0, "table",
|
|
87
|
+
function ClassRegistryInspectorComponent_For_36_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵelementStart(0, "table", 33)(1, "thead")(2, "tr")(3, "th", 35);
|
|
88
89
|
i0.ɵɵtext(4, "Key");
|
|
89
90
|
i0.ɵɵelementEnd();
|
|
90
|
-
i0.ɵɵelementStart(5, "th",
|
|
91
|
+
i0.ɵɵelementStart(5, "th", 36);
|
|
91
92
|
i0.ɵɵtext(6, "Subclass");
|
|
92
93
|
i0.ɵɵelementEnd();
|
|
93
|
-
i0.ɵɵelementStart(7, "th",
|
|
94
|
+
i0.ɵɵelementStart(7, "th", 37);
|
|
94
95
|
i0.ɵɵtext(8, "Priority");
|
|
95
96
|
i0.ɵɵelementEnd();
|
|
96
|
-
i0.ɵɵelement(9, "th",
|
|
97
|
+
i0.ɵɵelement(9, "th", 38);
|
|
97
98
|
i0.ɵɵelementEnd()();
|
|
98
99
|
i0.ɵɵelementStart(10, "tbody");
|
|
99
|
-
i0.ɵɵrepeaterCreate(11,
|
|
100
|
+
i0.ɵɵrepeaterCreate(11, ClassRegistryInspectorComponent_For_36_Conditional_10_For_12_Template, 11, 8, "tr", 39, i0.ɵɵcomponentInstance().TrackByReg, true);
|
|
100
101
|
i0.ɵɵelementEnd()();
|
|
101
102
|
} if (rf & 2) {
|
|
102
103
|
const group_r4 = i0.ɵɵnextContext().$implicit;
|
|
103
104
|
i0.ɵɵadvance(11);
|
|
104
105
|
i0.ɵɵrepeater(group_r4.registrations);
|
|
105
106
|
} }
|
|
106
|
-
function
|
|
107
|
+
function ClassRegistryInspectorComponent_For_36_Template(rf, ctx) { if (rf & 1) {
|
|
107
108
|
const _r3 = i0.ɵɵgetCurrentView();
|
|
108
|
-
i0.ɵɵelementStart(0, "div",
|
|
109
|
-
i0.ɵɵlistener("click", function
|
|
110
|
-
i0.ɵɵelement(2, "i",
|
|
111
|
-
i0.ɵɵelementStart(3, "span",
|
|
109
|
+
i0.ɵɵelementStart(0, "div", 25)(1, "button", 26);
|
|
110
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_For_36_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)); });
|
|
111
|
+
i0.ɵɵelement(2, "i", 27);
|
|
112
|
+
i0.ɵɵelementStart(3, "span", 28);
|
|
112
113
|
i0.ɵɵtext(4);
|
|
113
114
|
i0.ɵɵelementEnd();
|
|
114
|
-
i0.ɵɵelementStart(5, "span",
|
|
115
|
+
i0.ɵɵelementStart(5, "span", 29)(6, "span", 30);
|
|
115
116
|
i0.ɵɵtext(7);
|
|
116
117
|
i0.ɵɵelementEnd();
|
|
117
|
-
i0.ɵɵconditionalCreate(8,
|
|
118
|
-
i0.ɵɵconditionalCreate(9,
|
|
118
|
+
i0.ɵɵconditionalCreate(8, ClassRegistryInspectorComponent_For_36_Conditional_8_Template, 2, 1, "span", 31);
|
|
119
|
+
i0.ɵɵconditionalCreate(9, ClassRegistryInspectorComponent_For_36_Conditional_9_Template, 3, 0, "span", 32);
|
|
119
120
|
i0.ɵɵelementEnd()();
|
|
120
|
-
i0.ɵɵconditionalCreate(10,
|
|
121
|
+
i0.ɵɵconditionalCreate(10, ClassRegistryInspectorComponent_For_36_Conditional_10_Template, 13, 0, "table", 33);
|
|
121
122
|
i0.ɵɵelementEnd();
|
|
122
123
|
} if (rf & 2) {
|
|
123
124
|
const group_r4 = ctx.$implicit;
|
|
@@ -135,9 +136,9 @@ function ClassRegistryInspectorComponent_For_48_Template(rf, ctx) { if (rf & 1)
|
|
|
135
136
|
i0.ɵɵadvance();
|
|
136
137
|
i0.ɵɵconditional(group_r4.expanded ? 10 : -1);
|
|
137
138
|
} }
|
|
138
|
-
function
|
|
139
|
-
i0.ɵɵelementStart(0, "div",
|
|
140
|
-
i0.ɵɵelement(1, "i",
|
|
139
|
+
function ClassRegistryInspectorComponent_Conditional_37_Template(rf, ctx) { if (rf & 1) {
|
|
140
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
141
|
+
i0.ɵɵelement(1, "i", 48);
|
|
141
142
|
i0.ɵɵelementStart(2, "span");
|
|
142
143
|
i0.ɵɵtext(3);
|
|
143
144
|
i0.ɵɵelementEnd()();
|
|
@@ -318,75 +319,62 @@ let ClassRegistryInspectorComponent = class ClassRegistryInspectorComponent exte
|
|
|
318
319
|
TrackByBase = (_i, g) => g.baseClassName;
|
|
319
320
|
TrackByReg = (_i, r) => `${r.SubClass?.name ?? ''}|${r.Key ?? ''}|${r.Priority}`;
|
|
320
321
|
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:
|
|
322
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "
|
|
323
|
-
i0.ɵɵ
|
|
322
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ClassRegistryInspectorComponent, selectors: [["mj-class-registry-inspector"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 40, vars: 17, consts: [[1, "mj-inspector", "mj-inspector--solo"], ["Role", "region", "AriaLabel", "Class registry inspector", "Title", "Class Registry", "Subtitle", "Every class registered with @RegisterClass"], ["actions", ""], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Expand all groups", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-expand"], ["mjButton", "", "variant", "secondary", "size", "sm", "title", "Collapse all groups", 3, "click"], ["aria-hidden", "true", 1, "fa-solid", "fa-compress"], [3, "Clicked", "Loading"], ["mjButton", "", "size", "sm", 3, "click", "variant", "title"], ["aria-hidden", "true", 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) {
|
|
323
|
+
i0.ɵɵelementStart(0, "div", 0)(1, "mj-page-header-interior", 1)(2, "div", 2)(3, "button", 3);
|
|
324
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Template_button_click_3_listener() { return ctx.ExpandAll(); });
|
|
325
|
+
i0.ɵɵelement(4, "i", 4);
|
|
326
|
+
i0.ɵɵtext(5, " Expand ");
|
|
324
327
|
i0.ɵɵelementEnd();
|
|
325
|
-
i0.ɵɵelementStart(
|
|
326
|
-
i0.ɵɵ
|
|
328
|
+
i0.ɵɵelementStart(6, "button", 5);
|
|
329
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Template_button_click_6_listener() { return ctx.CollapseAll(); });
|
|
330
|
+
i0.ɵɵelement(7, "i", 6);
|
|
331
|
+
i0.ɵɵtext(8, " Collapse ");
|
|
327
332
|
i0.ɵɵelementEnd();
|
|
328
|
-
i0.ɵɵelementStart(
|
|
329
|
-
i0.ɵɵ
|
|
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 ");
|
|
333
|
+
i0.ɵɵelementStart(9, "mj-refresh-button", 7);
|
|
334
|
+
i0.ɵɵlistener("Clicked", function ClassRegistryInspectorComponent_Template_mj_refresh_button_Clicked_9_listener() { return ctx.refresh(); });
|
|
348
335
|
i0.ɵɵelementEnd();
|
|
349
|
-
i0.ɵɵelementStart(
|
|
350
|
-
i0.ɵɵlistener("click", function
|
|
351
|
-
i0.ɵɵelement(
|
|
352
|
-
i0.ɵɵtext(
|
|
336
|
+
i0.ɵɵelementStart(10, "button", 8);
|
|
337
|
+
i0.ɵɵlistener("click", function ClassRegistryInspectorComponent_Template_button_click_10_listener() { return ctx.OnCopy(); });
|
|
338
|
+
i0.ɵɵelement(11, "i", 9);
|
|
339
|
+
i0.ɵɵtext(12);
|
|
353
340
|
i0.ɵɵelementEnd()()();
|
|
354
|
-
i0.ɵɵelementStart(
|
|
355
|
-
i0.ɵɵtext(
|
|
341
|
+
i0.ɵɵelementStart(13, "div", 10)(14, "div", 11)(15, "div", 12);
|
|
342
|
+
i0.ɵɵtext(16);
|
|
356
343
|
i0.ɵɵelementEnd();
|
|
357
|
-
i0.ɵɵelementStart(
|
|
358
|
-
i0.ɵɵtext(
|
|
344
|
+
i0.ɵɵelementStart(17, "div", 13);
|
|
345
|
+
i0.ɵɵtext(18, "Total registrations");
|
|
359
346
|
i0.ɵɵelementEnd()();
|
|
360
|
-
i0.ɵɵelementStart(
|
|
361
|
-
i0.ɵɵtext(
|
|
347
|
+
i0.ɵɵelementStart(19, "div", 11)(20, "div", 12);
|
|
348
|
+
i0.ɵɵtext(21);
|
|
362
349
|
i0.ɵɵelementEnd();
|
|
363
|
-
i0.ɵɵelementStart(
|
|
364
|
-
i0.ɵɵtext(
|
|
350
|
+
i0.ɵɵelementStart(22, "div", 13);
|
|
351
|
+
i0.ɵɵtext(23, "Base classes");
|
|
365
352
|
i0.ɵɵelementEnd()();
|
|
366
|
-
i0.ɵɵelementStart(
|
|
367
|
-
i0.ɵɵtext(
|
|
353
|
+
i0.ɵɵelementStart(24, "div", 11)(25, "div", 12);
|
|
354
|
+
i0.ɵɵtext(26);
|
|
368
355
|
i0.ɵɵelementEnd();
|
|
369
|
-
i0.ɵɵelementStart(
|
|
370
|
-
i0.ɵɵtext(
|
|
356
|
+
i0.ɵɵelementStart(27, "div", 13);
|
|
357
|
+
i0.ɵɵtext(28, "With overrides");
|
|
371
358
|
i0.ɵɵelementEnd()();
|
|
372
|
-
i0.ɵɵelementStart(
|
|
373
|
-
i0.ɵɵelement(
|
|
374
|
-
i0.ɵɵelementStart(
|
|
375
|
-
i0.ɵɵlistener("input", function
|
|
359
|
+
i0.ɵɵelementStart(29, "div", 14)(30, "div", 15);
|
|
360
|
+
i0.ɵɵelement(31, "i", 16);
|
|
361
|
+
i0.ɵɵelementStart(32, "input", 17);
|
|
362
|
+
i0.ɵɵlistener("input", function ClassRegistryInspectorComponent_Template_input_input_32_listener($event) { return ctx.OnSearchChange($event.target.value); });
|
|
376
363
|
i0.ɵɵelementEnd();
|
|
377
|
-
i0.ɵɵconditionalCreate(
|
|
364
|
+
i0.ɵɵconditionalCreate(33, ClassRegistryInspectorComponent_Conditional_33_Template, 2, 0, "button", 18);
|
|
378
365
|
i0.ɵɵelementEnd()()();
|
|
379
|
-
i0.ɵɵelementStart(
|
|
380
|
-
i0.ɵɵrepeaterCreate(
|
|
381
|
-
i0.ɵɵconditionalCreate(
|
|
366
|
+
i0.ɵɵelementStart(34, "div", 19);
|
|
367
|
+
i0.ɵɵrepeaterCreate(35, ClassRegistryInspectorComponent_For_36_Template, 11, 9, "div", 20, ctx.TrackByBase, true);
|
|
368
|
+
i0.ɵɵconditionalCreate(37, ClassRegistryInspectorComponent_Conditional_37_Template, 4, 1, "div", 21);
|
|
382
369
|
i0.ɵɵelementEnd();
|
|
383
|
-
i0.ɵɵelementStart(
|
|
384
|
-
i0.ɵɵtext(
|
|
370
|
+
i0.ɵɵelementStart(38, "div", 22);
|
|
371
|
+
i0.ɵɵtext(39);
|
|
385
372
|
i0.ɵɵelementEnd()();
|
|
386
373
|
} if (rf & 2) {
|
|
387
|
-
i0.ɵɵadvance(
|
|
388
|
-
i0.ɵɵ
|
|
389
|
-
i0.ɵɵ
|
|
374
|
+
i0.ɵɵadvance(9);
|
|
375
|
+
i0.ɵɵproperty("Loading", false);
|
|
376
|
+
i0.ɵɵadvance();
|
|
377
|
+
i0.ɵɵproperty("variant", ctx.CopyConfirmed ? "success" : "secondary")("title", ctx.CopyConfirmed ? "Copied" : "Copy as JSON");
|
|
390
378
|
i0.ɵɵadvance();
|
|
391
379
|
i0.ɵɵclassProp("fa-clipboard", !ctx.CopyConfirmed)("fa-check", ctx.CopyConfirmed);
|
|
392
380
|
i0.ɵɵadvance();
|
|
@@ -402,14 +390,14 @@ let ClassRegistryInspectorComponent = class ClassRegistryInspectorComponent exte
|
|
|
402
390
|
i0.ɵɵadvance(6);
|
|
403
391
|
i0.ɵɵproperty("value", ctx.SearchQuery);
|
|
404
392
|
i0.ɵɵadvance();
|
|
405
|
-
i0.ɵɵconditional(ctx.SearchQuery ?
|
|
393
|
+
i0.ɵɵconditional(ctx.SearchQuery ? 33 : -1);
|
|
406
394
|
i0.ɵɵadvance(2);
|
|
407
395
|
i0.ɵɵrepeater(ctx.FilteredGroups);
|
|
408
396
|
i0.ɵɵadvance(2);
|
|
409
|
-
i0.ɵɵconditional(ctx.FilteredGroups.length === 0 ?
|
|
397
|
+
i0.ɵɵconditional(ctx.FilteredGroups.length === 0 ? 37 : -1);
|
|
410
398
|
i0.ɵɵadvance(2);
|
|
411
399
|
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}"] });
|
|
400
|
+
} }, dependencies: [i1.MJButtonDirective, i1.MJPageHeaderInteriorComponent, i1.MJRefreshButtonComponent], styles: ["[_nghost-%COMP%] { display: block; height: 100%; }\n\n\n\n\n\n\n\n\n\n\n\n\n\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__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\n.mj-inspector--solo[_ngcontent-%COMP%] {\n background: var(--mj-bg-page);\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
401
|
};
|
|
414
402
|
ClassRegistryInspectorComponent = __decorate([
|
|
415
403
|
RegisterClass(BaseResourceComponent, 'ClassRegistryInspector')
|
|
@@ -417,7 +405,7 @@ ClassRegistryInspectorComponent = __decorate([
|
|
|
417
405
|
export { ClassRegistryInspectorComponent };
|
|
418
406
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClassRegistryInspectorComponent, [{
|
|
419
407
|
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"] }]
|
|
408
|
+
args: [{ standalone: false, selector: 'mj-class-registry-inspector', template: "<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Class registry inspector\"\n Title=\"Class Registry\"\n Subtitle=\"Every class registered with @RegisterClass\">\n <div actions>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"ExpandAll()\" title=\"Expand all groups\">\n <i class=\"fa-solid fa-expand\" aria-hidden=\"true\"></i> Expand\n </button>\n <button mjButton variant=\"secondary\" size=\"sm\" (click)=\"CollapseAll()\" title=\"Collapse all groups\">\n <i class=\"fa-solid fa-compress\" aria-hidden=\"true\"></i> Collapse\n </button>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n <button mjButton\n [variant]=\"CopyConfirmed ? 'success' : 'secondary'\"\n size=\"sm\"\n (click)=\"OnCopy()\"\n [title]=\"CopyConfirmed ? 'Copied' : 'Copy as JSON'\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\" aria-hidden=\"true\"></i>\n {{ CopyConfirmed ? 'Copied' : 'Copy' }}\n </button>\n </div>\n </mj-page-header-interior>\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/*\n Inspector shell \u2014 each Dev Tools sub-page wraps its body in .mj-inspector. The\n chrome (title icon, title, subtitle, action buttons) was previously rendered\n via .mj-inspector__header*, but that's been replaced by <mj-page-header-interior>\n in every inspector template. Action buttons now use the mjButton directive\n (variant=\"secondary\" / \"success\") so they inherit global button styling. App\n State + Layout inspectors used to carry an inner left rail (.mj-inspector__body\n + __sidebar + __nav-item) for L2 sections; that rail was retired 2026-05-19 in\n favor of <mj-tab-nav> projected into the chrome's [toolbar] slot, matching\n SystemDiagnostics and the API Keys tab strip. All inspectors are now \"solo\"\n mode (no sidebar).\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/* 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", "/* Class Registry Browser \u2014 overlays + extends inspector-shared.css */\n\n.mj-inspector--solo {\n background: var(--mj-bg-page);\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
409
|
}], () => [{ type: i0.ChangeDetectorRef }], null); })();
|
|
422
410
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ClassRegistryInspectorComponent, { className: "ClassRegistryInspectorComponent", filePath: "src/DevTools/class-registry.component.ts", lineNumber: 37 }); })();
|
|
423
411
|
//# sourceMappingURL=class-registry.component.js.map
|