@memberjunction/ng-explorer-core 6.1.0-edge.4 → 6.1.0-edge.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +19 -0
  2. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  3. package/dist/generated/lazy-feature-config.js +12 -6
  4. package/dist/generated/lazy-feature-config.js.map +1 -1
  5. package/dist/lib/about/about-dialog.component.js +4 -4
  6. package/dist/lib/about/about-dialog.component.js.map +1 -1
  7. package/dist/lib/command-palette/command-palette.component.d.ts +13 -0
  8. package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
  9. package/dist/lib/command-palette/command-palette.component.js +106 -42
  10. package/dist/lib/command-palette/command-palette.component.js.map +1 -1
  11. package/dist/lib/conversation-feedback/conversation-feedback.js +1 -1
  12. package/dist/lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component.js +1 -1
  13. package/dist/lib/oauth/oauth-callback.component.js +1 -1
  14. package/dist/lib/omnibar/omnibar-palette.component.d.ts.map +1 -1
  15. package/dist/lib/omnibar/omnibar-palette.component.js +9 -3
  16. package/dist/lib/omnibar/omnibar-palette.component.js.map +1 -1
  17. package/dist/lib/omnibar/providers/omnibar-record.provider.d.ts.map +1 -1
  18. package/dist/lib/omnibar/providers/omnibar-record.provider.js +9 -3
  19. package/dist/lib/omnibar/providers/omnibar-record.provider.js.map +1 -1
  20. package/dist/lib/profile/profile-dialog.component.js +1 -1
  21. package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
  22. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +13 -12
  23. package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
  24. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts +24 -0
  25. package/dist/lib/resource-wrappers/chat-deeplink-params.d.ts.map +1 -0
  26. package/dist/lib/resource-wrappers/chat-deeplink-params.js +27 -0
  27. package/dist/lib/resource-wrappers/chat-deeplink-params.js.map +1 -0
  28. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +7 -0
  29. package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
  30. package/dist/lib/resource-wrappers/dashboard-resource.component.js +29 -14
  31. package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
  32. package/dist/lib/resource-wrappers/list-detail-resource.component.js +1 -1
  33. package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
  34. package/dist/lib/resource-wrappers/query-resource.component.js +1 -1
  35. package/dist/lib/resource-wrappers/query-resource.component.js.map +1 -1
  36. package/dist/lib/resource-wrappers/record-resource.component.d.ts +3 -0
  37. package/dist/lib/resource-wrappers/record-resource.component.d.ts.map +1 -1
  38. package/dist/lib/resource-wrappers/record-resource.component.js +18 -4
  39. package/dist/lib/resource-wrappers/record-resource.component.js.map +1 -1
  40. package/dist/lib/resource-wrappers/search-results-resource.component.d.ts.map +1 -1
  41. package/dist/lib/resource-wrappers/search-results-resource.component.js +6 -2
  42. package/dist/lib/resource-wrappers/search-results-resource.component.js.map +1 -1
  43. package/dist/lib/resource-wrappers/view-resource.component.d.ts.map +1 -1
  44. package/dist/lib/resource-wrappers/view-resource.component.js +6 -3
  45. package/dist/lib/resource-wrappers/view-resource.component.js.map +1 -1
  46. package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts +20 -8
  47. package/dist/lib/server-connectivity/server-connectivity-banner.component.d.ts.map +1 -1
  48. package/dist/lib/server-connectivity/server-connectivity-banner.component.js +25 -20
  49. package/dist/lib/server-connectivity/server-connectivity-banner.component.js.map +1 -1
  50. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js +2 -2
  51. package/dist/lib/shell/components/dialogs/app-access-dialog.component.js.map +1 -1
  52. package/dist/lib/shell/components/header/app-nav.component.js +1 -1
  53. package/dist/lib/shell/components/header/app-switcher.component.js +82 -83
  54. package/dist/lib/shell/components/header/app-switcher.component.js.map +1 -1
  55. package/dist/lib/shell/components/record-open/record-bar.component.js +1 -1
  56. package/dist/lib/shell/components/record-open/record-origin-crumb.component.js +1 -1
  57. package/dist/lib/shell/components/record-open/record-switcher-sheet.component.js +1 -1
  58. package/dist/lib/shell/components/record-open/records-hub-pill.component.js +1 -1
  59. package/dist/lib/shell/components/tabs/tab-container.component.d.ts +25 -0
  60. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  61. package/dist/lib/shell/components/tabs/tab-container.component.js +88 -4
  62. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  63. package/dist/lib/shell/services/sharing-center-dialog-host.component.js +2 -2
  64. package/dist/lib/shell/services/sharing-center-dialog-host.component.js.map +1 -1
  65. package/dist/lib/shell/shell-chrome-policy.d.ts +54 -0
  66. package/dist/lib/shell/shell-chrome-policy.d.ts.map +1 -0
  67. package/dist/lib/shell/shell-chrome-policy.js +62 -0
  68. package/dist/lib/shell/shell-chrome-policy.js.map +1 -0
  69. package/dist/lib/shell/shell.component.d.ts +42 -0
  70. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  71. package/dist/lib/shell/shell.component.js +394 -255
  72. package/dist/lib/shell/shell.component.js.map +1 -1
  73. package/dist/lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component.js +1 -1
  74. package/dist/lib/single-dashboard/single-dashboard.component.js +1 -1
  75. package/dist/lib/single-list-detail/single-list-detail.component.d.ts +9 -0
  76. package/dist/lib/single-list-detail/single-list-detail.component.d.ts.map +1 -1
  77. package/dist/lib/single-list-detail/single-list-detail.component.js +34 -15
  78. package/dist/lib/single-list-detail/single-list-detail.component.js.map +1 -1
  79. package/dist/lib/single-record/single-record.component.d.ts +10 -0
  80. package/dist/lib/single-record/single-record.component.d.ts.map +1 -1
  81. package/dist/lib/single-record/single-record.component.js +23 -3
  82. package/dist/lib/single-record/single-record.component.js.map +1 -1
  83. package/dist/lib/single-search-result/single-search-result.component.d.ts.map +1 -1
  84. package/dist/lib/single-search-result/single-search-result.component.js +5 -2
  85. package/dist/lib/single-search-result/single-search-result.component.js.map +1 -1
  86. package/dist/lib/user-notifications/user-notifications.component.js +11 -12
  87. package/dist/lib/user-notifications/user-notifications.component.js.map +1 -1
  88. package/dist/lib/user-profile/user-profile.component.js +1 -1
  89. package/dist/public-api.d.ts +1 -0
  90. package/dist/public-api.d.ts.map +1 -1
  91. package/dist/public-api.js +1 -0
  92. package/dist/public-api.js.map +1 -1
  93. package/package.json +62 -62
package/README.md CHANGED
@@ -147,6 +147,24 @@ export class CustomUserMenu extends BaseUserMenu {
147
147
  }
