@memberjunction/ng-artifacts 5.21.0 → 5.23.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 (25) hide show
  1. package/dist/lib/artifacts.module.d.ts +3 -1
  2. package/dist/lib/artifacts.module.d.ts.map +1 -1
  3. package/dist/lib/artifacts.module.js +10 -3
  4. package/dist/lib/artifacts.module.js.map +1 -1
  5. package/dist/lib/components/artifact-type-plugin-viewer.component.d.ts +10 -0
  6. package/dist/lib/components/artifact-type-plugin-viewer.component.d.ts.map +1 -1
  7. package/dist/lib/components/artifact-type-plugin-viewer.component.js +15 -1
  8. package/dist/lib/components/artifact-type-plugin-viewer.component.js.map +1 -1
  9. package/dist/lib/components/artifact-viewer-panel.component.d.ts +24 -2
  10. package/dist/lib/components/artifact-viewer-panel.component.d.ts.map +1 -1
  11. package/dist/lib/components/artifact-viewer-panel.component.js +409 -308
  12. package/dist/lib/components/artifact-viewer-panel.component.js.map +1 -1
  13. package/dist/lib/components/base-artifact-viewer.component.d.ts +16 -0
  14. package/dist/lib/components/base-artifact-viewer.component.d.ts.map +1 -1
  15. package/dist/lib/components/base-artifact-viewer.component.js +20 -0
  16. package/dist/lib/components/base-artifact-viewer.component.js.map +1 -1
  17. package/dist/lib/components/plugins/component-artifact-viewer.component.d.ts +8 -1
  18. package/dist/lib/components/plugins/component-artifact-viewer.component.d.ts.map +1 -1
  19. package/dist/lib/components/plugins/component-artifact-viewer.component.js +26 -27
  20. package/dist/lib/components/plugins/component-artifact-viewer.component.js.map +1 -1
  21. package/dist/lib/components/plugins/component-feedback-panel/component-feedback-panel.component.d.ts +4 -2
  22. package/dist/lib/components/plugins/component-feedback-panel/component-feedback-panel.component.d.ts.map +1 -1
  23. package/dist/lib/components/plugins/component-feedback-panel/component-feedback-panel.component.js +79 -63
  24. package/dist/lib/components/plugins/component-feedback-panel/component-feedback-panel.component.js.map +1 -1
  25. package/package.json +15 -16
@@ -1,3 +1,4 @@
1
+ import { AngularAdapterService } from '@memberjunction/ng-react';
1
2
  import * as i0 from "@angular/core";
2
3
  import * as i1 from "./components/artifact-type-plugin-viewer.component";
3
4
  import * as i2 from "./components/artifact-viewer-panel.component";
@@ -30,7 +31,8 @@ import * as i23 from "./components/plugins/component-feedback-panel/component-fe
30
31
  * using MJGlobal.Instance.ClassFactory.CreateInstance('PluginClassName').
31
32
  */
32
33
  export declare class ArtifactsModule {
33
- constructor();
34
+ private adapter;
35
+ constructor(adapter: AngularAdapterService);
34
36
  static ɵfac: i0.ɵɵFactoryDeclaration<ArtifactsModule, never>;
35
37
  static ɵmod: i0.ɵɵNgModuleDeclaration<ArtifactsModule, [typeof i1.ArtifactTypePluginViewerComponent, typeof i2.ArtifactViewerPanelComponent, typeof i3.ArtifactVersionHistoryComponent, typeof i4.ArtifactMessageCardComponent, typeof i5.JsonArtifactViewerComponent, typeof i6.CodeArtifactViewerComponent, typeof i7.MarkdownArtifactViewerComponent, typeof i8.HtmlArtifactViewerComponent, typeof i9.SvgArtifactViewerComponent, typeof i10.ComponentArtifactViewerComponent, typeof i11.DataArtifactViewerComponent, typeof i12.SaveQueryPanelComponent, typeof i13.DataRequirementsViewerComponent], [typeof i14.CommonModule, typeof i15.FormsModule, typeof i16.MarkdownModule, typeof i17.CodeEditorModule, typeof i18.MJReactModule, typeof i19.MJNotificationsModule, typeof i20.QueryViewerModule, typeof i21.SharedGenericModule, typeof i22.NgTreesModule, typeof i23.ComponentFeedbackPanelComponent], [typeof i1.ArtifactTypePluginViewerComponent, typeof i2.ArtifactViewerPanelComponent, typeof i3.ArtifactVersionHistoryComponent, typeof i4.ArtifactMessageCardComponent, typeof i5.JsonArtifactViewerComponent, typeof i6.CodeArtifactViewerComponent, typeof i7.MarkdownArtifactViewerComponent, typeof i8.HtmlArtifactViewerComponent, typeof i9.SvgArtifactViewerComponent, typeof i10.ComponentArtifactViewerComponent, typeof i11.DataArtifactViewerComponent]>;
36
38
  static ɵinj: i0.ɵɵInjectorDeclaration<ArtifactsModule>;
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.module.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA+BA;;;;;;GAMG;AACH,qBAyDa,eAAe;;yCAAf,eAAe;0CAAf,eAAe;0CAAf,eAAe;CAc3B"}
1
+ {"version":3,"file":"artifacts.module.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;AAwBhF;;;;;;GAMG;AACH,qBAyDa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,qBAAqB;yCADvC,eAAe;0CAAf,eAAe;0CAAf,eAAe;CAmB3B"}
@@ -26,6 +26,7 @@ import { ArtifactVersionHistoryComponent } from './components/artifact-version-h
26
26
  import { ArtifactViewerPanelComponent } from './components/artifact-viewer-panel.component';
27
27
  import { ArtifactMessageCardComponent } from './components/artifact-message-card.component';
28
28
  import * as i0 from "@angular/core";
29
+ import * as i1 from "@memberjunction/ng-react";
29
30
  /**
30
31
  * Module for artifact viewer plugin system.
31
32
  * Provides components for viewing different types of artifacts (JSON, Code, Markdown, HTML, SVG, Components).
@@ -34,7 +35,9 @@ import * as i0 from "@angular/core";
34
35
  * using MJGlobal.Instance.ClassFactory.CreateInstance('PluginClassName').
35
36
  */
36
37
  export class ArtifactsModule {
37
- constructor() {
38
+ adapter;
39
+ constructor(adapter) {
40
+ this.adapter = adapter;
38
41
  // Ensure plugin components are registered on module load by referencing their classes
39
42
  // The @RegisterClass decorator on each component handles the actual registration with MJGlobal
40
43
  [
@@ -46,8 +49,12 @@ export class ArtifactsModule {
46
49
  ComponentArtifactViewerComponent,
47
50
  DataArtifactViewerComponent
48
51
  ];
52
+ // PERF: Eagerly start downloading React, ReactDOM, and Babel from CDN in the background.
53
+ // By the time a user opens an interactive component artifact, the scripts will already
54
+ // be cached. The adapter.preload() is non-blocking and deduplicates with initialize().
55
+ this.adapter.preload();
49
56
  }
50
- static ɵfac = function ArtifactsModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ArtifactsModule)(); };
57
+ static ɵfac = function ArtifactsModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ArtifactsModule)(i0.ɵɵinject(i1.AngularAdapterService)); };
51
58
  static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: ArtifactsModule });
