@memberjunction/ng-skip-chat 2.69.0 → 2.70.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.
@@ -1,21 +1,22 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewChildren, HostListener } from '@angular/core';
2
2
  import { CompositeKey, LogError, Metadata, RunQuery, RunView } from '@memberjunction/core';
3
- import { SkipReactComponentHost } from './skip-react-component-host';
4
3
  import { MapEntityInfoToSkipEntityInfo, BuildSkipComponentCompleteCode } from '@memberjunction/skip-types';
5
4
  import { DrillDownInfo } from '../drill-down-info';
6
5
  import { marked } from 'marked';
6
+ import { MJReactComponent } from '@memberjunction/ng-react';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/platform-browser";
9
9
  import * as i2 from "@angular/common";
10
10
  import * as i3 from "@progress/kendo-angular-layout";
11
11
  import * as i4 from "@progress/kendo-angular-buttons";
12
12
  import * as i5 from "@memberjunction/ng-code-editor";
13
- const _c0 = ["htmlContainer"];
13
+ import * as i6 from "@memberjunction/ng-react";
14
+ const _c0 = () => ({});
14
15
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_1_Conditional_0_Template(rf, ctx) { if (rf & 1) {
15
- i0.ɵɵelement(0, "i", 7);
16
+ i0.ɵɵelement(0, "i", 6);
16
17
  } }
17
18
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
18
- i0.ɵɵtemplate(0, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_1_Conditional_0_Template, 1, 0, "i", 7);
19
+ i0.ɵɵtemplate(0, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_1_Conditional_0_Template, 1, 0, "i", 6);
19
20
  i0.ɵɵtext(1);
20
21
  } if (rf & 2) {
21
22
  const ɵ$index_4_r3 = i0.ɵɵnextContext().$index;
@@ -49,7 +50,7 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_butto
49
50
  i0.ɵɵelementEnd()();
50
51
  } }
51
52
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
52
- i0.ɵɵelement(0, "i", 11);
53
+ i0.ɵɵelement(0, "i", 10);
53
54
  i0.ɵɵtext(1, " Functional Requirements ");
54
55
  } }
55
56
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
@@ -63,14 +64,14 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
63
64
  i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedFunctionalRequirements(option_r6), i0.ɵɵsanitizeHtml);
64
65
  } }
65
66
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_Template(rf, ctx) { if (rf & 1) {
66
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
67
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_ng_template_2_Template, 2, 1, "ng-template", 6);
67
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
68
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_ng_template_2_Template, 2, 1, "ng-template", 5);
68
69
  i0.ɵɵelementEnd();
69
70
  } if (rf & 2) {
70
71
  i0.ɵɵproperty("selected", true);
71
72
  } }
72
73
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {
73
- i0.ɵɵelement(0, "i", 13);
74
+ i0.ɵɵelement(0, "i", 12);
74
75
  i0.ɵɵtext(1, " Data Requirements ");
75
76
  } }
76
77
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
@@ -84,15 +85,15 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
84
85
  i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedDataRequirements(option_r6), i0.ɵɵsanitizeHtml);
85
86
  } }
86
87
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_Template(rf, ctx) { if (rf & 1) {
87
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
88
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_ng_template_2_Template, 2, 1, "ng-template", 6);
88
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
89
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_ng_template_2_Template, 2, 1, "ng-template", 5);
89
90
  i0.ɵɵelementEnd();
90
91
  } if (rf & 2) {
91
92
  const ctx_r1 = i0.ɵɵnextContext(5);
92
93
  i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements);
93
94
  } }
94
95
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {
95
- i0.ɵɵelement(0, "i", 15);
96
+ i0.ɵɵelement(0, "i", 14);
96
97
  i0.ɵɵtext(1, " Technical Design ");
97
98
  } }
98
99
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {
@@ -106,15 +107,15 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
106
107
  i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedTechnicalDesign(option_r6), i0.ɵɵsanitizeHtml);
107
108
  } }
108
109
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
109
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
110
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_ng_template_2_Template, 2, 1, "ng-template", 6);
110
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
111
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_ng_template_2_Template, 2, 1, "ng-template", 5);
111
112
  i0.ɵɵelementEnd();
112
113
  } if (rf & 2) {
113
114
  const ctx_r1 = i0.ɵɵnextContext(5);
114
115
  i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements);
115
116
  } }
116
117
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_ng_template_1_Template(rf, ctx) { if (rf & 1) {
117
- i0.ɵɵelement(0, "i", 17);
118
+ i0.ɵɵelement(0, "i", 16);
118
119
  i0.ɵɵtext(1, " Code ");
119
120
  } }
120
121
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
@@ -128,8 +129,8 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
128
129
  i0.ɵɵproperty("value", ctx_r1.getComponentCode(option_r6))("language", "javascript")("autoFocus", false)("indentWithTab", true)("readonly", true);
129
130
  } }
130
131
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
131
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
132
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_ng_template_2_Template, 2, 5, "ng-template", 6);
132
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
133
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_ng_template_2_Template, 2, 5, "ng-template", 5);
133
134
  i0.ɵɵelementEnd();
134
135
  } if (rf & 2) {
135
136
  const ctx_r1 = i0.ɵɵnextContext(5);
@@ -138,7 +139,7 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
138
139
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Template(rf, ctx) { if (rf & 1) {
139
140
  const _r8 = i0.ɵɵgetCurrentView();
140
141
  i0.ɵɵelementStart(0, "div", 28)(1, "kendo-tabstrip", 29);
141
- i0.ɵɵtemplate(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_Template, 3, 1, "kendo-tabstrip-tab", 4)(3, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_Template, 3, 1, "kendo-tabstrip-tab", 4)(4, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_Template, 3, 1, "kendo-tabstrip-tab", 4)(5, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_Template, 3, 1, "kendo-tabstrip-tab", 4);
142
+ i0.ɵɵtemplate(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_2_Template, 3, 1, "kendo-tabstrip-tab", 3)(3, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_3_Template, 3, 1, "kendo-tabstrip-tab", 3)(4, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_4_Template, 3, 1, "kendo-tabstrip-tab", 3)(5, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Conditional_5_Template, 3, 1, "kendo-tabstrip-tab", 3);
142
143
  i0.ɵɵelementEnd()();
143
144
  i0.ɵɵelementStart(6, "div", 30);
144
145
  i0.ɵɵlistener("mousedown", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Template_div_mousedown_6_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.startResize($event)); })("touchstart", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Template_div_touchstart_6_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.startResize($event)); });
@@ -156,11 +157,21 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
156
157
  i0.ɵɵadvance();
157
158
  i0.ɵɵconditional(ctx_r1.showCode ? 5 : -1);
158
159
  } }
160
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_25_Template(rf, ctx) { if (rf & 1) {
161
+ const _r9 = i0.ɵɵgetCurrentView();
162
+ i0.ɵɵelementStart(0, "mj-react-component", 36);
163
+ i0.ɵɵlistener("stateChange", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_25_Template_mj_react_component_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r9); const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onStateChange(ɵ$index_4_r3, $event)); })("componentEvent", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_25_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r9); const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onComponentEvent(ɵ$index_4_r3, $event)); })("refreshData", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_25_Template_mj_react_component_refreshData_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.handleRefreshData()); })("openEntityRecord", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_25_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
164
+ i0.ɵɵelementEnd();
165
+ } if (rf & 2) {
166
+ const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index;
167
+ const ctx_r1 = i0.ɵɵnextContext(2);
168
+ i0.ɵɵproperty("component", ctx_r1.componentSpecs.get(ɵ$index_4_r3))("data", ctx_r1.getFlattenedDataContext())("state", ctx_r1.userStates.get(ɵ$index_4_r3) || i0.ɵɵpureFunction0(5, _c0))("utilities", ctx_r1.utilities)("styles", ctx_r1.componentStyles || undefined);
169
+ } }
159
170
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Conditional_19_Template(rf, ctx) { if (rf & 1) {
160
- i0.ɵɵelementStart(0, "details", 44)(1, "summary", 50);
171
+ i0.ɵɵelementStart(0, "details", 45)(1, "summary", 51);
161
172
  i0.ɵɵtext(2, "Technical Details (click to expand)");
162
173
  i0.ɵɵelementEnd();
163
- i0.ɵɵelementStart(3, "pre", 51);
174
+ i0.ɵɵelementStart(3, "pre", 52);
164
175
  i0.ɵɵtext(4);
165
176
  i0.ɵɵelementEnd()();
166
177
  } if (rf & 2) {
@@ -169,20 +180,20 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
169
180
  i0.ɵɵtextInterpolate(ctx_r1.currentError.technicalDetails);
170
181
  } }
