@memberjunction/ng-explorer-core 5.29.0 → 5.30.1
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 +1 -1
- package/dist/generated/lazy-feature-config.d.ts.map +1 -1
- package/dist/generated/lazy-feature-config.js +5 -2
- package/dist/generated/lazy-feature-config.js.map +1 -1
- package/dist/lib/shell/services/sharing-center-dialog-host.component.d.ts +22 -0
- package/dist/lib/shell/services/sharing-center-dialog-host.component.d.ts.map +1 -0
- package/dist/lib/shell/services/sharing-center-dialog-host.component.js +81 -0
- package/dist/lib/shell/services/sharing-center-dialog-host.component.js.map +1 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts +22 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.d.ts.map +1 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js +48 -0
- package/dist/lib/shell/services/user-sharing-center-dialog.service.js.map +1 -0
- package/dist/lib/shell/shell.component.d.ts +3 -1
- package/dist/lib/shell/shell.component.d.ts.map +1 -1
- package/dist/lib/shell/shell.component.js +25 -17
- package/dist/lib/shell/shell.component.js.map +1 -1
- package/dist/lib/user-menu/base-user-menu.d.ts +6 -0
- package/dist/lib/user-menu/base-user-menu.d.ts.map +1 -1
- package/dist/lib/user-menu/base-user-menu.js +24 -1
- package/dist/lib/user-menu/base-user-menu.js.map +1 -1
- package/package.json +41 -41
|
@@ -130,6 +130,12 @@ export declare class BaseUserMenu {
|
|
|
130
130
|
* Handle "Pin to Home" click - signals the shell to pin the active resource
|
|
131
131
|
*/
|
|
132
132
|
protected Handle_pin_to_home(): Promise<UserMenuActionResult>;
|
|
133
|
+
/**
|
|
134
|
+
* Handle "Sharing Center" click — signals the shell to open the dialog.
|
|
135
|
+
* The shell has access to `ViewContainerRef` and the dialog service; the
|
|
136
|
+
* menu only needs to report the intent.
|
|
137
|
+
*/
|
|
138
|
+
protected Handle_sharing_center(): Promise<UserMenuActionResult>;
|
|
133
139
|
/** Signal the shell to open the feedback dialog */
|
|
134
140
|
protected Handle_submit_feedback(): Promise<UserMenuActionResult>;
|
|
135
141
|
/**
|
|
@@ -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,EAEf,eAAe,EAClB,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,EAEf,eAAe,EAClB,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;IAoHrC;;;OAGG;IACI,eAAe,IAAI,eAAe,EAAE;IA8B3C;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAUpD;;;OAGG;IACH,SAAS,CAAC,aAAa,IAAI,MAAM,EAAE;IAInC;;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;IAUnE;;;;OAIG;cACa,qBAAqB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAQtE,mDAAmD;cACnC,sBAAsB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAYvE;;;;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,eAAe;IAe5C;;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"}
|
|
@@ -122,12 +122,23 @@ export class BaseUserMenu {
|
|
|
122
122
|
enabled: true,
|
|
123
123
|
tooltip: 'Pin the current resource to your Home dashboard'
|
|
124
124
|
},
|
|
125
|
+
{
|
|
126
|
+
id: 'sharing-center',
|
|
127
|
+
label: 'Sharing Center',
|
|
128
|
+
icon: 'fa-solid fa-share-nodes',
|
|
129
|
+
group: 'primary',
|
|
130
|
+
order: 25,
|
|
131
|
+
developerOnly: false,
|
|
132
|
+
visible: true,
|
|
133
|
+
enabled: true,
|
|
134
|
+
tooltip: "See what you've shared and what's been shared with you"
|
|
135
|
+
},
|
|
125
136
|
{
|
|
126
137
|
id: 'submit-feedback',
|
|
127
138
|
label: 'Submit Feedback',
|
|
128
139
|
icon: 'fa-solid fa-comment-dots',
|
|
129
140
|
group: 'primary',
|
|
130
|
-
order:
|
|
141
|
+
order: 30,
|
|
131
142
|
developerOnly: false,
|
|
132
143
|
visible: this._context?.feedbackEnabled !== false,
|
|
133
144
|
enabled: true,
|
|
@@ -389,6 +400,18 @@ export class BaseUserMenu {
|
|
|
389
400
|
message: 'pin-to-home'
|
|
390
401
|
};
|
|
391
402
|
}
|
|
403
|
+
/**
|
|
404
|
+
* Handle "Sharing Center" click — signals the shell to open the dialog.
|
|
405
|
+
* The shell has access to `ViewContainerRef` and the dialog service; the
|
|
406
|
+
* menu only needs to report the intent.
|
|
407
|
+
*/
|
|
408
|
+
async Handle_sharing_center() {
|
|
409
|
+
return {
|
|
410
|
+
success: true,
|
|
411
|
+
closeMenu: true,
|
|
412
|
+
message: 'sharing-center'
|
|
413
|
+
};
|
|
414
|
+
}
|
|
392
415
|
/** Signal the shell to open the feedback dialog */
|
|
393
416
|
async Handle_submit_feedback() {
|
|
394
417
|
return {
|
|
@@ -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 UserDisplayInfo\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 id: 'submit-feedback',\n label: 'Submit Feedback',\n icon: 'fa-solid fa-comment-dots',\n group: 'primary',\n order: 25,\n developerOnly: false,\n visible: this._context?.feedbackEnabled !== false,\n enabled: true,\n tooltip: 'Report a bug or request a feature'\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 = this.GetGroupOrder();\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 * Get the ordered list of group names for menu rendering.\n * Override to insert custom groups (e.g., 'organization' before 'primary').\n */\n protected GetGroupOrder(): string[] {\n return ['primary', 'developer', 'system', 'danger'];\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 /** Signal the shell to open the feedback dialog */\n protected async Handle_submit_feedback(): Promise<UserMenuActionResult> {\n return {\n success: true,\n closeMenu: true,\n message: 'submit-feedback'\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(): UserDisplayInfo {\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 UserDisplayInfo\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 id: 'sharing-center',\n label: 'Sharing Center',\n icon: 'fa-solid fa-share-nodes',\n group: 'primary',\n order: 25,\n developerOnly: false,\n visible: true,\n enabled: true,\n tooltip: \"See what you've shared and what's been shared with you\"\n },\n {\n id: 'submit-feedback',\n label: 'Submit Feedback',\n icon: 'fa-solid fa-comment-dots',\n group: 'primary',\n order: 30,\n developerOnly: false,\n visible: this._context?.feedbackEnabled !== false,\n enabled: true,\n tooltip: 'Report a bug or request a feature'\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 = this.GetGroupOrder();\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 * Get the ordered list of group names for menu rendering.\n * Override to insert custom groups (e.g., 'organization' before 'primary').\n */\n protected GetGroupOrder(): string[] {\n return ['primary', 'developer', 'system', 'danger'];\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 * Handle \"Sharing Center\" click — signals the shell to open the dialog.\n * The shell has access to `ViewContainerRef` and the dialog service; the\n * menu only needs to report the intent.\n */\n protected async Handle_sharing_center(): Promise<UserMenuActionResult> {\n return {\n success: true,\n closeMenu: true,\n message: 'sharing-center'\n };\n }\n\n /** Signal the shell to open the feedback dialog */\n protected async Handle_submit_feedback(): Promise<UserMenuActionResult> {\n return {\n success: true,\n closeMenu: true,\n message: 'submit-feedback'\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(): UserDisplayInfo {\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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-explorer-core",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.30.1",
|
|
4
4
|
"description": "MemberJunction Explorer: Core Angular Components",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -32,46 +32,46 @@
|
|
|
32
32
|
"@angular/cdk": "21.1.3",
|
|
33
33
|
"@angular/platform-browser": "21.1.3",
|
|
34
34
|
"@auth0/auth0-angular": "^2.6.0",
|
|
35
|
-
"@memberjunction/ai-core-plus": "5.
|
|
36
|
-
"@memberjunction/ai-engine-base": "5.
|
|
37
|
-
"@memberjunction/communication-types": "5.
|
|
38
|
-
"@memberjunction/core": "5.
|
|
39
|
-
"@memberjunction/core-entities": "5.
|
|
40
|
-
"@memberjunction/entity-communications-client": "5.
|
|
41
|
-
"@memberjunction/export-engine": "5.
|
|
42
|
-
"@memberjunction/global": "5.
|
|
43
|
-
"@memberjunction/graphql-dataprovider": "5.
|
|
44
|
-
"@memberjunction/ng-ai-test-harness": "5.
|
|
45
|
-
"@memberjunction/ng-artifacts": "5.
|
|
46
|
-
"@memberjunction/ng-auth-services": "5.
|
|
47
|
-
"@memberjunction/ng-base-application": "5.
|
|
48
|
-
"@memberjunction/ng-base-forms": "5.
|
|
49
|
-
"@memberjunction/ng-container-directives": "5.
|
|
50
|
-
"@memberjunction/ng-conversations": "5.
|
|
51
|
-
"@memberjunction/ng-dashboard-viewer": "5.
|
|
52
|
-
"@memberjunction/ng-dashboards": "5.
|
|
53
|
-
"@memberjunction/ng-entity-form-dialog": "5.
|
|
54
|
-
"@memberjunction/ng-entity-permissions": "5.
|
|
55
|
-
"@memberjunction/ng-entity-viewer": "5.
|
|
56
|
-
"@memberjunction/ng-explorer-settings": "5.
|
|
57
|
-
"@memberjunction/ng-export-service": "5.
|
|
58
|
-
"@memberjunction/ng-feedback": "5.
|
|
59
|
-
"@memberjunction/ng-file-storage": "5.
|
|
60
|
-
"@memberjunction/ng-generic-dialog": "5.
|
|
61
|
-
"@memberjunction/ng-list-detail-grid": "5.
|
|
62
|
-
"@memberjunction/ng-notifications": "5.
|
|
63
|
-
"@memberjunction/ng-query-viewer": "5.
|
|
64
|
-
"@memberjunction/ng-record-changes": "5.
|
|
65
|
-
"@memberjunction/ng-record-selector": "5.
|
|
66
|
-
"@memberjunction/ng-record-tags": "5.
|
|
67
|
-
"@memberjunction/ng-resource-permissions": "5.
|
|
68
|
-
"@memberjunction/ng-search": "5.
|
|
69
|
-
"@memberjunction/ng-shared": "5.
|
|
70
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
71
|
-
"@memberjunction/ng-ui-components": "5.
|
|
72
|
-
"@memberjunction/ng-user-avatar": "5.
|
|
73
|
-
"@memberjunction/ng-word-cloud": "5.
|
|
74
|
-
"@memberjunction/templates-base-types": "5.
|
|
35
|
+
"@memberjunction/ai-core-plus": "5.30.1",
|
|
36
|
+
"@memberjunction/ai-engine-base": "5.30.1",
|
|
37
|
+
"@memberjunction/communication-types": "5.30.1",
|
|
38
|
+
"@memberjunction/core": "5.30.1",
|
|
39
|
+
"@memberjunction/core-entities": "5.30.1",
|
|
40
|
+
"@memberjunction/entity-communications-client": "5.30.1",
|
|
41
|
+
"@memberjunction/export-engine": "5.30.1",
|
|
42
|
+
"@memberjunction/global": "5.30.1",
|
|
43
|
+
"@memberjunction/graphql-dataprovider": "5.30.1",
|
|
44
|
+
"@memberjunction/ng-ai-test-harness": "5.30.1",
|
|
45
|
+
"@memberjunction/ng-artifacts": "5.30.1",
|
|
46
|
+
"@memberjunction/ng-auth-services": "5.30.1",
|
|
47
|
+
"@memberjunction/ng-base-application": "5.30.1",
|
|
48
|
+
"@memberjunction/ng-base-forms": "5.30.1",
|
|
49
|
+
"@memberjunction/ng-container-directives": "5.30.1",
|
|
50
|
+
"@memberjunction/ng-conversations": "5.30.1",
|
|
51
|
+
"@memberjunction/ng-dashboard-viewer": "5.30.1",
|
|
52
|
+
"@memberjunction/ng-dashboards": "5.30.1",
|
|
53
|
+
"@memberjunction/ng-entity-form-dialog": "5.30.1",
|
|
54
|
+
"@memberjunction/ng-entity-permissions": "5.30.1",
|
|
55
|
+
"@memberjunction/ng-entity-viewer": "5.30.1",
|
|
56
|
+
"@memberjunction/ng-explorer-settings": "5.30.1",
|
|
57
|
+
"@memberjunction/ng-export-service": "5.30.1",
|
|
58
|
+
"@memberjunction/ng-feedback": "5.30.1",
|
|
59
|
+
"@memberjunction/ng-file-storage": "5.30.1",
|
|
60
|
+
"@memberjunction/ng-generic-dialog": "5.30.1",
|
|
61
|
+
"@memberjunction/ng-list-detail-grid": "5.30.1",
|
|
62
|
+
"@memberjunction/ng-notifications": "5.30.1",
|
|
63
|
+
"@memberjunction/ng-query-viewer": "5.30.1",
|
|
64
|
+
"@memberjunction/ng-record-changes": "5.30.1",
|
|
65
|
+
"@memberjunction/ng-record-selector": "5.30.1",
|
|
66
|
+
"@memberjunction/ng-record-tags": "5.30.1",
|
|
67
|
+
"@memberjunction/ng-resource-permissions": "5.30.1",
|
|
68
|
+
"@memberjunction/ng-search": "5.30.1",
|
|
69
|
+
"@memberjunction/ng-shared": "5.30.1",
|
|
70
|
+
"@memberjunction/ng-shared-generic": "5.30.1",
|
|
71
|
+
"@memberjunction/ng-ui-components": "5.30.1",
|
|
72
|
+
"@memberjunction/ng-user-avatar": "5.30.1",
|
|
73
|
+
"@memberjunction/ng-word-cloud": "5.30.1",
|
|
74
|
+
"@memberjunction/templates-base-types": "5.30.1",
|
|
75
75
|
"golden-layout": "^2.6.0",
|
|
76
76
|
"rxjs": "^7.8.2",
|
|
77
77
|
"tslib": "^2.8.1"
|