@memberjunction/ng-explorer-core 5.23.0 → 5.24.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.
Files changed (38) hide show
  1. package/dist/app-routing.module.d.ts.map +1 -1
  2. package/dist/app-routing.module.js +1 -3
  3. package/dist/app-routing.module.js.map +1 -1
  4. package/dist/generated/lazy-feature-config.d.ts +1 -1
  5. package/dist/generated/lazy-feature-config.d.ts.map +1 -1
  6. package/dist/generated/lazy-feature-config.js +4 -2
  7. package/dist/generated/lazy-feature-config.js.map +1 -1
  8. package/dist/lib/resource-wrappers/list-detail-resource.component.d.ts +3 -1
  9. package/dist/lib/resource-wrappers/list-detail-resource.component.d.ts.map +1 -1
  10. package/dist/lib/resource-wrappers/list-detail-resource.component.js +3 -0
  11. package/dist/lib/resource-wrappers/list-detail-resource.component.js.map +1 -1
  12. package/dist/lib/resource-wrappers/notifications-resource.component.js +1 -0
  13. package/dist/lib/resource-wrappers/notifications-resource.component.js.map +1 -1
  14. package/dist/lib/services/startup-validation.service.d.ts.map +1 -1
  15. package/dist/lib/services/startup-validation.service.js +0 -3
  16. package/dist/lib/services/startup-validation.service.js.map +1 -1
  17. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts +7 -0
  18. package/dist/lib/shell/components/tabs/component-cache-manager.d.ts.map +1 -1
  19. package/dist/lib/shell/components/tabs/component-cache-manager.js.map +1 -1
  20. package/dist/lib/shell/components/tabs/tab-container.component.d.ts.map +1 -1
  21. package/dist/lib/shell/components/tabs/tab-container.component.js +0 -1
  22. package/dist/lib/shell/components/tabs/tab-container.component.js.map +1 -1
  23. package/dist/lib/shell/shell.component.d.ts.map +1 -1
  24. package/dist/lib/shell/shell.component.js +0 -1
  25. package/dist/lib/shell/shell.component.js.map +1 -1
  26. package/dist/module.d.ts +51 -52
  27. package/dist/module.d.ts.map +1 -1
  28. package/dist/module.js +3 -7
  29. package/dist/module.js.map +1 -1
  30. package/dist/public-api.d.ts +0 -1
  31. package/dist/public-api.d.ts.map +1 -1
  32. package/dist/public-api.js +0 -1
  33. package/dist/public-api.js.map +1 -1
  34. package/package.json +38 -37
  35. package/dist/lib/generic/form-toolbar.d.ts +0 -8
  36. package/dist/lib/generic/form-toolbar.d.ts.map +0 -1
  37. package/dist/lib/generic/form-toolbar.js +0 -114
  38. package/dist/lib/generic/form-toolbar.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"app-routing.module.d.ts","sourceRoot":"","sources":["../src/app-routing.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AACnE,OAAO,EAAwB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAOrH,OAAO,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;;AAIrF,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,YAAY,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAA;KAAE,CAAM;IAGpE,YAAY,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAMpD,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI;IAYjF,YAAY,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAUpD,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,IAAI;IAgBnE,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO;IAevF,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO;IAmClD,OAAO,CAAC,QAAQ;CAUjB;AAED,qBAGa,gBAAiB,YAAW,OAAO,CAAC,IAAI,CAAC;IAMlD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IARpB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,eAAe,CAA8B;gBAG3C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,UAAU;IAMhC;;;OAGG;YACW,YAAY;IAWpB,OAAO,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;yCA9B5E,gBAAgB;6CAAhB,gBAAgB;CA0gB5B;AA8FD,UAAU,sBAAuB,SAAQ,mBAAmB;IAC1D,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;CACjC;AAED,qBAIa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAK5B"}