171
182
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Template(rf, ctx) { if (rf & 1) {
172
- const _r9 = i0.ɵɵgetCurrentView();
173
- i0.ɵɵelementStart(0, "div", 23)(1, "div", 36)(2, "div", 37)(3, "button", 38);
174
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
175
- i0.ɵɵelement(4, "span", 39);
183
+ const _r10 = i0.ɵɵgetCurrentView();
184
+ i0.ɵɵelementStart(0, "div", 23)(1, "div", 37)(2, "div", 38)(3, "button", 39);
185
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
186
+ i0.ɵɵelement(4, "span", 40);
176
187
  i0.ɵɵtext(5, " Copy Error Details ");
177
188
  i0.ɵɵelementEnd();
178
- i0.ɵɵelementStart(6, "h3", 40);
179
- i0.ɵɵelement(7, "span", 41);
189
+ i0.ɵɵelementStart(6, "h3", 41);
190
+ i0.ɵɵelement(7, "span", 42);
180
191
  i0.ɵɵtext(8, " Component Rendering Error ");
181
192
  i0.ɵɵelementEnd()();
182
- i0.ɵɵelementStart(9, "p", 42);
193
+ i0.ɵɵelementStart(9, "p", 43);
183
194
  i0.ɵɵtext(10, " The selected component option could not be rendered due to the following error: ");
184
195
  i0.ɵɵelementEnd();
185
- i0.ɵɵelementStart(11, "div", 43)(12, "strong");
196
+ i0.ɵɵelementStart(11, "div", 44)(12, "strong");
186
197
  i0.ɵɵtext(13, "Error Type:");
187
198
  i0.ɵɵelementEnd();
188
199
  i0.ɵɵtext(14);
@@ -191,12 +202,12 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
191
202
  i0.ɵɵtext(17, "Details:");
192
203
  i0.ɵɵelementEnd();
193
204
  i0.ɵɵtext(18);
194
- i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Conditional_19_Template, 5, 1, "details", 44);
205
+ i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Conditional_19_Template, 5, 1, "details", 45);
195
206
  i0.ɵɵelementEnd();
196
- i0.ɵɵelementStart(20, "div", 45)(21, "strong", 46);
207
+ i0.ɵɵelementStart(20, "div", 46)(21, "strong", 47);
197
208
  i0.ɵɵtext(22, "What to do:");
198
209
  i0.ɵɵelementEnd();
199
- i0.ɵɵelementStart(23, "ol", 47)(24, "li");
210
+ i0.ɵɵelementStart(23, "ol", 48)(24, "li");
200
211
  i0.ɵɵtext(25, "Try selecting a different report option from the tabs above");
201
212
  i0.ɵɵelementEnd();
202
213
  i0.ɵɵelementStart(26, "li");
@@ -205,9 +216,9 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
205
216
  i0.ɵɵelementStart(28, "li");
206
217
  i0.ɵɵtext(29, "Contact your IT department if the issue persists");
207
218
  i0.ɵɵelementEnd()()();
208
- i0.ɵɵelementStart(30, "button", 48);
209
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
210
- i0.ɵɵelement(31, "span", 49);
219
+ i0.ɵɵelementStart(30, "button", 49);
220
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
221
+ i0.ɵɵelement(31, "span", 50);
211
222
  i0.ɵɵtext(32, " Retry ");
212
223
  i0.ɵɵelementEnd()()();
213
224
  } if (rf & 2) {
@@ -221,37 +232,37 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
221
232
  } }
222
233
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
223
234
  const _r4 = i0.ɵɵgetCurrentView();
224
- i0.ɵɵelementStart(0, "div", 2)(1, "div", 8)(2, "div", 9)(3, "button", 10);
235
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 7)(2, "div", 8)(3, "button", 9);
225
236
  i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleShowFunctionalRequirements()); });
226
- i0.ɵɵelement(4, "i", 11);
237
+ i0.ɵɵelement(4, "i", 10);
227
238
  i0.ɵɵelementStart(5, "span");
228
239
  i0.ɵɵtext(6, "Functional");
229
240
  i0.ɵɵelementEnd()();
230
- i0.ɵɵelementStart(7, "button", 12);
241
+ i0.ɵɵelementStart(7, "button", 11);
231
242
  i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleShowDataRequirements()); });
232
- i0.ɵɵelement(8, "i", 13);
243
+ i0.ɵɵelement(8, "i", 12);
233
244
  i0.ɵɵelementStart(9, "span");
234
245
  i0.ɵɵtext(10, "Data");
235
246
  i0.ɵɵelementEnd()();
236
- i0.ɵɵelementStart(11, "button", 14);
247
+ i0.ɵɵelementStart(11, "button", 13);
237
248
  i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleShowTechnicalDesign()); });
238
- i0.ɵɵelement(12, "i", 15);
249
+ i0.ɵɵelement(12, "i", 14);
239
250
  i0.ɵɵelementStart(13, "span");
240
251
  i0.ɵɵtext(14, "Technical");
241
252
  i0.ɵɵelementEnd()();
242
- i0.ɵɵelementStart(15, "button", 16);
253
+ i0.ɵɵelementStart(15, "button", 15);
243
254
  i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleShowCode()); });
244
- i0.ɵɵelement(16, "i", 17);
255
+ i0.ɵɵelement(16, "i", 16);
245
256
  i0.ɵɵelementStart(17, "span");
246
257
  i0.ɵɵtext(18, "Code");
247
258
  i0.ɵɵelementEnd()()();
248
- i0.ɵɵelementStart(19, "div", 18);
249
- i0.ɵɵtemplate(20, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_20_Template, 4, 2, "button", 19)(21, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_21_Template, 4, 0, "button", 20);
259
+ i0.ɵɵelementStart(19, "div", 17);
260
+ i0.ɵɵtemplate(20, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_20_Template, 4, 2, "button", 18)(21, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_21_Template, 4, 0, "button", 19);
250
261
  i0.ɵɵelementEnd()();
251
- i0.ɵɵelementStart(22, "div", 21);
262
+ i0.ɵɵelementStart(22, "div", 20);
252
263
  i0.ɵɵtemplate(23, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_23_Template, 8, 6);
253
- i0.ɵɵelementStart(24, "div", 22, 0);
254
- i0.ɵɵtemplate(26, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Template, 33, 3, "div", 23);
264
+ i0.ɵɵelementStart(24, "div", 21);
265
+ i0.ɵɵtemplate(25, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_25_Template, 1, 6, "mj-react-component", 22)(26, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_26_Template, 33, 3, "div", 23);
255
266
  i0.ɵɵelementEnd()()();
256
267
  } if (rf & 2) {
257
268
  const ɵ$index_4_r3 = i0.ɵɵnextContext().$index;
@@ -272,12 +283,14 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Templ
272
283
  i0.ɵɵconditional(ctx_r1.showFunctionalRequirements || ctx_r1.showDataRequirements || ctx_r1.showTechnicalDesign || ctx_r1.showCode ? 23 : -1);
273
284
  i0.ɵɵadvance();
274
285
  i0.ɵɵattribute("data-tab-index", ɵ$index_4_r3);
275
- i0.ɵɵadvance(2);
286
+ i0.ɵɵadvance();
287
+ i0.ɵɵproperty("ngIf", !ctx_r1.currentError && ctx_r1.componentSpecs.has(ɵ$index_4_r3));
288
+ i0.ɵɵadvance();
276
289
  i0.ɵɵconditional(ctx_r1.currentError && ctx_r1.selectedReportOptionIndex === ɵ$index_4_r3 ? 26 : -1);
277
290
  } }
278
291
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
279
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
280
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_1_Template, 2, 2, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template, 27, 13, "ng-template", 6);
292
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
293
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_1_Template, 2, 2, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template, 27, 14, "ng-template", 5);
281
294
  i0.ɵɵelementEnd();
282
295
  } if (rf & 2) {
283
296
  const ɵ$index_4_r3 = ctx.$index;
@@ -286,9 +299,9 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_Template(rf, ctx) {
286
299
  } }
287
300
  function SkipDynamicUIComponentComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
288
301
  const _r1 = i0.ɵɵgetCurrentView();
289
- i0.ɵɵelementStart(0, "kendo-tabstrip", 3);
302
+ i0.ɵɵelementStart(0, "kendo-tabstrip", 2);
290
303
  i0.ɵɵlistener("tabSelect", function SkipDynamicUIComponentComponent_Conditional_0_Template_kendo_tabstrip_tabSelect_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTabSelect($event)); });
291
- i0.ɵɵrepeaterCreate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_Template, 3, 1, "kendo-tabstrip-tab", 4, i0.ɵɵrepeaterTrackByIdentity);
304
+ i0.ɵɵrepeaterCreate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_Template, 3, 1, "kendo-tabstrip-tab", 3, i0.ɵɵrepeaterTrackByIdentity);
292
305
  i0.ɵɵelementEnd();
293
306
  } if (rf & 2) {
294
307
  const ctx_r1 = i0.ɵɵnextContext();
@@ -297,9 +310,9 @@ function SkipDynamicUIComponentComponent_Conditional_0_Template(rf, ctx) { if (r
297
310
  i0.ɵɵrepeater(ctx_r1.reportOptions);
298
311
  } }
299
312
  function SkipDynamicUIComponentComponent_Conditional_1_button_20_Template(rf, ctx) { if (rf & 1) {
300
- const _r11 = i0.ɵɵgetCurrentView();
313
+ const _r12 = i0.ɵɵgetCurrentView();
301
314
  i0.ɵɵelementStart(0, "button", 24);
302
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createReportForOption(0)); });
315
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_20_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createReportForOption(0)); });
303
316
  i0.ɵɵelement(1, "i", 25);
304
317
  i0.ɵɵelementStart(2, "span");
305
318
  i0.ɵɵtext(3);
@@ -308,19 +321,19 @@ function SkipDynamicUIComponentComponent_Conditional_1_button_20_Template(rf, ct
308
321
  const ctx_r1 = i0.ɵɵnextContext(2);
309
322
  i0.ɵɵproperty("disabled", ctx_r1.isCreatingReport);
310
323
  i0.ɵɵadvance(3);
311
- i0.ɵɵtextInterpolate1("Create ", ctx_r1.reportOptions[0] ? ctx_r1.getComponentTypeName(ctx_r1.reportOptions[0]) : "Component", "");
324
+ i0.ɵɵtextInterpolate1("Create ", ctx_r1.firstOptionComponentTypeName, "");
312
325
  } }
