@memberjunction/ng-artifacts 2.108.0 → 2.110.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.
@@ -4,25 +4,15 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { Component, ViewChild } from '@angular/core';
7
+ import { Component, ViewChild, Output, EventEmitter } from '@angular/core';
8
8
  import { RegisterClass, SafeJSONParse } from '@memberjunction/global';
9
9
  import { BaseArtifactViewerPluginComponent } from '../base-artifact-viewer.component';
10
10
  import { BuildComponentCompleteCode } from '@memberjunction/interactive-component-types';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@memberjunction/ng-react";
13
13
  import * as i2 from "@angular/common";
14
- import * as i3 from "@angular/forms";
15
- import * as i4 from "@memberjunction/ng-code-editor";
16
14
  const _c0 = ["reactComponent"];
17
- function ComponentArtifactViewerComponent_Conditional_8_Template(rf, ctx) { if (rf & 1) {
18
- const _r1 = i0.ɵɵgetCurrentView();
19
- i0.ɵɵelementStart(0, "button", 10);
20
- i0.ɵɵlistener("click", function ComponentArtifactViewerComponent_Conditional_8_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onCopy()); });
21
- i0.ɵɵelement(1, "i", 11);
22
- i0.ɵɵtext(2, " Copy ");
23
- i0.ɵɵelementEnd();
24
- } }
25
- function ComponentArtifactViewerComponent_Conditional_10_Conditional_1_Conditional_6_Template(rf, ctx) { if (rf & 1) {
15
+ function ComponentArtifactViewerComponent_Conditional_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
26
16
  i0.ɵɵelementStart(0, "details")(1, "summary");
27
17
  i0.ɵɵtext(2, "Technical Details");
28
18
  i0.ɵɵelementEnd();
@@ -30,40 +20,40 @@ function ComponentArtifactViewerComponent_Conditional_10_Conditional_1_Condition
30
20
  i0.ɵɵtext(4);
31
21
  i0.ɵɵelementEnd()();
32
22
  } if (rf & 2) {
33
- const ctx_r1 = i0.ɵɵnextContext(3);
23
+ const ctx_r0 = i0.ɵɵnextContext(2);
34
24
  i0.ɵɵadvance(4);
35
- i0.ɵɵtextInterpolate(ctx_r1.errorDetails);
25
+ i0.ɵɵtextInterpolate(ctx_r0.errorDetails);
36
26
  } }
37
- function ComponentArtifactViewerComponent_Conditional_10_Conditional_1_Template(rf, ctx) { if (rf & 1) {
38
- i0.ɵɵelementStart(0, "div", 12);
39
- i0.ɵɵelement(1, "i", 13);
27
+ function ComponentArtifactViewerComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
28
+ i0.ɵɵelementStart(0, "div", 3);
29
+ i0.ɵɵelement(1, "i", 4);
40
30
  i0.ɵɵelementStart(2, "h3");
41
31
  i0.ɵɵtext(3, "Component Error");
42
32
  i0.ɵɵelementEnd();
43
33
  i0.ɵɵelementStart(4, "p");
44
34
  i0.ɵɵtext(5);
45
35
  i0.ɵɵelementEnd();
46
- i0.ɵɵtemplate(6, ComponentArtifactViewerComponent_Conditional_10_Conditional_1_Conditional_6_Template, 5, 1, "details");
36
+ i0.ɵɵtemplate(6, ComponentArtifactViewerComponent_Conditional_2_Conditional_6_Template, 5, 1, "details");
47
37
  i0.ɵɵelementEnd();
48
38
  } if (rf & 2) {
49
- const ctx_r1 = i0.ɵɵnextContext(2);
39
+ const ctx_r0 = i0.ɵɵnextContext();
50
40
  i0.ɵɵadvance(5);
51
- i0.ɵɵtextInterpolate(ctx_r1.errorMessage);
41
+ i0.ɵɵtextInterpolate(ctx_r0.errorMessage);
52
42
  i0.ɵɵadvance();
53
- i0.ɵɵconditional(ctx_r1.errorDetails ? 6 : -1);
43
+ i0.ɵɵconditional(ctx_r0.errorDetails ? 6 : -1);
54
44
  } }
55
- function ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
56
- const _r3 = i0.ɵɵgetCurrentView();
57
- i0.ɵɵelementStart(0, "mj-react-component", 15, 0);
58
- i0.ɵɵlistener("componentEvent", function ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Conditional_0_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onComponentEvent($event)); })("stateChange", function ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Conditional_0_Template_mj_react_component_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onStateChange($event)); })("openEntityRecord", function ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Conditional_0_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
45
+ function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
46
+ const _r2 = i0.ɵɵgetCurrentView();
47
+ i0.ɵɵelementStart(0, "mj-react-component", 6, 0);
48
+ i0.ɵɵlistener("componentEvent", function ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onComponentEvent($event)); });
59
49
  i0.ɵɵelementEnd();