52
59
  static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
53
60
  FormsModule,
@@ -114,7 +121,7 @@ export class ArtifactsModule {
114
121
  // Plugins are registered via @RegisterClass decorator on component classes, no providers needed
115
122
  ]
116
123
  }]
117
- }], () => [], null); })();
124
+ }], () => [{ type: i1.AngularAdapterService }], null); })();
118
125
  (function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ArtifactsModule, { declarations: [
119
126
  // Artifact type plugin viewer (loads appropriate plugin based on DriverClass)
120
127
  ArtifactTypePluginViewerComponent,
@@ -1 +1 @@
1
- {"version":3,"file":"artifacts.module.js","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MarkdownModule } from '@memberjunction/ng-markdown';\n\n// Import MJ modules\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\nimport { MJReactModule } from '@memberjunction/ng-react';\nimport { MJNotificationsModule } from '@memberjunction/ng-notifications';\nimport { QueryViewerModule } from '@memberjunction/ng-query-viewer';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { NgTreesModule } from '@memberjunction/ng-trees';\n\n// Import plugin components (note: base component is abstract and NOT declared)\nimport { JsonArtifactViewerComponent } from './components/plugins/json-artifact-viewer.component';\nimport { CodeArtifactViewerComponent } from './components/plugins/code-artifact-viewer.component';\nimport { MarkdownArtifactViewerComponent } from './components/plugins/markdown-artifact-viewer.component';\nimport { HtmlArtifactViewerComponent } from './components/plugins/html-artifact-viewer.component';\nimport { SvgArtifactViewerComponent } from './components/plugins/svg-artifact-viewer.component';\nimport { ComponentArtifactViewerComponent } from './components/plugins/component-artifact-viewer.component';\nimport { DataArtifactViewerComponent } from './components/plugins/data-artifact-viewer.component';\nimport { SaveQueryPanelComponent } from './components/plugins/save-query-dialog.component';\nimport { DataRequirementsViewerComponent } from './components/plugins/data-requirements-viewer/data-requirements-viewer.component';\nimport { ComponentFeedbackPanelComponent } from './components/plugins/component-feedback-panel/component-feedback-panel.component';\n\n// Import artifact type plugin viewer component\nimport { ArtifactTypePluginViewerComponent } from './components/artifact-type-plugin-viewer.component';\nimport { ArtifactVersionHistoryComponent } from './components/artifact-version-history.component';\nimport { ArtifactViewerPanelComponent } from './components/artifact-viewer-panel.component';\nimport { ArtifactMessageCardComponent } from './components/artifact-message-card.component';\n\n/**\n * Module for artifact viewer plugin system.\n * Provides components for viewing different types of artifacts (JSON, Code, Markdown, HTML, SVG, Components).\n *\n * Plugins are automatically registered via @RegisterClass decorator and can be instantiated\n * using MJGlobal.Instance.ClassFactory.CreateInstance('PluginClassName').\n */\n@NgModule({\n declarations: [\n // Artifact type plugin viewer (loads appropriate plugin based on DriverClass)\n ArtifactTypePluginViewerComponent,\n\n // Artifact viewer UI components\n ArtifactViewerPanelComponent,\n ArtifactVersionHistoryComponent,\n ArtifactMessageCardComponent,\n\n // Plugin components\n JsonArtifactViewerComponent,\n CodeArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n SvgArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n DataArtifactViewerComponent,\n SaveQueryPanelComponent,\n\n // Custom tab components (used by plugins via dynamic component tabs)\n DataRequirementsViewerComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MarkdownModule,\n CodeEditorModule,\n MJReactModule,\n MJNotificationsModule,\n QueryViewerModule,\n SharedGenericModule,\n NgTreesModule,\n ComponentFeedbackPanelComponent\n ],\n exports: [\n // Export artifact type plugin viewer\n ArtifactTypePluginViewerComponent,\n\n // Export artifact viewer UI components\n ArtifactViewerPanelComponent,\n ArtifactVersionHistoryComponent,\n ArtifactMessageCardComponent,\n\n // Export plugin components\n JsonArtifactViewerComponent,\n CodeArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n SvgArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n DataArtifactViewerComponent\n ],\n providers: [\n // Plugins are registered via @RegisterClass decorator on component classes, no providers needed\n ]\n})\nexport class ArtifactsModule {\n constructor() {\n // Ensure plugin components are registered on module load by referencing their classes\n // The @RegisterClass decorator on each component handles the actual registration with MJGlobal\n [\n JsonArtifactViewerComponent,\n CodeArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n SvgArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n DataArtifactViewerComponent\n ];\n }\n}\n"]}
1
+ {"version":3,"file":"artifacts.module.js","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MarkdownModule } from '@memberjunction/ng-markdown';\n\n// Import MJ modules\nimport { CodeEditorModule } from '@memberjunction/ng-code-editor';\nimport { MJReactModule, AngularAdapterService } from '@memberjunction/ng-react';\nimport { MJNotificationsModule } from '@memberjunction/ng-notifications';\nimport { QueryViewerModule } from '@memberjunction/ng-query-viewer';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\nimport { NgTreesModule } from '@memberjunction/ng-trees';\n\n// Import plugin components (note: base component is abstract and NOT declared)\nimport { JsonArtifactViewerComponent } from './components/plugins/json-artifact-viewer.component';\nimport { CodeArtifactViewerComponent } from './components/plugins/code-artifact-viewer.component';\nimport { MarkdownArtifactViewerComponent } from './components/plugins/markdown-artifact-viewer.component';\nimport { HtmlArtifactViewerComponent } from './components/plugins/html-artifact-viewer.component';\nimport { SvgArtifactViewerComponent } from './components/plugins/svg-artifact-viewer.component';\nimport { ComponentArtifactViewerComponent } from './components/plugins/component-artifact-viewer.component';\nimport { DataArtifactViewerComponent } from './components/plugins/data-artifact-viewer.component';\nimport { SaveQueryPanelComponent } from './components/plugins/save-query-dialog.component';\nimport { DataRequirementsViewerComponent } from './components/plugins/data-requirements-viewer/data-requirements-viewer.component';\nimport { ComponentFeedbackPanelComponent } from './components/plugins/component-feedback-panel/component-feedback-panel.component';\n\n// Import artifact type plugin viewer component\nimport { ArtifactTypePluginViewerComponent } from './components/artifact-type-plugin-viewer.component';\nimport { ArtifactVersionHistoryComponent } from './components/artifact-version-history.component';\nimport { ArtifactViewerPanelComponent } from './components/artifact-viewer-panel.component';\nimport { ArtifactMessageCardComponent } from './components/artifact-message-card.component';\n\n/**\n * Module for artifact viewer plugin system.\n * Provides components for viewing different types of artifacts (JSON, Code, Markdown, HTML, SVG, Components).\n *\n * Plugins are automatically registered via @RegisterClass decorator and can be instantiated\n * using MJGlobal.Instance.ClassFactory.CreateInstance('PluginClassName').\n */\n@NgModule({\n declarations: [\n // Artifact type plugin viewer (loads appropriate plugin based on DriverClass)\n ArtifactTypePluginViewerComponent,\n\n // Artifact viewer UI components\n ArtifactViewerPanelComponent,\n ArtifactVersionHistoryComponent,\n ArtifactMessageCardComponent,\n\n // Plugin components\n JsonArtifactViewerComponent,\n CodeArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n SvgArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n DataArtifactViewerComponent,\n SaveQueryPanelComponent,\n\n // Custom tab components (used by plugins via dynamic component tabs)\n DataRequirementsViewerComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n MarkdownModule,\n CodeEditorModule,\n MJReactModule,\n MJNotificationsModule,\n QueryViewerModule,\n SharedGenericModule,\n NgTreesModule,\n ComponentFeedbackPanelComponent\n ],\n exports: [\n // Export artifact type plugin viewer\n ArtifactTypePluginViewerComponent,\n\n // Export artifact viewer UI components\n ArtifactViewerPanelComponent,\n ArtifactVersionHistoryComponent,\n ArtifactMessageCardComponent,\n\n // Export plugin components\n JsonArtifactViewerComponent,\n CodeArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n SvgArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n DataArtifactViewerComponent\n ],\n providers: [\n // Plugins are registered via @RegisterClass decorator on component classes, no providers needed\n ]\n})\nexport class ArtifactsModule {\n constructor(private adapter: AngularAdapterService) {\n // Ensure plugin components are registered on module load by referencing their classes\n // The @RegisterClass decorator on each component handles the actual registration with MJGlobal\n [\n JsonArtifactViewerComponent,\n CodeArtifactViewerComponent,\n MarkdownArtifactViewerComponent,\n HtmlArtifactViewerComponent,\n SvgArtifactViewerComponent,\n ComponentArtifactViewerComponent,\n DataArtifactViewerComponent\n ];\n\n // PERF: Eagerly start downloading React, ReactDOM, and Babel from CDN in the background.\n // By the time a user opens an interactive component artifact, the scripts will already\n // be cached. The adapter.preload() is non-blocking and deduplicates with initialize().\n this.adapter.preload();\n }\n}\n"]}
@@ -31,6 +31,16 @@ export declare class ArtifactTypePluginViewerComponent implements OnInit, OnChan
31
31
  * Get the loaded plugin instance (if available)
32
32
  */
33
33
  get pluginInstance(): BaseArtifactViewerPluginComponent | null;
34
+ /**
35
+ * Whether the loaded plugin supports user feedback.
36
+ * Pass-through to the plugin instance for use by the parent panel wrapper.
37
+ */
38
+ get SupportsFeedback(): boolean;
39
+ /**
40
+ * Ask the loaded plugin to show its feedback UX.
41
+ * Pass-through to the plugin instance, called from the parent panel header.
42
+ */
43
+ AskUserForFeedback(): void;
34
44
  ngOnInit(): Promise<void>;
35
45
  ngOnChanges(changes: SimpleChanges): Promise<void>;
36
46
  ngOnDestroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-type-plugin-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/artifact-type-plugin-viewer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,aAAa,EAEb,gBAAgB,EAGjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAgD,MAAM,+BAA+B,CAAC;AACtH,OAAO,EAA+B,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAAE,iCAAiC,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;;AAExG;;;GAGG;AACH,qBA2Fa,iCAAkC,YAAW,MAAM,EAAE,SAAS;IAChE,eAAe,EAAG,uBAAuB,CAAC;IAC1C,gBAAgB,EAAG,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAQ;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAEjB,gBAAgB;oBAAiC,MAAM;sBAAgB,YAAY;OAAK;IACxF,iBAAiB,kCAAyC;IAC1D,YAAY,qBAA4B;IACxC,WAAW,qBAA4B;IAGjD,eAAe,EAAG,gBAAgB,CAAC;IAE5B,SAAS,UAAQ;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC,OAAO,CAAC,YAAY,CAAkC;IAEtD;;OAEG;IACH,IAAW,cAAc,IAAI,iCAAiC,GAAG,IAAI,CAEpE;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,WAAW,IAAI,IAAI;IAInB;;OAEG;YACW,UAAU;IAyIxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAMhB;;OAEG;YACW,eAAe;IAW7B;;;;;;OAMG;YACW,kBAAkB;IAyBhC;;OAEG;YACW,mBAAmB;IAiBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;yCA3RjB,iCAAiC;2CAAjC,iCAAiC;CAkS7C"}
1
+ {"version":3,"file":"artifact-type-plugin-viewer.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/artifact-type-plugin-viewer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,YAAY,EACZ,MAAM,EACN,SAAS,EACT,aAAa,EAEb,gBAAgB,EAGjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,uBAAuB,EAAgD,MAAM,+BAA+B,CAAC;AACtH,OAAO,EAA+B,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,EAAE,iCAAiC,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;;AAExG;;;GAGG;AACH,qBA2Fa,iCAAkC,YAAW,MAAM,EAAE,SAAS;IAChE,eAAe,EAAG,uBAAuB,CAAC;IAC1C,gBAAgB,EAAG,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAQ;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAEjB,gBAAgB;oBAAiC,MAAM;sBAAgB,YAAY;OAAK;IACxF,iBAAiB,kCAAyC;IAC1D,YAAY,qBAA4B;IACxC,WAAW,qBAA4B;IAGjD,eAAe,EAAG,gBAAgB,CAAC;IAE5B,SAAS,UAAQ;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAQ;IACnC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAExC,OAAO,CAAC,YAAY,CAAkC;IAEtD;;OAEG;IACH,IAAW,cAAc,IAAI,iCAAiC,GAAG,IAAI,CAEpE;IAED;;;OAGG;IACH,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAED;;;OAGG;IACI,kBAAkB,IAAI,IAAI;IAI3B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAOxD,WAAW,IAAI,IAAI;IAInB;;OAEG;YACW,UAAU;IAyIxB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAMhB;;OAEG;YACW,eAAe;IAW7B;;;;;;OAMG;YACW,kBAAkB;IAyBhC;;OAEG;YACW,mBAAmB;IAiBjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiBzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;yCA3SjB,iCAAiC;2CAAjC,iCAAiC;CAkT7C"}
@@ -75,6 +75,20 @@ export class ArtifactTypePluginViewerComponent {
75
75
  get pluginInstance() {
76
76
  return this.componentRef?.instance || null;
77
77
  }
78
+ /**
79
+ * Whether the loaded plugin supports user feedback.
80
+ * Pass-through to the plugin instance for use by the parent panel wrapper.
81
+ */
82
+ get SupportsFeedback() {
83
+ return this.pluginInstance?.SupportsFeedback ?? false;
84
+ }
85
+ /**
86
+ * Ask the loaded plugin to show its feedback UX.
87
+ * Pass-through to the plugin instance, called from the parent panel header.
88
+ */
89
+ AskUserForFeedback() {
90
+ this.pluginInstance?.AskUserForFeedback();
91
+ }
78
92
  async ngOnInit() {
79
93
  await this.loadViewer();
80
94
  }
@@ -122,7 +136,7 @@ export class ArtifactTypePluginViewerComponent {
122
136
  }
123
137
  // Get the component type using MJGlobal ClassFactory
124
138
  // CreateInstance returns the registered component class for the given DriverClass key
125
- const tempInstance = MJGlobal.Instance.ClassFactory.CreateInstance(BaseArtifactViewerPluginComponent, driverClass);
139
+ const tempInstance = await MJGlobal.Instance.ClassFactory.CreateInstanceAsync(BaseArtifactViewerPluginComponent, driverClass);
126
140
  if (!tempInstance) {
127
141
  this.setError('Viewer Component Not Found', `The viewer component "${driverClass}" is not registered in the application. This usually means the required package or module hasn't been loaded.`, `Component "${driverClass}" not found in ClassFactory registry. Ensure it's registered with @RegisterClass(BaseArtifactViewerPluginComponent, '${driverClass}').`);
128
142
  this.isLoading = false;
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-type-plugin-viewer.component.js","sourceRoot":"","sources":["../../../src/lib/components/artifact-type-plugin-viewer.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ViewContainerRef,\n ComponentRef,\n Type\n} from '@angular/core';\nimport { MJArtifactVersionEntity, MJArtifactTypeEntity, ArtifactMetadataEngine } from '@memberjunction/core-entities';\nimport { Metadata, LogError, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJGlobal } from '@memberjunction/global';\nimport { IArtifactViewerComponent } from '../interfaces/artifact-viewer-plugin.interface';\nimport { BaseArtifactViewerPluginComponent, NavigationRequest } from './base-artifact-viewer.component';\n\n/**\n * Artifact type plugin viewer that loads the appropriate plugin based on the artifact's DriverClass.\n * Uses MJGlobal.Instance.ClassFactory.CreateInstance() to dynamically load viewer plugins.\n */\n@Component({\n standalone: false,\n selector: 'mj-artifact-type-plugin-viewer',\n template: `\n <div class=\"artifact-type-plugin-viewer\">\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fas fa-spinner fa-spin\"></i>\n <span>Loading artifact viewer...</span>\n </div>\n }\n @if (error) {\n <div class=\"error-state\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n @if (errorTitle) {\n <div class=\"error-title\">{{ errorTitle }}</div>\n }\n <div class=\"error-details\">{{ error }}</div>\n @if (errorDetails) {\n <div class=\"error-tech-details\">{{ errorDetails }}</div>\n }\n </div>\n }\n <ng-container #viewerContainer></ng-container>\n </div>\n `,\n styles: [`\n .artifact-type-plugin-viewer {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .artifact-type-plugin-viewer ::ng-deep > * {\n flex: 1;\n min-height: 0;\n }\n\n .loading-state,\n .error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n gap: 16px;\n color: #6c757d;\n width: 100%;\n height: 100%;\n min-height: 200px;\n }\n\n .loading-state i {\n font-size: 32px;\n }\n\n .error-state {\n color: #dc3545;\n text-align: center;\n max-width: 600px;\n }\n\n .error-state i {\n font-size: 32px;\n }\n\n .error-state .error-title {\n font-weight: 600;\n font-size: 16px;\n margin-bottom: 8px;\n }\n\n .error-state .error-details {\n font-size: 14px;\n line-height: 1.5;\n color: #6c757d;\n }\n\n .error-state .error-tech-details {\n margin-top: 12px;\n padding: 12px;\n background: #f8f9fa;\n border-radius: 4px;\n font-family: monospace;\n font-size: 12px;\n color: #495057;\n word-break: break-word;\n }\n `]\n})\nexport class ArtifactTypePluginViewerComponent implements OnInit, OnChanges {\n @Input() artifactVersion!: MJArtifactVersionEntity;\n @Input() artifactTypeName!: string;\n @Input() contentType?: string;\n @Input() height?: string;\n @Input() readonly: boolean = true;\n @Input() cssClass?: string;\n\n @Output() openEntityRecord = new EventEmitter<{entityName: string; compositeKey: CompositeKey}>();\n @Output() navigationRequest = new EventEmitter<NavigationRequest>();\n @Output() pluginLoaded = new EventEmitter<void>();\n @Output() tabsChanged = new EventEmitter<void>();\n\n @ViewChild('viewerContainer', { read: ViewContainerRef, static: true })\n viewerContainer!: ViewContainerRef;\n\n public isLoading = true;\n public error: string | null = null;\n public errorDetails: string | null = null;\n public errorTitle: string | null = null;\n\n private componentRef: ComponentRef<any> | null = null;\n\n /**\n * Get the loaded plugin instance (if available)\n */\n public get pluginInstance(): BaseArtifactViewerPluginComponent | null {\n return this.componentRef?.instance as BaseArtifactViewerPluginComponent || null;\n }\n\n async ngOnInit(): Promise<void> {\n await this.loadViewer();\n }\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if ((changes['artifactVersion'] || changes['artifactTypeName']) &&\n !changes['artifactVersion']?.firstChange) {\n await this.loadViewer();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyCurrentViewer();\n }\n\n /**\n * Load the appropriate viewer plugin for the artifact\n */\n private async loadViewer(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n this.errorTitle = null;\n this.errorDetails = null;\n\n if (!this.artifactVersion) {\n this.setError(\n 'Missing Artifact Data',\n 'Unable to display this artifact because the version information is missing.',\n 'artifactVersion is null or undefined'\n );\n this.isLoading = false;\n return;\n }\n\n if (!this.artifactTypeName) {\n this.setError(\n 'Missing Artifact Type',\n 'Unable to display this artifact because the type information is missing.',\n 'artifactTypeName is empty'\n );\n this.isLoading = false;\n return;\n }\n\n // Get the artifact type entity to find the DriverClass\n const artifactType = await this.getArtifactType();\n if (!artifactType) {\n this.setError(\n 'Unknown Artifact Type',\n `The artifact type \"${this.artifactTypeName}\" is not recognized. This might be a custom type that hasn't been properly configured.`,\n `Artifact type \"${this.artifactTypeName}\" not found in metadata`\n );\n this.isLoading = false;\n return;\n }\n\n // Resolve DriverClass by traversing parent hierarchy if needed\n const driverClass = await this.resolveDriverClass(artifactType);\n if (!driverClass) {\n this.setError(\n 'No Viewer Available',\n `This artifact type (${this.artifactTypeName}) doesn't have a viewer component configured. The artifact content may need to be viewed in the JSON tab.`,\n `No DriverClass in hierarchy and content is not valid JSON`\n );\n this.isLoading = false;\n return;\n }\n\n // Get the component type using MJGlobal ClassFactory\n // CreateInstance returns the registered component class for the given DriverClass key\n const tempInstance = MJGlobal.Instance.ClassFactory.CreateInstance<BaseArtifactViewerPluginComponent>(\n BaseArtifactViewerPluginComponent,\n driverClass\n );\n\n if (!tempInstance) {\n this.setError(\n 'Viewer Component Not Found',\n `The viewer component \"${driverClass}\" is not registered in the application. This usually means the required package or module hasn't been loaded.`,\n `Component \"${driverClass}\" not found in ClassFactory registry. Ensure it's registered with @RegisterClass(BaseArtifactViewerPluginComponent, '${driverClass}').`\n );\n this.isLoading = false;\n return;\n }\n\n // Get the component type from the instance\n const componentType = tempInstance.constructor as Type<BaseArtifactViewerPluginComponent>;\n\n // Destroy previous viewer if exists\n this.destroyCurrentViewer();\n\n // Create and configure the viewer component\n this.componentRef = this.viewerContainer.createComponent(componentType);\n\n // Set inputs using setInput() which properly triggers ngOnChanges\n // This is critical for plugins like ComponentArtifactViewerComponent that\n // need to process the artifactVersion in ngOnChanges before pluginLoaded fires\n this.componentRef.setInput('artifactVersion', this.artifactVersion);\n if (this.height !== undefined) {\n this.componentRef.setInput('height', this.height);\n }\n if (this.readonly !== undefined) {\n this.componentRef.setInput('readonly', this.readonly);\n }\n if (this.cssClass !== undefined) {\n this.componentRef.setInput('cssClass', this.cssClass);\n }\n if (this.contentType !== undefined) {\n this.componentRef.setInput('contentType', this.contentType);\n }\n\n // Subscribe to openEntityRecord event if the plugin emits it\n const componentInstance = this.componentRef.instance;\n if (componentInstance.openEntityRecord) {\n componentInstance.openEntityRecord.subscribe((event: {entityName: string; compositeKey: CompositeKey}) => {\n this.openEntityRecord.emit(event);\n });\n }\n\n // Subscribe to navigationRequest event if the plugin emits it\n if (componentInstance.navigationRequest) {\n componentInstance.navigationRequest.subscribe((event: NavigationRequest) => {\n this.navigationRequest.emit(event);\n });\n }\n\n // Subscribe to tabsChanged event if the plugin emits it (e.g., after async spec loading)\n if (componentInstance.tabsChanged) {\n componentInstance.tabsChanged.subscribe(() => {\n this.tabsChanged.emit();\n });\n }\n\n // Trigger change detection\n this.componentRef.changeDetectorRef.detectChanges();\n\n this.isLoading = false;\n\n // Notify parent that plugin has loaded (for tab selection timing)\n this.pluginLoaded.emit();\n } catch (err) {\n console.error('Error loading artifact viewer:', err);\n LogError(err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n const errorStack = err instanceof Error && err.stack ? err.stack : undefined;\n this.setError(\n 'Failed to Load Viewer',\n 'An unexpected error occurred while loading the artifact viewer. Please try refreshing the page or contact support if the problem persists.',\n errorStack || errorMessage\n );\n this.isLoading = false;\n }\n }\n\n /**\n * Set a structured error message with title, user-friendly description, and technical details\n */\n private setError(title: string, userMessage: string, technicalDetails: string): void {\n this.errorTitle = title;\n this.error = userMessage;\n this.errorDetails = technicalDetails;\n }\n\n /**\n * Get the artifact type entity for the current artifact using the cached ArtifactMetadataEngine\n */\n private async getArtifactType(): Promise<MJArtifactTypeEntity | null> {\n try {\n // Use the cached metadata engine instead of querying the database\n const artifactType = ArtifactMetadataEngine.Instance.FindArtifactType(this.artifactTypeName);\n return artifactType || null;\n } catch (err) {\n console.error('Error loading artifact type:', err);\n return null;\n }\n }\n\n /**\n * Resolves the DriverClass for an artifact type by traversing up the parent hierarchy.\n * Falls back to JSON viewer if content is valid JSON and no DriverClass is found.\n *\n * @param artifactType The artifact type to resolve the DriverClass for\n * @returns The DriverClass string, or null if none found and no JSON fallback available\n */\n private async resolveDriverClass(artifactType: MJArtifactTypeEntity): Promise<string | null> {\n // Check if current artifact type has a DriverClass\n if (artifactType.DriverClass) {\n console.log(`✅ Found DriverClass '${artifactType.DriverClass}' on artifact type '${artifactType.Name}'`);\n return artifactType.DriverClass;\n }\n\n // No DriverClass on current type - check if it has a parent\n if (artifactType.ParentID) {\n console.log(`🔍 No DriverClass on '${artifactType.Name}', checking parent...`);\n const parentType = await this.getArtifactTypeById(artifactType.ParentID);\n\n if (parentType) {\n // Recursively check parent\n return await this.resolveDriverClass(parentType);\n } else {\n console.warn(`⚠️ Parent artifact type '${artifactType.ParentID}' not found`);\n }\n }\n\n // Reached root with no DriverClass - check for JSON fallback\n console.log(`📄 No DriverClass found in hierarchy for '${artifactType.Name}', checking JSON fallback...`);\n return this.checkJsonFallback();\n }\n\n /**\n * Loads an artifact type by ID\n */\n private async getArtifactTypeById(id: string): Promise<MJArtifactTypeEntity | null> {\n try {\n const md = new Metadata();\n const artifactType = await md.GetEntityObject<MJArtifactTypeEntity>('MJ: Artifact Types');\n const loaded = await artifactType.Load(id);\n\n if (loaded) {\n return artifactType;\n }\n\n return null;\n } catch (err) {\n console.error('Error loading artifact type by ID:', err);\n return null;\n }\n }\n\n /**\n * Checks if the artifact content is valid JSON and returns the JSON viewer plugin if so\n */\n private checkJsonFallback(): string | null {\n if (!this.artifactVersion || !this.artifactVersion.Content) {\n console.log('❌ No content available for JSON fallback');\n return null;\n }\n\n try {\n // Try to parse the content as JSON\n JSON.parse(this.artifactVersion.Content);\n console.log('✅ Content is valid JSON, using JsonArtifactViewerPlugin as fallback');\n return 'JsonArtifactViewerPlugin';\n } catch {\n console.log('❌ Content is not valid JSON, no fallback available');\n return null;\n }\n }\n\n /**\n * Destroy the current viewer component\n */\n private destroyCurrentViewer(): void {\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n this.viewerContainer.clear();\n }\n}\n"]}
1
+ {"version":3,"file":"artifact-type-plugin-viewer.component.js","sourceRoot":"","sources":["../../../src/lib/components/artifact-type-plugin-viewer.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnChanges,\n SimpleChanges,\n ViewChild,\n ViewContainerRef,\n ComponentRef,\n Type\n} from '@angular/core';\nimport { MJArtifactVersionEntity, MJArtifactTypeEntity, ArtifactMetadataEngine } from '@memberjunction/core-entities';\nimport { Metadata, LogError, RunView, CompositeKey } from '@memberjunction/core';\nimport { MJGlobal } from '@memberjunction/global';\nimport { IArtifactViewerComponent } from '../interfaces/artifact-viewer-plugin.interface';\nimport { BaseArtifactViewerPluginComponent, NavigationRequest } from './base-artifact-viewer.component';\n\n/**\n * Artifact type plugin viewer that loads the appropriate plugin based on the artifact's DriverClass.\n * Uses MJGlobal.Instance.ClassFactory.CreateInstance() to dynamically load viewer plugins.\n */\n@Component({\n standalone: false,\n selector: 'mj-artifact-type-plugin-viewer',\n template: `\n <div class=\"artifact-type-plugin-viewer\">\n @if (isLoading) {\n <div class=\"loading-state\">\n <i class=\"fas fa-spinner fa-spin\"></i>\n <span>Loading artifact viewer...</span>\n </div>\n }\n @if (error) {\n <div class=\"error-state\">\n <i class=\"fas fa-exclamation-triangle\"></i>\n @if (errorTitle) {\n <div class=\"error-title\">{{ errorTitle }}</div>\n }\n <div class=\"error-details\">{{ error }}</div>\n @if (errorDetails) {\n <div class=\"error-tech-details\">{{ errorDetails }}</div>\n }\n </div>\n }\n <ng-container #viewerContainer></ng-container>\n </div>\n `,\n styles: [`\n .artifact-type-plugin-viewer {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n\n .artifact-type-plugin-viewer ::ng-deep > * {\n flex: 1;\n min-height: 0;\n }\n\n .loading-state,\n .error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n gap: 16px;\n color: #6c757d;\n width: 100%;\n height: 100%;\n min-height: 200px;\n }\n\n .loading-state i {\n font-size: 32px;\n }\n\n .error-state {\n color: #dc3545;\n text-align: center;\n max-width: 600px;\n }\n\n .error-state i {\n font-size: 32px;\n }\n\n .error-state .error-title {\n font-weight: 600;\n font-size: 16px;\n margin-bottom: 8px;\n }\n\n .error-state .error-details {\n font-size: 14px;\n line-height: 1.5;\n color: #6c757d;\n }\n\n .error-state .error-tech-details {\n margin-top: 12px;\n padding: 12px;\n background: #f8f9fa;\n border-radius: 4px;\n font-family: monospace;\n font-size: 12px;\n color: #495057;\n word-break: break-word;\n }\n `]\n})\nexport class ArtifactTypePluginViewerComponent implements OnInit, OnChanges {\n @Input() artifactVersion!: MJArtifactVersionEntity;\n @Input() artifactTypeName!: string;\n @Input() contentType?: string;\n @Input() height?: string;\n @Input() readonly: boolean = true;\n @Input() cssClass?: string;\n\n @Output() openEntityRecord = new EventEmitter<{entityName: string; compositeKey: CompositeKey}>();\n @Output() navigationRequest = new EventEmitter<NavigationRequest>();\n @Output() pluginLoaded = new EventEmitter<void>();\n @Output() tabsChanged = new EventEmitter<void>();\n\n @ViewChild('viewerContainer', { read: ViewContainerRef, static: true })\n viewerContainer!: ViewContainerRef;\n\n public isLoading = true;\n public error: string | null = null;\n public errorDetails: string | null = null;\n public errorTitle: string | null = null;\n\n private componentRef: ComponentRef<any> | null = null;\n\n /**\n * Get the loaded plugin instance (if available)\n */\n public get pluginInstance(): BaseArtifactViewerPluginComponent | null {\n return this.componentRef?.instance as BaseArtifactViewerPluginComponent || null;\n }\n\n /**\n * Whether the loaded plugin supports user feedback.\n * Pass-through to the plugin instance for use by the parent panel wrapper.\n */\n public get SupportsFeedback(): boolean {\n return this.pluginInstance?.SupportsFeedback ?? false;\n }\n\n /**\n * Ask the loaded plugin to show its feedback UX.\n * Pass-through to the plugin instance, called from the parent panel header.\n */\n public AskUserForFeedback(): void {\n this.pluginInstance?.AskUserForFeedback();\n }\n\n async ngOnInit(): Promise<void> {\n await this.loadViewer();\n }\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if ((changes['artifactVersion'] || changes['artifactTypeName']) &&\n !changes['artifactVersion']?.firstChange) {\n await this.loadViewer();\n }\n }\n\n ngOnDestroy(): void {\n this.destroyCurrentViewer();\n }\n\n /**\n * Load the appropriate viewer plugin for the artifact\n */\n private async loadViewer(): Promise<void> {\n try {\n this.isLoading = true;\n this.error = null;\n this.errorTitle = null;\n this.errorDetails = null;\n\n if (!this.artifactVersion) {\n this.setError(\n 'Missing Artifact Data',\n 'Unable to display this artifact because the version information is missing.',\n 'artifactVersion is null or undefined'\n );\n this.isLoading = false;\n return;\n }\n\n if (!this.artifactTypeName) {\n this.setError(\n 'Missing Artifact Type',\n 'Unable to display this artifact because the type information is missing.',\n 'artifactTypeName is empty'\n );\n this.isLoading = false;\n return;\n }\n\n // Get the artifact type entity to find the DriverClass\n const artifactType = await this.getArtifactType();\n if (!artifactType) {\n this.setError(\n 'Unknown Artifact Type',\n `The artifact type \"${this.artifactTypeName}\" is not recognized. This might be a custom type that hasn't been properly configured.`,\n `Artifact type \"${this.artifactTypeName}\" not found in metadata`\n );\n this.isLoading = false;\n return;\n }\n\n // Resolve DriverClass by traversing parent hierarchy if needed\n const driverClass = await this.resolveDriverClass(artifactType);\n if (!driverClass) {\n this.setError(\n 'No Viewer Available',\n `This artifact type (${this.artifactTypeName}) doesn't have a viewer component configured. The artifact content may need to be viewed in the JSON tab.`,\n `No DriverClass in hierarchy and content is not valid JSON`\n );\n this.isLoading = false;\n return;\n }\n\n // Get the component type using MJGlobal ClassFactory\n // CreateInstance returns the registered component class for the given DriverClass key\n const tempInstance = await MJGlobal.Instance.ClassFactory.CreateInstanceAsync<BaseArtifactViewerPluginComponent>(\n BaseArtifactViewerPluginComponent,\n driverClass\n );\n\n if (!tempInstance) {\n this.setError(\n 'Viewer Component Not Found',\n `The viewer component \"${driverClass}\" is not registered in the application. This usually means the required package or module hasn't been loaded.`,\n `Component \"${driverClass}\" not found in ClassFactory registry. Ensure it's registered with @RegisterClass(BaseArtifactViewerPluginComponent, '${driverClass}').`\n );\n this.isLoading = false;\n return;\n }\n\n // Get the component type from the instance\n const componentType = tempInstance.constructor as Type<BaseArtifactViewerPluginComponent>;\n\n // Destroy previous viewer if exists\n this.destroyCurrentViewer();\n\n // Create and configure the viewer component\n this.componentRef = this.viewerContainer.createComponent(componentType);\n\n // Set inputs using setInput() which properly triggers ngOnChanges\n // This is critical for plugins like ComponentArtifactViewerComponent that\n // need to process the artifactVersion in ngOnChanges before pluginLoaded fires\n this.componentRef.setInput('artifactVersion', this.artifactVersion);\n if (this.height !== undefined) {\n this.componentRef.setInput('height', this.height);\n }\n if (this.readonly !== undefined) {\n this.componentRef.setInput('readonly', this.readonly);\n }\n if (this.cssClass !== undefined) {\n this.componentRef.setInput('cssClass', this.cssClass);\n }\n if (this.contentType !== undefined) {\n this.componentRef.setInput('contentType', this.contentType);\n }\n\n // Subscribe to openEntityRecord event if the plugin emits it\n const componentInstance = this.componentRef.instance;\n if (componentInstance.openEntityRecord) {\n componentInstance.openEntityRecord.subscribe((event: {entityName: string; compositeKey: CompositeKey}) => {\n this.openEntityRecord.emit(event);\n });\n }\n\n // Subscribe to navigationRequest event if the plugin emits it\n if (componentInstance.navigationRequest) {\n componentInstance.navigationRequest.subscribe((event: NavigationRequest) => {\n this.navigationRequest.emit(event);\n });\n }\n\n // Subscribe to tabsChanged event if the plugin emits it (e.g., after async spec loading)\n if (componentInstance.tabsChanged) {\n componentInstance.tabsChanged.subscribe(() => {\n this.tabsChanged.emit();\n });\n }\n\n // Trigger change detection\n this.componentRef.changeDetectorRef.detectChanges();\n\n this.isLoading = false;\n\n // Notify parent that plugin has loaded (for tab selection timing)\n this.pluginLoaded.emit();\n } catch (err) {\n console.error('Error loading artifact viewer:', err);\n LogError(err);\n const errorMessage = err instanceof Error ? err.message : String(err);\n const errorStack = err instanceof Error && err.stack ? err.stack : undefined;\n this.setError(\n 'Failed to Load Viewer',\n 'An unexpected error occurred while loading the artifact viewer. Please try refreshing the page or contact support if the problem persists.',\n errorStack || errorMessage\n );\n this.isLoading = false;\n }\n }\n\n /**\n * Set a structured error message with title, user-friendly description, and technical details\n */\n private setError(title: string, userMessage: string, technicalDetails: string): void {\n this.errorTitle = title;\n this.error = userMessage;\n this.errorDetails = technicalDetails;\n }\n\n /**\n * Get the artifact type entity for the current artifact using the cached ArtifactMetadataEngine\n */\n private async getArtifactType(): Promise<MJArtifactTypeEntity | null> {\n try {\n // Use the cached metadata engine instead of querying the database\n const artifactType = ArtifactMetadataEngine.Instance.FindArtifactType(this.artifactTypeName);\n return artifactType || null;\n } catch (err) {\n console.error('Error loading artifact type:', err);\n return null;\n }\n }\n\n /**\n * Resolves the DriverClass for an artifact type by traversing up the parent hierarchy.\n * Falls back to JSON viewer if content is valid JSON and no DriverClass is found.\n *\n * @param artifactType The artifact type to resolve the DriverClass for\n * @returns The DriverClass string, or null if none found and no JSON fallback available\n */\n private async resolveDriverClass(artifactType: MJArtifactTypeEntity): Promise<string | null> {\n // Check if current artifact type has a DriverClass\n if (artifactType.DriverClass) {\n console.log(`✅ Found DriverClass '${artifactType.DriverClass}' on artifact type '${artifactType.Name}'`);\n return artifactType.DriverClass;\n }\n\n // No DriverClass on current type - check if it has a parent\n if (artifactType.ParentID) {\n console.log(`🔍 No DriverClass on '${artifactType.Name}', checking parent...`);\n const parentType = await this.getArtifactTypeById(artifactType.ParentID);\n\n if (parentType) {\n // Recursively check parent\n return await this.resolveDriverClass(parentType);\n } else {\n console.warn(`⚠️ Parent artifact type '${artifactType.ParentID}' not found`);\n }\n }\n\n // Reached root with no DriverClass - check for JSON fallback\n console.log(`📄 No DriverClass found in hierarchy for '${artifactType.Name}', checking JSON fallback...`);\n return this.checkJsonFallback();\n }\n\n /**\n * Loads an artifact type by ID\n */\n private async getArtifactTypeById(id: string): Promise<MJArtifactTypeEntity | null> {\n try {\n const md = new Metadata();\n const artifactType = await md.GetEntityObject<MJArtifactTypeEntity>('MJ: Artifact Types');\n const loaded = await artifactType.Load(id);\n\n if (loaded) {\n return artifactType;\n }\n\n return null;\n } catch (err) {\n console.error('Error loading artifact type by ID:', err);\n return null;\n }\n }\n\n /**\n * Checks if the artifact content is valid JSON and returns the JSON viewer plugin if so\n */\n private checkJsonFallback(): string | null {\n if (!this.artifactVersion || !this.artifactVersion.Content) {\n console.log('❌ No content available for JSON fallback');\n return null;\n }\n\n try {\n // Try to parse the content as JSON\n JSON.parse(this.artifactVersion.Content);\n console.log('✅ Content is valid JSON, using JsonArtifactViewerPlugin as fallback');\n return 'JsonArtifactViewerPlugin';\n } catch {\n console.log('❌ Content is not valid JSON, no fallback available');\n return null;\n }\n }\n\n /**\n * Destroy the current viewer component\n */\n private destroyCurrentViewer(): void {\n if (this.componentRef) {\n this.componentRef.destroy();\n this.componentRef = null;\n }\n this.viewerContainer.clear();\n }\n}\n"]}
@@ -106,6 +106,11 @@ export declare class ArtifactViewerPanelComponent implements OnInit, OnChanges,
106
106
  ngOnChanges(changes: SimpleChanges): Promise<void>;
107
107
  ngOnDestroy(): void;
108
108
  private loadArtifact;
109
+ /**
110
+ * Load full content for a single version by ID.
111
+ * This avoids downloading Content for ALL versions when only one is displayed.
112
+ */
113
+ private loadVersionContent;
109
114
  /**
110
115
  * Clear all links-related data to prevent stale data when switching artifacts
111
116
  */
@@ -143,6 +148,15 @@ export declare class ArtifactViewerPanelComponent implements OnInit, OnChanges,
143
148
  * Removes literal "\\n" and "\\t" which cause rendering issues
144
149
  */
145
150
  private cleanEscapedCharacters;
151
+ /**
152
+ * Process pre-fetched collection association data.
153
+ * Accepts the batch result from loadArtifact() to avoid duplicate queries.
154
+ */
155
+ private processCollectionAssociations;
156
+ /**
157
+ * @deprecated Use processCollectionAssociations() instead. Kept as a shim for callers
158
+ * that don't have pre-fetched data (e.g., selectVersion, saveToCollections).
159
+ */
146
160
  private loadCollectionAssociations;
147
161
  get isInCollection(): boolean;
148
162
  /**
@@ -163,7 +177,12 @@ export declare class ArtifactViewerPanelComponent implements OnInit, OnChanges,
163
177
  */
164
178
  saveToCollections(collectionIds: string[]): Promise<boolean>;
165
179
  /**
166
- * Load links data: origin conversation and all collections containing this artifact
180
+ * Process links data using pre-fetched batch results from loadArtifact().
181
+ * Reuses collection data from the same batch to avoid duplicate queries.
182
+ */
183
+ private processLinksData;
184
+ /**
185
+ * @deprecated Use processLinksData() instead. Kept as shim for callers without pre-fetched data.
167
186
  */
168
187
  private loadLinksData;
169
188
  get linksToShow(): Array<{
@@ -226,7 +245,10 @@ export declare class ArtifactViewerPanelComponent implements OnInit, OnChanges,
226
245
  * Get the icon for this artifact using the centralized icon service.
227
246
  * Fallback priority: Plugin icon > Metadata icon > Hardcoded mapping > Generic icon
228
247
  */
229
- getArtifactIcon(): string;
248
+ /** Cached icon class — set once after artifact loads to avoid mid-cycle flicker */
249
+ artifactIcon: string;
250
+ /** Update the cached icon from the loaded artifact */
251
+ private updateArtifactIcon;
230
252
  static ɵfac: i0.ɵɵFactoryDeclaration<ArtifactViewerPanelComponent, never>;
231
253
  static ɵcmp: i0.ɵɵComponentDeclaration<ArtifactViewerPanelComponent, "mj-artifact-viewer-panel", never, { "artifactId": { "alias": "artifactId"; "required": false; }; "currentUser": { "alias": "currentUser"; "required": false; }; "environmentId": { "alias": "environmentId"; "required": false; }; "versionNumber": { "alias": "versionNumber"; "required": false; }; "showSaveToCollection": { "alias": "showSaveToCollection"; "required": false; }; "showHeader": { "alias": "showHeader"; "required": false; }; "showTabs": { "alias": "showTabs"; "required": false; }; "showCloseButton": { "alias": "showCloseButton"; "required": false; }; "showMaximizeButton": { "alias": "showMaximizeButton"; "required": false; }; "refreshTrigger": { "alias": "refreshTrigger"; "required": false; }; "viewContext": { "alias": "viewContext"; "required": false; }; "contextCollectionId": { "alias": "contextCollectionId"; "required": false; }; "canShare": { "alias": "canShare"; "required": false; }; "canEdit": { "alias": "canEdit"; "required": false; }; "isMaximized": { "alias": "isMaximized"; "required": false; }; }, { "closed": "closed"; "saveToCollectionRequested": "saveToCollectionRequested"; "navigateToLink": "navigateToLink"; "shareRequested": "shareRequested"; "maximizeToggled": "maximizeToggled"; "openEntityRecord": "openEntityRecord"; "navigationRequest": "navigationRequest"; }, never, never, false, never>;
232
254
  }
@@ -1 +1 @@
1
- {"version":3,"file":"artifact-viewer-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/artifact-viewer-panel.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"artifact-viewer-panel.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/artifact-viewer-panel.component.ts"],"names":[],"mappings":"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"}