313
326
  function SkipDynamicUIComponentComponent_Conditional_1_button_21_Template(rf, ctx) { if (rf & 1) {
314
- const _r12 = i0.ɵɵgetCurrentView();
327
+ const _r13 = i0.ɵɵgetCurrentView();
315
328
  i0.ɵɵelementStart(0, "button", 26);
316
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PrintReport()); });
329
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_21_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PrintReport()); });
317
330
  i0.ɵɵelement(1, "i", 27);
318
331
  i0.ɵɵelementStart(2, "span");
319
332
  i0.ɵɵtext(3, "Print Report");
320
333
  i0.ɵɵelementEnd()();
321
334
  } }
322
335
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
323
- i0.ɵɵelement(0, "i", 11);
336
+ i0.ɵɵelement(0, "i", 10);
324
337
  i0.ɵɵtext(1, " Functional Requirements ");
325
338
  } }
326
339
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
@@ -333,14 +346,14 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditiona
333
346
  i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedFunctionalRequirements(ctx_r1.reportOptions[0]), i0.ɵɵsanitizeHtml);
334
347
  } }
335
348
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_Template(rf, ctx) { if (rf & 1) {
336
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
337
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_ng_template_2_Template, 2, 1, "ng-template", 6);
349
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
350
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_ng_template_2_Template, 2, 1, "ng-template", 5);
338
351
  i0.ɵɵelementEnd();
339
352
  } if (rf & 2) {
340
353
  i0.ɵɵproperty("selected", true);
341
354
  } }
342
355
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {
343
- i0.ɵɵelement(0, "i", 13);
356
+ i0.ɵɵelement(0, "i", 12);
344
357
  i0.ɵɵtext(1, " Data Requirements ");
345
358
  } }
346
359
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
@@ -353,15 +366,15 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditiona
353
366
  i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedDataRequirements(ctx_r1.reportOptions[0]), i0.ɵɵsanitizeHtml);
354
367
  } }
355
368
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_Template(rf, ctx) { if (rf & 1) {
356
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
357
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_ng_template_2_Template, 2, 1, "ng-template", 6);
369
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
370
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_ng_template_2_Template, 2, 1, "ng-template", 5);
358
371
  i0.ɵɵelementEnd();
359
372
  } if (rf & 2) {
360
373
  const ctx_r1 = i0.ɵɵnextContext(3);
361
374
  i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements);
362
375
  } }
363
376
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {
364
- i0.ɵɵelement(0, "i", 15);
377
+ i0.ɵɵelement(0, "i", 14);
365
378
  i0.ɵɵtext(1, " Technical Design ");
366
379
  } }
367
380
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {
@@ -374,20 +387,20 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditiona
374
387
  i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedTechnicalDesign(ctx_r1.reportOptions[0]), i0.ɵɵsanitizeHtml);
375
388
  } }
376
389
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_Template(rf, ctx) { if (rf & 1) {
377
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
378
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_ng_template_2_Template, 2, 1, "ng-template", 6);
390
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
391
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_ng_template_2_Template, 2, 1, "ng-template", 5);
379
392
  i0.ɵɵelementEnd();
380
393
  } if (rf & 2) {
381
394
  const ctx_r1 = i0.ɵɵnextContext(3);
382
395
  i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements);
383
396
  } }
384
397
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_ng_template_1_Template(rf, ctx) { if (rf & 1) {
385
- i0.ɵɵelement(0, "i", 17);
398
+ i0.ɵɵelement(0, "i", 16);
386
399
  i0.ɵɵtext(1, " Code ");
387
400
  } }
388
401
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
389
402
  i0.ɵɵelementStart(0, "div", 34);
390
- i0.ɵɵelement(1, "mj-code-editor", 53);
403
+ i0.ɵɵelement(1, "mj-code-editor", 54);
391
404
  i0.ɵɵelementEnd();
392
405
  } if (rf & 2) {
393
406
  const ctx_r1 = i0.ɵɵnextContext(4);
@@ -395,20 +408,20 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditiona
395
408
  i0.ɵɵproperty("language", "javascript")("value", ctx_r1.getComponentCode(ctx_r1.reportOptions[0]))("autoFocus", false)("indentWithTab", true)("readonly", true);
396
409
  } }
397
410
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_Template(rf, ctx) { if (rf & 1) {
398
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 4);
399
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_ng_template_1_Template, 2, 0, "ng-template", 5)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_ng_template_2_Template, 2, 5, "ng-template", 6);
411
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
412
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_ng_template_2_Template, 2, 5, "ng-template", 5);
400
413
  i0.ɵɵelementEnd();
401
414
  } if (rf & 2) {
402
415
  const ctx_r1 = i0.ɵɵnextContext(3);
403
416
  i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements && !ctx_r1.showTechnicalDesign);
404
417
  } }
405
418
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
406
- const _r13 = i0.ɵɵgetCurrentView();
419
+ const _r14 = i0.ɵɵgetCurrentView();
407
420
  i0.ɵɵelementStart(0, "div", 28)(1, "kendo-tabstrip", 29);
408
- i0.ɵɵtemplate(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_Template, 3, 1, "kendo-tabstrip-tab", 4)(3, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_Template, 3, 1, "kendo-tabstrip-tab", 4)(4, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_Template, 3, 1, "kendo-tabstrip-tab", 4)(5, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_Template, 3, 1, "kendo-tabstrip-tab", 4);
421
+ i0.ɵɵtemplate(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_2_Template, 3, 1, "kendo-tabstrip-tab", 3)(3, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_3_Template, 3, 1, "kendo-tabstrip-tab", 3)(4, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_4_Template, 3, 1, "kendo-tabstrip-tab", 3)(5, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Conditional_5_Template, 3, 1, "kendo-tabstrip-tab", 3);
409
422
  i0.ɵɵelementEnd()();
410
423
  i0.ɵɵelementStart(6, "div", 30);
411
- i0.ɵɵlistener("mousedown", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template_div_mousedown_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.startResize($event)); })("touchstart", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template_div_touchstart_6_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.startResize($event)); });
424
+ i0.ɵɵlistener("mousedown", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template_div_mousedown_6_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.startResize($event)); })("touchstart", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template_div_touchstart_6_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.startResize($event)); });
412
425
  i0.ɵɵelement(7, "div", 31);
413
426
  i0.ɵɵelementEnd();
414
427
  } if (rf & 2) {
@@ -424,10 +437,10 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template(r
424
437
  i0.ɵɵconditional(ctx_r1.showCode && ctx_r1.reportOptions[0] ? 5 : -1);
425
438
  } }
426
439
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Conditional_19_Template(rf, ctx) { if (rf & 1) {
427
- i0.ɵɵelementStart(0, "details", 44)(1, "summary", 50);
440
+ i0.ɵɵelementStart(0, "details", 45)(1, "summary", 51);
428
441
  i0.ɵɵtext(2, "Technical Details (click to expand)");
429
442
  i0.ɵɵelementEnd();
430
- i0.ɵɵelementStart(3, "pre", 51);
443
+ i0.ɵɵelementStart(3, "pre", 52);
431
444
  i0.ɵɵtext(4);
432
445
  i0.ɵɵelementEnd()();
433
446
  } if (rf & 2) {
@@ -436,20 +449,20 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Conditiona
436
449
  i0.ɵɵtextInterpolate(ctx_r1.currentError.technicalDetails);
437
450
  } }
438
451
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
439
- const _r14 = i0.ɵɵgetCurrentView();
440
- i0.ɵɵelementStart(0, "div", 52)(1, "div", 54)(2, "div", 37)(3, "button", 38);
441
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
442
- i0.ɵɵelement(4, "span", 39);
452
+ const _r15 = i0.ɵɵgetCurrentView();
453
+ i0.ɵɵelementStart(0, "div", 53)(1, "div", 55)(2, "div", 38)(3, "button", 39);
454
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
455
+ i0.ɵɵelement(4, "span", 40);
443
456
  i0.ɵɵtext(5, " Copy Error Details ");
444
457
  i0.ɵɵelementEnd();
445
- i0.ɵɵelementStart(6, "h3", 40);
446
- i0.ɵɵelement(7, "span", 41);
458
+ i0.ɵɵelementStart(6, "h3", 41);
459
+ i0.ɵɵelement(7, "span", 42);
447
460
  i0.ɵɵtext(8, " Component Rendering Error ");
448
461
  i0.ɵɵelementEnd()();
449
- i0.ɵɵelementStart(9, "p", 42);
462
+ i0.ɵɵelementStart(9, "p", 43);
450
463
  i0.ɵɵtext(10, " The selected component option could not be rendered due to the following error: ");
451
464
  i0.ɵɵelementEnd();
452
- i0.ɵɵelementStart(11, "div", 43)(12, "strong");
465
+ i0.ɵɵelementStart(11, "div", 44)(12, "strong");
453
466
  i0.ɵɵtext(13, "Error Type:");
454
467
  i0.ɵɵelementEnd();
455
468
  i0.ɵɵtext(14);