60
50
  } if (rf & 2) {
61
- const ctx_r1 = i0.ɵɵnextContext(3);
62
- i0.ɵɵproperty("component", ctx_r1.component);
51
+ const ctx_r0 = i0.ɵɵnextContext(2);
52
+ i0.ɵɵproperty("component", ctx_r0.component);
63
53
  } }
64
- function ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵelementStart(0, "div", 12);
66
- i0.ɵɵelement(1, "i", 16);
54
+ function ComponentArtifactViewerComponent_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
55
+ i0.ɵɵelementStart(0, "div", 3);
56
+ i0.ɵɵelement(1, "i", 7);
67
57
  i0.ɵɵelementStart(2, "h3");
68
58
  i0.ɵɵtext(3, "No Component Loaded");
69
59
  i0.ɵɵelementEnd();
@@ -71,41 +61,32 @@ function ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Condition
71
61
  i0.ɵɵtext(5, "The component data is missing or invalid.");
72
62
  i0.ɵɵelementEnd()();
73
63
  } }
74
- function ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵtemplate(0, ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Conditional_0_Template, 2, 1, "mj-react-component", 14)(1, ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Conditional_1_Template, 6, 0, "div", 12);
76
- } if (rf & 2) {
77
- const ctx_r1 = i0.ɵɵnextContext(2);
78
- i0.ɵɵconditional(ctx_r1.component ? 0 : 1);
79
- } }
80
- function ComponentArtifactViewerComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
81
- i0.ɵɵelementStart(0, "div", 8);
82
- i0.ɵɵtemplate(1, ComponentArtifactViewerComponent_Conditional_10_Conditional_1_Template, 7, 2, "div", 12)(2, ComponentArtifactViewerComponent_Conditional_10_Conditional_2_Template, 2, 1);
83
- i0.ɵɵelementEnd();
84
- } if (rf & 2) {
85
- const ctx_r1 = i0.ɵɵnextContext();
86
- i0.ɵɵadvance();
87
- i0.ɵɵconditional(ctx_r1.hasError ? 1 : 2);
88
- } }
89
- function ComponentArtifactViewerComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
90
- const _r4 = i0.ɵɵgetCurrentView();
91
- i0.ɵɵelementStart(0, "mj-code-editor", 17);
92
- i0.ɵɵtwoWayListener("ngModelChange", function ComponentArtifactViewerComponent_Conditional_11_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.componentCode, $event) || (ctx_r1.componentCode = $event); return i0.ɵɵresetView($event); });
93
- i0.ɵɵelementEnd();
64
+ function ComponentArtifactViewerComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵtemplate(0, ComponentArtifactViewerComponent_Conditional_3_Conditional_0_Template, 2, 1, "mj-react-component", 5)(1, ComponentArtifactViewerComponent_Conditional_3_Conditional_1_Template, 6, 0, "div", 3);
94
66
  } if (rf & 2) {
95
- const ctx_r1 = i0.ɵɵnextContext();
96
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.componentCode);
97
- i0.ɵɵproperty("language", "typescript")("readonly", ctx_r1.readonly);
67
+ const ctx_r0 = i0.ɵɵnextContext();
68
+ i0.ɵɵconditional(ctx_r0.component ? 0 : 1);
98
69
  } }
99
70
  /**
100
71
  * Viewer component for interactive Component artifacts (React-based UI components)
72
+ *
73
+ * Features:
74
+ * - Live component preview with React rendering
75
+ * - Dynamic tabs for component metadata (via GetAdditionalTabs)
76
+ * - Provides tabs for: Code, Functional Requirements, Technical Design, Data Requirements
101
77
  */
102
78
  let ComponentArtifactViewerComponent = class ComponentArtifactViewerComponent extends BaseArtifactViewerPluginComponent {
103
79
  adapter;
104
80
  reactComponent;
81
+ tabsChanged = new EventEmitter();
82
+ // Component data
105
83
  component = null;
106
84
  componentCode = "";
107
85
  componentName = '';
108
- viewMode = 'preview';
86
+ get resolvedComponentSpec() {
87
+ return this.reactComponent?.resolvedComponentSpec || this.component;
88
+ }
89
+ // Error state
109
90
  hasError = false;
110
91
  errorMessage = '';
111
92
  errorDetails = '';
@@ -113,15 +94,34 @@ let ComponentArtifactViewerComponent = class ComponentArtifactViewerComponent ex
113
94
  super();
114
95
  this.adapter = adapter;
115
96
  }
