@memberjunction/ng-skip-chat 2.96.0 → 2.97.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,4 +1,4 @@
1
- import { Component, EventEmitter, Input, Output, ViewChildren, HostListener, ChangeDetectionStrategy } from '@angular/core';
1
+ import { Component, EventEmitter, Input, Output, ViewChildren, ChangeDetectionStrategy } from '@angular/core';
2
2
  import { CompositeKey, LogError, Metadata } from '@memberjunction/core';
3
3
  import { BuildComponentCompleteCode } from '@memberjunction/interactive-component-types';
4
4
  import { DrillDownInfo } from '../drill-down-info';
@@ -27,11 +27,11 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_1_Templ
27
27
  i0.ɵɵadvance();
28
28
  i0.ɵɵtextInterpolate1(" ", ctx_r1.getTabTitle(ɵ$index_4_r3), " ");
29
29
  } }
30
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_24_Template(rf, ctx) { if (rf & 1) {
31
- const _r5 = i0.ɵɵgetCurrentView();
32
- i0.ɵɵelementStart(0, "button", 26);
33
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_24_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createReportForOption(ɵ$index_4_r3)); });
34
- i0.ɵɵelement(1, "i", 27);
30
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_4_Template(rf, ctx) { if (rf & 1) {
31
+ const _r4 = i0.ɵɵgetCurrentView();
32
+ i0.ɵɵelementStart(0, "button", 14);
33
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r4); const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createReportForOption(ɵ$index_4_r3)); });
34
+ i0.ɵɵelement(1, "i", 15);
35
35
  i0.ɵɵelementStart(2, "span");
36
36
  i0.ɵɵtext(3, "Save Report");
37
37
  i0.ɵɵelementEnd()();
@@ -39,192 +39,65 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_butto
39
39
  const ctx_r1 = i0.ɵɵnextContext(4);
40
40
  i0.ɵɵproperty("disabled", ctx_r1.isCreatingReport);
41
41
  } }
42
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_25_Template(rf, ctx) { if (rf & 1) {
43
- const _r6 = i0.ɵɵgetCurrentView();
44
- i0.ɵɵelementStart(0, "button", 28);
45
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_25_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openReportForOption(ɵ$index_4_r3)); });
46
- i0.ɵɵelement(1, "i", 29);
42
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_5_Template(rf, ctx) { if (rf & 1) {
43
+ const _r5 = i0.ɵɵgetCurrentView();
44
+ i0.ɵɵelementStart(0, "button", 16);
45
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r5); const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openReportForOption(ɵ$index_4_r3)); });
46
+ i0.ɵɵelement(1, "i", 17);
47
47
  i0.ɵɵelementStart(2, "span");
48
48
  i0.ɵɵtext(3, "Open Saved Report");
49
49
  i0.ɵɵelementEnd()();
50
50
  } }
51
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_26_Template(rf, ctx) { if (rf & 1) {
52
- const _r7 = i0.ɵɵgetCurrentView();
53
- i0.ɵɵelementStart(0, "button", 30);
54
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.PrintReport()); });
55
- i0.ɵɵelement(1, "i", 31);
51
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_6_Template(rf, ctx) { if (rf & 1) {
52
+ const _r6 = i0.ɵɵgetCurrentView();
53
+ i0.ɵɵelementStart(0, "button", 18);
54
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.PrintReport()); });
55
+ i0.ɵɵelement(1, "i", 19);
56
56
  i0.ɵɵelementStart(2, "span");
57
57
  i0.ɵɵtext(3, "Print Report");
58
58
  i0.ɵɵelementEnd()();
59
59
  } }
60
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
61
- i0.ɵɵelement(0, "i", 10);
62
- i0.ɵɵtext(1, " Functional Requirements ");
63
- } }
64
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
65
- i0.ɵɵelementStart(0, "div", 36);
66
- i0.ɵɵelement(1, "div", 37);
67
- i0.ɵɵelementEnd();
68
- } if (rf & 2) {
69
- const option_r9 = i0.ɵɵnextContext(4).$implicit;
70
- const ctx_r1 = i0.ɵɵnextContext(2);
71
- i0.ɵɵadvance();
72
- i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedFunctionalRequirements(option_r9), i0.ɵɵsanitizeHtml);
73
- } }
74
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_2_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
76
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_2_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_2_ng_template_2_Template, 2, 1, "ng-template", 5);
77
- i0.ɵɵelementEnd();
78
- } if (rf & 2) {
79
- i0.ɵɵproperty("selected", true);
80
- } }
81
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {
82
- i0.ɵɵelement(0, "i", 12);
83
- i0.ɵɵtext(1, " Data Requirements ");
84
- } }
85
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
86
- i0.ɵɵelementStart(0, "div", 36);
87
- i0.ɵɵelement(1, "div", 37);
88
- i0.ɵɵelementEnd();
89
- } if (rf & 2) {
90
- const option_r9 = i0.ɵɵnextContext(4).$implicit;
91
- const ctx_r1 = i0.ɵɵnextContext(2);
92
- i0.ɵɵadvance();
93
- i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedDataRequirements(option_r9), i0.ɵɵsanitizeHtml);
94
- } }
95
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_3_Template(rf, ctx) { if (rf & 1) {
96
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
97
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_3_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_3_ng_template_2_Template, 2, 1, "ng-template", 5);
98
- i0.ɵɵelementEnd();
99
- } if (rf & 2) {
100
- const ctx_r1 = i0.ɵɵnextContext(5);
101
- i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements);
102
- } }
103
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {
104
- i0.ɵɵelement(0, "i", 14);
105
- i0.ɵɵtext(1, " Technical Design ");
106
- } }
107
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {
108
- i0.ɵɵelementStart(0, "div", 36);
109
- i0.ɵɵelement(1, "div", 37);
110
- i0.ɵɵelementEnd();
111
- } if (rf & 2) {
112
- const option_r9 = i0.ɵɵnextContext(4).$implicit;
113
- const ctx_r1 = i0.ɵɵnextContext(2);
114
- i0.ɵɵadvance();
115
- i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedTechnicalDesign(option_r9), i0.ɵɵsanitizeHtml);
116
- } }
117
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_4_Template(rf, ctx) { if (rf & 1) {
118
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
119
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_4_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_4_ng_template_2_Template, 2, 1, "ng-template", 5);
120
- i0.ɵɵelementEnd();
121
- } if (rf & 2) {
122
- const ctx_r1 = i0.ɵɵnextContext(5);
123
- i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements);
60
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_10_Template(rf, ctx) { if (rf & 1) {
61
+ i0.ɵɵelement(0, "i", 20);
62
+ i0.ɵɵtext(1, " Component ");
124
63
  } }
125
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_5_ng_template_1_Template(rf, ctx) { if (rf & 1) {
126
- i0.ɵɵelement(0, "i", 16);
127
- i0.ɵɵtext(1, " Code ");
128
- } }
129
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
130
- const _r10 = i0.ɵɵgetCurrentView();
131
- i0.ɵɵelementStart(0, "div", 38)(1, "mj-code-editor", 39);
132
- i0.ɵɵlistener("toolbarAction", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_5_ng_template_2_Template_mj_code_editor_toolbarAction_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.handleCodeToolbarAction($event)); });
133
- i0.ɵɵelementEnd()();
134
- } if (rf & 2) {
135
- const option_r9 = i0.ɵɵnextContext(4).$implicit;
136
- const ctx_r1 = i0.ɵɵnextContext(2);
137
- i0.ɵɵadvance();
138
- i0.ɵɵproperty("value", ctx_r1.getComponentCode(option_r9))("language", "javascript")("autoFocus", false)("indentWithTab", true)("readonly", true)("toolbar", ctx_r1.codeToolbarConfig);
139
- } }
140
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_5_Template(rf, ctx) { if (rf & 1) {
141
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
142
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_5_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_5_ng_template_2_Template, 2, 6, "ng-template", 5);
143
- i0.ɵɵelementEnd();
144
- } if (rf & 2) {
145
- const ctx_r1 = i0.ɵɵnextContext(5);
146
- i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements && !ctx_r1.showTechnicalDesign);
147
- } }
148
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_6_ng_template_1_Template(rf, ctx) { if (rf & 1) {
149
- i0.ɵɵelement(0, "i", 16);
150
- i0.ɵɵtext(1, " Spec ");
151
- } }
152
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {
153
- const _r11 = i0.ɵɵgetCurrentView();
154
- i0.ɵɵelementStart(0, "div", 38)(1, "mj-code-editor", 39);
155
- i0.ɵɵlistener("toolbarAction", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_6_ng_template_2_Template_mj_code_editor_toolbarAction_1_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r1.handleCodeToolbarAction($event)); });
156
- i0.ɵɵelementEnd()();
157
- } if (rf & 2) {
158
- const option_r9 = i0.ɵɵnextContext(4).$implicit;
159
- const ctx_r1 = i0.ɵɵnextContext(2);
160
- i0.ɵɵadvance();
161
- i0.ɵɵproperty("value", ctx_r1.getComponentSpec(option_r9))("language", "json")("autoFocus", false)("indentWithTab", true)("readonly", true)("toolbar", ctx_r1.codeToolbarConfig);
162
- } }
163
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_6_Template(rf, ctx) { if (rf & 1) {
164
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab");
165
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_6_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_6_ng_template_2_Template, 2, 6, "ng-template", 5);
166
- i0.ɵɵelementEnd();
167
- } }
168
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Template(rf, ctx) { if (rf & 1) {
169
- const _r8 = i0.ɵɵgetCurrentView();
170
- i0.ɵɵelementStart(0, "div", 32)(1, "kendo-tabstrip", 33);
171
- i0.ɵɵtemplate(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_2_Template, 3, 1, "kendo-tabstrip-tab", 3)(3, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_3_Template, 3, 1, "kendo-tabstrip-tab", 3)(4, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_4_Template, 3, 1, "kendo-tabstrip-tab", 3)(5, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_5_Template, 3, 1, "kendo-tabstrip-tab", 3)(6, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Conditional_6_Template, 3, 0, "kendo-tabstrip-tab");
172
- i0.ɵɵelementEnd()();
173
- i0.ɵɵelementStart(7, "div", 34);
174
- i0.ɵɵlistener("mousedown", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Template_div_mousedown_7_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_28_Template_div_touchstart_7_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.startResize($event)); });
175
- i0.ɵɵelement(8, "div", 35);
176
- i0.ɵɵelementEnd();
177
- } if (rf & 2) {
178
- const ctx_r1 = i0.ɵɵnextContext(4);
179
- i0.ɵɵstyleProp("height", ctx_r1.detailsPanelHeight);
180
- i0.ɵɵadvance(2);
181
- i0.ɵɵconditional(ctx_r1.showFunctionalRequirements ? 2 : -1);
182
- i0.ɵɵadvance();
183
- i0.ɵɵconditional(ctx_r1.showDataRequirements ? 3 : -1);
184
- i0.ɵɵadvance();
185
- i0.ɵɵconditional(ctx_r1.showTechnicalDesign ? 4 : -1);
186
- i0.ɵɵadvance();
187
- i0.ɵɵconditional(ctx_r1.showCode ? 5 : -1);
188
- i0.ɵɵadvance();
189
- i0.ɵɵconditional(ctx_r1.showSpec ? 6 : -1);
190
- } }
191
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_30_Template(rf, ctx) { if (rf & 1) {
192
- const _r12 = i0.ɵɵgetCurrentView();
193
- i0.ɵɵelementStart(0, "mj-react-component", 40);
194
- i0.ɵɵlistener("stateChange", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_30_Template_mj_react_component_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r12); 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_30_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r12); 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_30_Template_mj_react_component_refreshData_0_listener() { i0.ɵɵrestoreView(_r12); 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_30_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
64
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_mj_react_component_1_Template(rf, ctx) { if (rf & 1) {
65
+ const _r7 = i0.ɵɵgetCurrentView();
66
+ i0.ɵɵelementStart(0, "mj-react-component", 24);
67
+ i0.ɵɵlistener("stateChange", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_mj_react_component_1_Template_mj_react_component_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r7); const ɵ$index_4_r3 = i0.ɵɵnextContext(3).$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_ng_template_11_mj_react_component_1_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r7); const ɵ$index_4_r3 = i0.ɵɵnextContext(3).$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_ng_template_11_mj_react_component_1_Template_mj_react_component_refreshData_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.handleRefreshData()); })("openEntityRecord", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_mj_react_component_1_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
195
68
  i0.ɵɵelementEnd();
196
69
  } if (rf & 2) {
197
- const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index;
70
+ const ɵ$index_4_r3 = i0.ɵɵnextContext(3).$index;
198
71
  const ctx_r1 = i0.ɵɵnextContext(2);
199
72
  i0.ɵɵproperty("component", ctx_r1.componentOptions[ɵ$index_4_r3].option)("styles", ctx_r1.componentStyles || undefined);
200
73
  } }
201
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_31_Conditional_19_Template(rf, ctx) { if (rf & 1) {
202
- i0.ɵɵelementStart(0, "details", 49)(1, "summary", 55);
74
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
75
+ i0.ɵɵelementStart(0, "details", 33)(1, "summary", 39);
203
76
  i0.ɵɵtext(2, "Technical Details (click to expand)");
204
77
  i0.ɵɵelementEnd();
205
- i0.ɵɵelementStart(3, "pre", 56);
78
+ i0.ɵɵelementStart(3, "pre", 40);
206
79
  i0.ɵɵtext(4);
207
80
  i0.ɵɵelementEnd()();
208
81
  } if (rf & 2) {
209
- const ctx_r1 = i0.ɵɵnextContext(5);
82
+ const ctx_r1 = i0.ɵɵnextContext(6);
210
83
  i0.ɵɵadvance(4);
211
84
  i0.ɵɵtextInterpolate(ctx_r1.formatTechnicalDetails(ctx_r1.currentError.technicalDetails));
212
85
  } }