1
+ {"version":3,"file":"app-routing.module.d.ts","sourceRoot":"","sources":["../src/app-routing.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAwB,MAAM,eAAe,CAAC;AACnE,OAAO,EAAwB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAOrH,OAAO,EAAE,aAAa,EAAiB,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;;;AAIrF,qBAAa,mBAAoB,YAAW,kBAAkB;IAC5D,YAAY,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAA;KAAE,CAAM;IAGpE,YAAY,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAMpD,KAAK,CAAC,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI,GAAG,IAAI;IAYjF,YAAY,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO;IAUpD,QAAQ,CAAC,KAAK,EAAE,sBAAsB,GAAG,mBAAmB,GAAG,IAAI;IAgBnE,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO;IAevF,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO;IAmClD,OAAO,CAAC,QAAQ;CAUjB;AAED,qBAGa,gBAAiB,YAAW,OAAO,CAAC,IAAI,CAAC;IAMlD,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;IARpB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,eAAe,CAA8B;gBAG3C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,kBAAkB,EAC9B,UAAU,EAAE,UAAU;IAMhC;;;OAGG;YACW,YAAY;IAapB,OAAO,CAAC,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;yCAhC5E,gBAAgB;6CAAhB,gBAAgB;CAygB5B;AA8FD,UAAU,sBAAuB,SAAQ,mBAAmB;IAC1D,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC;CACjC;AAED,qBAIa,gBAAgB;yCAAhB,gBAAgB;0CAAhB,gBAAgB;0CAAhB,gBAAgB;CAK5B"}
@@ -126,6 +126,7 @@ export class ResourceResolver {
126
126
  async waitForLogin() {
127
127
  await firstValueFrom(MJGlobal.Instance.GetEventListener(true).pipe(filter(event => event.event === MJEventType.LoggedIn), take(1)));
128
128
  await StartupManager.Instance.Startup();
129
+ await this.appManager.WhenReady();
129
130
  }
130
131
  async resolve(route, state) {
131
132
  // Wait for login/metadata to be ready before processing
@@ -163,7 +164,6 @@ export class ResourceResolver {
163
164
  // Check app access
164
165
  const accessResult = this.appManager.CheckAppAccess(appName);
165
166
  if (accessResult.status !== 'accessible') {
166
- console.log(`[ResourceResolver] User cannot access app "${appName}": ${accessResult.status}`);
167
167
  return;
168
168
  }
169
169
  // Get the app for its ID
@@ -346,7 +346,6 @@ export class ResourceResolver {
346
346
  if (accessResult.status !== 'accessible') {
347
347
  // User doesn't have access - let the shell component handle the error dialog
348
348
  // Don't create any tabs here
349
- console.log(`[ResourceResolver] User cannot access app "${appName}": ${accessResult.status}`);
350
349
  return;
351
350
  }
352
351
  // Let the app create its default tab (will load default dashboard if no nav items)
@@ -364,7 +363,6 @@ export class ResourceResolver {
364
363
  if (accessResult.status !== 'accessible') {
365
364
  // User doesn't have access - let the shell component handle the error dialog
366
365
  // Don't create any tabs here
367
- console.log(`[ResourceResolver] User cannot access app "${appName}": ${accessResult.status}`);
368
366
  return;
369
367
  }
370
368
  // Find the app in metadata for nav item details
@@ -1 +1 @@
1
- {"version":3,"file":"app-routing.module.js","sourceRoot":"","sources":["../src/app-routing.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentRef, Injectable, NgModule } from '@angular/core';\nimport { Routes, RouterModule, Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\nimport {\n SingleRecordComponent,\n AuthGuardService as AuthGuard\n} from './public-api';\nimport { OAuthCallbackComponent } from './lib/oauth/oauth-callback.component';\nimport { LogError, Metadata, StartupManager } from '@memberjunction/core';\nimport { SharedService, SYSTEM_APP_ID } from '@memberjunction/ng-shared';\nimport { DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\nimport { ApplicationManager, TabService } from '@memberjunction/ng-base-application';\nimport { MJGlobal, MJEventType } from '@memberjunction/global';\nimport { firstValueFrom, filter, take } from 'rxjs';\n\nexport class CustomReuseStrategy implements RouteReuseStrategy {\n storedRoutes: { [key: string]: DetachedRouteHandleExt | null } = {};\n\n // Determines if a route should be detached and stored\n shouldDetach(route: ActivatedRouteSnapshot): boolean {\n // removed reference to the skip stuff from here - we don't use the skip stuff anymore, using generic conversations/chat now\n return false;\n }\n\n // Stores the detached route\n store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandleExt | null): void {\n if(!handle){\n return;\n }\n\n if (route.routeConfig && route.routeConfig.path) {\n this.storedRoutes[route.routeConfig.path] = handle;\n this.callHook(handle, 'ngOnDetach');\n }\n }\n\n // Determines if a stored route should be reattached\n shouldAttach(route: ActivatedRouteSnapshot): boolean {\n // Reattach if we have a stored route for the incoming route\n if (route.routeConfig?.path) {\n return !!route.routeConfig && !!this.storedRoutes[route.routeConfig.path];\n }\n\n else return false;\n }\n\n // Retrieves the stored route; null means no stored route for this path\n retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n if (!route.routeConfig || (route.routeConfig.path && !this.storedRoutes[route.routeConfig.path])) {\n return null;\n } \n else if (route.routeConfig.path) {\n const path = this.storedRoutes[route.routeConfig.path];\n if(path){\n this.callHook(path, 'ngOnAttach');\n return path;\n }\n }\n\n return null;\n }\n\n // Determines if the route should be reused\n shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n // we need to compare the params object from future and curr and see if any differences\n // and do the same for the queryParams object from each\n // if there are differences, return false, otherwise return true\n const futureParams = future.params;\n const currParams = curr.params;\n const futureQueryParams = future.queryParams;\n const currQueryParams = curr.queryParams;\n\n // only reuse (e.g. return true) when all of these comparisons are the same\n return this.objectContentsEqual(futureParams, currParams) && // route params are the same\n this.objectContentsEqual(futureQueryParams, currQueryParams) && // query params are the same\n future.routeConfig === curr.routeConfig; // route config object is the same\n }\n\n objectContentsEqual(obj1: any, obj2: any): boolean {\n if (obj1 === obj2) {\n return true; // exact same object\n }\n\n if (obj1 === null && obj2 !== null) {\n return false; // not the same object\n }\n\n if (obj1 === undefined && obj2 !== undefined) {\n return false; // not the same object\n }\n\n if (typeof obj1 === 'object' || typeof obj2 === 'object') {\n if (Object.keys(obj1).length !== Object.keys(obj2).length) {\n return false; // different number of keys\n }\n \n for (const key in obj1) {\n // check to see the type of the key, if it is an object, then we call this function recursively \n // otherwise we do simple comparison\n if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') {\n if (!this.objectContentsEqual(obj1[key], obj2[key])) {\n return false; // any individual key not matching means the objects are different\n }\n }\n else if (obj1[key] !== obj2[key]) {\n return false; // any individual key not matching means the objects are different\n }\n } \n }\n\n return true;\n }\n\n private callHook(detachedTree: DetachedRouteHandleExt, hookName: 'ngOnDetach' | 'ngOnAttach'): void {\n if(!detachedTree || !hookName){\n return;\n }\n\n const componentRef = detachedTree.componentRef;\n if (componentRef && componentRef.instance && typeof componentRef.instance[hookName] === 'function') {\n componentRef.instance[hookName]();\n }\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ResourceResolver implements Resolve<void> {\n private processedUrls = new Map<string, number>();\n private readonly URL_DEBOUNCE_MS = 100; // Allow same URL after 100ms\n private loggedInPromise: Promise<void> | null = null;\n\n constructor(\n private sharedService: SharedService,\n private router: Router,\n private appManager: ApplicationManager,\n private tabService: TabService\n ) {\n // Create a promise that resolves when the user is logged in and metadata is loaded\n this.loggedInPromise = this.waitForLogin();\n }\n\n /**\n * Wait for the LoggedIn event which indicates metadata is loaded.\n * Uses replay (true) to catch the event even if it already fired.\n */\n private async waitForLogin(): Promise<void> {\n await firstValueFrom(\n MJGlobal.Instance.GetEventListener(true).pipe(\n filter(event => event.event === MJEventType.LoggedIn),\n take(1)\n )\n );\n\n await StartupManager.Instance.Startup();\n }\n\n async resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<void> {\n // Wait for login/metadata to be ready before processing\n if (this.loggedInPromise) {\n await this.loggedInPromise;\n }\n\n // Prevent duplicate processing of the same URL within a short time window\n // This allows legitimate re-navigation to the same URL (like app switching)\n // while preventing rapid duplicate calls\n const now = Date.now();\n const lastProcessed = this.processedUrls.get(state.url);\n\n if (lastProcessed && (now - lastProcessed) < this.URL_DEBOUNCE_MS) {\n return;\n }\n\n this.processedUrls.set(state.url, now);\n\n // Check if this resolve should be suppressed (URL sync from tab click, not real navigation)\n if (this.tabService.ShouldSuppressResolve()) {\n this.tabService.ClearSuppressFlag();\n return;\n }\n\n const md = new Metadata();\n const applications = md.Applications;\n\n // Known resource types for app-scoped resource URLs\n const KNOWN_RESOURCE_TYPES = ['dashboard', 'record', 'view', 'query', 'report', 'artifact', 'search'];\n\n // Handle app-scoped resource navigation: /app/:appName/:resourceType/:param1/:param2?\n // This pattern supports resources opened within an app context (e.g., /app/home/dashboard/abc123)\n // Only handle if the second path segment is a known resource type\n if (route.params['appName'] !== undefined &&\n route.params['resourceType'] !== undefined &&\n KNOWN_RESOURCE_TYPES.includes(route.params['resourceType'].toLowerCase())) {\n const appName = decodeURIComponent(route.params['appName']);\n const resourceType = route.params['resourceType'].toLowerCase();\n const param1 = route.params['param1'];\n const param2 = route.params['param2'];\n\n // Check app access\n const accessResult = this.appManager.CheckAppAccess(appName);\n if (accessResult.status !== 'accessible') {\n console.log(`[ResourceResolver] User cannot access app \"${appName}\": ${accessResult.status}`);\n return;\n }\n\n // Get the app for its ID\n const app = this.appManager.GetAppByPath(appName) || this.appManager.GetAppByName(appName);\n if (!app) {\n LogError(`Application ${appName} not found in metadata`);\n return;\n }\n\n // Handle based on resource type\n switch (resourceType) {\n case 'dashboard': {\n // /app/:appName/dashboard/:dashboardId\n const dashboardId = param1;\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Dashboard - ${dashboardId}`,\n Configuration: {\n resourceType: 'Dashboards',\n dashboardId,\n recordId: dashboardId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: dashboardId,\n IsPinned: false\n });\n return;\n }\n\n case 'record': {\n // /app/:appName/record/:entityName/:recordId\n const entityName = decodeURIComponent(param1);\n const recordId = param2;\n\n const entityInfo = md.Entities.find(e => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());\n if (!entityInfo) {\n LogError(`Entity ${entityName} not found in metadata`);\n return;\n }\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `${entityName} - ${recordId}`,\n Configuration: {\n resourceType: 'Records',\n Entity: entityName,\n recordId: recordId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: recordId,\n IsPinned: false\n });\n return;\n }\n\n case 'view': {\n // /app/:appName/view/:viewId OR /app/:appName/view/dynamic/:entityName\n if (param1 === 'dynamic' && param2) {\n // Dynamic view: /app/:appName/view/dynamic/:entityName\n const entityName = decodeURIComponent(param2);\n const extraFilter = route.queryParams['ExtraFilter'] || route.queryParams['extraFilter'];\n const filterSuffix = extraFilter ? ' (Filtered)' : '';\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `${entityName}${filterSuffix}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n Entity: entityName,\n ExtraFilter: extraFilter,\n isDynamic: true,\n recordId: 'dynamic',\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: 'dynamic',\n IsPinned: false\n });\n } else {\n // Saved view: /app/:appName/view/:viewId\n const viewId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `View - ${viewId}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n viewId,\n recordId: viewId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: viewId,\n IsPinned: false\n });\n }\n return;\n }\n\n case 'query': {\n // /app/:appName/query/:queryId\n const queryId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Query - ${queryId}`,\n Configuration: {\n resourceType: 'Queries',\n queryId,\n recordId: queryId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: queryId,\n IsPinned: false\n });\n return;\n }\n\n case 'report': {\n // /app/:appName/report/:reportId\n const reportId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Report - ${reportId}`,\n Configuration: {\n resourceType: 'Reports',\n reportId,\n recordId: reportId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: reportId,\n IsPinned: false\n });\n return;\n }\n\n case 'artifact': {\n // /app/:appName/artifact/:artifactId\n const artifactId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Artifact - ${artifactId}`,\n Configuration: {\n resourceType: 'Artifacts',\n artifactId,\n recordId: artifactId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: artifactId,\n IsPinned: false\n });\n return;\n }\n\n case 'search': {\n // /app/:appName/search/:searchInput\n const searchInput = decodeURIComponent(param1);\n const entityName = route.queryParams['Entity'] || '';\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Search: ${searchInput}`,\n Configuration: {\n resourceType: 'Search Results',\n Entity: entityName,\n SearchInput: searchInput,\n recordId: searchInput,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: searchInput,\n IsPinned: false\n });\n return;\n }\n\n default:\n LogError(`Unknown resource type in app-scoped URL: ${resourceType}`);\n return;\n }\n }\n\n // Handle app-level navigation: /app/:appName (no nav item - app default)\n if (route.params['appName'] !== undefined && route.params['navItemName'] === undefined) {\n const appName = decodeURIComponent(route.params['appName']);\n\n // IMPORTANT: Check if user has access to this app BEFORE proceeding\n // Use the ApplicationManager's access check which respects UserApplication records\n const accessResult = this.appManager.CheckAppAccess(appName);\n\n if (accessResult.status !== 'accessible') {\n // User doesn't have access - let the shell component handle the error dialog\n // Don't create any tabs here\n console.log(`[ResourceResolver] User cannot access app \"${appName}\": ${accessResult.status}`);\n return;\n }\n\n // Let the app create its default tab (will load default dashboard if no nav items)\n // The shell component will handle this after setting the active app\n // We don't need to do anything here - just return to allow the app to activate\n return;\n }\n\n // Handle app navigation: /app/:appName/:navItemName\n if (route.params['appName'] !== undefined && route.params['navItemName'] !== undefined) {\n const appName = decodeURIComponent(route.params['appName']);\n const navItemName = decodeURIComponent(route.params['navItemName']);\n\n // IMPORTANT: Check if user has access to this app BEFORE proceeding\n // Use the ApplicationManager's access check which respects UserApplication records\n const accessResult = this.appManager.CheckAppAccess(appName);\n\n if (accessResult.status !== 'accessible') {\n // User doesn't have access - let the shell component handle the error dialog\n // Don't create any tabs here\n console.log(`[ResourceResolver] User cannot access app \"${appName}\": ${accessResult.status}`);\n return;\n }\n\n // Find the app in metadata for nav item details\n const app = applications.find(a =>\n a.Path.trim().toLowerCase() === appName.trim().toLowerCase() ||\n a.Name.trim().toLowerCase() === appName.trim().toLowerCase()\n );\n\n if (!app) {\n LogError(`Application ${appName} not found in metadata`);\n return;\n }\n\n // Get nav items from the app's DefaultNavItems JSON\n let navItems: any[] = [];\n if (app.DefaultNavItems) {\n try {\n navItems = JSON.parse(app.DefaultNavItems);\n } catch (e) {\n LogError(`Failed to parse DefaultNavItems for app ${appName}`);\n console.error(e);\n return;\n }\n }\n\n // Find the nav item by label (case-insensitive)\n const navItem = navItems.find(item =>\n item.Label?.trim().toLowerCase() === navItemName.trim().toLowerCase()\n );\n\n if (!navItem) {\n LogError(`Nav item ${navItemName} not found in app ${appName}`);\n return;\n }\n\n // Get the resource type from the nav item\n if (!navItem.ResourceType) {\n LogError(`Nav item ${navItemName} has no ResourceType defined`);\n return;\n }\n\n // NOTE: Don't set active app here - the shell component handles that\n // based on the URL to avoid navigation loops\n\n // Queue tab request via TabService\n // Build configuration - include DriverClass for Custom resource types\n const config: any = {\n route: navItem.Route,\n resourceType: navItem.ResourceType,\n recordId: navItem.RecordID,\n appName: appName,\n appId: app.ID,\n navItemName: navItem.Label,\n ...(navItem.Configuration || {}),\n queryParams: route.queryParams\n };\n\n // For Custom resource types, include the DriverClass\n if (navItem.ResourceType === 'Custom' && navItem.DriverClass) {\n config.driverClass = navItem.DriverClass;\n }\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: navItem.Label,\n Configuration: config,\n IsPinned: false\n });\n\n return;\n }\n\n // Determine resource type and record ID based on the route path\n if (route.params['recordId'] !== undefined && route.params['entityName'] !== undefined) {\n // /resource/record/:entityName/:recordId\n const entityName = decodeURIComponent(route.params['entityName']);\n const recordId = route.params['recordId'];\n\n const entityInfo = md.Entities.find(e => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());\n if (!entityInfo) {\n LogError(`Entity ${entityName} not found in metadata`);\n return;\n }\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `${entityName} - ${recordId}`,\n Configuration: {\n resourceType: 'Records',\n Entity: entityName,\n recordId: recordId\n },\n ResourceRecordId: recordId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['viewId'] !== undefined) {\n // /resource/view/:viewId (saved views)\n const viewId = route.params['viewId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `View - ${viewId}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n viewId,\n recordId: viewId\n },\n ResourceRecordId: viewId,\n IsPinned: false\n });\n return;\n }\n\n if (route.url.length >= 3 && route.url[1].path === 'view' && route.url[2].path === 'dynamic') {\n // /resource/view/dynamic/:entityName\n const entityName = decodeURIComponent(route.params['entityName']);\n const extraFilter = route.queryParams['ExtraFilter'] || route.queryParams['extraFilter'];\n\n const filterSuffix = extraFilter ? ' (Filtered)' : '';\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `${entityName}${filterSuffix}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n Entity: entityName,\n ExtraFilter: extraFilter,\n isDynamic: true,\n recordId: 'dynamic'\n },\n ResourceRecordId: 'dynamic',\n IsPinned: false\n });\n return;\n }\n\n if (route.params['dashboardId'] !== undefined) {\n // /resource/dashboard/:dashboardId\n const dashboardId = route.params['dashboardId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Dashboard - ${dashboardId}`,\n Configuration: {\n resourceType: 'Dashboards',\n dashboardId,\n recordId: dashboardId\n },\n ResourceRecordId: dashboardId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['artifactId'] !== undefined) {\n // /resource/artifact/:artifactId\n const artifactId = route.params['artifactId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Artifact - ${artifactId}`,\n Configuration: {\n resourceType: 'Artifacts',\n artifactId,\n recordId: artifactId\n },\n ResourceRecordId: artifactId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['queryId'] !== undefined) {\n // /resource/query/:queryId\n const queryId = route.params['queryId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Query - ${queryId}`,\n Configuration: {\n resourceType: 'Queries',\n queryId,\n recordId: queryId\n },\n ResourceRecordId: queryId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['searchInput'] !== undefined) {\n // /resource/search/:searchInput\n const searchInput = decodeURIComponent(route.params['searchInput']);\n const entityName = route.queryParams['Entity'] || '';\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Search: ${searchInput}`,\n Configuration: {\n resourceType: 'Search Results',\n Entity: entityName,\n SearchInput: searchInput,\n recordId: searchInput\n },\n ResourceRecordId: searchInput,\n IsPinned: false\n });\n return;\n }\n\n LogError(`Unable to parse resource route parameters from URL: ${state.url}`);\n }\n}\n\nconst routes: Routes = [\n // OAuth callback route - must be FIRST as it handles redirects from OAuth providers\n // This route does NOT require AuthGuard because it's the callback from external OAuth\n // The component itself handles authentication when calling the exchange endpoint\n // NOTE: We use component directly instead of loadChildren because lazy loading\n // doesn't work correctly when the route is defined in a library (explorer-core)\n // rather than the main application.\n {\n path: 'oauth/callback',\n component: OAuthCallbackComponent\n },\n\n // App-scoped resource routes (new pattern)\n // These must come BEFORE app/:appName/:navItemName to be matched first\n {\n path: 'app/:appName/view/dynamic/:param2',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n data: { resourceType: 'view' }\n },\n {\n path: 'app/:appName/record/:param1/:param2',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n data: { resourceType: 'record' }\n },\n {\n path: 'app/:appName/:resourceType/:param1',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n // App navigation routes\n {\n path: 'app/:appName/:navItemName',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'app/:appName',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n // Legacy resource routes (kept for backward compatibility, will redirect in future)\n {\n path: 'resource/record/:entityName/:recordId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/view/dynamic/:entityName',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/view/:viewId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/dashboard/:dashboardId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/artifact/:artifactId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/query/:queryId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/search/:searchInput',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n } \n];\n\ninterface DetachedRouteHandleExt extends DetachedRouteHandle {\n componentRef: ComponentRef<any>;\n}\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { onSameUrlNavigation: 'reload' })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {\n // NOTE - in MJ Explorer 3.0 and beyond we do NOT use Explorer Navigation Items anymore and\n // this allows us to remove the dyanmic route stuff entirely here. The NEW paradigm is \n // everything beyond resource navigation is an app and apps have the ability to define \n // nav items which is a superset of functionality compared to the old Explorer Nav Items.\n}"]}
1
+ {"version":3,"file":"app-routing.module.js","sourceRoot":"","sources":["../src/app-routing.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { ComponentRef, Injectable, NgModule } from '@angular/core';\nimport { Routes, RouterModule, Resolve, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';\nimport {\n SingleRecordComponent,\n AuthGuardService as AuthGuard\n} from './public-api';\nimport { OAuthCallbackComponent } from './lib/oauth/oauth-callback.component';\nimport { LogError, Metadata, StartupManager } from '@memberjunction/core';\nimport { SharedService, SYSTEM_APP_ID } from '@memberjunction/ng-shared';\nimport { DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\nimport { ApplicationManager, TabService } from '@memberjunction/ng-base-application';\nimport { MJGlobal, MJEventType } from '@memberjunction/global';\nimport { firstValueFrom, filter, take } from 'rxjs';\n\nexport class CustomReuseStrategy implements RouteReuseStrategy {\n storedRoutes: { [key: string]: DetachedRouteHandleExt | null } = {};\n\n // Determines if a route should be detached and stored\n shouldDetach(route: ActivatedRouteSnapshot): boolean {\n // removed reference to the skip stuff from here - we don't use the skip stuff anymore, using generic conversations/chat now\n return false;\n }\n\n // Stores the detached route\n store(route: ActivatedRouteSnapshot, handle: DetachedRouteHandleExt | null): void {\n if(!handle){\n return;\n }\n\n if (route.routeConfig && route.routeConfig.path) {\n this.storedRoutes[route.routeConfig.path] = handle;\n this.callHook(handle, 'ngOnDetach');\n }\n }\n\n // Determines if a stored route should be reattached\n shouldAttach(route: ActivatedRouteSnapshot): boolean {\n // Reattach if we have a stored route for the incoming route\n if (route.routeConfig?.path) {\n return !!route.routeConfig && !!this.storedRoutes[route.routeConfig.path];\n }\n\n else return false;\n }\n\n // Retrieves the stored route; null means no stored route for this path\n retrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle | null {\n if (!route.routeConfig || (route.routeConfig.path && !this.storedRoutes[route.routeConfig.path])) {\n return null;\n } \n else if (route.routeConfig.path) {\n const path = this.storedRoutes[route.routeConfig.path];\n if(path){\n this.callHook(path, 'ngOnAttach');\n return path;\n }\n }\n\n return null;\n }\n\n // Determines if the route should be reused\n shouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n // we need to compare the params object from future and curr and see if any differences\n // and do the same for the queryParams object from each\n // if there are differences, return false, otherwise return true\n const futureParams = future.params;\n const currParams = curr.params;\n const futureQueryParams = future.queryParams;\n const currQueryParams = curr.queryParams;\n\n // only reuse (e.g. return true) when all of these comparisons are the same\n return this.objectContentsEqual(futureParams, currParams) && // route params are the same\n this.objectContentsEqual(futureQueryParams, currQueryParams) && // query params are the same\n future.routeConfig === curr.routeConfig; // route config object is the same\n }\n\n objectContentsEqual(obj1: any, obj2: any): boolean {\n if (obj1 === obj2) {\n return true; // exact same object\n }\n\n if (obj1 === null && obj2 !== null) {\n return false; // not the same object\n }\n\n if (obj1 === undefined && obj2 !== undefined) {\n return false; // not the same object\n }\n\n if (typeof obj1 === 'object' || typeof obj2 === 'object') {\n if (Object.keys(obj1).length !== Object.keys(obj2).length) {\n return false; // different number of keys\n }\n \n for (const key in obj1) {\n // check to see the type of the key, if it is an object, then we call this function recursively \n // otherwise we do simple comparison\n if (typeof obj1[key] === 'object' && typeof obj2[key] === 'object') {\n if (!this.objectContentsEqual(obj1[key], obj2[key])) {\n return false; // any individual key not matching means the objects are different\n }\n }\n else if (obj1[key] !== obj2[key]) {\n return false; // any individual key not matching means the objects are different\n }\n } \n }\n\n return true;\n }\n\n private callHook(detachedTree: DetachedRouteHandleExt, hookName: 'ngOnDetach' | 'ngOnAttach'): void {\n if(!detachedTree || !hookName){\n return;\n }\n\n const componentRef = detachedTree.componentRef;\n if (componentRef && componentRef.instance && typeof componentRef.instance[hookName] === 'function') {\n componentRef.instance[hookName]();\n }\n }\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ResourceResolver implements Resolve<void> {\n private processedUrls = new Map<string, number>();\n private readonly URL_DEBOUNCE_MS = 100; // Allow same URL after 100ms\n private loggedInPromise: Promise<void> | null = null;\n\n constructor(\n private sharedService: SharedService,\n private router: Router,\n private appManager: ApplicationManager,\n private tabService: TabService\n ) {\n // Create a promise that resolves when the user is logged in and metadata is loaded\n this.loggedInPromise = this.waitForLogin();\n }\n\n /**\n * Wait for the LoggedIn event which indicates metadata is loaded.\n * Uses replay (true) to catch the event even if it already fired.\n */\n private async waitForLogin(): Promise<void> {\n await firstValueFrom(\n MJGlobal.Instance.GetEventListener(true).pipe(\n filter(event => event.event === MJEventType.LoggedIn),\n take(1)\n )\n );\n\n await StartupManager.Instance.Startup();\n\n await this.appManager.WhenReady();\n }\n\n async resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<void> {\n // Wait for login/metadata to be ready before processing\n if (this.loggedInPromise) {\n await this.loggedInPromise;\n }\n\n // Prevent duplicate processing of the same URL within a short time window\n // This allows legitimate re-navigation to the same URL (like app switching)\n // while preventing rapid duplicate calls\n const now = Date.now();\n const lastProcessed = this.processedUrls.get(state.url);\n\n if (lastProcessed && (now - lastProcessed) < this.URL_DEBOUNCE_MS) {\n return;\n }\n\n this.processedUrls.set(state.url, now);\n\n // Check if this resolve should be suppressed (URL sync from tab click, not real navigation)\n if (this.tabService.ShouldSuppressResolve()) {\n this.tabService.ClearSuppressFlag();\n return;\n }\n\n const md = new Metadata();\n const applications = md.Applications;\n\n // Known resource types for app-scoped resource URLs\n const KNOWN_RESOURCE_TYPES = ['dashboard', 'record', 'view', 'query', 'report', 'artifact', 'search'];\n\n // Handle app-scoped resource navigation: /app/:appName/:resourceType/:param1/:param2?\n // This pattern supports resources opened within an app context (e.g., /app/home/dashboard/abc123)\n // Only handle if the second path segment is a known resource type\n if (route.params['appName'] !== undefined &&\n route.params['resourceType'] !== undefined &&\n KNOWN_RESOURCE_TYPES.includes(route.params['resourceType'].toLowerCase())) {\n const appName = decodeURIComponent(route.params['appName']);\n const resourceType = route.params['resourceType'].toLowerCase();\n const param1 = route.params['param1'];\n const param2 = route.params['param2'];\n\n // Check app access\n const accessResult = this.appManager.CheckAppAccess(appName);\n if (accessResult.status !== 'accessible') {\n return;\n }\n\n // Get the app for its ID\n const app = this.appManager.GetAppByPath(appName) || this.appManager.GetAppByName(appName);\n if (!app) {\n LogError(`Application ${appName} not found in metadata`);\n return;\n }\n\n // Handle based on resource type\n switch (resourceType) {\n case 'dashboard': {\n // /app/:appName/dashboard/:dashboardId\n const dashboardId = param1;\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Dashboard - ${dashboardId}`,\n Configuration: {\n resourceType: 'Dashboards',\n dashboardId,\n recordId: dashboardId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: dashboardId,\n IsPinned: false\n });\n return;\n }\n\n case 'record': {\n // /app/:appName/record/:entityName/:recordId\n const entityName = decodeURIComponent(param1);\n const recordId = param2;\n\n const entityInfo = md.Entities.find(e => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());\n if (!entityInfo) {\n LogError(`Entity ${entityName} not found in metadata`);\n return;\n }\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `${entityName} - ${recordId}`,\n Configuration: {\n resourceType: 'Records',\n Entity: entityName,\n recordId: recordId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: recordId,\n IsPinned: false\n });\n return;\n }\n\n case 'view': {\n // /app/:appName/view/:viewId OR /app/:appName/view/dynamic/:entityName\n if (param1 === 'dynamic' && param2) {\n // Dynamic view: /app/:appName/view/dynamic/:entityName\n const entityName = decodeURIComponent(param2);\n const extraFilter = route.queryParams['ExtraFilter'] || route.queryParams['extraFilter'];\n const filterSuffix = extraFilter ? ' (Filtered)' : '';\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `${entityName}${filterSuffix}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n Entity: entityName,\n ExtraFilter: extraFilter,\n isDynamic: true,\n recordId: 'dynamic',\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: 'dynamic',\n IsPinned: false\n });\n } else {\n // Saved view: /app/:appName/view/:viewId\n const viewId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `View - ${viewId}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n viewId,\n recordId: viewId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: viewId,\n IsPinned: false\n });\n }\n return;\n }\n\n case 'query': {\n // /app/:appName/query/:queryId\n const queryId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Query - ${queryId}`,\n Configuration: {\n resourceType: 'Queries',\n queryId,\n recordId: queryId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: queryId,\n IsPinned: false\n });\n return;\n }\n\n case 'report': {\n // /app/:appName/report/:reportId\n const reportId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Report - ${reportId}`,\n Configuration: {\n resourceType: 'Reports',\n reportId,\n recordId: reportId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: reportId,\n IsPinned: false\n });\n return;\n }\n\n case 'artifact': {\n // /app/:appName/artifact/:artifactId\n const artifactId = param1;\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Artifact - ${artifactId}`,\n Configuration: {\n resourceType: 'Artifacts',\n artifactId,\n recordId: artifactId,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: artifactId,\n IsPinned: false\n });\n return;\n }\n\n case 'search': {\n // /app/:appName/search/:searchInput\n const searchInput = decodeURIComponent(param1);\n const entityName = route.queryParams['Entity'] || '';\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: `Search: ${searchInput}`,\n Configuration: {\n resourceType: 'Search Results',\n Entity: entityName,\n SearchInput: searchInput,\n recordId: searchInput,\n appName: appName,\n appId: app.ID\n },\n ResourceRecordId: searchInput,\n IsPinned: false\n });\n return;\n }\n\n default:\n LogError(`Unknown resource type in app-scoped URL: ${resourceType}`);\n return;\n }\n }\n\n // Handle app-level navigation: /app/:appName (no nav item - app default)\n if (route.params['appName'] !== undefined && route.params['navItemName'] === undefined) {\n const appName = decodeURIComponent(route.params['appName']);\n\n // IMPORTANT: Check if user has access to this app BEFORE proceeding\n // Use the ApplicationManager's access check which respects UserApplication records\n const accessResult = this.appManager.CheckAppAccess(appName);\n\n if (accessResult.status !== 'accessible') {\n // User doesn't have access - let the shell component handle the error dialog\n // Don't create any tabs here\n return;\n }\n\n // Let the app create its default tab (will load default dashboard if no nav items)\n // The shell component will handle this after setting the active app\n // We don't need to do anything here - just return to allow the app to activate\n return;\n }\n\n // Handle app navigation: /app/:appName/:navItemName\n if (route.params['appName'] !== undefined && route.params['navItemName'] !== undefined) {\n const appName = decodeURIComponent(route.params['appName']);\n const navItemName = decodeURIComponent(route.params['navItemName']);\n\n // IMPORTANT: Check if user has access to this app BEFORE proceeding\n // Use the ApplicationManager's access check which respects UserApplication records\n const accessResult = this.appManager.CheckAppAccess(appName);\n\n if (accessResult.status !== 'accessible') {\n // User doesn't have access - let the shell component handle the error dialog\n // Don't create any tabs here\n return;\n }\n\n // Find the app in metadata for nav item details\n const app = applications.find(a =>\n a.Path.trim().toLowerCase() === appName.trim().toLowerCase() ||\n a.Name.trim().toLowerCase() === appName.trim().toLowerCase()\n );\n\n if (!app) {\n LogError(`Application ${appName} not found in metadata`);\n return;\n }\n\n // Get nav items from the app's DefaultNavItems JSON\n let navItems: any[] = [];\n if (app.DefaultNavItems) {\n try {\n navItems = JSON.parse(app.DefaultNavItems);\n } catch (e) {\n LogError(`Failed to parse DefaultNavItems for app ${appName}`);\n console.error(e);\n return;\n }\n }\n\n // Find the nav item by label (case-insensitive)\n const navItem = navItems.find(item =>\n item.Label?.trim().toLowerCase() === navItemName.trim().toLowerCase()\n );\n\n if (!navItem) {\n LogError(`Nav item ${navItemName} not found in app ${appName}`);\n return;\n }\n\n // Get the resource type from the nav item\n if (!navItem.ResourceType) {\n LogError(`Nav item ${navItemName} has no ResourceType defined`);\n return;\n }\n\n // NOTE: Don't set active app here - the shell component handles that\n // based on the URL to avoid navigation loops\n\n // Queue tab request via TabService\n // Build configuration - include DriverClass for Custom resource types\n const config: any = {\n route: navItem.Route,\n resourceType: navItem.ResourceType,\n recordId: navItem.RecordID,\n appName: appName,\n appId: app.ID,\n navItemName: navItem.Label,\n ...(navItem.Configuration || {}),\n queryParams: route.queryParams\n };\n\n // For Custom resource types, include the DriverClass\n if (navItem.ResourceType === 'Custom' && navItem.DriverClass) {\n config.driverClass = navItem.DriverClass;\n }\n\n this.tabService.OpenTab({\n ApplicationId: app.ID,\n Title: navItem.Label,\n Configuration: config,\n IsPinned: false\n });\n\n return;\n }\n\n // Determine resource type and record ID based on the route path\n if (route.params['recordId'] !== undefined && route.params['entityName'] !== undefined) {\n // /resource/record/:entityName/:recordId\n const entityName = decodeURIComponent(route.params['entityName']);\n const recordId = route.params['recordId'];\n\n const entityInfo = md.Entities.find(e => e.Name.trim().toLowerCase() === entityName.trim().toLowerCase());\n if (!entityInfo) {\n LogError(`Entity ${entityName} not found in metadata`);\n return;\n }\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `${entityName} - ${recordId}`,\n Configuration: {\n resourceType: 'Records',\n Entity: entityName,\n recordId: recordId\n },\n ResourceRecordId: recordId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['viewId'] !== undefined) {\n // /resource/view/:viewId (saved views)\n const viewId = route.params['viewId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `View - ${viewId}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n viewId,\n recordId: viewId\n },\n ResourceRecordId: viewId,\n IsPinned: false\n });\n return;\n }\n\n if (route.url.length >= 3 && route.url[1].path === 'view' && route.url[2].path === 'dynamic') {\n // /resource/view/dynamic/:entityName\n const entityName = decodeURIComponent(route.params['entityName']);\n const extraFilter = route.queryParams['ExtraFilter'] || route.queryParams['extraFilter'];\n\n const filterSuffix = extraFilter ? ' (Filtered)' : '';\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `${entityName}${filterSuffix}`,\n Configuration: {\n resourceType: 'MJ: User Views',\n Entity: entityName,\n ExtraFilter: extraFilter,\n isDynamic: true,\n recordId: 'dynamic'\n },\n ResourceRecordId: 'dynamic',\n IsPinned: false\n });\n return;\n }\n\n if (route.params['dashboardId'] !== undefined) {\n // /resource/dashboard/:dashboardId\n const dashboardId = route.params['dashboardId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Dashboard - ${dashboardId}`,\n Configuration: {\n resourceType: 'Dashboards',\n dashboardId,\n recordId: dashboardId\n },\n ResourceRecordId: dashboardId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['artifactId'] !== undefined) {\n // /resource/artifact/:artifactId\n const artifactId = route.params['artifactId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Artifact - ${artifactId}`,\n Configuration: {\n resourceType: 'Artifacts',\n artifactId,\n recordId: artifactId\n },\n ResourceRecordId: artifactId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['queryId'] !== undefined) {\n // /resource/query/:queryId\n const queryId = route.params['queryId'];\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Query - ${queryId}`,\n Configuration: {\n resourceType: 'Queries',\n queryId,\n recordId: queryId\n },\n ResourceRecordId: queryId,\n IsPinned: false\n });\n return;\n }\n\n if (route.params['searchInput'] !== undefined) {\n // /resource/search/:searchInput\n const searchInput = decodeURIComponent(route.params['searchInput']);\n const entityName = route.queryParams['Entity'] || '';\n\n // Queue tab request via TabService\n this.tabService.OpenTab({\n ApplicationId: SYSTEM_APP_ID,\n Title: `Search: ${searchInput}`,\n Configuration: {\n resourceType: 'Search Results',\n Entity: entityName,\n SearchInput: searchInput,\n recordId: searchInput\n },\n ResourceRecordId: searchInput,\n IsPinned: false\n });\n return;\n }\n\n LogError(`Unable to parse resource route parameters from URL: ${state.url}`);\n }\n}\n\nconst routes: Routes = [\n // OAuth callback route - must be FIRST as it handles redirects from OAuth providers\n // This route does NOT require AuthGuard because it's the callback from external OAuth\n // The component itself handles authentication when calling the exchange endpoint\n // NOTE: We use component directly instead of loadChildren because lazy loading\n // doesn't work correctly when the route is defined in a library (explorer-core)\n // rather than the main application.\n {\n path: 'oauth/callback',\n component: OAuthCallbackComponent\n },\n\n // App-scoped resource routes (new pattern)\n // These must come BEFORE app/:appName/:navItemName to be matched first\n {\n path: 'app/:appName/view/dynamic/:param2',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n data: { resourceType: 'view' }\n },\n {\n path: 'app/:appName/record/:param1/:param2',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n data: { resourceType: 'record' }\n },\n {\n path: 'app/:appName/:resourceType/:param1',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n // App navigation routes\n {\n path: 'app/:appName/:navItemName',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'app/:appName',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n // Legacy resource routes (kept for backward compatibility, will redirect in future)\n {\n path: 'resource/record/:entityName/:recordId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/view/dynamic/:entityName',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/view/:viewId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/dashboard/:dashboardId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/artifact/:artifactId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/query/:queryId',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n },\n {\n path: 'resource/search/:searchInput',\n resolve: { data: ResourceResolver },\n canActivate: [AuthGuard],\n component: SingleRecordComponent,\n } \n];\n\ninterface DetachedRouteHandleExt extends DetachedRouteHandle {\n componentRef: ComponentRef<any>;\n}\n\n@NgModule({\n imports: [RouterModule.forRoot(routes, { onSameUrlNavigation: 'reload' })],\n exports: [RouterModule],\n})\nexport class AppRoutingModule {\n // NOTE - in MJ Explorer 3.0 and beyond we do NOT use Explorer Navigation Items anymore and\n // this allows us to remove the dyanmic route stuff entirely here. The NEW paradigm is \n // everything beyond resource navigation is an app and apps have the ability to define \n // nav items which is a superset of functionality compared to the old Explorer Nav Items.\n}"]}
@@ -15,5 +15,5 @@
15
15
  * Covers all @RegisterClass decorated classes in lazy-loaded packages.
16
16
  */
17
17
  export declare const LAZY_FEATURE_CONFIG: Record<string, () => Promise<void>>;
18
- export declare const LAZY_FEATURE_CONFIG_COUNT = 75;
18
+ export declare const LAZY_FEATURE_CONFIG_COUNT = 77;
19
19
  //# sourceMappingURL=lazy-feature-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-feature-config.d.ts","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoDH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CA0GnE,CAAC;AAEF,eAAO,MAAM,yBAAyB,KAAK,CAAC"}
1
+ {"version":3,"file":"lazy-feature-config.d.ts","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoDH;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CA4GnE,CAAC;AAEF,eAAO,MAAM,yBAAyB,KAAK,CAAC"}
@@ -16,7 +16,7 @@ function featureLoader(importFn) {
16
16
  }
17
17
  // --- @memberjunction/ng-dashboards → ./actions-dashboards.module (7 entries) ---
18
18
  const loadActionsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/actions-dashboards.module'));
19
- // --- @memberjunction/ng-dashboards → ./ai-dashboards.module (12 entries) ---
19
+ // --- @memberjunction/ng-dashboards → ./ai-dashboards.module (14 entries) ---
20
20
  const loadAiDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/ai-dashboards.module'));
21
21
  // --- @memberjunction/ng-dashboards → ./communication-dashboards.module (6 entries) ---
22
22
  const loadCommunicationDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/communication-dashboards.module'));
@@ -64,11 +64,13 @@ export const LAZY_FEATURE_CONFIG = {
64
64
  'BaseResourceComponent::AIModelsResource': loadAiDashboardsModule,
65
65
  'BaseResourceComponent::AIMonitorResource': loadAiDashboardsModule,
66
66
  'BaseResourceComponent::AIPromptsResource': loadAiDashboardsModule,
67
+ 'BaseResourceComponent::AnalyticsResource': loadAiDashboardsModule,
67
68
  'BaseResourceComponent::AutotaggingPipelineResource': loadAiDashboardsModule,
68
69
  'BaseResourceComponent::ClusterVisualizationResource': loadAiDashboardsModule,
69
70
  'BaseResourceComponent::DuplicateDetectionResource': loadAiDashboardsModule,
70
71
  'BaseResourceComponent::KnowledgeConfigResource': loadAiDashboardsModule,
71
72
  'BaseResourceComponent::KnowledgeSearchResource': loadAiDashboardsModule,
73
+ 'BaseResourceComponent::SchedulingResource': loadAiDashboardsModule,
72
74
  'BaseResourceComponent::VectorManagementResource': loadAiDashboardsModule,
73
75
  // @memberjunction/ng-dashboards → ./communication-dashboards.module
74
76
  'BaseDashboard::CommunicationDashboard': loadCommunicationDashboardsModule,
@@ -140,5 +142,5 @@ export const LAZY_FEATURE_CONFIG = {
140
142
  // @memberjunction/ng-react → .
141
143
  'RuntimeUtilities::RuntimeUtilities': loadNgReact,
142
144
  };
143
- export const LAZY_FEATURE_CONFIG_COUNT = 75;
145
+ export const LAZY_FEATURE_CONFIG_COUNT = 77;
144
146
  //# sourceMappingURL=lazy-feature-config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-feature-config.js","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AUTO-GENERATED FILE — DO NOT EDIT\n * Generated by: mj codegen manifest --lazy-config\n * Regenerate with: npm run mj:manifest:explorer\n *\n * Maps @RegisterClass entries to their lazy-loading chunks using compound keys.\n * Compound key format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\").\n *\n * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a\n * registration synchronously, the registered lazy loader builds the compound key and\n * looks it up here to dynamically import the chunk containing the class.\n */\n\n/** Helper to create a loader that all entries in a feature share. */\nfunction featureLoader(importFn: () => Promise<unknown>): () => Promise<void> {\n return () => importFn().then(() => {});\n}\n\n// --- @memberjunction/ng-dashboards → ./actions-dashboards.module (7 entries) ---\nconst loadActionsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/actions-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./ai-dashboards.module (12 entries) ---\nconst loadAiDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/ai-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./communication-dashboards.module (6 entries) ---\nconst loadCommunicationDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/communication-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./component-studio-dashboards.module (1 entries) ---\nconst loadComponentStudioDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/component-studio-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./core-dashboards.module (11 entries) ---\nconst loadCoreDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/core-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./credentials-dashboards.module (6 entries) ---\nconst loadCredentialsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/credentials-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./data-explorer-dashboards.module (2 entries) ---\nconst loadDataExplorerDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./integration.module (6 entries) ---\nconst loadIntegrationModule = featureLoader(() => import('@memberjunction/ng-dashboards/integration.module'));\n\n// --- @memberjunction/ng-dashboards → ./lists-dashboards.module (4 entries) ---\nconst loadListsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/lists-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./mcp.module (2 entries) ---\nconst loadMcpModule = featureLoader(() => import('@memberjunction/ng-dashboards/mcp.module'));\n\n// --- @memberjunction/ng-dashboards → ./scheduling-dashboards.module (4 entries) ---\nconst loadSchedulingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/scheduling-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./testing-dashboards.module (6 entries) ---\nconst loadTestingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/testing-dashboards.module'));\n\n// --- @memberjunction/ng-explorer-settings → ./settings.module (6 entries) ---\nconst loadSettingsModule = featureLoader(() => import('@memberjunction/ng-explorer-settings/settings.module'));\n\n// --- @memberjunction/ng-file-storage → ./file-storage.module (1 entries) ---\nconst loadFileStorageModule = featureLoader(() => import('@memberjunction/ng-file-storage/file-storage.module'));\n\n// --- @memberjunction/ng-react → . (1 entries) ---\nconst loadNgReact = featureLoader(() => import('@memberjunction/ng-react'));\n\n/**\n * Complete mapping of compound keys (BaseClassName::Key) to lazy-loading functions.\n * Covers all @RegisterClass decorated classes in lazy-loaded packages.\n */\nexport const LAZY_FEATURE_CONFIG: Record<string, () => Promise<void>> = {\n // @memberjunction/ng-dashboards → ./actions-dashboards.module\n 'BaseResourceComponent::ActionExplorerResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsCodeResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsEntitiesResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsMonitorResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsOverviewResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsScheduleResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsSecurityResource': loadActionsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./ai-dashboards.module\n 'BaseResourceComponent::AIAgentRequestsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIAgentsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIConfigResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIModelsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIMonitorResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIPromptsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AutotaggingPipelineResource': loadAiDashboardsModule,\n 'BaseResourceComponent::ClusterVisualizationResource': loadAiDashboardsModule,\n 'BaseResourceComponent::DuplicateDetectionResource': loadAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeConfigResource': loadAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeSearchResource': loadAiDashboardsModule,\n 'BaseResourceComponent::VectorManagementResource': loadAiDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./communication-dashboards.module\n 'BaseDashboard::CommunicationDashboard': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationLogsResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationMonitorResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationProvidersResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationRunsResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationTemplatesResource': loadCommunicationDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./component-studio-dashboards.module\n 'BaseDashboard::ComponentStudioDashboard': loadComponentStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./core-dashboards.module\n 'BaseApplication::HomeApplication': loadCoreDashboardsModule,\n 'BaseDashboard::EntityAdmin': loadCoreDashboardsModule,\n 'BaseResourceComponent::APIKeysResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::DashboardBrowserResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::HomeDashboard': loadCoreDashboardsModule,\n 'BaseResourceComponent::QueryBrowserResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::SystemDiagnosticsResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryDiffResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryGraphResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryLabelsResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryRestoreResource': loadCoreDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./credentials-dashboards.module\n 'BaseDashboard::CredentialsDashboard': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsAuditResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsCategoriesResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsListResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsOverviewResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsTypesResource': loadCredentialsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./data-explorer-dashboards.module\n 'BaseDashboard::DataExplorer': loadDataExplorerDashboardsModule,\n 'BaseResourceComponent::DataExplorerResource': loadDataExplorerDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./integration.module\n 'BaseResourceComponent::IntegrationActivity': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationConnections': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationMappingWorkspace': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationOverview': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationPipelines': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationSchedules': loadIntegrationModule,\n\n // @memberjunction/ng-dashboards → ./lists-dashboards.module\n 'BaseResourceComponent::ListsBrowseResource': loadListsDashboardsModule,\n 'BaseResourceComponent::ListsCategoriesResource': loadListsDashboardsModule,\n 'BaseResourceComponent::ListsMyListsResource': loadListsDashboardsModule,\n 'BaseResourceComponent::ListsOperationsResource': loadListsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./mcp.module\n 'BaseDashboard::MCPDashboard': loadMcpModule,\n 'BaseResourceComponent::MCPResource': loadMcpModule,\n\n // @memberjunction/ng-dashboards → ./scheduling-dashboards.module\n 'BaseDashboard::SchedulingDashboard': loadSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingActivityResource': loadSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingDashboardResource': loadSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingJobsResource': loadSchedulingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./testing-dashboards.module\n 'BaseDashboard::TestingDashboard': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingAnalyticsResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingDashboardTabResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingExplorerResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingReviewResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingRunsResource': loadTestingDashboardsModule,\n\n // @memberjunction/ng-explorer-settings → ./settings.module\n 'BaseDashboard::ApplicationManagement': loadSettingsModule,\n 'BaseDashboard::EntityPermissions': loadSettingsModule,\n 'BaseDashboard::RoleManagement': loadSettingsModule,\n 'BaseDashboard::SqlLogging': loadSettingsModule,\n 'BaseDashboard::UserManagement': loadSettingsModule,\n 'BaseNavigationComponent::Settings': loadSettingsModule,\n\n // @memberjunction/ng-file-storage → ./file-storage.module\n 'BaseResourceComponent::FileBrowserResource': loadFileStorageModule,\n\n // @memberjunction/ng-react → .\n 'RuntimeUtilities::RuntimeUtilities': loadNgReact,\n\n};\n\nexport const LAZY_FEATURE_CONFIG_COUNT = 75;\n"]}
1
+ {"version":3,"file":"lazy-feature-config.js","sourceRoot":"","sources":["../../src/generated/lazy-feature-config.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * AUTO-GENERATED FILE — DO NOT EDIT\n * Generated by: mj codegen manifest --lazy-config\n * Regenerate with: npm run mj:manifest:explorer\n *\n * Maps @RegisterClass entries to their lazy-loading chunks using compound keys.\n * Compound key format: \"BaseClassName::Key\" (e.g., \"BaseResourceComponent::HomeDashboard\").\n *\n * When ClassFactory.GetRegistrationAsync() or CreateInstanceAsync() cannot find a\n * registration synchronously, the registered lazy loader builds the compound key and\n * looks it up here to dynamically import the chunk containing the class.\n */\n\n/** Helper to create a loader that all entries in a feature share. */\nfunction featureLoader(importFn: () => Promise<unknown>): () => Promise<void> {\n return () => importFn().then(() => {});\n}\n\n// --- @memberjunction/ng-dashboards → ./actions-dashboards.module (7 entries) ---\nconst loadActionsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/actions-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./ai-dashboards.module (14 entries) ---\nconst loadAiDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/ai-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./communication-dashboards.module (6 entries) ---\nconst loadCommunicationDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/communication-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./component-studio-dashboards.module (1 entries) ---\nconst loadComponentStudioDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/component-studio-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./core-dashboards.module (11 entries) ---\nconst loadCoreDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/core-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./credentials-dashboards.module (6 entries) ---\nconst loadCredentialsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/credentials-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./data-explorer-dashboards.module (2 entries) ---\nconst loadDataExplorerDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/data-explorer-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./integration.module (6 entries) ---\nconst loadIntegrationModule = featureLoader(() => import('@memberjunction/ng-dashboards/integration.module'));\n\n// --- @memberjunction/ng-dashboards → ./lists-dashboards.module (4 entries) ---\nconst loadListsDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/lists-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./mcp.module (2 entries) ---\nconst loadMcpModule = featureLoader(() => import('@memberjunction/ng-dashboards/mcp.module'));\n\n// --- @memberjunction/ng-dashboards → ./scheduling-dashboards.module (4 entries) ---\nconst loadSchedulingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/scheduling-dashboards.module'));\n\n// --- @memberjunction/ng-dashboards → ./testing-dashboards.module (6 entries) ---\nconst loadTestingDashboardsModule = featureLoader(() => import('@memberjunction/ng-dashboards/testing-dashboards.module'));\n\n// --- @memberjunction/ng-explorer-settings → ./settings.module (6 entries) ---\nconst loadSettingsModule = featureLoader(() => import('@memberjunction/ng-explorer-settings/settings.module'));\n\n// --- @memberjunction/ng-file-storage → ./file-storage.module (1 entries) ---\nconst loadFileStorageModule = featureLoader(() => import('@memberjunction/ng-file-storage/file-storage.module'));\n\n// --- @memberjunction/ng-react → . (1 entries) ---\nconst loadNgReact = featureLoader(() => import('@memberjunction/ng-react'));\n\n/**\n * Complete mapping of compound keys (BaseClassName::Key) to lazy-loading functions.\n * Covers all @RegisterClass decorated classes in lazy-loaded packages.\n */\nexport const LAZY_FEATURE_CONFIG: Record<string, () => Promise<void>> = {\n // @memberjunction/ng-dashboards → ./actions-dashboards.module\n 'BaseResourceComponent::ActionExplorerResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsCodeResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsEntitiesResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsMonitorResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsOverviewResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsScheduleResource': loadActionsDashboardsModule,\n 'BaseResourceComponent::ActionsSecurityResource': loadActionsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./ai-dashboards.module\n 'BaseResourceComponent::AIAgentRequestsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIAgentsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIConfigResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIModelsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIMonitorResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AIPromptsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AnalyticsResource': loadAiDashboardsModule,\n 'BaseResourceComponent::AutotaggingPipelineResource': loadAiDashboardsModule,\n 'BaseResourceComponent::ClusterVisualizationResource': loadAiDashboardsModule,\n 'BaseResourceComponent::DuplicateDetectionResource': loadAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeConfigResource': loadAiDashboardsModule,\n 'BaseResourceComponent::KnowledgeSearchResource': loadAiDashboardsModule,\n 'BaseResourceComponent::SchedulingResource': loadAiDashboardsModule,\n 'BaseResourceComponent::VectorManagementResource': loadAiDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./communication-dashboards.module\n 'BaseDashboard::CommunicationDashboard': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationLogsResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationMonitorResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationProvidersResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationRunsResource': loadCommunicationDashboardsModule,\n 'BaseResourceComponent::CommunicationTemplatesResource': loadCommunicationDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./component-studio-dashboards.module\n 'BaseDashboard::ComponentStudioDashboard': loadComponentStudioDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./core-dashboards.module\n 'BaseApplication::HomeApplication': loadCoreDashboardsModule,\n 'BaseDashboard::EntityAdmin': loadCoreDashboardsModule,\n 'BaseResourceComponent::APIKeysResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::DashboardBrowserResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::HomeDashboard': loadCoreDashboardsModule,\n 'BaseResourceComponent::QueryBrowserResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::SystemDiagnosticsResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryDiffResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryGraphResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryLabelsResource': loadCoreDashboardsModule,\n 'BaseResourceComponent::VersionHistoryRestoreResource': loadCoreDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./credentials-dashboards.module\n 'BaseDashboard::CredentialsDashboard': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsAuditResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsCategoriesResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsListResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsOverviewResource': loadCredentialsDashboardsModule,\n 'BaseResourceComponent::CredentialsTypesResource': loadCredentialsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./data-explorer-dashboards.module\n 'BaseDashboard::DataExplorer': loadDataExplorerDashboardsModule,\n 'BaseResourceComponent::DataExplorerResource': loadDataExplorerDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./integration.module\n 'BaseResourceComponent::IntegrationActivity': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationConnections': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationMappingWorkspace': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationOverview': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationPipelines': loadIntegrationModule,\n 'BaseResourceComponent::IntegrationSchedules': loadIntegrationModule,\n\n // @memberjunction/ng-dashboards → ./lists-dashboards.module\n 'BaseResourceComponent::ListsBrowseResource': loadListsDashboardsModule,\n 'BaseResourceComponent::ListsCategoriesResource': loadListsDashboardsModule,\n 'BaseResourceComponent::ListsMyListsResource': loadListsDashboardsModule,\n 'BaseResourceComponent::ListsOperationsResource': loadListsDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./mcp.module\n 'BaseDashboard::MCPDashboard': loadMcpModule,\n 'BaseResourceComponent::MCPResource': loadMcpModule,\n\n // @memberjunction/ng-dashboards → ./scheduling-dashboards.module\n 'BaseDashboard::SchedulingDashboard': loadSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingActivityResource': loadSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingDashboardResource': loadSchedulingDashboardsModule,\n 'BaseResourceComponent::SchedulingJobsResource': loadSchedulingDashboardsModule,\n\n // @memberjunction/ng-dashboards → ./testing-dashboards.module\n 'BaseDashboard::TestingDashboard': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingAnalyticsResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingDashboardTabResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingExplorerResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingReviewResource': loadTestingDashboardsModule,\n 'BaseResourceComponent::TestingRunsResource': loadTestingDashboardsModule,\n\n // @memberjunction/ng-explorer-settings → ./settings.module\n 'BaseDashboard::ApplicationManagement': loadSettingsModule,\n 'BaseDashboard::EntityPermissions': loadSettingsModule,\n 'BaseDashboard::RoleManagement': loadSettingsModule,\n 'BaseDashboard::SqlLogging': loadSettingsModule,\n 'BaseDashboard::UserManagement': loadSettingsModule,\n 'BaseNavigationComponent::Settings': loadSettingsModule,\n\n // @memberjunction/ng-file-storage → ./file-storage.module\n 'BaseResourceComponent::FileBrowserResource': loadFileStorageModule,\n\n // @memberjunction/ng-react → .\n 'RuntimeUtilities::RuntimeUtilities': loadNgReact,\n\n};\n\nexport const LAZY_FEATURE_CONFIG_COUNT = 77;\n"]}
@@ -1,7 +1,9 @@
1
+ import { OnInit } from '@angular/core';
1
2
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
2
3
  import { ResourceData } from '@memberjunction/core-entities';
3
4
  import * as i0 from "@angular/core";
4
- export declare class ListDetailResource extends BaseResourceComponent {
5
+ export declare class ListDetailResource extends BaseResourceComponent implements OnInit {
6
+ ngOnInit(): void;
5
7
  GetResourceDisplayName(data: ResourceData): Promise<string>;
6
8
  GetResourceIconClass(data: ResourceData): Promise<string>;
7
9
  static ɵfac: i0.ɵɵFactoryDeclaration<ListDetailResource, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"list-detail-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/list-detail-resource.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAG7D,qBAMa,kBAAmB,SAAQ,qBAAqB;IACnD,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAY3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAbtD,kBAAkB;2CAAlB,kBAAkB;CAgB9B"}
1
+ {"version":3,"file":"list-detail-resource.component.d.ts","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/list-detail-resource.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;;AAG7D,qBAMa,kBAAmB,SAAQ,qBAAsB,YAAW,MAAM;IAC3E,QAAQ,IAAI,IAAI;IAIV,sBAAsB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAY3D,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;yCAjBtD,kBAAkB;2CAAlB,kBAAkB;CAoB9B"}
@@ -11,6 +11,9 @@ import { CompositeKey, Metadata } from '@memberjunction/core';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "../single-list-detail/single-list-detail.component";
13
13
  let ListDetailResource = class ListDetailResource extends BaseResourceComponent {
14
+ ngOnInit() {
15
+ this.NotifyLoadComplete();
16
+ }
14
17
  async GetResourceDisplayName(data) {
15
18
  const md = new Metadata();
16
19
  if (data.ResourceRecordID) {
@@ -1 +1 @@
1
- {"version":3,"file":"list-detail-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/list-detail-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;;AAOvD,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,qBAAqB;IACzD,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC3C,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,YAAY,GAAiB,IAAI,YAAY,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAC,CAAC,CAAC,CAAC;YACrG,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1D,CAAC;aACG,CAAC;YACD,OAAO,cAAc,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QACzC,OAAO,EAAE,CAAC;IACd,CAAC;qPAfQ,kBAAkB,yBAAlB,kBAAkB;6DAAlB,kBAAkB;YAFhB,oCAAkD;;YAAlC,kDAAgC;;;AAElD,kBAAkB;IAN9B,aAAa,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;GAM9C,kBAAkB,CAgB9B;;iFAhBY,kBAAkB;cAL9B,SAAS;eAAC;gBACT,UAAU,EAAE,KAAK;gBACf,QAAQ,EAAE,yBAAyB;gBACnC,QAAQ,EAAE,oDAAoD;aACjE;;kFACY,kBAAkB","sourcesContent":["import { Component } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { CompositeKey, Metadata } from '@memberjunction/core';\n@RegisterClass(BaseResourceComponent, 'ListDetailResource')\n@Component({\n standalone: false,\n selector: 'mj-list-detail-resource',\n template: `<mj-list-detail [ListID]=\"Data.ResourceRecordID\"/>`\n})\nexport class ListDetailResource extends BaseResourceComponent {\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n const md = new Metadata();\n if (data.ResourceRecordID) {\n let compositeKey: CompositeKey = new CompositeKey([{FieldName: \"ID\", Value: data.ResourceRecordID}]);\n const name = await md.GetEntityRecordName('Lists', compositeKey);\n return name ? name : `List: ${data.ResourceRecordID}`;\n }\n else{\n return 'List [Error]';\n }\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return '';\n }\n}\n"]}
1
+ {"version":3,"file":"list-detail-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/list-detail-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;;;AAOvD,IAAM,kBAAkB,GAAxB,MAAM,kBAAmB,SAAQ,qBAAqB;IACzD,QAAQ;QACJ,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC3C,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,YAAY,GAAiB,IAAI,YAAY,CAAC,CAAC,EAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,gBAAgB,EAAC,CAAC,CAAC,CAAC;YACrG,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YACjE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1D,CAAC;aACG,CAAC;YACD,OAAO,cAAc,CAAC;QAC1B,CAAC;IACL,CAAC;IAED,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QACzC,OAAO,EAAE,CAAC;IACd,CAAC;qPAnBQ,kBAAkB,yBAAlB,kBAAkB;6DAAlB,kBAAkB;YAFhB,oCAAkD;;YAAlC,kDAAgC;;;AAElD,kBAAkB;IAN9B,aAAa,CAAC,qBAAqB,EAAE,oBAAoB,CAAC;GAM9C,kBAAkB,CAoB9B;;iFApBY,kBAAkB;cAL9B,SAAS;eAAC;gBACT,UAAU,EAAE,KAAK;gBACf,QAAQ,EAAE,yBAAyB;gBACnC,QAAQ,EAAE,oDAAoD;aACjE;;kFACY,kBAAkB","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\nimport { CompositeKey, Metadata } from '@memberjunction/core';\n@RegisterClass(BaseResourceComponent, 'ListDetailResource')\n@Component({\n standalone: false,\n selector: 'mj-list-detail-resource',\n template: `<mj-list-detail [ListID]=\"Data.ResourceRecordID\"/>`\n})\nexport class ListDetailResource extends BaseResourceComponent implements OnInit {\n ngOnInit(): void {\n this.NotifyLoadComplete();\n }\n\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n const md = new Metadata();\n if (data.ResourceRecordID) {\n let compositeKey: CompositeKey = new CompositeKey([{FieldName: \"ID\", Value: data.ResourceRecordID}]);\n const name = await md.GetEntityRecordName('Lists', compositeKey);\n return name ? name : `List: ${data.ResourceRecordID}`;\n }\n else{\n return 'List [Error]';\n }\n }\n\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return '';\n }\n}\n"]}
@@ -11,6 +11,7 @@ import * as i0 from "@angular/core";
11
11
  import * as i1 from "../user-notifications/user-notifications.component";
12
12
  let NotificationsResource = class NotificationsResource extends BaseResourceComponent {
13
13
  ngOnInit() {
14
+ this.NotifyLoadComplete();
14
15
  }
15
16
  async GetResourceDisplayName(data) {
16
17
  return 'Notifications';
@@ -1 +1 @@
1
- {"version":3,"file":"notifications-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/notifications-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;;;AAOhD,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,qBAAqB;IAC5D,QAAQ;IAER,CAAC;IACD,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC3C,OAAO,eAAe,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QACzC,OAAO,kBAAkB,CAAC;IAC9B,CAAC;iQATQ,qBAAqB,yBAArB,qBAAqB;6DAArB,qBAAqB;YAFnB,yCAAiD;;;AAEnD,qBAAqB;IANjC,aAAa,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;GAMjD,qBAAqB,CAUjC;;iFAVY,qBAAqB;cALjC,SAAS;eAAC;gBACT,UAAU,EAAE,KAAK;gBACf,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,mDAAmD;aAChE;;kFACY,qBAAqB","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\n@RegisterClass(BaseResourceComponent, 'NotificationsResource')\n@Component({\n standalone: false,\n selector: 'mj-notifications-resource',\n template: `<app-user-notifications></app-user-notifications>`\n})\nexport class NotificationsResource extends BaseResourceComponent implements OnInit {\n ngOnInit(): void {\n\n }\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Notifications';\n }\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bell';\n }\n}\n"]}
1
+ {"version":3,"file":"notifications-resource.component.js","sourceRoot":"","sources":["../../../src/lib/resource-wrappers/notifications-resource.component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAU,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;;;AAOhD,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,qBAAqB;IAC5D,QAAQ;QACJ,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC9B,CAAC;IACD,KAAK,CAAC,sBAAsB,CAAC,IAAkB;QAC3C,OAAO,eAAe,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,oBAAoB,CAAC,IAAkB;QACzC,OAAO,kBAAkB,CAAC;IAC9B,CAAC;iQATQ,qBAAqB,yBAArB,qBAAqB;6DAArB,qBAAqB;YAFnB,yCAAiD;;;AAEnD,qBAAqB;IANjC,aAAa,CAAC,qBAAqB,EAAE,uBAAuB,CAAC;GAMjD,qBAAqB,CAUjC;;iFAVY,qBAAqB;cALjC,SAAS;eAAC;gBACT,UAAU,EAAE,KAAK;gBACf,QAAQ,EAAE,2BAA2B;gBACrC,QAAQ,EAAE,mDAAmD;aAChE;;kFACY,qBAAqB","sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { ResourceData } from '@memberjunction/core-entities';\nimport { RegisterClass } from '@memberjunction/global';\n@RegisterClass(BaseResourceComponent, 'NotificationsResource')\n@Component({\n standalone: false,\n selector: 'mj-notifications-resource',\n template: `<app-user-notifications></app-user-notifications>`\n})\nexport class NotificationsResource extends BaseResourceComponent implements OnInit {\n ngOnInit(): void {\n this.NotifyLoadComplete();\n }\n async GetResourceDisplayName(data: ResourceData): Promise<string> {\n return 'Notifications';\n }\n async GetResourceIconClass(data: ResourceData): Promise<string> {\n return 'fa-solid fa-bell';\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"startup-validation.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;AAEtE;;GAEG;AACH,qBAGa,wBAAwB;IACvB,OAAO,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,uBAAuB;IAE9D;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAKlC;;;OAGG;IACI,yBAAyB,IAAI,IAAI;IAUxC;;OAEG;IACH,OAAO,CAAC,iBAAiB;yCA5Bd,wBAAwB;6CAAxB,wBAAwB;CAuEpC"}
1
+ {"version":3,"file":"startup-validation.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;AAEtE;;GAEG;AACH,qBAGa,wBAAwB;IACvB,OAAO,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,uBAAuB;IAE9D;;OAEG;IACI,mBAAmB,IAAI,IAAI;IAKlC;;;OAGG;IACI,yBAAyB,IAAI,IAAI;IAUxC;;OAEG;IACH,OAAO,CAAC,iBAAiB;yCA5Bd,wBAAwB;6CAAxB,wBAAwB;CAkEpC"}
@@ -35,10 +35,8 @@ export class StartupValidationService {
35
35
  */
36
36
  validateUserRoles() {
37
37
  try {
38
- console.log('StartupValidationService: Validating user roles');
39
38
  const md = new Metadata();
40
39
  const currentUser = md.CurrentUser;
41
- console.log('StartupValidationService: Current user:', currentUser);
42
40
  if (!currentUser) {
43
41
  console.log('StartupValidationService: No current user found');
44
42
  this.validationService.addIssue({
@@ -50,7 +48,6 @@ export class StartupValidationService {
50
48
  });
51
49
  return;
52
50
  }
53
- console.log('StartupValidationService: User roles:', currentUser.UserRoles);
54
51
  if (!currentUser.UserRoles || currentUser.UserRoles.length === 0) {
55
52
  console.log('StartupValidationService: No user roles found, adding validation issue');
56
53
  this.validationService.addIssue({
@@ -1 +1 @@
1
- {"version":3,"file":"startup-validation.service.js","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;;;AAG1D;;GAEG;AAIH,MAAM,OAAO,wBAAwB;IACf;IAApB,YAAoB,iBAA0C;QAA1C,sBAAiB,GAAjB,iBAAiB,CAAyB;IAAI,CAAC;IAEnE;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,4CAA4C;IAC9C,CAAC;IAED;;;OAGG;IACI,yBAAyB;QAC9B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC9B,EAAE,EAAE,eAAe;YACnB,OAAO,EAAE,gDAAgD;YACzD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,kKAAkK;YAC3K,IAAI,EAAE,mIAAmI;SAC1I,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;YAC/D,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;YAEnC,OAAO,CAAC,GAAG,CAAC,yCAAyC,EAAE,WAAW,CAAC,CAAC;YAEpE,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,gBAAgB;oBACpB,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qDAAqD;oBAC9D,IAAI,EAAE,8EAA8E;iBACrF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,uCAAuC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;YAE5E,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;gBACtF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,eAAe;oBACnB,OAAO,EAAE,mCAAmC;oBAC5C,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,8GAA8G;oBACvH,IAAI,EAAE,uFAAuF;iBAC9F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;YAClF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAC9B,EAAE,EAAE,yBAAyB;gBAC7B,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,mDAAmD;gBAC5D,IAAI,EAAE,sFAAsF;aAC7F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;kHAtEU,wBAAwB;gEAAxB,wBAAwB,WAAxB,wBAAwB,mBAFvB,MAAM;;iFAEP,wBAAwB;cAHpC,UAAU;eAAC;gBACV,UAAU,EAAE,MAAM;aACnB","sourcesContent":["import { Injectable } from '@angular/core';\nimport { Metadata, UserInfo } from '@memberjunction/core';\nimport { SystemValidationService } from './system-validation.service';\n\n/**\n * Service that performs validation checks during application startup\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StartupValidationService {\n constructor(private validationService: SystemValidationService) { }\n \n /**\n * Runs all validation checks\n */\n public validateSystemSetup(): void {\n this.validateUserRoles();\n // Add more validation checks here as needed\n }\n \n /**\n * Directly adds a validation issue for no user roles\n * This is used when we detect the missing roles error during GraphQL setup\n */\n public addNoRolesValidationIssue(): void {\n this.validationService.addIssue({\n id: 'no-user-roles',\n message: 'Missing User Roles - Cannot Access Application',\n severity: 'error',\n details: 'Your account does not have any roles assigned, which is required to use the application. This is preventing the system from loading core resources and metadata.',\n help: 'Please contact your system administrator to have appropriate roles assigned to your account. At minimum, a \"UI\" role is required.'\n });\n }\n\n /**\n * Validates that the current user has at least one role assigned\n */\n private validateUserRoles(): void {\n try {\n console.log('StartupValidationService: Validating user roles');\n const md = new Metadata();\n const currentUser = md.CurrentUser;\n \n console.log('StartupValidationService: Current user:', currentUser);\n \n if (!currentUser) {\n console.log('StartupValidationService: No current user found');\n this.validationService.addIssue({\n id: 'user-not-found',\n message: 'User account not found',\n severity: 'error',\n details: 'Your user account could not be found in the system.',\n help: 'Contact your system administrator to ensure your account is properly set up.'\n });\n return;\n }\n \n console.log('StartupValidationService: User roles:', currentUser.UserRoles);\n \n if (!currentUser.UserRoles || currentUser.UserRoles.length === 0) {\n console.log('StartupValidationService: No user roles found, adding validation issue');\n this.validationService.addIssue({\n id: 'no-user-roles',\n message: 'No roles assigned to your account',\n severity: 'error',\n details: 'Your user account does not have any roles assigned. This will prevent you from accessing most functionality.',\n help: 'Contact your system administrator to have appropriate roles assigned to your account.'\n });\n }\n } catch (err) {\n console.error('StartupValidationService: Error during user role validation', err);\n this.validationService.addIssue({\n id: 'user-roles-check-failed',\n message: 'Failed to check user roles',\n severity: 'error',\n details: 'An error occurred while checking your user roles.',\n help: 'Try refreshing the page. If the problem persists, contact your system administrator.'\n });\n }\n }\n}"]}
1
+ {"version":3,"file":"startup-validation.service.js","sourceRoot":"","sources":["../../../src/lib/services/startup-validation.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAY,MAAM,sBAAsB,CAAC;;;AAG1D;;GAEG;AAIH,MAAM,OAAO,wBAAwB;IACf;IAApB,YAAoB,iBAA0C;QAA1C,sBAAiB,GAAjB,iBAAiB,CAAyB;IAAI,CAAC;IAEnE;;OAEG;IACI,mBAAmB;QACxB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,4CAA4C;IAC9C,CAAC;IAED;;;OAGG;IACI,yBAAyB;QAC9B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;YAC9B,EAAE,EAAE,eAAe;YACnB,OAAO,EAAE,gDAAgD;YACzD,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,kKAAkK;YAC3K,IAAI,EAAE,mIAAmI;SAC1I,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC1B,MAAM,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;YAEnC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;gBAC/D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,gBAAgB;oBACpB,OAAO,EAAE,wBAAwB;oBACjC,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qDAAqD;oBAC9D,IAAI,EAAE,8EAA8E;iBACrF,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;gBACtF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9B,EAAE,EAAE,eAAe;oBACnB,OAAO,EAAE,mCAAmC;oBAC5C,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,8GAA8G;oBACvH,IAAI,EAAE,uFAAuF;iBAC9F,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6DAA6D,EAAE,GAAG,CAAC,CAAC;YAClF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAC9B,EAAE,EAAE,yBAAyB;gBAC7B,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,OAAO;gBACjB,OAAO,EAAE,mDAAmD;gBAC5D,IAAI,EAAE,sFAAsF;aAC7F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;kHAjEU,wBAAwB;gEAAxB,wBAAwB,WAAxB,wBAAwB,mBAFvB,MAAM;;iFAEP,wBAAwB;cAHpC,UAAU;eAAC;gBACV,UAAU,EAAE,MAAM;aACnB","sourcesContent":["import { Injectable } from '@angular/core';\nimport { Metadata, UserInfo } from '@memberjunction/core';\nimport { SystemValidationService } from './system-validation.service';\n\n/**\n * Service that performs validation checks during application startup\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StartupValidationService {\n constructor(private validationService: SystemValidationService) { }\n \n /**\n * Runs all validation checks\n */\n public validateSystemSetup(): void {\n this.validateUserRoles();\n // Add more validation checks here as needed\n }\n \n /**\n * Directly adds a validation issue for no user roles\n * This is used when we detect the missing roles error during GraphQL setup\n */\n public addNoRolesValidationIssue(): void {\n this.validationService.addIssue({\n id: 'no-user-roles',\n message: 'Missing User Roles - Cannot Access Application',\n severity: 'error',\n details: 'Your account does not have any roles assigned, which is required to use the application. This is preventing the system from loading core resources and metadata.',\n help: 'Please contact your system administrator to have appropriate roles assigned to your account. At minimum, a \"UI\" role is required.'\n });\n }\n\n /**\n * Validates that the current user has at least one role assigned\n */\n private validateUserRoles(): void {\n try {\n const md = new Metadata();\n const currentUser = md.CurrentUser;\n \n if (!currentUser) {\n console.log('StartupValidationService: No current user found');\n this.validationService.addIssue({\n id: 'user-not-found',\n message: 'User account not found',\n severity: 'error',\n details: 'Your user account could not be found in the system.',\n help: 'Contact your system administrator to ensure your account is properly set up.'\n });\n return;\n }\n \n if (!currentUser.UserRoles || currentUser.UserRoles.length === 0) {\n console.log('StartupValidationService: No user roles found, adding validation issue');\n this.validationService.addIssue({\n id: 'no-user-roles',\n message: 'No roles assigned to your account',\n severity: 'error',\n details: 'Your user account does not have any roles assigned. This will prevent you from accessing most functionality.',\n help: 'Contact your system administrator to have appropriate roles assigned to your account.'\n });\n }\n } catch (err) {\n console.error('StartupValidationService: Error during user role validation', err);\n this.validationService.addIssue({\n id: 'user-roles-check-failed',\n message: 'Failed to check user roles',\n severity: 'error',\n details: 'An error occurred while checking your user roles.',\n help: 'Try refreshing the page. If the problem persists, contact your system administrator.'\n });\n }\n }\n}"]}
@@ -16,6 +16,13 @@ export interface CachedComponentInfo {
16
16
  createdAt: Date;
17
17
  resourceData: ResourceData;
18
18
  savedQueryParams?: Record<string, string>;
19
+ AgentContext?: Record<string, unknown>;
20
+ AgentClientTools?: {
21
+ Name: string;
22
+ Description: string;
23
+ ParameterSchema: Record<string, unknown>;
24
+ Handler: (params: Record<string, unknown>) => Promise<unknown>;
25
+ }[];
19
26
  }
20
27
  /**
21
28
  * Smart component cache manager that preserves component state across tab switches.
@@ -1 +1 @@
1
- {"version":3,"file":"component-cache-manager.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/tabs/component-cache-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC,YAAY,EAAE,YAAY,CAAC,qBAAqB,CAAC,CAAC;IAGlD,cAAc,EAAE,WAAW,CAAC;IAG5B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IAGtB,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAG/B,QAAQ,EAAE,IAAI,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAGhB,YAAY,EAAE,YAAY,CAAC;IAK3B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,qBAAqB;IAUpB,OAAO,CAAC,MAAM;IAT1B,OAAO,CAAC,KAAK,CAA0C;IAEvD;;;;OAIG;IACH,OAAc,qBAAqB,EAAE,MAAM,CAAM;gBAE7B,MAAM,EAAE,cAAc;IAE1C;;;OAGG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAMrF;;;OAGG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAgBrG;;OAEG;IACH,cAAc,CACZ,YAAY,EAAE,YAAY,CAAC,qBAAqB,CAAC,EACjD,cAAc,EAAE,WAAW,EAC3B,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,MAAM,GACZ,IAAI;IA6BP;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAW1F;;;;;OAKG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAYjG;;;;;OAKG;IACH,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAU/D;;;OAGG;IACH,OAAO,CAAC,aAAa;IAerB;;;OAGG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAO9D;;OAEG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAW7E;;OAEG;IACH,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAY5C;;;OAGG;IACH,UAAU,IAAI,IAAI;IAQlB;;OAEG;IACH,aAAa,IAAI;QACf,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACrC;CAqBF"}
1
+ {"version":3,"file":"component-cache-manager.d.ts","sourceRoot":"","sources":["../../../../../src/lib/shell/components/tabs/component-cache-manager.ts"],"names":[],"mappings":"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"}