116
- async ngOnInit() {
117
- // Extract component name from the code
118
- if (this.artifactVersion.Content) {
119
- this.component = SafeJSONParse(this.artifactVersion.Content);
97
+ async ngOnChanges(changes) {
98
+ // When artifactVersion input changes, reload the component spec
99
+ if (changes['artifactVersion'] && !changes['artifactVersion'].firstChange) {
100
+ await this.loadComponentSpec();
101
+ // Notify parent that tabs may have changed
102
+ this.tabsChanged.emit();
103
+ }
104
+ }
105
+ async loadComponentSpec() {
106
+ try {
107
+ if (this.artifactVersion.Content) {
108
+ this.component = SafeJSONParse(this.artifactVersion.Content);
109
+ this.extractComponentParts();
110
+ }
111
+ else {
112
+ throw new Error('Artifact content is empty');
113
+ }
120
114
  }
121
- else {
122
- throw new Error('Artifact content is empty');
115
+ catch (error) {
116
+ console.error('Failed to load component spec:', error);
117
+ this.hasError = true;
118
+ this.errorMessage = 'Failed to load component';
119
+ this.errorDetails = error instanceof Error ? error.message : String(error);
123
120
  }
124
- this.extractComponentParts();
121
+ }
122
+ async ngOnInit() {
123
+ // Load initial component spec
124
+ await this.loadComponentSpec();
125
125
  // Initialize Angular adapter for React components
126
126
  try {
127
127
  await this.adapter.initialize();
@@ -137,53 +137,77 @@ let ComponentArtifactViewerComponent = class ComponentArtifactViewerComponent ex
137
137
  // Component initialization happens automatically via mj-react-component
138
138
  }
139
139
  /**
140
- * Component plugin always shows elevated display (interactive React component).
140
+ * Provide additional tabs for viewing component metadata
141
141
  */
142
- get isShowingElevatedDisplay() {
143
- return true;
142
+ GetAdditionalTabs() {
143
+ const tabs = [];
144
+ const resolvedComponent = this.resolvedComponentSpec;
145
+ if (!resolvedComponent) {
146
+ return tabs;
147
+ }
148
+ // Functional Requirements tab
149
+ if (resolvedComponent.functionalRequirements) {
150
+ tabs.push({
151
+ label: 'Functional',
152
+ icon: 'fa-clipboard-list',
153
+ contentType: 'markdown',
154
+ content: resolvedComponent.functionalRequirements
155
+ });
156
+ }
157
+ // Technical Design tab
158
+ if (resolvedComponent.technicalDesign) {
159
+ tabs.push({
160
+ label: 'Technical',
161
+ icon: 'fa-wrench',
162
+ contentType: 'markdown',
163
+ content: resolvedComponent.technicalDesign
164
+ });
165
+ }
166
+ // Data Requirements tab
167
+ if (resolvedComponent.dataRequirements) {
168
+ tabs.push({
169
+ label: 'Data',
170
+ icon: 'fa-database',
171
+ contentType: 'json',
172
+ content: JSON.stringify(resolvedComponent.dataRequirements, null, 2),
173
+ language: 'json'
174
+ });
175
+ }
176
+ // Code tab (lazy-loaded)
177
+ tabs.push({
178
+ label: 'Code',
179
+ icon: 'fa-code',
180
+ contentType: 'code',
181
+ language: 'typescript',
182
+ content: () => BuildComponentCompleteCode(resolvedComponent)
183
+ });
184
+ // Spec tab - Shows fully resolved component spec in JSON format (rightmost)
185
+ tabs.push({
186
+ label: 'Spec',
187
+ icon: 'fa-file-code',
188
+ contentType: 'json',
189
+ content: () => JSON.stringify(resolvedComponent, null, 2),
190
+ language: 'json'
191
+ });
192
+ return tabs;
144
193
  }
145
194
  /**
146
- * Component plugin should tell parent to show JSON tab so users can view the component spec source.
195
+ * Remove standard JSON tab since we provide "Resolved JSON" custom tab
196
+ * The custom tab shows the fully resolved component spec instead of raw artifact JSON
147
197
  */
148
- get parentShouldShowRawContent() {
149
- return true;
198
+ GetStandardTabRemovals() {
199
+ return ['JSON'];
150
200
  }
151
201
  extractComponentParts() {
152
- if (this.component?.name) {
153
- this.componentName = this.component?.name;
202
+ if (this.resolvedComponentSpec?.name) {
203
+ this.componentName = this.resolvedComponentSpec.name;
154
204
  }
155
- if (this.component?.code) {
156
- this.componentCode = BuildComponentCompleteCode(this.component);
157
- }
158
- }
159
- onCopy() {
160
- if (this.componentCode) {
161
- navigator.clipboard.writeText(this.componentCode).then(() => {
162
- console.log('✅ Copied component code to clipboard');
163
- }).catch(err => {
164
- console.error('Failed to copy to clipboard:', err);
165
- });
205
+ if (this.resolvedComponentSpec?.code) {
206
+ this.componentCode = BuildComponentCompleteCode(this.resolvedComponentSpec);
166
207
  }
167
208
  }
168
209
  onComponentEvent(event) {
169
- if (event.type === 'error') {
170
- this.hasError = true;
171
- this.errorMessage = event.payload?.error || 'An unknown error occurred';
172
- this.errorDetails = event.payload?.errorInfo || event.payload?.stackTrace || '';
173
- console.error('Component error:', event.payload);
174
- }
175
- else {
176
- console.log('Component event:', event.type, event.payload);
177
- }
178
- }
179
- onStateChange(event) {
180
- console.log('Component state change:', event);
181
- // Could update componentContext here if needed for persistence
182
- }
183
- onOpenEntityRecord(event) {
184
- console.log('Open entity record requested:', event);
185
- // This would typically be handled by a parent component to open entity forms
186
- // For now just log it
210
+ console.log('Component event:', event);
187
211
  }
188
212
  static ɵfac = function ComponentArtifactViewerComponent_Factory(t) { return new (t || ComponentArtifactViewerComponent)(i0.ɵɵdirectiveInject(i1.AngularAdapterService)); };
189
213
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ComponentArtifactViewerComponent, selectors: [["mj-component-artifact-viewer"]], viewQuery: function ComponentArtifactViewerComponent_Query(rf, ctx) { if (rf & 1) {
@@ -191,32 +215,15 @@ let ComponentArtifactViewerComponent = class ComponentArtifactViewerComponent ex
191
215
  } if (rf & 2) {
192
216
  let _t;
193
217
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.reactComponent = _t.first);
194
- } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 12, vars: 6, consts: [["reactComponent", ""], [1, "component-artifact-viewer", 3, "ngClass"], [1, "component-toolbar"], [1, "component-badge"], [1, "fas", "fa-cube"], ["title", "View Source Code", 1, "btn-icon", 3, "click"], ["title", "Copy Code", 1, "btn-icon"], [1, "component-content-container"], [1, "component-preview"], [2, "width", "100%", "height", "100%", 3, "ngModel", "language", "readonly"], ["title", "Copy Code", 1, "btn-icon", 3, "click"], [1, "fas", "fa-copy"], [1, "error-state"], [1, "fas", "fa-exclamation-triangle"], [3, "component"], [3, "componentEvent", "stateChange", "openEntityRecord", "component"], [1, "fas", "fa-exclamation-circle"], [2, "width", "100%", "height", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"]], template: function ComponentArtifactViewerComponent_Template(rf, ctx) { if (rf & 1) {
195
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3);
196
- i0.ɵɵelement(3, "i", 4);
197
- i0.ɵɵtext(4, " Interactive Component ");
198
- i0.ɵɵelementEnd();
199
- i0.ɵɵelementStart(5, "button", 5);
200
- i0.ɵɵlistener("click", function ComponentArtifactViewerComponent_Template_button_click_5_listener() { return ctx.viewMode = ctx.viewMode === "preview" ? "source" : "preview"; });
201
- i0.ɵɵelement(6, "i");
202
- i0.ɵɵtext(7);
203
- i0.ɵɵelementEnd();
204
- i0.ɵɵtemplate(8, ComponentArtifactViewerComponent_Conditional_8_Template, 3, 0, "button", 6);
205
- i0.ɵɵelementEnd();
206
- i0.ɵɵelementStart(9, "div", 7);
207
- i0.ɵɵtemplate(10, ComponentArtifactViewerComponent_Conditional_10_Template, 3, 1, "div", 8)(11, ComponentArtifactViewerComponent_Conditional_11_Template, 1, 3, "mj-code-editor", 9);
218
+ } }, outputs: { tabsChanged: "tabsChanged" }, features: [i0.ɵɵInheritDefinitionFeature, i0.ɵɵNgOnChangesFeature], decls: 4, vars: 2, consts: [["reactComponent", ""], [1, "component-artifact-viewer", 3, "ngClass"], [1, "component-preview"], [1, "error-state"], [1, "fa-solid", "fa-exclamation-triangle"], [3, "component"], [3, "componentEvent", "component"], [1, "fa-solid", "fa-exclamation-circle"]], template: function ComponentArtifactViewerComponent_Template(rf, ctx) { if (rf & 1) {
219
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
220
+ i0.ɵɵtemplate(2, ComponentArtifactViewerComponent_Conditional_2_Template, 7, 2, "div", 3)(3, ComponentArtifactViewerComponent_Conditional_3_Template, 2, 1);
208
221
  i0.ɵɵelementEnd()();
209
222
  } if (rf & 2) {
210
223
  i0.ɵɵproperty("ngClass", ctx.cssClass);
211
- i0.ɵɵadvance(6);
212
- i0.ɵɵclassMap(ctx.viewMode === "preview" ? "fas fa-code" : "fas fa-eye");
213
- i0.ɵɵadvance();
214
- i0.ɵɵtextInterpolate1(" ", ctx.viewMode === "preview" ? "Source" : "Preview", " ");
215
- i0.ɵɵadvance();
216
- i0.ɵɵconditional(ctx.viewMode === "source" ? 8 : -1);
217
224
  i0.ɵɵadvance(2);
218
- i0.ɵɵconditional(ctx.viewMode === "preview" ? 10 : 11);
219
- } }, dependencies: [i2.NgClass, i3.NgControlStatus, i3.NgModel, i4.CodeEditorComponent, i1.MJReactComponent], styles: [".component-artifact-viewer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .component-toolbar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px;\n background: #f5f5f5;\n border-bottom: 1px solid #ddd;\n gap: 8px;\n }\n\n .component-badge[_ngcontent-%COMP%] {\n padding: 6px 12px;\n background: #28a745;\n color: white;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .btn-icon[_ngcontent-%COMP%] {\n padding: 6px 12px;\n background: white;\n border: 1px solid #ccc;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .btn-icon[_ngcontent-%COMP%]:hover {\n background: #e9ecef;\n border-color: #999;\n }\n\n .component-content-container[_ngcontent-%COMP%] {\n flex: 1;\n overflow: auto;\n }\n\n .component-preview[_ngcontent-%COMP%] {\n padding: 20px;\n background: white;\n height: 100%;\n overflow: auto;\n }\n\n .error-state[_ngcontent-%COMP%] {\n padding: 20px;\n text-align: center;\n color: #dc3545;\n }\n\n .error-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n .error-state[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] {\n margin: 0 0 12px;\n font-size: 20px;\n font-weight: 600;\n }\n\n .error-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%] {\n margin: 0 0 12px;\n color: #6c757d;\n }\n\n .error-state[_ngcontent-%COMP%] details[_ngcontent-%COMP%] {\n margin-top: 16px;\n text-align: left;\n background: #f8f9fa;\n padding: 12px;\n border-radius: 4px;\n }\n\n .error-state[_ngcontent-%COMP%] summary[_ngcontent-%COMP%] {\n cursor: pointer;\n font-weight: 600;\n color: #495057;\n }\n\n .error-state[_ngcontent-%COMP%] pre[_ngcontent-%COMP%] {\n margin-top: 8px;\n white-space: pre-wrap;\n word-wrap: break-word;\n font-size: 12px;\n color: #212529;\n }"] });
225
+ i0.ɵɵconditional(ctx.hasError ? 2 : 3);
226
+ } }, dependencies: [i2.NgClass, i1.MJReactComponent], styles: [".component-artifact-viewer[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background: white;\n}\n\n.component-preview[_ngcontent-%COMP%] {\n flex: 1;\n padding: 15px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.error-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: #dc3545;\n\n i {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n }\n\n p {\n margin: 0 0 12px 0;\n color: #6c757d;\n }\n\n details {\n margin-top: 16px;\n text-align: left;\n max-width: 600px;\n\n summary {\n cursor: pointer;\n color: #495057;\n font-weight: 500;\n margin-bottom: 8px;\n\n &:hover {\n color: #212529;\n }\n }\n\n pre {\n background: #f8f9fa;\n padding: 12px;\n border-radius: 4px;\n overflow-x: auto;\n font-size: 12px;\n color: #495057;\n margin: 0;\n }\n }\n}"] });
220
227
  };