148
148
  ```
149
149
 
150
+ ### Shell Chrome Policy
151
+
152
+ Instance Config decides the platform-wide chrome (`Shell.SearchBar.Enabled`, `Shell.Notifications.Enabled`, `Shell.AppSwitcher.*`, `Shell.AppNav.Enabled`) and is the ceiling. A host that needs a narrower answer for some users — a white-label product hiding the search bar for organizations whose plan does not include browsing the knowledge base, say — registers a `BaseShellChromePolicy` subclass. The shell consults it every time it resolves its flags and re-resolves when the policy fires `Changed`.
153
+
154
+ ```typescript
155
+ import { BaseShellChromePolicy, ShellChromeFlags } from '@memberjunction/ng-explorer-core';
156
+
157
+ @RegisterClass(BaseShellChromePolicy)
158
+ export class PlanChromePolicy extends BaseShellChromePolicy {
159
+ public override Resolve(flags: ShellChromeFlags): ShellChromeFlags {
160
+ return { ...flags, searchBar: flags.searchBar && this.currentOrgHasKnowledgePlus() };
161
+ }
162
+ // call this.Changed.next() when the organization or plan switches
163
+ }
164
+ ```
165
+
166
+ Booleans can only be narrowed (a `true` from the policy never re-enables what Instance Config turned off); `recordOpenStyle` is resolved at startup and is not the policy's to change; `appSwitcherStyle` may be replaced.
167
+
150
168
  ### Command Palette
151
169
 
152
170
  The command palette is available globally via Ctrl+K (Cmd+K on Mac). Custom commands can be registered via `CommandPaletteService`.
@@ -169,6 +187,7 @@ Key exports include:
169
187
  | `StartupValidationService` | Service | Startup validation checks |
170
188
  | `SystemValidationBannerComponent` | Component | Validation issue banner |
171
189
  | `BaseUserMenu` | Class | Extensible user menu base class |
190
+ | `BaseShellChromePolicy` | Class | Host hook narrowing the shell chrome per user/tenant (`ShellChromeFlags`, `ApplyShellChromePolicy`) |
172
191
  | `UserMenuItem`, `UserMenuContext` | Interfaces | User menu type definitions |
173
192
  | `DashboardPreferencesDialogComponent` | Component | Dashboard preferences editor |
174
193
  | `SingleRecordComponent` | Component | Single record viewer/editor |
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-feature-config.d.ts","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAoHH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA6J9F,CAAC;AAEF,eAAO,MAAM,yBAAyB,MAAM,CAAC"}
1
+ {"version":3,"file":"lazy-feature-config.d.ts","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0HH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE,CA+J9F,CAAC;AAEF,eAAO,MAAM,yBAAyB,MAAM,CAAC"}
@@ -26,6 +26,11 @@ const loadNgDashboardsAiDashboardsModule = {
26
26
  chunkId: '@memberjunction/ng-dashboards/ai-dashboards.module',
27
27
  load: () => import('@memberjunction/ng-dashboards/ai-dashboards.module').then(() => { })
28
28
  };
29
+ // --- @memberjunction/ng-dashboards → ./archiving-dashboards.module (2 entries) ---
30
+ const loadNgDashboardsArchivingDashboardsModule = {
31
+ chunkId: '@memberjunction/ng-dashboards/archiving-dashboards.module',
32
+ load: () => import('@memberjunction/ng-dashboards/archiving-dashboards.module').then(() => { })
33
+ };
29
34
  // --- @memberjunction/ng-dashboards → ./communication-dashboards.module (7 entries) ---
30
35
  const loadNgDashboardsCommunicationDashboardsModule = {
31
36
  chunkId: '@memberjunction/ng-dashboards/communication-dashboards.module',
@@ -66,7 +71,7 @@ const loadNgDashboardsMcpModule = {
66
71
  chunkId: '@memberjunction/ng-dashboards/mcp.module',
67
72
  load: () => import('@memberjunction/ng-dashboards/mcp.module').then(() => { })
68
73
  };
69
- // --- @memberjunction/ng-dashboards → ./module (3 entries) ---
74
+ // --- @memberjunction/ng-dashboards → ./module (1 entries) ---
70
75
  const loadNgDashboardsModule = {
71
76
  chunkId: '@memberjunction/ng-dashboards/module',
72
77
  load: () => import('@memberjunction/ng-dashboards/module').then(() => { })
@@ -141,14 +146,17 @@ export const LAZY_FEATURE_CONFIG = {
141
146
  'BaseResourceComponent::Tags': loadNgDashboardsAiDashboardsModule,
142
147
  'BaseResourceComponent::VectorManagementResource': loadNgDashboardsAiDashboardsModule,
143
148
  'BaseResourceComponent::VisualizationResource': loadNgDashboardsAiDashboardsModule,
149
+ // @memberjunction/ng-dashboards → ./archiving-dashboards.module
150
+ 'BaseResourceComponent::ArchiveConfigResource': loadNgDashboardsArchivingDashboardsModule,
151
+ 'BaseResourceComponent::ArchiveRunsResource': loadNgDashboardsArchivingDashboardsModule,
144
152
  // @memberjunction/ng-dashboards → ./communication-dashboards.module
145
153
  'BaseDashboard::CommunicationDashboard': loadNgDashboardsCommunicationDashboardsModule,
146
154
  'BaseResourceComponent::CommunicationLogsResource': loadNgDashboardsCommunicationDashboardsModule,
147
155
  'BaseResourceComponent::CommunicationMonitorResource': loadNgDashboardsCommunicationDashboardsModule,
148
156
  'BaseResourceComponent::CommunicationProvidersResource': loadNgDashboardsCommunicationDashboardsModule,
149
157
  'BaseResourceComponent::CommunicationRunsResource': loadNgDashboardsCommunicationDashboardsModule,
150
- 'BaseResourceComponent::CommunicationsNewMessageResource': loadNgDashboardsCommunicationDashboardsModule,
151
158
  'BaseResourceComponent::CommunicationTemplatesResource': loadNgDashboardsCommunicationDashboardsModule,
159
+ 'BaseResourceComponent::CommunicationsNewMessageResource': loadNgDashboardsCommunicationDashboardsModule,
152
160
  // @memberjunction/ng-dashboards → ./component-studio-dashboards.module
153
161
  'BaseDashboard::ComponentStudioDashboard': loadNgDashboardsComponentStudioDashboardsModule,
154
162
  'BaseResourceComponent::ComponentStudioResource': loadNgDashboardsComponentStudioDashboardsModule,
@@ -158,13 +166,13 @@ export const LAZY_FEATURE_CONFIG = {
158
166
  'BaseDashboard::EntityAdmin': loadNgDashboardsCoreDashboardsModule,
159
167
  'BaseDashboard::ThemeManagerDashboard': loadNgDashboardsCoreDashboardsModule,
160
168
  'BaseDashboard::ThemeStudioDashboard': loadNgDashboardsCoreDashboardsModule,
169
+ 'BaseResourceComponent::APIKeysResource': loadNgDashboardsCoreDashboardsModule,
161
170
  'BaseResourceComponent::AdminDataSchema': loadNgDashboardsCoreDashboardsModule,
162
171
  'BaseResourceComponent::AdminDeveloperTools': loadNgDashboardsCoreDashboardsModule,
163
172
  'BaseResourceComponent::AdminIdentityAccess': loadNgDashboardsCoreDashboardsModule,
164
173
  'BaseResourceComponent::AdminMonitoring': loadNgDashboardsCoreDashboardsModule,
165
- 'BaseResourceComponent::APIKeysResource': loadNgDashboardsCoreDashboardsModule,
166
- 'BaseResourceComponent::ApplicationRolesResource': loadNgDashboardsCoreDashboardsModule,
167
174
  'BaseResourceComponent::AppStateInspector': loadNgDashboardsCoreDashboardsModule,
175
+ 'BaseResourceComponent::ApplicationRolesResource': loadNgDashboardsCoreDashboardsModule,
168
176
  'BaseResourceComponent::BulkOperationsContainer': loadNgDashboardsCoreDashboardsModule,
169
177
  'BaseResourceComponent::BulkOperationsOperations': loadNgDashboardsCoreDashboardsModule,
170
178
  'BaseResourceComponent::BulkOperationsRunHistory': loadNgDashboardsCoreDashboardsModule,
@@ -217,8 +225,6 @@ export const LAZY_FEATURE_CONFIG = {
217
225
  'BaseDashboard::MCPDashboard': loadNgDashboardsMcpModule,
218
226
  'BaseResourceComponent::MCPResource': loadNgDashboardsMcpModule,
219
227
  // @memberjunction/ng-dashboards → ./module
220
- 'BaseResourceComponent::ArchiveConfigResource': loadNgDashboardsModule,
221
- 'BaseResourceComponent::ArchiveRunsResource': loadNgDashboardsModule,
222
228
  'BaseResourceComponent::DatabaseDesignerDashboard': loadNgDashboardsModule,
223
229
  // @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module
224
230
  'BaseResourceComponent::PredictiveStudioModelsResource': loadNgDashboardsPredictiveStudioDashboardsModule,
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-feature-config.js","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AUTO-GENERATED FILE — DO NOT EDIT\n * Generated by: mj codegen manifest --lazy-config\n * Regenerate with: npm run mj:manifest:explorer\n *\n * Maps @RegisterClass entries to their lazy-loading chunks using compound keys.\n * Compound key format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\").\n *\n * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a\n * registration synchronously, the registered lazy loader builds the compound key and\n * looks it up here to dynamically import the chunk containing the class.\n *\n * Every entry carries an explicit `chunkId` — the dynamic import specifier — because many\n * compound keys share one chunk and the registry must be able to tell those chunks apart.\n * Do NOT collapse these into a shared helper that returns a closure: closures built by the\n * same helper are indistinguishable by identity-adjacent means (e.g. Function.toString()),\n * which silently merges all chunks into one.\n */\n\n// --- @memberjunction/ng-dashboards → ./actions-dashboards.module (6 entries) ---\nconst loadNgDashboardsActionsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/actions-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/actions-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./ai-dashboards.module (17 entries) ---\nconst loadNgDashboardsAiDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/ai-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/ai-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./communication-dashboards.module (7 entries) ---\nconst loadNgDashboardsCommunicationDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/communication-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/communication-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./component-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsComponentStudioDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/component-studio-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/component-studio-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./core-dashboards.module (36 entries) ---\nconst loadNgDashboardsCoreDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/core-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/core-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./credentials-dashboards.module (6 entries) ---\nconst loadNgDashboardsCredentialsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/credentials-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/credentials-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./data-explorer-dashboards.module (2 entries) ---\nconst loadNgDashboardsDataExplorerDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/data-explorer-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./integration.module (6 entries) ---\nconst loadNgDashboardsIntegrationModule = {\n chunkId: '@memberjunction/ng-dashboards/integration.module',\n load: () => import('@memberjunction/ng-dashboards/integration.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./lists-dashboards.module (5 entries) ---\nconst loadNgDashboardsListsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/lists-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/lists-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./mcp.module (2 entries) ---\nconst loadNgDashboardsMcpModule = {\n chunkId: '@memberjunction/ng-dashboards/mcp.module',\n load: () => import('@memberjunction/ng-dashboards/mcp.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./module (3 entries) ---\nconst loadNgDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/module',\n load: () => import('@memberjunction/ng-dashboards/module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsPredictiveStudioDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/predictive-studio-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/predictive-studio-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./routines-dashboards.module (1 entries) ---\nconst loadNgDashboardsRoutinesDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/routines-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/routines-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./scheduling-dashboards.module (4 entries) ---\nconst loadNgDashboardsSchedulingDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/scheduling-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/scheduling-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./testing-dashboards.module (6 entries) ---\nconst loadNgDashboardsTestingDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/testing-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/testing-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./workflows-dashboards.module (3 entries) ---\nconst loadNgDashboardsWorkflowsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/workflows-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/workflows-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-explorer-settings → ./settings.module (6 entries) ---\nconst loadNgExplorerSettingsSettingsModule = {\n chunkId: '@memberjunction/ng-explorer-settings/settings.module',\n load: () => import('@memberjunction/ng-explorer-settings/settings.module').then(() => {})\n};\n\n// --- @memberjunction/ng-file-storage → ./file-storage.module (1 entries) ---\nconst loadNgFileStorageFileStorageModule = {\n chunkId: '@memberjunction/ng-file-storage/file-storage.module',\n load: () => import('@memberjunction/ng-file-storage/file-storage.module').then(() => {})\n};\n\n// --- @memberjunction/ng-react → . (1 entries) ---\nconst loadNgReact = {\n chunkId: '@memberjunction/ng-react',\n load: () => import('@memberjunction/ng-react').then(() => {})\n};\n\n/**\n * Complete mapping of compound keys (BaseClassName::Key) to their chunk descriptor.\n * Covers all @RegisterClass decorated classes in lazy-loaded packages.\n */\nexport const LAZY_FEATURE_CONFIG: Record<string, { chunkId: string; load: () => Promise<void> }> = {\n // @memberjunction/ng-dashboards → ./actions-dashboards.module\n 'BaseResourceComponent::ActionExplorerResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsCodeResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsEntitiesResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsMonitorResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsOverviewResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsSecurityResource': loadNgDashboardsActionsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./ai-dashboards.module\n 'BaseResourceComponent::AIAgentRequestsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAgentsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIModelsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIMonitorResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIPromptsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AutotaggingPipelineResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::ClusterVisualizationResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::DuplicateDetectionResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::FeaturePipelinesResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::SchedulingResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::Tags': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VectorManagementResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VisualizationResource': loadNgDashboardsAiDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./communication-dashboards.module\n 'BaseDashboard::CommunicationDashboard': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationLogsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationMonitorResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationProvidersResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationRunsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationsNewMessageResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationTemplatesResource': loadNgDashboardsCommunicationDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./component-studio-dashboards.module\n 'BaseDashboard::ComponentStudioDashboard': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::ComponentStudioResource': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::FormBuilderResource': loadNgDashboardsComponentStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./core-dashboards.module\n 'BaseApplication::HomeApplication': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::EntityAdmin': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeManagerDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeStudioDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDataSchema': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDeveloperTools': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminIdentityAccess': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminMonitoring': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::APIKeysResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ApplicationRolesResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AppStateInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsContainer': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsOperations': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsRunHistory': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ClassRegistryInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::DashboardBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::EventMonitorInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::GraphQLConsoleInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::GridWidthLabInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::HomeDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LayoutInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LazyModuleStatusInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsAuditLogResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsResourceAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsUserAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::QueryBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::RealtimeRecordingsDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SettingsExplorerInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SystemDiagnosticsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::TabStripLabInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeManagerResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeStudioResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryDiffResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryGraphResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryLabelsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryRestoreResource': loadNgDashboardsCoreDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./credentials-dashboards.module\n 'BaseDashboard::CredentialsDashboard': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsAuditResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsCategoriesResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsListResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsOverviewResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsTypesResource': loadNgDashboardsCredentialsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./data-explorer-dashboards.module\n 'BaseDashboard::DataExplorer': loadNgDashboardsDataExplorerDashboardsModule,\n 'BaseResourceComponent::DataExplorerResource': loadNgDashboardsDataExplorerDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./integration.module\n 'BaseResourceComponent::IntegrationActivity': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationConnections': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationMappingWorkspace': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationOverview': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationPipelines': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationSchedules': loadNgDashboardsIntegrationModule,\n\n // @memberjunction/ng-dashboards → ./lists-dashboards.module\n 'BaseResourceComponent::ListsBrowseResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsCategoriesResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsMyListsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsOperationsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsSharedWithMeResource': loadNgDashboardsListsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./mcp.module\n 'BaseDashboard::MCPDashboard': loadNgDashboardsMcpModule,\n 'BaseResourceComponent::MCPResource': loadNgDashboardsMcpModule,\n\n // @memberjunction/ng-dashboards → ./module\n 'BaseResourceComponent::ArchiveConfigResource': loadNgDashboardsModule,\n 'BaseResourceComponent::ArchiveRunsResource': loadNgDashboardsModule,\n 'BaseResourceComponent::DatabaseDesignerDashboard': loadNgDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module\n 'BaseResourceComponent::PredictiveStudioModelsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioPredictionsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioStudioResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./routines-dashboards.module\n 'BaseResourceComponent::UserRoutines': loadNgDashboardsRoutinesDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./scheduling-dashboards.module\n 'BaseDashboard::SchedulingDashboard': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingActivityResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingDashboardResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingJobsResource': loadNgDashboardsSchedulingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./testing-dashboards.module\n 'BaseDashboard::TestingDashboard': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingAnalyticsResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingDashboardTabResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingExplorerResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingReviewResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingRunsResource': loadNgDashboardsTestingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./workflows-dashboards.module\n 'BaseDashboard::WorkflowsDashboard': loadNgDashboardsWorkflowsDashboardsModule,\n 'BaseResourceComponent::WorkflowRunsResource': loadNgDashboardsWorkflowsDashboardsModule,\n 'BaseResourceComponent::WorkflowsResource': loadNgDashboardsWorkflowsDashboardsModule,\n\n // @memberjunction/ng-explorer-settings → ./settings.module\n 'BaseDashboard::ApplicationManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::EntityPermissions': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::RoleManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::SqlLogging': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::UserManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseNavigationComponent::Settings': loadNgExplorerSettingsSettingsModule,\n\n // @memberjunction/ng-file-storage → ./file-storage.module\n 'BaseResourceComponent::FileBrowserResource': loadNgFileStorageFileStorageModule,\n\n // @memberjunction/ng-react → .\n 'RuntimeUtilities::RuntimeUtilities': loadNgReact,\n\n};\n\nexport const LAZY_FEATURE_CONFIG_COUNT = 118;\n"]}
1
+ {"version":3,"file":"lazy-feature-config.js","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AUTO-GENERATED FILE — DO NOT EDIT\n * Generated by: mj codegen manifest --lazy-config\n * Regenerate with: npm run mj:manifest:explorer\n *\n * Maps @RegisterClass entries to their lazy-loading chunks using compound keys.\n * Compound key format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\").\n *\n * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a\n * registration synchronously, the registered lazy loader builds the compound key and\n * looks it up here to dynamically import the chunk containing the class.\n *\n * Every entry carries an explicit `chunkId` — the dynamic import specifier — because many\n * compound keys share one chunk and the registry must be able to tell those chunks apart.\n * Do NOT collapse these into a shared helper that returns a closure: closures built by the\n * same helper are indistinguishable by identity-adjacent means (e.g. Function.toString()),\n * which silently merges all chunks into one.\n */\n\n// --- @memberjunction/ng-dashboards → ./actions-dashboards.module (6 entries) ---\nconst loadNgDashboardsActionsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/actions-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/actions-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./ai-dashboards.module (17 entries) ---\nconst loadNgDashboardsAiDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/ai-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/ai-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./archiving-dashboards.module (2 entries) ---\nconst loadNgDashboardsArchivingDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/archiving-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/archiving-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./communication-dashboards.module (7 entries) ---\nconst loadNgDashboardsCommunicationDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/communication-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/communication-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./component-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsComponentStudioDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/component-studio-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/component-studio-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./core-dashboards.module (36 entries) ---\nconst loadNgDashboardsCoreDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/core-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/core-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./credentials-dashboards.module (6 entries) ---\nconst loadNgDashboardsCredentialsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/credentials-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/credentials-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./data-explorer-dashboards.module (2 entries) ---\nconst loadNgDashboardsDataExplorerDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/data-explorer-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./integration.module (6 entries) ---\nconst loadNgDashboardsIntegrationModule = {\n chunkId: '@memberjunction/ng-dashboards/integration.module',\n load: () => import('@memberjunction/ng-dashboards/integration.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./lists-dashboards.module (5 entries) ---\nconst loadNgDashboardsListsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/lists-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/lists-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./mcp.module (2 entries) ---\nconst loadNgDashboardsMcpModule = {\n chunkId: '@memberjunction/ng-dashboards/mcp.module',\n load: () => import('@memberjunction/ng-dashboards/mcp.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./module (1 entries) ---\nconst loadNgDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/module',\n load: () => import('@memberjunction/ng-dashboards/module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module (3 entries) ---\nconst loadNgDashboardsPredictiveStudioDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/predictive-studio-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/predictive-studio-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./routines-dashboards.module (1 entries) ---\nconst loadNgDashboardsRoutinesDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/routines-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/routines-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./scheduling-dashboards.module (4 entries) ---\nconst loadNgDashboardsSchedulingDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/scheduling-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/scheduling-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./testing-dashboards.module (6 entries) ---\nconst loadNgDashboardsTestingDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/testing-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/testing-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-dashboards → ./workflows-dashboards.module (3 entries) ---\nconst loadNgDashboardsWorkflowsDashboardsModule = {\n chunkId: '@memberjunction/ng-dashboards/workflows-dashboards.module',\n load: () => import('@memberjunction/ng-dashboards/workflows-dashboards.module').then(() => {})\n};\n\n// --- @memberjunction/ng-explorer-settings → ./settings.module (6 entries) ---\nconst loadNgExplorerSettingsSettingsModule = {\n chunkId: '@memberjunction/ng-explorer-settings/settings.module',\n load: () => import('@memberjunction/ng-explorer-settings/settings.module').then(() => {})\n};\n\n// --- @memberjunction/ng-file-storage → ./file-storage.module (1 entries) ---\nconst loadNgFileStorageFileStorageModule = {\n chunkId: '@memberjunction/ng-file-storage/file-storage.module',\n load: () => import('@memberjunction/ng-file-storage/file-storage.module').then(() => {})\n};\n\n// --- @memberjunction/ng-react → . (1 entries) ---\nconst loadNgReact = {\n chunkId: '@memberjunction/ng-react',\n load: () => import('@memberjunction/ng-react').then(() => {})\n};\n\n/**\n * Complete mapping of compound keys (BaseClassName::Key) to their chunk descriptor.\n * Covers all @RegisterClass decorated classes in lazy-loaded packages.\n */\nexport const LAZY_FEATURE_CONFIG: Record<string, { chunkId: string; load: () => Promise<void> }> = {\n // @memberjunction/ng-dashboards → ./actions-dashboards.module\n 'BaseResourceComponent::ActionExplorerResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsCodeResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsEntitiesResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsMonitorResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsOverviewResource': loadNgDashboardsActionsDashboardsModule,\n 'BaseResourceComponent::ActionsSecurityResource': loadNgDashboardsActionsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./ai-dashboards.module\n 'BaseResourceComponent::AIAgentRequestsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAgentsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIAnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIModelsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIMonitorResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AIPromptsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AnalyticsResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::AutotaggingPipelineResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::ClusterVisualizationResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::DuplicateDetectionResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::FeaturePipelinesResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeConfigResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::SchedulingResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::Tags': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VectorManagementResource': loadNgDashboardsAiDashboardsModule,\n 'BaseResourceComponent::VisualizationResource': loadNgDashboardsAiDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./archiving-dashboards.module\n 'BaseResourceComponent::ArchiveConfigResource': loadNgDashboardsArchivingDashboardsModule,\n 'BaseResourceComponent::ArchiveRunsResource': loadNgDashboardsArchivingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./communication-dashboards.module\n 'BaseDashboard::CommunicationDashboard': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationLogsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationMonitorResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationProvidersResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationRunsResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationTemplatesResource': loadNgDashboardsCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationsNewMessageResource': loadNgDashboardsCommunicationDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./component-studio-dashboards.module\n 'BaseDashboard::ComponentStudioDashboard': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::ComponentStudioResource': loadNgDashboardsComponentStudioDashboardsModule,\n 'BaseResourceComponent::FormBuilderResource': loadNgDashboardsComponentStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./core-dashboards.module\n 'BaseApplication::HomeApplication': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::EntityAdmin': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeManagerDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseDashboard::ThemeStudioDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::APIKeysResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDataSchema': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminDeveloperTools': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminIdentityAccess': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AdminMonitoring': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::AppStateInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ApplicationRolesResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsContainer': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsOperations': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::BulkOperationsRunHistory': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ClassRegistryInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::DashboardBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::EventMonitorInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::GraphQLConsoleInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::GridWidthLabInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::HomeDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LayoutInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::LazyModuleStatusInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsAuditLogResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsResourceAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::PermissionsUserAccessResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::QueryBrowserResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::RealtimeRecordingsDashboard': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SettingsExplorerInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::SystemDiagnosticsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::TabStripLabInspector': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeManagerResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::ThemeStudioResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryDiffResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryGraphResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryLabelsResource': loadNgDashboardsCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryRestoreResource': loadNgDashboardsCoreDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./credentials-dashboards.module\n 'BaseDashboard::CredentialsDashboard': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsAuditResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsCategoriesResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsListResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsOverviewResource': loadNgDashboardsCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsTypesResource': loadNgDashboardsCredentialsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./data-explorer-dashboards.module\n 'BaseDashboard::DataExplorer': loadNgDashboardsDataExplorerDashboardsModule,\n 'BaseResourceComponent::DataExplorerResource': loadNgDashboardsDataExplorerDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./integration.module\n 'BaseResourceComponent::IntegrationActivity': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationConnections': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationMappingWorkspace': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationOverview': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationPipelines': loadNgDashboardsIntegrationModule,\n 'BaseResourceComponent::IntegrationSchedules': loadNgDashboardsIntegrationModule,\n\n // @memberjunction/ng-dashboards → ./lists-dashboards.module\n 'BaseResourceComponent::ListsBrowseResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsCategoriesResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsMyListsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsOperationsResource': loadNgDashboardsListsDashboardsModule,\n 'BaseResourceComponent::ListsSharedWithMeResource': loadNgDashboardsListsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./mcp.module\n 'BaseDashboard::MCPDashboard': loadNgDashboardsMcpModule,\n 'BaseResourceComponent::MCPResource': loadNgDashboardsMcpModule,\n\n // @memberjunction/ng-dashboards → ./module\n 'BaseResourceComponent::DatabaseDesignerDashboard': loadNgDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./predictive-studio-dashboards.module\n 'BaseResourceComponent::PredictiveStudioModelsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioPredictionsResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n 'BaseResourceComponent::PredictiveStudioStudioResource': loadNgDashboardsPredictiveStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./routines-dashboards.module\n 'BaseResourceComponent::UserRoutines': loadNgDashboardsRoutinesDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./scheduling-dashboards.module\n 'BaseDashboard::SchedulingDashboard': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingActivityResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingDashboardResource': loadNgDashboardsSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingJobsResource': loadNgDashboardsSchedulingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./testing-dashboards.module\n 'BaseDashboard::TestingDashboard': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingAnalyticsResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingDashboardTabResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingExplorerResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingReviewResource': loadNgDashboardsTestingDashboardsModule,\n 'BaseResourceComponent::TestingRunsResource': loadNgDashboardsTestingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./workflows-dashboards.module\n 'BaseDashboard::WorkflowsDashboard': loadNgDashboardsWorkflowsDashboardsModule,\n 'BaseResourceComponent::WorkflowRunsResource': loadNgDashboardsWorkflowsDashboardsModule,\n 'BaseResourceComponent::WorkflowsResource': loadNgDashboardsWorkflowsDashboardsModule,\n\n // @memberjunction/ng-explorer-settings → ./settings.module\n 'BaseDashboard::ApplicationManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::EntityPermissions': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::RoleManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::SqlLogging': loadNgExplorerSettingsSettingsModule,\n 'BaseDashboard::UserManagement': loadNgExplorerSettingsSettingsModule,\n 'BaseNavigationComponent::Settings': loadNgExplorerSettingsSettingsModule,\n\n // @memberjunction/ng-file-storage → ./file-storage.module\n 'BaseResourceComponent::FileBrowserResource': loadNgFileStorageFileStorageModule,\n\n // @memberjunction/ng-react → .\n 'RuntimeUtilities::RuntimeUtilities': loadNgReact,\n\n};\n\nexport const LAZY_FEATURE_CONFIG_COUNT = 118;\n"]}
@@ -482,18 +482,18 @@ export class AboutDialogComponent extends BaseAngularComponent {
482
482
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: AboutDialogComponent, selectors: [["mj-about-dialog"]], inputs: { AvatarUrl: "AvatarUrl", AvatarIconClass: "AvatarIconClass" }, outputs: { CloseRequested: "CloseRequested" }, features: [i0.ɵɵInheritDefinitionFeature], decls: 48, vars: 10, consts: [["aboutLogo", ""], ["role", "document", 1, "mj-about"], ["type", "button", "aria-label", "Close", 1, "mj-about__close", 3, "click"], [1, "fa-solid", "fa-xmark"], [1, "mj-about__hero"], [1, "mj-about__logo-wrap", 3, "click"], ["xmlns", "http://www.w3.org/2000/svg", "viewBox", "0 0 448.28 57.11", "aria-label", "MemberJunction", 1, "mj-about__logo"], ["fill", "#fff", "d", "M428.73,44.89v-16.92c.7-1.34,1.66-2.37,2.88-3.09,1.22-.72,2.59-1.08,4.12-1.08,2.2,0,3.92.65,5.17,1.94,1.25,1.3,1.87,3.07,1.87,5.33v13.81h2.01v-14.36c0-1.71-.36-3.21-1.08-4.51-.72-1.3-1.72-2.3-3.02-3.02-1.3-.72-2.8-1.08-4.51-1.08-3.14,0-5.63,1.21-7.46,3.61v-3.16h-2.01v22.51h2.01ZM407.08,42.12c-1.39-.87-2.49-2.04-3.29-3.52-.81-1.48-1.21-3.13-1.21-4.96s.4-3.48,1.21-4.96c.81-1.48,1.91-2.65,3.29-3.52,1.39-.87,2.94-1.31,4.64-1.31s3.25.44,4.64,1.31c1.39.87,2.49,2.04,3.29,3.52.81,1.48,1.21,3.13,1.21,4.96s-.41,3.48-1.21,4.96c-.81,1.48-1.91,2.65-3.29,3.52-1.39.87-2.94,1.3-4.64,1.3s-3.26-.43-4.64-1.3M417.42,43.79c1.69-1.04,3.04-2.45,4.03-4.23.99-1.78,1.49-3.76,1.49-5.92s-.5-4.18-1.49-5.95c-.99-1.77-2.33-3.17-4.03-4.21-1.69-1.04-3.59-1.56-5.69-1.56s-3.97.52-5.67,1.56c-1.71,1.04-3.06,2.44-4.05,4.21-.99,1.77-1.49,3.75-1.49,5.95s.5,4.14,1.49,5.92c.99,1.79,2.34,3.19,4.05,4.23,1.71,1.04,3.6,1.56,5.67,1.56s4-.52,5.69-1.56M397.14,16.8c.32-.34.48-.75.48-1.24s-.16-.9-.48-1.24c-.32-.34-.74-.5-1.26-.5-.49,0-.9.17-1.24.5-.34.34-.5.75-.5,1.24s.17.9.5,1.24c.34.34.75.5,1.24.5.52,0,.94-.17,1.26-.5M396.89,22.38h-2.01v22.51h2.01v-22.51ZM390.57,45.21c.61-.09,1.2-.25,1.78-.46v-1.97c-.52.21-1.02.37-1.51.48-.49.11-1.08.16-1.79.16-1.31,0-2.25-.28-2.81-.84s-.85-1.49-.85-2.77v-15.6h6.95v-1.83h-6.95v-6.31l-2.01.64v5.67h-4.94v1.83h4.94v16.29c0,1.52.46,2.71,1.37,3.57.91.85,2.23,1.28,3.94,1.28.64,0,1.26-.05,1.87-.14M373.12,44.43c1.54-.61,2.89-1.45,4.05-2.51l-1.37-1.65c-.98.95-2.1,1.71-3.36,2.29s-2.57.87-3.91.87c-1.71,0-3.25-.43-4.64-1.3-1.39-.87-2.49-2.04-3.29-3.52-.81-1.48-1.21-3.13-1.21-4.96s.4-3.48,1.21-4.96c.81-1.48,1.9-2.65,3.29-3.52,1.39-.87,2.93-1.31,4.64-1.31,1.34,0,2.64.28,3.91.85,1.27.56,2.39,1.33,3.36,2.31l1.37-1.65c-1.16-1.07-2.51-1.91-4.05-2.52-1.54-.61-3.07-.91-4.6-.91-2.07,0-3.96.52-5.67,1.56s-3.06,2.44-4.05,4.21c-.99,1.77-1.49,3.75-1.49,5.95s.49,4.18,1.49,5.95c.99,1.77,2.34,3.17,4.05,4.21s3.6,1.56,5.67,1.56c1.52,0,3.06-.31,4.6-.92M337.65,44.89v-16.92c.7-1.34,1.66-2.37,2.88-3.09,1.22-.72,2.59-1.08,4.12-1.08,2.2,0,3.92.65,5.17,1.94,1.25,1.3,1.88,3.07,1.88,5.33v13.81h2.01v-14.36c0-1.71-.36-3.21-1.07-4.51-.72-1.3-1.73-2.3-3.02-3.02s-2.8-1.08-4.5-1.08c-3.14,0-5.63,1.21-7.46,3.61v-3.16h-2.01v22.51h2.01ZM328.7,41.78v3.11h2.01v-22.51h-2.01v16.92c-.7,1.31-1.66,2.33-2.88,3.06-1.22.73-2.59,1.1-4.12,1.1-2.2,0-3.92-.65-5.17-1.97-1.25-1.31-1.87-3.08-1.87-5.31v-13.81h-2.01v14.36c0,1.71.37,3.21,1.1,4.51.73,1.3,1.74,2.3,3.04,3.02,1.3.72,2.78,1.08,4.46,1.08,3.2,0,5.69-1.19,7.46-3.57M303.64,43.88c1.74-1.01,3.08-2.43,4.02-4.28.95-1.84,1.42-4.05,1.42-6.61V12.87h-2.1v20.13c0,3.2-.85,5.74-2.56,7.62-1.71,1.88-4.01,2.81-6.91,2.81-2.17,0-4.02-.56-5.58-1.69-1.56-1.13-2.77-2.75-3.66-4.85l-1.92.87c1.01,2.5,2.46,4.4,4.37,5.7,1.9,1.3,4.15,1.94,6.75,1.94,2.38,0,4.44-.5,6.18-1.51M279.77,44.89v-15.37c.61-.97,1.41-1.73,2.4-2.26.99-.53,2.07-.8,3.22-.8.64,0,1.27.06,1.88.18.61.12,1.16.3,1.65.55v-6.45c-.55-.37-1.48-.56-2.79-.59-1.31,0-2.5.25-3.57.75-1.07.5-2,1.24-2.79,2.22v-2.42h-7.41v24.2h7.41ZM253.44,28.07c.47-.56,1.04-1,1.72-1.3.67-.3,1.42-.46,2.24-.46s1.52.16,2.2.48c.67.32,1.26.76,1.76,1.33.5.56.88,1.24,1.12,2.04h-10.11c.24-.82.6-1.52,1.07-2.08M263.5,44.47c1.6-.58,3.17-1.51,4.69-2.79l-4.9-4.35c-.58.58-1.28,1.03-2.1,1.35-.82.32-1.74.48-2.75.48-.91,0-1.77-.16-2.56-.48-.79-.32-1.47-.77-2.03-1.35-.56-.58-1.02-1.25-1.35-2.01h17.25v-1.83c0-2.56-.53-4.83-1.58-6.82-1.05-1.98-2.49-3.54-4.32-4.69-1.83-1.14-3.94-1.72-6.31-1.72s-4.48.55-6.4,1.67c-1.92,1.11-3.44,2.62-4.55,4.5-1.11,1.89-1.67,4.01-1.67,6.36s.58,4.47,1.74,6.36c1.16,1.89,2.74,3.39,4.73,4.51,2,1.11,4.23,1.67,6.7,1.67,2.01,0,3.82-.29,5.42-.87M227.12,38.44c-.88-.34-1.65-.79-2.29-1.37v-8.46c.67-.64,1.43-1.12,2.29-1.44s1.8-.48,2.84-.48c1.19,0,2.26.27,3.23.8.96.53,1.72,1.26,2.29,2.2.56.93.84,1.97.84,3.13s-.28,2.2-.84,3.13c-.56.93-1.32,1.66-2.27,2.2-.95.54-2.03.8-3.25.8-1.01,0-1.95-.17-2.84-.5M224.74,44.89v-1.37c.92.55,1.91.97,2.97,1.26,1.07.29,2.16.43,3.29.43,2.35,0,4.48-.55,6.38-1.65,1.91-1.1,3.41-2.58,4.53-4.46,1.11-1.88,1.67-3.97,1.67-6.29s-.55-4.42-1.65-6.29c-1.1-1.88-2.58-3.37-4.44-4.49-1.86-1.11-3.95-1.67-6.27-1.67s-4.51.67-6.41,2.01v-10.66l-7.41,1.14v32.02h7.32ZM183.69,44.89v-16.56c.46-.58,1.01-1.01,1.67-1.3.66-.29,1.4-.43,2.22-.43,1.19,0,2.14.4,2.86,1.19.72.79,1.07,1.86,1.07,3.2v13.91h7.41v-14.91c0-.28,0-.54-.02-.8-.01-.26-.04-.51-.07-.76.49-.61,1.07-1.07,1.74-1.37.67-.31,1.42-.46,2.24-.46,1.19,0,2.14.4,2.86,1.19s1.08,1.86,1.08,3.2v13.91h7.41v-14.91c0-1.92-.41-3.61-1.21-5.08-.81-1.46-1.91-2.61-3.31-3.43-1.4-.82-3.02-1.23-4.85-1.23-1.59,0-3.05.29-4.39.87-1.34.58-2.5,1.4-3.48,2.47-.83-1.07-1.85-1.89-3.07-2.47-1.22-.58-2.59-.87-4.12-.87-2.32,0-4.33.67-6.04,2.01v-1.56h-7.41v24.2h7.41ZM157.36,28.07c.47-.56,1.04-1,1.72-1.3.67-.3,1.42-.46,2.24-.46s1.52.16,2.2.48c.67.32,1.26.76,1.76,1.33.5.56.88,1.24,1.12,2.04h-10.11c.24-.82.6-1.52,1.08-2.08M167.42,44.47c1.6-.58,3.16-1.51,4.69-2.79l-4.9-4.35c-.58.58-1.28,1.03-2.1,1.35-.83.32-1.74.48-2.75.48-.91,0-1.77-.16-2.56-.48-.79-.32-1.47-.77-2.03-1.35-.56-.58-1.02-1.25-1.35-2.01h17.25v-1.83c0-2.56-.53-4.83-1.58-6.82-1.05-1.98-2.49-3.54-4.32-4.69-1.83-1.14-3.93-1.72-6.31-1.72s-4.48.55-6.41,1.67c-1.92,1.11-3.44,2.62-4.55,4.5-1.11,1.89-1.67,4.01-1.67,6.36s.58,4.47,1.74,6.36c1.16,1.89,2.74,3.39,4.74,4.51,2,1.11,4.23,1.67,6.7,1.67,2.01,0,3.82-.29,5.42-.87M118.71,44.89v-21.91l10.52,19.62,10.52-19.53v21.82h7.41V12.87h-9.93l-7.91,15.1-7.91-15.1h-9.93v32.02h7.23Z"], ["fill", "#fff", "d", "M88.82,12.69v27.95s9.76,5.58,9.76,5.58c.01-.24.02-34.61.02-34.61,0-3.72-1.57-6.76-4.3-8.35-2.73-1.59-6.15-1.44-9.38.39l-33.88,19.27L17.17,3.66c-3.23-1.84-6.65-1.98-9.38-.39-2.73,1.59-4.3,4.63-4.3,8.35,0,0,0,34.39.02,34.64l9.75-5.58V12.69l27.89,15.87L4.21,49.57c.71,1.84,1.93,3.32,3.57,4.28,1.26.73,2.67,1.1,4.13,1.1,1.71,0,3.51-.5,5.25-1.49L88.82,12.69Z"], ["fill", "#fff", "d", "M64.22,30.43l-9.86,5.64,30.56,17.39c1.74.99,3.54,1.49,5.26,1.49,1.46,0,2.87-.37,4.13-1.1,1.65-.96,2.87-2.46,3.59-4.31l-33.67-19.11Z"], [1, "mj-about__version-row"], ["role", "button", "tabindex", "0", 1, "mj-about__version-pill", 3, "click"], [1, "mj-about__version-dot"], [1, "mj-about__body"], [1, "mj-about__connection-line"], [1, "mj-about__user-card"], ["alt", "", 1, "mj-about__user-avatar", "mj-about__user-avatar--img", 3, "src"], [1, "mj-about__user-avatar", "mj-about__user-avatar--icon"], [1, "mj-about__user-avatar"], [1, "mj-about__user-info"], [1, "mj-about__user-name"], [1, "mj-about__user-meta"], [1, "mj-about__conn-pill"], [1, "fa-solid", "fa-circle"], ["Size", "sm", 1, "mj-about__diag", 3, "ExpandedChange", "Expanded"], ["mjAccordionTitle", ""], ["mjAccordionBody", ""], [1, "mj-about__footer"], ["href", "https://docs.memberjunction.org", "target", "_blank", "rel", "noopener", 1, "mj-about__footer-link"], [1, "fa-solid", "fa-book"], ["href", "https://github.com/MemberJunction/MJ", "target", "_blank", "rel", "noopener", 1, "mj-about__footer-link"], [1, "fa-brands", "fa-github"], ["href", "https://memberjunction.com", "target", "_blank", "rel", "noopener", 1, "mj-about__footer-link"], [1, "fa-solid", "fa-globe"], [1, "mj-about__credit"], [1, "mj-about__heart"], [1, "mj-about__toast"], [1, "mj-about__connection-name"], ["alt", "", 1, "mj-about__user-avatar", "mj-about__user-avatar--img", 3, "error", "src"], [1, "fa-solid", "fa-stethoscope"], [1, "mj-about__diag-panel"], [1, "mj-about__diag-section"], [1, "fa-solid", "fa-cube"], [1, "mj-about__diag-row"], [1, "k"], [1, "v"], [1, "fa-solid", "fa-plug"], [1, "v", 3, "title"], [1, "fa-solid", "fa-database"], [1, "fa-solid", "fa-user"], ["type", "button", 1, "mj-about__copy-btn", 3, "click"], [1, "fa-solid"]], template: function AboutDialogComponent_Template(rf, ctx) { if (rf & 1) {
483
483
  const _r1 = i0.ɵɵgetCurrentView();
484
484
  i0.ɵɵelementStart(0, "div", 1)(1, "button", 2);
485
- i0.ɵɵlistener("click", function AboutDialogComponent_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.OnCloseClick()); });
485
+ i0.ɵɵlistener("click", function AboutDialogComponent_Template_button_click_1_listener() { return ctx.OnCloseClick(); });
486
486
  i0.ɵɵelement(2, "i", 3);
487
487
  i0.ɵɵelementEnd();
488
488
  i0.ɵɵelementStart(3, "div", 4)(4, "div", 5);
489
- i0.ɵɵlistener("click", function AboutDialogComponent_Template_div_click_4_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.OnLogoClick()); });
489
+ i0.ɵɵlistener("click", function AboutDialogComponent_Template_div_click_4_listener() { return ctx.OnLogoClick(); });
490
490
  i0.ɵɵnamespaceSVG();
491
491
  i0.ɵɵelementStart(5, "svg", 6, 0);
492
492
  i0.ɵɵelement(7, "path", 7)(8, "path", 8)(9, "path", 9);
493
493
  i0.ɵɵelementEnd()();
494
494
  i0.ɵɵnamespaceHTML();
495
495
  i0.ɵɵelementStart(10, "div", 10)(11, "span", 11);
496
- i0.ɵɵlistener("click", function AboutDialogComponent_Template_span_click_11_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.OnVersionClick()); });
496
+ i0.ɵɵlistener("click", function AboutDialogComponent_Template_span_click_11_listener() { return ctx.OnVersionClick(); });
497
497
  i0.ɵɵelement(12, "span", 12);
498
498
  i0.ɵɵelementStart(13, "span");
499
499
  i0.ɵɵtext(14);
@@ -556,7 +556,7 @@ export class AboutDialogComponent extends BaseAngularComponent {
556
556
  i0.ɵɵtwoWayProperty("Expanded", ctx.DiagnosticsOpen);
557
557
  i0.ɵɵadvance(18);
558
558
  i0.ɵɵconditional(ctx.ToastMessage ? 47 : -1);
559
- } }, dependencies: [CommonModule, MJAccordionModule, i1.MJAccordionPanelComponent, i1.MJAccordionTitleDirective, i1.MJAccordionBodyDirective], styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n.mj-about[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n height: 100%;\n min-height: 0;\n position: relative;\n font-family: inherit;\n}\n.mj-about__close[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n color: #fff;\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n z-index: 2;\n}\n.mj-about__close[_ngcontent-%COMP%]:hover { background: rgba(255, 255, 255, 0.3); }\n\n.mj-about__hero[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n padding: 36px 24px 28px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n}\n.mj-about__hero[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n inset: -50%;\n background: radial-gradient(circle, rgba(255, 255, 255, 0.10) 0%, transparent 60%);\n animation: _ngcontent-%COMP%_mj-about-rotate 24s linear infinite;\n pointer-events: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__hero[_ngcontent-%COMP%]::before { animation: none; }\n}\n@keyframes _ngcontent-%COMP%_mj-about-rotate { to { transform: rotate(360deg); } }\n\n.mj-about__logo-wrap[_ngcontent-%COMP%] {\n position: relative;\n z-index: 1;\n cursor: pointer;\n display: block;\n text-align: center;\n}\n.mj-about__logo[_ngcontent-%COMP%] {\n width: 280px;\n max-width: 80%;\n height: auto;\n display: inline-block;\n filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.15));\n transition: transform 0.3s ease-out;\n}\n.mj-about__logo-wrap[_ngcontent-%COMP%]:hover .mj-about__logo[_ngcontent-%COMP%] { transform: scale(1.03); }\n\n.mj-about__version-row[_ngcontent-%COMP%] {\n position: relative;\n z-index: 1;\n text-align: center;\n}\n.mj-about__version-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n border: 1px solid rgba(255, 255, 255, 0.28);\n border-radius: 100px;\n padding: 5px 14px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n user-select: none;\n color: #fff;\n transition: background 0.15s;\n letter-spacing: 0.2px;\n}\n.mj-about__version-pill[_ngcontent-%COMP%]:hover { background: rgba(255, 255, 255, 0.28); }\n.mj-about__version-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: #4ade80;\n box-shadow: 0 0 6px #4ade80;\n}\n\n.mj-about__body[_ngcontent-%COMP%] {\n padding: 22px 24px 16px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.mj-about__connection-line[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-bottom: 14px;\n letter-spacing: 0.2px;\n}\n.mj-about__connection-name[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.mj-about__user-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n margin-bottom: 16px;\n}\n.mj-about__user-avatar[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n font-size: 15px;\n flex-shrink: 0;\n object-fit: cover;\n overflow: hidden;\n}\nimg.mj-about__user-avatar[_ngcontent-%COMP%] { background: var(--mj-bg-surface-card); }\n.mj-about__user-avatar--icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 18px; }\n.mj-about__user-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.mj-about__user-name[_ngcontent-%COMP%] {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__user-meta[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__conn-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-status-success);\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n padding: 3px 8px;\n border-radius: 100px;\n flex-shrink: 0;\n}\n.mj-about__conn-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 6px; }\n.mj-about__conn-pill--offline[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 12%, transparent);\n}\n\n\n\n.mj-about__diag-section[_ngcontent-%COMP%] + .mj-about__diag-section[_ngcontent-%COMP%] { margin-top: 12px; }\n.mj-about__diag-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n}\n.mj-about__diag-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 10.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.mj-about__diag-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n.mj-about__diag-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n font-size: 12.5px;\n padding: 4px 0;\n min-width: 0;\n}\n.mj-about__diag-row[_ngcontent-%COMP%] .k[_ngcontent-%COMP%] { color: var(--mj-text-secondary); flex-shrink: 0; }\n.mj-about__diag-row[_ngcontent-%COMP%] .v[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n.mj-about__success[_ngcontent-%COMP%] { color: var(--mj-status-success) !important; }\n.mj-about__error[_ngcontent-%COMP%] { color: var(--mj-status-error) !important; }\n\n.mj-about__copy-btn[_ngcontent-%COMP%] {\n width: 100%;\n margin-top: 12px;\n padding: 10px;\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n border-radius: 8px;\n font-size: 12.5px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: border-color 0.15s, color 0.15s, background 0.15s;\n font-family: inherit;\n}\n.mj-about__copy-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.mj-about__footer[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-border-subtle);\n padding: 14px 20px;\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n justify-content: center;\n flex-shrink: 0;\n}\n.mj-about__footer-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-decoration: none;\n transition: background 0.15s, color 0.15s;\n cursor: pointer;\n}\n.mj-about__footer-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.mj-about__credit[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n padding: 0 20px 14px;\n flex-shrink: 0;\n}\n.mj-about__heart[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n display: inline-block;\n animation: _ngcontent-%COMP%_mj-about-heart 2s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__heart[_ngcontent-%COMP%] { animation: none; }\n}\n@keyframes _ngcontent-%COMP%_mj-about-heart {\n 50% { transform: scale(1.18); }\n}\n\n.mj-about__toast[_ngcontent-%COMP%] {\n position: absolute;\n top: 16px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--mj-text-primary);\n color: var(--mj-bg-surface);\n padding: 10px 18px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 500;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n z-index: 5;\n pointer-events: none;\n animation: _ngcontent-%COMP%_mj-about-toast-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n max-width: calc(100% - 32px);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n@keyframes _ngcontent-%COMP%_mj-about-toast-in {\n from { transform: translateX(-50%) translateY(-30px); opacity: 0; }\n to { transform: translateX(-50%) translateY(0); opacity: 1; }\n}\n\n@media (max-width: 480px) {\n .mj-about__hero[_ngcontent-%COMP%] { padding: 30px 18px 22px; gap: 12px; }\n .mj-about__logo[_ngcontent-%COMP%] { width: 220px; }\n .mj-about__body[_ngcontent-%COMP%] { padding: 18px 16px 14px; }\n .mj-about__footer[_ngcontent-%COMP%] { padding: 12px 14px; }\n}"] });
559
+ } }, dependencies: [CommonModule, MJAccordionModule, i1.MJAccordionPanelComponent, i1.MJAccordionTitleDirective, i1.MJAccordionBodyDirective], styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n.mj-about[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n height: 100%;\n min-height: 0;\n position: relative;\n font-family: inherit;\n}\n.mj-about__close[_ngcontent-%COMP%] {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n color: #fff;\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n z-index: 2;\n}\n.mj-about__close[_ngcontent-%COMP%]:hover { background: rgba(255, 255, 255, 0.3); }\n\n.mj-about__hero[_ngcontent-%COMP%] {\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n padding: 36px 24px 28px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n}\n.mj-about__hero[_ngcontent-%COMP%]::before {\n content: '';\n position: absolute;\n inset: -50%;\n background: radial-gradient(circle, rgba(255, 255, 255, 0.10) 0%, transparent 60%);\n animation: _ngcontent-%COMP%_mj-about-rotate 24s linear infinite;\n pointer-events: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__hero[_ngcontent-%COMP%]::before { animation: none; }\n}\n@keyframes _ngcontent-%COMP%_mj-about-rotate { to { transform: rotate(360deg); } }\n\n.mj-about__logo-wrap[_ngcontent-%COMP%] {\n position: relative;\n z-index: 1;\n cursor: pointer;\n display: block;\n text-align: center;\n}\n.mj-about__logo[_ngcontent-%COMP%] {\n width: 280px;\n max-width: 80%;\n height: auto;\n display: inline-block;\n filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.15));\n transition: transform 0.3s ease-out;\n}\n.mj-about__logo-wrap[_ngcontent-%COMP%]:hover .mj-about__logo[_ngcontent-%COMP%] { transform: scale(1.03); }\n\n.mj-about__version-row[_ngcontent-%COMP%] {\n position: relative;\n z-index: 1;\n text-align: center;\n}\n.mj-about__version-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n border: 1px solid rgba(255, 255, 255, 0.28);\n border-radius: 100px;\n padding: 5px 14px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n user-select: none;\n color: #fff;\n transition: background 0.15s;\n letter-spacing: 0.2px;\n}\n.mj-about__version-pill[_ngcontent-%COMP%]:hover { background: rgba(255, 255, 255, 0.28); }\n.mj-about__version-dot[_ngcontent-%COMP%] {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: #4ade80;\n box-shadow: 0 0 6px #4ade80;\n}\n\n.mj-about__body[_ngcontent-%COMP%] {\n padding: 22px 24px 16px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.mj-about__connection-line[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-bottom: 14px;\n letter-spacing: 0.2px;\n}\n.mj-about__connection-name[_ngcontent-%COMP%] {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.mj-about__user-card[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n margin-bottom: 16px;\n}\n.mj-about__user-avatar[_ngcontent-%COMP%] {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n font-size: 15px;\n flex-shrink: 0;\n object-fit: cover;\n overflow: hidden;\n}\nimg.mj-about__user-avatar[_ngcontent-%COMP%] { background: var(--mj-bg-surface-card); }\n.mj-about__user-avatar--icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 18px; }\n.mj-about__user-info[_ngcontent-%COMP%] { flex: 1; min-width: 0; }\n.mj-about__user-name[_ngcontent-%COMP%] {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__user-meta[_ngcontent-%COMP%] {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__conn-pill[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-status-success);\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n padding: 3px 8px;\n border-radius: 100px;\n flex-shrink: 0;\n}\n.mj-about__conn-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { font-size: 6px; }\n.mj-about__conn-pill--offline[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 12%, transparent);\n}\n\n\n.mj-about__diag-section[_ngcontent-%COMP%] + .mj-about__diag-section[_ngcontent-%COMP%] { margin-top: 12px; }\n.mj-about__diag-section[_ngcontent-%COMP%] {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n}\n.mj-about__diag-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] {\n margin: 0 0 8px;\n font-size: 10.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.mj-about__diag-section[_ngcontent-%COMP%] h5[_ngcontent-%COMP%] i[_ngcontent-%COMP%] { color: var(--mj-brand-primary); }\n.mj-about__diag-row[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n font-size: 12.5px;\n padding: 4px 0;\n min-width: 0;\n}\n.mj-about__diag-row[_ngcontent-%COMP%] .k[_ngcontent-%COMP%] { color: var(--mj-text-secondary); flex-shrink: 0; }\n.mj-about__diag-row[_ngcontent-%COMP%] .v[_ngcontent-%COMP%] {\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n.mj-about__success[_ngcontent-%COMP%] { color: var(--mj-status-success) !important; }\n.mj-about__error[_ngcontent-%COMP%] { color: var(--mj-status-error) !important; }\n\n.mj-about__copy-btn[_ngcontent-%COMP%] {\n width: 100%;\n margin-top: 12px;\n padding: 10px;\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n border-radius: 8px;\n font-size: 12.5px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: border-color 0.15s, color 0.15s, background 0.15s;\n font-family: inherit;\n}\n.mj-about__copy-btn[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.mj-about__footer[_ngcontent-%COMP%] {\n border-top: 1px solid var(--mj-border-subtle);\n padding: 14px 20px;\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n justify-content: center;\n flex-shrink: 0;\n}\n.mj-about__footer-link[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-decoration: none;\n transition: background 0.15s, color 0.15s;\n cursor: pointer;\n}\n.mj-about__footer-link[_ngcontent-%COMP%]:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.mj-about__credit[_ngcontent-%COMP%] {\n text-align: center;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n padding: 0 20px 14px;\n flex-shrink: 0;\n}\n.mj-about__heart[_ngcontent-%COMP%] {\n color: var(--mj-status-error);\n display: inline-block;\n animation: _ngcontent-%COMP%_mj-about-heart 2s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__heart[_ngcontent-%COMP%] { animation: none; }\n}\n@keyframes _ngcontent-%COMP%_mj-about-heart {\n 50% { transform: scale(1.18); }\n}\n\n.mj-about__toast[_ngcontent-%COMP%] {\n position: absolute;\n top: 16px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--mj-text-primary);\n color: var(--mj-bg-surface);\n padding: 10px 18px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 500;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n z-index: 5;\n pointer-events: none;\n animation: _ngcontent-%COMP%_mj-about-toast-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n max-width: calc(100% - 32px);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n@keyframes _ngcontent-%COMP%_mj-about-toast-in {\n from { transform: translateX(-50%) translateY(-30px); opacity: 0; }\n to { transform: translateX(-50%) translateY(0); opacity: 1; }\n}\n\n@media (max-width: 480px) {\n .mj-about__hero[_ngcontent-%COMP%] { padding: 30px 18px 22px; gap: 12px; }\n .mj-about__logo[_ngcontent-%COMP%] { width: 220px; }\n .mj-about__body[_ngcontent-%COMP%] { padding: 18px 16px 14px; }\n .mj-about__footer[_ngcontent-%COMP%] { padding: 12px 14px; }\n}"] });
560
560
  }
561
561
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AboutDialogComponent, [{
562
562
  type: Component,
@@ -1 +1 @@
1
- {"version":3,"file":"about-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/about/about-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UserRoleInfo } from '@memberjunction/core';\nimport { InstanceConfigEngine } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider, PACKAGE_VERSION } from '@memberjunction/graphql-dataprovider';\nimport { MJAuthBase } from '@memberjunction/ng-auth-services';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ThemeService } from '@memberjunction/ng-shared';\nimport { MJAccordionModule } from '@memberjunction/ng-ui-components';\nimport { Subscription } from 'rxjs';\nimport { ServerConnectivityService } from '../services/server-connectivity.service';\n\n/**\n * About dialog for MemberJunction. Shows brand identity, version, lightweight\n * usage stats, the current user, and a collapsible diagnostics panel.\n *\n * Self-contained standalone component. Opened via {@link AboutDialogService}.\n *\n * Easter eggs:\n * - Click the version pill 7× → toast + logo spin\n * - Click the logo → quick wiggle\n * - Konami code (↑↑↓↓←→←→ B A) → barrel roll\n */\n@Component({\n selector: 'mj-about-dialog',\n standalone: true,\n imports: [CommonModule, MJAccordionModule],\n template: `\n<div class=\"mj-about\" role=\"document\">\n <button class=\"mj-about__close\" type=\"button\" aria-label=\"Close\" (click)=\"OnCloseClick()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n\n <div class=\"mj-about__hero\">\n <div class=\"mj-about__logo-wrap\" (click)=\"OnLogoClick()\">\n <svg class=\"mj-about__logo\" #aboutLogo\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448.28 57.11\"\n aria-label=\"MemberJunction\">\n <path fill=\"#fff\"\n d=\"M428.73,44.89v-16.92c.7-1.34,1.66-2.37,2.88-3.09,1.22-.72,2.59-1.08,4.12-1.08,2.2,0,3.92.65,5.17,1.94,1.25,1.3,1.87,3.07,1.87,5.33v13.81h2.01v-14.36c0-1.71-.36-3.21-1.08-4.51-.72-1.3-1.72-2.3-3.02-3.02-1.3-.72-2.8-1.08-4.51-1.08-3.14,0-5.63,1.21-7.46,3.61v-3.16h-2.01v22.51h2.01ZM407.08,42.12c-1.39-.87-2.49-2.04-3.29-3.52-.81-1.48-1.21-3.13-1.21-4.96s.4-3.48,1.21-4.96c.81-1.48,1.91-2.65,3.29-3.52,1.39-.87,2.94-1.31,4.64-1.31s3.25.44,4.64,1.31c1.39.87,2.49,2.04,3.29,3.52.81,1.48,1.21,3.13,1.21,4.96s-.41,3.48-1.21,4.96c-.81,1.48-1.91,2.65-3.29,3.52-1.39.87-2.94,1.3-4.64,1.3s-3.26-.43-4.64-1.3M417.42,43.79c1.69-1.04,3.04-2.45,4.03-4.23.99-1.78,1.49-3.76,1.49-5.92s-.5-4.18-1.49-5.95c-.99-1.77-2.33-3.17-4.03-4.21-1.69-1.04-3.59-1.56-5.69-1.56s-3.97.52-5.67,1.56c-1.71,1.04-3.06,2.44-4.05,4.21-.99,1.77-1.49,3.75-1.49,5.95s.5,4.14,1.49,5.92c.99,1.79,2.34,3.19,4.05,4.23,1.71,1.04,3.6,1.56,5.67,1.56s4-.52,5.69-1.56M397.14,16.8c.32-.34.48-.75.48-1.24s-.16-.9-.48-1.24c-.32-.34-.74-.5-1.26-.5-.49,0-.9.17-1.24.5-.34.34-.5.75-.5,1.24s.17.9.5,1.24c.34.34.75.5,1.24.5.52,0,.94-.17,1.26-.5M396.89,22.38h-2.01v22.51h2.01v-22.51ZM390.57,45.21c.61-.09,1.2-.25,1.78-.46v-1.97c-.52.21-1.02.37-1.51.48-.49.11-1.08.16-1.79.16-1.31,0-2.25-.28-2.81-.84s-.85-1.49-.85-2.77v-15.6h6.95v-1.83h-6.95v-6.31l-2.01.64v5.67h-4.94v1.83h4.94v16.29c0,1.52.46,2.71,1.37,3.57.91.85,2.23,1.28,3.94,1.28.64,0,1.26-.05,1.87-.14M373.12,44.43c1.54-.61,2.89-1.45,4.05-2.51l-1.37-1.65c-.98.95-2.1,1.71-3.36,2.29s-2.57.87-3.91.87c-1.71,0-3.25-.43-4.64-1.3-1.39-.87-2.49-2.04-3.29-3.52-.81-1.48-1.21-3.13-1.21-4.96s.4-3.48,1.21-4.96c.81-1.48,1.9-2.65,3.29-3.52,1.39-.87,2.93-1.31,4.64-1.31,1.34,0,2.64.28,3.91.85,1.27.56,2.39,1.33,3.36,2.31l1.37-1.65c-1.16-1.07-2.51-1.91-4.05-2.52-1.54-.61-3.07-.91-4.6-.91-2.07,0-3.96.52-5.67,1.56s-3.06,2.44-4.05,4.21c-.99,1.77-1.49,3.75-1.49,5.95s.49,4.18,1.49,5.95c.99,1.77,2.34,3.17,4.05,4.21s3.6,1.56,5.67,1.56c1.52,0,3.06-.31,4.6-.92M337.65,44.89v-16.92c.7-1.34,1.66-2.37,2.88-3.09,1.22-.72,2.59-1.08,4.12-1.08,2.2,0,3.92.65,5.17,1.94,1.25,1.3,1.88,3.07,1.88,5.33v13.81h2.01v-14.36c0-1.71-.36-3.21-1.07-4.51-.72-1.3-1.73-2.3-3.02-3.02s-2.8-1.08-4.5-1.08c-3.14,0-5.63,1.21-7.46,3.61v-3.16h-2.01v22.51h2.01ZM328.7,41.78v3.11h2.01v-22.51h-2.01v16.92c-.7,1.31-1.66,2.33-2.88,3.06-1.22.73-2.59,1.1-4.12,1.1-2.2,0-3.92-.65-5.17-1.97-1.25-1.31-1.87-3.08-1.87-5.31v-13.81h-2.01v14.36c0,1.71.37,3.21,1.1,4.51.73,1.3,1.74,2.3,3.04,3.02,1.3.72,2.78,1.08,4.46,1.08,3.2,0,5.69-1.19,7.46-3.57M303.64,43.88c1.74-1.01,3.08-2.43,4.02-4.28.95-1.84,1.42-4.05,1.42-6.61V12.87h-2.1v20.13c0,3.2-.85,5.74-2.56,7.62-1.71,1.88-4.01,2.81-6.91,2.81-2.17,0-4.02-.56-5.58-1.69-1.56-1.13-2.77-2.75-3.66-4.85l-1.92.87c1.01,2.5,2.46,4.4,4.37,5.7,1.9,1.3,4.15,1.94,6.75,1.94,2.38,0,4.44-.5,6.18-1.51M279.77,44.89v-15.37c.61-.97,1.41-1.73,2.4-2.26.99-.53,2.07-.8,3.22-.8.64,0,1.27.06,1.88.18.61.12,1.16.3,1.65.55v-6.45c-.55-.37-1.48-.56-2.79-.59-1.31,0-2.5.25-3.57.75-1.07.5-2,1.24-2.79,2.22v-2.42h-7.41v24.2h7.41ZM253.44,28.07c.47-.56,1.04-1,1.72-1.3.67-.3,1.42-.46,2.24-.46s1.52.16,2.2.48c.67.32,1.26.76,1.76,1.33.5.56.88,1.24,1.12,2.04h-10.11c.24-.82.6-1.52,1.07-2.08M263.5,44.47c1.6-.58,3.17-1.51,4.69-2.79l-4.9-4.35c-.58.58-1.28,1.03-2.1,1.35-.82.32-1.74.48-2.75.48-.91,0-1.77-.16-2.56-.48-.79-.32-1.47-.77-2.03-1.35-.56-.58-1.02-1.25-1.35-2.01h17.25v-1.83c0-2.56-.53-4.83-1.58-6.82-1.05-1.98-2.49-3.54-4.32-4.69-1.83-1.14-3.94-1.72-6.31-1.72s-4.48.55-6.4,1.67c-1.92,1.11-3.44,2.62-4.55,4.5-1.11,1.89-1.67,4.01-1.67,6.36s.58,4.47,1.74,6.36c1.16,1.89,2.74,3.39,4.73,4.51,2,1.11,4.23,1.67,6.7,1.67,2.01,0,3.82-.29,5.42-.87M227.12,38.44c-.88-.34-1.65-.79-2.29-1.37v-8.46c.67-.64,1.43-1.12,2.29-1.44s1.8-.48,2.84-.48c1.19,0,2.26.27,3.23.8.96.53,1.72,1.26,2.29,2.2.56.93.84,1.97.84,3.13s-.28,2.2-.84,3.13c-.56.93-1.32,1.66-2.27,2.2-.95.54-2.03.8-3.25.8-1.01,0-1.95-.17-2.84-.5M224.74,44.89v-1.37c.92.55,1.91.97,2.97,1.26,1.07.29,2.16.43,3.29.43,2.35,0,4.48-.55,6.38-1.65,1.91-1.1,3.41-2.58,4.53-4.46,1.11-1.88,1.67-3.97,1.67-6.29s-.55-4.42-1.65-6.29c-1.1-1.88-2.58-3.37-4.44-4.49-1.86-1.11-3.95-1.67-6.27-1.67s-4.51.67-6.41,2.01v-10.66l-7.41,1.14v32.02h7.32ZM183.69,44.89v-16.56c.46-.58,1.01-1.01,1.67-1.3.66-.29,1.4-.43,2.22-.43,1.19,0,2.14.4,2.86,1.19.72.79,1.07,1.86,1.07,3.2v13.91h7.41v-14.91c0-.28,0-.54-.02-.8-.01-.26-.04-.51-.07-.76.49-.61,1.07-1.07,1.74-1.37.67-.31,1.42-.46,2.24-.46,1.19,0,2.14.4,2.86,1.19s1.08,1.86,1.08,3.2v13.91h7.41v-14.91c0-1.92-.41-3.61-1.21-5.08-.81-1.46-1.91-2.61-3.31-3.43-1.4-.82-3.02-1.23-4.85-1.23-1.59,0-3.05.29-4.39.87-1.34.58-2.5,1.4-3.48,2.47-.83-1.07-1.85-1.89-3.07-2.47-1.22-.58-2.59-.87-4.12-.87-2.32,0-4.33.67-6.04,2.01v-1.56h-7.41v24.2h7.41ZM157.36,28.07c.47-.56,1.04-1,1.72-1.3.67-.3,1.42-.46,2.24-.46s1.52.16,2.2.48c.67.32,1.26.76,1.76,1.33.5.56.88,1.24,1.12,2.04h-10.11c.24-.82.6-1.52,1.08-2.08M167.42,44.47c1.6-.58,3.16-1.51,4.69-2.79l-4.9-4.35c-.58.58-1.28,1.03-2.1,1.35-.83.32-1.74.48-2.75.48-.91,0-1.77-.16-2.56-.48-.79-.32-1.47-.77-2.03-1.35-.56-.58-1.02-1.25-1.35-2.01h17.25v-1.83c0-2.56-.53-4.83-1.58-6.82-1.05-1.98-2.49-3.54-4.32-4.69-1.83-1.14-3.93-1.72-6.31-1.72s-4.48.55-6.41,1.67c-1.92,1.11-3.44,2.62-4.55,4.5-1.11,1.89-1.67,4.01-1.67,6.36s.58,4.47,1.74,6.36c1.16,1.89,2.74,3.39,4.74,4.51,2,1.11,4.23,1.67,6.7,1.67,2.01,0,3.82-.29,5.42-.87M118.71,44.89v-21.91l10.52,19.62,10.52-19.53v21.82h7.41V12.87h-9.93l-7.91,15.1-7.91-15.1h-9.93v32.02h7.23Z\" />\n <path fill=\"#fff\"\n d=\"M88.82,12.69v27.95s9.76,5.58,9.76,5.58c.01-.24.02-34.61.02-34.61,0-3.72-1.57-6.76-4.3-8.35-2.73-1.59-6.15-1.44-9.38.39l-33.88,19.27L17.17,3.66c-3.23-1.84-6.65-1.98-9.38-.39-2.73,1.59-4.3,4.63-4.3,8.35,0,0,0,34.39.02,34.64l9.75-5.58V12.69l27.89,15.87L4.21,49.57c.71,1.84,1.93,3.32,3.57,4.28,1.26.73,2.67,1.1,4.13,1.1,1.71,0,3.51-.5,5.25-1.49L88.82,12.69Z\" />\n <path fill=\"#fff\"\n d=\"M64.22,30.43l-9.86,5.64,30.56,17.39c1.74.99,3.54,1.49,5.26,1.49,1.46,0,2.87-.37,4.13-1.1,1.65-.96,2.87-2.46,3.59-4.31l-33.67-19.11Z\" />\n </svg>\n </div>\n\n <div class=\"mj-about__version-row\">\n <span class=\"mj-about__version-pill\" (click)=\"OnVersionClick()\" role=\"button\" tabindex=\"0\">\n <span class=\"mj-about__version-dot\"></span>\n <span>Version {{ Version }}</span>\n </span>\n </div>\n </div>\n\n <div class=\"mj-about__body\">\n @if (ConnectionLabel) {\n <div class=\"mj-about__connection-line\">\n Connected to <span class=\"mj-about__connection-name\">{{ ConnectionLabel }}</span>\n </div>\n }\n\n <div class=\"mj-about__user-card\">\n @if (AvatarUrl) {\n <img class=\"mj-about__user-avatar mj-about__user-avatar--img\"\n [src]=\"AvatarUrl\" alt=\"\" (error)=\"OnAvatarLoadError()\" />\n } @else if (AvatarIconClass) {\n <div class=\"mj-about__user-avatar mj-about__user-avatar--icon\">\n <i [class]=\"AvatarIconClass\"></i>\n </div>\n } @else {\n <div class=\"mj-about__user-avatar\">{{ UserInitials }}</div>\n }\n <div class=\"mj-about__user-info\">\n <div class=\"mj-about__user-name\">{{ UserName }}</div>\n <div class=\"mj-about__user-meta\">{{ UserMeta }}</div>\n </div>\n <div class=\"mj-about__conn-pill\" [class.mj-about__conn-pill--offline]=\"!IsConnected\">\n <i class=\"fa-solid fa-circle\"></i>\n {{ IsConnected ? 'Connected' : 'Offline' }}\n </div>\n </div>\n\n <mj-accordion-panel class=\"mj-about__diag\" Size=\"sm\" [(Expanded)]=\"DiagnosticsOpen\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-stethoscope\"></i>\n Diagnostics\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-about__diag-panel\">\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-cube\"></i> Build</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Version</span><span class=\"v\">{{ Version }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Environment</span><span class=\"v\">{{ Environment }}</span></div>\n </div>\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-plug\"></i> Connection</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">API endpoint</span><span class=\"v\" [title]=\"ApiUrl\">{{ ApiUrlShort }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Auth provider</span><span class=\"v\">{{ AuthProvider }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Status</span><span class=\"v\" [class.mj-about__success]=\"IsConnected\" [class.mj-about__error]=\"!IsConnected\">{{ IsConnected ? 'Connected' : 'Offline' }}</span></div>\n </div>\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-database\"></i> Loaded</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Entities</span><span class=\"v\">{{ EntityCount }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Applications</span><span class=\"v\">{{ ApplicationCount }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Queries</span><span class=\"v\">{{ QueryCount }}</span></div>\n </div>\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-user\"></i> Session</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">User</span><span class=\"v\">{{ UserEmail }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Roles</span><span class=\"v\">{{ UserRolesText }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Theme</span><span class=\"v\">{{ ThemeLabel }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Browser</span><span class=\"v\">{{ BrowserLabel }}</span></div>\n </div>\n <button class=\"mj-about__copy-btn\" type=\"button\" (click)=\"CopyDiagnostics()\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\"></i>\n {{ CopyConfirmed ? 'Copied!' : 'Copy diagnostics' }}\n </button>\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n\n <div class=\"mj-about__footer\">\n <a class=\"mj-about__footer-link\" href=\"https://docs.memberjunction.org\" target=\"_blank\" rel=\"noopener\">\n <i class=\"fa-solid fa-book\"></i> Documentation\n </a>\n <a class=\"mj-about__footer-link\" href=\"https://github.com/MemberJunction/MJ\" target=\"_blank\" rel=\"noopener\">\n <i class=\"fa-brands fa-github\"></i> GitHub\n </a>\n <a class=\"mj-about__footer-link\" href=\"https://memberjunction.com\" target=\"_blank\" rel=\"noopener\">\n <i class=\"fa-solid fa-globe\"></i> Website\n </a>\n </div>\n\n <div class=\"mj-about__credit\">\n Built with <span class=\"mj-about__heart\">&hearts;</span> by the MemberJunction community\n </div>\n\n @if (ToastMessage) {\n <div class=\"mj-about__toast\">{{ ToastMessage }}</div>\n }\n</div>\n `,\n styles: [`\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n.mj-about {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n height: 100%;\n min-height: 0;\n position: relative;\n font-family: inherit;\n}\n.mj-about__close {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n color: #fff;\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n z-index: 2;\n}\n.mj-about__close:hover { background: rgba(255, 255, 255, 0.3); }\n\n.mj-about__hero {\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n padding: 36px 24px 28px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n}\n.mj-about__hero::before {\n content: '';\n position: absolute;\n inset: -50%;\n background: radial-gradient(circle, rgba(255, 255, 255, 0.10) 0%, transparent 60%);\n animation: mj-about-rotate 24s linear infinite;\n pointer-events: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__hero::before { animation: none; }\n}\n@keyframes mj-about-rotate { to { transform: rotate(360deg); } }\n\n.mj-about__logo-wrap {\n position: relative;\n z-index: 1;\n cursor: pointer;\n display: block;\n text-align: center;\n}\n.mj-about__logo {\n width: 280px;\n max-width: 80%;\n height: auto;\n display: inline-block;\n filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.15));\n transition: transform 0.3s ease-out;\n}\n.mj-about__logo-wrap:hover .mj-about__logo { transform: scale(1.03); }\n\n.mj-about__version-row {\n position: relative;\n z-index: 1;\n text-align: center;\n}\n.mj-about__version-pill {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n border: 1px solid rgba(255, 255, 255, 0.28);\n border-radius: 100px;\n padding: 5px 14px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n user-select: none;\n color: #fff;\n transition: background 0.15s;\n letter-spacing: 0.2px;\n}\n.mj-about__version-pill:hover { background: rgba(255, 255, 255, 0.28); }\n.mj-about__version-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: #4ade80;\n box-shadow: 0 0 6px #4ade80;\n}\n\n.mj-about__body {\n padding: 22px 24px 16px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.mj-about__connection-line {\n text-align: center;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-bottom: 14px;\n letter-spacing: 0.2px;\n}\n.mj-about__connection-name {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.mj-about__user-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n margin-bottom: 16px;\n}\n.mj-about__user-avatar {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n font-size: 15px;\n flex-shrink: 0;\n object-fit: cover;\n overflow: hidden;\n}\nimg.mj-about__user-avatar { background: var(--mj-bg-surface-card); }\n.mj-about__user-avatar--icon i { font-size: 18px; }\n.mj-about__user-info { flex: 1; min-width: 0; }\n.mj-about__user-name {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__user-meta {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__conn-pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-status-success);\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n padding: 3px 8px;\n border-radius: 100px;\n flex-shrink: 0;\n}\n.mj-about__conn-pill i { font-size: 6px; }\n.mj-about__conn-pill--offline {\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 12%, transparent);\n}\n\n/* .mj-about__diag-toggle / -panel collapse chrome is now owned by <mj-accordion-panel>. */\n.mj-about__diag-section + .mj-about__diag-section { margin-top: 12px; }\n.mj-about__diag-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n}\n.mj-about__diag-section h5 {\n margin: 0 0 8px;\n font-size: 10.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.mj-about__diag-section h5 i { color: var(--mj-brand-primary); }\n.mj-about__diag-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n font-size: 12.5px;\n padding: 4px 0;\n min-width: 0;\n}\n.mj-about__diag-row .k { color: var(--mj-text-secondary); flex-shrink: 0; }\n.mj-about__diag-row .v {\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n.mj-about__success { color: var(--mj-status-success) !important; }\n.mj-about__error { color: var(--mj-status-error) !important; }\n\n.mj-about__copy-btn {\n width: 100%;\n margin-top: 12px;\n padding: 10px;\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n border-radius: 8px;\n font-size: 12.5px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: border-color 0.15s, color 0.15s, background 0.15s;\n font-family: inherit;\n}\n.mj-about__copy-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.mj-about__footer {\n border-top: 1px solid var(--mj-border-subtle);\n padding: 14px 20px;\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n justify-content: center;\n flex-shrink: 0;\n}\n.mj-about__footer-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-decoration: none;\n transition: background 0.15s, color 0.15s;\n cursor: pointer;\n}\n.mj-about__footer-link:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.mj-about__credit {\n text-align: center;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n padding: 0 20px 14px;\n flex-shrink: 0;\n}\n.mj-about__heart {\n color: var(--mj-status-error);\n display: inline-block;\n animation: mj-about-heart 2s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__heart { animation: none; }\n}\n@keyframes mj-about-heart {\n 50% { transform: scale(1.18); }\n}\n\n.mj-about__toast {\n position: absolute;\n top: 16px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--mj-text-primary);\n color: var(--mj-bg-surface);\n padding: 10px 18px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 500;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n z-index: 5;\n pointer-events: none;\n animation: mj-about-toast-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n max-width: calc(100% - 32px);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n@keyframes mj-about-toast-in {\n from { transform: translateX(-50%) translateY(-30px); opacity: 0; }\n to { transform: translateX(-50%) translateY(0); opacity: 1; }\n}\n\n@media (max-width: 480px) {\n .mj-about__hero { padding: 30px 18px 22px; gap: 12px; }\n .mj-about__logo { width: 220px; }\n .mj-about__body { padding: 18px 16px 14px; }\n .mj-about__footer { padding: 12px 14px; }\n}\n `]\n})\nexport class AboutDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Output() CloseRequested = new EventEmitter<void>();\n\n /** Optional avatar image URL — passed in from the shell where it's already resolved. */\n @Input() AvatarUrl: string | null = null;\n\n /** Optional Font Awesome icon class fallback when no image is available. */\n @Input() AvatarIconClass: string | null = null;\n\n /** Static framework version, generated at build time. */\n public readonly Version: string = PACKAGE_VERSION;\n\n public EntityCount = 0;\n public ApplicationCount = 0;\n public QueryCount = 0;\n\n public UserName = 'Unknown User';\n public UserEmail = '';\n public UserInitials = '?';\n public UserRolesText = 'None';\n public ApiUrl = '';\n public ApiUrlShort = '';\n public AuthProvider = 'Unknown';\n public Environment: string = 'production';\n public ThemeLabel = '';\n public BrowserLabel = '';\n public IsConnected = true;\n public DiagnosticsOpen = false;\n\n /** Friendly \"Connected to X\" label — display name from InstanceConfig or just the API hostname. */\n public ConnectionLabel = '';\n\n public ToastMessage = '';\n public CopyConfirmed = false;\n\n private authBase = inject(MJAuthBase);\n private themeService = inject(ThemeService);\n private connectivity = inject(ServerConnectivityService);\n private cdr = inject(ChangeDetectorRef);\n\n private connSub?: Subscription;\n private themeSub?: Subscription;\n private versionClickCount = 0;\n private versionClickResetTimer: ReturnType<typeof setTimeout> | null = null;\n private toastTimer: ReturnType<typeof setTimeout> | null = null;\n private konamiIndex = 0;\n private readonly konamiSequence = ['ArrowUp','ArrowUp','ArrowDown','ArrowDown','ArrowLeft','ArrowRight','ArrowLeft','ArrowRight','b','a'];\n private readonly konamiHandler = (event: KeyboardEvent): void => {\n const key = event.key.length === 1 ? event.key.toLowerCase() : event.key;\n if (key === this.konamiSequence[this.konamiIndex]) {\n this.konamiIndex++;\n if (this.konamiIndex === this.konamiSequence.length) {\n this.konamiIndex = 0;\n this.showToast('🚀 You found it. Now you must tell no one.', 3500);\n this.barrelRoll();\n }\n } else {\n this.konamiIndex = 0;\n }\n };\n\n public get UserMeta(): string {\n if (this.UserEmail && this.UserRolesText && this.UserRolesText !== 'None') {\n return `${this.UserEmail} · ${this.UserRolesText}`;\n }\n return this.UserEmail || this.UserRolesText;\n }\n\n public ngOnInit(): void {\n this.populate();\n this.connSub = this.connectivity.IsConnected$.subscribe(connected => {\n this.IsConnected = connected;\n this.cdr.markForCheck();\n });\n this.themeSub = this.themeService.AppliedTheme$.subscribe(() => {\n this.ThemeLabel = this.computeThemeLabel();\n this.cdr.markForCheck();\n });\n document.addEventListener('keydown', this.konamiHandler);\n }\n\n public ngOnDestroy(): void {\n this.connSub?.unsubscribe();\n this.themeSub?.unsubscribe();\n document.removeEventListener('keydown', this.konamiHandler);\n if (this.versionClickResetTimer) clearTimeout(this.versionClickResetTimer);\n if (this.toastTimer) clearTimeout(this.toastTimer);\n }\n\n private populate(): void {\n const provider = this.ProviderToUse;\n\n this.EntityCount = provider?.Entities?.length ?? 0;\n this.ApplicationCount = provider?.Applications?.length ?? 0;\n this.QueryCount = provider?.Queries?.length ?? 0;\n\n const user = provider?.CurrentUser;\n if (user) {\n this.UserName = user.Name || `${user.FirstName ?? ''} ${user.LastName ?? ''}`.trim() || 'User';\n this.UserEmail = user.Email || '';\n this.UserInitials = this.computeInitials(this.UserName);\n const roles = (user.UserRoles ?? [])\n .map((r: UserRoleInfo) => r.Role)\n .filter((n: string | null) => !!n) as string[];\n this.UserRolesText = roles.length > 0 ? roles.join(', ') : 'None';\n }\n\n if (provider instanceof GraphQLDataProvider) {\n this.ApiUrl = provider.ConfigData?.URL ?? '';\n this.ApiUrlShort = this.shortenUrl(this.ApiUrl);\n }\n\n this.AuthProvider = this.computeAuthLabel(this.authBase?.type);\n this.Environment = this.detectEnvironment();\n this.ThemeLabel = this.computeThemeLabel();\n this.BrowserLabel = this.computeBrowserLabel();\n this.IsConnected = this.connectivity.IsConnected;\n this.ConnectionLabel = this.computeConnectionLabel();\n }\n\n /**\n * Build the \"Connected to X\" label. Prefers `Instance.DisplayName` from\n * InstanceConfigEngine if set, otherwise falls back to the API hostname.\n */\n private computeConnectionLabel(): string {\n let displayName: string | undefined;\n try {\n displayName = InstanceConfigEngine.Instance.Get('Instance.DisplayName');\n } catch {\n displayName = undefined;\n }\n const host = this.ApiUrlShort?.split('/')[0] ?? '';\n if (displayName && host) return `${displayName} · ${host}`;\n return displayName || host;\n }\n\n public OnCloseClick(): void {\n this.CloseRequested.emit();\n }\n\n public OnLogoClick(): void {\n this.wiggleLogo();\n }\n\n public OnAvatarLoadError(): void {\n // Image failed to load — fall back to initials\n this.AvatarUrl = null;\n this.cdr.markForCheck();\n }\n\n public OnVersionClick(): void {\n this.versionClickCount++;\n if (this.versionClickResetTimer) clearTimeout(this.versionClickResetTimer);\n this.versionClickResetTimer = setTimeout(() => (this.versionClickCount = 0), 2000);\n\n if (this.versionClickCount === 3) this.showToast('Keep going...');\n else if (this.versionClickCount === 5) this.showToast(\"You're committed now.\");\n else if (this.versionClickCount === 7) {\n this.versionClickCount = 0;\n this.showToast('🎉 Developer mode? In THIS economy?');\n this.spinLogo();\n }\n }\n\n public async CopyDiagnostics(): Promise<void> {\n const block = [\n `MemberJunction v${this.Version}`,\n `Environment: ${this.Environment}`,\n `API: ${this.ApiUrl || '(unknown)'}`,\n `Auth: ${this.AuthProvider}`,\n `User: ${this.UserEmail || this.UserName} (${this.UserRolesText})`,\n `Theme: ${this.ThemeLabel}`,\n `Browser: ${this.BrowserLabel}`,\n `Entities loaded: ${this.EntityCount}`,\n `Applications: ${this.ApplicationCount}`,\n `Queries: ${this.QueryCount}`\n ].join('\\n');\n\n try {\n await navigator.clipboard.writeText(block);\n this.CopyConfirmed = true;\n this.showToast('Diagnostics copied to clipboard');\n setTimeout(() => {\n this.CopyConfirmed = false;\n this.cdr.markForCheck();\n }, 1800);\n } catch {\n this.showToast('Copy failed — clipboard unavailable');\n }\n }\n\n // ---------- helpers ----------\n\n private computeInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n\n private shortenUrl(url: string): string {\n if (!url) return '(not configured)';\n try {\n const u = new URL(url);\n return u.host + (u.pathname && u.pathname !== '/' ? u.pathname : '');\n } catch {\n return url;\n }\n }\n\n private computeAuthLabel(type: string | undefined): string {\n switch ((type ?? '').toLowerCase()) {\n case 'msal': return 'Microsoft Entra (MSAL)';\n case 'auth0': return 'Auth0';\n case 'okta': return 'Okta';\n case 'cognito': return 'Amazon Cognito';\n case '': return 'Unknown';\n default: return type ?? 'Unknown';\n }\n }\n\n private detectEnvironment(): string {\n const host = typeof window !== 'undefined' ? window.location.hostname : '';\n if (host === 'localhost' || host === '127.0.0.1' || host.endsWith('.local')) return 'development';\n if (host.startsWith('dev.') || host.includes('-dev.') || host.includes('.dev.')) return 'development';\n if (host.startsWith('staging.') || host.includes('-staging.') || host.includes('.staging.')) return 'staging';\n return 'production';\n }\n\n private computeThemeLabel(): string {\n const applied = this.themeService.AppliedTheme;\n const preference = this.themeService.Preference;\n const def = this.themeService.GetThemeDefinition(applied);\n const themeName = def?.Name ?? applied;\n return preference === 'system' ? `${themeName} · System` : themeName;\n }\n\n private computeBrowserLabel(): string {\n const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n let browser = 'Unknown';\n if (/Edg\\//.test(ua)) browser = 'Edge';\n else if (/OPR\\//.test(ua)) browser = 'Opera';\n else if (/Chrome\\//.test(ua) && !/Chromium/.test(ua)) browser = 'Chrome';\n else if (/Firefox\\//.test(ua)) browser = 'Firefox';\n else if (/Safari\\//.test(ua)) browser = 'Safari';\n\n let os = 'Unknown';\n if (/iPhone|iPad|iPod/.test(ua)) os = 'iOS';\n else if (/Android/.test(ua)) os = 'Android';\n else if (/Mac OS X|Macintosh/.test(ua)) os = 'macOS';\n else if (/Windows/.test(ua)) os = 'Windows';\n else if (/Linux/.test(ua)) os = 'Linux';\n\n return `${browser} / ${os}`;\n }\n\n private showToast(message: string, durationMs = 2400): void {\n this.ToastMessage = message;\n if (this.toastTimer) clearTimeout(this.toastTimer);\n this.toastTimer = setTimeout(() => {\n this.ToastMessage = '';\n this.cdr.markForCheck();\n }, durationMs);\n }\n\n private wiggleLogo(): void {\n const svg = document.querySelector('.mj-about__logo') as SVGElement | null;\n svg?.animate(\n [\n { transform: 'rotate(0)' },\n { transform: 'rotate(-6deg)' },\n { transform: 'rotate(6deg)' },\n { transform: 'rotate(0)' }\n ],\n { duration: 400, easing: 'ease-in-out' }\n );\n }\n\n private spinLogo(): void {\n const svg = document.querySelector('.mj-about__logo') as SVGElement | null;\n svg?.animate(\n [\n { transform: 'rotate(0) scale(1)', offset: 0 },\n { transform: 'rotate(720deg) scale(1.1)', offset: 0.85 },\n { transform: 'rotate(720deg) scale(1)', offset: 1 }\n ],\n { duration: 2800, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' }\n );\n }\n\n private barrelRoll(): void {\n const dialog = document.querySelector('.mj-about') as HTMLElement | null;\n dialog?.animate(\n [{ transform: 'rotate(0)' }, { transform: 'rotate(360deg)' }],\n { duration: 900, easing: 'cubic-bezier(0.65, 0, 0.35, 1)' }\n );\n }\n}\n"]}
1
+ {"version":3,"file":"about-dialog.component.js","sourceRoot":"","sources":["../../../src/lib/about/about-dialog.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n EventEmitter,\n Input,\n OnDestroy,\n OnInit,\n Output,\n ChangeDetectorRef,\n inject\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { UserRoleInfo } from '@memberjunction/core';\nimport { InstanceConfigEngine } from '@memberjunction/core-entities';\nimport { GraphQLDataProvider, PACKAGE_VERSION } from '@memberjunction/graphql-dataprovider';\nimport { MJAuthBase } from '@memberjunction/ng-auth-services';\nimport { BaseAngularComponent } from '@memberjunction/ng-base-types';\nimport { ThemeService } from '@memberjunction/ng-shared';\nimport { MJAccordionModule } from '@memberjunction/ng-ui-components';\nimport { Subscription } from 'rxjs';\nimport { ServerConnectivityService } from '../services/server-connectivity.service';\n\n/**\n * About dialog for MemberJunction. Shows brand identity, version, lightweight\n * usage stats, the current user, and a collapsible diagnostics panel.\n *\n * Self-contained standalone component. Opened via {@link AboutDialogService}.\n *\n * Easter eggs:\n * - Click the version pill 7× → toast + logo spin\n * - Click the logo → quick wiggle\n * - Konami code (↑↑↓↓←→←→ B A) → barrel roll\n */\n@Component({\n selector: 'mj-about-dialog',\n standalone: true,\n imports: [CommonModule, MJAccordionModule],\n template: `\n<div class=\"mj-about\" role=\"document\">\n <button class=\"mj-about__close\" type=\"button\" aria-label=\"Close\" (click)=\"OnCloseClick()\">\n <i class=\"fa-solid fa-xmark\"></i>\n </button>\n\n <div class=\"mj-about__hero\">\n <div class=\"mj-about__logo-wrap\" (click)=\"OnLogoClick()\">\n <svg class=\"mj-about__logo\" #aboutLogo\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448.28 57.11\"\n aria-label=\"MemberJunction\">\n <path fill=\"#fff\"\n d=\"M428.73,44.89v-16.92c.7-1.34,1.66-2.37,2.88-3.09,1.22-.72,2.59-1.08,4.12-1.08,2.2,0,3.92.65,5.17,1.94,1.25,1.3,1.87,3.07,1.87,5.33v13.81h2.01v-14.36c0-1.71-.36-3.21-1.08-4.51-.72-1.3-1.72-2.3-3.02-3.02-1.3-.72-2.8-1.08-4.51-1.08-3.14,0-5.63,1.21-7.46,3.61v-3.16h-2.01v22.51h2.01ZM407.08,42.12c-1.39-.87-2.49-2.04-3.29-3.52-.81-1.48-1.21-3.13-1.21-4.96s.4-3.48,1.21-4.96c.81-1.48,1.91-2.65,3.29-3.52,1.39-.87,2.94-1.31,4.64-1.31s3.25.44,4.64,1.31c1.39.87,2.49,2.04,3.29,3.52.81,1.48,1.21,3.13,1.21,4.96s-.41,3.48-1.21,4.96c-.81,1.48-1.91,2.65-3.29,3.52-1.39.87-2.94,1.3-4.64,1.3s-3.26-.43-4.64-1.3M417.42,43.79c1.69-1.04,3.04-2.45,4.03-4.23.99-1.78,1.49-3.76,1.49-5.92s-.5-4.18-1.49-5.95c-.99-1.77-2.33-3.17-4.03-4.21-1.69-1.04-3.59-1.56-5.69-1.56s-3.97.52-5.67,1.56c-1.71,1.04-3.06,2.44-4.05,4.21-.99,1.77-1.49,3.75-1.49,5.95s.5,4.14,1.49,5.92c.99,1.79,2.34,3.19,4.05,4.23,1.71,1.04,3.6,1.56,5.67,1.56s4-.52,5.69-1.56M397.14,16.8c.32-.34.48-.75.48-1.24s-.16-.9-.48-1.24c-.32-.34-.74-.5-1.26-.5-.49,0-.9.17-1.24.5-.34.34-.5.75-.5,1.24s.17.9.5,1.24c.34.34.75.5,1.24.5.52,0,.94-.17,1.26-.5M396.89,22.38h-2.01v22.51h2.01v-22.51ZM390.57,45.21c.61-.09,1.2-.25,1.78-.46v-1.97c-.52.21-1.02.37-1.51.48-.49.11-1.08.16-1.79.16-1.31,0-2.25-.28-2.81-.84s-.85-1.49-.85-2.77v-15.6h6.95v-1.83h-6.95v-6.31l-2.01.64v5.67h-4.94v1.83h4.94v16.29c0,1.52.46,2.71,1.37,3.57.91.85,2.23,1.28,3.94,1.28.64,0,1.26-.05,1.87-.14M373.12,44.43c1.54-.61,2.89-1.45,4.05-2.51l-1.37-1.65c-.98.95-2.1,1.71-3.36,2.29s-2.57.87-3.91.87c-1.71,0-3.25-.43-4.64-1.3-1.39-.87-2.49-2.04-3.29-3.52-.81-1.48-1.21-3.13-1.21-4.96s.4-3.48,1.21-4.96c.81-1.48,1.9-2.65,3.29-3.52,1.39-.87,2.93-1.31,4.64-1.31,1.34,0,2.64.28,3.91.85,1.27.56,2.39,1.33,3.36,2.31l1.37-1.65c-1.16-1.07-2.51-1.91-4.05-2.52-1.54-.61-3.07-.91-4.6-.91-2.07,0-3.96.52-5.67,1.56s-3.06,2.44-4.05,4.21c-.99,1.77-1.49,3.75-1.49,5.95s.49,4.18,1.49,5.95c.99,1.77,2.34,3.17,4.05,4.21s3.6,1.56,5.67,1.56c1.52,0,3.06-.31,4.6-.92M337.65,44.89v-16.92c.7-1.34,1.66-2.37,2.88-3.09,1.22-.72,2.59-1.08,4.12-1.08,2.2,0,3.92.65,5.17,1.94,1.25,1.3,1.88,3.07,1.88,5.33v13.81h2.01v-14.36c0-1.71-.36-3.21-1.07-4.51-.72-1.3-1.73-2.3-3.02-3.02s-2.8-1.08-4.5-1.08c-3.14,0-5.63,1.21-7.46,3.61v-3.16h-2.01v22.51h2.01ZM328.7,41.78v3.11h2.01v-22.51h-2.01v16.92c-.7,1.31-1.66,2.33-2.88,3.06-1.22.73-2.59,1.1-4.12,1.1-2.2,0-3.92-.65-5.17-1.97-1.25-1.31-1.87-3.08-1.87-5.31v-13.81h-2.01v14.36c0,1.71.37,3.21,1.1,4.51.73,1.3,1.74,2.3,3.04,3.02,1.3.72,2.78,1.08,4.46,1.08,3.2,0,5.69-1.19,7.46-3.57M303.64,43.88c1.74-1.01,3.08-2.43,4.02-4.28.95-1.84,1.42-4.05,1.42-6.61V12.87h-2.1v20.13c0,3.2-.85,5.74-2.56,7.62-1.71,1.88-4.01,2.81-6.91,2.81-2.17,0-4.02-.56-5.58-1.69-1.56-1.13-2.77-2.75-3.66-4.85l-1.92.87c1.01,2.5,2.46,4.4,4.37,5.7,1.9,1.3,4.15,1.94,6.75,1.94,2.38,0,4.44-.5,6.18-1.51M279.77,44.89v-15.37c.61-.97,1.41-1.73,2.4-2.26.99-.53,2.07-.8,3.22-.8.64,0,1.27.06,1.88.18.61.12,1.16.3,1.65.55v-6.45c-.55-.37-1.48-.56-2.79-.59-1.31,0-2.5.25-3.57.75-1.07.5-2,1.24-2.79,2.22v-2.42h-7.41v24.2h7.41ZM253.44,28.07c.47-.56,1.04-1,1.72-1.3.67-.3,1.42-.46,2.24-.46s1.52.16,2.2.48c.67.32,1.26.76,1.76,1.33.5.56.88,1.24,1.12,2.04h-10.11c.24-.82.6-1.52,1.07-2.08M263.5,44.47c1.6-.58,3.17-1.51,4.69-2.79l-4.9-4.35c-.58.58-1.28,1.03-2.1,1.35-.82.32-1.74.48-2.75.48-.91,0-1.77-.16-2.56-.48-.79-.32-1.47-.77-2.03-1.35-.56-.58-1.02-1.25-1.35-2.01h17.25v-1.83c0-2.56-.53-4.83-1.58-6.82-1.05-1.98-2.49-3.54-4.32-4.69-1.83-1.14-3.94-1.72-6.31-1.72s-4.48.55-6.4,1.67c-1.92,1.11-3.44,2.62-4.55,4.5-1.11,1.89-1.67,4.01-1.67,6.36s.58,4.47,1.74,6.36c1.16,1.89,2.74,3.39,4.73,4.51,2,1.11,4.23,1.67,6.7,1.67,2.01,0,3.82-.29,5.42-.87M227.12,38.44c-.88-.34-1.65-.79-2.29-1.37v-8.46c.67-.64,1.43-1.12,2.29-1.44s1.8-.48,2.84-.48c1.19,0,2.26.27,3.23.8.96.53,1.72,1.26,2.29,2.2.56.93.84,1.97.84,3.13s-.28,2.2-.84,3.13c-.56.93-1.32,1.66-2.27,2.2-.95.54-2.03.8-3.25.8-1.01,0-1.95-.17-2.84-.5M224.74,44.89v-1.37c.92.55,1.91.97,2.97,1.26,1.07.29,2.16.43,3.29.43,2.35,0,4.48-.55,6.38-1.65,1.91-1.1,3.41-2.58,4.53-4.46,1.11-1.88,1.67-3.97,1.67-6.29s-.55-4.42-1.65-6.29c-1.1-1.88-2.58-3.37-4.44-4.49-1.86-1.11-3.95-1.67-6.27-1.67s-4.51.67-6.41,2.01v-10.66l-7.41,1.14v32.02h7.32ZM183.69,44.89v-16.56c.46-.58,1.01-1.01,1.67-1.3.66-.29,1.4-.43,2.22-.43,1.19,0,2.14.4,2.86,1.19.72.79,1.07,1.86,1.07,3.2v13.91h7.41v-14.91c0-.28,0-.54-.02-.8-.01-.26-.04-.51-.07-.76.49-.61,1.07-1.07,1.74-1.37.67-.31,1.42-.46,2.24-.46,1.19,0,2.14.4,2.86,1.19s1.08,1.86,1.08,3.2v13.91h7.41v-14.91c0-1.92-.41-3.61-1.21-5.08-.81-1.46-1.91-2.61-3.31-3.43-1.4-.82-3.02-1.23-4.85-1.23-1.59,0-3.05.29-4.39.87-1.34.58-2.5,1.4-3.48,2.47-.83-1.07-1.85-1.89-3.07-2.47-1.22-.58-2.59-.87-4.12-.87-2.32,0-4.33.67-6.04,2.01v-1.56h-7.41v24.2h7.41ZM157.36,28.07c.47-.56,1.04-1,1.72-1.3.67-.3,1.42-.46,2.24-.46s1.52.16,2.2.48c.67.32,1.26.76,1.76,1.33.5.56.88,1.24,1.12,2.04h-10.11c.24-.82.6-1.52,1.08-2.08M167.42,44.47c1.6-.58,3.16-1.51,4.69-2.79l-4.9-4.35c-.58.58-1.28,1.03-2.1,1.35-.83.32-1.74.48-2.75.48-.91,0-1.77-.16-2.56-.48-.79-.32-1.47-.77-2.03-1.35-.56-.58-1.02-1.25-1.35-2.01h17.25v-1.83c0-2.56-.53-4.83-1.58-6.82-1.05-1.98-2.49-3.54-4.32-4.69-1.83-1.14-3.93-1.72-6.31-1.72s-4.48.55-6.41,1.67c-1.92,1.11-3.44,2.62-4.55,4.5-1.11,1.89-1.67,4.01-1.67,6.36s.58,4.47,1.74,6.36c1.16,1.89,2.74,3.39,4.74,4.51,2,1.11,4.23,1.67,6.7,1.67,2.01,0,3.82-.29,5.42-.87M118.71,44.89v-21.91l10.52,19.62,10.52-19.53v21.82h7.41V12.87h-9.93l-7.91,15.1-7.91-15.1h-9.93v32.02h7.23Z\" />\n <path fill=\"#fff\"\n d=\"M88.82,12.69v27.95s9.76,5.58,9.76,5.58c.01-.24.02-34.61.02-34.61,0-3.72-1.57-6.76-4.3-8.35-2.73-1.59-6.15-1.44-9.38.39l-33.88,19.27L17.17,3.66c-3.23-1.84-6.65-1.98-9.38-.39-2.73,1.59-4.3,4.63-4.3,8.35,0,0,0,34.39.02,34.64l9.75-5.58V12.69l27.89,15.87L4.21,49.57c.71,1.84,1.93,3.32,3.57,4.28,1.26.73,2.67,1.1,4.13,1.1,1.71,0,3.51-.5,5.25-1.49L88.82,12.69Z\" />\n <path fill=\"#fff\"\n d=\"M64.22,30.43l-9.86,5.64,30.56,17.39c1.74.99,3.54,1.49,5.26,1.49,1.46,0,2.87-.37,4.13-1.1,1.65-.96,2.87-2.46,3.59-4.31l-33.67-19.11Z\" />\n </svg>\n </div>\n\n <div class=\"mj-about__version-row\">\n <span class=\"mj-about__version-pill\" (click)=\"OnVersionClick()\" role=\"button\" tabindex=\"0\">\n <span class=\"mj-about__version-dot\"></span>\n <span>Version {{ Version }}</span>\n </span>\n </div>\n </div>\n\n <div class=\"mj-about__body\">\n @if (ConnectionLabel) {\n <div class=\"mj-about__connection-line\">\n Connected to <span class=\"mj-about__connection-name\">{{ ConnectionLabel }}</span>\n </div>\n }\n\n <div class=\"mj-about__user-card\">\n @if (AvatarUrl) {\n <img class=\"mj-about__user-avatar mj-about__user-avatar--img\"\n [src]=\"AvatarUrl\" alt=\"\" (error)=\"OnAvatarLoadError()\" />\n } @else if (AvatarIconClass) {\n <div class=\"mj-about__user-avatar mj-about__user-avatar--icon\">\n <i [class]=\"AvatarIconClass\"></i>\n </div>\n } @else {\n <div class=\"mj-about__user-avatar\">{{ UserInitials }}</div>\n }\n <div class=\"mj-about__user-info\">\n <div class=\"mj-about__user-name\">{{ UserName }}</div>\n <div class=\"mj-about__user-meta\">{{ UserMeta }}</div>\n </div>\n <div class=\"mj-about__conn-pill\" [class.mj-about__conn-pill--offline]=\"!IsConnected\">\n <i class=\"fa-solid fa-circle\"></i>\n {{ IsConnected ? 'Connected' : 'Offline' }}\n </div>\n </div>\n\n <mj-accordion-panel class=\"mj-about__diag\" Size=\"sm\" [(Expanded)]=\"DiagnosticsOpen\">\n <ng-template mjAccordionTitle>\n <i class=\"fa-solid fa-stethoscope\"></i>\n Diagnostics\n </ng-template>\n <ng-template mjAccordionBody>\n <div class=\"mj-about__diag-panel\">\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-cube\"></i> Build</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Version</span><span class=\"v\">{{ Version }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Environment</span><span class=\"v\">{{ Environment }}</span></div>\n </div>\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-plug\"></i> Connection</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">API endpoint</span><span class=\"v\" [title]=\"ApiUrl\">{{ ApiUrlShort }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Auth provider</span><span class=\"v\">{{ AuthProvider }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Status</span><span class=\"v\" [class.mj-about__success]=\"IsConnected\" [class.mj-about__error]=\"!IsConnected\">{{ IsConnected ? 'Connected' : 'Offline' }}</span></div>\n </div>\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-database\"></i> Loaded</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Entities</span><span class=\"v\">{{ EntityCount }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Applications</span><span class=\"v\">{{ ApplicationCount }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Queries</span><span class=\"v\">{{ QueryCount }}</span></div>\n </div>\n <div class=\"mj-about__diag-section\">\n <h5><i class=\"fa-solid fa-user\"></i> Session</h5>\n <div class=\"mj-about__diag-row\"><span class=\"k\">User</span><span class=\"v\">{{ UserEmail }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Roles</span><span class=\"v\">{{ UserRolesText }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Theme</span><span class=\"v\">{{ ThemeLabel }}</span></div>\n <div class=\"mj-about__diag-row\"><span class=\"k\">Browser</span><span class=\"v\">{{ BrowserLabel }}</span></div>\n </div>\n <button class=\"mj-about__copy-btn\" type=\"button\" (click)=\"CopyDiagnostics()\">\n <i class=\"fa-solid\" [class.fa-clipboard]=\"!CopyConfirmed\" [class.fa-check]=\"CopyConfirmed\"></i>\n {{ CopyConfirmed ? 'Copied!' : 'Copy diagnostics' }}\n </button>\n </div>\n </ng-template>\n </mj-accordion-panel>\n </div>\n\n <div class=\"mj-about__footer\">\n <a class=\"mj-about__footer-link\" href=\"https://docs.memberjunction.org\" target=\"_blank\" rel=\"noopener\">\n <i class=\"fa-solid fa-book\"></i> Documentation\n </a>\n <a class=\"mj-about__footer-link\" href=\"https://github.com/MemberJunction/MJ\" target=\"_blank\" rel=\"noopener\">\n <i class=\"fa-brands fa-github\"></i> GitHub\n </a>\n <a class=\"mj-about__footer-link\" href=\"https://memberjunction.com\" target=\"_blank\" rel=\"noopener\">\n <i class=\"fa-solid fa-globe\"></i> Website\n </a>\n </div>\n\n <div class=\"mj-about__credit\">\n Built with <span class=\"mj-about__heart\">&hearts;</span> by the MemberJunction community\n </div>\n\n @if (ToastMessage) {\n <div class=\"mj-about__toast\">{{ ToastMessage }}</div>\n }\n</div>\n `,\n styles: [`\n:host {\n display: block;\n width: 100%;\n height: 100%;\n}\n.mj-about {\n display: flex;\n flex-direction: column;\n background: var(--mj-bg-surface);\n color: var(--mj-text-primary);\n height: 100%;\n min-height: 0;\n position: relative;\n font-family: inherit;\n}\n.mj-about__close {\n position: absolute;\n top: 12px;\n right: 12px;\n width: 36px;\n height: 36px;\n border: none;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n color: #fff;\n cursor: pointer;\n font-size: 16px;\n display: flex;\n align-items: center;\n justify-content: center;\n transition: background 0.15s;\n z-index: 2;\n}\n.mj-about__close:hover { background: rgba(255, 255, 255, 0.3); }\n\n.mj-about__hero {\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n padding: 36px 24px 28px;\n position: relative;\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 14px;\n}\n.mj-about__hero::before {\n content: '';\n position: absolute;\n inset: -50%;\n background: radial-gradient(circle, rgba(255, 255, 255, 0.10) 0%, transparent 60%);\n animation: mj-about-rotate 24s linear infinite;\n pointer-events: none;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__hero::before { animation: none; }\n}\n@keyframes mj-about-rotate { to { transform: rotate(360deg); } }\n\n.mj-about__logo-wrap {\n position: relative;\n z-index: 1;\n cursor: pointer;\n display: block;\n text-align: center;\n}\n.mj-about__logo {\n width: 280px;\n max-width: 80%;\n height: auto;\n display: inline-block;\n filter: drop-shadow(0 2px 8px rgba(0, 0, 0, 0.15));\n transition: transform 0.3s ease-out;\n}\n.mj-about__logo-wrap:hover .mj-about__logo { transform: scale(1.03); }\n\n.mj-about__version-row {\n position: relative;\n z-index: 1;\n text-align: center;\n}\n.mj-about__version-pill {\n display: inline-flex;\n align-items: center;\n gap: 7px;\n background: rgba(255, 255, 255, 0.18);\n backdrop-filter: blur(8px);\n border: 1px solid rgba(255, 255, 255, 0.28);\n border-radius: 100px;\n padding: 5px 14px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n user-select: none;\n color: #fff;\n transition: background 0.15s;\n letter-spacing: 0.2px;\n}\n.mj-about__version-pill:hover { background: rgba(255, 255, 255, 0.28); }\n.mj-about__version-dot {\n width: 7px;\n height: 7px;\n border-radius: 50%;\n background: #4ade80;\n box-shadow: 0 0 6px #4ade80;\n}\n\n.mj-about__body {\n padding: 22px 24px 16px;\n overflow-y: auto;\n flex: 1;\n min-height: 0;\n}\n\n.mj-about__connection-line {\n text-align: center;\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-bottom: 14px;\n letter-spacing: 0.2px;\n}\n.mj-about__connection-name {\n color: var(--mj-text-secondary);\n font-weight: 600;\n}\n\n.mj-about__user-card {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 14px;\n background: var(--mj-bg-surface-sunken);\n border-radius: 10px;\n margin-bottom: 16px;\n}\n.mj-about__user-avatar {\n width: 40px;\n height: 40px;\n border-radius: 50%;\n background: linear-gradient(135deg, #264FAF 0%, #0076b6 100%);\n color: #fff;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 700;\n font-size: 15px;\n flex-shrink: 0;\n object-fit: cover;\n overflow: hidden;\n}\nimg.mj-about__user-avatar { background: var(--mj-bg-surface-card); }\n.mj-about__user-avatar--icon i { font-size: 18px; }\n.mj-about__user-info { flex: 1; min-width: 0; }\n.mj-about__user-name {\n font-size: 13.5px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__user-meta {\n font-size: 11.5px;\n color: var(--mj-text-muted);\n margin-top: 2px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n.mj-about__conn-pill {\n display: inline-flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n color: var(--mj-status-success);\n font-weight: 600;\n background: color-mix(in srgb, var(--mj-status-success) 12%, transparent);\n padding: 3px 8px;\n border-radius: 100px;\n flex-shrink: 0;\n}\n.mj-about__conn-pill i { font-size: 6px; }\n.mj-about__conn-pill--offline {\n color: var(--mj-status-error);\n background: color-mix(in srgb, var(--mj-status-error) 12%, transparent);\n}\n\n/* .mj-about__diag-toggle / -panel collapse chrome is now owned by <mj-accordion-panel>. */\n.mj-about__diag-section + .mj-about__diag-section { margin-top: 12px; }\n.mj-about__diag-section {\n background: var(--mj-bg-surface-card);\n border: 1px solid var(--mj-border-subtle);\n border-radius: 10px;\n padding: 12px 14px;\n}\n.mj-about__diag-section h5 {\n margin: 0 0 8px;\n font-size: 10.5px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.6px;\n color: var(--mj-text-muted);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.mj-about__diag-section h5 i { color: var(--mj-brand-primary); }\n.mj-about__diag-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n font-size: 12.5px;\n padding: 4px 0;\n min-width: 0;\n}\n.mj-about__diag-row .k { color: var(--mj-text-secondary); flex-shrink: 0; }\n.mj-about__diag-row .v {\n color: var(--mj-text-primary);\n font-family: 'SF Mono', Menlo, Consolas, monospace;\n font-size: 11.5px;\n font-weight: 500;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n min-width: 0;\n}\n.mj-about__success { color: var(--mj-status-success) !important; }\n.mj-about__error { color: var(--mj-status-error) !important; }\n\n.mj-about__copy-btn {\n width: 100%;\n margin-top: 12px;\n padding: 10px;\n border: 1px dashed var(--mj-border-strong);\n background: transparent;\n border-radius: 8px;\n font-size: 12.5px;\n color: var(--mj-text-secondary);\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n transition: border-color 0.15s, color 0.15s, background 0.15s;\n font-family: inherit;\n}\n.mj-about__copy-btn:hover {\n border-color: var(--mj-brand-primary);\n color: var(--mj-brand-primary);\n background: color-mix(in srgb, var(--mj-brand-primary) 4%, transparent);\n}\n\n.mj-about__footer {\n border-top: 1px solid var(--mj-border-subtle);\n padding: 14px 20px;\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n justify-content: center;\n flex-shrink: 0;\n}\n.mj-about__footer-link {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 7px 12px;\n border-radius: 7px;\n font-size: 12px;\n color: var(--mj-text-secondary);\n text-decoration: none;\n transition: background 0.15s, color 0.15s;\n cursor: pointer;\n}\n.mj-about__footer-link:hover {\n background: var(--mj-bg-surface-hover);\n color: var(--mj-brand-primary);\n}\n\n.mj-about__credit {\n text-align: center;\n font-size: 10.5px;\n color: var(--mj-text-muted);\n padding: 0 20px 14px;\n flex-shrink: 0;\n}\n.mj-about__heart {\n color: var(--mj-status-error);\n display: inline-block;\n animation: mj-about-heart 2s ease-in-out infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .mj-about__heart { animation: none; }\n}\n@keyframes mj-about-heart {\n 50% { transform: scale(1.18); }\n}\n\n.mj-about__toast {\n position: absolute;\n top: 16px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--mj-text-primary);\n color: var(--mj-bg-surface);\n padding: 10px 18px;\n border-radius: 10px;\n font-size: 13px;\n font-weight: 500;\n box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n z-index: 5;\n pointer-events: none;\n animation: mj-about-toast-in 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);\n max-width: calc(100% - 32px);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n@keyframes mj-about-toast-in {\n from { transform: translateX(-50%) translateY(-30px); opacity: 0; }\n to { transform: translateX(-50%) translateY(0); opacity: 1; }\n}\n\n@media (max-width: 480px) {\n .mj-about__hero { padding: 30px 18px 22px; gap: 12px; }\n .mj-about__logo { width: 220px; }\n .mj-about__body { padding: 18px 16px 14px; }\n .mj-about__footer { padding: 12px 14px; }\n}\n `]\n})\nexport class AboutDialogComponent extends BaseAngularComponent implements OnInit, OnDestroy {\n @Output() CloseRequested = new EventEmitter<void>();\n\n /** Optional avatar image URL — passed in from the shell where it's already resolved. */\n @Input() AvatarUrl: string | null = null;\n\n /** Optional Font Awesome icon class fallback when no image is available. */\n @Input() AvatarIconClass: string | null = null;\n\n /** Static framework version, generated at build time. */\n public readonly Version: string = PACKAGE_VERSION;\n\n public EntityCount = 0;\n public ApplicationCount = 0;\n public QueryCount = 0;\n\n public UserName = 'Unknown User';\n public UserEmail = '';\n public UserInitials = '?';\n public UserRolesText = 'None';\n public ApiUrl = '';\n public ApiUrlShort = '';\n public AuthProvider = 'Unknown';\n public Environment: string = 'production';\n public ThemeLabel = '';\n public BrowserLabel = '';\n public IsConnected = true;\n public DiagnosticsOpen = false;\n\n /** Friendly \"Connected to X\" label — display name from InstanceConfig or just the API hostname. */\n public ConnectionLabel = '';\n\n public ToastMessage = '';\n public CopyConfirmed = false;\n\n private authBase = inject(MJAuthBase);\n private themeService = inject(ThemeService);\n private connectivity = inject(ServerConnectivityService);\n private cdr = inject(ChangeDetectorRef);\n\n private connSub?: Subscription;\n private themeSub?: Subscription;\n private versionClickCount = 0;\n private versionClickResetTimer: ReturnType<typeof setTimeout> | null = null;\n private toastTimer: ReturnType<typeof setTimeout> | null = null;\n private konamiIndex = 0;\n private readonly konamiSequence = ['ArrowUp','ArrowUp','ArrowDown','ArrowDown','ArrowLeft','ArrowRight','ArrowLeft','ArrowRight','b','a'];\n private readonly konamiHandler = (event: KeyboardEvent): void => {\n const key = event.key.length === 1 ? event.key.toLowerCase() : event.key;\n if (key === this.konamiSequence[this.konamiIndex]) {\n this.konamiIndex++;\n if (this.konamiIndex === this.konamiSequence.length) {\n this.konamiIndex = 0;\n this.showToast('🚀 You found it. Now you must tell no one.', 3500);\n this.barrelRoll();\n }\n } else {\n this.konamiIndex = 0;\n }\n };\n\n public get UserMeta(): string {\n if (this.UserEmail && this.UserRolesText && this.UserRolesText !== 'None') {\n return `${this.UserEmail} · ${this.UserRolesText}`;\n }\n return this.UserEmail || this.UserRolesText;\n }\n\n public ngOnInit(): void {\n this.populate();\n this.connSub = this.connectivity.IsConnected$.subscribe(connected => {\n this.IsConnected = connected;\n this.cdr.markForCheck();\n });\n this.themeSub = this.themeService.AppliedTheme$.subscribe(() => {\n this.ThemeLabel = this.computeThemeLabel();\n this.cdr.markForCheck();\n });\n document.addEventListener('keydown', this.konamiHandler);\n }\n\n public ngOnDestroy(): void {\n this.connSub?.unsubscribe();\n this.themeSub?.unsubscribe();\n document.removeEventListener('keydown', this.konamiHandler);\n if (this.versionClickResetTimer) clearTimeout(this.versionClickResetTimer);\n if (this.toastTimer) clearTimeout(this.toastTimer);\n }\n\n private populate(): void {\n const provider = this.ProviderToUse;\n\n this.EntityCount = provider?.Entities?.length ?? 0;\n this.ApplicationCount = provider?.Applications?.length ?? 0;\n this.QueryCount = provider?.Queries?.length ?? 0;\n\n const user = provider?.CurrentUser;\n if (user) {\n this.UserName = user.Name || `${user.FirstName ?? ''} ${user.LastName ?? ''}`.trim() || 'User';\n this.UserEmail = user.Email || '';\n this.UserInitials = this.computeInitials(this.UserName);\n const roles = (user.UserRoles ?? [])\n .map((r: UserRoleInfo) => r.Role)\n .filter((n: string | null) => !!n) as string[];\n this.UserRolesText = roles.length > 0 ? roles.join(', ') : 'None';\n }\n\n if (provider instanceof GraphQLDataProvider) {\n this.ApiUrl = provider.ConfigData?.URL ?? '';\n this.ApiUrlShort = this.shortenUrl(this.ApiUrl);\n }\n\n this.AuthProvider = this.computeAuthLabel(this.authBase?.type);\n this.Environment = this.detectEnvironment();\n this.ThemeLabel = this.computeThemeLabel();\n this.BrowserLabel = this.computeBrowserLabel();\n this.IsConnected = this.connectivity.IsConnected;\n this.ConnectionLabel = this.computeConnectionLabel();\n }\n\n /**\n * Build the \"Connected to X\" label. Prefers `Instance.DisplayName` from\n * InstanceConfigEngine if set, otherwise falls back to the API hostname.\n */\n private computeConnectionLabel(): string {\n let displayName: string | undefined;\n try {\n displayName = InstanceConfigEngine.Instance.Get('Instance.DisplayName');\n } catch {\n displayName = undefined;\n }\n const host = this.ApiUrlShort?.split('/')[0] ?? '';\n if (displayName && host) return `${displayName} · ${host}`;\n return displayName || host;\n }\n\n public OnCloseClick(): void {\n this.CloseRequested.emit();\n }\n\n public OnLogoClick(): void {\n this.wiggleLogo();\n }\n\n public OnAvatarLoadError(): void {\n // Image failed to load — fall back to initials\n this.AvatarUrl = null;\n this.cdr.markForCheck();\n }\n\n public OnVersionClick(): void {\n this.versionClickCount++;\n if (this.versionClickResetTimer) clearTimeout(this.versionClickResetTimer);\n this.versionClickResetTimer = setTimeout(() => (this.versionClickCount = 0), 2000);\n\n if (this.versionClickCount === 3) this.showToast('Keep going...');\n else if (this.versionClickCount === 5) this.showToast(\"You're committed now.\");\n else if (this.versionClickCount === 7) {\n this.versionClickCount = 0;\n this.showToast('🎉 Developer mode? In THIS economy?');\n this.spinLogo();\n }\n }\n\n public async CopyDiagnostics(): Promise<void> {\n const block = [\n `MemberJunction v${this.Version}`,\n `Environment: ${this.Environment}`,\n `API: ${this.ApiUrl || '(unknown)'}`,\n `Auth: ${this.AuthProvider}`,\n `User: ${this.UserEmail || this.UserName} (${this.UserRolesText})`,\n `Theme: ${this.ThemeLabel}`,\n `Browser: ${this.BrowserLabel}`,\n `Entities loaded: ${this.EntityCount}`,\n `Applications: ${this.ApplicationCount}`,\n `Queries: ${this.QueryCount}`\n ].join('\\n');\n\n try {\n await navigator.clipboard.writeText(block);\n this.CopyConfirmed = true;\n this.showToast('Diagnostics copied to clipboard');\n setTimeout(() => {\n this.CopyConfirmed = false;\n this.cdr.markForCheck();\n }, 1800);\n } catch {\n this.showToast('Copy failed — clipboard unavailable');\n }\n }\n\n // ---------- helpers ----------\n\n private computeInitials(name: string): string {\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n }\n\n private shortenUrl(url: string): string {\n if (!url) return '(not configured)';\n try {\n const u = new URL(url);\n return u.host + (u.pathname && u.pathname !== '/' ? u.pathname : '');\n } catch {\n return url;\n }\n }\n\n private computeAuthLabel(type: string | undefined): string {\n switch ((type ?? '').toLowerCase()) {\n case 'msal': return 'Microsoft Entra (MSAL)';\n case 'auth0': return 'Auth0';\n case 'okta': return 'Okta';\n case 'cognito': return 'Amazon Cognito';\n case '': return 'Unknown';\n default: return type ?? 'Unknown';\n }\n }\n\n private detectEnvironment(): string {\n const host = typeof window !== 'undefined' ? window.location.hostname : '';\n if (host === 'localhost' || host === '127.0.0.1' || host.endsWith('.local')) return 'development';\n if (host.startsWith('dev.') || host.includes('-dev.') || host.includes('.dev.')) return 'development';\n if (host.startsWith('staging.') || host.includes('-staging.') || host.includes('.staging.')) return 'staging';\n return 'production';\n }\n\n private computeThemeLabel(): string {\n const applied = this.themeService.AppliedTheme;\n const preference = this.themeService.Preference;\n const def = this.themeService.GetThemeDefinition(applied);\n const themeName = def?.Name ?? applied;\n return preference === 'system' ? `${themeName} · System` : themeName;\n }\n\n private computeBrowserLabel(): string {\n const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n let browser = 'Unknown';\n if (/Edg\\//.test(ua)) browser = 'Edge';\n else if (/OPR\\//.test(ua)) browser = 'Opera';\n else if (/Chrome\\//.test(ua) && !/Chromium/.test(ua)) browser = 'Chrome';\n else if (/Firefox\\//.test(ua)) browser = 'Firefox';\n else if (/Safari\\//.test(ua)) browser = 'Safari';\n\n let os = 'Unknown';\n if (/iPhone|iPad|iPod/.test(ua)) os = 'iOS';\n else if (/Android/.test(ua)) os = 'Android';\n else if (/Mac OS X|Macintosh/.test(ua)) os = 'macOS';\n else if (/Windows/.test(ua)) os = 'Windows';\n else if (/Linux/.test(ua)) os = 'Linux';\n\n return `${browser} / ${os}`;\n }\n\n private showToast(message: string, durationMs = 2400): void {\n this.ToastMessage = message;\n if (this.toastTimer) clearTimeout(this.toastTimer);\n this.toastTimer = setTimeout(() => {\n this.ToastMessage = '';\n this.cdr.markForCheck();\n }, durationMs);\n }\n\n private wiggleLogo(): void {\n const svg = document.querySelector('.mj-about__logo') as SVGElement | null;\n svg?.animate(\n [\n { transform: 'rotate(0)' },\n { transform: 'rotate(-6deg)' },\n { transform: 'rotate(6deg)' },\n { transform: 'rotate(0)' }\n ],\n { duration: 400, easing: 'ease-in-out' }\n );\n }\n\n private spinLogo(): void {\n const svg = document.querySelector('.mj-about__logo') as SVGElement | null;\n svg?.animate(\n [\n { transform: 'rotate(0) scale(1)', offset: 0 },\n { transform: 'rotate(720deg) scale(1.1)', offset: 0.85 },\n { transform: 'rotate(720deg) scale(1)', offset: 1 }\n ],\n { duration: 2800, easing: 'cubic-bezier(0.22, 1, 0.36, 1)' }\n );\n }\n\n private barrelRoll(): void {\n const dialog = document.querySelector('.mj-about') as HTMLElement | null;\n dialog?.animate(\n [{ transform: 'rotate(0)' }, { transform: 'rotate(360deg)' }],\n { duration: 900, easing: 'cubic-bezier(0.65, 0, 0.35, 1)' }\n );\n }\n}\n"]}