@@ -458,20 +471,20 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template(r
458
471
  i0.ɵɵtext(17, "Details:");
459
472
  i0.ɵɵelementEnd();
460
473
  i0.ɵɵtext(18);
461
- i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Conditional_19_Template, 5, 1, "details", 44);
474
+ i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Conditional_19_Template, 5, 1, "details", 45);
462
475
  i0.ɵɵelementEnd();
463
- i0.ɵɵelementStart(20, "div", 45)(21, "strong", 46);
476
+ i0.ɵɵelementStart(20, "div", 46)(21, "strong", 47);
464
477
  i0.ɵɵtext(22, "What to do:");
465
478
  i0.ɵɵelementEnd();
466
- i0.ɵɵelementStart(23, "ol", 47)(24, "li");
479
+ i0.ɵɵelementStart(23, "ol", 48)(24, "li");
467
480
  i0.ɵɵtext(25, "Copy the error details and send them back to Skip in the chat to get a corrected version");
468
481
  i0.ɵɵelementEnd();
469
482
  i0.ɵɵelementStart(26, "li");
470
483
  i0.ɵɵtext(27, "Contact your IT department if the issue persists");
471
484
  i0.ɵɵelementEnd()()();
472
- i0.ɵɵelementStart(28, "button", 48);
473
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
474
- i0.ɵɵelement(29, "span", 49);
485
+ i0.ɵɵelementStart(28, "button", 49);
486
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
487
+ i0.ɵɵelement(29, "span", 50);
475
488
  i0.ɵɵtext(30, " Retry ");
476
489
  i0.ɵɵelementEnd()()();
477
490
  } if (rf & 2) {
@@ -483,40 +496,55 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template(r
483
496
  i0.ɵɵadvance();
484
497
  i0.ɵɵconditional(ctx_r1.currentError.technicalDetails ? 19 : -1);
485
498
  } }
499
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_mj_react_component_1_Template(rf, ctx) { if (rf & 1) {
500
+ const _r16 = i0.ɵɵgetCurrentView();
501
+ i0.ɵɵelementStart(0, "mj-react-component", 36);
502
+ i0.ɵɵlistener("stateChange", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_mj_react_component_1_Template_mj_react_component_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onStateChange(0, $event)); })("componentEvent", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_mj_react_component_1_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onComponentEvent(0, $event)); })("refreshData", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_mj_react_component_1_Template_mj_react_component_refreshData_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleRefreshData()); })("openEntityRecord", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_mj_react_component_1_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
503
+ i0.ɵɵelementEnd();
504
+ } if (rf & 2) {
505
+ const ctx_r1 = i0.ɵɵnextContext(3);
506
+ i0.ɵɵproperty("component", ctx_r1.componentSpecs.get(0))("data", ctx_r1.getFlattenedDataContext())("state", ctx_r1.userStates.get(0) || i0.ɵɵpureFunction0(5, _c0))("utilities", ctx_r1.utilities)("styles", ctx_r1.componentStyles || undefined);
507
+ } }
486
508
  function SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_Template(rf, ctx) { if (rf & 1) {
487
- i0.ɵɵelement(0, "div", 22, 0);
509
+ i0.ɵɵelementStart(0, "div", 21);
510
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_mj_react_component_1_Template, 1, 6, "mj-react-component", 22);
511
+ i0.ɵɵelementEnd();
512
+ } if (rf & 2) {
513
+ const ctx_r1 = i0.ɵɵnextContext(2);
514
+ i0.ɵɵadvance();
515
+ i0.ɵɵproperty("ngIf", ctx_r1.componentSpecs.has(0));
488
516
  } }
489
517
  function SkipDynamicUIComponentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
490
- const _r10 = i0.ɵɵgetCurrentView();
491
- i0.ɵɵelementStart(0, "div", 2)(1, "div", 8)(2, "div", 9)(3, "button", 10);
492
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowFunctionalRequirements()); });
493
- i0.ɵɵelement(4, "i", 11);
518
+ const _r11 = i0.ɵɵgetCurrentView();
519
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 7)(2, "div", 8)(3, "button", 9);
520
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowFunctionalRequirements()); });
521
+ i0.ɵɵelement(4, "i", 10);
494
522
  i0.ɵɵelementStart(5, "span");
495
523
  i0.ɵɵtext(6, "Functional");
496
524
  i0.ɵɵelementEnd()();
497
- i0.ɵɵelementStart(7, "button", 12);
498
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowDataRequirements()); });
499
- i0.ɵɵelement(8, "i", 13);
525
+ i0.ɵɵelementStart(7, "button", 11);
526
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowDataRequirements()); });
527
+ i0.ɵɵelement(8, "i", 12);
500
528
  i0.ɵɵelementStart(9, "span");
501
529
  i0.ɵɵtext(10, "Data");
502
530
  i0.ɵɵelementEnd()();
503
- i0.ɵɵelementStart(11, "button", 14);
504
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowTechnicalDesign()); });
505
- i0.ɵɵelement(12, "i", 15);
531
+ i0.ɵɵelementStart(11, "button", 13);
532
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowTechnicalDesign()); });
533
+ i0.ɵɵelement(12, "i", 14);
506
534
  i0.ɵɵelementStart(13, "span");
507
535
  i0.ɵɵtext(14, "Technical");
508
536
  i0.ɵɵelementEnd()();
509
- i0.ɵɵelementStart(15, "button", 16);
510
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowCode()); });
511
- i0.ɵɵelement(16, "i", 17);
537
+ i0.ɵɵelementStart(15, "button", 15);
538
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowCode()); });
539
+ i0.ɵɵelement(16, "i", 16);
512
540
  i0.ɵɵelementStart(17, "span");
513
541
  i0.ɵɵtext(18, "Code");
514
542
  i0.ɵɵelementEnd()()();
515
- i0.ɵɵelementStart(19, "div", 18);
516
- i0.ɵɵtemplate(20, SkipDynamicUIComponentComponent_Conditional_1_button_20_Template, 4, 2, "button", 19)(21, SkipDynamicUIComponentComponent_Conditional_1_button_21_Template, 4, 0, "button", 20);
543
+ i0.ɵɵelementStart(19, "div", 17);
544
+ i0.ɵɵtemplate(20, SkipDynamicUIComponentComponent_Conditional_1_button_20_Template, 4, 2, "button", 18)(21, SkipDynamicUIComponentComponent_Conditional_1_button_21_Template, 4, 0, "button", 19);
517
545
  i0.ɵɵelementEnd()();
518
- i0.ɵɵelementStart(22, "div", 21);
519
- i0.ɵɵtemplate(23, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template, 8, 6)(24, SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template, 31, 3, "div", 52)(25, SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_Template, 2, 0, "div", 22);
546
+ i0.ɵɵelementStart(22, "div", 20);
547
+ i0.ɵɵtemplate(23, SkipDynamicUIComponentComponent_Conditional_1_Conditional_23_Template, 8, 6)(24, SkipDynamicUIComponentComponent_Conditional_1_Conditional_24_Template, 31, 3, "div", 53)(25, SkipDynamicUIComponentComponent_Conditional_1_Conditional_25_Template, 2, 1, "div", 21);
520
548
  i0.ɵɵelementEnd()();