221
228
  ComponentArtifactViewerComponent = __decorate([
222
229
  RegisterClass(BaseArtifactViewerPluginComponent, 'ComponentArtifactViewerPlugin')
@@ -224,70 +231,12 @@ ComponentArtifactViewerComponent = __decorate([
224
231
  export { ComponentArtifactViewerComponent };
225
232
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ComponentArtifactViewerComponent, [{
226
233
  type: Component,
227
- args: [{ selector: 'mj-component-artifact-viewer', template: `
228
- <div class="component-artifact-viewer" [ngClass]="cssClass">
229
- <div class="component-toolbar">
230
- <div class="component-badge">
231
- <i class="fas fa-cube"></i> Interactive Component
232
- </div>
233
- <button class="btn-icon" title="View Source Code" (click)="viewMode = viewMode === 'preview' ? 'source' : 'preview'">
234
- <i [class]="viewMode === 'preview' ? 'fas fa-code' : 'fas fa-eye'"></i>
235
- {{ viewMode === 'preview' ? 'Source' : 'Preview' }}
236
- </button>
237
- @if (viewMode === 'source') {
238
- <button class="btn-icon" title="Copy Code" (click)="onCopy()">
239
- <i class="fas fa-copy"></i> Copy
240
- </button>
241
- }
242
- </div>
243
- <div class="component-content-container">
244
- @if (viewMode === 'preview') {
245
- <div class="component-preview">
246
- @if (hasError) {
247
- <div class="error-state">
248
- <i class="fas fa-exclamation-triangle"></i>
249
- <h3>Component Error</h3>
250
- <p>{{ errorMessage }}</p>
251
- @if (errorDetails) {
252
- <details>
253
- <summary>Technical Details</summary>
254
- <pre>{{ errorDetails }}</pre>
255
- </details>
256
- }
257
- </div>
258
- } @else {
259
- @if (component) {
260
- <mj-react-component
261
- #reactComponent
262
- [component]="component"
263
- (componentEvent)="onComponentEvent($event)"
264
- (stateChange)="onStateChange($event)"
265
- (openEntityRecord)="onOpenEntityRecord($event)">
266
- </mj-react-component>
267
- }
268
- @else {
269
- <div class="error-state">
270
- <i class="fas fa-exclamation-circle"></i>
271
- <h3>No Component Loaded</h3>
272
- <p>The component data is missing or invalid.</p>
273
- </div>
274
- }
275
- }
276
- </div>
277
- } @else {
278
- <mj-code-editor
279
- [(ngModel)]="componentCode"
280
- [language]="'typescript'"
281
- [readonly]="readonly"
282
- style="width: 100%; height: 100%;">
283
- </mj-code-editor>
284
- }
285
- </div>
286
- </div>
287
- `, styles: ["\n .component-artifact-viewer {\n display: flex;\n flex-direction: column;\n height: 100%;\n }\n\n .component-toolbar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px;\n background: #f5f5f5;\n border-bottom: 1px solid #ddd;\n gap: 8px;\n }\n\n .component-badge {\n padding: 6px 12px;\n background: #28a745;\n color: white;\n border-radius: 12px;\n font-size: 11px;\n font-weight: 600;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .btn-icon {\n padding: 6px 12px;\n background: white;\n border: 1px solid #ccc;\n border-radius: 4px;\n cursor: pointer;\n font-size: 12px;\n display: flex;\n align-items: center;\n gap: 6px;\n }\n\n .btn-icon:hover {\n background: #e9ecef;\n border-color: #999;\n }\n\n .component-content-container {\n flex: 1;\n overflow: auto;\n }\n\n .component-preview {\n padding: 20px;\n background: white;\n height: 100%;\n overflow: auto;\n }\n\n .error-state {\n padding: 20px;\n text-align: center;\n color: #dc3545;\n }\n\n .error-state i {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n .error-state h3 {\n margin: 0 0 12px;\n font-size: 20px;\n font-weight: 600;\n }\n\n .error-state p {\n margin: 0 0 12px;\n color: #6c757d;\n }\n\n .error-state details {\n margin-top: 16px;\n text-align: left;\n background: #f8f9fa;\n padding: 12px;\n border-radius: 4px;\n }\n\n .error-state summary {\n cursor: pointer;\n font-weight: 600;\n color: #495057;\n }\n\n .error-state pre {\n margin-top: 8px;\n white-space: pre-wrap;\n word-wrap: break-word;\n font-size: 12px;\n color: #212529;\n }\n "] }]
234
+ args: [{ selector: 'mj-component-artifact-viewer', template: "<div class=\"component-artifact-viewer\" [ngClass]=\"cssClass\">\n <!-- Component Preview (full screen) -->\n <div class=\"component-preview\">\n @if (hasError) {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>Component Error</h3>\n <p>{{ errorMessage }}</p>\n @if (errorDetails) {\n <details>\n <summary>Technical Details</summary>\n <pre>{{ errorDetails }}</pre>\n </details>\n }\n </div>\n } @else {\n @if (component) {\n <mj-react-component\n #reactComponent\n [component]=\"component\"\n (componentEvent)=\"onComponentEvent($event)\">\n </mj-react-component>\n } @else {\n <div class=\"error-state\">\n <i class=\"fa-solid fa-exclamation-circle\"></i>\n <h3>No Component Loaded</h3>\n <p>The component data is missing or invalid.</p>\n </div>\n }\n }\n </div>\n</div>\n\n", styles: [".component-artifact-viewer {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n background: white;\n}\n\n.component-preview {\n flex: 1;\n padding: 15px;\n overflow: auto;\n display: flex;\n flex-direction: column;\n}\n\n.error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px;\n text-align: center;\n color: #dc3545;\n\n i {\n font-size: 48px;\n margin-bottom: 16px;\n }\n\n h3 {\n margin: 0 0 8px 0;\n font-size: 20px;\n }\n\n p {\n margin: 0 0 12px 0;\n color: #6c757d;\n }\n\n details {\n margin-top: 16px;\n text-align: left;\n max-width: 600px;\n\n summary {\n cursor: pointer;\n color: #495057;\n font-weight: 500;\n margin-bottom: 8px;\n\n &:hover {\n color: #212529;\n }\n }\n\n pre {\n background: #f8f9fa;\n padding: 12px;\n border-radius: 4px;\n overflow-x: auto;\n font-size: 12px;\n color: #495057;\n margin: 0;\n }\n }\n}\n"] }]
288
235
  }], () => [{ type: i1.AngularAdapterService }], { reactComponent: [{
289
236
  type: ViewChild,
290
237
  args: ['reactComponent']
238
+ }], tabsChanged: [{
239
+ type: Output
291
240
  }] }); })();
292
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ComponentArtifactViewerComponent, { className: "ComponentArtifactViewerComponent", filePath: "src/lib/components/plugins/component-artifact-viewer.component.ts", lineNumber: 177 }); })();
241
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ComponentArtifactViewerComponent, { className: "ComponentArtifactViewerComponent", filePath: "src/lib/components/plugins/component-artifact-viewer.component.ts", lineNumber: 21 }); })();
293
242
  //# sourceMappingURL=component-artifact-viewer.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"component-artifact-viewer.component.js","sourceRoot":"","sources":["../../../../src/lib/components/plugins/component-artifact-viewer.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"component-artifact-viewer.component.js","sourceRoot":"","sources":["../../../../src/lib/components/plugins/component-artifact-viewer.component.ts","../../../../src/lib/components/plugins/component-artifact-viewer.component.html"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAmD,MAAM,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC5H,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,iCAAiC,EAAqB,MAAM,mCAAmC,CAAC;AAEzG,OAAO,EAAE,0BAA0B,EAAiB,MAAM,6CAA6C,CAAC;;;;;;ICM5F,AADF,+BAAS,cACE;IAAA,iCAAiB;IAAA,iBAAU;IACpC,2BAAK;IAAA,YAAkB;IACzB,AADyB,iBAAM,EACrB;;;IADH,eAAkB;IAAlB,yCAAkB;;;IAP7B,8BAAyB;IACvB,uBAAgD;IAChD,0BAAI;IAAA,+BAAe;IAAA,iBAAK;IACxB,yBAAG;IAAA,YAAkB;IAAA,iBAAI;IACzB,wGAAoB;IAMtB,iBAAM;;;IAPD,eAAkB;IAAlB,yCAAkB;IACrB,cAKC;IALD,8CAKC;;;;IAID,gDAG8C;IAA5C,uPAAkB,+BAAwB,KAAC;IAC7C,iBAAqB;;;IAFnB,4CAAuB;;;IAIzB,8BAAyB;IACvB,uBAA8C;IAC9C,0BAAI;IAAA,mCAAmB;IAAA,iBAAK;IAC5B,yBAAG;IAAA,yDAAyC;IAC9C,AAD8C,iBAAI,EAC5C;;;IALN,AANF,sHAAiB,0FAMR;;;IANT,0CAYC;;ADtBP;;;;;;;GAOG;AAOI,IAAM,gCAAgC,GAAtC,MAAM,gCAAiC,SAAQ,iCAAiC;IAkBjE;IAjBS,cAAc,CAAoB;IACrD,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;IAEjD,iBAAiB;IACV,SAAS,GAAyB,IAAI,CAAC;IACvC,aAAa,GAAW,EAAE,CAAC;IAC3B,aAAa,GAAW,EAAE,CAAC;IAElC,IAAW,qBAAqB;QAC9B,OAAO,IAAI,CAAC,cAAc,EAAE,qBAAqB,IAAI,IAAI,CAAC,SAAS,CAAC;IACtE,CAAC;IAED,cAAc;IACP,QAAQ,GAAG,KAAK,CAAC;IACjB,YAAY,GAAG,EAAE,CAAC;IAClB,YAAY,GAAG,EAAE,CAAC;IAEzB,YAAoB,OAA8B;QAChD,KAAK,EAAE,CAAC;QADU,YAAO,GAAP,OAAO,CAAuB;IAElD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAsB;QACtC,gEAAgE;QAChE,IAAI,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1E,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,2CAA2C;YAC3C,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAkB,CAAC;gBAC9E,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,0BAA0B,CAAC;YAC/C,IAAI,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,8BAA8B;QAC9B,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAE/B,kDAAkD;QAClD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;YAC9D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,wCAAwC,CAAC;YAC7D,IAAI,CAAC,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,wEAAwE;IAC1E,CAAC;IAED;;OAEG;IACI,iBAAiB;QACtB,MAAM,IAAI,GAAwB,EAAE,CAAC;QAErC,MAAM,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAErD,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8BAA8B;QAC9B,IAAI,iBAAiB,CAAC,sBAAsB,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,iBAAiB,CAAC,sBAAsB;aAClD,CAAC,CAAC;QACL,CAAC;QAED,uBAAuB;QACvB,IAAI,iBAAiB,CAAC,eAAe,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,UAAU;gBACvB,OAAO,EAAE,iBAAiB,CAAC,eAAe;aAC3C,CAAC,CAAC;QACL,CAAC;QAED,wBAAwB;QACxB,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,IAAI,CAAC;gBACR,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,MAAM;gBACnB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpE,QAAQ,EAAE,MAAM;aACjB,CAAC,CAAC;QACL,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,MAAM;YACnB,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,iBAAiB,CAAC;SAC7D,CAAC,CAAC;QAEH,4EAA4E;QAC5E,IAAI,CAAC,IAAI,CAAC;YACR,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,sBAAsB;QAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;QACvD,CAAC;QACD,IAAI,IAAI,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,0BAA0B,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC7B,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;0FArJU,gCAAgC;6DAAhC,gCAAgC;;;;;;YClB3C,AAFF,8BAA4D,aAE3B;YAa3B,AAZF,yFAAgB,kEAYP;YAgBb,AADE,iBAAM,EACF;;YA/BiC,sCAAoB;YAGvD,eA0BC;YA1BD,sCA0BC;;;ADTQ,gCAAgC;IAD5C,aAAa,CAAC,iCAAiC,EAAE,+BAA+B,CAAC;GACrE,gCAAgC,CAsJ5C;;iFAtJY,gCAAgC;cAN5C,SAAS;2BACE,8BAA8B;sDAMX,cAAc;kBAA1C,SAAS;mBAAC,gBAAgB;YACjB,WAAW;kBAApB,MAAM;;kFAFI,gCAAgC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memberjunction/ng-artifacts",