213
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_31_Template(rf, ctx) { if (rf & 1) {
214
- const _r13 = i0.ɵɵgetCurrentView();
215
- i0.ɵɵelementStart(0, "div", 25)(1, "div", 41)(2, "div", 42)(3, "button", 43);
216
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_31_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
217
- i0.ɵɵelement(4, "span", 44);
86
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Conditional_2_Template(rf, ctx) { if (rf & 1) {
87
+ const _r8 = i0.ɵɵgetCurrentView();
88
+ i0.ɵɵelementStart(0, "div", 23)(1, "div", 25)(2, "div", 26)(3, "button", 27);
89
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
90
+ i0.ɵɵelement(4, "span", 28);
218
91
  i0.ɵɵtext(5, " Copy Error Details ");
219
92
  i0.ɵɵelementEnd();
220
- i0.ɵɵelementStart(6, "h3", 45);
221
- i0.ɵɵelement(7, "span", 46);
93
+ i0.ɵɵelementStart(6, "h3", 29);
94
+ i0.ɵɵelement(7, "span", 30);
222
95
  i0.ɵɵtext(8, " Component Rendering Error ");
223
96
  i0.ɵɵelementEnd()();
224
- i0.ɵɵelementStart(9, "p", 47);
97
+ i0.ɵɵelementStart(9, "p", 31);
225
98
  i0.ɵɵtext(10, " The selected component option could not be rendered due to the following error: ");
226
99
  i0.ɵɵelementEnd();
227
- i0.ɵɵelementStart(11, "div", 48)(12, "strong");
100
+ i0.ɵɵelementStart(11, "div", 32)(12, "strong");
228
101
  i0.ɵɵtext(13, "Error Type:");
229
102
  i0.ɵɵelementEnd();
230
103
  i0.ɵɵtext(14);
@@ -233,12 +106,12 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
233
106
  i0.ɵɵtext(17, "Details:");
234
107
  i0.ɵɵelementEnd();
235
108
  i0.ɵɵtext(18);
236
- i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_31_Conditional_19_Template, 5, 1, "details", 49);
109
+ i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Conditional_2_Conditional_19_Template, 5, 1, "details", 33);
237
110
  i0.ɵɵelementEnd();
238
- i0.ɵɵelementStart(20, "div", 50)(21, "strong", 51);
111
+ i0.ɵɵelementStart(20, "div", 34)(21, "strong", 35);
239
112
  i0.ɵɵtext(22, "What to do:");
240
113
  i0.ɵɵelementEnd();
241
- i0.ɵɵelementStart(23, "ol", 52)(24, "li");
114
+ i0.ɵɵelementStart(23, "ol", 36)(24, "li");
242
115
  i0.ɵɵtext(25, "Try selecting a different report option from the tabs above");
243
116
  i0.ɵɵelementEnd();
244
117
  i0.ɵɵelementStart(26, "li");
@@ -247,13 +120,13 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
247
120
  i0.ɵɵelementStart(28, "li");
248
121
  i0.ɵɵtext(29, "Contact your IT department if the issue persists");
249
122
  i0.ɵɵelementEnd()()();
250
- i0.ɵɵelementStart(30, "button", 53);
251
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_31_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
252
- i0.ɵɵelement(31, "span", 54);
123
+ i0.ɵɵelementStart(30, "button", 37);
124
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Conditional_2_Template_button_click_30_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
125
+ i0.ɵɵelement(31, "span", 38);
253
126
  i0.ɵɵtext(32, " Retry ");
254
127
  i0.ɵɵelementEnd()()();
255
128
  } if (rf & 2) {
256
- const ctx_r1 = i0.ɵɵnextContext(4);
129
+ const ctx_r1 = i0.ɵɵnextContext(5);
257
130
  i0.ɵɵadvance(14);
258
131
  i0.ɵɵtextInterpolate1(" ", ctx_r1.currentError.type, "");
259
132
  i0.ɵɵadvance(4);
@@ -261,77 +134,110 @@ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Condi
261
134
  i0.ɵɵadvance();
262
135
  i0.ɵɵconditional(ctx_r1.currentError.technicalDetails ? 19 : -1);
263
136
  } }
264
- function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
265
- const _r4 = i0.ɵɵgetCurrentView();
266
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 7)(2, "div", 8)(3, "button", 9);
267
- 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()); });
268
- i0.ɵɵelement(4, "i", 10);
269
- i0.ɵɵelementStart(5, "span");
270
- i0.ɵɵtext(6, "Functional");
271
- i0.ɵɵelementEnd()();
272
- i0.ɵɵelementStart(7, "button", 11);
273
- 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()); });
274
- i0.ɵɵelement(8, "i", 12);
275
- i0.ɵɵelementStart(9, "span");
276
- i0.ɵɵtext(10, "Data");
277
- i0.ɵɵelementEnd()();
278
- i0.ɵɵelementStart(11, "button", 13);
279
- 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()); });
280
- i0.ɵɵelement(12, "i", 14);
281
- i0.ɵɵelementStart(13, "span");
282
- i0.ɵɵtext(14, "Technical");
283
- i0.ɵɵelementEnd()();
284
- i0.ɵɵelementStart(15, "button", 15);
285
- 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()); });
286
- i0.ɵɵelement(16, "i", 16);
287
- i0.ɵɵelementStart(17, "span");
288
- i0.ɵɵtext(18, "Code");
289
- i0.ɵɵelementEnd()();
290
- i0.ɵɵelementStart(19, "button", 17);
291
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.toggleShowSpec()); });
292
- i0.ɵɵelement(20, "i", 16);
293
- i0.ɵɵelementStart(21, "span");
294
- i0.ɵɵtext(22, "Spec");
295
- i0.ɵɵelementEnd()()();
296
- i0.ɵɵelementStart(23, "div", 18);
297
- i0.ɵɵtemplate(24, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_24_Template, 4, 1, "button", 19)(25, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_25_Template, 4, 0, "button", 20)(26, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_26_Template, 4, 0, "button", 21);
137
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Template(rf, ctx) { if (rf & 1) {
138
+ i0.ɵɵelementStart(0, "div", 21);
139
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_mj_react_component_1_Template, 1, 2, "mj-react-component", 22)(2, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Conditional_2_Template, 33, 3, "div", 23);
140
+ i0.ɵɵelementEnd();
141
+ } if (rf & 2) {
142
+ const ɵ$index_4_r3 = i0.ɵɵnextContext(2).$index;
143
+ const ctx_r1 = i0.ɵɵnextContext(2);
144
+ i0.ɵɵadvance();
145
+ i0.ɵɵproperty("ngIf", !ctx_r1.currentError && ctx_r1.componentOptions[ɵ$index_4_r3] && ɵ$index_4_r3 === ctx_r1.selectedReportOptionIndex);
146
+ i0.ɵɵadvance();
147
+ i0.ɵɵconditional(ctx_r1.currentError && ctx_r1.selectedReportOptionIndex === ɵ$index_4_r3 ? 2 : -1);
148
+ } }
149
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_13_Template(rf, ctx) { if (rf & 1) {
150
+ i0.ɵɵelement(0, "i", 41);
151
+ i0.ɵɵtext(1, " Functional ");
152
+ } }
153
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_14_Template(rf, ctx) { if (rf & 1) {
154
+ i0.ɵɵelementStart(0, "div", 42);
155
+ i0.ɵɵelement(1, "div", 43);
156
+ i0.ɵɵelementEnd();
157
+ } if (rf & 2) {
158
+ const option_r9 = i0.ɵɵnextContext(2).$implicit;
159
+ const ctx_r1 = i0.ɵɵnextContext(2);
160
+ i0.ɵɵadvance();
161
+ i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedFunctionalRequirements(option_r9), i0.ɵɵsanitizeHtml);
162
+ } }
163
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_16_Template(rf, ctx) { if (rf & 1) {
164
+ i0.ɵɵelement(0, "i", 44);
165
+ i0.ɵɵtext(1, " Technical ");
166
+ } }
167
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_17_Template(rf, ctx) { if (rf & 1) {
168
+ i0.ɵɵelementStart(0, "div", 42);
169
+ i0.ɵɵelement(1, "div", 43);
170
+ i0.ɵɵelementEnd();
171
+ } if (rf & 2) {
172
+ const option_r9 = i0.ɵɵnextContext(2).$implicit;
173
+ const ctx_r1 = i0.ɵɵnextContext(2);
174
+ i0.ɵɵadvance();
175
+ i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedTechnicalDesign(option_r9), i0.ɵɵsanitizeHtml);
176
+ } }
177
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_19_Template(rf, ctx) { if (rf & 1) {
178
+ i0.ɵɵelement(0, "i", 45);
179
+ i0.ɵɵtext(1, " Data Spec ");
180
+ } }
181
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_20_Template(rf, ctx) { if (rf & 1) {
182
+ i0.ɵɵelementStart(0, "div", 42);
183
+ i0.ɵɵelement(1, "div", 43);
184
+ i0.ɵɵelementEnd();
185
+ } if (rf & 2) {
186
+ const option_r9 = i0.ɵɵnextContext(2).$implicit;
187
+ const ctx_r1 = i0.ɵɵnextContext(2);
188
+ i0.ɵɵadvance();
189
+ i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedDataRequirements(option_r9), i0.ɵɵsanitizeHtml);
190
+ } }
191
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_22_Template(rf, ctx) { if (rf & 1) {
192
+ i0.ɵɵelement(0, "i", 46);
193
+ i0.ɵɵtext(1, " Code ");
194
+ } }
195
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_23_Template(rf, ctx) { if (rf & 1) {
196
+ const _r10 = i0.ɵɵgetCurrentView();
197
+ i0.ɵɵelementStart(0, "div", 47)(1, "mj-code-editor", 48);
198
+ i0.ɵɵlistener("toolbarAction", function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_23_Template_mj_code_editor_toolbarAction_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.handleCodeToolbarAction($event)); });
298
199
  i0.ɵɵelementEnd()();
299
- i0.ɵɵelementStart(27, "div", 22);
300
- i0.ɵɵtemplate(28, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_28_Template, 9, 7);
301
- i0.ɵɵelementStart(29, "div", 23);
302
- i0.ɵɵtemplate(30, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_mj_react_component_30_Template, 1, 2, "mj-react-component", 24)(31, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Conditional_31_Template, 33, 3, "div", 25);
303
- i0.ɵɵelementEnd()()();
304
200
  } if (rf & 2) {
305
- const ɵ$index_4_r3 = i0.ɵɵnextContext().$index;
201
+ const option_r9 = i0.ɵɵnextContext(2).$implicit;
306
202
  const ctx_r1 = i0.ɵɵnextContext(2);
307
- i0.ɵɵadvance(3);
308
- i0.ɵɵclassProp("active", ctx_r1.showFunctionalRequirements);
309
- i0.ɵɵadvance(4);
310
- i0.ɵɵclassProp("active", ctx_r1.showDataRequirements);
311
- i0.ɵɵadvance(4);
312
- i0.ɵɵclassProp("active", ctx_r1.showTechnicalDesign);
313
- i0.ɵɵadvance(4);
314
- i0.ɵɵclassProp("active", ctx_r1.showCode);
203
+ i0.ɵɵadvance();
204
+ i0.ɵɵproperty("value", ctx_r1.getComponentCode(option_r9))("language", "javascript")("autoFocus", false)("indentWithTab", true)("readonly", true)("toolbar", ctx_r1.codeToolbarConfig);
205
+ } }
206
+ function SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
207
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 7);
208
+ i0.ɵɵelement(2, "div", 8);
209
+ i0.ɵɵelementStart(3, "div", 9);
210
+ i0.ɵɵtemplate(4, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_4_Template, 4, 1, "button", 10)(5, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_5_Template, 4, 0, "button", 11)(6, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_button_6_Template, 4, 0, "button", 12);
211
+ i0.ɵɵelementEnd()();
212
+ i0.ɵɵelementStart(7, "div", 13)(8, "kendo-tabstrip", 1)(9, "kendo-tabstrip-tab", 3);
213
+ i0.ɵɵtemplate(10, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_10_Template, 2, 0, "ng-template", 4)(11, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_11_Template, 3, 2, "ng-template", 5);
214
+ i0.ɵɵelementEnd();
215
+ i0.ɵɵelementStart(12, "kendo-tabstrip-tab");
216
+ i0.ɵɵtemplate(13, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_13_Template, 2, 0, "ng-template", 4)(14, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_14_Template, 2, 1, "ng-template", 5);
217
+ i0.ɵɵelementEnd();
218
+ i0.ɵɵelementStart(15, "kendo-tabstrip-tab");
219
+ i0.ɵɵtemplate(16, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_16_Template, 2, 0, "ng-template", 4)(17, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_17_Template, 2, 1, "ng-template", 5);
220
+ i0.ɵɵelementEnd();
221
+ i0.ɵɵelementStart(18, "kendo-tabstrip-tab");
222
+ i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_19_Template, 2, 0, "ng-template", 4)(20, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_20_Template, 2, 1, "ng-template", 5);
223
+ i0.ɵɵelementEnd();
224
+ i0.ɵɵelementStart(21, "kendo-tabstrip-tab");
225
+ i0.ɵɵtemplate(22, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_22_Template, 2, 0, "ng-template", 4)(23, SkipDynamicUIComponentComponent_Conditional_0_For_2_ng_template_2_ng_template_23_Template, 2, 6, "ng-template", 5);
226
+ i0.ɵɵelementEnd()()()();
227
+ } if (rf & 2) {
228
+ const ctx_r1 = i0.ɵɵnextContext(3);
315
229
  i0.ɵɵadvance(4);
316
- i0.ɵɵclassProp("active", ctx_r1.showSpec);
317
- i0.ɵɵadvance(5);
318
230
  i0.ɵɵproperty("ngIf", ctx_r1.ShowCreateReportButton && !ctx_r1.matchingReportID);
319
231
  i0.ɵɵadvance();
320
232
  i0.ɵɵproperty("ngIf", ctx_r1.ShowOpenSavedReportButton && ctx_r1.matchingReportID);
321
233
  i0.ɵɵadvance();
322
234
  i0.ɵɵproperty("ngIf", ctx_r1.ShowPrintReport);
323
- i0.ɵɵadvance(2);
324
- i0.ɵɵconditional(ctx_r1.showFunctionalRequirements || ctx_r1.showDataRequirements || ctx_r1.showTechnicalDesign || ctx_r1.showCode ? 28 : -1);
325
- i0.ɵɵadvance();
326
- i0.ɵɵattribute("data-tab-index", ɵ$index_4_r3);
327
- i0.ɵɵadvance();
328
- i0.ɵɵproperty("ngIf", !ctx_r1.currentError && ctx_r1.componentOptions[ɵ$index_4_r3] && ɵ$index_4_r3 === ctx_r1.selectedReportOptionIndex);
329
- i0.ɵɵadvance();
330
- i0.ɵɵconditional(ctx_r1.currentError && ctx_r1.selectedReportOptionIndex === ɵ$index_4_r3 ? 31 : -1);
235
+ i0.ɵɵadvance(3);
236
+ i0.ɵɵproperty("selected", true);
331
237
  } }