521
549
  } if (rf & 2) {
522
550
  const ctx_r1 = i0.ɵɵnextContext();
@@ -549,11 +577,13 @@ export class SkipDynamicUIComponentComponent {
549
577
  matchingReportID = null;
550
578
  DrillDownEvent = new EventEmitter();
551
579
  CreateReportRequested = new EventEmitter();
552
- htmlContainers;
580
+ reactComponents;
553
581
  // Properties for handling multiple report options
554
582
  reportOptions = [];
555
583
  selectedReportOptionIndex = 0;
556
584
  currentError = null;
585
+ // Cached component type name to avoid expression change errors
586
+ _cachedComponentTypeName = 'Component';
557
587
  isCreatingReport = false;
558
588
  // Toggle states for showing/hiding component details
559
589
  showFunctionalRequirements = false;
@@ -565,15 +595,12 @@ export class SkipDynamicUIComponentComponent {
565
595
  isResizing = false;
566
596
  startY = 0;
567
597
  startHeight = 0;
568
- // Cache for React component hosts - lazy loaded per option
569
- reactHostCache = new Map();
570
- currentHostIndex = null;
571
- callbacks = {
572
- RefreshData: () => this.handleRefreshData(),
573
- OpenEntityRecord: (entityName, key) => this.handleOpenEntityRecord(entityName, key),
574
- UpdateUserState: (userState) => this.handleUpdateUserState(userState),
575
- NotifyEvent: (eventName, eventData) => this.handleNotifyEvent(eventName, eventData)
576
- };
598
+ // Cache for component specs and user states
599
+ componentSpecs = new Map();
600
+ userStates = new Map();
601
+ utilities = null;
602
+ componentStyles = null;
603
+ // Event handlers from React components
577
604
  constructor(sanitizer, cdr, ngZone) {
578
605
  this.sanitizer = sanitizer;
579
606
  this.cdr = cdr;
@@ -633,13 +660,12 @@ export class SkipDynamicUIComponentComponent {
633
660
  // Update the component info - this can fail if placeholders are missing
634
661
  this.UIComponentCode = BuildSkipComponentCompleteCode(selectedOption.option);
635
662
  this.ComponentObjectName = selectedOption.option.componentName;
636
- // Simply create or reuse the React host for this option
637
- // The tab component handles visibility automatically
638
- if (!this.reactHostCache.has(this.selectedReportOptionIndex)) {
639
- // Create a new host for this option
640
- this.createReactHostForOption(this.selectedReportOptionIndex);
663
+ // Create or update the component spec for this option
664
+ if (!this.componentSpecs.has(this.selectedReportOptionIndex)) {
665
+ this.createComponentSpecForOption(this.selectedReportOptionIndex);
666
+ // Trigger change detection after modifying componentSpecs
667
+ this.cdr.detectChanges();
641
668
  }
642
- this.currentHostIndex = this.selectedReportOptionIndex;
643
669
  }
644
670
  catch (error) {
645
671
  console.error('Failed to build component code:', error);
@@ -654,9 +680,10 @@ export class SkipDynamicUIComponentComponent {
654
680
  }
655
681
  }
656
682
  async PrintReport() {
657
- const currentHost = this.getCurrentReactHost();
658
- if (currentHost) {
659
- currentHost.print();
683
+ const currentComponent = this.getCurrentReactComponent();
684
+ if (currentComponent) {
685
+ // React component handles printing internally
686
+ window.print();
660
687
  }
661
688
  else {
662
689
  window.print();
@@ -682,20 +709,19 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
682
709
  });
683
710
  }
684
711
  /**
685
- * Get the container element for a specific option index
712
+ * Get the React component for a specific option index
686
713
  */
687
- getContainerForOption(optionIndex) {
688
- if (!this.htmlContainers || this.htmlContainers.length === 0) {
714
+ getReactComponentForOption(optionIndex) {
715
+ if (!this.reactComponents || this.reactComponents.length === 0) {
689
716
  return null;
690
717
  }
691
718
  if (this.reportOptions.length === 1) {
692
- // Single option - use the only container
693
- return this.htmlContainers.first?.nativeElement || null;
719
+ // Single option - use the only component
720
+ return this.reactComponents.first || null;
694
721
  }
695
722
  else {
696
- // Multiple options - find container by data-tab-index
697
- const container = this.htmlContainers.find(ref => ref.nativeElement.getAttribute('data-tab-index') === optionIndex.toString());
698
- return container?.nativeElement || null;
723
+ // Multiple options - find by index
724
+ return this.reactComponents.toArray()[optionIndex] || null;
699
725
  }
700
726
  }
701
727
  /**
@@ -704,16 +730,10 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
704
730
  retryCurrentOption() {
705
731
  // Clear the error
706
732
  this.currentError = null;
707
- // Remove the cached host for this option to force recreation
708
- if (this.reactHostCache.has(this.selectedReportOptionIndex)) {
709
- const host = this.reactHostCache.get(this.selectedReportOptionIndex);
710
- if (host) {
711
- host.destroy();
712
- }
713
- this.reactHostCache.delete(this.selectedReportOptionIndex);
714
- }
715
- // Try creating it again
716
- this.createReactHostForOption(this.selectedReportOptionIndex);
733
+ // Re-create the component spec
734
+ this.createComponentSpecForOption(this.selectedReportOptionIndex);
735
+ // Trigger change detection
736
+ this.cdr.detectChanges();
717
737
  }
718
738
  /**
719
739
  * Handle create report request for a specific option
@@ -730,6 +750,12 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
730
750
  const type = option.option.componentType || 'report';
731
751
  return type.charAt(0).toUpperCase() + type.slice(1);
732
752
  }
753
+ /**
754
+ * Get the cached component type name for the first option to avoid change detection errors
755
+ */
756
+ get firstOptionComponentTypeName() {
757
+ return this._cachedComponentTypeName;
758
+ }
733
759
  /**
734
760
  * Toggle methods for showing/hiding component details
735
761
  */
@@ -879,51 +905,40 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
879
905
  if (this.SkipData) {
880
906
  this.setupReportOptions(this.SkipData);
881
907
  }
882
- // Wait for ViewChildren to be available
883
- setTimeout(() => {
884
- if (this.UIComponentCode && this.ComponentObjectName && this.SkipData) {
885
- // Create the initial React host for the first option
886
- this.createReactHostForOption(this.selectedReportOptionIndex);
887
- }
888
- });
908
+ // Initialize utilities and styles once
909
+ const md = new Metadata();
910
+ this.utilities = this.SetupUtilities(md);
911
+ this.componentStyles = this.SetupStyles();
912
+ // Create component specs for all options
913
+ // Use Promise.resolve to avoid ExpressionChangedAfterItHasBeenCheckedError
914
+ if (this.reportOptions.length > 0) {
915
+ Promise.resolve().then(() => {
916
+ this.reportOptions.forEach((_, index) => {
917
+ this.createComponentSpecForOption(index);
918
+ });
919
+ this.cdr.detectChanges();
920
+ });
921
+ }
889
922
  }
890
923
  ngOnDestroy() {
891
- // Clean up all cached React hosts
892
- this.reactHostCache.forEach(host => {
893
- try {
894
- host.destroy();
895
- }
896
- catch (e) {
897
- console.error('Error destroying React host:', e);
898
- }
899
- });
900
- this.reactHostCache.clear();
901
- // Clean up registered components from the GlobalComponentRegistry
902
- // Note: We don't remove them as they might be used by other instances
903
- // The registry is designed to be a singleton that persists across component instances
924
+ // Clean up component specs and states
925
+ this.componentSpecs.clear();
926
+ this.userStates.clear();
927
+ // The MJReactComponent handles its own cleanup
904
928
  }
905
929
  ngOnChanges(changes) {
906
- if (changes['SkipData'] && !changes['SkipData'].firstChange) {
907
- // Update all cached React components with new data
908
- const newData = this.getFlattenedDataContext();
909
- this.reactHostCache.forEach(host => {
910
- try {
911
- host.updateState('data', newData);
912
- }
913
- catch (e) {
914
- console.error('Error updating React host data:', e);
915
- }
916
- });
930
+ if (changes['SkipData']) {
931
+ const skipData = changes['SkipData'].currentValue;
932
+ if (skipData) {
933
+ this.setupReportOptions(skipData);
934
+ }
917
935
  }
918
936
  }
919
937
  /**
920
- * Get the currently active React host
938
+ * Get the currently active React component
921
939
  */
922
- getCurrentReactHost() {
923
- if (this.currentHostIndex !== null && this.reactHostCache.has(this.currentHostIndex)) {
924
- return this.reactHostCache.get(this.currentHostIndex) || null;
925
- }
926
- return null;
940
+ getCurrentReactComponent() {
941
+ return this.getReactComponentForOption(this.selectedReportOptionIndex);
927
942
  }
928
943
  _skipData;
929
944
  get SkipData() {
@@ -969,65 +984,35 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
969
984
  const bestOption = this.reportOptions[0];
970
985
  this.UIComponentCode = BuildSkipComponentCompleteCode(bestOption.option);
971
986
  this.ComponentObjectName = bestOption.option.componentName;
987
+ // Update cached component type name after current change detection cycle
988
+ Promise.resolve().then(() => {
989
+ this._cachedComponentTypeName = this.getComponentTypeName(bestOption);
990
+ this.cdr.detectChanges();
991
+ });
972
992
  }
973
993
  }
974
994
  /**
975
- * Create a React host for a specific option index
995
+ * Create a component spec for a specific option index
976
996
  */
977
- async createReactHostForOption(optionIndex) {
997
+ createComponentSpecForOption(optionIndex) {
978
998
  const option = this.reportOptions[optionIndex];
979
999
  if (!option)
980
1000
  return;
981
- const container = this.getContainerForOption(optionIndex);
982
- if (!container)
983
- return;
984
1001
  try {
985
1002
  const component = option.option;
986
- const md = new Metadata();
987
- const data = this.getFlattenedDataContext();
988
- // Create the React component host directly in the tab container
989
- // The host will handle registration automatically
990
- const reactHost = new SkipReactComponentHost({
991
- component,
992
- container: container,
993
- callbacks: this.callbacks,
994
- data: data,
995
- utilities: this.SetupUtilities(md),
996
- styles: this.SetupStyles()
997
- // metadata will be auto-populated from component.childComponents
998
- });
999
- // Initialize and render the React component
1000
- await reactHost.initialize();
1001
- // Cache the host
1002
- this.reactHostCache.set(optionIndex, reactHost);
1003
- // Update current index if this is the selected option
1004
- if (optionIndex === this.selectedReportOptionIndex) {
1005
- this.currentHostIndex = optionIndex;
1003
+ // Store the component spec
1004
+ this.componentSpecs.set(optionIndex, component);
1005
+ // Initialize user state if not exists
1006
+ if (!this.userStates.has(optionIndex)) {
1007
+ this.userStates.set(optionIndex, {});
1006
1008
  }
1007
1009
  }
1008
1010
  catch (e) {
1009
- console.error('Error creating React host:', e);
1011
+ console.error('Error creating component spec:', e);
1010
1012
  // Determine the type of error and create a user-friendly message
1011
- let errorType = 'Component Initialization Error';
1012
- let errorMessage = 'Failed to initialize the React component.';
1013
+ let errorType = 'Component Specification Error';
1014
+ let errorMessage = 'Failed to create component specification.';
1013
1015
  let technicalDetails = e.toString();
1014
- if (e.message?.includes('JSX transpilation failed')) {
1015
- errorType = 'Code Compilation Error';
1016
- errorMessage = 'The component code could not be compiled. This usually indicates a syntax error in the generated code.';
1017
- technicalDetails = e.message;
1018
- }
1019
- else if (e.message?.includes('is not defined')) {
1020
- errorType = 'Missing Dependency';
1021
- errorMessage = 'The component is trying to use a feature or library that is not available.';
1022
- }
1023
- else if (e.message?.includes('Missing required child components')) {
1024
- errorType = 'Incomplete Component Specification';
1025
- errorMessage = e.message;
1026
- }
1027
- else if (e.message?.includes('Cannot read properties')) {
1028
- errorType = 'Property Access Error';
1029
- errorMessage = 'The component is trying to access data that doesn\'t exist. This often happens when property names don\'t match the data structure.';
1030
- }
1031
1016
  this.currentError = {
1032
1017
  type: errorType,
1033
1018
  message: errorMessage,
@@ -1036,6 +1021,40 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1036
1021
  LogError(e);
1037
1022
  }
1038
1023
  }
1024
+ /**
1025
+ * Handle state change events from React components
1026
+ */
1027
+ onStateChange(optionIndex, event) {
1028
+ const currentState = this.userStates.get(optionIndex) || {};
1029
+ this.userStates.set(optionIndex, {
1030
+ ...currentState,
1031
+ [event.path]: event.value
1032
+ });
1033
+ // Handle any additional state change logic
1034
+ this.handleUpdateUserState({ [event.path]: event.value });
1035
+ }
1036
+ /**
1037
+ * Handle component events from React components
1038
+ */
1039
+ onComponentEvent(optionIndex, event) {
1040
+ if (event.type === 'error') {
1041
+ this.currentError = {
1042
+ type: event.payload.source || 'React Component Error',
1043
+ message: event.payload.error || 'An unknown error occurred',
1044
+ technicalDetails: event.payload.errorInfo || ''
1045
+ };
1046
+ }
1047
+ else {
1048
+ this.handleNotifyEvent(event.type, event.payload);
1049
+ }
1050
+ }
1051
+ /**
1052
+ * Handle open entity record events
1053
+ */
1054
+ onOpenEntityRecord(event) {
1055
+ const key = new CompositeKey([{ FieldName: 'ID', Value: event.recordId }]);
1056
+ this.handleOpenEntityRecord(event.entityName, key);
1057
+ }
1039
1058
  getFlattenedDataContext() {
1040
1059
  const flattenedDataContext = {};
1041
1060
  if (this.SkipData?.dataContext) {
@@ -1282,28 +1301,24 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1282
1301
  return cb;
1283
1302
  }
1284
1303
  async refreshReport(data) {
1285
- const currentHost = this.getCurrentReactHost();
1286
- if (currentHost) {
1287
- currentHost.refresh(data);
1288
- }
1289
- else {
1290
- // If no React host is available, create one for the current option
1291
- this.createReactHostForOption(this.selectedReportOptionIndex);
1304
+ const currentComponent = this.getCurrentReactComponent();
1305
+ if (currentComponent) {
1306
+ currentComponent.refresh(data);
1292
1307
  }
1293
1308
  }
1294
1309
  static ɵfac = function SkipDynamicUIComponentComponent_Factory(t) { return new (t || SkipDynamicUIComponentComponent)(i0.ɵɵdirectiveInject(i1.DomSanitizer), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.NgZone)); };
1295
1310
  static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SkipDynamicUIComponentComponent, selectors: [["skip-dynamic-ui-component"]], viewQuery: function SkipDynamicUIComponentComponent_Query(rf, ctx) { if (rf & 1) {
1296
- i0.ɵɵviewQuery(_c0, 5);
1311
+ i0.ɵɵviewQuery(MJReactComponent, 5);
1297
1312
  } if (rf & 2) {
1298
1313
  let _t;
1299
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.htmlContainers = _t);
1314
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.reactComponents = _t);
1300
1315
  } }, hostBindings: function SkipDynamicUIComponentComponent_HostBindings(rf, ctx) { if (rf & 1) {
1301
1316
  i0.ɵɵlistener("resize", function SkipDynamicUIComponentComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, false, i0.ɵɵresolveWindow);
1302
- } }, inputs: { UIComponentCode: "UIComponentCode", ComponentObjectName: "ComponentObjectName", ShowPrintReport: "ShowPrintReport", ShowReportOptionsToggle: "ShowReportOptionsToggle", ShowCreateReportButton: "ShowCreateReportButton", matchingReportID: "matchingReportID", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent", CreateReportRequested: "CreateReportRequested" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 1, consts: [["htmlContainer", ""], [2, "height", "100%", "display", "flex", "flex-direction", "column", 3, "keepTabContent"], [2, "height", "100%", "display", "flex", "flex-direction", "column"], [2, "height", "100%", "display", "flex", "flex-direction", "column", 3, "tabSelect", "keepTabContent"], [3, "selected"], ["kendoTabTitle", ""], ["kendoTabContent", ""], [1, "fa-solid", "fa-star", "star-icon"], [1, "tab-action-bar"], [1, "tab-actions-left"], ["title", "Toggle Functional Requirements", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-list-check"], ["title", "Toggle Data Requirements", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-database"], ["title", "Toggle Technical Design", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-cogs"], ["title", "Toggle Code View", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-code"], [1, "tab-actions-right"], ["class", "tab-action-button create-button", 3, "disabled", "click", 4, "ngIf"], ["class", "tab-action-button print-button", "title", "Print Report", 3, "click", 4, "ngIf"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "0", "overflow", "hidden"], [2, "flex", "1", "position", "relative", "min-height", "0", "overflow", "auto"], [2, "top", "0", "left", "0", "right", "0", "bottom", "0", "display", "flex", "align-items", "flex-start", "justify-content", "center", "padding-top", "20px", "background", "rgba(255, 255, 255, 0.95)", "z-index", "10"], [1, "tab-action-button", "create-button", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], ["title", "Print Report", 1, "tab-action-button", "print-button", 3, "click"], [1, "fa-solid", "fa-print"], [1, "details-panel"], [2, "height", "100%"], [1, "panel-resizer", 3, "mousedown", "touchstart"], [1, "resizer-handle"], [1, "details-content"], [3, "innerHTML"], [1, "details-content", "code-content"], [2, "height", "100%", 3, "value", "language", "autoFocus", "indentWithTab", "readonly"], [2, "width", "90%", "max-width", "600px", "height", "500px", "background-color", "#f8f9fa", "border", "2px solid #dc3545", "border-radius", "8px", "padding", "20px", "overflow-y", "auto", "box-shadow", "0 4px 6px rgba(0, 0, 0, 0.1)"], [2, "position", "relative"], ["kendoButton", "", 2, "position", "absolute", "top", "0", "right", "0", "font-size", "12px", 3, "click"], [1, "fa-solid", "fa-copy"], [2, "color", "#dc3545", "margin-top", "0", "margin-right", "150px", "font-size", "18px"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "margin-bottom", "10px", "font-size", "14px"], [2, "background-color", "#fff", "border", "1px solid #dee2e6", "border-radius", "4px", "padding", "12px", "margin-bottom", "12px", "font-family", "'Courier New', monospace", "font-size", "12px"], [2, "margin-top", "8px"], [2, "background-color", "#e7f3ff", "border", "1px solid #b3d9ff", "border-radius", "4px", "padding", "12px", "margin-bottom", "12px"], [2, "font-size", "14px"], [2, "margin", "8px 0 0 20px", "padding", "0", "font-size", "13px"], ["kendoButton", "", 2, "font-size", "13px", 3, "click"], [1, "fa-solid", "fa-rotate"], [2, "cursor", "pointer", "color", "#0056b3"], [2, "margin-top", "8px", "white-space", "pre-wrap", "word-break", "break-word", "font-size", "11px"], [2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "min-height", "400px", "padding", "20px", "background", "rgba(255, 255, 255, 0.95)"], [2, "height", "100%", 3, "language", "value", "autoFocus", "indentWithTab", "readonly"], [2, "width", "90%", "max-width", "600px", "max-height", "80vh", "background-color", "#f8f9fa", "border", "2px solid #dc3545", "border-radius", "8px", "padding", "20px", "overflow-y", "auto", "box-shadow", "0 4px 6px rgba(0, 0, 0, 0.1)"]], template: function SkipDynamicUIComponentComponent_Template(rf, ctx) { if (rf & 1) {
1303
- i0.ɵɵtemplate(0, SkipDynamicUIComponentComponent_Conditional_0_Template, 3, 1, "kendo-tabstrip", 1)(1, SkipDynamicUIComponentComponent_Conditional_1_Template, 26, 12, "div", 2);
1317
+ } }, inputs: { UIComponentCode: "UIComponentCode", ComponentObjectName: "ComponentObjectName", ShowPrintReport: "ShowPrintReport", ShowReportOptionsToggle: "ShowReportOptionsToggle", ShowCreateReportButton: "ShowCreateReportButton", matchingReportID: "matchingReportID", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent", CreateReportRequested: "CreateReportRequested" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 1, consts: [[2, "height", "100%", "display", "flex", "flex-direction", "column", 3, "keepTabContent"], [2, "height", "100%", "display", "flex", "flex-direction", "column"], [2, "height", "100%", "display", "flex", "flex-direction", "column", 3, "tabSelect", "keepTabContent"], [3, "selected"], ["kendoTabTitle", ""], ["kendoTabContent", ""], [1, "fa-solid", "fa-star", "star-icon"], [1, "tab-action-bar"], [1, "tab-actions-left"], ["title", "Toggle Functional Requirements", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-list-check"], ["title", "Toggle Data Requirements", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-database"], ["title", "Toggle Technical Design", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-cogs"], ["title", "Toggle Code View", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "fa-solid", "fa-code"], [1, "tab-actions-right"], ["class", "tab-action-button create-button", 3, "disabled", "click", 4, "ngIf"], ["class", "tab-action-button print-button", "title", "Print Report", 3, "click", 4, "ngIf"], [2, "flex", "1", "display", "flex", "flex-direction", "column", "min-height", "0", "overflow", "hidden"], [2, "flex", "1", "position", "relative", "min-height", "0", "overflow", "auto"], ["style", "width: 100%; height: 100%;", 3, "component", "data", "state", "utilities", "styles", "stateChange", "componentEvent", "refreshData", "openEntityRecord", 4, "ngIf"], [2, "top", "0", "left", "0", "right", "0", "bottom", "0", "display", "flex", "align-items", "flex-start", "justify-content", "center", "padding-top", "20px", "background", "rgba(255, 255, 255, 0.95)", "z-index", "10"], [1, "tab-action-button", "create-button", 3, "click", "disabled"], [1, "fa-solid", "fa-plus"], ["title", "Print Report", 1, "tab-action-button", "print-button", 3, "click"], [1, "fa-solid", "fa-print"], [1, "details-panel"], [2, "height", "100%"], [1, "panel-resizer", 3, "mousedown", "touchstart"], [1, "resizer-handle"], [1, "details-content"], [3, "innerHTML"], [1, "details-content", "code-content"], [2, "height", "100%", 3, "value", "language", "autoFocus", "indentWithTab", "readonly"], [2, "width", "100%", "height", "100%", 3, "stateChange", "componentEvent", "refreshData", "openEntityRecord", "component", "data", "state", "utilities", "styles"], [2, "width", "90%", "max-width", "600px", "height", "500px", "background-color", "#f8f9fa", "border", "2px solid #dc3545", "border-radius", "8px", "padding", "20px", "overflow-y", "auto", "box-shadow", "0 4px 6px rgba(0, 0, 0, 0.1)"], [2, "position", "relative"], ["kendoButton", "", 2, "position", "absolute", "top", "0", "right", "0", "font-size", "12px", 3, "click"], [1, "fa-solid", "fa-copy"], [2, "color", "#dc3545", "margin-top", "0", "margin-right", "150px", "font-size", "18px"], [1, "fa-solid", "fa-exclamation-triangle"], [2, "margin-bottom", "10px", "font-size", "14px"], [2, "background-color", "#fff", "border", "1px solid #dee2e6", "border-radius", "4px", "padding", "12px", "margin-bottom", "12px", "font-family", "'Courier New', monospace", "font-size", "12px"], [2, "margin-top", "8px"], [2, "background-color", "#e7f3ff", "border", "1px solid #b3d9ff", "border-radius", "4px", "padding", "12px", "margin-bottom", "12px"], [2, "font-size", "14px"], [2, "margin", "8px 0 0 20px", "padding", "0", "font-size", "13px"], ["kendoButton", "", 2, "font-size", "13px", 3, "click"], [1, "fa-solid", "fa-rotate"], [2, "cursor", "pointer", "color", "#0056b3"], [2, "margin-top", "8px", "white-space", "pre-wrap", "word-break", "break-word", "font-size", "11px"], [2, "flex", "1", "display", "flex", "align-items", "center", "justify-content", "center", "min-height", "400px", "padding", "20px", "background", "rgba(255, 255, 255, 0.95)"], [2, "height", "100%", 3, "language", "value", "autoFocus", "indentWithTab", "readonly"], [2, "width", "90%", "max-width", "600px", "max-height", "80vh", "background-color", "#f8f9fa", "border", "2px solid #dc3545", "border-radius", "8px", "padding", "20px", "overflow-y", "auto", "box-shadow", "0 4px 6px rgba(0, 0, 0, 0.1)"]], template: function SkipDynamicUIComponentComponent_Template(rf, ctx) { if (rf & 1) {
1318
+ i0.ɵɵtemplate(0, SkipDynamicUIComponentComponent_Conditional_0_Template, 3, 1, "kendo-tabstrip", 0)(1, SkipDynamicUIComponentComponent_Conditional_1_Template, 26, 12, "div", 1);
1304
1319
  } if (rf & 2) {
1305
1320
  i0.ɵɵconditional(ctx.reportOptions.length > 1 ? 0 : 1);
1306
- } }, dependencies: [i2.NgIf, i3.TabStripComponent, i3.TabStripTabComponent, i3.TabContentDirective, i3.TabTitleDirective, i4.ButtonComponent, i5.CodeEditorComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n position: relative;\n }\n \n \n\n .tab-action-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background-color: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n }\n \n .tab-actions-left[_ngcontent-%COMP%], \n .tab-actions-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n \n\n .tab-action-button[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background-color: transparent;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: #333;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .tab-action-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n \n \n\n .tab-action-button.create-button[_ngcontent-%COMP%], \n .tab-action-button.print-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #333;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.create-button[_ngcontent-%COMP%]:hover:not(:disabled), \n .tab-action-button.print-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n \n\n .tab-action-button.toggle-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #666;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.toggle-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n color: #333;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%] {\n background-color: #5B4FE9;\n color: white;\n border-color: #5B4FE9;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #4940D4;\n border-color: #4940D4;\n }\n \n \n\n .details-panel[_ngcontent-%COMP%] {\n border-bottom: 1px solid #e0e0e0;\n background-color: #fafafa;\n overflow: hidden;\n transition: height 0.3s ease;\n }\n \n .details-content[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n font-size: 14px;\n line-height: 1.6;\n }\n \n .details-content.code-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n \n \n\n .panel-resizer[_ngcontent-%COMP%] {\n height: 4px;\n background-color: #e0e0e0;\n cursor: ns-resize;\n position: relative;\n transition: background-color 0.2s ease;\n }\n \n .panel-resizer[_ngcontent-%COMP%]:hover {\n background-color: #d0d0d0;\n }\n \n .resizer-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 2px;\n background-color: #999;\n border-radius: 1px;\n }\n \n \n\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h1) { font-size: 1.5em; margin-top: 0; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h2) { font-size: 1.3em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h3) { font-size: 1.1em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ul), .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ol) { margin-left: 1.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(code) { \n background-color: #f4f4f4; \n padding: 2px 4px; \n border-radius: 3px; \n font-family: 'Courier New', monospace; \n font-size: 0.9em;\n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(pre) { \n background-color: #f4f4f4; \n padding: 12px; \n border-radius: 4px; \n overflow-x: auto; \n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(blockquote) { \n border-left: 4px solid #e0e0e0; \n padding-left: 16px; \n margin-left: 0; \n color: #666; \n }\n \n \n\n .k-tabstrip {\n border: none;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 10px 5px 5px 5px;\n }\n \n .k-tabstrip-items {\n background: #f8f9fa;\n border: none;\n border-radius: 8px 8px 0 0;\n flex: 0 0 auto;\n padding: 8px 12px 0 12px;\n gap: 4px;\n display: flex;\n }\n \n .k-tabstrip-items-wrapper {\n height: 100%;\n }\n \n .k-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-top: none;\n border-radius: 0 0 8px 8px;\n }\n \n .k-tabstrip .k-item {\n margin-right: 2px;\n border: none;\n background: transparent;\n border-radius: 6px 6px 0 0;\n padding: 2px;\n transition: all 0.2s ease;\n }\n \n .k-tabstrip .k-item.k-selected {\n background: white;\n border: 1px solid #e0e0e0;\n border-bottom: 1px solid white;\n margin-bottom: -1px;\n z-index: 1;\n }\n \n .k-tabstrip .k-link {\n padding: 8px 16px;\n font-weight: 500;\n font-size: 13px;\n color: #666;\n transition: all 0.15s ease;\n border-radius: 4px 4px 0 0;\n background: transparent;\n border: none;\n text-transform: lowercase;\n }\n \n .k-tabstrip .k-link:first-letter {\n text-transform: uppercase;\n }\n \n .k-tabstrip .k-item:hover:not(.k-selected) .k-link {\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n \n .k-tabstrip .k-item.k-selected .k-link {\n color: #1976d2;\n font-weight: 600;\n background: white;\n }\n \n \n\n .k-tabstrip .k-link .star-icon {\n display: inline-block;\n margin-right: 4px;\n color: #ffd700;\n font-size: 12px;\n vertical-align: middle;\n }\n \n \n\n .k-tabstrip-items::before, \n .k-tabstrip-items::after {\n display: none;\n }\n \n .k-tabstrip .k-item::before, \n .k-tabstrip .k-item::after {\n display: none;\n }\n \n \n\n .k-tabstrip .k-link:focus {\n outline: none;\n box-shadow: none;\n }\n \n \n\n .k-tabstrip .k-content.k-state-active {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n \n\n .react-host-container[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n }"] });
1321
+ } }, dependencies: [i2.NgIf, i3.TabStripComponent, i3.TabStripTabComponent, i3.TabContentDirective, i3.TabTitleDirective, i4.ButtonComponent, i5.CodeEditorComponent, i6.MJReactComponent], styles: ["[_nghost-%COMP%] {\n display: block;\n height: 100%;\n position: relative;\n }\n \n \n\n .tab-action-bar[_ngcontent-%COMP%] {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 12px;\n background-color: #fafafa;\n border-bottom: 1px solid #e0e0e0;\n }\n \n .tab-actions-left[_ngcontent-%COMP%], \n .tab-actions-right[_ngcontent-%COMP%] {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n \n \n\n .tab-action-button[_ngcontent-%COMP%] {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 14px;\n background-color: transparent;\n border: 1px solid #e0e0e0;\n border-radius: 6px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n color: #333;\n transition: all 0.15s ease;\n white-space: nowrap;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n .tab-action-button[_ngcontent-%COMP%]:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n \n .tab-action-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%] {\n font-size: 12px;\n }\n \n \n\n .tab-action-button.create-button[_ngcontent-%COMP%], \n .tab-action-button.print-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #333;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.create-button[_ngcontent-%COMP%]:hover:not(:disabled), \n .tab-action-button.print-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n }\n \n \n\n .tab-action-button.toggle-button[_ngcontent-%COMP%] {\n background-color: white;\n color: #666;\n border-color: #e0e0e0;\n }\n \n .tab-action-button.toggle-button[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n color: #333;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%] {\n background-color: #5B4FE9;\n color: white;\n border-color: #5B4FE9;\n }\n \n .tab-action-button.toggle-button.active[_ngcontent-%COMP%]:hover:not(:disabled) {\n background-color: #4940D4;\n border-color: #4940D4;\n }\n \n \n\n .details-panel[_ngcontent-%COMP%] {\n border-bottom: 1px solid #e0e0e0;\n background-color: #fafafa;\n overflow: hidden;\n transition: height 0.3s ease;\n }\n \n .details-content[_ngcontent-%COMP%] {\n padding: 16px;\n overflow-y: auto;\n height: 100%;\n font-size: 14px;\n line-height: 1.6;\n }\n \n .details-content.code-content[_ngcontent-%COMP%] {\n padding: 0;\n }\n \n \n\n .panel-resizer[_ngcontent-%COMP%] {\n height: 4px;\n background-color: #e0e0e0;\n cursor: ns-resize;\n position: relative;\n transition: background-color 0.2s ease;\n }\n \n .panel-resizer[_ngcontent-%COMP%]:hover {\n background-color: #d0d0d0;\n }\n \n .resizer-handle[_ngcontent-%COMP%] {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 40px;\n height: 2px;\n background-color: #999;\n border-radius: 1px;\n }\n \n \n\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h1) { font-size: 1.5em; margin-top: 0; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h2) { font-size: 1.3em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(h3) { font-size: 1.1em; margin-top: 1em; margin-bottom: 0.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ul), .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(ol) { margin-left: 1.5em; }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(code) { \n background-color: #f4f4f4; \n padding: 2px 4px; \n border-radius: 3px; \n font-family: 'Courier New', monospace; \n font-size: 0.9em;\n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(pre) { \n background-color: #f4f4f4; \n padding: 12px; \n border-radius: 4px; \n overflow-x: auto; \n }\n .details-content[_ngcontent-%COMP%] [_ngcontent-%COMP%]:deep(blockquote) { \n border-left: 4px solid #e0e0e0; \n padding-left: 16px; \n margin-left: 0; \n color: #666; \n }\n \n \n\n .k-tabstrip {\n border: none;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 10px 5px 5px 5px;\n }\n \n .k-tabstrip-items {\n background: #f8f9fa;\n border: none;\n border-radius: 8px 8px 0 0;\n flex: 0 0 auto;\n padding: 8px 12px 0 12px;\n gap: 4px;\n display: flex;\n }\n \n .k-tabstrip-items-wrapper {\n height: 100%;\n }\n \n .k-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n background: white;\n border: 1px solid #e0e0e0;\n border-top: none;\n border-radius: 0 0 8px 8px;\n }\n \n .k-tabstrip .k-item {\n margin-right: 2px;\n border: none;\n background: transparent;\n border-radius: 6px 6px 0 0;\n padding: 2px;\n transition: all 0.2s ease;\n }\n \n .k-tabstrip .k-item.k-selected {\n background: white;\n border: 1px solid #e0e0e0;\n border-bottom: 1px solid white;\n margin-bottom: -1px;\n z-index: 1;\n }\n \n .k-tabstrip .k-link {\n padding: 8px 16px;\n font-weight: 500;\n font-size: 13px;\n color: #666;\n transition: all 0.15s ease;\n border-radius: 4px 4px 0 0;\n background: transparent;\n border: none;\n text-transform: lowercase;\n }\n \n .k-tabstrip .k-link:first-letter {\n text-transform: uppercase;\n }\n \n .k-tabstrip .k-item:hover:not(.k-selected) .k-link {\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n }\n \n .k-tabstrip .k-item.k-selected .k-link {\n color: #1976d2;\n font-weight: 600;\n background: white;\n }\n \n \n\n .k-tabstrip .k-link .star-icon {\n display: inline-block;\n margin-right: 4px;\n color: #ffd700;\n font-size: 12px;\n vertical-align: middle;\n }\n \n \n\n .k-tabstrip-items::before, \n .k-tabstrip-items::after {\n display: none;\n }\n \n .k-tabstrip .k-item::before, \n .k-tabstrip .k-item::after {\n display: none;\n }\n \n \n\n .k-tabstrip .k-link:focus {\n outline: none;\n box-shadow: none;\n }\n \n \n\n .k-tabstrip .k-content.k-state-active {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n \n \n\n .react-host-container[_ngcontent-%COMP%] {\n width: 100%;\n height: 100%;\n }"] });
1307
1322
  }
1308
1323
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SkipDynamicUIComponentComponent, [{
1309
1324
  type: Component,
@@ -1447,9 +1462,21 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1447
1462
  }
1448
1463
 
1449
1464
  <!-- React component container -->
1450
- <div #htmlContainer [attr.data-tab-index]="i"
1465
+ <div [attr.data-tab-index]="i"
1451
1466
  style="flex: 1; position: relative; min-height: 0; overflow: auto;">
1452
- <!-- Content will be rendered here by React host -->
1467
+ <mj-react-component
1468
+ *ngIf="!currentError && componentSpecs.has(i)"
1469
+ [component]="componentSpecs.get(i)!"
1470
+ [data]="getFlattenedDataContext()"
1471
+ [state]="userStates.get(i) || {}"
1472
+ [utilities]="utilities"
1473
+ [styles]="componentStyles || undefined"
1474
+ (stateChange)="onStateChange(i, $event)"
1475
+ (componentEvent)="onComponentEvent(i, $event)"
1476
+ (refreshData)="handleRefreshData()"
1477
+ (openEntityRecord)="onOpenEntityRecord($event)"
1478
+ style="width: 100%; height: 100%;">
1479
+ </mj-react-component>
1453
1480
 
1454
1481
  <!-- Error overlay for this tab (shown on top of content when needed) -->
1455
1482
  @if (currentError && selectedReportOptionIndex === i) {
@@ -1563,7 +1590,7 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1563
1590
  (click)="createReportForOption(0)"
1564
1591
  [disabled]="isCreatingReport">
1565
1592
  <i class="fa-solid fa-plus"></i>
1566
- <span>Create {{ reportOptions[0] ? getComponentTypeName(reportOptions[0]) : 'Component' }}</span>
1593
+ <span>Create {{ firstOptionComponentTypeName }}</span>
1567
1594
  </button>
1568
1595
  <button class="tab-action-button print-button"
1569
1596
  *ngIf="ShowPrintReport"
@@ -1702,8 +1729,20 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1702
1729
  </div>
1703
1730
  } @else {
1704
1731
  <!-- React component container (only shown when no error) -->
1705
- <div #htmlContainer style="flex: 1; position: relative; min-height: 0; overflow: auto;">
1706
- <!-- Content will be rendered here by React host -->
1732
+ <div style="flex: 1; position: relative; min-height: 0; overflow: auto;">
1733
+ <mj-react-component
1734
+ *ngIf="componentSpecs.has(0)"
1735
+ [component]="componentSpecs.get(0)!"
1736
+ [data]="getFlattenedDataContext()"
1737
+ [state]="userStates.get(0) || {}"
1738
+ [utilities]="utilities"
1739
+ [styles]="componentStyles || undefined"
1740
+ (stateChange)="onStateChange(0, $event)"
1741
+ (componentEvent)="onComponentEvent(0, $event)"
1742
+ (refreshData)="handleRefreshData()"
1743
+ (openEntityRecord)="onOpenEntityRecord($event)"
1744
+ style="width: 100%; height: 100%;">
1745
+ </mj-react-component>
1707
1746
  </div>
1708
1747
  }
1709
1748
  </div>
@@ -1727,14 +1766,14 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1727
1766
  type: Output
1728
1767
  }], CreateReportRequested: [{
1729
1768
  type: Output
1730
- }], htmlContainers: [{
1769
+ }], reactComponents: [{
1731
1770
  type: ViewChildren,
1732
- args: ['htmlContainer']
1771
+ args: [MJReactComponent]
1733
1772
  }], onWindowResize: [{
1734
1773
  type: HostListener,
1735
1774
  args: ['window:resize']
1736
1775
  }], SkipData: [{
1737
1776
  type: Input
1738
1777
  }] }); })();
1739
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SkipDynamicUIComponentComponent, { className: "SkipDynamicUIComponentComponent", filePath: "src/lib/dynamic-report/dynamic-ui-component.ts", lineNumber: 694 }); })();
1778
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SkipDynamicUIComponentComponent, { className: "SkipDynamicUIComponentComponent", filePath: "src/lib/dynamic-report/dynamic-ui-component.ts", lineNumber: 718 }); })();
1740
1779
  //# sourceMappingURL=dynamic-ui-component.js.map