@memberjunction/ng-artifacts 5.38.0 → 5.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/artifacts.module.d.ts +26 -13
- package/dist/lib/artifacts.module.d.ts.map +1 -1
- package/dist/lib/artifacts.module.js +65 -2
- package/dist/lib/artifacts.module.js.map +1 -1
- package/dist/lib/components/artifact-message-card.component.d.ts +17 -1
- package/dist/lib/components/artifact-message-card.component.d.ts.map +1 -1
- package/dist/lib/components/artifact-message-card.component.js +118 -27
- package/dist/lib/components/artifact-message-card.component.js.map +1 -1
- package/dist/lib/components/base-artifact-viewer.component.d.ts +11 -0
- package/dist/lib/components/base-artifact-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/base-artifact-viewer.component.js +11 -0
- package/dist/lib/components/base-artifact-viewer.component.js.map +1 -1
- package/dist/lib/components/plugins/audio-artifact-viewer.component.d.ts +32 -0
- package/dist/lib/components/plugins/audio-artifact-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/plugins/audio-artifact-viewer.component.js +146 -0
- package/dist/lib/components/plugins/audio-artifact-viewer.component.js.map +1 -0
- package/dist/lib/components/plugins/image-artifact-viewer.component.d.ts +11 -1
- package/dist/lib/components/plugins/image-artifact-viewer.component.d.ts.map +1 -1
- package/dist/lib/components/plugins/image-artifact-viewer.component.js +17 -1
- package/dist/lib/components/plugins/image-artifact-viewer.component.js.map +1 -1
- package/dist/lib/components/plugins/video-artifact-viewer.component.d.ts +34 -0
- package/dist/lib/components/plugins/video-artifact-viewer.component.d.ts.map +1 -0
- package/dist/lib/components/plugins/video-artifact-viewer.component.js +148 -0
- package/dist/lib/components/plugins/video-artifact-viewer.component.js.map +1 -0
- package/dist/lib/components/previews/audio-artifact-preview.component.d.ts +20 -0
- package/dist/lib/components/previews/audio-artifact-preview.component.d.ts.map +1 -0
- package/dist/lib/components/previews/audio-artifact-preview.component.js +83 -0
- package/dist/lib/components/previews/audio-artifact-preview.component.js.map +1 -0
- package/dist/lib/components/previews/base-artifact-preview.component.d.ts +33 -0
- package/dist/lib/components/previews/base-artifact-preview.component.d.ts.map +1 -0
- package/dist/lib/components/previews/base-artifact-preview.component.js +52 -0
- package/dist/lib/components/previews/base-artifact-preview.component.js.map +1 -0
- package/dist/lib/components/previews/image-artifact-preview.component.d.ts +28 -0
- package/dist/lib/components/previews/image-artifact-preview.component.d.ts.map +1 -0
- package/dist/lib/components/previews/image-artifact-preview.component.js +91 -0
- package/dist/lib/components/previews/image-artifact-preview.component.js.map +1 -0
- package/dist/lib/components/previews/video-artifact-preview.component.d.ts +21 -0
- package/dist/lib/components/previews/video-artifact-preview.component.d.ts.map +1 -0
- package/dist/lib/components/previews/video-artifact-preview.component.js +84 -0
- package/dist/lib/components/previews/video-artifact-preview.component.js.map +1 -0
- package/dist/lib/interfaces/artifact-viewer-plugin.interface.d.ts +53 -10
- package/dist/lib/interfaces/artifact-viewer-plugin.interface.d.ts.map +1 -1
- package/dist/lib/interfaces/artifact-viewer-plugin.interface.js.map +1 -1
- package/dist/lib/services/artifact-preview-resolver.service.d.ts +39 -0
- package/dist/lib/services/artifact-preview-resolver.service.d.ts.map +1 -0
- package/dist/lib/services/artifact-preview-resolver.service.js +78 -0
- package/dist/lib/services/artifact-preview-resolver.service.js.map +1 -0
- package/dist/public-api.d.ts +7 -0
- package/dist/public-api.d.ts.map +1 -1
- package/dist/public-api.js +8 -0
- package/dist/public-api.js.map +1 -1
- package/package.json +18 -18
|
@@ -18,18 +18,23 @@ import * as i15 from "./components/plugins/pdf-artifact-viewer.component";
|
|
|
18
18
|
import * as i16 from "./components/plugins/xlsx-artifact-viewer.component";
|
|
19
19
|
import * as i17 from "./components/plugins/docx-artifact-viewer.component";
|
|
20
20
|
import * as i18 from "./components/plugins/image-artifact-viewer.component";
|
|
21
|
-
import * as i19 from "
|
|
22
|
-
import * as i20 from "
|
|
23
|
-
import * as i21 from "
|
|
24
|
-
import * as i22 from "
|
|
25
|
-
import * as i23 from "
|
|
26
|
-
import * as i24 from "@
|
|
27
|
-
import * as i25 from "@
|
|
28
|
-
import * as i26 from "@memberjunction/ng-
|
|
29
|
-
import * as i27 from "@memberjunction/ng-
|
|
30
|
-
import * as i28 from "@memberjunction/ng-
|
|
31
|
-
import * as i29 from "
|
|
32
|
-
import * as i30 from "
|
|
21
|
+
import * as i19 from "./components/plugins/video-artifact-viewer.component";
|
|
22
|
+
import * as i20 from "./components/plugins/audio-artifact-viewer.component";
|
|
23
|
+
import * as i21 from "./components/previews/image-artifact-preview.component";
|
|
24
|
+
import * as i22 from "./components/previews/video-artifact-preview.component";
|
|
25
|
+
import * as i23 from "./components/previews/audio-artifact-preview.component";
|
|
26
|
+
import * as i24 from "@angular/common";
|
|
27
|
+
import * as i25 from "@angular/forms";
|
|
28
|
+
import * as i26 from "@memberjunction/ng-markdown";
|
|
29
|
+
import * as i27 from "@memberjunction/ng-code-editor";
|
|
30
|
+
import * as i28 from "@memberjunction/ng-react";
|
|
31
|
+
import * as i29 from "@memberjunction/ng-notifications";
|
|
32
|
+
import * as i30 from "@memberjunction/ng-query-viewer";
|
|
33
|
+
import * as i31 from "@memberjunction/ng-shared-generic";
|
|
34
|
+
import * as i32 from "@memberjunction/ng-trees";
|
|
35
|
+
import * as i33 from "@memberjunction/ng-base-forms";
|
|
36
|
+
import * as i34 from "./components/plugins/component-feedback-panel/component-feedback-panel.component";
|
|
37
|
+
import * as i35 from "ag-grid-angular";
|
|
33
38
|
/**
|
|
34
39
|
* Module for artifact viewer plugin system.
|
|
35
40
|
* Provides components for viewing different types of artifacts (JSON, Code, Markdown, HTML, SVG, Components).
|
|
@@ -40,8 +45,16 @@ import * as i30 from "ag-grid-angular";
|
|
|
40
45
|
export declare class ArtifactsModule {
|
|
41
46
|
private adapter;
|
|
42
47
|
constructor(adapter: AngularAdapterService);
|
|
48
|
+
/**
|
|
49
|
+
* Logs a warning for any registered artifact-viewer plugin that has NO render target at all —
|
|
50
|
+
* i.e. neither an implicit full viewer (the registered SubClass itself, which is the
|
|
51
|
+
* `componentType`) nor an explicit `previewComponentType`. Today every registration is an
|
|
52
|
+
* Angular component class, so the SubClass is always present and this never fires; the guard
|
|
53
|
+
* exists to catch regressions if the render-target invariant is ever loosened.
|
|
54
|
+
*/
|
|
55
|
+
private static warnOnPluginsWithoutRenderTarget;
|
|
43
56
|
static ɵfac: i0.ɵɵFactoryDeclaration<ArtifactsModule, never>;
|
|
44
|
-
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.FileArtifactToolbarComponent, typeof i15.PdfArtifactViewerComponent, typeof i16.XlsxArtifactViewerComponent, typeof i17.DocxArtifactViewerComponent, typeof i18.ImageArtifactViewerComponent], [typeof
|
|
57
|
+
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.FileArtifactToolbarComponent, typeof i15.PdfArtifactViewerComponent, typeof i16.XlsxArtifactViewerComponent, typeof i17.DocxArtifactViewerComponent, typeof i18.ImageArtifactViewerComponent, typeof i19.VideoArtifactViewerComponent, typeof i20.AudioArtifactViewerComponent, typeof i21.ImageArtifactPreviewComponent, typeof i22.VideoArtifactPreviewComponent, typeof i23.AudioArtifactPreviewComponent], [typeof i24.CommonModule, typeof i25.FormsModule, typeof i26.MarkdownModule, typeof i27.CodeEditorModule, typeof i28.MJReactModule, typeof i29.MJNotificationsModule, typeof i30.QueryViewerModule, typeof i31.SharedGenericModule, typeof i32.NgTreesModule, typeof i33.BaseFormsModule, typeof i34.ComponentFeedbackPanelComponent, typeof i35.AgGridModule], [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 i14.FileArtifactToolbarComponent, typeof i15.PdfArtifactViewerComponent, typeof i16.XlsxArtifactViewerComponent, typeof i17.DocxArtifactViewerComponent, typeof i18.ImageArtifactViewerComponent, typeof i19.VideoArtifactViewerComponent, typeof i20.AudioArtifactViewerComponent, typeof i21.ImageArtifactPreviewComponent, typeof i22.VideoArtifactPreviewComponent, typeof i23.AudioArtifactPreviewComponent]>;
|
|
45
58
|
static ɵinj: i0.ɵɵInjectorDeclaration<ArtifactsModule>;
|
|
46
59
|
}
|
|
47
60
|
//# sourceMappingURL=artifacts.module.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.module.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC
|
|
1
|
+
{"version":3,"file":"artifacts.module.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4ChF;;;;;;GAMG;AACH,qBAuFa,eAAe;IACd,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,qBAAqB;IAmClD;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,gCAAgC;yCA3CpC,eAAe;0CAAf,eAAe;0CAAf,eAAe;CA4D3B"}
|
|
@@ -30,6 +30,14 @@ import { PdfArtifactViewerComponent } from './components/plugins/pdf-artifact-vi
|
|
|
30
30
|
import { XlsxArtifactViewerComponent } from './components/plugins/xlsx-artifact-viewer.component';
|
|
31
31
|
import { DocxArtifactViewerComponent } from './components/plugins/docx-artifact-viewer.component';
|
|
32
32
|
import { ImageArtifactViewerComponent } from './components/plugins/image-artifact-viewer.component';
|
|
33
|
+
import { VideoArtifactViewerComponent } from './components/plugins/video-artifact-viewer.component';
|
|
34
|
+
import { AudioArtifactViewerComponent } from './components/plugins/audio-artifact-viewer.component';
|
|
35
|
+
// Inline preview components (lightweight, rendered inside conversation message cards)
|
|
36
|
+
import { ImageArtifactPreviewComponent } from './components/previews/image-artifact-preview.component';
|
|
37
|
+
import { VideoArtifactPreviewComponent } from './components/previews/video-artifact-preview.component';
|
|
38
|
+
import { AudioArtifactPreviewComponent } from './components/previews/audio-artifact-preview.component';
|
|
39
|
+
import { MJGlobal } from '@memberjunction/global';
|
|
40
|
+
import { BaseArtifactViewerPluginComponent } from './components/base-artifact-viewer.component';
|
|
33
41
|
// Import artifact type plugin viewer component
|
|
34
42
|
import { ArtifactTypePluginViewerComponent } from './components/artifact-type-plugin-viewer.component';
|
|
35
43
|
import { ArtifactVersionHistoryComponent } from './components/artifact-version-history.component';
|
|
@@ -62,12 +70,43 @@ export class ArtifactsModule {
|
|
|
62
70
|
XlsxArtifactViewerComponent,
|
|
63
71
|
DocxArtifactViewerComponent,
|
|
64
72
|
ImageArtifactViewerComponent,
|
|
73
|
+
VideoArtifactViewerComponent,
|
|
74
|
+
AudioArtifactViewerComponent,
|
|
75
|
+
// Preview components are referenced via plugins' previewComponentType — list them here too
|
|
76
|
+
// so the bundler can't tree-shake the dynamically-rendered preview classes.
|
|
77
|
+
ImageArtifactPreviewComponent,
|
|
78
|
+
VideoArtifactPreviewComponent,
|
|
79
|
+
AudioArtifactPreviewComponent,
|
|
65
80
|
];
|
|
81
|
+
// Registration-time guard: every registered artifact-viewer plugin must expose at least one of
|
|
82
|
+
// componentType / previewComponentType. `componentType` is required by the interface (so this is
|
|
83
|
+
// trivially satisfied today); the guard protects against future loosening of that invariant.
|
|
84
|
+
ArtifactsModule.warnOnPluginsWithoutRenderTarget();
|
|
66
85
|
// PERF: Eagerly start downloading React, ReactDOM, and Babel from CDN in the background.
|
|
67
86
|
// By the time a user opens an interactive component artifact, the scripts will already
|
|
68
87
|
// be cached. The adapter.preload() is non-blocking and deduplicates with initialize().
|
|
69
88
|
this.adapter.preload();
|
|
70
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Logs a warning for any registered artifact-viewer plugin that has NO render target at all —
|
|
92
|
+
* i.e. neither an implicit full viewer (the registered SubClass itself, which is the
|
|
93
|
+
* `componentType`) nor an explicit `previewComponentType`. Today every registration is an
|
|
94
|
+
* Angular component class, so the SubClass is always present and this never fires; the guard
|
|
95
|
+
* exists to catch regressions if the render-target invariant is ever loosened.
|
|
96
|
+
*/
|
|
97
|
+
static warnOnPluginsWithoutRenderTarget() {
|
|
98
|
+
const registrations = MJGlobal.Instance.ClassFactory.GetAllRegistrations(BaseArtifactViewerPluginComponent);
|
|
99
|
+
for (const reg of registrations) {
|
|
100
|
+
const subClass = reg.SubClass;
|
|
101
|
+
const hasFullViewer = !!subClass; // the registered class IS the componentType
|
|
102
|
+
// Read the STATIC preview contract off the constructor — never instantiate (these are Angular
|
|
103
|
+
// components with DI constructors; a bare `new` outside an injection context throws).
|
|
104
|
+
const hasPreview = !!subClass?.PreviewComponentType;
|
|
105
|
+
if (!hasFullViewer && !hasPreview) {
|
|
106
|
+
console.warn(`ArtifactsModule: viewer plugin "${reg.Key}" has neither a componentType nor a previewComponentType — it can render nothing.`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
71
110
|
static ɵfac = function ArtifactsModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ArtifactsModule)(i0.ɵɵinject(i1.AngularAdapterService)); };
|
|
72
111
|
static ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: ArtifactsModule });
|
|
73
112
|
static ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [CommonModule,
|
|
@@ -110,6 +149,12 @@ export class ArtifactsModule {
|
|
|
110
149
|
XlsxArtifactViewerComponent,
|
|
111
150
|
DocxArtifactViewerComponent,
|
|
112
151
|
ImageArtifactViewerComponent,
|
|
152
|
+
VideoArtifactViewerComponent,
|
|
153
|
+
AudioArtifactViewerComponent,
|
|
154
|
+
// Inline preview components
|
|
155
|
+
ImageArtifactPreviewComponent,
|
|
156
|
+
VideoArtifactPreviewComponent,
|
|
157
|
+
AudioArtifactPreviewComponent,
|
|
113
158
|
],
|
|
114
159
|
imports: [
|
|
115
160
|
CommonModule,
|
|
@@ -146,6 +191,12 @@ export class ArtifactsModule {
|
|
|
146
191
|
XlsxArtifactViewerComponent,
|
|
147
192
|
DocxArtifactViewerComponent,
|
|
148
193
|
ImageArtifactViewerComponent,
|
|
194
|
+
VideoArtifactViewerComponent,
|
|
195
|
+
AudioArtifactViewerComponent,
|
|
196
|
+
// Inline preview components
|
|
197
|
+
ImageArtifactPreviewComponent,
|
|
198
|
+
VideoArtifactPreviewComponent,
|
|
199
|
+
AudioArtifactPreviewComponent,
|
|
149
200
|
],
|
|
150
201
|
providers: [
|
|
151
202
|
// Plugins are registered via @RegisterClass decorator on component classes, no providers needed
|
|
@@ -175,7 +226,13 @@ export class ArtifactsModule {
|
|
|
175
226
|
PdfArtifactViewerComponent,
|
|
176
227
|
XlsxArtifactViewerComponent,
|
|
177
228
|
DocxArtifactViewerComponent,
|
|
178
|
-
ImageArtifactViewerComponent
|
|
229
|
+
ImageArtifactViewerComponent,
|
|
230
|
+
VideoArtifactViewerComponent,
|
|
231
|
+
AudioArtifactViewerComponent,
|
|
232
|
+
// Inline preview components
|
|
233
|
+
ImageArtifactPreviewComponent,
|
|
234
|
+
VideoArtifactPreviewComponent,
|
|
235
|
+
AudioArtifactPreviewComponent], imports: [CommonModule,
|
|
179
236
|
FormsModule,
|
|
180
237
|
MarkdownModule,
|
|
181
238
|
CodeEditorModule,
|
|
@@ -206,5 +263,11 @@ export class ArtifactsModule {
|
|
|
206
263
|
PdfArtifactViewerComponent,
|
|
207
264
|
XlsxArtifactViewerComponent,
|
|
208
265
|
DocxArtifactViewerComponent,
|
|
209
|
-
ImageArtifactViewerComponent
|
|
266
|
+
ImageArtifactViewerComponent,
|
|
267
|
+
VideoArtifactViewerComponent,
|
|
268
|
+
AudioArtifactViewerComponent,
|
|
269
|
+
// Inline preview components
|
|
270
|
+
ImageArtifactPreviewComponent,
|
|
271
|
+
VideoArtifactPreviewComponent,
|
|
272
|
+
AudioArtifactPreviewComponent] }); })();
|
|
210
273
|
//# sourceMappingURL=artifacts.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifacts.module.js","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,oBAAoB;AACpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,aAAa,EAAyB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,sEAAsE;AACtE,+DAA+D;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,+EAA+E;AAC/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,+BAA+B,EAAE,MAAM,yDAAyD,CAAC;AAC1G,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,gCAAgC,EAAE,MAAM,0DAA0D,CAAC;AAC5G,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,uBAAuB,EAAE,MAAM,kDAAkD,CAAC;AAC3F,OAAO,EAAE,+BAA+B,EAAE,MAAM,kFAAkF,CAAC;AACnI,OAAO,EAAE,+BAA+B,EAAE,MAAM,kFAAkF,CAAC;AAEnI,sBAAsB;AACtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,oDAAoD,CAAC;AAChG,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,2BAA2B,EAAE,MAAM,qDAAqD,CAAC;AAClG,OAAO,EAAE,4BAA4B,EAAE,MAAM,sDAAsD,CAAC;AAEpG,+CAA+C;AAC/C,OAAO,EAAE,iCAAiC,EAAE,MAAM,oDAAoD,CAAC;AACvG,OAAO,EAAE,+BAA+B,EAAE,MAAM,iDAAiD,CAAC;AAClG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;AAC5F,OAAO,EAAE,4BAA4B,EAAE,MAAM,8CAA8C,CAAC;;;AAE5F;;;;;;GAMG;AA0EH,MAAM,OAAO,eAAe;IACN;IAApB,YAAoB,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;QAChD,sFAAsF;QACtF,+FAA+F;QAC/F;YACE,2BAA2B;YAC3B,2BAA2B;YAC3B,+BAA+B;YAC/B,2BAA2B;YAC3B,0BAA0B;YAC1B,gCAAgC;YAChC,2BAA2B;YAC3B,0BAA0B;YAC1B,2BAA2B;YAC3B,2BAA2B;YAC3B,4BAA4B;SAC7B,CAAC;QAEF,yFAAyF;QACzF,uFAAuF;QACvF,uFAAuF;QACvF,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;yGAtBU,eAAe;4DAAf,eAAe;gEA1CxB,YAAY;YACZ,WAAW;YACX,cAAc;YACd,gBAAgB;YAChB,aAAa;YACb,qBAAqB;YACrB,iBAAiB;YACjB,mBAAmB;YACnB,aAAa;YACb,eAAe;YACf,+BAA+B;YAC/B,YAAY;;iFA+BH,eAAe;cAzE3B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,8EAA8E;oBAC9E,iCAAiC;oBAEjC,gCAAgC;oBAChC,4BAA4B;oBAC5B,+BAA+B;oBAC/B,4BAA4B;oBAE5B,oBAAoB;oBACpB,2BAA2B;oBAC3B,2BAA2B;oBAC3B,+BAA+B;oBAC/B,2BAA2B;oBAC3B,0BAA0B;oBAC1B,gCAAgC;oBAChC,2BAA2B;oBAC3B,uBAAuB;oBAEvB,qEAAqE;oBACrE,+BAA+B;oBAE/B,kCAAkC;oBAClC,4BAA4B;oBAC5B,0BAA0B;oBAC1B,2BAA2B;oBAC3B,2BAA2B;oBAC3B,4BAA4B;iBAC7B;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,cAAc;oBACd,gBAAgB;oBAChB,aAAa;oBACb,qBAAqB;oBACrB,iBAAiB;oBACjB,mBAAmB;oBACnB,aAAa;oBACb,eAAe;oBACf,+BAA+B;oBAC/B,YAAY;iBACb;gBACD,OAAO,EAAE;oBACP,qCAAqC;oBACrC,iCAAiC;oBAEjC,uCAAuC;oBACvC,4BAA4B;oBAC5B,+BAA+B;oBAC/B,4BAA4B;oBAE5B,2BAA2B;oBAC3B,2BAA2B;oBAC3B,2BAA2B;oBAC3B,+BAA+B;oBAC/B,2BAA2B;oBAC3B,0BAA0B;oBAC1B,gCAAgC;oBAChC,2BAA2B;oBAE3B,kCAAkC;oBAClC,4BAA4B;oBAC5B,0BAA0B;oBAC1B,2BAA2B;oBAC3B,2BAA2B;oBAC3B,4BAA4B;iBAC7B;gBACD,SAAS,EAAE;gBACT,gGAAgG;iBACjG;aACF;;wFACY,eAAe;QAvExB,8EAA8E;QAC9E,iCAAiC;QAEjC,gCAAgC;QAChC,4BAA4B;QAC5B,+BAA+B;QAC/B,4BAA4B;QAE5B,oBAAoB;QACpB,2BAA2B;QAC3B,2BAA2B;QAC3B,+BAA+B;QAC/B,2BAA2B;QAC3B,0BAA0B;QAC1B,gCAAgC;QAChC,2BAA2B;QAC3B,uBAAuB;QAEvB,qEAAqE;QACrE,+BAA+B;QAE/B,kCAAkC;QAClC,4BAA4B;QAC5B,0BAA0B;QAC1B,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B,aAG5B,YAAY;QACZ,WAAW;QACX,cAAc;QACd,gBAAgB;QAChB,aAAa;QACb,qBAAqB;QACrB,iBAAiB;QACjB,mBAAmB;QACnB,aAAa;QACb,eAAe;QACf,+BAA+B;QAC/B,YAAY;QAGZ,qCAAqC;QACrC,iCAAiC;QAEjC,uCAAuC;QACvC,4BAA4B;QAC5B,+BAA+B;QAC/B,4BAA4B;QAE5B,2BAA2B;QAC3B,2BAA2B;QAC3B,2BAA2B;QAC3B,+BAA+B;QAC/B,2BAA2B;QAC3B,0BAA0B;QAC1B,gCAAgC;QAChC,2BAA2B;QAE3B,kCAAkC;QAClC,4BAA4B;QAC5B,0BAA0B;QAC1B,2BAA2B;QAC3B,2BAA2B;QAC3B,4BAA4B","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MarkdownModule } from '@memberjunction/ng-markdown';\nimport { AgGridModule } from 'ag-grid-angular';\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// BaseFormsModule supplies `<mj-interactive-form>` for the form-aware\n// component-artifact viewer branch (componentRole === 'form').\nimport { BaseFormsModule } from '@memberjunction/ng-base-forms';\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// File viewer plugins\nimport { FileArtifactToolbarComponent } from './components/file-artifact-toolbar.component';\nimport { PdfArtifactViewerComponent } from './components/plugins/pdf-artifact-viewer.component';\nimport { XlsxArtifactViewerComponent } from './components/plugins/xlsx-artifact-viewer.component';\nimport { DocxArtifactViewerComponent } from './components/plugins/docx-artifact-viewer.component';\nimport { ImageArtifactViewerComponent } from './components/plugins/image-artifact-viewer.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 // File viewer toolbar and plugins\n FileArtifactToolbarComponent,\n PdfArtifactViewerComponent,\n XlsxArtifactViewerComponent,\n DocxArtifactViewerComponent,\n ImageArtifactViewerComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n MarkdownModule,\n CodeEditorModule,\n MJReactModule,\n MJNotificationsModule,\n QueryViewerModule,\n SharedGenericModule,\n NgTreesModule,\n BaseFormsModule,\n ComponentFeedbackPanelComponent,\n AgGridModule,\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 // File viewer toolbar and plugins\n FileArtifactToolbarComponent,\n PdfArtifactViewerComponent,\n XlsxArtifactViewerComponent,\n DocxArtifactViewerComponent,\n ImageArtifactViewerComponent,\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 PdfArtifactViewerComponent,\n XlsxArtifactViewerComponent,\n DocxArtifactViewerComponent,\n ImageArtifactViewerComponent,\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"]}
|
|
1
|
+
{"version":3,"file":"artifacts.module.js","sourceRoot":"","sources":["../../src/lib/artifacts.module.ts"],"names":[],"mappings":"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","sourcesContent":["import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { MarkdownModule } from '@memberjunction/ng-markdown';\nimport { AgGridModule } from 'ag-grid-angular';\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// BaseFormsModule supplies `<mj-interactive-form>` for the form-aware\n// component-artifact viewer branch (componentRole === 'form').\nimport { BaseFormsModule } from '@memberjunction/ng-base-forms';\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// File viewer plugins\nimport { FileArtifactToolbarComponent } from './components/file-artifact-toolbar.component';\nimport { PdfArtifactViewerComponent } from './components/plugins/pdf-artifact-viewer.component';\nimport { XlsxArtifactViewerComponent } from './components/plugins/xlsx-artifact-viewer.component';\nimport { DocxArtifactViewerComponent } from './components/plugins/docx-artifact-viewer.component';\nimport { ImageArtifactViewerComponent } from './components/plugins/image-artifact-viewer.component';\nimport { VideoArtifactViewerComponent } from './components/plugins/video-artifact-viewer.component';\nimport { AudioArtifactViewerComponent } from './components/plugins/audio-artifact-viewer.component';\n\n// Inline preview components (lightweight, rendered inside conversation message cards)\nimport { ImageArtifactPreviewComponent } from './components/previews/image-artifact-preview.component';\nimport { VideoArtifactPreviewComponent } from './components/previews/video-artifact-preview.component';\nimport { AudioArtifactPreviewComponent } from './components/previews/audio-artifact-preview.component';\nimport { MJGlobal } from '@memberjunction/global';\nimport { BaseArtifactViewerPluginComponent } from './components/base-artifact-viewer.component';\nimport { IArtifactViewerPluginPreviewStatics } from './interfaces/artifact-viewer-plugin.interface';\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 // File viewer toolbar and plugins\n FileArtifactToolbarComponent,\n PdfArtifactViewerComponent,\n XlsxArtifactViewerComponent,\n DocxArtifactViewerComponent,\n ImageArtifactViewerComponent,\n VideoArtifactViewerComponent,\n AudioArtifactViewerComponent,\n\n // Inline preview components\n ImageArtifactPreviewComponent,\n VideoArtifactPreviewComponent,\n AudioArtifactPreviewComponent,\n ],\n imports: [\n CommonModule,\n FormsModule,\n MarkdownModule,\n CodeEditorModule,\n MJReactModule,\n MJNotificationsModule,\n QueryViewerModule,\n SharedGenericModule,\n NgTreesModule,\n BaseFormsModule,\n ComponentFeedbackPanelComponent,\n AgGridModule,\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 // File viewer toolbar and plugins\n FileArtifactToolbarComponent,\n PdfArtifactViewerComponent,\n XlsxArtifactViewerComponent,\n DocxArtifactViewerComponent,\n ImageArtifactViewerComponent,\n VideoArtifactViewerComponent,\n AudioArtifactViewerComponent,\n\n // Inline preview components\n ImageArtifactPreviewComponent,\n VideoArtifactPreviewComponent,\n AudioArtifactPreviewComponent,\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 PdfArtifactViewerComponent,\n XlsxArtifactViewerComponent,\n DocxArtifactViewerComponent,\n ImageArtifactViewerComponent,\n VideoArtifactViewerComponent,\n AudioArtifactViewerComponent,\n // Preview components are referenced via plugins' previewComponentType — list them here too\n // so the bundler can't tree-shake the dynamically-rendered preview classes.\n ImageArtifactPreviewComponent,\n VideoArtifactPreviewComponent,\n AudioArtifactPreviewComponent,\n ];\n\n // Registration-time guard: every registered artifact-viewer plugin must expose at least one of\n // componentType / previewComponentType. `componentType` is required by the interface (so this is\n // trivially satisfied today); the guard protects against future loosening of that invariant.\n ArtifactsModule.warnOnPluginsWithoutRenderTarget();\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 /**\n * Logs a warning for any registered artifact-viewer plugin that has NO render target at all —\n * i.e. neither an implicit full viewer (the registered SubClass itself, which is the\n * `componentType`) nor an explicit `previewComponentType`. Today every registration is an\n * Angular component class, so the SubClass is always present and this never fires; the guard\n * exists to catch regressions if the render-target invariant is ever loosened.\n */\n private static warnOnPluginsWithoutRenderTarget(): void {\n const registrations = MJGlobal.Instance.ClassFactory.GetAllRegistrations(BaseArtifactViewerPluginComponent);\n for (const reg of registrations) {\n const subClass = reg.SubClass as\n | (Type<BaseArtifactViewerPluginComponent> & IArtifactViewerPluginPreviewStatics)\n | undefined;\n const hasFullViewer = !!subClass; // the registered class IS the componentType\n // Read the STATIC preview contract off the constructor — never instantiate (these are Angular\n // components with DI constructors; a bare `new` outside an injection context throws).\n const hasPreview = !!subClass?.PreviewComponentType;\n if (!hasFullViewer && !hasPreview) {\n console.warn(\n `ArtifactsModule: viewer plugin \"${reg.Key}\" has neither a componentType nor a previewComponentType — it can render nothing.`,\n );\n }\n }\n }\n}\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy, Type } from '@angular/core';
|
|
2
2
|
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
3
|
import { MJArtifactEntity, MJArtifactVersionEntity } from '@memberjunction/core-entities';
|
|
4
4
|
import { UserInfo } from '@memberjunction/core';
|
|
5
5
|
import { ArtifactIconService } from '../services/artifact-icon.service';
|
|
6
|
+
import { IArtifactPreviewComponent } from '../interfaces/artifact-viewer-plugin.interface';
|
|
6
7
|
import * as i0 from "@angular/core";
|
|
7
8
|
/**
|
|
8
9
|
* Artifact message card component - displays a simple info bar for artifacts in conversation messages.
|
|
@@ -24,9 +25,24 @@ export declare class ArtifactMessageCardComponent extends BaseAngularComponent i
|
|
|
24
25
|
_currentVersion: MJArtifactVersionEntity | null;
|
|
25
26
|
loading: boolean;
|
|
26
27
|
error: boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Resolved inline-preview component for this artifact's type/contentType, or null when no plugin
|
|
30
|
+
* exposes a matching preview (the card then falls back to its existing info-bar box). Resolved
|
|
31
|
+
* SYNCHRONOUSLY up front (before the box renders) to avoid a flash / ExpressionChanged error.
|
|
32
|
+
*/
|
|
33
|
+
previewComponentType: Type<IArtifactPreviewComponent> | null;
|
|
34
|
+
/** Inputs forwarded to the dynamically rendered preview component via *ngComponentOutlet. */
|
|
35
|
+
previewInputs: Record<string, unknown>;
|
|
27
36
|
private destroy$;
|
|
37
|
+
private readonly previewResolver;
|
|
28
38
|
constructor(artifactIconService: ArtifactIconService);
|
|
29
39
|
ngOnInit(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Pick the inline-preview component for this artifact, INDEPENDENTLY of the full viewer.
|
|
42
|
+
* Type name comes from `artifact.Type`; content type from `artifactVersion.MimeType`.
|
|
43
|
+
* No match → previewComponentType stays null → existing info-bar box renders unchanged.
|
|
44
|
+
*/
|
|
45
|
+
private resolvePreview;
|
|
30
46
|
get artifactEntity(): MJArtifactEntity | null;
|
|
31
47
|
get currentVersion(): MJArtifactVersionEntity | null;
|
|
32
48
|
ngOnDestroy(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"artifact-message-card.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/artifact-message-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"artifact-message-card.component.d.ts","sourceRoot":"","sources":["../../../src/lib/components/artifact-message-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAU,MAAM,eAAe,CAAC;AACxG,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAW,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gDAAgD,CAAC;;AAE3F;;;GAGG;AACH,qBA0Oa,4BAA6B,SAAQ,oBAAqB,YAAW,MAAM,EAAE,SAAS;IA0BrF,OAAO,CAAC,mBAAmB;IAzB9B,UAAU,EAAG,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAG,QAAQ,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,eAAe,CAAC,EAAE,uBAAuB,CAAC;IACzC,eAAe;gBAA6B,MAAM;kBAAY,gBAAgB;kBAAY,uBAAuB;OAAK;IAEzH,SAAS,EAAE,gBAAgB,GAAG,IAAI,CAAQ;IAC1C,eAAe,EAAE,uBAAuB,GAAG,IAAI,CAAQ;IACvD,OAAO,UAAQ;IACf,KAAK,UAAS;IAErB;;;;OAIG;IACI,oBAAoB,EAAE,IAAI,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAQ;IAE3E,6FAA6F;IACtF,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM;IAEnD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;gBAEtD,mBAAmB,EAAE,mBAAmB;IAGtD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAe/B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAetB,IAAW,cAAc,IAAI,gBAAgB,GAAG,IAAI,CAEnD;IAED,IAAW,cAAc,IAAI,uBAAuB,GAAG,IAAI,CAE1D;IAED,WAAW,IAAI,IAAI;YAKL,YAAY;YAoCZ,kBAAkB;IAyBhC;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,CAK/B;IAED;;OAEG;IACH,IAAW,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAK7C;IAED,IAAW,cAAc,IAAI,OAAO,CAKnC;IAED;;;OAGG;IACI,eAAe,IAAI,MAAM;IAKzB,iBAAiB,IAAI,MAAM;IAa3B,YAAY,IAAI,IAAI;yCA3LhB,4BAA4B;2CAA5B,4BAA4B;CAgMxC"}
|
|
@@ -1,33 +1,72 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter } from '@angular/core';
|
|
1
|
+
import { Component, Input, Output, EventEmitter, inject } from '@angular/core';
|
|
2
2
|
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
|
|
3
3
|
import { RunView } from '@memberjunction/core';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
|
+
import { ArtifactPreviewResolverService } from '../services/artifact-preview-resolver.service';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
import * as i1 from "../services/artifact-icon.service";
|
|
7
8
|
import * as i2 from "@angular/common";
|
|
8
9
|
function ArtifactMessageCardComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
9
10
|
i0.ɵɵelementStart(0, "div", 1);
|
|
10
|
-
i0.ɵɵelement(1, "div",
|
|
11
|
+
i0.ɵɵelement(1, "div", 3)(2, "div", 4);
|
|
11
12
|
i0.ɵɵelementEnd();
|
|
12
13
|
} }
|
|
13
14
|
function ArtifactMessageCardComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
14
15
|
i0.ɵɵelementStart(0, "div", 2);
|
|
15
|
-
i0.ɵɵelement(1, "i",
|
|
16
|
+
i0.ɵɵelement(1, "i", 5);
|
|
16
17
|
i0.ɵɵelementStart(2, "span");
|
|
17
18
|
i0.ɵɵtext(3, "Failed to load artifact");
|
|
18
19
|
i0.ɵɵelementEnd()();
|
|
19
20
|
} }
|
|
20
|
-
function
|
|
21
|
+
function ArtifactMessageCardComponent_Conditional_3_Conditional_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
22
|
+
i0.ɵɵelementContainer(0);
|
|
23
|
+
} }
|
|
24
|
+
function ArtifactMessageCardComponent_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
21
25
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
22
|
-
i0.ɵɵelementStart(0, "div",
|
|
23
|
-
i0.ɵɵlistener("click", function
|
|
24
|
-
i0.ɵɵ
|
|
25
|
-
i0.ɵɵ
|
|
26
|
+
i0.ɵɵelementStart(0, "div", 8);
|
|
27
|
+
i0.ɵɵlistener("click", function ArtifactMessageCardComponent_Conditional_3_Conditional_0_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullView()); });
|
|
28
|
+
i0.ɵɵtemplate(1, ArtifactMessageCardComponent_Conditional_3_Conditional_0_ng_container_1_Template, 1, 0, "ng-container", 9);
|
|
29
|
+
i0.ɵɵelementStart(2, "div", 10);
|
|
30
|
+
i0.ɵɵelement(3, "i", 11);
|
|
31
|
+
i0.ɵɵelementStart(4, "span", 12);
|
|
32
|
+
i0.ɵɵtext(5);
|
|
33
|
+
i0.ɵɵelementEnd();
|
|
34
|
+
i0.ɵɵelementStart(6, "span", 13);
|
|
35
|
+
i0.ɵɵtext(7);
|
|
36
|
+
i0.ɵɵelementEnd();
|
|
37
|
+
i0.ɵɵelementStart(8, "span", 14);
|
|
38
|
+
i0.ɵɵtext(9);
|
|
39
|
+
i0.ɵɵelementEnd();
|
|
40
|
+
i0.ɵɵelementStart(10, "span", 15);
|
|
41
|
+
i0.ɵɵelement(11, "i", 16);
|
|
42
|
+
i0.ɵɵelementEnd()()();
|
|
43
|
+
} if (rf & 2) {
|
|
44
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
45
|
+
i0.ɵɵproperty("title", ctx_r1.displayName);
|
|
46
|
+
i0.ɵɵadvance();
|
|
47
|
+
i0.ɵɵproperty("ngComponentOutlet", ctx_r1.previewComponentType)("ngComponentOutletInputs", ctx_r1.previewInputs);
|
|
48
|
+
i0.ɵɵadvance(2);
|
|
49
|
+
i0.ɵɵproperty("ngClass", ctx_r1.getArtifactIcon());
|
|
50
|
+
i0.ɵɵadvance(2);
|
|
51
|
+
i0.ɵɵtextInterpolate(ctx_r1.displayName);
|
|
52
|
+
i0.ɵɵadvance();
|
|
53
|
+
i0.ɵɵstyleProp("background", ctx_r1.getTypeBadgeColor());
|
|
54
|
+
i0.ɵɵadvance();
|
|
55
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.artifact.Type, " ");
|
|
56
|
+
i0.ɵɵadvance(2);
|
|
57
|
+
i0.ɵɵtextInterpolate1("v", ctx_r1.currentVersion.VersionNumber || 1);
|
|
58
|
+
} }
|
|
59
|
+
function ArtifactMessageCardComponent_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
60
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
61
|
+
i0.ɵɵelementStart(0, "div", 17);
|
|
62
|
+
i0.ɵɵlistener("click", function ArtifactMessageCardComponent_Conditional_3_Conditional_1_Template_div_click_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openFullView()); });
|
|
63
|
+
i0.ɵɵelementStart(1, "div", 18);
|
|
64
|
+
i0.ɵɵelement(2, "i", 11);
|
|
26
65
|
i0.ɵɵelementEnd();
|
|
27
|
-
i0.ɵɵelementStart(3, "div",
|
|
66
|
+
i0.ɵɵelementStart(3, "div", 19)(4, "span", 12);
|
|
28
67
|
i0.ɵɵtext(5);
|
|
29
68
|
i0.ɵɵelementEnd();
|
|
30
|
-
i0.ɵɵelementStart(6, "div",
|
|
69
|
+
i0.ɵɵelementStart(6, "div", 20)(7, "span", 13);
|
|
31
70
|
i0.ɵɵtext(8);
|
|
32
71
|
i0.ɵɵelementEnd();
|
|
33
72
|
i0.ɵɵelementStart(9, "span", 14);
|
|
@@ -37,7 +76,7 @@ function ArtifactMessageCardComponent_Conditional_3_Template(rf, ctx) { if (rf &
|
|
|
37
76
|
i0.ɵɵelement(12, "i", 16);
|
|
38
77
|
i0.ɵɵelementEnd()();
|
|
39
78
|
} if (rf & 2) {
|
|
40
|
-
const ctx_r1 = i0.ɵɵnextContext();
|
|
79
|
+
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
41
80
|
i0.ɵɵadvance(2);
|
|
42
81
|
i0.ɵɵproperty("ngClass", ctx_r1.getArtifactIcon());
|
|
43
82
|
i0.ɵɵadvance(3);
|
|
@@ -49,6 +88,12 @@ function ArtifactMessageCardComponent_Conditional_3_Template(rf, ctx) { if (rf &
|
|
|
49
88
|
i0.ɵɵadvance(2);
|
|
50
89
|
i0.ɵɵtextInterpolate1("v", (ctx_r1.currentVersion == null ? null : ctx_r1.currentVersion.VersionNumber) || 1);
|
|
51
90
|
} }
|
|
91
|
+
function ArtifactMessageCardComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
92
|
+
i0.ɵɵconditionalCreate(0, ArtifactMessageCardComponent_Conditional_3_Conditional_0_Template, 12, 9, "div", 6)(1, ArtifactMessageCardComponent_Conditional_3_Conditional_1_Template, 13, 6, "div", 7);
|
|
93
|
+
} if (rf & 2) {
|
|
94
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
95
|
+
i0.ɵɵconditional(ctx_r1.previewComponentType && ctx_r1.currentVersion ? 0 : 1);
|
|
96
|
+
} }
|
|
52
97
|
/**
|
|
53
98
|
* Artifact message card component - displays a simple info bar for artifacts in conversation messages.
|
|
54
99
|
* Shows artifact icon, name, type badge, and version. Click to open full artifact viewer.
|
|
@@ -65,7 +110,16 @@ export class ArtifactMessageCardComponent extends BaseAngularComponent {
|
|
|
65
110
|
_currentVersion = null;
|
|
66
111
|
loading = true;
|
|
67
112
|
error = false;
|
|
113
|
+
/**
|
|
114
|
+
* Resolved inline-preview component for this artifact's type/contentType, or null when no plugin
|
|
115
|
+
* exposes a matching preview (the card then falls back to its existing info-bar box). Resolved
|
|
116
|
+
* SYNCHRONOUSLY up front (before the box renders) to avoid a flash / ExpressionChanged error.
|
|
117
|
+
*/
|
|
118
|
+
previewComponentType = null;
|
|
119
|
+
/** Inputs forwarded to the dynamically rendered preview component via *ngComponentOutlet. */
|
|
120
|
+
previewInputs = {};
|
|
68
121
|
destroy$ = new Subject();
|
|
122
|
+
previewResolver = inject(ArtifactPreviewResolverService);
|
|
69
123
|
constructor(artifactIconService) {
|
|
70
124
|
super();
|
|
71
125
|
this.artifactIconService = artifactIconService;
|
|
@@ -81,6 +135,24 @@ export class ArtifactMessageCardComponent extends BaseAngularComponent {
|
|
|
81
135
|
// Otherwise load from database
|
|
82
136
|
await this.loadArtifact();
|
|
83
137
|
}
|
|
138
|
+
// Resolve the inline preview once artifact + version are known. Synchronous so the correct
|
|
139
|
+
// branch (preview vs. box) is decided before the template renders this state.
|
|
140
|
+
this.resolvePreview();
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Pick the inline-preview component for this artifact, INDEPENDENTLY of the full viewer.
|
|
144
|
+
* Type name comes from `artifact.Type`; content type from `artifactVersion.MimeType`.
|
|
145
|
+
* No match → previewComponentType stays null → existing info-bar box renders unchanged.
|
|
146
|
+
*/
|
|
147
|
+
resolvePreview() {
|
|
148
|
+
if (!this._artifact || !this._currentVersion) {
|
|
149
|
+
this.previewComponentType = null;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
this.previewComponentType = this.previewResolver.resolvePreviewComponent(this._artifact.Type, this._currentVersion.MimeType);
|
|
153
|
+
if (this.previewComponentType) {
|
|
154
|
+
this.previewInputs = { artifactVersion: this._currentVersion };
|
|
155
|
+
}
|
|
84
156
|
}
|
|
85
157
|
// Getters to access the internal properties
|
|
86
158
|
get artifactEntity() {
|
|
@@ -204,15 +276,15 @@ export class ArtifactMessageCardComponent extends BaseAngularComponent {
|
|
|
204
276
|
}
|
|
205
277
|
}
|
|
206
278
|
static ɵfac = function ArtifactMessageCardComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ArtifactMessageCardComponent)(i0.ɵɵdirectiveInject(i1.ArtifactIconService)); };
|
|
207
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArtifactMessageCardComponent, selectors: [["mj-artifact-message-card"]], inputs: { artifactId: "artifactId", versionNumber: "versionNumber", currentUser: "currentUser", artifact: "artifact", artifactVersion: "artifactVersion" }, outputs: { actionPerformed: "actionPerformed" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 5, consts: [[1, "artifact-message-card"], [1, "artifact-skeleton"], [1, "artifact-error"], [1, "
|
|
279
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ArtifactMessageCardComponent, selectors: [["mj-artifact-message-card"]], inputs: { artifactId: "artifactId", versionNumber: "versionNumber", currentUser: "currentUser", artifact: "artifact", artifactVersion: "artifactVersion" }, outputs: { actionPerformed: "actionPerformed" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 4, vars: 5, consts: [[1, "artifact-message-card"], [1, "artifact-skeleton"], [1, "artifact-error"], [1, "skeleton-icon"], [1, "skeleton-text"], [1, "fa-solid", "fa-exclamation-circle"], [1, "artifact-preview-wrapper", 3, "title"], [1, "artifact-info-bar"], [1, "artifact-preview-wrapper", 3, "click", "title"], [4, "ngComponentOutlet", "ngComponentOutletInputs"], [1, "artifact-preview-caption"], [1, "fa-solid", 3, "ngClass"], [1, "artifact-name"], [1, "artifact-type-badge"], [1, "artifact-version"], [1, "open-icon"], [1, "fa-solid", "fa-arrow-up-right-from-square"], [1, "artifact-info-bar", 3, "click"], [1, "artifact-icon"], [1, "artifact-info"], [1, "artifact-meta"]], template: function ArtifactMessageCardComponent_Template(rf, ctx) { if (rf & 1) {
|
|
208
280
|
i0.ɵɵelementStart(0, "div", 0);
|
|
209
|
-
i0.ɵɵconditionalCreate(1, ArtifactMessageCardComponent_Conditional_1_Template, 3, 0, "div", 1)(2, ArtifactMessageCardComponent_Conditional_2_Template, 4, 0, "div", 2)(3, ArtifactMessageCardComponent_Conditional_3_Template,
|
|
281
|
+
i0.ɵɵconditionalCreate(1, ArtifactMessageCardComponent_Conditional_1_Template, 3, 0, "div", 1)(2, ArtifactMessageCardComponent_Conditional_2_Template, 4, 0, "div", 2)(3, ArtifactMessageCardComponent_Conditional_3_Template, 2, 1);
|
|
210
282
|
i0.ɵɵelementEnd();
|
|
211
283
|
} if (rf & 2) {
|
|
212
284
|
i0.ɵɵclassProp("loading", ctx.loading)("error", ctx.error);
|
|
213
285
|
i0.ɵɵadvance();
|
|
214
286
|
i0.ɵɵconditional(ctx.loading ? 1 : ctx.error ? 2 : ctx.artifact ? 3 : -1);
|
|
215
|
-
} }, dependencies: [i2.NgClass], styles: [".artifact-message-card[_ngcontent-%COMP%] {\n margin: 12px 0;\n }\n\n .artifact-skeleton[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n }\n\n .skeleton-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 6px;\n animation: _ngcontent-%COMP%_pulse 1.5s ease-in-out infinite;\n }\n\n .skeleton-text[_ngcontent-%COMP%] {\n flex: 1;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 4px;\n animation: _ngcontent-%COMP%_pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .artifact-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .artifact-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .artifact-info-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 200ms ease;\n }\n\n .artifact-info-bar[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .artifact-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n flex-shrink: 0;\n color: var(--mj-text-muted);\n font-size: 16px;\n }\n\n .artifact-info[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .artifact-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artifact-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .artifact-type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.5px;\n border-radius: 3px;\n text-transform: uppercase;\n }\n\n .artifact-version[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n\n .open-icon[_ngcontent-%COMP%] {\n flex-shrink: 0;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: color 200ms ease;\n }\n\n .artifact-info-bar[_ngcontent-%COMP%]:hover .open-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }"] });
|
|
287
|
+
} }, dependencies: [i2.NgClass, i2.NgComponentOutlet], styles: [".artifact-message-card[_ngcontent-%COMP%] {\n margin: 12px 0;\n }\n\n .artifact-skeleton[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n }\n\n .skeleton-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 6px;\n animation: _ngcontent-%COMP%_pulse 1.5s ease-in-out infinite;\n }\n\n .skeleton-text[_ngcontent-%COMP%] {\n flex: 1;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 4px;\n animation: _ngcontent-%COMP%_pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .artifact-error[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .artifact-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 16px;\n }\n\n .artifact-info-bar[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 200ms ease;\n }\n\n .artifact-info-bar[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .artifact-icon[_ngcontent-%COMP%] {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n flex-shrink: 0;\n color: var(--mj-text-muted);\n font-size: 16px;\n }\n\n .artifact-info[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .artifact-name[_ngcontent-%COMP%] {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artifact-meta[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .artifact-type-badge[_ngcontent-%COMP%] {\n display: inline-block;\n padding: 2px 8px;\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.5px;\n border-radius: 3px;\n text-transform: uppercase;\n }\n\n .artifact-version[_ngcontent-%COMP%] {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n\n .open-icon[_ngcontent-%COMP%] {\n flex-shrink: 0;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: color 200ms ease;\n }\n\n .artifact-info-bar[_ngcontent-%COMP%]:hover .open-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }\n\n .artifact-preview-wrapper[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 200ms ease;\n }\n\n .artifact-preview-wrapper[_ngcontent-%COMP%]:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .artifact-preview-caption[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n color: var(--mj-text-muted);\n font-size: 12px;\n }\n\n .artifact-preview-caption[_ngcontent-%COMP%] .artifact-name[_ngcontent-%COMP%] {\n flex: 1;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artifact-preview-caption[_ngcontent-%COMP%] .open-icon[_ngcontent-%COMP%] {\n color: var(--mj-text-disabled);\n transition: color 200ms ease;\n }\n\n .artifact-preview-wrapper[_ngcontent-%COMP%]:hover .artifact-preview-caption[_ngcontent-%COMP%] .open-icon[_ngcontent-%COMP%] {\n color: var(--mj-brand-primary);\n }"] });
|
|
216
288
|
}
|
|
217
289
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ArtifactMessageCardComponent, [{
|
|
218
290
|
type: Component,
|
|
@@ -229,26 +301,45 @@ export class ArtifactMessageCardComponent extends BaseAngularComponent {
|
|
|
229
301
|
<span>Failed to load artifact</span>
|
|
230
302
|
</div>
|
|
231
303
|
} @else if (artifact) {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
304
|
+
@if (previewComponentType && currentVersion) {
|
|
305
|
+
<!-- Inline preview: a clickable wrapper still opens the full right-side viewer.
|
|
306
|
+
Media controls inside the preview (video/audio) stop their own click propagation. -->
|
|
307
|
+
<div class="artifact-preview-wrapper" (click)="openFullView()" [title]="displayName">
|
|
308
|
+
<ng-container
|
|
309
|
+
*ngComponentOutlet="previewComponentType; inputs: previewInputs"
|
|
310
|
+
></ng-container>
|
|
311
|
+
<div class="artifact-preview-caption">
|
|
312
|
+
<i class="fa-solid" [ngClass]="getArtifactIcon()"></i>
|
|
313
|
+
<span class="artifact-name">{{ displayName }}</span>
|
|
239
314
|
<span class="artifact-type-badge" [style.background]="getTypeBadgeColor()">
|
|
240
315
|
{{ artifact.Type }}
|
|
241
316
|
</span>
|
|
242
|
-
<span class="artifact-version">v{{ currentVersion
|
|
317
|
+
<span class="artifact-version">v{{ currentVersion.VersionNumber || 1 }}</span>
|
|
318
|
+
<span class="open-icon"><i class="fa-solid fa-arrow-up-right-from-square"></i></span>
|
|
243
319
|
</div>
|
|
244
320
|
</div>
|
|
245
|
-
|
|
246
|
-
|
|
321
|
+
} @else {
|
|
322
|
+
<div class="artifact-info-bar" (click)="openFullView()">
|
|
323
|
+
<div class="artifact-icon">
|
|
324
|
+
<i class="fa-solid" [ngClass]="getArtifactIcon()"></i>
|
|
325
|
+
</div>
|
|
326
|
+
<div class="artifact-info">
|
|
327
|
+
<span class="artifact-name">{{ displayName }}</span>
|
|
328
|
+
<div class="artifact-meta">
|
|
329
|
+
<span class="artifact-type-badge" [style.background]="getTypeBadgeColor()">
|
|
330
|
+
{{ artifact.Type }}
|
|
331
|
+
</span>
|
|
332
|
+
<span class="artifact-version">v{{ currentVersion?.VersionNumber || 1 }}</span>
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
<div class="open-icon">
|
|
336
|
+
<i class="fa-solid fa-arrow-up-right-from-square"></i>
|
|
337
|
+
</div>
|
|
247
338
|
</div>
|
|
248
|
-
|
|
339
|
+
}
|
|
249
340
|
}
|
|
250
341
|
</div>
|
|
251
|
-
`, styles: ["\n .artifact-message-card {\n margin: 12px 0;\n }\n\n .artifact-skeleton {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n }\n\n .skeleton-icon {\n width: 32px;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 6px;\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n .skeleton-text {\n flex: 1;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 4px;\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .artifact-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .artifact-error i {\n font-size: 16px;\n }\n\n .artifact-info-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 200ms ease;\n }\n\n .artifact-info-bar:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .artifact-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n flex-shrink: 0;\n color: var(--mj-text-muted);\n font-size: 16px;\n }\n\n .artifact-info {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .artifact-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artifact-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .artifact-type-badge {\n display: inline-block;\n padding: 2px 8px;\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.5px;\n border-radius: 3px;\n text-transform: uppercase;\n }\n\n .artifact-version {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n\n .open-icon {\n flex-shrink: 0;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: color 200ms ease;\n }\n\n .artifact-info-bar:hover .open-icon {\n color: var(--mj-brand-primary);\n }\n "] }]
|
|
342
|
+
`, styles: ["\n .artifact-message-card {\n margin: 12px 0;\n }\n\n .artifact-skeleton {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface-sunken);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n }\n\n .skeleton-icon {\n width: 32px;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 6px;\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n .skeleton-text {\n flex: 1;\n height: 32px;\n background: var(--mj-border-default);\n border-radius: 4px;\n animation: pulse 1.5s ease-in-out infinite;\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .artifact-error {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 12px 16px;\n background: color-mix(in srgb, var(--mj-status-error) 15%, var(--mj-bg-surface));\n border: 1px solid color-mix(in srgb, var(--mj-status-error) 30%, var(--mj-bg-surface));\n border-radius: 6px;\n color: var(--mj-status-error);\n font-size: 14px;\n }\n\n .artifact-error i {\n font-size: 16px;\n }\n\n .artifact-info-bar {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 16px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 200ms ease;\n }\n\n .artifact-info-bar:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .artifact-icon {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--mj-bg-surface-sunken);\n border-radius: 6px;\n flex-shrink: 0;\n color: var(--mj-text-muted);\n font-size: 16px;\n }\n\n .artifact-info {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 4px;\n min-width: 0;\n }\n\n .artifact-name {\n font-size: 14px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artifact-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .artifact-type-badge {\n display: inline-block;\n padding: 2px 8px;\n color: var(--mj-text-inverse);\n font-size: 10px;\n font-weight: 600;\n letter-spacing: 0.5px;\n border-radius: 3px;\n text-transform: uppercase;\n }\n\n .artifact-version {\n font-size: 11px;\n color: var(--mj-text-muted);\n font-weight: 500;\n }\n\n .open-icon {\n flex-shrink: 0;\n color: var(--mj-text-disabled);\n font-size: 14px;\n transition: color 200ms ease;\n }\n\n .artifact-info-bar:hover .open-icon {\n color: var(--mj-brand-primary);\n }\n\n .artifact-preview-wrapper {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n background: var(--mj-bg-surface);\n border: 1px solid var(--mj-border-default);\n border-radius: 6px;\n cursor: pointer;\n transition: all 200ms ease;\n }\n\n .artifact-preview-wrapper:hover {\n border-color: var(--mj-brand-primary);\n box-shadow: var(--mj-shadow-sm);\n }\n\n .artifact-preview-caption {\n display: flex;\n align-items: center;\n gap: 8px;\n min-width: 0;\n color: var(--mj-text-muted);\n font-size: 12px;\n }\n\n .artifact-preview-caption .artifact-name {\n flex: 1;\n font-size: 13px;\n font-weight: 600;\n color: var(--mj-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .artifact-preview-caption .open-icon {\n color: var(--mj-text-disabled);\n transition: color 200ms ease;\n }\n\n .artifact-preview-wrapper:hover .artifact-preview-caption .open-icon {\n color: var(--mj-brand-primary);\n }\n "] }]
|
|
252
343
|
}], () => [{ type: i1.ArtifactIconService }], { artifactId: [{
|
|
253
344
|
type: Input
|
|
254
345
|
}], versionNumber: [{
|
|
@@ -262,5 +353,5 @@ export class ArtifactMessageCardComponent extends BaseAngularComponent {
|
|
|
262
353
|
}], actionPerformed: [{
|
|
263
354
|
type: Output
|
|
264
355
|
}] }); })();
|
|
265
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ArtifactMessageCardComponent, { className: "ArtifactMessageCardComponent", filePath: "src/lib/components/artifact-message-card.component.ts", lineNumber:
|
|
356
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ArtifactMessageCardComponent, { className: "ArtifactMessageCardComponent", filePath: "src/lib/components/artifact-message-card.component.ts", lineNumber: 248 }); })();
|
|
266
357
|
//# sourceMappingURL=artifact-message-card.component.js.map
|