@memberjunction/ng-explorer-core 5.20.0 → 5.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/lazy-feature-config.d.ts +19 -0
- package/dist/generated/lazy-feature-config.d.ts.map +1 -0
- package/dist/generated/lazy-feature-config.js +143 -0
- package/dist/generated/lazy-feature-config.js.map +1 -0
- package/dist/lib/command-palette/command-palette.component.d.ts +10 -1
- package/dist/lib/command-palette/command-palette.component.d.ts.map +1 -1
- package/dist/lib/command-palette/command-palette.component.js +68 -16
- package/dist/lib/command-palette/command-palette.component.js.map +1 -1
- package/dist/lib/generic/resource-container-component.d.ts +0 -1
- package/dist/lib/generic/resource-container-component.d.ts.map +1 -1
- package/dist/lib/generic/resource-container-component.js +3 -12
- package/dist/lib/generic/resource-container-component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts +4 -0
- package/dist/lib/resource-wrappers/chat-collections-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js +46 -1
- package/dist/lib/resource-wrappers/chat-collections-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts +4 -0
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js +21 -0
- package/dist/lib/resource-wrappers/chat-conversations-resource.component.js.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts +0 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.d.ts.map +1 -1
- package/dist/lib/resource-wrappers/dashboard-resource.component.js +4 -12
- package/dist/lib/resource-wrappers/dashboard-resource.component.js.map +1 -1
- package/dist/lib/services/lazy-module-registry.d.ts +24 -9
- package/dist/lib/services/lazy-module-registry.d.ts.map +1 -1
- package/dist/lib/services/lazy-module-registry.js +32 -13
- package/dist/lib/services/lazy-module-registry.js.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts +23 -1
- package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
- package/dist/lib/shell/components/tabs/tab-container.component.js +205 -43
- package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
- package/dist/lib/shell/shell.component.d.ts +26 -2
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +211 -41
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/user-menu/base-user-menu.d.ts +4 -0
- package/dist/lib/user-menu/base-user-menu.d.ts.map +1 -1
- package/dist/lib/user-menu/base-user-menu.js +26 -0
- package/dist/lib/user-menu/base-user-menu.js.map +1 -1
- package/dist/lib/user-menu/user-menu.types.d.ts +20 -0
- package/dist/lib/user-menu/user-menu.types.d.ts.map +1 -1
- package/dist/lib/user-menu/user-menu.types.js.map +1 -1
- package/dist/public-api.d.ts +1 -1
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +1 -1
- package/dist/public-api.js.map +1 -1
- package/package.json +35 -34
- package/dist/lib/services/lazy-feature-config.d.ts +0 -16
- package/dist/lib/services/lazy-feature-config.d.ts.map +0 -1
- package/dist/lib/services/lazy-feature-config.js +0 -113
- package/dist/lib/services/lazy-feature-config.js.map +0 -1
|
@@ -121,6 +121,10 @@ export declare class BaseUserMenu {
|
|
|
121
121
|
* Handle "Sign Out" click
|
|
122
122
|
*/
|
|
123
123
|
protected Handle_logout(): Promise<UserMenuActionResult>;
|
|
124
|
+
/**
|
|
125
|
+
* Handle "Pin to Home" click - signals the shell to pin the active resource
|
|
126
|
+
*/
|
|
127
|
+
protected Handle_pin_to_home(): Promise<UserMenuActionResult>;
|
|
124
128
|
/**
|
|
125
129
|
* Build menu items for each registered theme plus a 'System' option.
|
|
126
130
|
* Each theme gets a `select-theme-<id>` item ID. The currently active
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-user-menu.d.ts","sourceRoot":"","sources":["../../../src/lib/user-menu/base-user-menu.ts"],"names":[],"mappings":"AACA,OAAO,EACH,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,eAAe,EAElB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,YAAY;IACrB,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAQ;IAClD,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC;;IAUpC;;OAEG;IACU,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE;;OAEG;cACa,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;OAEG;IACI,OAAO,IAAI,IAAI;IAQtB;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,eAAe;IAS9C;;OAEG;IACI,UAAU,IAAI,eAAe;IAIpC;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAQ1D;;;;;;;;OAQG;IACI,YAAY,IAAI,YAAY,EAAE;
|
|
1
|
+
{"version":3,"file":"base-user-menu.d.ts","sourceRoot":"","sources":["../../../src/lib/user-menu/base-user-menu.ts"],"names":[],"mappings":"AACA,OAAO,EACH,YAAY,EACZ,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,eAAe,EAElB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,YAAY;IACrB,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAAQ;IAClD,SAAS,CAAC,QAAQ,EAAE,eAAe,CAAC;;IAUpC;;OAEG;IACU,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhE;;OAEG;cACa,YAAY,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE;;OAEG;IACI,OAAO,IAAI,IAAI;IAQtB;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,eAAe;IAS9C;;OAEG;IACI,UAAU,IAAI,eAAe;IAIpC;;OAEG;IACI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAQ1D;;;;;;;;OAQG;IACI,YAAY,IAAI,YAAY,EAAE;IA8FrC;;;OAGG;IACI,eAAe,IAAI,eAAe,EAAE;IA8B3C;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAUpD;;OAEG;IACH,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;IAe3E;;;OAGG;IACU,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAyB3E;;;OAGG;cACa,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAS9E;;OAEG;cACa,cAAc,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAO/D;;OAEG;cACa,sBAAsB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAUvE;;OAEG;cACa,iBAAiB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAYlE;;OAEG;cACa,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAYrE;;;OAGG;cACa,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAQpF;;OAEG;cACa,mBAAmB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IASpE;;OAEG;cACa,aAAa,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAmB9D;;OAEG;cACa,kBAAkB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAcnE;;;;OAIG;IACH,SAAS,CAAC,mBAAmB,IAAI,YAAY,EAAE;IAwC/C;;;OAGG;IACH,SAAS,CAAC,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM;IAQvE;;OAEG;IACI,kBAAkB,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAexG;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC;;OAEG;IACH,SAAS,KAAK,OAAO,IAAI,eAAe,GAAG,IAAI,CAE9C;IAED;;OAEG;IACI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;CAKhE"}
|
|
@@ -111,6 +111,17 @@ export class BaseUserMenu {
|
|
|
111
111
|
enabled: true,
|
|
112
112
|
tooltip: 'View and edit your profile'
|
|
113
113
|
},
|
|
114
|
+
{
|
|
115
|
+
id: 'pin-to-home',
|
|
116
|
+
label: 'Pin to Home',
|
|
117
|
+
icon: 'fa-solid fa-house-chimney',
|
|
118
|
+
group: 'primary',
|
|
119
|
+
order: 20,
|
|
120
|
+
developerOnly: false,
|
|
121
|
+
visible: true,
|
|
122
|
+
enabled: true,
|
|
123
|
+
tooltip: 'Pin the current resource to your Home dashboard'
|
|
124
|
+
},
|
|
114
125
|
// === DEVELOPER GROUP (Only visible to developers) ===
|
|
115
126
|
{
|
|
116
127
|
id: 'toggle-dev-mode',
|
|
@@ -346,6 +357,21 @@ export class BaseUserMenu {
|
|
|
346
357
|
return { success: true, closeMenu: true };
|
|
347
358
|
}
|
|
348
359
|
// ========================================
|
|
360
|
+
// PIN TO HOME HELPERS
|
|
361
|
+
// ========================================
|
|
362
|
+
/**
|
|
363
|
+
* Handle "Pin to Home" click - signals the shell to pin the active resource
|
|
364
|
+
*/
|
|
365
|
+
async Handle_pin_to_home() {
|
|
366
|
+
// Signal the shell to handle the actual pinning (it has access to DI and the active tab)
|
|
367
|
+
// The shell's handler checks for Home app and duplicate pin conditions
|
|
368
|
+
return {
|
|
369
|
+
success: true,
|
|
370
|
+
closeMenu: true,
|
|
371
|
+
message: 'pin-to-home'
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
// ========================================
|
|
349
375
|
// THEME HELPERS
|
|
350
376
|
// ========================================
|
|
351
377
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-user-menu.js","sourceRoot":"","sources":["../../../src/lib/user-menu/base-user-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from '@memberjunction/global';\nimport {\n UserMenuItem,\n UserMenuElement,\n UserMenuContext,\n UserMenuActionResult,\n UserMenuOptions,\n UserMenuDivider\n} from './user-menu.types';\n\n/**\n * Base class for user menu implementations with built-in default behavior.\n *\n * This class provides the standard MemberJunction user menu. To customize:\n * 1. Create a subclass\n * 2. Register with @RegisterClass(BaseUserMenu)\n * 3. Override methods as needed\n *\n * Subclasses automatically get higher priority via compiler order since they\n * import this class, causing their @RegisterClass to execute after this one.\n *\n * @example\n * ```typescript\n * // In your custom app\n * import { BaseUserMenu } from '@memberjunction/ng-explorer-core';\n *\n * @RegisterClass(BaseUserMenu)\n * export class MyAppUserMenu extends BaseUserMenu {\n * public override GetMenuItems(): UserMenuItem[] {\n * const items = super.GetMenuItems();\n * // Add, remove, or modify items\n * items.push({ id: 'custom', label: 'My Custom Action', ... });\n * return items;\n * }\n *\n * protected override async Handle_custom(): Promise<UserMenuActionResult> {\n * // Handle the custom action\n * return { success: true, closeMenu: true };\n * }\n * }\n * ```\n */\nexport class BaseUserMenu {\n protected _context: UserMenuContext | null = null;\n protected _options: UserMenuOptions;\n\n constructor() {\n this._options = this.GetDefaultOptions();\n }\n\n // ========================================\n // INITIALIZATION\n // ========================================\n\n /**\n * Initialize the menu with context. Called by shell component.\n */\n public async Initialize(context: UserMenuContext): Promise<void> {\n this._context = context;\n await this.OnInitialize(context);\n }\n\n /**\n * Override to perform custom initialization\n */\n protected async OnInitialize(context: UserMenuContext): Promise<void> {\n // Override in subclass for custom initialization\n }\n\n /**\n * Cleanup when menu is destroyed\n */\n public Destroy(): void {\n this._context = null;\n }\n\n // ========================================\n // OPTIONS\n // ========================================\n\n /**\n * Get default menu configuration options\n */\n protected GetDefaultOptions(): UserMenuOptions {\n return {\n showUserName: true,\n showUserEmail: true,\n menuPosition: 'below-left',\n animationStyle: 'fade'\n };\n }\n\n /**\n * Get current menu options\n */\n public GetOptions(): UserMenuOptions {\n return { ...this._options };\n }\n\n /**\n * Update menu options\n */\n public SetOptions(options: Partial<UserMenuOptions>): void {\n this._options = { ...this._options, ...options };\n }\n\n // ========================================\n // MENU ITEMS - Override to customize\n // ========================================\n\n /**\n * Get all menu items. Override to customize the menu structure.\n *\n * Items are grouped by the `group` property with dividers between groups.\n * Groups are rendered in this order: primary, developer, system, danger.\n *\n * Developer-only items are automatically hidden unless the user has\n * Developer role AND developer mode is enabled.\n */\n public GetMenuItems(): UserMenuItem[] {\n const devModeEnabled = this._context?.developerModeEnabled ?? false;\n\n return [\n // === PRIMARY GROUP ===\n {\n id: 'profile',\n label: 'My Profile',\n icon: 'fa-solid fa-user-circle',\n group: 'primary',\n order: 10,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: 'View and edit your profile'\n },\n\n // === DEVELOPER GROUP (Only visible to developers) ===\n {\n id: 'toggle-dev-mode',\n label: devModeEnabled ? 'Developer Mode (On)' : 'Developer Mode (Off)',\n icon: devModeEnabled ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off',\n color: devModeEnabled ? '#4CAF50' : undefined,\n group: 'developer',\n order: 10,\n developerOnly: true,\n visible: true,\n enabled: true,\n tooltip: 'Toggle developer tools visibility'\n },\n {\n id: 'log-layout',\n label: 'Log Layout (Debug)',\n icon: 'fa-solid fa-terminal',\n group: 'developer',\n order: 20,\n developerOnly: true,\n visible: devModeEnabled,\n enabled: true,\n tooltip: 'Output current layout configuration to console'\n },\n {\n id: 'inspect-state',\n label: 'Inspect App State',\n icon: 'fa-solid fa-magnifying-glass-chart',\n group: 'developer',\n order: 30,\n developerOnly: true,\n visible: devModeEnabled,\n enabled: true,\n tooltip: 'View current application state in console'\n },\n\n // === SYSTEM GROUP (Theme selection) ===\n ...this.BuildThemeMenuItems(),\n {\n id: 'reset-layout',\n label: 'Reset Layout',\n icon: 'fa-solid fa-rotate-left',\n group: 'system',\n order: 10,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: 'Reset workspace to default layout'\n },\n\n // === DANGER GROUP ===\n {\n id: 'logout',\n label: 'Sign Out',\n icon: 'fa-solid fa-sign-out-alt',\n color: '#c62828',\n cssClass: 'danger',\n group: 'danger',\n order: 100,\n developerOnly: false,\n visible: true,\n enabled: true\n }\n ];\n }\n\n /**\n * Get the complete menu element list including dividers between groups.\n * This is called by the template to render the menu.\n */\n public GetMenuElements(): UserMenuElement[] {\n const items = this.GetMenuItems();\n const visibleItems = items.filter(item => this.IsItemVisible(item));\n\n // Group items\n const groups = this.GroupItems(visibleItems);\n const elements: UserMenuElement[] = [];\n\n // Define group order\n const groupOrder = ['primary', 'developer', 'system', 'danger'];\n const sortedGroupKeys = Object.keys(groups).sort((a, b) => {\n const aIndex = groupOrder.indexOf(a);\n const bIndex = groupOrder.indexOf(b);\n return (aIndex === -1 ? 999 : aIndex) - (bIndex === -1 ? 999 : bIndex);\n });\n\n // Build element list with dividers\n sortedGroupKeys.forEach((group, index) => {\n if (index > 0) {\n elements.push({ type: 'divider', group } as UserMenuDivider);\n }\n\n // Sort items within group by order\n const groupItems = groups[group].sort((a, b) => a.order - b.order);\n elements.push(...groupItems);\n });\n\n return elements;\n }\n\n /**\n * Check if a menu item should be visible based on current context\n */\n protected IsItemVisible(item: UserMenuItem): boolean {\n // Check developer-only visibility\n if (item.developerOnly && !this._context?.isDeveloper) {\n return false;\n }\n\n // Check item's own visible flag\n return item.visible;\n }\n\n /**\n * Group items by their group property\n */\n protected GroupItems(items: UserMenuItem[]): Record<string, UserMenuItem[]> {\n return items.reduce((groups, item) => {\n const group = item.group || 'primary';\n if (!groups[group]) {\n groups[group] = [];\n }\n groups[group].push(item);\n return groups;\n }, {} as Record<string, UserMenuItem[]>);\n }\n\n // ========================================\n // CLICK HANDLING\n // ========================================\n\n /**\n * Handle menu item click. Dispatches to specific Handle_<id> methods.\n * Theme selection items (select-theme-*) are routed to HandleThemeSelection.\n */\n public async HandleItemClick(itemId: string): Promise<UserMenuActionResult> {\n const items = this.GetMenuItems();\n const item = items.find(i => i.id === itemId);\n\n if (!item || !item.enabled) {\n return { success: false, closeMenu: false, message: 'Item not found or disabled' };\n }\n\n // Route theme selection items to the theme handler\n if (itemId.startsWith('select-theme-')) {\n const themeId = itemId.substring('select-theme-'.length);\n return await this.HandleThemeSelection(themeId);\n }\n\n // Convert item id to handler method name (e.g., 'toggle-dev-mode' -> 'Handle_toggle_dev_mode')\n const handlerName = `Handle_${itemId.replace(/-/g, '_')}` as keyof this;\n\n if (typeof this[handlerName] === 'function') {\n return await (this[handlerName] as () => Promise<UserMenuActionResult>).call(this);\n }\n\n // Fall back to generic handler\n return await this.OnItemClick(item);\n }\n\n /**\n * Generic click handler for items without specific handlers.\n * Override for custom default behavior.\n */\n protected async OnItemClick(item: UserMenuItem): Promise<UserMenuActionResult> {\n console.warn(`No handler defined for menu item: ${item.id}`);\n return { success: false, closeMenu: true };\n }\n\n // ========================================\n // DEFAULT HANDLERS - Override to customize\n // ========================================\n\n /**\n * Handle \"My Profile\" click - Opens user profile/settings\n */\n protected async Handle_profile(): Promise<UserMenuActionResult> {\n if (this._context?.openSettings) {\n this._context.openSettings();\n }\n return { success: true, closeMenu: true };\n }\n\n /**\n * Handle \"Toggle Developer Mode\" click\n */\n protected async Handle_toggle_dev_mode(): Promise<UserMenuActionResult> {\n // This will be handled by the shell component which has access to DeveloperModeService\n // The result signals that the menu should refresh to show the updated state\n return {\n success: true,\n closeMenu: false, // Keep menu open to see updated state\n message: 'toggle-dev-mode' // Special signal for shell to handle\n };\n }\n\n /**\n * Handle \"Log Layout\" click - Debug utility\n */\n protected async Handle_log_layout(): Promise<UserMenuActionResult> {\n if (!this._context?.workspaceManager) {\n return { success: false, closeMenu: true, message: 'Workspace manager not available' };\n }\n\n const config = this._context.workspaceManager.GetConfiguration();\n console.log('📋 Workspace Configuration:', JSON.stringify(config, null, 2));\n console.log('📋 Workspace Configuration (object):', config);\n\n return { success: true, closeMenu: true };\n }\n\n /**\n * Handle \"Inspect App State\" click - Debug utility\n */\n protected async Handle_inspect_state(): Promise<UserMenuActionResult> {\n console.group('🔍 Application State Inspection');\n console.log('User:', this._context?.userEntity);\n console.log('Current App:', this._context?.currentApplication);\n console.log('Developer Mode:', this._context?.developerModeEnabled);\n console.log('Is Developer:', this._context?.isDeveloper);\n console.log('Workspace Config:', this._context?.workspaceManager?.GetConfiguration());\n console.groupEnd();\n\n return { success: true, closeMenu: true };\n }\n\n /**\n * Handle theme selection clicks.\n * Item IDs follow the pattern 'select-theme-<themeId>'.\n */\n protected async HandleThemeSelection(themeId: string): Promise<UserMenuActionResult> {\n return {\n success: true,\n closeMenu: false, // Keep menu open to see updated state\n message: `select-theme-${themeId}` // Signal for shell to handle\n };\n }\n\n /**\n * Handle \"Reset Layout\" click\n */\n protected async Handle_reset_layout(): Promise<UserMenuActionResult> {\n // Signal to shell to handle reset layout\n return {\n success: true,\n closeMenu: true,\n message: 'reset-layout' // Special signal for shell to handle\n };\n }\n\n /**\n * Handle \"Sign Out\" click\n */\n protected async Handle_logout(): Promise<UserMenuActionResult> {\n if (!this._context?.authService) {\n return { success: false, closeMenu: true, message: 'Auth service not available' };\n }\n\n // Clear auth data\n localStorage.removeItem('auth');\n localStorage.removeItem('claims');\n\n // Call logout\n await this._context.authService.logout();\n\n return { success: true, closeMenu: true };\n }\n\n // ========================================\n // THEME HELPERS\n // ========================================\n\n /**\n * Build menu items for each registered theme plus a 'System' option.\n * Each theme gets a `select-theme-<id>` item ID. The currently active\n * theme (or 'system' preference) shows a checkmark icon.\n */\n protected BuildThemeMenuItems(): UserMenuItem[] {\n const themes = this._context?.availableThemes ?? [];\n const currentPreference = this._context?.themePreference ?? 'system';\n const items: UserMenuItem[] = [];\n let order = 1;\n\n for (const theme of themes) {\n const isActive = currentPreference === theme.Id;\n items.push({\n id: `select-theme-${theme.Id}`,\n label: theme.Name,\n icon: isActive ? 'fa-solid fa-check' : this.GetThemeIconForBaseTheme(theme.BaseTheme),\n color: isActive ? '#4CAF50' : undefined,\n group: 'system',\n order: order++,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: theme.Description ?? `Switch to ${theme.Name} theme`\n });\n }\n\n // Always add a 'System' option (auto-detect OS preference)\n const isSystemActive = currentPreference === 'system';\n items.push({\n id: 'select-theme-system',\n label: 'System',\n icon: isSystemActive ? 'fa-solid fa-check' : 'fa-solid fa-desktop',\n color: isSystemActive ? '#4CAF50' : undefined,\n group: 'system',\n order: order++,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: 'Auto-detect theme from OS preference'\n });\n\n return items;\n }\n\n /**\n * Get an appropriate icon for a base theme type.\n * Used for non-active theme items to hint at light vs dark.\n */\n protected GetThemeIconForBaseTheme(baseTheme: 'light' | 'dark'): string {\n return baseTheme === 'dark' ? 'fa-solid fa-moon' : 'fa-solid fa-sun';\n }\n\n // ========================================\n // UTILITY METHODS\n // ========================================\n\n /**\n * Get user display information for menu header\n */\n public GetUserDisplayInfo(): { name: string; email: string; avatarUrl: string | null; initials: string } {\n const user = this._context?.userEntity;\n const name = user?.Name || this._context?.user?.Name || 'User';\n const email = user?.Email || '';\n const avatarUrl = user?.UserImageURL || null;\n\n // Generate initials from name\n const nameParts = name.split(' ').filter(Boolean);\n const initials = nameParts.length >= 2\n ? `${nameParts[0][0]}${nameParts[nameParts.length - 1][0]}`.toUpperCase()\n : name.substring(0, 2).toUpperCase();\n\n return { name, email, avatarUrl, initials };\n }\n\n /**\n * Generate a unique tab ID\n */\n protected GenerateTabId(): string {\n return `tab-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Get the current context (for subclasses)\n */\n protected get Context(): UserMenuContext | null {\n return this._context;\n }\n\n /**\n * Update context (called by shell when developer mode changes)\n */\n public UpdateContext(updates: Partial<UserMenuContext>): void {\n if (this._context) {\n this._context = { ...this._context, ...updates };\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"base-user-menu.js","sourceRoot":"","sources":["../../../src/lib/user-menu/base-user-menu.ts"],"names":[],"mappings":"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","sourcesContent":["import { RegisterClass } from '@memberjunction/global';\nimport {\n UserMenuItem,\n UserMenuElement,\n UserMenuContext,\n UserMenuActionResult,\n UserMenuOptions,\n UserMenuDivider\n} from './user-menu.types';\n\n/**\n * Base class for user menu implementations with built-in default behavior.\n *\n * This class provides the standard MemberJunction user menu. To customize:\n * 1. Create a subclass\n * 2. Register with @RegisterClass(BaseUserMenu)\n * 3. Override methods as needed\n *\n * Subclasses automatically get higher priority via compiler order since they\n * import this class, causing their @RegisterClass to execute after this one.\n *\n * @example\n * ```typescript\n * // In your custom app\n * import { BaseUserMenu } from '@memberjunction/ng-explorer-core';\n *\n * @RegisterClass(BaseUserMenu)\n * export class MyAppUserMenu extends BaseUserMenu {\n * public override GetMenuItems(): UserMenuItem[] {\n * const items = super.GetMenuItems();\n * // Add, remove, or modify items\n * items.push({ id: 'custom', label: 'My Custom Action', ... });\n * return items;\n * }\n *\n * protected override async Handle_custom(): Promise<UserMenuActionResult> {\n * // Handle the custom action\n * return { success: true, closeMenu: true };\n * }\n * }\n * ```\n */\nexport class BaseUserMenu {\n protected _context: UserMenuContext | null = null;\n protected _options: UserMenuOptions;\n\n constructor() {\n this._options = this.GetDefaultOptions();\n }\n\n // ========================================\n // INITIALIZATION\n // ========================================\n\n /**\n * Initialize the menu with context. Called by shell component.\n */\n public async Initialize(context: UserMenuContext): Promise<void> {\n this._context = context;\n await this.OnInitialize(context);\n }\n\n /**\n * Override to perform custom initialization\n */\n protected async OnInitialize(context: UserMenuContext): Promise<void> {\n // Override in subclass for custom initialization\n }\n\n /**\n * Cleanup when menu is destroyed\n */\n public Destroy(): void {\n this._context = null;\n }\n\n // ========================================\n // OPTIONS\n // ========================================\n\n /**\n * Get default menu configuration options\n */\n protected GetDefaultOptions(): UserMenuOptions {\n return {\n showUserName: true,\n showUserEmail: true,\n menuPosition: 'below-left',\n animationStyle: 'fade'\n };\n }\n\n /**\n * Get current menu options\n */\n public GetOptions(): UserMenuOptions {\n return { ...this._options };\n }\n\n /**\n * Update menu options\n */\n public SetOptions(options: Partial<UserMenuOptions>): void {\n this._options = { ...this._options, ...options };\n }\n\n // ========================================\n // MENU ITEMS - Override to customize\n // ========================================\n\n /**\n * Get all menu items. Override to customize the menu structure.\n *\n * Items are grouped by the `group` property with dividers between groups.\n * Groups are rendered in this order: primary, developer, system, danger.\n *\n * Developer-only items are automatically hidden unless the user has\n * Developer role AND developer mode is enabled.\n */\n public GetMenuItems(): UserMenuItem[] {\n const devModeEnabled = this._context?.developerModeEnabled ?? false;\n\n return [\n // === PRIMARY GROUP ===\n {\n id: 'profile',\n label: 'My Profile',\n icon: 'fa-solid fa-user-circle',\n group: 'primary',\n order: 10,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: 'View and edit your profile'\n },\n {\n id: 'pin-to-home',\n label: 'Pin to Home',\n icon: 'fa-solid fa-house-chimney',\n group: 'primary',\n order: 20,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: 'Pin the current resource to your Home dashboard'\n },\n\n // === DEVELOPER GROUP (Only visible to developers) ===\n {\n id: 'toggle-dev-mode',\n label: devModeEnabled ? 'Developer Mode (On)' : 'Developer Mode (Off)',\n icon: devModeEnabled ? 'fa-solid fa-toggle-on' : 'fa-solid fa-toggle-off',\n color: devModeEnabled ? '#4CAF50' : undefined,\n group: 'developer',\n order: 10,\n developerOnly: true,\n visible: true,\n enabled: true,\n tooltip: 'Toggle developer tools visibility'\n },\n {\n id: 'log-layout',\n label: 'Log Layout (Debug)',\n icon: 'fa-solid fa-terminal',\n group: 'developer',\n order: 20,\n developerOnly: true,\n visible: devModeEnabled,\n enabled: true,\n tooltip: 'Output current layout configuration to console'\n },\n {\n id: 'inspect-state',\n label: 'Inspect App State',\n icon: 'fa-solid fa-magnifying-glass-chart',\n group: 'developer',\n order: 30,\n developerOnly: true,\n visible: devModeEnabled,\n enabled: true,\n tooltip: 'View current application state in console'\n },\n\n // === SYSTEM GROUP (Theme selection) ===\n ...this.BuildThemeMenuItems(),\n {\n id: 'reset-layout',\n label: 'Reset Layout',\n icon: 'fa-solid fa-rotate-left',\n group: 'system',\n order: 10,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: 'Reset workspace to default layout'\n },\n\n // === DANGER GROUP ===\n {\n id: 'logout',\n label: 'Sign Out',\n icon: 'fa-solid fa-sign-out-alt',\n color: '#c62828',\n cssClass: 'danger',\n group: 'danger',\n order: 100,\n developerOnly: false,\n visible: true,\n enabled: true\n }\n ];\n }\n\n /**\n * Get the complete menu element list including dividers between groups.\n * This is called by the template to render the menu.\n */\n public GetMenuElements(): UserMenuElement[] {\n const items = this.GetMenuItems();\n const visibleItems = items.filter(item => this.IsItemVisible(item));\n\n // Group items\n const groups = this.GroupItems(visibleItems);\n const elements: UserMenuElement[] = [];\n\n // Define group order\n const groupOrder = ['primary', 'developer', 'system', 'danger'];\n const sortedGroupKeys = Object.keys(groups).sort((a, b) => {\n const aIndex = groupOrder.indexOf(a);\n const bIndex = groupOrder.indexOf(b);\n return (aIndex === -1 ? 999 : aIndex) - (bIndex === -1 ? 999 : bIndex);\n });\n\n // Build element list with dividers\n sortedGroupKeys.forEach((group, index) => {\n if (index > 0) {\n elements.push({ type: 'divider', group } as UserMenuDivider);\n }\n\n // Sort items within group by order\n const groupItems = groups[group].sort((a, b) => a.order - b.order);\n elements.push(...groupItems);\n });\n\n return elements;\n }\n\n /**\n * Check if a menu item should be visible based on current context\n */\n protected IsItemVisible(item: UserMenuItem): boolean {\n // Check developer-only visibility\n if (item.developerOnly && !this._context?.isDeveloper) {\n return false;\n }\n\n // Check item's own visible flag\n return item.visible;\n }\n\n /**\n * Group items by their group property\n */\n protected GroupItems(items: UserMenuItem[]): Record<string, UserMenuItem[]> {\n return items.reduce((groups, item) => {\n const group = item.group || 'primary';\n if (!groups[group]) {\n groups[group] = [];\n }\n groups[group].push(item);\n return groups;\n }, {} as Record<string, UserMenuItem[]>);\n }\n\n // ========================================\n // CLICK HANDLING\n // ========================================\n\n /**\n * Handle menu item click. Dispatches to specific Handle_<id> methods.\n * Theme selection items (select-theme-*) are routed to HandleThemeSelection.\n */\n public async HandleItemClick(itemId: string): Promise<UserMenuActionResult> {\n const items = this.GetMenuItems();\n const item = items.find(i => i.id === itemId);\n\n if (!item || !item.enabled) {\n return { success: false, closeMenu: false, message: 'Item not found or disabled' };\n }\n\n // Route theme selection items to the theme handler\n if (itemId.startsWith('select-theme-')) {\n const themeId = itemId.substring('select-theme-'.length);\n return await this.HandleThemeSelection(themeId);\n }\n\n // Convert item id to handler method name (e.g., 'toggle-dev-mode' -> 'Handle_toggle_dev_mode')\n const handlerName = `Handle_${itemId.replace(/-/g, '_')}` as keyof this;\n\n if (typeof this[handlerName] === 'function') {\n return await (this[handlerName] as () => Promise<UserMenuActionResult>).call(this);\n }\n\n // Fall back to generic handler\n return await this.OnItemClick(item);\n }\n\n /**\n * Generic click handler for items without specific handlers.\n * Override for custom default behavior.\n */\n protected async OnItemClick(item: UserMenuItem): Promise<UserMenuActionResult> {\n console.warn(`No handler defined for menu item: ${item.id}`);\n return { success: false, closeMenu: true };\n }\n\n // ========================================\n // DEFAULT HANDLERS - Override to customize\n // ========================================\n\n /**\n * Handle \"My Profile\" click - Opens user profile/settings\n */\n protected async Handle_profile(): Promise<UserMenuActionResult> {\n if (this._context?.openSettings) {\n this._context.openSettings();\n }\n return { success: true, closeMenu: true };\n }\n\n /**\n * Handle \"Toggle Developer Mode\" click\n */\n protected async Handle_toggle_dev_mode(): Promise<UserMenuActionResult> {\n // This will be handled by the shell component which has access to DeveloperModeService\n // The result signals that the menu should refresh to show the updated state\n return {\n success: true,\n closeMenu: false, // Keep menu open to see updated state\n message: 'toggle-dev-mode' // Special signal for shell to handle\n };\n }\n\n /**\n * Handle \"Log Layout\" click - Debug utility\n */\n protected async Handle_log_layout(): Promise<UserMenuActionResult> {\n if (!this._context?.workspaceManager) {\n return { success: false, closeMenu: true, message: 'Workspace manager not available' };\n }\n\n const config = this._context.workspaceManager.GetConfiguration();\n console.log('📋 Workspace Configuration:', JSON.stringify(config, null, 2));\n console.log('📋 Workspace Configuration (object):', config);\n\n return { success: true, closeMenu: true };\n }\n\n /**\n * Handle \"Inspect App State\" click - Debug utility\n */\n protected async Handle_inspect_state(): Promise<UserMenuActionResult> {\n console.group('🔍 Application State Inspection');\n console.log('User:', this._context?.userEntity);\n console.log('Current App:', this._context?.currentApplication);\n console.log('Developer Mode:', this._context?.developerModeEnabled);\n console.log('Is Developer:', this._context?.isDeveloper);\n console.log('Workspace Config:', this._context?.workspaceManager?.GetConfiguration());\n console.groupEnd();\n\n return { success: true, closeMenu: true };\n }\n\n /**\n * Handle theme selection clicks.\n * Item IDs follow the pattern 'select-theme-<themeId>'.\n */\n protected async HandleThemeSelection(themeId: string): Promise<UserMenuActionResult> {\n return {\n success: true,\n closeMenu: false, // Keep menu open to see updated state\n message: `select-theme-${themeId}` // Signal for shell to handle\n };\n }\n\n /**\n * Handle \"Reset Layout\" click\n */\n protected async Handle_reset_layout(): Promise<UserMenuActionResult> {\n // Signal to shell to handle reset layout\n return {\n success: true,\n closeMenu: true,\n message: 'reset-layout' // Special signal for shell to handle\n };\n }\n\n /**\n * Handle \"Sign Out\" click\n */\n protected async Handle_logout(): Promise<UserMenuActionResult> {\n if (!this._context?.authService) {\n return { success: false, closeMenu: true, message: 'Auth service not available' };\n }\n\n // Clear auth data\n localStorage.removeItem('auth');\n localStorage.removeItem('claims');\n\n // Call logout\n await this._context.authService.logout();\n\n return { success: true, closeMenu: true };\n }\n\n // ========================================\n // PIN TO HOME HELPERS\n // ========================================\n\n /**\n * Handle \"Pin to Home\" click - signals the shell to pin the active resource\n */\n protected async Handle_pin_to_home(): Promise<UserMenuActionResult> {\n // Signal the shell to handle the actual pinning (it has access to DI and the active tab)\n // The shell's handler checks for Home app and duplicate pin conditions\n return {\n success: true,\n closeMenu: true,\n message: 'pin-to-home'\n };\n }\n\n // ========================================\n // THEME HELPERS\n // ========================================\n\n /**\n * Build menu items for each registered theme plus a 'System' option.\n * Each theme gets a `select-theme-<id>` item ID. The currently active\n * theme (or 'system' preference) shows a checkmark icon.\n */\n protected BuildThemeMenuItems(): UserMenuItem[] {\n const themes = this._context?.availableThemes ?? [];\n const currentPreference = this._context?.themePreference ?? 'system';\n const items: UserMenuItem[] = [];\n let order = 1;\n\n for (const theme of themes) {\n const isActive = currentPreference === theme.Id;\n items.push({\n id: `select-theme-${theme.Id}`,\n label: theme.Name,\n icon: isActive ? 'fa-solid fa-check' : this.GetThemeIconForBaseTheme(theme.BaseTheme),\n color: isActive ? '#4CAF50' : undefined,\n group: 'system',\n order: order++,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: theme.Description ?? `Switch to ${theme.Name} theme`\n });\n }\n\n // Always add a 'System' option (auto-detect OS preference)\n const isSystemActive = currentPreference === 'system';\n items.push({\n id: 'select-theme-system',\n label: 'System',\n icon: isSystemActive ? 'fa-solid fa-check' : 'fa-solid fa-desktop',\n color: isSystemActive ? '#4CAF50' : undefined,\n group: 'system',\n order: order++,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: 'Auto-detect theme from OS preference'\n });\n\n return items;\n }\n\n /**\n * Get an appropriate icon for a base theme type.\n * Used for non-active theme items to hint at light vs dark.\n */\n protected GetThemeIconForBaseTheme(baseTheme: 'light' | 'dark'): string {\n return baseTheme === 'dark' ? 'fa-solid fa-moon' : 'fa-solid fa-sun';\n }\n\n // ========================================\n // UTILITY METHODS\n // ========================================\n\n /**\n * Get user display information for menu header\n */\n public GetUserDisplayInfo(): { name: string; email: string; avatarUrl: string | null; initials: string } {\n const user = this._context?.userEntity;\n const name = user?.Name || this._context?.user?.Name || 'User';\n const email = user?.Email || '';\n const avatarUrl = user?.UserImageURL || null;\n\n // Generate initials from name\n const nameParts = name.split(' ').filter(Boolean);\n const initials = nameParts.length >= 2\n ? `${nameParts[0][0]}${nameParts[nameParts.length - 1][0]}`.toUpperCase()\n : name.substring(0, 2).toUpperCase();\n\n return { name, email, avatarUrl, initials };\n }\n\n /**\n * Generate a unique tab ID\n */\n protected GenerateTabId(): string {\n return `tab-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n /**\n * Get the current context (for subclasses)\n */\n protected get Context(): UserMenuContext | null {\n return this._context;\n }\n\n /**\n * Update context (called by shell when developer mode changes)\n */\n public UpdateContext(updates: Partial<UserMenuContext>): void {\n if (this._context) {\n this._context = { ...this._context, ...updates };\n }\n }\n}\n"]}
|
|
@@ -58,11 +58,29 @@ export interface ApplicationInfoRef {
|
|
|
58
58
|
Name: string;
|
|
59
59
|
[key: string]: unknown;
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Minimal tab info exposed to user menu (avoids importing full WorkspaceTab)
|
|
63
|
+
*/
|
|
64
|
+
export interface WorkspaceTabRef {
|
|
65
|
+
id: string;
|
|
66
|
+
title: string;
|
|
67
|
+
applicationId: string;
|
|
68
|
+
resourceTypeId: string;
|
|
69
|
+
configuration: Record<string, unknown>;
|
|
70
|
+
}
|
|
61
71
|
/**
|
|
62
72
|
* Interface for workspace manager operations needed by user menu
|
|
63
73
|
*/
|
|
64
74
|
export interface WorkspaceManagerRef {
|
|
65
75
|
GetConfiguration: () => unknown;
|
|
76
|
+
GetActiveTabId?: () => string | null;
|
|
77
|
+
GetTab?: (tabId: string) => WorkspaceTabRef | undefined;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Interface for pin service operations needed by user menu
|
|
81
|
+
*/
|
|
82
|
+
export interface PinServiceRef {
|
|
83
|
+
IsPinned: (resourceType: string, config: Record<string, unknown>) => boolean;
|
|
66
84
|
}
|
|
67
85
|
/**
|
|
68
86
|
* Interface for auth service operations needed by user menu
|
|
@@ -92,6 +110,8 @@ export interface UserMenuContext {
|
|
|
92
110
|
workspaceManager: WorkspaceManagerRef;
|
|
93
111
|
/** Auth service for logout operations */
|
|
94
112
|
authService: AuthServiceRef;
|
|
113
|
+
/** Pin service for Home dashboard pinning */
|
|
114
|
+
pinService?: PinServiceRef;
|
|
95
115
|
/** Function to open settings dialog */
|
|
96
116
|
openSettings: () => void;
|
|
97
117
|
/** Current theme preference (theme ID or 'system') */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-menu.types.d.ts","sourceRoot":"","sources":["../../../src/lib/user-menu/user-menu.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,YAAY;IACzB,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IAEX,qCAAqC;IACrC,KAAK,EAAE,MAAM,CAAC;IAEd,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IAEb,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,yFAAyF;IACzF,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAE9D,uDAAuD;IACvD,KAAK,EAAE,MAAM,CAAC;IAEd,yDAAyD;IACzD,aAAa,EAAE,OAAO,CAAC;IAEvB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IAEjB,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IAEjB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,eAAe,CAAC;AAE7D;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,IAAI,eAAe,CAEtF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,IAAI,YAAY,CAEhF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,gBAAgB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"user-menu.types.d.ts","sourceRoot":"","sources":["../../../src/lib/user-menu/user-menu.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-menu.types.js","sourceRoot":"","sources":["../../../src/lib/user-menu/user-menu.types.ts"],"names":[],"mappings":"AA2DA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACtD,OAAO,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACnD,OAAO,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { ViewContainerRef } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJUserEntity } from '@memberjunction/core-entities';\nimport type { ThemeDefinition } from '@memberjunction/ng-shared-generic';\n\n/**\n * Defines a single menu item in the user context menu\n */\nexport interface UserMenuItem {\n /** Unique identifier for the menu item */\n id: string;\n\n /** Display text for the menu item */\n label: string;\n\n /** Font Awesome icon class (e.g., 'fa-solid fa-gear') */\n icon: string;\n\n /** Optional icon/text color (CSS color value) */\n color?: string;\n\n /** Optional CSS class for custom styling */\n cssClass?: string;\n\n /** Group ID for organizing items (items with same group have dividers between groups) */\n group: 'primary' | 'developer' | 'system' | 'danger' | string;\n\n /** Sort order within group (lower = higher in menu) */\n order: number;\n\n /** Whether item requires Developer role to be visible */\n developerOnly: boolean;\n\n /** Whether the item is currently visible (dynamic control) */\n visible: boolean;\n\n /** Whether the item is currently enabled/clickable */\n enabled: boolean;\n\n /** Optional tooltip text */\n tooltip?: string;\n\n /** Optional keyboard shortcut hint */\n shortcut?: string;\n}\n\n/**\n * Defines a separator/divider in the menu\n */\nexport interface UserMenuDivider {\n type: 'divider';\n group: string;\n}\n\n/**\n * Union type for all menu element types\n */\nexport type UserMenuElement = UserMenuItem | UserMenuDivider;\n\n/**\n * Type guard to check if element is a divider\n */\nexport function isUserMenuDivider(element: UserMenuElement): element is UserMenuDivider {\n return 'type' in element && element.type === 'divider';\n}\n\n/**\n * Type guard to check if element is a menu item\n */\nexport function isUserMenuItem(element: UserMenuElement): element is UserMenuItem {\n return !('type' in element);\n}\n\n/**\n * Minimal application info needed by user menu\n */\nexport interface ApplicationInfoRef {\n ID: string;\n Name: string;\n [key: string]: unknown;\n}\n\n/**\n * Interface for workspace manager operations needed by user menu\n */\nexport interface WorkspaceManagerRef {\n GetConfiguration: () => unknown;\n}\n\n/**\n * Interface for auth service operations needed by user menu\n */\nexport interface AuthServiceRef {\n logout: () => void | Promise<void>;\n}\n\n/**\n * Context passed to menu handlers\n */\nexport interface UserMenuContext {\n /** Current authenticated user info */\n user: UserInfo;\n\n /** Full user entity with all fields */\n userEntity: MJUserEntity;\n\n /** Reference to shell component for advanced operations */\n shell: Record<string, unknown>;\n\n /** View container for opening dialogs/modals */\n viewContainerRef: ViewContainerRef;\n\n /** Whether user has Developer role */\n isDeveloper: boolean;\n\n /** Whether developer mode is currently enabled (can be toggled) */\n developerModeEnabled: boolean;\n\n /** Current application context */\n currentApplication: ApplicationInfoRef | null;\n\n /** Workspace manager for layout operations */\n workspaceManager: WorkspaceManagerRef;\n\n /** Auth service for logout operations */\n authService: AuthServiceRef;\n\n /** Function to open settings dialog */\n openSettings: () => void;\n\n /** Current theme preference (theme ID or 'system') */\n themePreference?: string;\n\n /** All registered theme definitions, for building theme picker menus */\n availableThemes?: ThemeDefinition[];\n\n /** Currently applied theme ID (resolved, never 'system') */\n appliedTheme?: string;\n}\n\n/**\n * Result of a menu item click handler\n */\nexport interface UserMenuActionResult {\n /** Whether the action succeeded */\n success: boolean;\n\n /** Whether to close the menu after action */\n closeMenu: boolean;\n\n /** Optional message to display (toast notification) */\n message?: string;\n}\n\n/**\n * Options for menu configuration\n */\nexport interface UserMenuOptions {\n /** Whether to show the user name in menu header */\n showUserName: boolean;\n\n /** Whether to show the user email in menu header */\n showUserEmail: boolean;\n\n /** Menu position relative to avatar */\n menuPosition: 'below-left' | 'below-right';\n\n /** Animation style for menu opening */\n animationStyle: 'fade' | 'slide' | 'none';\n}\n"]}
|
|
1
|
+
{"version":3,"file":"user-menu.types.js","sourceRoot":"","sources":["../../../src/lib/user-menu/user-menu.types.ts"],"names":[],"mappings":"AA2DA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAwB;IACtD,OAAO,MAAM,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,OAAwB;IACnD,OAAO,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { ViewContainerRef } from '@angular/core';\nimport { UserInfo } from '@memberjunction/core';\nimport { MJUserEntity } from '@memberjunction/core-entities';\nimport type { ThemeDefinition } from '@memberjunction/ng-shared-generic';\n\n/**\n * Defines a single menu item in the user context menu\n */\nexport interface UserMenuItem {\n /** Unique identifier for the menu item */\n id: string;\n\n /** Display text for the menu item */\n label: string;\n\n /** Font Awesome icon class (e.g., 'fa-solid fa-gear') */\n icon: string;\n\n /** Optional icon/text color (CSS color value) */\n color?: string;\n\n /** Optional CSS class for custom styling */\n cssClass?: string;\n\n /** Group ID for organizing items (items with same group have dividers between groups) */\n group: 'primary' | 'developer' | 'system' | 'danger' | string;\n\n /** Sort order within group (lower = higher in menu) */\n order: number;\n\n /** Whether item requires Developer role to be visible */\n developerOnly: boolean;\n\n /** Whether the item is currently visible (dynamic control) */\n visible: boolean;\n\n /** Whether the item is currently enabled/clickable */\n enabled: boolean;\n\n /** Optional tooltip text */\n tooltip?: string;\n\n /** Optional keyboard shortcut hint */\n shortcut?: string;\n}\n\n/**\n * Defines a separator/divider in the menu\n */\nexport interface UserMenuDivider {\n type: 'divider';\n group: string;\n}\n\n/**\n * Union type for all menu element types\n */\nexport type UserMenuElement = UserMenuItem | UserMenuDivider;\n\n/**\n * Type guard to check if element is a divider\n */\nexport function isUserMenuDivider(element: UserMenuElement): element is UserMenuDivider {\n return 'type' in element && element.type === 'divider';\n}\n\n/**\n * Type guard to check if element is a menu item\n */\nexport function isUserMenuItem(element: UserMenuElement): element is UserMenuItem {\n return !('type' in element);\n}\n\n/**\n * Minimal application info needed by user menu\n */\nexport interface ApplicationInfoRef {\n ID: string;\n Name: string;\n [key: string]: unknown;\n}\n\n/**\n * Minimal tab info exposed to user menu (avoids importing full WorkspaceTab)\n */\nexport interface WorkspaceTabRef {\n id: string;\n title: string;\n applicationId: string;\n resourceTypeId: string;\n configuration: Record<string, unknown>;\n}\n\n/**\n * Interface for workspace manager operations needed by user menu\n */\nexport interface WorkspaceManagerRef {\n GetConfiguration: () => unknown;\n GetActiveTabId?: () => string | null;\n GetTab?: (tabId: string) => WorkspaceTabRef | undefined;\n}\n\n/**\n * Interface for pin service operations needed by user menu\n */\nexport interface PinServiceRef {\n IsPinned: (resourceType: string, config: Record<string, unknown>) => boolean;\n}\n\n/**\n * Interface for auth service operations needed by user menu\n */\nexport interface AuthServiceRef {\n logout: () => void | Promise<void>;\n}\n\n/**\n * Context passed to menu handlers\n */\nexport interface UserMenuContext {\n /** Current authenticated user info */\n user: UserInfo;\n\n /** Full user entity with all fields */\n userEntity: MJUserEntity;\n\n /** Reference to shell component for advanced operations */\n shell: Record<string, unknown>;\n\n /** View container for opening dialogs/modals */\n viewContainerRef: ViewContainerRef;\n\n /** Whether user has Developer role */\n isDeveloper: boolean;\n\n /** Whether developer mode is currently enabled (can be toggled) */\n developerModeEnabled: boolean;\n\n /** Current application context */\n currentApplication: ApplicationInfoRef | null;\n\n /** Workspace manager for layout operations */\n workspaceManager: WorkspaceManagerRef;\n\n /** Auth service for logout operations */\n authService: AuthServiceRef;\n\n /** Pin service for Home dashboard pinning */\n pinService?: PinServiceRef;\n\n /** Function to open settings dialog */\n openSettings: () => void;\n\n /** Current theme preference (theme ID or 'system') */\n themePreference?: string;\n\n /** All registered theme definitions, for building theme picker menus */\n availableThemes?: ThemeDefinition[];\n\n /** Currently applied theme ID (resolved, never 'system') */\n appliedTheme?: string;\n}\n\n/**\n * Result of a menu item click handler\n */\nexport interface UserMenuActionResult {\n /** Whether the action succeeded */\n success: boolean;\n\n /** Whether to close the menu after action */\n closeMenu: boolean;\n\n /** Optional message to display (toast notification) */\n message?: string;\n}\n\n/**\n * Options for menu configuration\n */\nexport interface UserMenuOptions {\n /** Whether to show the user name in menu header */\n showUserName: boolean;\n\n /** Whether to show the user email in menu header */\n showUserEmail: boolean;\n\n /** Menu position relative to avatar */\n menuPosition: 'below-left' | 'below-right';\n\n /** Animation style for menu opening */\n animationStyle: 'fade' | 'slide' | 'none';\n}\n"]}
|
package/dist/public-api.d.ts
CHANGED
|
@@ -28,7 +28,7 @@ export * from './lib/resource-wrappers/query-resource.component';
|
|
|
28
28
|
export * from './lib/services/system-validation.service';
|
|
29
29
|
export * from './lib/services/startup-validation.service';
|
|
30
30
|
export * from './lib/services/lazy-module-registry';
|
|
31
|
-
export * from './
|
|
31
|
+
export * from './generated/lazy-feature-config';
|
|
32
32
|
export * from './lib/system-validation/system-validation-banner.component';
|
|
33
33
|
export * from './lib/user-menu';
|
|
34
34
|
export * from './lib/oauth/oauth.module';
|
package/dist/public-api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAIA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4CAA4C,CAAC;AAE3D,cAAc,sDAAsD,CAAA;AACpE,cAAc,2EAA2E,CAAA;AACzF,cAAc,mDAAmD,CAAA;AAEjE,cAAc,2DAA2D,CAAA;AACzE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,wDAAwD,CAAA;AACtE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qDAAqD,CAAA;AAGnE,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAG9D,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6CAA6C,CAAA;AAC3D,cAAc,2DAA2D,CAAA;AACzE,cAAc,mDAAmD,CAAA;AACjE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qEAAqE,CAAA;AACnF,cAAc,2EAA2E,CAAA;AACzF,cAAc,uDAAuD,CAAA;AACrE,cAAc,2CAA2C,CAAA;AACzD,cAAc,uDAAuD,CAAC;AACtE,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAE5C,cAAc,2CAA2C,CAAA;AACzD,cAAc,kDAAkD,CAAA;AAGhE,cAAc,0CAA0C,CAAA;AACxD,cAAc,2CAA2C,CAAA;AAGzD,cAAc,qCAAqC,CAAA;AACnD,cAAc,
|
|
1
|
+
{"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAIA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4CAA4C,CAAC;AAE3D,cAAc,sDAAsD,CAAA;AACpE,cAAc,2EAA2E,CAAA;AACzF,cAAc,mDAAmD,CAAA;AAEjE,cAAc,2DAA2D,CAAA;AACzE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,wDAAwD,CAAA;AACtE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qDAAqD,CAAA;AAGnE,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAG9D,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6CAA6C,CAAA;AAC3D,cAAc,2DAA2D,CAAA;AACzE,cAAc,mDAAmD,CAAA;AACjE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qEAAqE,CAAA;AACnF,cAAc,2EAA2E,CAAA;AACzF,cAAc,uDAAuD,CAAA;AACrE,cAAc,2CAA2C,CAAA;AACzD,cAAc,uDAAuD,CAAC;AACtE,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAE5C,cAAc,2CAA2C,CAAA;AACzD,cAAc,kDAAkD,CAAA;AAGhE,cAAc,0CAA0C,CAAA;AACxD,cAAc,2CAA2C,CAAA;AAGzD,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4DAA4D,CAAA;AAG1E,cAAc,iBAAiB,CAAA;AAG/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,sCAAsC,CAAA;AAGpD,cAAc,sBAAsB,CAAA;AAEpC,cAAc,UAAU,CAAC"}
|
package/dist/public-api.js
CHANGED
|
@@ -36,7 +36,7 @@ export * from './lib/services/system-validation.service';
|
|
|
36
36
|
export * from './lib/services/startup-validation.service';
|
|
37
37
|
// Lazy loading infrastructure
|
|
38
38
|
export * from './lib/services/lazy-module-registry';
|
|
39
|
-
export * from './
|
|
39
|
+
export * from './generated/lazy-feature-config';
|
|
40
40
|
export * from './lib/system-validation/system-validation-banner.component';
|
|
41
41
|
// User Menu Plugin System
|
|
42
42
|
export * from './lib/user-menu';
|
package/dist/public-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4CAA4C,CAAC;AAE3D,cAAc,sDAAsD,CAAA;AACpE,cAAc,2EAA2E,CAAA;AACzF,cAAc,mDAAmD,CAAA;AACjE,mEAAmE;AACnE,cAAc,2DAA2D,CAAA;AACzE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,wDAAwD,CAAA;AACtE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qDAAqD,CAAA;AAEnE,0DAA0D;AAC1D,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAE9D,qCAAqC;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6CAA6C,CAAA;AAC3D,cAAc,2DAA2D,CAAA;AACzE,cAAc,mDAAmD,CAAA;AACjE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qEAAqE,CAAA;AACnF,cAAc,2EAA2E,CAAA;AACzF,cAAc,uDAAuD,CAAA;AACrE,cAAc,2CAA2C,CAAA;AACzD,cAAc,uDAAuD,CAAC;AACtE,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAE5C,cAAc,2CAA2C,CAAA;AACzD,cAAc,kDAAkD,CAAA;AAEhE,sBAAsB;AACtB,cAAc,0CAA0C,CAAA;AACxD,cAAc,2CAA2C,CAAA;AAEzD,8BAA8B;AAC9B,cAAc,qCAAqC,CAAA;AACnD,cAAc,
|
|
1
|
+
{"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4CAA4C,CAAC;AAE3D,cAAc,sDAAsD,CAAA;AACpE,cAAc,2EAA2E,CAAA;AACzF,cAAc,mDAAmD,CAAA;AACjE,mEAAmE;AACnE,cAAc,2DAA2D,CAAA;AACzE,cAAc,iDAAiD,CAAA;AAC/D,cAAc,wDAAwD,CAAA;AACtE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qDAAqD,CAAA;AAEnE,0DAA0D;AAC1D,cAAc,iDAAiD,CAAC;AAChE,cAAc,+CAA+C,CAAC;AAE9D,qCAAqC;AACrC,cAAc,0BAA0B,CAAA;AACxC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6CAA6C,CAAA;AAC3D,cAAc,2DAA2D,CAAA;AACzE,cAAc,mDAAmD,CAAA;AACjE,cAAc,+DAA+D,CAAA;AAC7E,cAAc,qEAAqE,CAAA;AACnF,cAAc,2EAA2E,CAAA;AACzF,cAAc,uDAAuD,CAAA;AACrE,cAAc,2CAA2C,CAAA;AACzD,cAAc,uDAAuD,CAAC;AACtE,cAAc,iCAAiC,CAAC;AAChD,cAAc,6BAA6B,CAAC;AAE5C,cAAc,2CAA2C,CAAA;AACzD,cAAc,kDAAkD,CAAA;AAEhE,sBAAsB;AACtB,cAAc,0CAA0C,CAAA;AACxD,cAAc,2CAA2C,CAAA;AAEzD,8BAA8B;AAC9B,cAAc,qCAAqC,CAAA;AACnD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4DAA4D,CAAA;AAE1E,0BAA0B;AAC1B,cAAc,iBAAiB,CAAA;AAE/B,eAAe;AACf,cAAc,0BAA0B,CAAA;AACxC,cAAc,sCAAsC,CAAA;AAEpD,gEAAgE;AAChE,cAAc,sBAAsB,CAAA;AAEpC,cAAc,UAAU,CAAC","sourcesContent":["/*\n * Public API Surface \n */\n\nexport * from './lib/generic/form-toolbar';\nexport * from './lib/generic/resource-container-component';\n\nexport * from './lib/resource-wrappers/dashboard-resource.component'\nexport * from './lib/dashboard-preferences-dialog/dashboard-preferences-dialog.component'\nexport * from './lib/resource-wrappers/record-resource.component'\n// export * from './lib/resource-wrappers/resource-wrappers-loader'\nexport * from './lib/resource-wrappers/search-results-resource.component'\nexport * from './lib/resource-wrappers/view-resource.component'\nexport * from './lib/resource-wrappers/list-detail-resource.component'\nexport * from './lib/resource-wrappers/chat-conversations-resource.component'\nexport * from './lib/resource-wrappers/artifact-resource.component'\n\n// Command Palette (only component and service, no module)\nexport * from './lib/command-palette/command-palette.component';\nexport * from './lib/command-palette/command-palette.service';\n\n// New Shell Module (New Explorer UX)\nexport * from './lib/shell/shell.module'\nexport * from './lib/shell/shell.component'\nexport * from './lib/single-record/single-record.component'\nexport * from './lib/single-search-result/single-search-result.component'\nexport * from './lib/single-dashboard/single-dashboard.component'\nexport * from './lib/single-dashboard/Components/add-item/add-item.component'\nexport * from './lib/single-dashboard/Components/delete-item/delete-item.component'\nexport * from './lib/single-dashboard/Components/edit-dashboard/edit-dashboard.component'\nexport * from './lib/single-list-detail/single-list-detail.component'\nexport * from './lib/user-profile/user-profile.component'\nexport * from './lib/user-notifications/user-notifications.component';\nexport * from './lib/guards/auth-guard.service';\nexport * from './lib/guards/entities.guard';\n\nexport * from './lib/single-query/single-query.component'\nexport * from './lib/resource-wrappers/query-resource.component'\n\n// Validation services\nexport * from './lib/services/system-validation.service'\nexport * from './lib/services/startup-validation.service'\n\n// Lazy loading infrastructure\nexport * from './lib/services/lazy-module-registry'\nexport * from './generated/lazy-feature-config'\nexport * from './lib/system-validation/system-validation-banner.component'\n\n// User Menu Plugin System\nexport * from './lib/user-menu'\n\n// OAuth Module\nexport * from './lib/oauth/oauth.module'\nexport * from './lib/oauth/oauth-callback.component'\n\n// Routing Module - must be imported directly in root app module\nexport * from './app-routing.module'\n\nexport * from './module';"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-explorer-core",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.22.0",
|
|
4
4
|
"description": "MemberJunction Explorer: Core Angular Components",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
],
|
|
10
10
|
"scripts": {
|
|
11
11
|
"test": "echo \"No tests configured yet\"",
|
|
12
|
+
"prebuild": "mj codegen manifest --exclude-packages @memberjunction --appDir ../../../../packages/MJExplorer --output /dev/null --lazy-config ./src/generated/lazy-feature-config.ts || echo 'Warning: mj codegen manifest not available, using existing lazy-feature-config'",
|
|
12
13
|
"build": "ngc",
|
|
13
14
|
"watch": "ngc -w"
|
|
14
15
|
},
|
|
@@ -30,39 +31,39 @@
|
|
|
30
31
|
"@angular/cdk": "21.1.3",
|
|
31
32
|
"@angular/platform-browser": "21.1.3",
|
|
32
33
|
"@auth0/auth0-angular": "^2.6.0",
|
|
33
|
-
"@memberjunction/ai-core-plus": "5.
|
|
34
|
-
"@memberjunction/ai-engine-base": "5.
|
|
35
|
-
"@memberjunction/communication-types": "5.
|
|
36
|
-
"@memberjunction/core": "5.
|
|
37
|
-
"@memberjunction/core-entities": "5.
|
|
38
|
-
"@memberjunction/entity-communications-client": "5.
|
|
39
|
-
"@memberjunction/global": "5.
|
|
40
|
-
"@memberjunction/graphql-dataprovider": "5.
|
|
41
|
-
"@memberjunction/ng-ai-test-harness": "5.
|
|
42
|
-
"@memberjunction/ng-artifacts": "5.
|
|
43
|
-
"@memberjunction/ng-auth-services": "5.
|
|
44
|
-
"@memberjunction/ng-base-application": "5.
|
|
45
|
-
"@memberjunction/ng-base-forms": "5.
|
|
46
|
-
"@memberjunction/ng-container-directives": "5.
|
|
47
|
-
"@memberjunction/ng-conversations": "5.
|
|
48
|
-
"@memberjunction/ng-dashboards": "5.
|
|
49
|
-
"@memberjunction/ng-entity-form-dialog": "5.
|
|
50
|
-
"@memberjunction/ng-entity-permissions": "5.
|
|
51
|
-
"@memberjunction/ng-dashboard-viewer": "5.
|
|
52
|
-
"@memberjunction/ng-entity-viewer": "5.
|
|
53
|
-
"@memberjunction/ng-list-detail-grid": "5.
|
|
54
|
-
"@memberjunction/ng-explorer-settings": "5.
|
|
55
|
-
"@memberjunction/ng-file-storage": "5.
|
|
56
|
-
"@memberjunction/ng-generic-dialog": "5.
|
|
57
|
-
"@memberjunction/ng-notifications": "5.
|
|
58
|
-
"@memberjunction/ng-query-viewer": "5.
|
|
59
|
-
"@memberjunction/ng-record-changes": "5.
|
|
60
|
-
"@memberjunction/ng-record-selector": "5.
|
|
61
|
-
"@memberjunction/ng-resource-permissions": "5.
|
|
62
|
-
"@memberjunction/ng-shared": "5.
|
|
63
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
64
|
-
"@memberjunction/ng-user-avatar": "5.
|
|
65
|
-
"@memberjunction/templates-base-types": "5.
|
|
34
|
+
"@memberjunction/ai-core-plus": "5.22.0",
|
|
35
|
+
"@memberjunction/ai-engine-base": "5.22.0",
|
|
36
|
+
"@memberjunction/communication-types": "5.22.0",
|
|
37
|
+
"@memberjunction/core": "5.22.0",
|
|
38
|
+
"@memberjunction/core-entities": "5.22.0",
|
|
39
|
+
"@memberjunction/entity-communications-client": "5.22.0",
|
|
40
|
+
"@memberjunction/global": "5.22.0",
|
|
41
|
+
"@memberjunction/graphql-dataprovider": "5.22.0",
|
|
42
|
+
"@memberjunction/ng-ai-test-harness": "5.22.0",
|
|
43
|
+
"@memberjunction/ng-artifacts": "5.22.0",
|
|
44
|
+
"@memberjunction/ng-auth-services": "5.22.0",
|
|
45
|
+
"@memberjunction/ng-base-application": "5.22.0",
|
|
46
|
+
"@memberjunction/ng-base-forms": "5.22.0",
|
|
47
|
+
"@memberjunction/ng-container-directives": "5.22.0",
|
|
48
|
+
"@memberjunction/ng-conversations": "5.22.0",
|
|
49
|
+
"@memberjunction/ng-dashboards": "5.22.0",
|
|
50
|
+
"@memberjunction/ng-entity-form-dialog": "5.22.0",
|
|
51
|
+
"@memberjunction/ng-entity-permissions": "5.22.0",
|
|
52
|
+
"@memberjunction/ng-dashboard-viewer": "5.22.0",
|
|
53
|
+
"@memberjunction/ng-entity-viewer": "5.22.0",
|
|
54
|
+
"@memberjunction/ng-list-detail-grid": "5.22.0",
|
|
55
|
+
"@memberjunction/ng-explorer-settings": "5.22.0",
|
|
56
|
+
"@memberjunction/ng-file-storage": "5.22.0",
|
|
57
|
+
"@memberjunction/ng-generic-dialog": "5.22.0",
|
|
58
|
+
"@memberjunction/ng-notifications": "5.22.0",
|
|
59
|
+
"@memberjunction/ng-query-viewer": "5.22.0",
|
|
60
|
+
"@memberjunction/ng-record-changes": "5.22.0",
|
|
61
|
+
"@memberjunction/ng-record-selector": "5.22.0",
|
|
62
|
+
"@memberjunction/ng-resource-permissions": "5.22.0",
|
|
63
|
+
"@memberjunction/ng-shared": "5.22.0",
|
|
64
|
+
"@memberjunction/ng-shared-generic": "5.22.0",
|
|
65
|
+
"@memberjunction/ng-user-avatar": "5.22.0",
|
|
66
|
+
"@memberjunction/templates-base-types": "5.22.0",
|
|
66
67
|
"@progress/kendo-angular-buttons": "22.0.1",
|
|
67
68
|
"@progress/kendo-angular-dateinputs": "22.0.1",
|
|
68
69
|
"@progress/kendo-angular-dialog": "22.0.1",
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maps resource type names to lazy-loading functions for each feature chunk.
|
|
3
|
-
* The import() calls point to the feature module files in @memberjunction/ng-dashboards
|
|
4
|
-
* and @memberjunction/ng-explorer-settings using subpath exports.
|
|
5
|
-
*
|
|
6
|
-
* When a resource type is not found in ClassFactory, the LazyModuleRegistry uses
|
|
7
|
-
* this config to load the chunk containing that resource type. Loading a feature
|
|
8
|
-
* module triggers all @RegisterClass decorators within it, making its components
|
|
9
|
-
* available to ClassFactory.
|
|
10
|
-
*/
|
|
11
|
-
/**
|
|
12
|
-
* Complete mapping of resource type strings to lazy-loading functions.
|
|
13
|
-
* Covers both BaseResourceComponent and BaseDashboard registrations.
|
|
14
|
-
*/
|
|
15
|
-
export declare const LAZY_FEATURE_CONFIG: Record<string, () => Promise<void>>;
|
|
16
|
-
//# sourceMappingURL=lazy-feature-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-feature-config.d.ts","sourceRoot":"","sources":["../../../src/lib/services/lazy-feature-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA8CH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CA8EnE,CAAC"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Maps resource type names to lazy-loading functions for each feature chunk.
|
|
3
|
-
* The import() calls point to the feature module files in @memberjunction/ng-dashboards
|
|
4
|
-
* and @memberjunction/ng-explorer-settings using subpath exports.
|
|
5
|
-
*
|
|
6
|
-
* When a resource type is not found in ClassFactory, the LazyModuleRegistry uses
|
|
7
|
-
* this config to load the chunk containing that resource type. Loading a feature
|
|
8
|
-
* module triggers all @RegisterClass decorators within it, making its components
|
|
9
|
-
* available to ClassFactory.
|
|
10
|
-
*/
|
|
11
|
-
/** Helper to create a loader that all resource types in a feature share. */
|
|
12
|
-
function featureLoader(importFn) {
|
|
13
|
-
return () => importFn().then(() => { });
|
|
14
|
-
}
|
|
15
|
-
// --- AI Dashboard feature chunk ---
|
|
16
|
-
const loadAI = featureLoader(() => import('@memberjunction/ng-dashboards/ai-dashboards.module'));
|
|
17
|
-
// --- Actions Dashboard feature chunk ---
|
|
18
|
-
const loadActions = featureLoader(() => import('@memberjunction/ng-dashboards/actions-dashboards.module'));
|
|
19
|
-
// --- Testing Dashboard feature chunk ---
|
|
20
|
-
const loadTesting = featureLoader(() => import('@memberjunction/ng-dashboards/testing-dashboards.module'));
|
|
21
|
-
// --- Scheduling Dashboard feature chunk ---
|
|
22
|
-
const loadScheduling = featureLoader(() => import('@memberjunction/ng-dashboards/scheduling-dashboards.module'));
|
|
23
|
-
// --- Communication Dashboard feature chunk ---
|
|
24
|
-
const loadCommunication = featureLoader(() => import('@memberjunction/ng-dashboards/communication-dashboards.module'));
|
|
25
|
-
// --- Credentials Dashboard feature chunk ---
|
|
26
|
-
const loadCredentials = featureLoader(() => import('@memberjunction/ng-dashboards/credentials-dashboards.module'));
|
|
27
|
-
// --- Data Explorer feature chunk ---
|
|
28
|
-
const loadDataExplorer = featureLoader(() => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module'));
|
|
29
|
-
// --- Lists Dashboard feature chunk ---
|
|
30
|
-
const loadLists = featureLoader(() => import('@memberjunction/ng-dashboards/lists-dashboards.module'));
|
|
31
|
-
// --- Component Studio feature chunk ---
|
|
32
|
-
const loadComponentStudio = featureLoader(() => import('@memberjunction/ng-dashboards/component-studio-dashboards.module'));
|
|
33
|
-
// --- Integration feature chunk ---
|
|
34
|
-
const loadIntegration = featureLoader(() => import('@memberjunction/ng-dashboards/integration.module'));
|
|
35
|
-
// --- MCP feature chunk ---
|
|
36
|
-
const loadMCP = featureLoader(() => import('@memberjunction/ng-dashboards/mcp.module'));
|
|
37
|
-
// --- Explorer Settings feature chunk ---
|
|
38
|
-
const loadSettings = featureLoader(() => import(
|
|
39
|
-
/* webpackChunkName: "explorer-settings" */
|
|
40
|
-
'@memberjunction/ng-explorer-settings'));
|
|
41
|
-
/**
|
|
42
|
-
* Complete mapping of resource type strings to lazy-loading functions.
|
|
43
|
-
* Covers both BaseResourceComponent and BaseDashboard registrations.
|
|
44
|
-
*/
|
|
45
|
-
export const LAZY_FEATURE_CONFIG = {
|
|
46
|
-
// ── AI Dashboard (BaseResourceComponent types) ──
|
|
47
|
-
'AIModelsResource': loadAI,
|
|
48
|
-
'AIPromptsResource': loadAI,
|
|
49
|
-
'AIAgentsResource': loadAI,
|
|
50
|
-
'AIMonitorResource': loadAI,
|
|
51
|
-
'AIConfigResource': loadAI,
|
|
52
|
-
// ── Actions Dashboard (BaseResourceComponent types) ──
|
|
53
|
-
'ActionsOverviewResource': loadActions,
|
|
54
|
-
'ActionsMonitorResource': loadActions,
|
|
55
|
-
'ActionsScheduleResource': loadActions,
|
|
56
|
-
'ActionsCodeResource': loadActions,
|
|
57
|
-
'ActionsEntitiesResource': loadActions,
|
|
58
|
-
'ActionsSecurityResource': loadActions,
|
|
59
|
-
'ActionExplorerResource': loadActions,
|
|
60
|
-
// ── Testing Dashboard ──
|
|
61
|
-
'TestingDashboard': loadTesting, // BaseDashboard
|
|
62
|
-
'TestingDashboardTabResource': loadTesting, // BaseResourceComponent
|
|
63
|
-
'TestingRunsResource': loadTesting,
|
|
64
|
-
'TestingAnalyticsResource': loadTesting,
|
|
65
|
-
'TestingReviewResource': loadTesting,
|
|
66
|
-
'TestingExplorerResource': loadTesting,
|
|
67
|
-
// ── Scheduling Dashboard ──
|
|
68
|
-
'SchedulingDashboard': loadScheduling, // BaseDashboard
|
|
69
|
-
'SchedulingDashboardResource': loadScheduling, // BaseResourceComponent
|
|
70
|
-
'SchedulingJobsResource': loadScheduling,
|
|
71
|
-
'SchedulingActivityResource': loadScheduling,
|
|
72
|
-
// ── Communication Dashboard ──
|
|
73
|
-
'CommunicationDashboard': loadCommunication, // BaseDashboard
|
|
74
|
-
'CommunicationLogsResource': loadCommunication,
|
|
75
|
-
'CommunicationMonitorResource': loadCommunication,
|
|
76
|
-
'CommunicationProvidersResource': loadCommunication,
|
|
77
|
-
'CommunicationRunsResource': loadCommunication,
|
|
78
|
-
'CommunicationTemplatesResource': loadCommunication,
|
|
79
|
-
// ── Credentials Dashboard ──
|
|
80
|
-
'CredentialsDashboard': loadCredentials, // BaseDashboard
|
|
81
|
-
'CredentialsOverviewResource': loadCredentials,
|
|
82
|
-
'CredentialsListResource': loadCredentials,
|
|
83
|
-
'CredentialsTypesResource': loadCredentials,
|
|
84
|
-
'CredentialsCategoriesResource': loadCredentials,
|
|
85
|
-
'CredentialsAuditResource': loadCredentials,
|
|
86
|
-
// ── Data Explorer ──
|
|
87
|
-
'DataExplorer': loadDataExplorer, // BaseDashboard
|
|
88
|
-
'DataExplorerResource': loadDataExplorer, // BaseResourceComponent
|
|
89
|
-
// ── Lists Dashboard ──
|
|
90
|
-
'ListsBrowseResource': loadLists,
|
|
91
|
-
'ListsCategoriesResource': loadLists,
|
|
92
|
-
'ListsMyListsResource': loadLists,
|
|
93
|
-
'ListsOperationsResource': loadLists,
|
|
94
|
-
// ── Component Studio ──
|
|
95
|
-
'ComponentStudioDashboard': loadComponentStudio, // BaseDashboard
|
|
96
|
-
// ── Integration Dashboard ──
|
|
97
|
-
'IntegrationOverview': loadIntegration,
|
|
98
|
-
'IntegrationConnections': loadIntegration,
|
|
99
|
-
'IntegrationPipelines': loadIntegration,
|
|
100
|
-
'IntegrationMappingWorkspace': loadIntegration,
|
|
101
|
-
'IntegrationActivity': loadIntegration,
|
|
102
|
-
'IntegrationSchedules': loadIntegration,
|
|
103
|
-
// ── MCP Dashboard ──
|
|
104
|
-
'MCPDashboard': loadMCP, // BaseDashboard
|
|
105
|
-
'MCPResource': loadMCP, // BaseResourceComponent
|
|
106
|
-
// ── Explorer Settings (BaseDashboard types) ──
|
|
107
|
-
'ApplicationManagement': loadSettings,
|
|
108
|
-
'EntityPermissions': loadSettings,
|
|
109
|
-
'RoleManagement': loadSettings,
|
|
110
|
-
'UserManagement': loadSettings,
|
|
111
|
-
'SqlLogging': loadSettings,
|
|
112
|
-
};
|
|
113
|
-
//# sourceMappingURL=lazy-feature-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lazy-feature-config.js","sourceRoot":"","sources":["../../../src/lib/services/lazy-feature-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Maps resource type names to lazy-loading functions for each feature chunk.\n * The import() calls point to the feature module files in @memberjunction/ng-dashboards\n * and @memberjunction/ng-explorer-settings using subpath exports.\n *\n * When a resource type is not found in ClassFactory, the LazyModuleRegistry uses\n * this config to load the chunk containing that resource type. Loading a feature\n * module triggers all @RegisterClass decorators within it, making its components\n * available to ClassFactory.\n */\n\n/** Helper to create a loader that all resource types in a feature share. */\nfunction featureLoader(importFn: () => Promise<unknown>): () => Promise<void> {\n return () => importFn().then(() => {});\n}\n\n// --- AI Dashboard feature chunk ---\nconst loadAI = featureLoader(() => import('@memberjunction/ng-dashboards/ai-dashboards.module'));\n\n// --- Actions Dashboard feature chunk ---\nconst loadActions = featureLoader(() => import('@memberjunction/ng-dashboards/actions-dashboards.module'));\n\n// --- Testing Dashboard feature chunk ---\nconst loadTesting = featureLoader(() => import('@memberjunction/ng-dashboards/testing-dashboards.module'));\n\n// --- Scheduling Dashboard feature chunk ---\nconst loadScheduling = featureLoader(() => import('@memberjunction/ng-dashboards/scheduling-dashboards.module'));\n\n// --- Communication Dashboard feature chunk ---\nconst loadCommunication = featureLoader(() => import('@memberjunction/ng-dashboards/communication-dashboards.module'));\n\n// --- Credentials Dashboard feature chunk ---\nconst loadCredentials = featureLoader(() => import('@memberjunction/ng-dashboards/credentials-dashboards.module'));\n\n// --- Data Explorer feature chunk ---\nconst loadDataExplorer = featureLoader(() => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module'));\n\n// --- Lists Dashboard feature chunk ---\nconst loadLists = featureLoader(() => import('@memberjunction/ng-dashboards/lists-dashboards.module'));\n\n// --- Component Studio feature chunk ---\nconst loadComponentStudio = featureLoader(() => import('@memberjunction/ng-dashboards/component-studio-dashboards.module'));\n\n// --- Integration feature chunk ---\nconst loadIntegration = featureLoader(() => import('@memberjunction/ng-dashboards/integration.module'));\n\n// --- MCP feature chunk ---\nconst loadMCP = featureLoader(() => import('@memberjunction/ng-dashboards/mcp.module'));\n\n// --- Explorer Settings feature chunk ---\nconst loadSettings = featureLoader(() => import(\n /* webpackChunkName: \"explorer-settings\" */\n '@memberjunction/ng-explorer-settings'\n));\n\n/**\n * Complete mapping of resource type strings to lazy-loading functions.\n * Covers both BaseResourceComponent and BaseDashboard registrations.\n */\nexport const LAZY_FEATURE_CONFIG: Record<string, () => Promise<void>> = {\n // ── AI Dashboard (BaseResourceComponent types) ──\n 'AIModelsResource': loadAI,\n 'AIPromptsResource': loadAI,\n 'AIAgentsResource': loadAI,\n 'AIMonitorResource': loadAI,\n 'AIConfigResource': loadAI,\n\n // ── Actions Dashboard (BaseResourceComponent types) ──\n 'ActionsOverviewResource': loadActions,\n 'ActionsMonitorResource': loadActions,\n 'ActionsScheduleResource': loadActions,\n 'ActionsCodeResource': loadActions,\n 'ActionsEntitiesResource': loadActions,\n 'ActionsSecurityResource': loadActions,\n 'ActionExplorerResource': loadActions,\n\n // ── Testing Dashboard ──\n 'TestingDashboard': loadTesting, // BaseDashboard\n 'TestingDashboardTabResource': loadTesting, // BaseResourceComponent\n 'TestingRunsResource': loadTesting,\n 'TestingAnalyticsResource': loadTesting,\n 'TestingReviewResource': loadTesting,\n 'TestingExplorerResource': loadTesting,\n\n // ── Scheduling Dashboard ──\n 'SchedulingDashboard': loadScheduling, // BaseDashboard\n 'SchedulingDashboardResource': loadScheduling, // BaseResourceComponent\n 'SchedulingJobsResource': loadScheduling,\n 'SchedulingActivityResource': loadScheduling,\n\n // ── Communication Dashboard ──\n 'CommunicationDashboard': loadCommunication, // BaseDashboard\n 'CommunicationLogsResource': loadCommunication,\n 'CommunicationMonitorResource': loadCommunication,\n 'CommunicationProvidersResource': loadCommunication,\n 'CommunicationRunsResource': loadCommunication,\n 'CommunicationTemplatesResource': loadCommunication,\n\n // ── Credentials Dashboard ──\n 'CredentialsDashboard': loadCredentials, // BaseDashboard\n 'CredentialsOverviewResource': loadCredentials,\n 'CredentialsListResource': loadCredentials,\n 'CredentialsTypesResource': loadCredentials,\n 'CredentialsCategoriesResource': loadCredentials,\n 'CredentialsAuditResource': loadCredentials,\n\n // ── Data Explorer ──\n 'DataExplorer': loadDataExplorer, // BaseDashboard\n 'DataExplorerResource': loadDataExplorer, // BaseResourceComponent\n\n // ── Lists Dashboard ──\n 'ListsBrowseResource': loadLists,\n 'ListsCategoriesResource': loadLists,\n 'ListsMyListsResource': loadLists,\n 'ListsOperationsResource': loadLists,\n\n // ── Component Studio ──\n 'ComponentStudioDashboard': loadComponentStudio, // BaseDashboard\n\n // ── Integration Dashboard ──\n 'IntegrationOverview': loadIntegration,\n 'IntegrationConnections': loadIntegration,\n 'IntegrationPipelines': loadIntegration,\n 'IntegrationMappingWorkspace': loadIntegration,\n 'IntegrationActivity': loadIntegration,\n 'IntegrationSchedules': loadIntegration,\n\n // ── MCP Dashboard ──\n 'MCPDashboard': loadMCP, // BaseDashboard\n 'MCPResource': loadMCP, // BaseResourceComponent\n\n // ── Explorer Settings (BaseDashboard types) ──\n 'ApplicationManagement': loadSettings,\n 'EntityPermissions': loadSettings,\n 'RoleManagement': loadSettings,\n 'UserManagement': loadSettings,\n 'SqlLogging': loadSettings,\n};\n"]}
|