332
238
  function SkipDynamicUIComponentComponent_Conditional_0_For_2_Template(rf, ctx) { if (rf & 1) {
333
239
  i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
334
- 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, 32, 17, "ng-template", 5);
240
+ 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, 24, 4, "ng-template", 5);
335
241
  i0.ɵɵelementEnd();
336
242
  } if (rf & 2) {
337
243
  const ɵ$index_4_r3 = ctx.$index;
@@ -350,192 +256,76 @@ function SkipDynamicUIComponentComponent_Conditional_0_Template(rf, ctx) { if (r
350
256
  i0.ɵɵadvance();
351
257
  i0.ɵɵrepeater(ctx_r1.componentOptions);
352
258
  } }
353
- function SkipDynamicUIComponentComponent_Conditional_1_button_24_Template(rf, ctx) { if (rf & 1) {
354
- const _r15 = i0.ɵɵgetCurrentView();
355
- i0.ɵɵelementStart(0, "button", 26);
356
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_24_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createReportForOption(0)); });
357
- i0.ɵɵelement(1, "i", 27);
259
+ function SkipDynamicUIComponentComponent_Conditional_1_button_4_Template(rf, ctx) { if (rf & 1) {
260
+ const _r11 = i0.ɵɵgetCurrentView();
261
+ i0.ɵɵelementStart(0, "button", 14);
262
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.createReportForOption(0)); });
263
+ i0.ɵɵelement(1, "i", 15);
358
264
  i0.ɵɵelementStart(2, "span");
359
- i0.ɵɵtext(3, "Create Report");
265
+ i0.ɵɵtext(3, "Save Report");
360
266
  i0.ɵɵelementEnd()();
361
267
  } if (rf & 2) {
362
268
  const ctx_r1 = i0.ɵɵnextContext(2);
363
269
  i0.ɵɵproperty("disabled", ctx_r1.isCreatingReport);
364
270
  } }
365
- function SkipDynamicUIComponentComponent_Conditional_1_button_25_Template(rf, ctx) { if (rf & 1) {
366
- const _r16 = i0.ɵɵgetCurrentView();
367
- i0.ɵɵelementStart(0, "button", 28);
368
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_25_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openReportForOption(0)); });
369
- i0.ɵɵelement(1, "i", 29);
271
+ function SkipDynamicUIComponentComponent_Conditional_1_button_5_Template(rf, ctx) { if (rf & 1) {
272
+ const _r12 = i0.ɵɵgetCurrentView();
273
+ i0.ɵɵelementStart(0, "button", 16);
274
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_5_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.openReportForOption(0)); });
275
+ i0.ɵɵelement(1, "i", 17);
370
276
  i0.ɵɵelementStart(2, "span");
371
277
  i0.ɵɵtext(3, "Open Saved Report");
372
278
  i0.ɵɵelementEnd()();
373
279
  } }
374
- function SkipDynamicUIComponentComponent_Conditional_1_button_26_Template(rf, ctx) { if (rf & 1) {
375
- const _r17 = i0.ɵɵgetCurrentView();
376
- i0.ɵɵelementStart(0, "button", 30);
377
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_26_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r17); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PrintReport()); });
378
- i0.ɵɵelement(1, "i", 31);
280
+ function SkipDynamicUIComponentComponent_Conditional_1_button_6_Template(rf, ctx) { if (rf & 1) {
281
+ const _r13 = i0.ɵɵgetCurrentView();
282
+ i0.ɵɵelementStart(0, "button", 18);
283
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r13); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.PrintReport()); });
284
+ i0.ɵɵelement(1, "i", 19);
379
285
  i0.ɵɵelementStart(2, "span");
380
286
  i0.ɵɵtext(3, "Print Report");
381
287
  i0.ɵɵelementEnd()();
382
288
  } }
383
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {
384
- i0.ɵɵelement(0, "i", 10);
385
- i0.ɵɵtext(1, " Functional Requirements ");
386
- } }
387
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_2_ng_template_2_Template(rf, ctx) { if (rf & 1) {
388
- i0.ɵɵelementStart(0, "div", 36);
389
- i0.ɵɵelement(1, "div", 37);
390
- i0.ɵɵelementEnd();
391
- } if (rf & 2) {
392
- const ctx_r1 = i0.ɵɵnextContext(4);
393
- i0.ɵɵadvance();
394
- i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedFunctionalRequirements(ctx_r1.componentOptions[0]), i0.ɵɵsanitizeHtml);
395
- } }
396
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_2_Template(rf, ctx) { if (rf & 1) {
397
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
398
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_2_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_2_ng_template_2_Template, 2, 1, "ng-template", 5);
399
- i0.ɵɵelementEnd();
400
- } if (rf & 2) {
401
- i0.ɵɵproperty("selected", true);
402
- } }
403
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {
404
- i0.ɵɵelement(0, "i", 12);
405
- i0.ɵɵtext(1, " Data Requirements ");
406
- } }
407
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_3_ng_template_2_Template(rf, ctx) { if (rf & 1) {
408
- i0.ɵɵelementStart(0, "div", 36);
409
- i0.ɵɵelement(1, "div", 37);
410
- i0.ɵɵelementEnd();
411
- } if (rf & 2) {
412
- const ctx_r1 = i0.ɵɵnextContext(4);
413
- i0.ɵɵadvance();
414
- i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedDataRequirements(ctx_r1.componentOptions[0]), i0.ɵɵsanitizeHtml);
415
- } }
416
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_3_Template(rf, ctx) { if (rf & 1) {
417
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
418
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_3_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_3_ng_template_2_Template, 2, 1, "ng-template", 5);
419
- i0.ɵɵelementEnd();
420
- } if (rf & 2) {
421
- const ctx_r1 = i0.ɵɵnextContext(3);
422
- i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements);
423
- } }
424
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {
425
- i0.ɵɵelement(0, "i", 14);
426
- i0.ɵɵtext(1, " Technical Design ");
427
- } }
428
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {
429
- i0.ɵɵelementStart(0, "div", 36);
430
- i0.ɵɵelement(1, "div", 37);
431
- i0.ɵɵelementEnd();
432
- } if (rf & 2) {
433
- const ctx_r1 = i0.ɵɵnextContext(4);
434
- i0.ɵɵadvance();
435
- i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedTechnicalDesign(ctx_r1.componentOptions[0]), i0.ɵɵsanitizeHtml);
436
- } }
437
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_4_Template(rf, ctx) { if (rf & 1) {
438
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
439
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_4_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_4_ng_template_2_Template, 2, 1, "ng-template", 5);
440
- i0.ɵɵelementEnd();
441
- } if (rf & 2) {
442
- const ctx_r1 = i0.ɵɵnextContext(3);
443
- i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements);
444
- } }
445
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_5_ng_template_1_Template(rf, ctx) { if (rf & 1) {
446
- i0.ɵɵelement(0, "i", 16);
447
- i0.ɵɵtext(1, " Code ");
448
- } }
449
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {
450
- const _r19 = i0.ɵɵgetCurrentView();
451
- i0.ɵɵelementStart(0, "div", 38)(1, "mj-code-editor", 59);
452
- i0.ɵɵlistener("toolbarAction", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_5_ng_template_2_Template_mj_code_editor_toolbarAction_1_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.handleCodeToolbarAction($event)); });
453
- i0.ɵɵelementEnd()();
454
- } if (rf & 2) {
455
- const ctx_r1 = i0.ɵɵnextContext(4);
456
- i0.ɵɵadvance();
457
- i0.ɵɵproperty("language", "javascript")("value", ctx_r1.getComponentCode(ctx_r1.componentOptions[0]))("autoFocus", false)("indentWithTab", true)("readonly", true)("toolbar", ctx_r1.codeToolbarConfig);
458
- } }
459
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_5_Template(rf, ctx) { if (rf & 1) {
460
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
461
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_5_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_5_ng_template_2_Template, 2, 6, "ng-template", 5);
462
- i0.ɵɵelementEnd();
463
- } if (rf & 2) {
464
- const ctx_r1 = i0.ɵɵnextContext(3);
465
- i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements && !ctx_r1.showTechnicalDesign);
466
- } }
467
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_6_ng_template_1_Template(rf, ctx) { if (rf & 1) {
468
- i0.ɵɵelement(0, "i", 57);
469
- i0.ɵɵtext(1, " Spec ");
289
+ function SkipDynamicUIComponentComponent_Conditional_1_ng_template_10_Template(rf, ctx) { if (rf & 1) {
290
+ i0.ɵɵelement(0, "i", 20);
291
+ i0.ɵɵtext(1, " Component ");
470
292
  } }
471
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_6_ng_template_2_Template(rf, ctx) { if (rf & 1) {
472
- const _r20 = i0.ɵɵgetCurrentView();
473
- i0.ɵɵelementStart(0, "div", 38)(1, "mj-code-editor", 39);
474
- i0.ɵɵlistener("toolbarAction", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_6_ng_template_2_Template_mj_code_editor_toolbarAction_1_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.handleCodeToolbarAction($event)); });
475
- i0.ɵɵelementEnd()();
476
- } if (rf & 2) {
477
- const ctx_r1 = i0.ɵɵnextContext(4);
478
- i0.ɵɵadvance();
479
- i0.ɵɵproperty("value", ctx_r1.getComponentSpec(ctx_r1.componentOptions[0]))("language", "json")("autoFocus", false)("indentWithTab", true)("readonly", true)("toolbar", ctx_r1.codeToolbarConfig);
480
- } }
481
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_6_Template(rf, ctx) { if (rf & 1) {
482
- i0.ɵɵelementStart(0, "kendo-tabstrip-tab", 3);
483
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_6_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_6_ng_template_2_Template, 2, 6, "ng-template", 5);
293
+ function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_1_Template(rf, ctx) { if (rf & 1) {
294
+ const _r14 = i0.ɵɵgetCurrentView();
295
+ i0.ɵɵelementStart(0, "mj-react-component", 24);
296
+ i0.ɵɵlistener("stateChange", function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_1_Template_mj_react_component_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onStateChange(0, $event)); })("componentEvent", function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_1_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onComponentEvent(0, $event)); })("refreshData", function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_1_Template_mj_react_component_refreshData_0_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleRefreshData()); })("openEntityRecord", function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_1_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
484
297
  i0.ɵɵelementEnd();
485
298
  } if (rf & 2) {
486
299
  const ctx_r1 = i0.ɵɵnextContext(3);
487
- i0.ɵɵproperty("selected", !ctx_r1.showFunctionalRequirements && !ctx_r1.showDataRequirements && !ctx_r1.showTechnicalDesign && !ctx_r1.showCode);
488
- } }
489
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Template(rf, ctx) { if (rf & 1) {
490
- const _r18 = i0.ɵɵgetCurrentView();
491
- i0.ɵɵelementStart(0, "div", 32)(1, "kendo-tabstrip", 33);
492
- i0.ɵɵtemplate(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_2_Template, 3, 1, "kendo-tabstrip-tab", 3)(3, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_3_Template, 3, 1, "kendo-tabstrip-tab", 3)(4, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_4_Template, 3, 1, "kendo-tabstrip-tab", 3)(5, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_5_Template, 3, 1, "kendo-tabstrip-tab", 3)(6, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Conditional_6_Template, 3, 1, "kendo-tabstrip-tab", 3);
493
- i0.ɵɵelementEnd()();
494
- i0.ɵɵelementStart(7, "div", 34);
495
- i0.ɵɵlistener("mousedown", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Template_div_mousedown_7_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.startResize($event)); })("touchstart", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Template_div_touchstart_7_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.startResize($event)); });
496
- i0.ɵɵelement(8, "div", 35);
497
- i0.ɵɵelementEnd();
498
- } if (rf & 2) {
499
- const ctx_r1 = i0.ɵɵnextContext(2);
500
- i0.ɵɵstyleProp("height", ctx_r1.detailsPanelHeight);
501
- i0.ɵɵadvance(2);
502
- i0.ɵɵconditional(ctx_r1.showFunctionalRequirements && ctx_r1.componentOptions[0] ? 2 : -1);
503
- i0.ɵɵadvance();
504
- i0.ɵɵconditional(ctx_r1.showDataRequirements && ctx_r1.componentOptions[0] ? 3 : -1);
505
- i0.ɵɵadvance();
506
- i0.ɵɵconditional(ctx_r1.showTechnicalDesign && ctx_r1.componentOptions[0] ? 4 : -1);
507
- i0.ɵɵadvance();
508
- i0.ɵɵconditional(ctx_r1.showCode && ctx_r1.componentOptions[0] ? 5 : -1);
509
- i0.ɵɵadvance();
510
- i0.ɵɵconditional(ctx_r1.showSpec && ctx_r1.componentOptions[0] ? 6 : -1);
300
+ i0.ɵɵproperty("component", ctx_r1.componentOptions[0].option)("styles", ctx_r1.componentStyles || undefined);
511
301
  } }
512
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Conditional_19_Template(rf, ctx) { if (rf & 1) {
513
- i0.ɵɵelementStart(0, "details", 49)(1, "summary", 55);
302
+ function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
303
+ i0.ɵɵelementStart(0, "details", 33)(1, "summary", 39);
514
304
  i0.ɵɵtext(2, "Technical Details (click to expand)");
515
305
  i0.ɵɵelementEnd();
516
- i0.ɵɵelementStart(3, "pre", 56);
306
+ i0.ɵɵelementStart(3, "pre", 40);
517
307
  i0.ɵɵtext(4);
518
308
  i0.ɵɵelementEnd()();
519
309
  } if (rf & 2) {
520
- const ctx_r1 = i0.ɵɵnextContext(3);
310
+ const ctx_r1 = i0.ɵɵnextContext(4);
521
311
  i0.ɵɵadvance(4);
522
312
  i0.ɵɵtextInterpolate(ctx_r1.formatTechnicalDetails(ctx_r1.currentError.technicalDetails));
523
313
  } }
