@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.
- package/dist/lib/dynamic-report/base-report.d.ts.map +1 -1
- package/dist/lib/dynamic-report/base-report.js +2 -1
- package/dist/lib/dynamic-report/base-report.js.map +1 -1
- package/dist/lib/dynamic-report/dynamic-ui-component.d.ts +4 -34
- package/dist/lib/dynamic-report/dynamic-ui-component.d.ts.map +1 -1
- package/dist/lib/dynamic-report/dynamic-ui-component.js +414 -563
- package/dist/lib/dynamic-report/dynamic-ui-component.js.map +1 -1
- package/dist/lib/dynamic-report/linear-report.d.ts +9 -1
- package/dist/lib/dynamic-report/linear-report.d.ts.map +1 -1
- package/dist/lib/dynamic-report/linear-report.js +46 -12
- package/dist/lib/dynamic-report/linear-report.js.map +1 -1
- package/package.json +15 -15
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, ViewChildren,
|
|
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
|
|
31
|
-
const
|
|
32
|
-
i0.ɵɵelementStart(0, "button",
|
|
33
|
-
i0.ɵɵlistener("click", function
|
|
34
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
43
|
-
const
|
|
44
|
-
i0.ɵɵelementStart(0, "button",
|
|
45
|
-
i0.ɵɵlistener("click", function
|
|
46
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
52
|
-
const
|
|
53
|
-
i0.ɵɵelementStart(0, "button",
|
|
54
|
-
i0.ɵɵlistener("click", function
|
|
55
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
61
|
-
i0.ɵɵelement(0, "i",
|
|
62
|
-
i0.ɵɵtext(1, "
|
|
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
|
|
126
|
-
i0.ɵɵ
|
|
127
|
-
i0.ɵɵ
|
|
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(
|
|
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
|
|
202
|
-
i0.ɵɵelementStart(0, "details",
|
|
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",
|
|
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(
|
|
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
|
|
214
|
-
const
|
|
215
|
-
i0.ɵɵelementStart(0, "div",
|
|
216
|
-
i0.ɵɵlistener("click", function
|
|
217
|
-
i0.ɵɵelement(4, "span",
|
|
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",
|
|
221
|
-
i0.ɵɵelement(7, "span",
|
|
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",
|
|
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",
|
|
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,
|
|
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",
|
|
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",
|
|
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",
|
|
251
|
-
i0.ɵɵlistener("click", function
|
|
252
|
-
i0.ɵɵelement(31, "span",
|
|
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(
|
|
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
|
|
265
|
-
|
|
266
|
-
i0.ɵɵ
|
|
267
|
-
i0.ɵɵ
|
|
268
|
-
|
|
269
|
-
i0.ɵɵ
|
|
270
|
-
i0.ɵɵ
|
|
271
|
-
i0.ɵɵ
|
|
272
|
-
i0.ɵɵ
|
|
273
|
-
i0.ɵɵ
|
|
274
|
-
i0.ɵɵ
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
i0.ɵɵ
|
|
278
|
-
i0.ɵɵ
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
i0.ɵɵelementStart(
|
|
282
|
-
i0.ɵɵ
|
|
283
|
-
i0.ɵɵelementEnd()
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
i0.ɵɵ
|
|
287
|
-
i0.ɵɵ
|
|
288
|
-
i0.ɵɵ
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
i0.ɵɵ
|
|
292
|
-
i0.ɵɵ
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
i0.ɵɵ
|
|
296
|
-
i0.ɵɵ
|
|
297
|
-
i0.ɵɵ
|
|
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
|
|
201
|
+
const option_r9 = i0.ɵɵnextContext(2).$implicit;
|
|
306
202
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
307
|
-
i0.ɵɵadvance(
|
|
308
|
-
i0.ɵɵ
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
i0.ɵɵ
|
|
312
|
-
i0.ɵɵ
|
|
313
|
-
i0.ɵɵ
|
|
314
|
-
i0.ɵɵ
|
|
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(
|
|
324
|
-
i0.ɵɵ
|
|
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,
|
|
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
|
|
354
|
-
const
|
|
355
|
-
i0.ɵɵelementStart(0, "button",
|
|
356
|
-
i0.ɵɵlistener("click", function
|
|
357
|
-
i0.ɵɵelement(1, "i",
|
|
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, "
|
|
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
|
|
366
|
-
const
|
|
367
|
-
i0.ɵɵelementStart(0, "button",
|
|
368
|
-
i0.ɵɵlistener("click", function
|
|
369
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
375
|
-
const
|
|
376
|
-
i0.ɵɵelementStart(0, "button",
|
|
377
|
-
i0.ɵɵlistener("click", function
|
|
378
|
-
i0.ɵɵelement(1, "i",
|
|
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
|
|
384
|
-
i0.ɵɵelement(0, "i",
|
|
385
|
-
i0.ɵɵtext(1, "
|
|
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
|
|
472
|
-
const
|
|
473
|
-
i0.ɵɵelementStart(0, "
|
|
474
|
-
i0.ɵɵlistener("
|
|
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("
|
|
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
|
|
513
|
-
i0.ɵɵelementStart(0, "details",
|
|
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",
|
|
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(
|
|
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
|
|
525
|
-
const
|
|
526
|
-
i0.ɵɵelementStart(0, "div",
|
|
527
|
-
i0.ɵɵlistener("click", function
|
|
528
|
-
i0.ɵɵelement(4, "span",
|
|
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",
|
|
532
|
-
i0.ɵɵelement(7, "span",
|
|
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",
|
|
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",
|
|
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,
|
|
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",
|
|
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",
|
|
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",
|
|
559
|
-
i0.ɵɵlistener("click", function
|
|
560
|
-
i0.ɵɵelement(29, "span",
|
|
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(
|
|
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
|
|
573
|
-
|
|
574
|
-
i0.ɵɵ
|
|
575
|
-
i0.ɵɵ
|
|
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.ɵɵ
|
|
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
|
|
582
|
-
i0.ɵɵelementStart(0, "div",
|
|
583
|
-
i0.ɵɵ
|
|
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(
|
|
400
|
+
const ctx_r1 = i0.ɵɵnextContext(3);
|
|
587
401
|
i0.ɵɵadvance();
|
|
588
|
-
i0.ɵɵproperty("
|
|
402
|
+
i0.ɵɵproperty("innerHTML", ctx_r1.getFormattedTechnicalDesign(ctx_r1.componentOptions[0]), i0.ɵɵsanitizeHtml);
|
|
589
403
|
} }
|
|
590
|
-
function
|
|
591
|
-
|
|
592
|
-
i0.ɵɵ
|
|
593
|
-
i0.ɵɵ
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
i0.ɵɵ
|
|
597
|
-
i0.ɵɵ
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
i0.ɵɵ
|
|
601
|
-
i0.ɵɵ
|
|
602
|
-
i0.ɵɵ
|
|
603
|
-
|
|
604
|
-
i0.ɵɵ
|
|
605
|
-
i0.ɵɵ
|
|
606
|
-
i0.ɵɵ
|
|
607
|
-
|
|
608
|
-
|
|
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
|
-
|
|
611
|
-
|
|
612
|
-
i0.ɵɵ
|
|
613
|
-
i0.ɵɵ
|
|
614
|
-
|
|
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(
|
|
617
|
-
i0.ɵɵ
|
|
618
|
-
i0.ɵɵ
|
|
619
|
-
i0.ɵɵ
|
|
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(
|
|
647
|
-
i0.ɵɵ
|
|
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.
|
|
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
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
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
|
-
|
|
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
|
-
} },
|
|
1295
|
-
i0.ɵɵ
|
|
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:
|
|
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
|
}] }); })();
|