3
- "version": "2.108.0",
3
+ "version": "2.110.0",
4
4
  "description": "MemberJunction: Artifact viewer plugin system for rendering different artifact types (JSON, Code, Markdown, HTML, SVG, Components)",
5
5
  "main": "./dist/public-api.js",
6
6
  "typings": "./dist/public-api.d.ts",
@@ -26,11 +26,11 @@
26
26
  "dependencies": {
27
27
  "@memberjunction/core": "2.100.3",
28
28
  "@memberjunction/global": "2.100.3",
29
- "@memberjunction/core-entities": "2.108.0",
30
- "@memberjunction/ng-base-types": "2.108.0",
31
- "@memberjunction/ng-code-editor": "2.108.0",
32
- "@memberjunction/ng-react": "2.108.0",
33
- "@memberjunction/ng-notifications": "2.108.0",
29
+ "@memberjunction/core-entities": "2.110.0",
30
+ "@memberjunction/ng-base-types": "2.110.0",
31
+ "@memberjunction/ng-code-editor": "2.110.0",
32
+ "@memberjunction/ng-react": "2.110.0",
33
+ "@memberjunction/ng-notifications": "2.110.0",
34
34
  "@angular/cdk": "18.0.2",
35
35
  "tslib": "^2.3.0",
36
36
  "rxjs": "^7.8.1",