524
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Template(rf, ctx) { if (rf & 1) {
525
- const _r21 = i0.ɵɵgetCurrentView();
526
- i0.ɵɵelementStart(0, "div", 58)(1, "div", 60)(2, "div", 42)(3, "button", 43);
527
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
528
- i0.ɵɵelement(4, "span", 44);
314
+ function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_2_Template(rf, ctx) { if (rf & 1) {
315
+ const _r15 = i0.ɵɵgetCurrentView();
316
+ i0.ɵɵelementStart(0, "div", 23)(1, "div", 25)(2, "div", 26)(3, "button", 27);
317
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_2_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.copyErrorToClipboard()); });
318
+ i0.ɵɵelement(4, "span", 28);
529
319
  i0.ɵɵtext(5, " Copy Error Details ");
530
320
  i0.ɵɵelementEnd();
531
- i0.ɵɵelementStart(6, "h3", 45);
532
- i0.ɵɵelement(7, "span", 46);
321
+ i0.ɵɵelementStart(6, "h3", 29);
322
+ i0.ɵɵelement(7, "span", 30);
533
323
  i0.ɵɵtext(8, " Component Rendering Error ");
534
324
  i0.ɵɵelementEnd()();
535
- i0.ɵɵelementStart(9, "p", 47);
325
+ i0.ɵɵelementStart(9, "p", 31);
536
326
  i0.ɵɵtext(10, " The selected component option could not be rendered due to the following error: ");
537
327
  i0.ɵɵelementEnd();
538
- i0.ɵɵelementStart(11, "div", 48)(12, "strong");
328
+ i0.ɵɵelementStart(11, "div", 32)(12, "strong");
539
329
  i0.ɵɵtext(13, "Error Type:");
540
330
  i0.ɵɵelementEnd();
541
331
  i0.ɵɵtext(14);
@@ -544,24 +334,24 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Template(r
544
334
  i0.ɵɵtext(17, "Details:");
545
335
  i0.ɵɵelementEnd();
546
336
  i0.ɵɵtext(18);
547
- i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Conditional_19_Template, 5, 1, "details", 49);
337
+ i0.ɵɵtemplate(19, SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_2_Conditional_19_Template, 5, 1, "details", 33);
548
338
  i0.ɵɵelementEnd();
549
- i0.ɵɵelementStart(20, "div", 50)(21, "strong", 51);
339
+ i0.ɵɵelementStart(20, "div", 34)(21, "strong", 35);
550
340
  i0.ɵɵtext(22, "What to do:");
551
341
  i0.ɵɵelementEnd();
552
- i0.ɵɵelementStart(23, "ol", 52)(24, "li");
342
+ i0.ɵɵelementStart(23, "ol", 36)(24, "li");
553
343
  i0.ɵɵtext(25, "Copy the error details and send them back to Skip in the chat to get a corrected version");
554
344
  i0.ɵɵelementEnd();
555
345
  i0.ɵɵelementStart(26, "li");
556
346
  i0.ɵɵtext(27, "Contact your IT department if the issue persists");
557
347
  i0.ɵɵelementEnd()()();
558
- i0.ɵɵelementStart(28, "button", 53);
559
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r21); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
560
- i0.ɵɵelement(29, "span", 54);
348
+ i0.ɵɵelementStart(28, "button", 37);
349
+ i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_2_Template_button_click_28_listener() { i0.ɵɵrestoreView(_r15); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.retryCurrentOption()); });
350
+ i0.ɵɵelement(29, "span", 38);
561
351
  i0.ɵɵtext(30, " Retry ");
562
352
  i0.ɵɵelementEnd()()();
563
353
  } if (rf & 2) {
564
- const ctx_r1 = i0.ɵɵnextContext(2);
354
+ const ctx_r1 = i0.ɵɵnextContext(3);
565
355
  i0.ɵɵadvance(14);
566
356
  i0.ɵɵtextInterpolate1(" ", ctx_r1.currentError.type, "");
567
357
  i0.ɵɵadvance(4);
@@ -569,84 +359,119 @@ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Template(r
569
359
  i0.ɵɵadvance();
570
360
  i0.ɵɵconditional(ctx_r1.currentError.technicalDetails ? 19 : -1);
571
361
  } }
572
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_mj_react_component_1_Template(rf, ctx) { if (rf & 1) {
573
- const _r22 = i0.ɵɵgetCurrentView();
574
- i0.ɵɵelementStart(0, "mj-react-component", 40);
575
- i0.ɵɵlistener("stateChange", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_mj_react_component_1_Template_mj_react_component_stateChange_0_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onStateChange(0, $event)); })("componentEvent", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_mj_react_component_1_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onComponentEvent(0, $event)); })("refreshData", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_mj_react_component_1_Template_mj_react_component_refreshData_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleRefreshData()); })("openEntityRecord", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_mj_react_component_1_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r22); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.onOpenEntityRecord($event)); });
362
+ function SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Template(rf, ctx) { if (rf & 1) {
363
+ i0.ɵɵelementStart(0, "div", 21);
364
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_1_Template, 1, 2, "mj-react-component", 49)(2, SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Conditional_2_Template, 31, 3, "div", 23);
365
+ i0.ɵɵelementEnd();
366
+ } if (rf & 2) {
367
+ const ctx_r1 = i0.ɵɵnextContext(2);
368
+ i0.ɵɵadvance();
369
+ i0.ɵɵconditional(!ctx_r1.currentError && ctx_r1.componentOptions[0] ? 1 : -1);
370
+ i0.ɵɵadvance();
371
+ i0.ɵɵconditional(ctx_r1.currentError ? 2 : -1);
372
+ } }
373
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_12_ng_template_1_Template(rf, ctx) { if (rf & 1) {
374
+ i0.ɵɵelement(0, "i", 41);
375
+ i0.ɵɵtext(1, " Functional ");
376
+ } }
377
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_12_ng_template_2_Template(rf, ctx) { if (rf & 1) {
378
+ i0.ɵɵelementStart(0, "div", 42);
379
+ i0.ɵɵelement(1, "div", 43);
576
380
  i0.ɵɵelementEnd();
577
381
  } if (rf & 2) {
578
382
  const ctx_r1 = i0.ɵɵnextContext(3);
579
- i0.ɵɵproperty("component", ctx_r1.componentOptions[0].option)("styles", ctx_r1.componentStyles || undefined);
383
+ i0.ɵɵadvance();
384
+ i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedFunctionalRequirements(ctx_r1.componentOptions[0]), i0.ɵɵsanitizeHtml);
385
+ } }
386
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_12_Template(rf, ctx) { if (rf & 1) {
387
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab");
388
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_12_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_12_ng_template_2_Template, 2, 1, "ng-template", 5);
389
+ i0.ɵɵelementEnd();
390
+ } }
391
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_13_ng_template_1_Template(rf, ctx) { if (rf & 1) {
392
+ i0.ɵɵelement(0, "i", 44);
393
+ i0.ɵɵtext(1, " Technical ");
580
394
  } }
581
- function SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_Template(rf, ctx) { if (rf & 1) {
582
- i0.ɵɵelementStart(0, "div", 23);
583
- i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_mj_react_component_1_Template, 1, 2, "mj-react-component", 24);
395
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_13_ng_template_2_Template(rf, ctx) { if (rf & 1) {
396
+ i0.ɵɵelementStart(0, "div", 42);
397
+ i0.ɵɵelement(1, "div", 43);
584
398
  i0.ɵɵelementEnd();
585
399
  } if (rf & 2) {
586
- const ctx_r1 = i0.ɵɵnextContext(2);
400
+ const ctx_r1 = i0.ɵɵnextContext(3);
587
401
  i0.ɵɵadvance();
588
- i0.ɵɵproperty("ngIf", ctx_r1.componentOptions[0]);
402
+ i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedTechnicalDesign(ctx_r1.componentOptions[0]), i0.ɵɵsanitizeHtml);
589
403
  } }
590
- function SkipDynamicUIComponentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
591
- const _r14 = i0.ɵɵgetCurrentView();
592
- i0.ɵɵelementStart(0, "div", 1)(1, "div", 7)(2, "div", 8)(3, "button", 9);
593
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowFunctionalRequirements()); });
594
- i0.ɵɵelement(4, "i", 10);
595
- i0.ɵɵelementStart(5, "span");
596
- i0.ɵɵtext(6, "Functional");
597
- i0.ɵɵelementEnd()();
598
- i0.ɵɵelementStart(7, "button", 11);
599
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowDataRequirements()); });
600
- i0.ɵɵelement(8, "i", 12);
601
- i0.ɵɵelementStart(9, "span");
602
- i0.ɵɵtext(10, "Data");
603
- i0.ɵɵelementEnd()();
604
- i0.ɵɵelementStart(11, "button", 13);
605
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowTechnicalDesign()); });
606
- i0.ɵɵelement(12, "i", 14);
607
- i0.ɵɵelementStart(13, "span");
608
- i0.ɵɵtext(14, "Technical");
404
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_13_Template(rf, ctx) { if (rf & 1) {
405
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab");
406
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_13_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_13_ng_template_2_Template, 2, 1, "ng-template", 5);
407
+ i0.ɵɵelementEnd();
408
+ } }
409
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_14_ng_template_1_Template(rf, ctx) { if (rf & 1) {
410
+ i0.ɵɵelement(0, "i", 45);
411
+ i0.ɵɵtext(1, " Data Spec ");
412
+ } }
413
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_14_ng_template_2_Template(rf, ctx) { if (rf & 1) {
414
+ i0.ɵɵelementStart(0, "div", 42);
415
+ i0.ɵɵelement(1, "div", 43);
416
+ i0.ɵɵelementEnd();
417
+ } if (rf & 2) {
418
+ const ctx_r1 = i0.ɵɵnextContext(3);
419
+ i0.ɵɵadvance();
420
+ i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedDataRequirements(ctx_r1.componentOptions[0]), i0.ɵɵsanitizeHtml);
421
+ } }
422
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
423
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab");
424
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_14_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_14_ng_template_2_Template, 2, 1, "ng-template", 5);
425
+ i0.ɵɵelementEnd();
426
+ } }
427
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_15_ng_template_1_Template(rf, ctx) { if (rf & 1) {
428
+ i0.ɵɵelement(0, "i", 46);
429
+ i0.ɵɵtext(1, " Code ");
430
+ } }
431
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_15_ng_template_2_Template(rf, ctx) { if (rf & 1) {
432
+ const _r16 = i0.ɵɵgetCurrentView();
433
+ i0.ɵɵelementStart(0, "div", 47)(1, "mj-code-editor", 48);
434
+ i0.ɵɵlistener("toolbarAction", function SkipDynamicUIComponentComponent_Conditional_1_Conditional_15_ng_template_2_Template_mj_code_editor_toolbarAction_1_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r1.handleCodeToolbarAction($event)); });
609
435
  i0.ɵɵelementEnd()();
610
- i0.ɵɵelementStart(15, "button", 15);
611
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_15_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowCode()); });
612
- i0.ɵɵelement(16, "i", 16);
613
- i0.ɵɵelementStart(17, "span");
614
- i0.ɵɵtext(18, "Code");
436
+ } if (rf & 2) {
437
+ const ctx_r1 = i0.ɵɵnextContext(3);
438
+ i0.ɵɵadvance();
439
+ i0.ɵɵproperty("value", ctx_r1.getComponentCode(ctx_r1.componentOptions[0]))("language", "javascript")("autoFocus", false)("indentWithTab", true)("readonly", true)("toolbar", ctx_r1.codeToolbarConfig);
440
+ } }
441
+ function SkipDynamicUIComponentComponent_Conditional_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
442
+ i0.ɵɵelementStart(0, "kendo-tabstrip-tab");
443
+ i0.ɵɵtemplate(1, SkipDynamicUIComponentComponent_Conditional_1_Conditional_15_ng_template_1_Template, 2, 0, "ng-template", 4)(2, SkipDynamicUIComponentComponent_Conditional_1_Conditional_15_ng_template_2_Template, 2, 6, "ng-template", 5);
444
+ i0.ɵɵelementEnd();
445
+ } }
446
+ function SkipDynamicUIComponentComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
447
+ i0.ɵɵelementStart(0, "div", 1)(1, "div", 7);
448
+ i0.ɵɵelement(2, "div", 8);
449
+ i0.ɵɵelementStart(3, "div", 9);
450
+ i0.ɵɵtemplate(4, SkipDynamicUIComponentComponent_Conditional_1_button_4_Template, 4, 1, "button", 10)(5, SkipDynamicUIComponentComponent_Conditional_1_button_5_Template, 4, 0, "button", 11)(6, SkipDynamicUIComponentComponent_Conditional_1_button_6_Template, 4, 0, "button", 12);
615
451
  i0.ɵɵelementEnd()();
616
- i0.ɵɵelementStart(19, "button", 17);
617
- i0.ɵɵlistener("click", function SkipDynamicUIComponentComponent_Conditional_1_Template_button_click_19_listener() { i0.ɵɵrestoreView(_r14); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleShowSpec()); });
618
- i0.ɵɵelement(20, "i", 57);
619
- i0.ɵɵelementStart(21, "span");
620
- i0.ɵɵtext(22, "Spec");
452
+ i0.ɵɵelementStart(7, "div", 13)(8, "kendo-tabstrip", 1)(9, "kendo-tabstrip-tab", 3);
453
+ i0.ɵɵtemplate(10, SkipDynamicUIComponentComponent_Conditional_1_ng_template_10_Template, 2, 0, "ng-template", 4)(11, SkipDynamicUIComponentComponent_Conditional_1_ng_template_11_Template, 3, 2, "ng-template", 5);
454
+ i0.ɵɵelementEnd();
455
+ i0.ɵɵtemplate(12, SkipDynamicUIComponentComponent_Conditional_1_Conditional_12_Template, 3, 0, "kendo-tabstrip-tab")(13, SkipDynamicUIComponentComponent_Conditional_1_Conditional_13_Template, 3, 0, "kendo-tabstrip-tab")(14, SkipDynamicUIComponentComponent_Conditional_1_Conditional_14_Template, 3, 0, "kendo-tabstrip-tab")(15, SkipDynamicUIComponentComponent_Conditional_1_Conditional_15_Template, 3, 0, "kendo-tabstrip-tab");
621
456
  i0.ɵɵelementEnd()()();
