@memberjunction/ng-dashboards 5.49.0 → 5.51.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.
@@ -2,9 +2,9 @@ import { OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/co
2
2
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
3
3
  import * as i0 from "@angular/core";
4
4
  interface LazyChunk {
5
- /** A friendly label inferred from the underlying loader source. */
5
+ /** A friendly label derived from the chunk id. */
6
6
  label: string;
7
- /** The loader function's source-string (used as the unique chunk id internally). */
7
+ /** The chunk's stable id its dynamic import specifier. */
8
8
  chunkId: string;
9
9
  loaded: boolean;
10
10
  keys: string[];
@@ -54,11 +54,9 @@ export declare class LazyModuleStatusComponent extends BaseResourceComponent imp
54
54
  VisibleKeys(chunk: LazyChunk): string[];
55
55
  HiddenCount(chunk: LazyChunk): number;
56
56
  /**
57
- * Derive a friendly chunk label from the loader function's source. The
58
- * generated `LAZY_FEATURE_CONFIG` builds loaders that look like:
59
- * () => importFn().then(() => {})
60
- * where importFn is `() => import('@memberjunction/ng-dashboards/foo.module')`
61
- * So the chunk id (loader.toString()) usually contains the dynamic import path.
57
+ * Derive a friendly chunk label from the chunk id, which is the dynamic import
58
+ * specifier the generated `LAZY_FEATURE_CONFIG` declared for the chunk
59
+ * (e.g. '@memberjunction/ng-dashboards/ai-dashboards.module').
62
60
  */
63
61
  private deriveChunkLabel;
64
62
  /** Publish the current lazy-module status to the AI agent. */
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-module-status.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/lazy-module-status.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAMlE,UAAU,SAAS;IACf,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,CAAC;CACrB;AAeD;;;;;;;GAOG;AACH,qBAOa,yBAA0B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAUhG,OAAO,CAAC,GAAG;IARhB,KAAK;;;;;;MAA+E;IACpF,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,SAAS,UAAS;IAClB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAS;IACvD,sEAAsE;IAC/D,WAAW,SAAM;IACjB,aAAa,OAAc;gBAEd,GAAG,EAAE,iBAAiB;IAInC,QAAQ,IAAI,IAAI;IAUhB,eAAe,IAAI,IAAI;IAOd,WAAW,IAAI,IAAI;IAKnC,OAAO,CAAC,SAAS;IAOK,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAEtD,OAAO,IAAI,IAAI;IAmCf,aAAa,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,IAAI;IAMnE,IAAW,cAAc,IAAI,SAAS,EAAE,CAevC;IAEY,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzD,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAEM,YAAY,GAAI,IAAI,MAAM,EAAE,GAAG,SAAS,YAAe;IAC9D,SAAgB,iBAAiB,KAAuB;IAEjD,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKzC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE;IAIvC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAI5C;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IA0BxB,8DAA8D;IAC9D,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAoBhC,sEAAsE;IACtE,OAAO,CAAC,UAAU;yCAtNT,yBAAyB;2CAAzB,yBAAyB;CAiOrC"}
1
+ {"version":3,"file":"lazy-module-status.component.d.ts","sourceRoot":"","sources":["../../src/DevTools/lazy-module-status.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;;AAMlE,UAAU,SAAS;IACf,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,0FAA0F;IAC1F,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,QAAQ,EAAE,OAAO,CAAC;CACrB;AAeD;;;;;;;GAOG;AACH,qBAOa,yBAA0B,SAAQ,qBAAsB,YAAW,MAAM,EAAE,SAAS,EAAE,aAAa;IAUhG,OAAO,CAAC,GAAG;IARhB,KAAK;;;;;;MAA+E;IACpF,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,SAAS,UAAS;IAClB,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,CAAS;IACvD,sEAAsE;IAC/D,WAAW,SAAM;IACjB,aAAa,OAAc;gBAEd,GAAG,EAAE,iBAAiB;IAInC,QAAQ,IAAI,IAAI;IAUhB,eAAe,IAAI,IAAI;IAOd,WAAW,IAAI,IAAI;IAKnC,OAAO,CAAC,SAAS;IAOK,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAEtD,OAAO,IAAI,IAAI;IAmCf,aAAa,CAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,YAAY,GAAG,IAAI;IAMnE,IAAW,cAAc,IAAI,SAAS,EAAE,CAevC;IAEY,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBzD,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAEM,YAAY,GAAI,IAAI,MAAM,EAAE,GAAG,SAAS,YAAe;IAC9D,SAAgB,iBAAiB,KAAuB;IAEjD,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAKzC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE;IAIvC,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM;IAI5C;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAyBxB,8DAA8D;IAC9D,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAoBhC,sEAAsE;IACtE,OAAO,CAAC,UAAU;yCAnNT,yBAAyB;2CAAzB,yBAAyB;CA8NrC"}
@@ -355,17 +355,14 @@ let LazyModuleStatusComponent = class LazyModuleStatusComponent extends BaseReso
355
355
  return Math.max(0, chunk.keys.length - COLLAPSED_KEY_LIMIT);
356
356
  }
357
357
  /**
358
- * Derive a friendly chunk label from the loader function's source. The
359
- * generated `LAZY_FEATURE_CONFIG` builds loaders that look like:
360
- * () => importFn().then(() => {})
361
- * where importFn is `() => import('@memberjunction/ng-dashboards/foo.module')`
362
- * So the chunk id (loader.toString()) usually contains the dynamic import path.
358
+ * Derive a friendly chunk label from the chunk id, which is the dynamic import
359
+ * specifier the generated `LAZY_FEATURE_CONFIG` declared for the chunk
360
+ * (e.g. '@memberjunction/ng-dashboards/ai-dashboards.module').
363
361
  */
364
362
  deriveChunkLabel(chunkId, keys) {
365
- const m = chunkId.match(/import\(["']([^"']+)["']\)/);
366
- if (m && m[1]) {
363
+ if (chunkId) {
367
364
  // Strip the @memberjunction/ prefix for brevity
368
- return m[1].replace(/^@memberjunction\//, '');
365
+ return chunkId.replace(/^@memberjunction\//, '');
369
366
  }
370
367
  // Fallback: derive from a representative key
371
368
  if (keys.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"lazy-module-status.component.js","sourceRoot":"","sources":["../../src/DevTools/lazy-module-status.component.ts","../../src/DevTools/lazy-module-status.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { buildLazyModuleStatusAgentContext } from './dev-tools-agent-context';\nimport { AgentToolResult, validateStringParam } from '../shared/agent-tool-validation';\n\ninterface LazyChunk {\n /** A friendly label inferred from the underlying loader source. */\n label: string;\n /** The loader function's source-string (used as the unique chunk id internally). */\n chunkId: string;\n loaded: boolean;\n keys: string[];\n /** True when the user clicks \"Force Load\" — used to disable the button + show spinner. */\n loading?: boolean;\n /** UI state — false initially, user can expand to see all keys. */\n expanded: boolean;\n}\n\n/** How many entry pills to show in the collapsed card before \"Show all\". */\nconst COLLAPSED_KEY_LIMIT = 8;\n\ninterface LazyRegistryShape {\n GetSnapshot(): {\n registered: string[];\n loaded: string[];\n chunks: Array<{ chunkId: string; loaded: boolean; keys: string[] }>;\n chunkCount: number;\n };\n ForceLoad(compoundKey: string): Promise<boolean>;\n}\n\n/**\n * Lazy Module Status — visualizes the Explorer's lazy-loading registry.\n * Shows each chunk, its status (loaded vs not), the registrations it\n * brings in, and offers a \"Force Load\" button to preload on demand.\n *\n * Reads from the global `__mj_lazy_registry__` published by `LazyModuleRegistry`\n * — no hard package dep on explorer-core.\n */\n@RegisterClass(BaseResourceComponent, 'LazyModuleStatusInspector')\n@Component({\n standalone: false,\n selector: 'mj-lazy-module-status',\n templateUrl: './lazy-module-status.component.html',\n styleUrls: ['./inspector-shared.css', './lazy-module-status.component.css']\n})\nexport class LazyModuleStatusComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public Stats = { totalKeys: 0, loadedKeys: 0, chunkCount: 0, loadedChunks: 0, percent: 0 };\n public Chunks: LazyChunk[] = [];\n public Available = false;\n public Filter: 'all' | 'loaded' | 'not-loaded' = 'all';\n /** Free-text search narrowing chunks by label or registration key. */\n public SearchQuery = '';\n public LastRefreshed = new Date();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n const prefs = DevToolsPrefs.Get<{ filter?: 'all' | 'loaded' | 'not-loaded'; expanded?: string[] }>('lazyModule');\n if (prefs?.filter) this.Filter = prefs.filter;\n this.refresh();\n if (prefs?.expanded) {\n for (const c of this.Chunks) c.expanded = prefs.expanded.includes(c.chunkId);\n }\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish initial agent context + register the read-only client tools.\n // Re-emit happens on refresh, filter change, and the search tool.\n this.publishAgentContext();\n this.registerAgentClientTools();\n }\n\n public override ngOnDestroy(): void {\n this.savePrefs();\n super.ngOnDestroy();\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save('lazyModule', {\n filter: this.Filter,\n expanded: this.Chunks.filter(c => c.expanded).map(c => c.chunkId)\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Lazy Loading'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-puzzle-piece'; }\n\n public refresh(): void {\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || typeof reg.GetSnapshot !== 'function') {\n this.Available = false;\n this.cdr.markForCheck();\n return;\n }\n this.Available = true;\n const snap = reg.GetSnapshot();\n // Preserve expansion state across refreshes\n const prevExpansion = new Map(this.Chunks.map(c => [c.chunkId, c.expanded] as const));\n this.Chunks = snap.chunks.map(c => ({\n label: this.deriveChunkLabel(c.chunkId, c.keys),\n chunkId: c.chunkId,\n loaded: c.loaded,\n keys: c.keys,\n expanded: prevExpansion.get(c.chunkId) ?? false\n })).sort((a, b) => {\n if (a.loaded !== b.loaded) return a.loaded ? -1 : 1; // loaded first\n return a.label.localeCompare(b.label);\n });\n\n const loadedChunks = this.Chunks.filter(c => c.loaded).length;\n this.Stats = {\n totalKeys: snap.registered.length,\n loadedKeys: snap.loaded.length,\n chunkCount: snap.chunks.length,\n loadedChunks,\n percent: snap.chunks.length === 0 ? 0 : Math.round((loadedChunks / snap.chunks.length) * 100)\n };\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n public OnFilterClick(filter: 'all' | 'loaded' | 'not-loaded'): void {\n this.Filter = filter;\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public get FilteredChunks(): LazyChunk[] {\n let list: LazyChunk[];\n switch (this.Filter) {\n case 'loaded': list = this.Chunks.filter(c => c.loaded); break;\n case 'not-loaded': list = this.Chunks.filter(c => !c.loaded); break;\n default: list = this.Chunks; break;\n }\n const q = this.SearchQuery.trim().toLowerCase();\n if (q) {\n list = list.filter(c =>\n c.label.toLowerCase().includes(q) ||\n c.keys.some(k => k.toLowerCase().includes(q))\n );\n }\n return list;\n }\n\n public async OnForceLoad(chunk: LazyChunk): Promise<void> {\n if (chunk.loaded || chunk.loading) return;\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || chunk.keys.length === 0) return;\n\n chunk.loading = true;\n this.cdr.markForCheck();\n try {\n await reg.ForceLoad(chunk.keys[0]); // any key in the chunk loads the same chunk\n // Re-read snapshot to get authoritative state\n this.refresh();\n } catch {\n chunk.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public TrackByChunk = (_i: number, c: LazyChunk) => c.chunkId;\n public readonly CollapsedKeyLimit = COLLAPSED_KEY_LIMIT;\n\n public ToggleChunkExpand(chunk: LazyChunk): void {\n chunk.expanded = !chunk.expanded;\n this.savePrefs();\n }\n\n public VisibleKeys(chunk: LazyChunk): string[] {\n return chunk.expanded ? chunk.keys : chunk.keys.slice(0, COLLAPSED_KEY_LIMIT);\n }\n\n public HiddenCount(chunk: LazyChunk): number {\n return Math.max(0, chunk.keys.length - COLLAPSED_KEY_LIMIT);\n }\n\n /**\n * Derive a friendly chunk label from the loader function's source. The\n * generated `LAZY_FEATURE_CONFIG` builds loaders that look like:\n * () => importFn().then(() => {})\n * where importFn is `() => import('@memberjunction/ng-dashboards/foo.module')`\n * So the chunk id (loader.toString()) usually contains the dynamic import path.\n */\n private deriveChunkLabel(chunkId: string, keys: string[]): string {\n const m = chunkId.match(/import\\([\"']([^\"']+)[\"']\\)/);\n if (m && m[1]) {\n // Strip the @memberjunction/ prefix for brevity\n return m[1].replace(/^@memberjunction\\//, '');\n }\n // Fallback: derive from a representative key\n if (keys.length > 0) {\n const first = keys[0];\n const parts = first.split('::');\n return parts.length === 2 ? parts[1] : first;\n }\n return '(unknown chunk)';\n }\n\n // ========================================\n // AI AGENT CONTEXT & CLIENT TOOLS\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: SAFE developer diagnostic.\n // The Lazy Module Status inspector is a read-only view of the Explorer's\n // lazy-loading registry. Context reports module counts; tools only search the\n // chunk list and refresh the snapshot. No application data is read or mutated.\n // (Note: the existing in-UI \"Force Load\" button is intentionally NOT exposed\n // as an agent tool — preloading chunks is a user-driven action.)\n // ========================================\n\n /** Publish the current lazy-module status to the AI agent. */\n private publishAgentContext(): void {\n const visible = this.FilteredChunks;\n const context = buildLazyModuleStatusAgentContext({\n Available: this.Available,\n TotalModules: this.Stats.chunkCount,\n LoadedModules: this.Stats.loadedChunks,\n Filter: this.Filter,\n SearchQuery: this.SearchQuery,\n VisibleModuleCount: visible.length,\n VisibleModuleNames: visible.map(c => c.label),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Register the read-only client tools the AI agent can invoke against the\n * Lazy Module Status inspector: SearchLazyModules, RefreshModuleStatus.\n */\n private registerAgentClientTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchLazyModules',\n Description: 'Search lazy modules by label or registration key. Pass an empty string to clear the search.',\n ParameterSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'] },\n Handler: async (params: Record<string, unknown>) => this.toolSearch(params),\n },\n {\n Name: 'RefreshModuleStatus',\n Description: 'Re-read the lazy-loading registry snapshot to reflect any modules loaded since the last refresh.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.refresh();\n return { Success: true };\n },\n },\n ]);\n }\n\n /** Apply (or clear, on empty string) the lazy-module search query. */\n private toolSearch(params: Record<string, unknown>): AgentToolResult {\n const validated = validateStringParam(params['query'], 'query');\n if (!validated.ok) {\n return validated.result;\n }\n this.SearchQuery = validated.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Lazy loading inspector\"\n Title=\"Lazy Loading\"\n Subtitle=\"Code-split chunks: registered, loaded, and on-demand\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n </div>\n </mj-page-header-interior>\n\n @if (!Available) {\n <div class=\"lz-unavailable\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>Lazy registry not available.</strong>\n The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it.\n </div>\n </div>\n } @else {\n <div class=\"lz-summary\">\n <div class=\"lz-progress\">\n <div class=\"lz-progress-bar\">\n <div class=\"lz-progress-fill\" [style.width.%]=\"Stats.percent\"></div>\n </div>\n <div class=\"lz-progress-meta\">\n <span class=\"lz-progress-pct\">{{ Stats.percent }}%</span>\n <span class=\"lz-progress-label\">{{ Stats.loadedChunks }} of {{ Stats.chunkCount }} chunks loaded</span>\n </div>\n </div>\n <div class=\"lz-summary-stats\">\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.totalKeys }}</div>\n <div class=\"lz-summary-label\">Registered keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.loadedKeys }}</div>\n <div class=\"lz-summary-label\">Loaded keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.chunkCount }}</div>\n <div class=\"lz-summary-label\">Total chunks</div>\n </div>\n </div>\n </div>\n\n <div class=\"lz-filter-bar\">\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'all'\"\n (click)=\"OnFilterClick('all')\">\n All <span class=\"lz-filter-count\">{{ Stats.chunkCount }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'loaded'\"\n (click)=\"OnFilterClick('loaded')\">\n <i class=\"fa-solid fa-check-circle\"></i> Loaded <span class=\"lz-filter-count\">{{ Stats.loadedChunks }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'not-loaded'\"\n (click)=\"OnFilterClick('not-loaded')\">\n <i class=\"fa-regular fa-circle\"></i> Not loaded <span class=\"lz-filter-count\">{{ Stats.chunkCount - Stats.loadedChunks }}</span>\n </button>\n <span class=\"lz-spacer\"></span>\n <span class=\"lz-refreshed\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n\n <div class=\"lz-grid\">\n @for (chunk of FilteredChunks; track TrackByChunk($index, chunk)) {\n <div class=\"lz-card\" [class.lz-card--loaded]=\"chunk.loaded\">\n <div class=\"lz-card-head\">\n <div class=\"lz-card-status\" [class.lz-card-status--loaded]=\"chunk.loaded\">\n @if (chunk.loaded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n <div class=\"lz-card-title\">\n <code>{{ chunk.label }}</code>\n <span class=\"lz-card-kcount\">{{ chunk.keys.length }} entries</span>\n </div>\n @if (!chunk.loaded) {\n <button type=\"button\"\n class=\"lz-load-btn\"\n [disabled]=\"chunk.loading\"\n (click)=\"OnForceLoad(chunk)\"\n title=\"Force-load this chunk now\">\n @if (chunk.loading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\n } @else {\n <i class=\"fa-solid fa-bolt\"></i> Load\n }\n </button>\n }\n </div>\n <div class=\"lz-card-keys\" [class.lz-card-keys--expanded]=\"chunk.expanded\">\n @for (k of VisibleKeys(chunk); track k) {\n <span class=\"lz-key\">{{ k }}</span>\n }\n </div>\n @if (HiddenCount(chunk) > 0 || chunk.expanded) {\n <button class=\"lz-card-expand\"\n type=\"button\"\n (click)=\"ToggleChunkExpand(chunk)\">\n @if (chunk.expanded) {\n <i class=\"fa-solid fa-chevron-up\"></i> Show less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> Show all {{ chunk.keys.length }} entries\n }\n </button>\n }\n </div>\n }\n @if (FilteredChunks.length === 0) {\n <mj-empty-state class=\"lz-empty\" Variant=\"no-results\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No chunks match the current filter.\" />\n }\n </div>\n }\n</div>\n"]}
1
+ {"version":3,"file":"lazy-module-status.component.js","sourceRoot":"","sources":["../../src/DevTools/lazy-module-status.component.ts","../../src/DevTools/lazy-module-status.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';\nimport { BaseResourceComponent } from '@memberjunction/ng-shared';\nimport { RegisterClass } from '@memberjunction/global';\nimport { DevToolsPrefs } from './dev-tools-prefs';\nimport { buildLazyModuleStatusAgentContext } from './dev-tools-agent-context';\nimport { AgentToolResult, validateStringParam } from '../shared/agent-tool-validation';\n\ninterface LazyChunk {\n /** A friendly label derived from the chunk id. */\n label: string;\n /** The chunk's stable id — its dynamic import specifier. */\n chunkId: string;\n loaded: boolean;\n keys: string[];\n /** True when the user clicks \"Force Load\" — used to disable the button + show spinner. */\n loading?: boolean;\n /** UI state — false initially, user can expand to see all keys. */\n expanded: boolean;\n}\n\n/** How many entry pills to show in the collapsed card before \"Show all\". */\nconst COLLAPSED_KEY_LIMIT = 8;\n\ninterface LazyRegistryShape {\n GetSnapshot(): {\n registered: string[];\n loaded: string[];\n chunks: Array<{ chunkId: string; loaded: boolean; keys: string[] }>;\n loadedChunkCount: number;\n };\n ForceLoad(compoundKey: string): Promise<boolean>;\n}\n\n/**\n * Lazy Module Status — visualizes the Explorer's lazy-loading registry.\n * Shows each chunk, its status (loaded vs not), the registrations it\n * brings in, and offers a \"Force Load\" button to preload on demand.\n *\n * Reads from the global `__mj_lazy_registry__` published by `LazyModuleRegistry`\n * — no hard package dep on explorer-core.\n */\n@RegisterClass(BaseResourceComponent, 'LazyModuleStatusInspector')\n@Component({\n standalone: false,\n selector: 'mj-lazy-module-status',\n templateUrl: './lazy-module-status.component.html',\n styleUrls: ['./inspector-shared.css', './lazy-module-status.component.css']\n})\nexport class LazyModuleStatusComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {\n\n public Stats = { totalKeys: 0, loadedKeys: 0, chunkCount: 0, loadedChunks: 0, percent: 0 };\n public Chunks: LazyChunk[] = [];\n public Available = false;\n public Filter: 'all' | 'loaded' | 'not-loaded' = 'all';\n /** Free-text search narrowing chunks by label or registration key. */\n public SearchQuery = '';\n public LastRefreshed = new Date();\n\n constructor(private cdr: ChangeDetectorRef) {\n super();\n }\n\n public ngOnInit(): void {\n const prefs = DevToolsPrefs.Get<{ filter?: 'all' | 'loaded' | 'not-loaded'; expanded?: string[] }>('lazyModule');\n if (prefs?.filter) this.Filter = prefs.filter;\n this.refresh();\n if (prefs?.expanded) {\n for (const c of this.Chunks) c.expanded = prefs.expanded.includes(c.chunkId);\n }\n this.NotifyLoadComplete();\n }\n\n public ngAfterViewInit(): void {\n // Publish initial agent context + register the read-only client tools.\n // Re-emit happens on refresh, filter change, and the search tool.\n this.publishAgentContext();\n this.registerAgentClientTools();\n }\n\n public override ngOnDestroy(): void {\n this.savePrefs();\n super.ngOnDestroy();\n }\n\n private savePrefs(): void {\n DevToolsPrefs.Save('lazyModule', {\n filter: this.Filter,\n expanded: this.Chunks.filter(c => c.expanded).map(c => c.chunkId)\n });\n }\n\n public override async GetResourceDisplayName(): Promise<string> { return 'Lazy Loading'; }\n public override async GetResourceIconClass(): Promise<string> { return 'fa-solid fa-puzzle-piece'; }\n\n public refresh(): void {\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || typeof reg.GetSnapshot !== 'function') {\n this.Available = false;\n this.cdr.markForCheck();\n return;\n }\n this.Available = true;\n const snap = reg.GetSnapshot();\n // Preserve expansion state across refreshes\n const prevExpansion = new Map(this.Chunks.map(c => [c.chunkId, c.expanded] as const));\n this.Chunks = snap.chunks.map(c => ({\n label: this.deriveChunkLabel(c.chunkId, c.keys),\n chunkId: c.chunkId,\n loaded: c.loaded,\n keys: c.keys,\n expanded: prevExpansion.get(c.chunkId) ?? false\n })).sort((a, b) => {\n if (a.loaded !== b.loaded) return a.loaded ? -1 : 1; // loaded first\n return a.label.localeCompare(b.label);\n });\n\n const loadedChunks = this.Chunks.filter(c => c.loaded).length;\n this.Stats = {\n totalKeys: snap.registered.length,\n loadedKeys: snap.loaded.length,\n chunkCount: snap.chunks.length,\n loadedChunks,\n percent: snap.chunks.length === 0 ? 0 : Math.round((loadedChunks / snap.chunks.length) * 100)\n };\n this.LastRefreshed = new Date();\n this.cdr.markForCheck();\n this.publishAgentContext();\n }\n\n public OnFilterClick(filter: 'all' | 'loaded' | 'not-loaded'): void {\n this.Filter = filter;\n this.savePrefs();\n this.publishAgentContext();\n }\n\n public get FilteredChunks(): LazyChunk[] {\n let list: LazyChunk[];\n switch (this.Filter) {\n case 'loaded': list = this.Chunks.filter(c => c.loaded); break;\n case 'not-loaded': list = this.Chunks.filter(c => !c.loaded); break;\n default: list = this.Chunks; break;\n }\n const q = this.SearchQuery.trim().toLowerCase();\n if (q) {\n list = list.filter(c =>\n c.label.toLowerCase().includes(q) ||\n c.keys.some(k => k.toLowerCase().includes(q))\n );\n }\n return list;\n }\n\n public async OnForceLoad(chunk: LazyChunk): Promise<void> {\n if (chunk.loaded || chunk.loading) return;\n const reg = (globalThis as { __mj_lazy_registry__?: LazyRegistryShape }).__mj_lazy_registry__;\n if (!reg || chunk.keys.length === 0) return;\n\n chunk.loading = true;\n this.cdr.markForCheck();\n try {\n await reg.ForceLoad(chunk.keys[0]); // any key in the chunk loads the same chunk\n // Re-read snapshot to get authoritative state\n this.refresh();\n } catch {\n chunk.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n public get LastRefreshedLabel(): string {\n return this.LastRefreshed.toLocaleTimeString();\n }\n\n public TrackByChunk = (_i: number, c: LazyChunk) => c.chunkId;\n public readonly CollapsedKeyLimit = COLLAPSED_KEY_LIMIT;\n\n public ToggleChunkExpand(chunk: LazyChunk): void {\n chunk.expanded = !chunk.expanded;\n this.savePrefs();\n }\n\n public VisibleKeys(chunk: LazyChunk): string[] {\n return chunk.expanded ? chunk.keys : chunk.keys.slice(0, COLLAPSED_KEY_LIMIT);\n }\n\n public HiddenCount(chunk: LazyChunk): number {\n return Math.max(0, chunk.keys.length - COLLAPSED_KEY_LIMIT);\n }\n\n /**\n * Derive a friendly chunk label from the chunk id, which is the dynamic import\n * specifier the generated `LAZY_FEATURE_CONFIG` declared for the chunk\n * (e.g. '@memberjunction/ng-dashboards/ai-dashboards.module').\n */\n private deriveChunkLabel(chunkId: string, keys: string[]): string {\n if (chunkId) {\n // Strip the @memberjunction/ prefix for brevity\n return chunkId.replace(/^@memberjunction\\//, '');\n }\n // Fallback: derive from a representative key\n if (keys.length > 0) {\n const first = keys[0];\n const parts = first.split('::');\n return parts.length === 2 ? parts[1] : first;\n }\n return '(unknown chunk)';\n }\n\n // ========================================\n // AI AGENT CONTEXT & CLIENT TOOLS\n //\n // 🔒 SAFETY BOUNDARY — CLASSIFICATION: SAFE developer diagnostic.\n // The Lazy Module Status inspector is a read-only view of the Explorer's\n // lazy-loading registry. Context reports module counts; tools only search the\n // chunk list and refresh the snapshot. No application data is read or mutated.\n // (Note: the existing in-UI \"Force Load\" button is intentionally NOT exposed\n // as an agent tool — preloading chunks is a user-driven action.)\n // ========================================\n\n /** Publish the current lazy-module status to the AI agent. */\n private publishAgentContext(): void {\n const visible = this.FilteredChunks;\n const context = buildLazyModuleStatusAgentContext({\n Available: this.Available,\n TotalModules: this.Stats.chunkCount,\n LoadedModules: this.Stats.loadedChunks,\n Filter: this.Filter,\n SearchQuery: this.SearchQuery,\n VisibleModuleCount: visible.length,\n VisibleModuleNames: visible.map(c => c.label),\n });\n this.navigationService.SetAgentContext(this, context);\n }\n\n /**\n * Register the read-only client tools the AI agent can invoke against the\n * Lazy Module Status inspector: SearchLazyModules, RefreshModuleStatus.\n */\n private registerAgentClientTools(): void {\n this.navigationService.SetAgentClientTools(this, [\n {\n Name: 'SearchLazyModules',\n Description: 'Search lazy modules by label or registration key. Pass an empty string to clear the search.',\n ParameterSchema: { type: 'object', properties: { query: { type: 'string' } }, required: ['query'] },\n Handler: async (params: Record<string, unknown>) => this.toolSearch(params),\n },\n {\n Name: 'RefreshModuleStatus',\n Description: 'Re-read the lazy-loading registry snapshot to reflect any modules loaded since the last refresh.',\n ParameterSchema: { type: 'object', properties: {} },\n Handler: async () => {\n this.refresh();\n return { Success: true };\n },\n },\n ]);\n }\n\n /** Apply (or clear, on empty string) the lazy-module search query. */\n private toolSearch(params: Record<string, unknown>): AgentToolResult {\n const validated = validateStringParam(params['query'], 'query');\n if (!validated.ok) {\n return validated.result;\n }\n this.SearchQuery = validated.value;\n this.savePrefs();\n this.publishAgentContext();\n this.cdr.markForCheck();\n return { Success: true };\n }\n}\n","<div class=\"mj-inspector mj-inspector--solo\">\n <mj-page-header-interior\n Role=\"region\"\n AriaLabel=\"Lazy loading inspector\"\n Title=\"Lazy Loading\"\n Subtitle=\"Code-split chunks: registered, loaded, and on-demand\">\n <div actions>\n <mj-refresh-button [Loading]=\"false\" (Clicked)=\"refresh()\"></mj-refresh-button>\n </div>\n </mj-page-header-interior>\n\n @if (!Available) {\n <div class=\"lz-unavailable\">\n <i class=\"fa-solid fa-circle-info\"></i>\n <div>\n <strong>Lazy registry not available.</strong>\n The shell hasn't published the LazyModuleRegistry to globalThis yet, or you're viewing this in an environment that doesn't use it.\n </div>\n </div>\n } @else {\n <div class=\"lz-summary\">\n <div class=\"lz-progress\">\n <div class=\"lz-progress-bar\">\n <div class=\"lz-progress-fill\" [style.width.%]=\"Stats.percent\"></div>\n </div>\n <div class=\"lz-progress-meta\">\n <span class=\"lz-progress-pct\">{{ Stats.percent }}%</span>\n <span class=\"lz-progress-label\">{{ Stats.loadedChunks }} of {{ Stats.chunkCount }} chunks loaded</span>\n </div>\n </div>\n <div class=\"lz-summary-stats\">\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.totalKeys }}</div>\n <div class=\"lz-summary-label\">Registered keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.loadedKeys }}</div>\n <div class=\"lz-summary-label\">Loaded keys</div>\n </div>\n <div class=\"lz-summary-stat\">\n <div class=\"lz-summary-value\">{{ Stats.chunkCount }}</div>\n <div class=\"lz-summary-label\">Total chunks</div>\n </div>\n </div>\n </div>\n\n <div class=\"lz-filter-bar\">\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'all'\"\n (click)=\"OnFilterClick('all')\">\n All <span class=\"lz-filter-count\">{{ Stats.chunkCount }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'loaded'\"\n (click)=\"OnFilterClick('loaded')\">\n <i class=\"fa-solid fa-check-circle\"></i> Loaded <span class=\"lz-filter-count\">{{ Stats.loadedChunks }}</span>\n </button>\n <button type=\"button\"\n class=\"lz-filter\"\n [class.lz-filter--active]=\"Filter === 'not-loaded'\"\n (click)=\"OnFilterClick('not-loaded')\">\n <i class=\"fa-regular fa-circle\"></i> Not loaded <span class=\"lz-filter-count\">{{ Stats.chunkCount - Stats.loadedChunks }}</span>\n </button>\n <span class=\"lz-spacer\"></span>\n <span class=\"lz-refreshed\">Refreshed {{ LastRefreshedLabel }}</span>\n </div>\n\n <div class=\"lz-grid\">\n @for (chunk of FilteredChunks; track TrackByChunk($index, chunk)) {\n <div class=\"lz-card\" [class.lz-card--loaded]=\"chunk.loaded\">\n <div class=\"lz-card-head\">\n <div class=\"lz-card-status\" [class.lz-card-status--loaded]=\"chunk.loaded\">\n @if (chunk.loaded) {\n <i class=\"fa-solid fa-circle-check\"></i>\n } @else {\n <i class=\"fa-regular fa-circle\"></i>\n }\n </div>\n <div class=\"lz-card-title\">\n <code>{{ chunk.label }}</code>\n <span class=\"lz-card-kcount\">{{ chunk.keys.length }} entries</span>\n </div>\n @if (!chunk.loaded) {\n <button type=\"button\"\n class=\"lz-load-btn\"\n [disabled]=\"chunk.loading\"\n (click)=\"OnForceLoad(chunk)\"\n title=\"Force-load this chunk now\">\n @if (chunk.loading) {\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading\n } @else {\n <i class=\"fa-solid fa-bolt\"></i> Load\n }\n </button>\n }\n </div>\n <div class=\"lz-card-keys\" [class.lz-card-keys--expanded]=\"chunk.expanded\">\n @for (k of VisibleKeys(chunk); track k) {\n <span class=\"lz-key\">{{ k }}</span>\n }\n </div>\n @if (HiddenCount(chunk) > 0 || chunk.expanded) {\n <button class=\"lz-card-expand\"\n type=\"button\"\n (click)=\"ToggleChunkExpand(chunk)\">\n @if (chunk.expanded) {\n <i class=\"fa-solid fa-chevron-up\"></i> Show less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> Show all {{ chunk.keys.length }} entries\n }\n </button>\n }\n </div>\n }\n @if (FilteredChunks.length === 0) {\n <mj-empty-state class=\"lz-empty\" Variant=\"no-results\" Size=\"compact\" Icon=\"fa-solid fa-circle-info\"\n Title=\"No chunks match the current filter.\" />\n }\n </div>\n }\n</div>\n"]}
@@ -116,6 +116,13 @@ export declare class ListsBrowseResource extends BaseResourceComponent implement
116
116
  shareDialogConfig: ListShareDialogConfig | null;
117
117
  contextItemCapabilities: ListCapabilities;
118
118
  private capabilityCache;
119
+ /**
120
+ * Whether the current user may DELETE the context-menu's list. This uses the single shared
121
+ * ownership rule ({@link MJListEntityExtended.UserCanDelete}) — the same rule the server enforces
122
+ * in MJListEntityServer.Delete() — rather than the share-level capability, so the button is shown
123
+ * only when the delete would actually succeed: the List's owner, or a Developer/Integration user.
124
+ */
125
+ get CanDeleteContextItem(): boolean;
119
126
  private categoriesDirty;
120
127
  showInvitationsDialog: boolean;
121
128
  showAuditLogDialog: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"lists-browse-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Lists/components/lists-browse-resource.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lists-browse-resource.component.d.ts","sourceRoot":"","sources":["../../../src/Lists/components/lists-browse-resource.component.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@ var ListsBrowseResource_1;
8
8
  import { Component, ViewEncapsulation, HostListener } from '@angular/core';
9
9
  import { RegisterClass, UUIDsEqual, MJGlobal } from '@memberjunction/global';
10
10
  import { BaseResourceComponent } from '@memberjunction/ng-shared';
11
- import { UserInfoEngine } from '@memberjunction/core-entities';
11
+ import { MJListEntityExtended, UserInfoEngine } from '@memberjunction/core-entities';
12
12
  import { BaseEntity, RunView } from '@memberjunction/core';
13
13
  import { Subject } from 'rxjs';
14
14
  import { takeUntil } from 'rxjs/operators';
@@ -537,9 +537,9 @@ function ListsBrowseResource_Conditional_22_Template(rf, ctx) { if (rf & 1) {
537
537
  i0.ɵɵadvance();
538
538
  i0.ɵɵconditional(ctx_r2.contextItemCapabilities.CanShare ? 2 : -1);
539
539
  i0.ɵɵadvance(4);
540
- i0.ɵɵconditional(ctx_r2.contextItemCapabilities.CanDelete ? 6 : -1);
540
+ i0.ɵɵconditional(ctx_r2.CanDeleteContextItem ? 6 : -1);
541
541
  i0.ɵɵadvance();
542
- i0.ɵɵconditional(!ctx_r2.contextItemCapabilities.CanEdit && !ctx_r2.contextItemCapabilities.CanShare && !ctx_r2.contextItemCapabilities.CanDelete ? 7 : -1);
542
+ i0.ɵɵconditional(!ctx_r2.contextItemCapabilities.CanEdit && !ctx_r2.contextItemCapabilities.CanShare && !ctx_r2.CanDeleteContextItem ? 7 : -1);
543
543
  } }
544
544
  function ListsBrowseResource_Conditional_23_Template(rf, ctx) { if (rf & 1) {
545
545
  const _r27 = i0.ɵɵgetCurrentView();
@@ -865,6 +865,19 @@ let ListsBrowseResource = class ListsBrowseResource extends BaseResourceComponen
865
865
  // doesn't refetch.
866
866
  contextItemCapabilities = CapabilitiesForLevel('Owner');
867
867
  capabilityCache = new Map();
868
+ /**
869
+ * Whether the current user may DELETE the context-menu's list. This uses the single shared
870
+ * ownership rule ({@link MJListEntityExtended.UserCanDelete}) — the same rule the server enforces
871
+ * in MJListEntityServer.Delete() — rather than the share-level capability, so the button is shown
872
+ * only when the delete would actually succeed: the List's owner, or a Developer/Integration user.
873
+ */
874
+ get CanDeleteContextItem() {
875
+ const list = this.selectedContextItem?.list;
876
+ if (!list) {
877
+ return false;
878
+ }
879
+ return MJListEntityExtended.UserCanDelete(list.UserID, this.ProviderToUse.CurrentUser);
880
+ }
868
881
  // Tracks whether the in-memory categories list is known-stale
869
882
  // relative to the DB. Flipped to true by the BaseEntity event
870
883
  // subscription whenever any `MJ: List Categories` row is saved or
@@ -1926,6 +1939,13 @@ let ListsBrowseResource = class ListsBrowseResource extends BaseResourceComponen
1926
1939
  return;
1927
1940
  const listToDelete = this.listToDelete;
1928
1941
  const listName = listToDelete.Name;
1942
+ // Defense-in-depth: re-check the ownership rule before deleting so a stale/forced menu can't
1943
+ // bypass the gate. The server (MJListEntityServer.Delete) is the true enforcement point, but
1944
+ // failing fast here gives a clean message instead of a rejected server round-trip.
1945
+ if (!MJListEntityExtended.UserCanDelete(listToDelete.UserID, this.ProviderToUse.CurrentUser)) {
1946
+ this.notificationService.CreateSimpleNotification(`You don't have permission to delete "${listName}".`, 'error', 6000);
1947
+ return;
1948
+ }
1929
1949
  this.isDeleting = true;
1930
1950
  this.cdr.detectChanges();
1931
1951
  try {
@@ -2592,14 +2612,14 @@ export { ListsBrowseResource };
2592
2612
  <i class="fa-solid fa-copy"></i>
2593
2613
  Duplicate
2594
2614
  </button>
2595
- @if (contextItemCapabilities.CanDelete) {
2615
+ @if (CanDeleteContextItem) {
2596
2616
  <div class="menu-divider"></div>
2597
2617
  <button class="menu-item danger" (click)="confirmDeleteList()">
2598
2618
  <i class="fa-solid fa-trash"></i>
2599
2619
  Delete
2600
2620
  </button>
2601
2621
  }
2602
- @if (!contextItemCapabilities.CanEdit && !contextItemCapabilities.CanShare && !contextItemCapabilities.CanDelete) {
2622
+ @if (!contextItemCapabilities.CanEdit && !contextItemCapabilities.CanShare && !CanDeleteContextItem) {
2603
2623
  <div class="menu-viewer-hint">
2604
2624
  <i class="fa-solid fa-eye"></i>
2605
2625
  Viewer access — read only