622
- i0.ɵɵelementStart(23, "div", 18);
623
- i0.ɵɵtemplate(24, SkipDynamicUIComponentComponent_Conditional_1_button_24_Template, 4, 1, "button", 19)(25, SkipDynamicUIComponentComponent_Conditional_1_button_25_Template, 4, 0, "button", 20)(26, SkipDynamicUIComponentComponent_Conditional_1_button_26_Template, 4, 0, "button", 21);
624
- i0.ɵɵelementEnd()();
625
- i0.ɵɵelementStart(27, "div", 22);
626
- i0.ɵɵtemplate(28, SkipDynamicUIComponentComponent_Conditional_1_Conditional_28_Template, 9, 7)(29, SkipDynamicUIComponentComponent_Conditional_1_Conditional_29_Template, 31, 3, "div", 58)(30, SkipDynamicUIComponentComponent_Conditional_1_Conditional_30_Template, 2, 1, "div", 23);
627
- i0.ɵɵelementEnd()();
628
457
  } if (rf & 2) {
629
458
  const ctx_r1 = i0.ɵɵnextContext();
630
- i0.ɵɵadvance(3);
631
- i0.ɵɵclassProp("active", ctx_r1.showFunctionalRequirements);
632
- i0.ɵɵadvance(4);
633
- i0.ɵɵclassProp("active", ctx_r1.showDataRequirements);
634
- i0.ɵɵadvance(4);
635
- i0.ɵɵclassProp("active", ctx_r1.showTechnicalDesign);
636
459
  i0.ɵɵadvance(4);
637
- i0.ɵɵclassProp("active", ctx_r1.showCode);
638
- i0.ɵɵadvance(4);
639
- i0.ɵɵclassProp("active", ctx_r1.showSpec);
640
- i0.ɵɵadvance(5);
641
460
  i0.ɵɵproperty("ngIf", ctx_r1.ShowCreateReportButton && !ctx_r1.matchingReportID);
642
461
  i0.ɵɵadvance();
643
462
  i0.ɵɵproperty("ngIf", ctx_r1.ShowOpenSavedReportButton && ctx_r1.matchingReportID);
644
463
  i0.ɵɵadvance();
645
464
  i0.ɵɵproperty("ngIf", ctx_r1.ShowPrintReport);
646
- i0.ɵɵadvance(2);
647
- i0.ɵɵconditional(ctx_r1.showFunctionalRequirements || ctx_r1.showDataRequirements || ctx_r1.showTechnicalDesign || ctx_r1.showCode || ctx_r1.showSpec ? 28 : -1);
465
+ i0.ɵɵadvance(3);
466
+ i0.ɵɵproperty("selected", true);
467
+ i0.ɵɵadvance(3);
468
+ i0.ɵɵconditional(ctx_r1.componentOptions[0] ? 12 : -1);
469
+ i0.ɵɵadvance();
470
+ i0.ɵɵconditional(ctx_r1.componentOptions[0] ? 13 : -1);
648
471
  i0.ɵɵadvance();
649
- i0.ɵɵconditional(ctx_r1.currentError ? 29 : 30);
472
+ i0.ɵɵconditional(ctx_r1.componentOptions[0] ? 14 : -1);
473
+ i0.ɵɵadvance();
474
+ i0.ɵɵconditional(ctx_r1.componentOptions[0] ? 15 : -1);
650
475
  } }
651
476
  export class SkipDynamicUIComponentComponent {
652
477
  sanitizer;
@@ -671,22 +496,11 @@ export class SkipDynamicUIComponentComponent {
671
496
  // Cached component type name to avoid expression change errors
672
497
  _cachedComponentTypeName = 'Component';
673
498
  isCreatingReport = false;
674
- // Toggle states for showing/hiding component details
675
- showFunctionalRequirements = false;
676
- showDataRequirements = false;
677
- showTechnicalDesign = false;
678
- showCode = false;
679
- showSpec = false;
680
499
  // Toolbar configuration for code editors
681
500
  codeToolbarConfig = {
682
501
  enabled: true,
683
502
  buttons: [TOOLBAR_BUTTONS.COPY]
684
503
  };
685
- // Details panel height for resizing
686
- detailsPanelHeight = '300px';
687
- isResizing = false;
688
- startY = 0;
689
- startHeight = 0;
690
504
  // Cache for user states only - component specs come from data
691
505
  userStates = new Map();
692
506
  // Note: utilities are now auto-initialized by mj-react-component if not provided
@@ -776,13 +590,144 @@ export class SkipDynamicUIComponentComponent {
776
590
  this.ComponentObjectName = null;
777
591
  }
778
592
  }
593
+ /**
594
+ * Print the current report
595
+ * Uses a hidden iframe to print only the component content without opening new windows
596
+ */
779
597
  async PrintReport() {
780
- const currentComponent = this.getCurrentReactComponent();
781
- if (currentComponent) {
782
- // React component handles printing internally
783
- window.print();
598
+ try {
599
+ // Find the currently visible React component
600
+ let componentElement = null;
601
+ const allComponents = document.querySelectorAll('mj-react-component');
602
+ for (const comp of Array.from(allComponents)) {
603
+ const rect = comp.getBoundingClientRect();
604
+ if (rect.width > 0 && rect.height > 0) {
605
+ const parent = comp.closest('.k-content.k-state-active');
606
+ if (parent || allComponents.length === 1) {
607
+ componentElement = comp;
608
+ break;
609
+ }
610
+ }
611
+ }
612
+ if (!componentElement) {
613
+ console.warn('No visible React component found to print');
614
+ window.print();
615
+ return;
616
+ }
617
+ // Create a hidden iframe for printing
618
+ const printFrame = document.createElement('iframe');
619
+ printFrame.style.position = 'absolute';
620
+ printFrame.style.width = '0';
621
+ printFrame.style.height = '0';
622
+ printFrame.style.border = 'none';
623
+ printFrame.style.left = '-9999px';
624
+ document.body.appendChild(printFrame);
625
+ const printDocument = printFrame.contentDocument || printFrame.contentWindow?.document;
626
+ if (!printDocument) {
627
+ console.error('Could not access iframe document');
628
+ document.body.removeChild(printFrame);
629
+ window.print();
630
+ return;
631
+ }
632
+ // Clone the component element to preserve current state
633
+ const clonedContent = componentElement.cloneNode(true);
634
+ // Get all stylesheets
635
+ const styleSheets = Array.from(document.styleSheets)
636
+ .map(sheet => {
637
+ try {
638
+ return Array.from(sheet.cssRules || [])
639
+ .map(rule => rule.cssText)
640
+ .join('\n');
641
+ }
642
+ catch (e) {
643
+ return '';
644
+ }
645
+ })
646
+ .filter(css => css.length > 0)
647
+ .join('\n');
648
+ // Get external stylesheet links
649
+ const styleLinks = Array.from(document.querySelectorAll('link[rel="stylesheet"]'))
650
+ .map(link => link.href)
651
+ .map(href => `<link rel="stylesheet" href="${href}">`)
652
+ .join('\n');
653
+ // Build the print document
654
+ printDocument.open();
655
+ printDocument.write(`
656
+ <!DOCTYPE html>
657
+ <html>
658
+ <head>
659
+ <meta charset="utf-8">
660
+ <title>Print Report</title>
661
+ ${styleLinks}
662
+ <style>
663
+ ${styleSheets}
664
+
665
+ /* Reset styles for print */
666
+ body {
667
+ margin: 0;
668
+ padding: 20px;
669
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
670
+ background: white;
671
+ }
672
+
673
+ /* Ensure proper print colors */
674
+ * {
675
+ -webkit-print-color-adjust: exact !important;
676
+ print-color-adjust: exact !important;
677
+ color-adjust: exact !important;
678
+ }
679
+
680
+ /* Make sure charts and tables are visible */
681
+ canvas, svg {
682
+ max-width: 100% !important;
683
+ page-break-inside: avoid;
684
+ }
685
+
686
+ table {
687
+ width: 100% !important;
688
+ page-break-inside: auto;
689
+ }
690
+
691
+ tr {
692
+ page-break-inside: avoid;
693
+ page-break-after: auto;
694
+ }
695
+
696
+ /* Hide any remaining UI elements */
697
+ .k-tabstrip-items,
698
+ .tab-action-bar,
699
+ button {
700
+ display: none !important;
701
+ }
702
+
703
+ @media print {
704
+ body {
705
+ margin: 0;
706
+ padding: 10px;
707
+ }
708
+ }
709
+ </style>
710
+ </head>
711
+ <body></body>
712
+ </html>
713
+ `);
714
+ printDocument.close();
715
+ // Append the cloned content
716
+ printDocument.body.appendChild(clonedContent);
717
+ // Wait for content to render (especially important for charts)
718
+ await new Promise(resolve => setTimeout(resolve, 500));
719
+ // Trigger print for the iframe
720
+ if (printFrame.contentWindow) {
721
+ printFrame.contentWindow.focus();
722
+ printFrame.contentWindow.print();
723
+ }
724
+ // Clean up the iframe after a delay to ensure print dialog has opened
725
+ setTimeout(() => {
726
+ document.body.removeChild(printFrame);
727
+ }, 1000);
784
728
  }
785
- else {
729
+ catch (error) {
730
+ console.error('Error printing report:', error);
786
731
  window.print();
787
732
  }
788
733
  }
@@ -870,42 +815,6 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
870
815
  get firstOptionComponentTypeName() {
871
816
  return this._cachedComponentTypeName;
872
817
  }
873
- /**
874
- * Toggle methods for showing/hiding component details
875
- */
876
- toggleShowFunctionalRequirements() {
877
- this.showFunctionalRequirements = !this.showFunctionalRequirements;
878
- this.adjustDetailsPanelHeight();
879
- }
880
- toggleShowDataRequirements() {
881
- this.showDataRequirements = !this.showDataRequirements;
882
- this.adjustDetailsPanelHeight();
883
- }
884
- toggleShowTechnicalDesign() {
885
- this.showTechnicalDesign = !this.showTechnicalDesign;
886
- this.adjustDetailsPanelHeight();
887
- }
888
- toggleShowCode() {
889
- this.showCode = !this.showCode;
890
- this.adjustDetailsPanelHeight();
891
- }
892
- toggleShowSpec() {
893
- this.showSpec = !this.showSpec;
894
- this.adjustDetailsPanelHeight();
895
- }
896
- /**
897
- * Adjust the details panel height when toggling views
898
- */
899
- adjustDetailsPanelHeight() {
900
- const anyVisible = this.showFunctionalRequirements || this.showDataRequirements ||
901
- this.showTechnicalDesign || this.showCode || this.showSpec;
902
- if (anyVisible && this.detailsPanelHeight === '0px') {
903
- this.detailsPanelHeight = '300px';
904
- }
905
- else if (!anyVisible) {
906
- this.detailsPanelHeight = '0px';
907
- }
908
- }
909
818
  /**
910
819
  * Format functional requirements as HTML
911
820
  */
@@ -994,60 +903,11 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
994
903
  return `// Error building complete component spec:\n// ${e}`;
995
904
  }
996
905
  }
997
- /**
998
- * Start resizing the details panel
999
- */
1000
- startResize(event) {
1001
- event.preventDefault();
1002
- this.isResizing = true;
1003
- this.startY = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;
1004
- this.startHeight = parseInt(this.detailsPanelHeight, 10);
1005
- // Use NgZone to run outside Angular to prevent change detection during drag
1006
- this.ngZone.runOutsideAngular(() => {
1007
- document.addEventListener('mousemove', this.onResize);
1008
- document.addEventListener('mouseup', this.stopResize);
1009
- document.addEventListener('touchmove', this.onResize);
1010
- document.addEventListener('touchend', this.stopResize);
1011
- });
1012
- }
1013
- /**
1014
- * Handle resize movement
1015
- */
1016
- onResize = (event) => {
1017
- if (!this.isResizing)
1018
- return;
1019
- const currentY = event instanceof MouseEvent ? event.clientY : event.touches[0].clientY;
1020
- const deltaY = currentY - this.startY;
1021
- const newHeight = Math.max(100, Math.min(600, this.startHeight + deltaY));
1022
- // Run inside Angular to update the binding
1023
- this.ngZone.run(() => {
1024
- this.detailsPanelHeight = `${newHeight}px`;
1025
- this.cdr.detectChanges();
1026
- });
1027
- };
1028
- /**
1029
- * Stop resizing
1030
- */
1031
- stopResize = () => {
1032
- this.isResizing = false;
1033
- document.removeEventListener('mousemove', this.onResize);
1034
- document.removeEventListener('mouseup', this.stopResize);
1035
- document.removeEventListener('touchmove', this.onResize);
1036
- document.removeEventListener('touchend', this.stopResize);
1037
- };
1038
- onWindowResize() {
1039
- // Ensure the details panel height remains valid on window resize
1040
- const currentHeight = parseInt(this.detailsPanelHeight, 10);
1041
- const maxHeight = window.innerHeight * 0.6;
1042
- if (currentHeight > maxHeight) {
1043
- this.detailsPanelHeight = `${maxHeight}px`;
1044
- }
1045
- }
1046
906
  async ngAfterViewInit() {
1047
907
  // Initialize libraries once per application if not already done
1048
908
  if (!SkipDynamicUIComponentComponent.librariesInitialized) {
1049
909
  try {
1050
- await this.adapter.initialize(undefined, SKIP_CHAT_ADDITIONAL_LIBRARIES);
910
+ await this.adapter.initialize(undefined, SKIP_CHAT_ADDITIONAL_LIBRARIES, { debug: true });
1051
911
  SkipDynamicUIComponentComponent.librariesInitialized = true;
1052
912
  }
1053
913
  catch (error) {
@@ -1076,10 +936,6 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1076
936
  ngOnDestroy() {
1077
937
  // Clean up user states
1078
938
  this.userStates.clear();
1079
- // Ensure resize listeners are removed if still active
1080
- if (this.isResizing) {
1081
- this.stopResize();
1082
- }
1083
939
  // The MJReactComponent handles its own cleanup
1084
940
  }
1085
941
  ngOnChanges(changes) {
@@ -1291,17 +1147,15 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1291
1147
  } if (rf & 2) {
1292
1148
  let _t;
1293
1149
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.reactComponents = _t);
1294
- } }, hostBindings: function SkipDynamicUIComponentComponent_HostBindings(rf, ctx) { if (rf & 1) {
1295
- i0.ɵɵlistener("resize", function SkipDynamicUIComponentComponent_resize_HostBindingHandler() { return ctx.onWindowResize(); }, false, i0.ɵɵresolveWindow);
1296
- } }, inputs: { UIComponentCode: "UIComponentCode", ComponentObjectName: "ComponentObjectName", ShowPrintReport: "ShowPrintReport", ShowReportOptionsToggle: "ShowReportOptionsToggle", ShowCreateReportButton: "ShowCreateReportButton", ShowOpenSavedReportButton: "ShowOpenSavedReportButton", matchingReportID: "matchingReportID", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent", CreateReportRequested: "CreateReportRequested", NavigateToMatchingReportRequested: "NavigateToMatchingReportRequested" }, 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"], ["title", "Toggle Spec View", 1, "tab-action-button", "toggle-button", 3, "click"], [1, "tab-actions-right"], ["class", "tab-action-button create-button", 3, "disabled", "click", 4, "ngIf"], ["class", "tab-action-button create-button", 3, "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", "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-save"], [1, "tab-action-button", "create-button", 3, "click"], [1, "fa-solid", "fa-folder-open"], ["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, "toolbarAction", "value", "language", "autoFocus", "indentWithTab", "readonly", "toolbar"], [2, "width", "100%", "height", "100%", 3, "stateChange", "componentEvent", "refreshData", "openEntityRecord", "component", "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"], [1, "fa-solid", "fa-file-code"], [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, "toolbarAction", "language", "value", "autoFocus", "indentWithTab", "readonly", "toolbar"], [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) {
1297
- i0.ɵɵtemplate(0, SkipDynamicUIComponentComponent_Conditional_0_Template, 3, 1, "kendo-tabstrip", 0)(1, SkipDynamicUIComponentComponent_Conditional_1_Template, 31, 15, "div", 1);
1150
+ } }, inputs: { UIComponentCode: "UIComponentCode", ComponentObjectName: "ComponentObjectName", ShowPrintReport: "ShowPrintReport", ShowReportOptionsToggle: "ShowReportOptionsToggle", ShowCreateReportButton: "ShowCreateReportButton", ShowOpenSavedReportButton: "ShowOpenSavedReportButton", matchingReportID: "matchingReportID", SkipData: "SkipData" }, outputs: { DrillDownEvent: "DrillDownEvent", CreateReportRequested: "CreateReportRequested", NavigateToMatchingReportRequested: "NavigateToMatchingReportRequested" }, 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"], [1, "tab-actions-right"], ["class", "tab-action-button create-button", 3, "disabled", "click", 4, "ngIf"], ["class", "tab-action-button create-button", 3, "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"], [1, "tab-action-button", "create-button", 3, "click", "disabled"], [1, "fa-solid", "fa-save"], [1, "tab-action-button", "create-button", 3, "click"], [1, "fa-solid", "fa-folder-open"], ["title", "Print Report", 1, "tab-action-button", "print-button", 3, "click"], [1, "fa-solid", "fa-print"], [1, "fa-solid", "fa-chart-line"], [2, "height", "100%", "position", "relative", "overflow", "auto"], ["style", "width: 100%; height: 100%;", 3, "component", "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"], [2, "width", "100%", "height", "100%", 3, "stateChange", "componentEvent", "refreshData", "openEntityRecord", "component", "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"], [1, "fa-solid", "fa-list-check"], [1, "details-content", 2, "height", "100%", "overflow", "auto", "padding", "20px"], [3, "innerHTML"], [1, "fa-solid", "fa-cogs"], [1, "fa-solid", "fa-database"], [1, "fa-solid", "fa-code"], [1, "details-content", "code-content", 2, "height", "100%", "overflow", "hidden"], [2, "height", "100%", 3, "toolbarAction", "value", "language", "autoFocus", "indentWithTab", "readonly", "toolbar"], [2, "width", "100%", "height", "100%", 3, "component", "styles"]], template: function SkipDynamicUIComponentComponent_Template(rf, ctx) { if (rf & 1) {
1151
+ i0.ɵɵtemplate(0, SkipDynamicUIComponentComponent_Conditional_0_Template, 3, 1, "kendo-tabstrip", 0)(1, SkipDynamicUIComponentComponent_Conditional_1_Template, 16, 8, "div", 1);
1298
1152
  } if (rf & 2) {
1299
1153
  i0.ɵɵconditional(ctx.componentOptions.length > 1 ? 0 : 1);
1300
- } }, dependencies: [i3.NgIf, i4.TabStripComponent, i4.TabStripTabComponent, i4.TabContentDirective, i4.TabTitleDirective, i5.ButtonComponent, i6.CodeEditorComponent, i2.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}"], changeDetection: 0 });
1154
+ } }, dependencies: [i3.NgIf, i4.TabStripComponent, i4.TabStripTabComponent, i4.TabContentDirective, i4.TabTitleDirective, i5.ButtonComponent, i6.CodeEditorComponent, i2.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: 0;\n}\n\n .k-tabstrip-items {\n background: #f8f9fa;\n border: none;\n border-bottom: 1px solid #e0e0e0;\n flex: 0 0 auto;\n padding: 4px 8px 0 8px;\n gap: 2px;\n display: flex;\n min-height: auto;\n height: auto;\n}\n\n .k-tabstrip-items-wrapper {\n height: auto;\n min-height: auto;\n}\n\n .k-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n background: white;\n border: none;\n min-height: 0;\n}\n\n .k-tabstrip .k-item {\n margin-right: 2px;\n border: none;\n background: transparent;\n border-radius: 4px 4px 0 0;\n padding: 0;\n transition: all 0.2s ease;\n height: auto;\n min-height: auto;\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: 6px 12px;\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 display: flex;\n align-items: center;\n gap: 4px;\n line-height: 1.2;\n min-height: auto;\n height: auto;\n}\n\n .k-tabstrip .k-link i {\n font-size: 12px;\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}\n\n\n\n .k-tabstrip .k-tabstrip {\n margin: 0;\n}\n\n .k-tabstrip .k-tabstrip .k-tabstrip-items {\n padding: 2px 4px 0 4px;\n background: #fff;\n border-bottom: 1px solid #e8e8e8;\n}\n\n .k-tabstrip .k-tabstrip .k-link {\n padding: 4px 10px;\n font-size: 12px;\n}\n\n\n\n .k-tabstrip .k-tabstrip .k-content {\n border: none;\n background: transparent;\n}"], changeDetection: 0 });
1301
1155
  }
1302
1156
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SkipDynamicUIComponentComponent, [{
1303
1157
  type: Component,
1304
- args: [{ selector: 'skip-dynamic-ui-component', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (componentOptions.length > 1) {\n <!-- Multiple options: show tabs -->\n <kendo-tabstrip \n (tabSelect)=\"onTabSelect($event)\"\n [keepTabContent]=\"true\"\n style=\"height: 100%; display: flex; flex-direction: column;\">\n @for (option of componentOptions; track option; let i = $index) {\n <kendo-tabstrip-tab [selected]=\"i === selectedReportOptionIndex\">\n <ng-template kendoTabTitle>\n @if (isTopRanked(i)) {\n <i class=\"fa-solid fa-star star-icon\"></i>\n }\n {{ getTabTitle(i) }}\n </ng-template>\n <ng-template kendoTabContent>\n <div style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Tab Action Bar -->\n <div class=\"tab-action-bar\">\n <div class=\"tab-actions-left\">\n <!-- Toggle buttons for showing/hiding component details -->\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowFunctionalRequirements()\"\n [class.active]=\"showFunctionalRequirements\"\n title=\"Toggle Functional Requirements\">\n <i class=\"fa-solid fa-list-check\"></i>\n <span>Functional</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowDataRequirements()\"\n [class.active]=\"showDataRequirements\"\n title=\"Toggle Data Requirements\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowTechnicalDesign()\"\n [class.active]=\"showTechnicalDesign\"\n title=\"Toggle Technical Design\">\n <i class=\"fa-solid fa-cogs\"></i>\n <span>Technical</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowCode()\"\n [class.active]=\"showCode\"\n title=\"Toggle Code View\">\n <i class=\"fa-solid fa-code\"></i>\n <span>Code</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowSpec()\"\n [class.active]=\"showSpec\"\n title=\"Toggle Spec View\">\n <i class=\"fa-solid fa-code\"></i>\n <span>Spec</span>\n </button>\n </div>\n <div class=\"tab-actions-right\">\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowCreateReportButton && !matchingReportID\"\n (click)=\"createReportForOption(i)\"\n [disabled]=\"isCreatingReport\">\n <i class=\"fa-solid fa-save\"></i>\n <span>Save Report</span>\n </button>\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowOpenSavedReportButton && matchingReportID\"\n (click)=\"openReportForOption(i)\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>Open Saved Report</span>\n </button>\n <button class=\"tab-action-button print-button\" \n *ngIf=\"ShowPrintReport\" \n (click)=\"PrintReport()\"\n title=\"Print Report\">\n <i class=\"fa-solid fa-print\"></i>\n <span>Print Report</span>\n </button>\n </div>\n </div>\n \n <!-- Main content area with optional details panels -->\n <div style=\"flex: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden;\">\n @if (showFunctionalRequirements || showDataRequirements || showTechnicalDesign || showCode) {\n <!-- Details panel -->\n <div class=\"details-panel\" [style.height]=\"detailsPanelHeight\">\n <kendo-tabstrip style=\"height: 100%;\">\n @if (showFunctionalRequirements) {\n <kendo-tabstrip-tab [selected]=\"true\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-list-check\"></i> Functional Requirements\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\">\n <div [innerHTML]=\"getFormattedFunctionalRequirements(option)\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showDataRequirements) {\n <kendo-tabstrip-tab [selected]=\"!showFunctionalRequirements\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-database\"></i> Data Requirements\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\">\n <div [innerHTML]=\"getFormattedDataRequirements(option)\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showTechnicalDesign) {\n <kendo-tabstrip-tab [selected]=\"!showFunctionalRequirements && !showDataRequirements\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-cogs\"></i> Technical Design\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\">\n <div [innerHTML]=\"getFormattedTechnicalDesign(option)\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showCode) {\n <kendo-tabstrip-tab [selected]=\"!showFunctionalRequirements && !showDataRequirements && !showTechnicalDesign\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-code\"></i> Code\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content code-content\">\n <mj-code-editor\n [value]=\"getComponentCode(option)\"\n [language]=\"'javascript'\"\n [autoFocus]=\"false\"\n [indentWithTab]=\"true\"\n [readonly]=\"true\"\n [toolbar]=\"codeToolbarConfig\"\n (toolbarAction)=\"handleCodeToolbarAction($event)\"\n style=\"height: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showSpec) {\n <kendo-tabstrip-tab >\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-code\"></i> Spec\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content code-content\">\n <mj-code-editor\n [value]=\"getComponentSpec(option)\"\n [language]=\"'json'\"\n [autoFocus]=\"false\"\n [indentWithTab]=\"true\"\n [readonly]=\"true\"\n [toolbar]=\"codeToolbarConfig\"\n (toolbarAction)=\"handleCodeToolbarAction($event)\"\n style=\"height: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n </kendo-tabstrip>\n </div>\n <!-- Resizer -->\n <div class=\"panel-resizer\" \n (mousedown)=\"startResize($event)\"\n (touchstart)=\"startResize($event)\">\n <div class=\"resizer-handle\"></div>\n </div>\n }\n \n <!-- React component container -->\n <div [attr.data-tab-index]=\"i\" \n style=\"flex: 1; position: relative; min-height: 0; overflow: auto;\">\n <mj-react-component\n *ngIf=\"!currentError && componentOptions[i] && i === selectedReportOptionIndex\"\n [component]=\"componentOptions[i].option\"\n [styles]=\"componentStyles || undefined\"\n (stateChange)=\"onStateChange(i, $event)\"\n (componentEvent)=\"onComponentEvent(i, $event)\"\n (refreshData)=\"handleRefreshData()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n style=\"width: 100%; height: 100%;\">\n </mj-react-component>\n \n <!-- Error overlay for this tab (shown on top of content when needed) -->\n @if (currentError && selectedReportOptionIndex === i) {\n <div style=\"top: 0; \n left: 0; \n right: 0; \n bottom: 0; \n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 20px;\n background: rgba(255, 255, 255, 0.95);\n z-index: 10;\">\n <div style=\"width: 90%; \n max-width: 600px; \n height: 500px;\n background-color: #f8f9fa; \n border: 2px solid #dc3545; \n border-radius: 8px; \n padding: 20px;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\">\n <div style=\"position: relative;\">\n <button kendoButton (click)=\"copyErrorToClipboard()\" \n style=\"position: absolute; top: 0; right: 0; font-size: 12px;\">\n <span class=\"fa-solid fa-copy\"></span>\n Copy Error Details\n </button>\n <h3 style=\"color: #dc3545; margin-top: 0; margin-right: 150px; font-size: 18px;\">\n <span class=\"fa-solid fa-exclamation-triangle\"></span>\n Component Rendering Error\n </h3>\n </div>\n <p style=\"margin-bottom: 10px; font-size: 14px;\">\n The selected component option could not be rendered due to the following error:\n </p>\n <div style=\"background-color: #fff; border: 1px solid #dee2e6; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\n font-family: 'Courier New', monospace; font-size: 12px;\">\n <strong>Error Type:</strong> {{ currentError.type }}<br>\n <strong>Details:</strong> {{ currentError.message }}\n @if (currentError.technicalDetails) {\n <details style=\"margin-top: 8px;\">\n <summary style=\"cursor: pointer; color: #0056b3;\">Technical Details (click to expand)</summary>\n <pre style=\"margin-top: 8px; white-space: pre-wrap; word-break: break-word; font-size: 11px;\">{{ formatTechnicalDetails(currentError.technicalDetails) }}</pre>\n </details>\n }\n </div>\n <div style=\"background-color: #e7f3ff; border: 1px solid #b3d9ff; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\">\n <strong style=\"font-size: 14px;\">What to do:</strong>\n <ol style=\"margin: 8px 0 0 20px; padding: 0; font-size: 13px;\">\n <li>Try selecting a different report option from the tabs above</li>\n <li>Copy the error details and send them back to Skip in the chat to get a corrected version</li>\n <li>Contact your IT department if the issue persists</li>\n </ol>\n </div>\n <button kendoButton (click)=\"retryCurrentOption()\" style=\"font-size: 13px;\">\n <span class=\"fa-solid fa-rotate\"></span>\n Retry\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n </kendo-tabstrip>\n} @else {\n <!-- Single option: no tabs needed -->\n <div style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Tab Action Bar -->\n <div class=\"tab-action-bar\">\n <div class=\"tab-actions-left\">\n <!-- Toggle buttons for showing/hiding component details -->\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowFunctionalRequirements()\"\n [class.active]=\"showFunctionalRequirements\"\n title=\"Toggle Functional Requirements\">\n <i class=\"fa-solid fa-list-check\"></i>\n <span>Functional</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowDataRequirements()\"\n [class.active]=\"showDataRequirements\"\n title=\"Toggle Data Requirements\">\n <i class=\"fa-solid fa-database\"></i>\n <span>Data</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowTechnicalDesign()\"\n [class.active]=\"showTechnicalDesign\"\n title=\"Toggle Technical Design\">\n <i class=\"fa-solid fa-cogs\"></i>\n <span>Technical</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowCode()\"\n [class.active]=\"showCode\"\n title=\"Toggle Code View\">\n <i class=\"fa-solid fa-code\"></i>\n <span>Code</span>\n </button>\n <button class=\"tab-action-button toggle-button\" \n (click)=\"toggleShowSpec()\"\n [class.active]=\"showSpec\"\n title=\"Toggle Spec View\">\n <i class=\"fa-solid fa-file-code\"></i>\n <span>Spec</span>\n </button>\n </div>\n <div class=\"tab-actions-right\">\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowCreateReportButton && !matchingReportID\"\n (click)=\"createReportForOption(0)\"\n [disabled]=\"isCreatingReport\">\n <i class=\"fa-solid fa-save\"></i>\n <span>Create Report</span>\n </button>\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowOpenSavedReportButton && matchingReportID\"\n (click)=\"openReportForOption(0)\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>Open Saved Report</span>\n </button>\n <button class=\"tab-action-button print-button\" \n *ngIf=\"ShowPrintReport\" \n (click)=\"PrintReport()\"\n title=\"Print Report\">\n <i class=\"fa-solid fa-print\"></i>\n <span>Print Report</span>\n </button>\n </div>\n </div>\n \n <!-- Main content area with optional details panels -->\n <div style=\"flex: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden;\">\n @if (showFunctionalRequirements || showDataRequirements || showTechnicalDesign || showCode || showSpec) {\n <!-- Details panel -->\n <div class=\"details-panel\" [style.height]=\"detailsPanelHeight\">\n <kendo-tabstrip style=\"height: 100%;\">\n @if (showFunctionalRequirements && componentOptions[0]) {\n <kendo-tabstrip-tab [selected]=\"true\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-list-check\"></i> Functional Requirements\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\">\n <div [innerHTML]=\"getFormattedFunctionalRequirements(componentOptions[0])\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showDataRequirements && componentOptions[0]) {\n <kendo-tabstrip-tab [selected]=\"!showFunctionalRequirements\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-database\"></i> Data Requirements\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\">\n <div [innerHTML]=\"getFormattedDataRequirements(componentOptions[0])\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showTechnicalDesign && componentOptions[0]) {\n <kendo-tabstrip-tab [selected]=\"!showFunctionalRequirements && !showDataRequirements\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-cogs\"></i> Technical Design\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\">\n <div [innerHTML]=\"getFormattedTechnicalDesign(componentOptions[0])\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showCode && componentOptions[0]) {\n <kendo-tabstrip-tab [selected]=\"!showFunctionalRequirements && !showDataRequirements && !showTechnicalDesign\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-code\"></i> Code\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content code-content\">\n <mj-code-editor\n [language]=\"'javascript'\"\n [value]=\"getComponentCode(componentOptions[0])\"\n [autoFocus]=\"false\"\n [indentWithTab]=\"true\"\n [readonly]=\"true\"\n [toolbar]=\"codeToolbarConfig\"\n (toolbarAction)=\"handleCodeToolbarAction($event)\"\n style=\"height: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n @if (showSpec && componentOptions[0]) {\n <kendo-tabstrip-tab [selected]=\"!showFunctionalRequirements && !showDataRequirements && !showTechnicalDesign && !showCode\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-file-code\"></i> Spec\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content code-content\">\n <mj-code-editor\n [value]=\"getComponentSpec(componentOptions[0])\"\n [language]=\"'json'\"\n [autoFocus]=\"false\"\n [indentWithTab]=\"true\"\n [readonly]=\"true\"\n [toolbar]=\"codeToolbarConfig\"\n (toolbarAction)=\"handleCodeToolbarAction($event)\"\n style=\"height: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n </kendo-tabstrip>\n </div>\n <!-- Resizer -->\n <div class=\"panel-resizer\" \n (mousedown)=\"startResize($event)\"\n (touchstart)=\"startResize($event)\">\n <div class=\"resizer-handle\"></div>\n </div>\n }\n \n <!-- React component container or error display -->\n @if (currentError) {\n <!-- Error display container with proper height -->\n <div style=\"flex: 1; display: flex; align-items: center; justify-content: center; \n min-height: 400px; padding: 20px; background: rgba(255, 255, 255, 0.95);\">\n <div style=\"width: 90%; \n max-width: 600px; \n max-height: 80vh;\n background-color: #f8f9fa; \n border: 2px solid #dc3545; \n border-radius: 8px; \n padding: 20px;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\">\n <div style=\"position: relative;\">\n <button kendoButton (click)=\"copyErrorToClipboard()\" \n style=\"position: absolute; top: 0; right: 0; font-size: 12px;\">\n <span class=\"fa-solid fa-copy\"></span>\n Copy Error Details\n </button>\n <h3 style=\"color: #dc3545; margin-top: 0; margin-right: 150px; font-size: 18px;\">\n <span class=\"fa-solid fa-exclamation-triangle\"></span>\n Component Rendering Error\n </h3>\n </div>\n <p style=\"margin-bottom: 10px; font-size: 14px;\">\n The selected component option could not be rendered due to the following error:\n </p>\n <div style=\"background-color: #fff; border: 1px solid #dee2e6; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\n font-family: 'Courier New', monospace; font-size: 12px;\">\n <strong>Error Type:</strong> {{ currentError.type }}<br>\n <strong>Details:</strong> {{ currentError.message }}\n @if (currentError.technicalDetails) {\n <details style=\"margin-top: 8px;\">\n <summary style=\"cursor: pointer; color: #0056b3;\">Technical Details (click to expand)</summary>\n <pre style=\"margin-top: 8px; white-space: pre-wrap; word-break: break-word; font-size: 11px;\">{{ formatTechnicalDetails(currentError.technicalDetails) }}</pre>\n </details>\n }\n </div>\n <div style=\"background-color: #e7f3ff; border: 1px solid #b3d9ff; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\">\n <strong style=\"font-size: 14px;\">What to do:</strong>\n <ol style=\"margin: 8px 0 0 20px; padding: 0; font-size: 13px;\">\n <li>Copy the error details and send them back to Skip in the chat to get a corrected version</li>\n <li>Contact your IT department if the issue persists</li>\n </ol>\n </div>\n <button kendoButton (click)=\"retryCurrentOption()\" style=\"font-size: 13px;\">\n <span class=\"fa-solid fa-rotate\"></span>\n Retry\n </button>\n </div>\n </div>\n } @else {\n <!-- React component container (only shown when no error) -->\n <div style=\"flex: 1; position: relative; min-height: 0; overflow: auto;\">\n <mj-react-component\n *ngIf=\"componentOptions[0]\"\n [component]=\"componentOptions[0].option\"\n [styles]=\"componentStyles || undefined\"\n (stateChange)=\"onStateChange(0, $event)\"\n (componentEvent)=\"onComponentEvent(0, $event)\"\n (refreshData)=\"handleRefreshData()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n style=\"width: 100%; height: 100%;\">\n </mj-react-component>\n </div>\n }\n </div>\n </div>\n}", styles: [":host {\n display: block;\n height: 100%;\n position: relative;\n}\n\n/* Tab Action Bar */\n.tab-action-bar {\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,\n.tab-actions-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Tab Action Buttons */\n.tab-action-button {\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:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n}\n\n.tab-action-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.tab-action-button i {\n font-size: 12px;\n}\n\n/* Both buttons use the same white/secondary style */\n.tab-action-button.create-button,\n.tab-action-button.print-button {\n background-color: white;\n color: #333;\n border-color: #e0e0e0;\n}\n\n.tab-action-button.create-button:hover:not(:disabled),\n.tab-action-button.print-button:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n}\n\n/* Toggle buttons styling */\n.tab-action-button.toggle-button {\n background-color: white;\n color: #666;\n border-color: #e0e0e0;\n}\n\n.tab-action-button.toggle-button:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n color: #333;\n}\n\n.tab-action-button.toggle-button.active {\n background-color: #5B4FE9;\n color: white;\n border-color: #5B4FE9;\n}\n\n.tab-action-button.toggle-button.active:hover:not(:disabled) {\n background-color: #4940D4;\n border-color: #4940D4;\n}\n\n/* Details panel styling */\n.details-panel {\n border-bottom: 1px solid #e0e0e0;\n background-color: #fafafa;\n overflow: hidden;\n transition: height 0.3s ease;\n}\n\n.details-content {\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 {\n padding: 0;\n}\n\n/* Panel resizer */\n.panel-resizer {\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:hover {\n background-color: #d0d0d0;\n}\n\n.resizer-handle {\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/* Markdown content styling */\n.details-content :deep(h1) { font-size: 1.5em; margin-top: 0; margin-bottom: 0.5em; }\n.details-content :deep(h2) { font-size: 1.3em; margin-top: 1em; margin-bottom: 0.5em; }\n.details-content :deep(h3) { font-size: 1.1em; margin-top: 1em; margin-bottom: 0.5em; }\n.details-content :deep(ul), .details-content :deep(ol) { margin-left: 1.5em; }\n.details-content :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 :deep(pre) { \n background-color: #f4f4f4; \n padding: 12px; \n border-radius: 4px; \n overflow-x: auto; \n}\n.details-content :deep(blockquote) { \n border-left: 4px solid #e0e0e0; \n padding-left: 16px; \n margin-left: 0; \n color: #666; \n}\n\n/* Tab styling */\n::ng-deep .k-tabstrip {\n border: none;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 10px 5px 5px 5px;\n}\n\n::ng-deep .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::ng-deep .k-tabstrip-items-wrapper {\n height: 100%;\n}\n\n::ng-deep .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::ng-deep .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::ng-deep .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::ng-deep .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::ng-deep .k-tabstrip .k-link:first-letter {\n text-transform: uppercase;\n}\n\n::ng-deep .k-tabstrip .k-item:hover:not(.k-selected) .k-link {\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n}\n\n::ng-deep .k-tabstrip .k-item.k-selected .k-link {\n color: #1976d2;\n font-weight: 600;\n background: white;\n}\n\n/* Star icon styling */\n::ng-deep .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/* Hide default Kendo tab styling */\n::ng-deep .k-tabstrip-items::before,\n::ng-deep .k-tabstrip-items::after {\n display: none;\n}\n\n::ng-deep .k-tabstrip .k-item::before,\n::ng-deep .k-tabstrip .k-item::after {\n display: none;\n}\n\n/* Remove focus outline */\n::ng-deep .k-tabstrip .k-link:focus {\n outline: none;\n box-shadow: none;\n}\n\n/* Make sure tab content fills available space */\n::ng-deep .k-tabstrip .k-content.k-state-active {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n/* React host container */\n.react-host-container {\n width: 100%;\n height: 100%;\n}"] }]
1158
+ args: [{ selector: 'skip-dynamic-ui-component', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (componentOptions.length > 1) {\n <!-- Multiple options: show tabs -->\n <kendo-tabstrip \n (tabSelect)=\"onTabSelect($event)\"\n [keepTabContent]=\"true\"\n style=\"height: 100%; display: flex; flex-direction: column;\">\n @for (option of componentOptions; track option; let i = $index) {\n <kendo-tabstrip-tab [selected]=\"i === selectedReportOptionIndex\">\n <ng-template kendoTabTitle>\n @if (isTopRanked(i)) {\n <i class=\"fa-solid fa-star star-icon\"></i>\n }\n {{ getTabTitle(i) }}\n </ng-template>\n <ng-template kendoTabContent>\n <div style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Tab Action Bar -->\n <div class=\"tab-action-bar\">\n <div class=\"tab-actions-left\">\n <!-- Empty for now - actions moved to individual tabs -->\n </div>\n <div class=\"tab-actions-right\">\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowCreateReportButton && !matchingReportID\"\n (click)=\"createReportForOption(i)\"\n [disabled]=\"isCreatingReport\">\n <i class=\"fa-solid fa-save\"></i>\n <span>Save Report</span>\n </button>\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowOpenSavedReportButton && matchingReportID\"\n (click)=\"openReportForOption(i)\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>Open Saved Report</span>\n </button>\n <button class=\"tab-action-button print-button\" \n *ngIf=\"ShowPrintReport\" \n (click)=\"PrintReport()\"\n title=\"Print Report\">\n <i class=\"fa-solid fa-print\"></i>\n <span>Print Report</span>\n </button>\n </div>\n </div>\n \n <!-- Inner tab strip for Component, Functional, Technical, Data, Code tabs -->\n <div style=\"flex: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden;\">\n <kendo-tabstrip style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Component Tab (always first) -->\n <kendo-tabstrip-tab [selected]=\"true\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-chart-line\"></i> Component\n </ng-template>\n <ng-template kendoTabContent>\n <div style=\"height: 100%; position: relative; overflow: auto;\">\n <mj-react-component\n *ngIf=\"!currentError && componentOptions[i] && i === selectedReportOptionIndex\"\n [component]=\"componentOptions[i].option\"\n [styles]=\"componentStyles || undefined\"\n (stateChange)=\"onStateChange(i, $event)\"\n (componentEvent)=\"onComponentEvent(i, $event)\"\n (refreshData)=\"handleRefreshData()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n style=\"width: 100%; height: 100%;\">\n </mj-react-component>\n \n <!-- Error overlay for this tab (shown on top of content when needed) -->\n @if (currentError && selectedReportOptionIndex === i) {\n <div style=\"top: 0; \n left: 0; \n right: 0; \n bottom: 0; \n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 20px;\n background: rgba(255, 255, 255, 0.95);\n z-index: 10;\">\n <div style=\"width: 90%; \n max-width: 600px; \n height: 500px;\n background-color: #f8f9fa; \n border: 2px solid #dc3545; \n border-radius: 8px; \n padding: 20px;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\">\n <div style=\"position: relative;\">\n <button kendoButton (click)=\"copyErrorToClipboard()\" \n style=\"position: absolute; top: 0; right: 0; font-size: 12px;\">\n <span class=\"fa-solid fa-copy\"></span>\n Copy Error Details\n </button>\n <h3 style=\"color: #dc3545; margin-top: 0; margin-right: 150px; font-size: 18px;\">\n <span class=\"fa-solid fa-exclamation-triangle\"></span>\n Component Rendering Error\n </h3>\n </div>\n <p style=\"margin-bottom: 10px; font-size: 14px;\">\n The selected component option could not be rendered due to the following error:\n </p>\n <div style=\"background-color: #fff; border: 1px solid #dee2e6; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\n font-family: 'Courier New', monospace; font-size: 12px;\">\n <strong>Error Type:</strong> {{ currentError.type }}<br>\n <strong>Details:</strong> {{ currentError.message }}\n @if (currentError.technicalDetails) {\n <details style=\"margin-top: 8px;\">\n <summary style=\"cursor: pointer; color: #0056b3;\">Technical Details (click to expand)</summary>\n <pre style=\"margin-top: 8px; white-space: pre-wrap; word-break: break-word; font-size: 11px;\">{{ formatTechnicalDetails(currentError.technicalDetails) }}</pre>\n </details>\n }\n </div>\n <div style=\"background-color: #e7f3ff; border: 1px solid #b3d9ff; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\">\n <strong style=\"font-size: 14px;\">What to do:</strong>\n <ol style=\"margin: 8px 0 0 20px; padding: 0; font-size: 13px;\">\n <li>Try selecting a different report option from the tabs above</li>\n <li>Copy the error details and send them back to Skip in the chat to get a corrected version</li>\n <li>Contact your IT department if the issue persists</li>\n </ol>\n </div>\n <button kendoButton (click)=\"retryCurrentOption()\" style=\"font-size: 13px;\">\n <span class=\"fa-solid fa-rotate\"></span>\n Retry\n </button>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n \n <!-- Functional Requirements Tab -->\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-list-check\"></i> Functional\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\" style=\"height: 100%; overflow: auto; padding: 20px;\">\n <div [innerHTML]=\"getFormattedFunctionalRequirements(option)\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n \n <!-- Technical Design Tab -->\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-cogs\"></i> Technical\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\" style=\"height: 100%; overflow: auto; padding: 20px;\">\n <div [innerHTML]=\"getFormattedTechnicalDesign(option)\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n \n <!-- Data Requirements Tab -->\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-database\"></i> Data Spec\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\" style=\"height: 100%; overflow: auto; padding: 20px;\">\n <div [innerHTML]=\"getFormattedDataRequirements(option)\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n \n <!-- Code Tab -->\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-code\"></i> Code\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content code-content\" style=\"height: 100%; overflow: hidden;\">\n <mj-code-editor\n [value]=\"getComponentCode(option)\"\n [language]=\"'javascript'\"\n [autoFocus]=\"false\"\n [indentWithTab]=\"true\"\n [readonly]=\"true\"\n [toolbar]=\"codeToolbarConfig\"\n (toolbarAction)=\"handleCodeToolbarAction($event)\"\n style=\"height: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n </div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n </kendo-tabstrip>\n} @else {\n <!-- Single option: simplified tab structure -->\n <div style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Tab Action Bar -->\n <div class=\"tab-action-bar\">\n <div class=\"tab-actions-left\">\n <!-- Empty for now - actions moved to tabs -->\n </div>\n <div class=\"tab-actions-right\">\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowCreateReportButton && !matchingReportID\"\n (click)=\"createReportForOption(0)\"\n [disabled]=\"isCreatingReport\">\n <i class=\"fa-solid fa-save\"></i>\n <span>Save Report</span>\n </button>\n <button class=\"tab-action-button create-button\" \n *ngIf=\"ShowOpenSavedReportButton && matchingReportID\"\n (click)=\"openReportForOption(0)\">\n <i class=\"fa-solid fa-folder-open\"></i>\n <span>Open Saved Report</span>\n </button>\n <button class=\"tab-action-button print-button\" \n *ngIf=\"ShowPrintReport\" \n (click)=\"PrintReport()\"\n title=\"Print Report\">\n <i class=\"fa-solid fa-print\"></i>\n <span>Print Report</span>\n </button>\n </div>\n </div>\n \n <!-- Tab strip for Component, Functional, Technical, Data, Code tabs -->\n <div style=\"flex: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden;\">\n <kendo-tabstrip style=\"height: 100%; display: flex; flex-direction: column;\">\n <!-- Component Tab (always first) -->\n <kendo-tabstrip-tab [selected]=\"true\">\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-chart-line\"></i> Component\n </ng-template>\n <ng-template kendoTabContent>\n <div style=\"height: 100%; position: relative; overflow: auto;\">\n @if (!currentError && componentOptions[0]) {\n <mj-react-component\n [component]=\"componentOptions[0].option\"\n [styles]=\"componentStyles || undefined\"\n (stateChange)=\"onStateChange(0, $event)\"\n (componentEvent)=\"onComponentEvent(0, $event)\"\n (refreshData)=\"handleRefreshData()\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\"\n style=\"width: 100%; height: 100%;\">\n </mj-react-component>\n }\n \n <!-- Error overlay for this tab (shown on top of content when needed) -->\n @if (currentError) {\n <div style=\"top: 0; \n left: 0; \n right: 0; \n bottom: 0; \n display: flex;\n align-items: flex-start;\n justify-content: center;\n padding-top: 20px;\n background: rgba(255, 255, 255, 0.95);\n z-index: 10;\">\n <div style=\"width: 90%; \n max-width: 600px; \n height: 500px;\n background-color: #f8f9fa; \n border: 2px solid #dc3545; \n border-radius: 8px; \n padding: 20px;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\">\n <div style=\"position: relative;\">\n <button kendoButton (click)=\"copyErrorToClipboard()\" \n style=\"position: absolute; top: 0; right: 0; font-size: 12px;\">\n <span class=\"fa-solid fa-copy\"></span>\n Copy Error Details\n </button>\n <h3 style=\"color: #dc3545; margin-top: 0; margin-right: 150px; font-size: 18px;\">\n <span class=\"fa-solid fa-exclamation-triangle\"></span>\n Component Rendering Error\n </h3>\n </div>\n <p style=\"margin-bottom: 10px; font-size: 14px;\">\n The selected component option could not be rendered due to the following error:\n </p>\n <div style=\"background-color: #fff; border: 1px solid #dee2e6; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\n font-family: 'Courier New', monospace; font-size: 12px;\">\n <strong>Error Type:</strong> {{ currentError.type }}<br>\n <strong>Details:</strong> {{ currentError.message }}\n @if (currentError.technicalDetails) {\n <details style=\"margin-top: 8px;\">\n <summary style=\"cursor: pointer; color: #0056b3;\">Technical Details (click to expand)</summary>\n <pre style=\"margin-top: 8px; white-space: pre-wrap; word-break: break-word; font-size: 11px;\">{{ formatTechnicalDetails(currentError.technicalDetails) }}</pre>\n </details>\n }\n </div>\n <div style=\"background-color: #e7f3ff; border: 1px solid #b3d9ff; \n border-radius: 4px; padding: 12px; margin-bottom: 12px;\">\n <strong style=\"font-size: 14px;\">What to do:</strong>\n <ol style=\"margin: 8px 0 0 20px; padding: 0; font-size: 13px;\">\n <li>Copy the error details and send them back to Skip in the chat to get a corrected version</li>\n <li>Contact your IT department if the issue persists</li>\n </ol>\n </div>\n <button kendoButton (click)=\"retryCurrentOption()\" style=\"font-size: 13px;\">\n <span class=\"fa-solid fa-rotate\"></span>\n Retry\n </button>\n </div>\n </div>\n }\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n \n <!-- Functional Requirements Tab -->\n @if (componentOptions[0]) {\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-list-check\"></i> Functional\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\" style=\"height: 100%; overflow: auto; padding: 20px;\">\n <div [innerHTML]=\"getFormattedFunctionalRequirements(componentOptions[0])\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n \n <!-- Technical Design Tab -->\n @if (componentOptions[0]) {\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-cogs\"></i> Technical\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\" style=\"height: 100%; overflow: auto; padding: 20px;\">\n <div [innerHTML]=\"getFormattedTechnicalDesign(componentOptions[0])\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n \n <!-- Data Requirements Tab -->\n @if (componentOptions[0]) {\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-database\"></i> Data Spec\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content\" style=\"height: 100%; overflow: auto; padding: 20px;\">\n <div [innerHTML]=\"getFormattedDataRequirements(componentOptions[0])\"></div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n \n <!-- Code Tab -->\n @if (componentOptions[0]) {\n <kendo-tabstrip-tab>\n <ng-template kendoTabTitle>\n <i class=\"fa-solid fa-code\"></i> Code\n </ng-template>\n <ng-template kendoTabContent>\n <div class=\"details-content code-content\" style=\"height: 100%; overflow: hidden;\">\n <mj-code-editor\n [value]=\"getComponentCode(componentOptions[0])\"\n [language]=\"'javascript'\"\n [autoFocus]=\"false\"\n [indentWithTab]=\"true\"\n [readonly]=\"true\"\n [toolbar]=\"codeToolbarConfig\"\n (toolbarAction)=\"handleCodeToolbarAction($event)\"\n style=\"height: 100%;\">\n </mj-code-editor>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n }\n </kendo-tabstrip>\n </div>\n </div>\n}", styles: [":host {\n display: block;\n height: 100%;\n position: relative;\n}\n\n/* Tab Action Bar */\n.tab-action-bar {\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,\n.tab-actions-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n/* Tab Action Buttons */\n.tab-action-button {\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:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n}\n\n.tab-action-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.tab-action-button i {\n font-size: 12px;\n}\n\n/* Both buttons use the same white/secondary style */\n.tab-action-button.create-button,\n.tab-action-button.print-button {\n background-color: white;\n color: #333;\n border-color: #e0e0e0;\n}\n\n.tab-action-button.create-button:hover:not(:disabled),\n.tab-action-button.print-button:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n}\n\n/* Toggle buttons styling */\n.tab-action-button.toggle-button {\n background-color: white;\n color: #666;\n border-color: #e0e0e0;\n}\n\n.tab-action-button.toggle-button:hover:not(:disabled) {\n background-color: #f5f5f5;\n border-color: #d0d0d0;\n color: #333;\n}\n\n.tab-action-button.toggle-button.active {\n background-color: #5B4FE9;\n color: white;\n border-color: #5B4FE9;\n}\n\n.tab-action-button.toggle-button.active:hover:not(:disabled) {\n background-color: #4940D4;\n border-color: #4940D4;\n}\n\n/* Details panel styling */\n.details-panel {\n border-bottom: 1px solid #e0e0e0;\n background-color: #fafafa;\n overflow: hidden;\n transition: height 0.3s ease;\n}\n\n.details-content {\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 {\n padding: 0;\n}\n\n/* Panel resizer */\n.panel-resizer {\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:hover {\n background-color: #d0d0d0;\n}\n\n.resizer-handle {\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/* Markdown content styling */\n.details-content :deep(h1) { font-size: 1.5em; margin-top: 0; margin-bottom: 0.5em; }\n.details-content :deep(h2) { font-size: 1.3em; margin-top: 1em; margin-bottom: 0.5em; }\n.details-content :deep(h3) { font-size: 1.1em; margin-top: 1em; margin-bottom: 0.5em; }\n.details-content :deep(ul), .details-content :deep(ol) { margin-left: 1.5em; }\n.details-content :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 :deep(pre) { \n background-color: #f4f4f4; \n padding: 12px; \n border-radius: 4px; \n overflow-x: auto; \n}\n.details-content :deep(blockquote) { \n border-left: 4px solid #e0e0e0; \n padding-left: 16px; \n margin-left: 0; \n color: #666; \n}\n\n/* Tab styling - improved for better formatting */\n::ng-deep .k-tabstrip {\n border: none;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 0;\n}\n\n::ng-deep .k-tabstrip-items {\n background: #f8f9fa;\n border: none;\n border-bottom: 1px solid #e0e0e0;\n flex: 0 0 auto;\n padding: 4px 8px 0 8px;\n gap: 2px;\n display: flex;\n min-height: auto;\n height: auto;\n}\n\n::ng-deep .k-tabstrip-items-wrapper {\n height: auto;\n min-height: auto;\n}\n\n::ng-deep .k-content {\n flex: 1;\n overflow: hidden;\n padding: 0;\n background: white;\n border: none;\n min-height: 0;\n}\n\n::ng-deep .k-tabstrip .k-item {\n margin-right: 2px;\n border: none;\n background: transparent;\n border-radius: 4px 4px 0 0;\n padding: 0;\n transition: all 0.2s ease;\n height: auto;\n min-height: auto;\n}\n\n::ng-deep .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::ng-deep .k-tabstrip .k-link {\n padding: 6px 12px;\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 display: flex;\n align-items: center;\n gap: 4px;\n line-height: 1.2;\n min-height: auto;\n height: auto;\n}\n\n::ng-deep .k-tabstrip .k-link i {\n font-size: 12px;\n}\n\n::ng-deep .k-tabstrip .k-item:hover:not(.k-selected) .k-link {\n color: #333;\n background: rgba(0, 0, 0, 0.04);\n}\n\n::ng-deep .k-tabstrip .k-item.k-selected .k-link {\n color: #1976d2;\n font-weight: 600;\n background: white;\n}\n\n/* Star icon styling */\n::ng-deep .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/* Hide default Kendo tab styling */\n::ng-deep .k-tabstrip-items::before,\n::ng-deep .k-tabstrip-items::after {\n display: none;\n}\n\n::ng-deep .k-tabstrip .k-item::before,\n::ng-deep .k-tabstrip .k-item::after {\n display: none;\n}\n\n/* Remove focus outline */\n::ng-deep .k-tabstrip .k-link:focus {\n outline: none;\n box-shadow: none;\n}\n\n/* Make sure tab content fills available space */\n::ng-deep .k-tabstrip .k-content.k-state-active {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n/* React host container */\n.react-host-container {\n width: 100%;\n height: 100%;\n}\n\n/* Nested tab styling - for tabs within tabs */\n::ng-deep .k-tabstrip .k-tabstrip {\n margin: 0;\n}\n\n::ng-deep .k-tabstrip .k-tabstrip .k-tabstrip-items {\n padding: 2px 4px 0 4px;\n background: #fff;\n border-bottom: 1px solid #e8e8e8;\n}\n\n::ng-deep .k-tabstrip .k-tabstrip .k-link {\n padding: 4px 10px;\n font-size: 12px;\n}\n\n/* Ensure proper content area in nested tabs */\n::ng-deep .k-tabstrip .k-tabstrip .k-content {\n border: none;\n background: transparent;\n}\n\n"] }]
1305
1159
  }], () => [{ type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i2.AngularAdapterService }], { UIComponentCode: [{
1306
1160
  type: Input
1307
1161
  }], ComponentObjectName: [{
@@ -1325,9 +1179,6 @@ Component Name: ${this.ComponentObjectName || 'Unknown'}`;
1325
1179
  }], reactComponents: [{
1326
1180
  type: ViewChildren,
1327
1181
  args: [MJReactComponent]
1328
- }], onWindowResize: [{
1329
- type: HostListener,
1330
- args: ['window:resize']
1331
1182
  }], SkipData: [{
1332
1183
  type: Input
1333
1184
  }] }); })();