@memberjunction/ng-dashboards 2.100.3 → 2.101.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.
@@ -29,11 +29,11 @@ const _forTrack0 = ($index, $item) => $item.name;
29
29
  function _forTrack1($index, $item) { return this.getComponentId($item); }
30
30
  const _forTrack2 = ($index, $item) => $item.title;
31
31
  function ComponentStudioDashboardComponent_Conditional_10_Conditional_1_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelement(0, "span", 36);
32
+ i0.ɵɵelement(0, "span", 37);
33
33
  i0.ɵɵtext(1, " Show Details ");
34
34
  } }
35
35
  function ComponentStudioDashboardComponent_Conditional_10_Conditional_2_Template(rf, ctx) { if (rf & 1) {
36
- i0.ɵɵelement(0, "span", 37);
36
+ i0.ɵɵelement(0, "span", 38);
37
37
  i0.ɵɵtext(1, " Hide Details ");
38
38
  } }
39
39
  function ComponentStudioDashboardComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
@@ -50,40 +50,40 @@ function ComponentStudioDashboardComponent_Conditional_10_Template(rf, ctx) { if
50
50
  } }
51
51
  function ComponentStudioDashboardComponent_Conditional_16_Template(rf, ctx) { if (rf & 1) {
52
52
  const _r4 = i0.ɵɵgetCurrentView();
53
- i0.ɵɵelementStart(0, "div", 12)(1, "button", 38);
53
+ i0.ɵɵelementStart(0, "div", 12)(1, "button", 39);
54
54
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_16_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.importFromFile()); });
55
- i0.ɵɵelement(2, "i", 39);
55
+ i0.ɵɵelement(2, "i", 40);
56
56
  i0.ɵɵtext(3, " Import from File ");
57
57
  i0.ɵɵelementEnd();
58
- i0.ɵɵelementStart(4, "button", 38);
58
+ i0.ɵɵelementStart(4, "button", 39);
59
59
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_16_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.importFromText()); });
60
- i0.ɵɵelement(5, "i", 40);
60
+ i0.ɵɵelement(5, "i", 41);
61
61
  i0.ɵɵtext(6, " Import from Text ");
62
62
  i0.ɵɵelementEnd()();
63
63
  } }
64
64
  function ComponentStudioDashboardComponent_Conditional_17_Conditional_5_Template(rf, ctx) { if (rf & 1) {
65
65
  const _r6 = i0.ɵɵgetCurrentView();
66
- i0.ɵɵelementStart(0, "div", 12)(1, "button", 38);
66
+ i0.ɵɵelementStart(0, "div", 12)(1, "button", 39);
67
67
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_17_Conditional_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.exportToArtifact()); });
68
- i0.ɵɵelement(2, "i", 43);
68
+ i0.ɵɵelement(2, "i", 44);
69
69
  i0.ɵɵtext(3, " Export to Artifact ");
70
70
  i0.ɵɵelementEnd();
71
- i0.ɵɵelementStart(4, "button", 38);
71
+ i0.ɵɵelementStart(4, "button", 39);
72
72
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_17_Conditional_5_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.exportToFile()); });
73
- i0.ɵɵelement(5, "i", 39);
73
+ i0.ɵɵelement(5, "i", 40);
74
74
  i0.ɵɵtext(6, " Export to File ");
75
75
  i0.ɵɵelementEnd();
76
- i0.ɵɵelementStart(7, "button", 38);
76
+ i0.ɵɵelementStart(7, "button", 39);
77
77
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_17_Conditional_5_Template_button_click_7_listener() { i0.ɵɵrestoreView(_r6); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.exportToClipboard()); });
78
- i0.ɵɵelement(8, "i", 44);
78
+ i0.ɵɵelement(8, "i", 45);
79
79
  i0.ɵɵtext(9, " Export to Clipboard ");
80
80
  i0.ɵɵelementEnd()();
81
81
  } }
82
82
  function ComponentStudioDashboardComponent_Conditional_17_Template(rf, ctx) { if (rf & 1) {
83
83
  const _r5 = i0.ɵɵgetCurrentView();
84
- i0.ɵɵelementStart(0, "div", 41)(1, "button", 9);
84
+ i0.ɵɵelementStart(0, "div", 42)(1, "button", 9);
85
85
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_17_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleExportDropdown()); });
86
- i0.ɵɵelement(2, "span", 42);
86
+ i0.ɵɵelement(2, "span", 43);
87
87
  i0.ɵɵtext(3, " Export ");
88
88
  i0.ɵɵelement(4, "span", 11);
89
89
  i0.ɵɵelementEnd();
@@ -98,21 +98,29 @@ function ComponentStudioDashboardComponent_Conditional_17_Template(rf, ctx) { if
98
98
  i0.ɵɵconditional(ctx_r2.exportDropdownOpen ? 5 : -1);
99
99
  } }
100
100
  function ComponentStudioDashboardComponent_Conditional_32_Template(rf, ctx) { if (rf & 1) {
101
- i0.ɵɵelement(0, "i", 45);
101
+ i0.ɵɵelement(0, "i", 46);
102
102
  i0.ɵɵtext(1, " Favorites ");
103
103
  } }
104
104
  function ComponentStudioDashboardComponent_Conditional_33_Template(rf, ctx) { if (rf & 1) {
105
- i0.ɵɵelement(0, "i", 46);
105
+ i0.ɵɵelement(0, "i", 47);
106
106
  i0.ɵɵtext(1, " All ");
107
107
  } }
108
- function ComponentStudioDashboardComponent_Conditional_37_For_2_Template(rf, ctx) { if (rf & 1) {
108
+ function ComponentStudioDashboardComponent_Conditional_35_Template(rf, ctx) { if (rf & 1) {
109
+ i0.ɵɵelement(0, "i", 48);
110
+ i0.ɵɵtext(1, " Show Deprecated ");
111
+ } }
112
+ function ComponentStudioDashboardComponent_Conditional_36_Template(rf, ctx) { if (rf & 1) {
113
+ i0.ɵɵelement(0, "i", 49);
114
+ i0.ɵɵtext(1, " Hide Deprecated ");
115
+ } }
116
+ function ComponentStudioDashboardComponent_Conditional_40_For_2_Template(rf, ctx) { if (rf & 1) {
109
117
  const _r7 = i0.ɵɵgetCurrentView();
110
- i0.ɵɵelementStart(0, "button", 50);
111
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_37_For_2_Template_button_click_0_listener() { const category_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleCategory(category_r8.name)); });
112
- i0.ɵɵelementStart(1, "span", 51);
118
+ i0.ɵɵelementStart(0, "button", 53);
119
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_40_For_2_Template_button_click_0_listener() { const category_r8 = i0.ɵɵrestoreView(_r7).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleCategory(category_r8.name)); });
120
+ i0.ɵɵelementStart(1, "span", 54);
113
121
  i0.ɵɵtext(2);
114
122
  i0.ɵɵelementEnd();
115
- i0.ɵɵelementStart(3, "span", 52);
123
+ i0.ɵɵelementStart(3, "span", 55);
116
124
  i0.ɵɵtext(4);
117
125
  i0.ɵɵelementEnd()();
118
126
  } if (rf & 2) {
@@ -125,41 +133,41 @@ function ComponentStudioDashboardComponent_Conditional_37_For_2_Template(rf, ctx
125
133
  i0.ɵɵadvance(2);
126
134
  i0.ɵɵtextInterpolate(category_r8.count);
127
135
  } }
128
- function ComponentStudioDashboardComponent_Conditional_37_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
129
- i0.ɵɵelement(0, "i", 54);
136
+ function ComponentStudioDashboardComponent_Conditional_40_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
137
+ i0.ɵɵelement(0, "i", 57);
130
138
  i0.ɵɵtext(1, " Less ");
131
139
  } }
132
- function ComponentStudioDashboardComponent_Conditional_37_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
133
- i0.ɵɵelement(0, "i", 55);
140
+ function ComponentStudioDashboardComponent_Conditional_40_Conditional_3_Conditional_2_Template(rf, ctx) { if (rf & 1) {
141
+ i0.ɵɵelement(0, "i", 58);
134
142
  i0.ɵɵtext(1);
135
143
  } if (rf & 2) {
136
144
  const ctx_r2 = i0.ɵɵnextContext(3);
137
145
  i0.ɵɵadvance();
138
146
  i0.ɵɵtextInterpolate1(" +", ctx_r2.availableCategories.length - 5, " more ");
139
147
  } }
140
- function ComponentStudioDashboardComponent_Conditional_37_Conditional_3_Template(rf, ctx) { if (rf & 1) {
148
+ function ComponentStudioDashboardComponent_Conditional_40_Conditional_3_Template(rf, ctx) { if (rf & 1) {
141
149
  const _r9 = i0.ɵɵgetCurrentView();
142
- i0.ɵɵelementStart(0, "button", 53);
143
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_37_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleShowAllCategories()); });
144
- i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_37_Conditional_3_Conditional_1_Template, 2, 0)(2, ComponentStudioDashboardComponent_Conditional_37_Conditional_3_Conditional_2_Template, 2, 1);
150
+ i0.ɵɵelementStart(0, "button", 56);
151
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_40_Conditional_3_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleShowAllCategories()); });
152
+ i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_40_Conditional_3_Conditional_1_Template, 2, 0)(2, ComponentStudioDashboardComponent_Conditional_40_Conditional_3_Conditional_2_Template, 2, 1);
145
153
  i0.ɵɵelementEnd();
146
154
  } if (rf & 2) {
147
155
  const ctx_r2 = i0.ɵɵnextContext(2);
148
156
  i0.ɵɵadvance();
149
157
  i0.ɵɵconditional(ctx_r2.showAllCategories ? 1 : 2);
150
158
  } }
151
- function ComponentStudioDashboardComponent_Conditional_37_Conditional_4_Template(rf, ctx) { if (rf & 1) {
159
+ function ComponentStudioDashboardComponent_Conditional_40_Conditional_4_Template(rf, ctx) { if (rf & 1) {
152
160
  const _r10 = i0.ɵɵgetCurrentView();
153
- i0.ɵɵelementStart(0, "button", 56);
154
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_37_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.clearCategoryFilters()); });
155
- i0.ɵɵelement(1, "i", 57);
161
+ i0.ɵɵelementStart(0, "button", 59);
162
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_40_Conditional_4_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.clearCategoryFilters()); });
163
+ i0.ɵɵelement(1, "i", 60);
156
164
  i0.ɵɵtext(2, " Clear ");
157
165
  i0.ɵɵelementEnd();
158
166
  } }
159
- function ComponentStudioDashboardComponent_Conditional_37_Template(rf, ctx) { if (rf & 1) {
160
- i0.ɵɵelementStart(0, "div", 26);
161
- i0.ɵɵrepeaterCreate(1, ComponentStudioDashboardComponent_Conditional_37_For_2_Template, 5, 6, "button", 47, _forTrack0);
162
- i0.ɵɵtemplate(3, ComponentStudioDashboardComponent_Conditional_37_Conditional_3_Template, 3, 1, "button", 48)(4, ComponentStudioDashboardComponent_Conditional_37_Conditional_4_Template, 3, 0, "button", 49);
167
+ function ComponentStudioDashboardComponent_Conditional_40_Template(rf, ctx) { if (rf & 1) {
168
+ i0.ɵɵelementStart(0, "div", 27);
169
+ i0.ɵɵrepeaterCreate(1, ComponentStudioDashboardComponent_Conditional_40_For_2_Template, 5, 6, "button", 50, _forTrack0);
170
+ i0.ɵɵtemplate(3, ComponentStudioDashboardComponent_Conditional_40_Conditional_3_Template, 3, 1, "button", 51)(4, ComponentStudioDashboardComponent_Conditional_40_Conditional_4_Template, 3, 0, "button", 52);
163
171
  i0.ɵɵelementEnd();
164
172
  } if (rf & 2) {
165
173
  const ctx_r2 = i0.ɵɵnextContext();
@@ -170,35 +178,35 @@ function ComponentStudioDashboardComponent_Conditional_37_Template(rf, ctx) { if
170
178
  i0.ɵɵadvance();
171
179
  i0.ɵɵconditional(ctx_r2.selectedCategories.size > 0 ? 4 : -1);
172
180
  } }
173
- function ComponentStudioDashboardComponent_ng_template_40_Template(rf, ctx) { if (rf & 1) {
174
- i0.ɵɵelement(0, "i", 58);
181
+ function ComponentStudioDashboardComponent_ng_template_43_Template(rf, ctx) { if (rf & 1) {
182
+ i0.ɵɵelement(0, "i", 61);
175
183
  } }
176
- function ComponentStudioDashboardComponent_Conditional_42_Template(rf, ctx) { if (rf & 1) {
177
- i0.ɵɵelementStart(0, "div", 31);
178
- i0.ɵɵelement(1, "i", 59);
184
+ function ComponentStudioDashboardComponent_Conditional_45_Template(rf, ctx) { if (rf & 1) {
185
+ i0.ɵɵelementStart(0, "div", 32);
186
+ i0.ɵɵelement(1, "i", 62);
179
187
  i0.ɵɵtext(2, " Loading components... ");
180
188
  i0.ɵɵelementEnd();
181
189
  } }
182
- function ComponentStudioDashboardComponent_Conditional_43_Template(rf, ctx) { if (rf & 1) {
183
- i0.ɵɵelementStart(0, "div", 32);
184
- i0.ɵɵelement(1, "i", 60);
190
+ function ComponentStudioDashboardComponent_Conditional_46_Template(rf, ctx) { if (rf & 1) {
191
+ i0.ɵɵelementStart(0, "div", 33);
192
+ i0.ɵɵelement(1, "i", 63);
185
193
  i0.ɵɵtext(2, " No components found without required custom properties. ");
186
194
  i0.ɵɵelement(3, "br");
187
195
  i0.ɵɵelementStart(4, "small");
188
196
  i0.ɵɵtext(5, "Components with optional custom props can be tested, but not those with required props.");
189
197
  i0.ɵɵelementEnd()();
190
198
  } }
191
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
192
- i0.ɵɵelement(0, "i", 45);
193
- } }
194
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
199
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_4_Conditional_1_Template(rf, ctx) { if (rf & 1) {
195
200
  i0.ɵɵelement(0, "i", 46);
196
201
  } }
197
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
202
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_4_Conditional_2_Template(rf, ctx) { if (rf & 1) {
203
+ i0.ɵɵelement(0, "i", 47);
204
+ } }
205
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_4_Template(rf, ctx) { if (rf & 1) {
198
206
  const _r13 = i0.ɵɵgetCurrentView();
199
- i0.ɵɵelementStart(0, "button", 80);
200
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r13); const component_r12 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleFavorite(component_r12, $event)); });
201
- i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Conditional_1_Template, 1, 0, "i", 45)(2, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Conditional_2_Template, 1, 0, "i", 46);
207
+ i0.ɵɵelementStart(0, "button", 84);
208
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_4_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r13); const component_r12 = i0.ɵɵnextContext().$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleFavorite(component_r12, $event)); });
209
+ i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_4_Conditional_1_Template, 1, 0, "i", 46)(2, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_4_Conditional_2_Template, 1, 0, "i", 47);
202
210
  i0.ɵɵelementEnd();
203
211
  } if (rf & 2) {
204
212
  const component_r12 = i0.ɵɵnextContext().$implicit;
@@ -208,12 +216,12 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Te
208
216
  i0.ɵɵadvance();
209
217
  i0.ɵɵconditional(ctx_r2.isFavorite(component_r12) ? 1 : 2);
210
218
  } }
211
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
212
- i0.ɵɵelement(0, "i", 40);
219
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_8_Conditional_1_Template(rf, ctx) { if (rf & 1) {
220
+ i0.ɵɵelement(0, "i", 41);
213
221
  i0.ɵɵtext(1, " Text Import ");
214
222
  } }
215
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
216
- i0.ɵɵelement(0, "i", 39);
223
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_8_Conditional_2_Template(rf, ctx) { if (rf & 1) {
224
+ i0.ɵɵelement(0, "i", 40);
217
225
  i0.ɵɵtext(1);
218
226
  } if (rf & 2) {
219
227
  const component_r12 = i0.ɵɵnextContext(2).$implicit;
@@ -221,9 +229,9 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Co
221
229
  i0.ɵɵadvance();
222
230
  i0.ɵɵtextInterpolate1(" ", ctx_r2.getComponentFilename(component_r12), " ");
223
231
  } }
224
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
225
- i0.ɵɵelementStart(0, "span", 69);
226
- i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Conditional_1_Template, 2, 0)(2, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Conditional_2_Template, 2, 1);
232
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
233
+ i0.ɵɵelementStart(0, "span", 72);
234
+ i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_8_Conditional_1_Template, 2, 0)(2, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_8_Conditional_2_Template, 2, 1);
227
235
  i0.ɵɵelementEnd();
228
236
  } if (rf & 2) {
229
237
  const component_r12 = i0.ɵɵnextContext().$implicit;
@@ -232,41 +240,46 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Te
232
240
  i0.ɵɵadvance();
233
241
  i0.ɵɵconditional(ctx_r2.getComponentStatus(component_r12) === "Text" ? 1 : 2);
234
242
  } }
235
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
236
- i0.ɵɵelementStart(0, "span", 81);
243
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_14_Conditional_0_Template(rf, ctx) { if (rf & 1) {
244
+ i0.ɵɵelementStart(0, "span", 85);
237
245
  i0.ɵɵtext(1, "Text");
238
246
  i0.ɵɵelementEnd();
239
247
  } }
240
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
241
- i0.ɵɵelementStart(0, "span", 82);
248
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_14_Conditional_1_Template(rf, ctx) { if (rf & 1) {
249
+ i0.ɵɵelementStart(0, "span", 86);
242
250
  i0.ɵɵtext(1, "File");
243
251
  i0.ɵɵelementEnd();
244
252
  } }
245
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
246
- i0.ɵɵtemplate(0, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_14_Conditional_0_Template, 2, 0, "span", 81)(1, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_14_Conditional_1_Template, 2, 0, "span", 82);
253
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_14_Template(rf, ctx) { if (rf & 1) {
254
+ i0.ɵɵtemplate(0, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_14_Conditional_0_Template, 2, 0, "span", 85)(1, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_14_Conditional_1_Template, 2, 0, "span", 86);
247
255
  } if (rf & 2) {
248
256
  const component_r12 = i0.ɵɵnextContext().$implicit;
249
257
  const ctx_r2 = i0.ɵɵnextContext(2);
250
258
  i0.ɵɵconditional(ctx_r2.getComponentStatus(component_r12) === "Text" ? 0 : 1);
251
259
  } }
252
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
253
- i0.ɵɵelementStart(0, "span", 73);
260
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_15_Template(rf, ctx) { if (rf & 1) {
261
+ i0.ɵɵelementStart(0, "span", 76);
262
+ i0.ɵɵtext(1, "Deprecated");
263
+ i0.ɵɵelementEnd();
264
+ } }
265
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "span", 77);
254
267
  i0.ɵɵtext(1, "Published");
255
268
  i0.ɵɵelementEnd();
256
269
  } }
257
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_16_Template(rf, ctx) { if (rf & 1) {
258
- i0.ɵɵelementStart(0, "span", 74);
270
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_17_Template(rf, ctx) { if (rf & 1) {
271
+ i0.ɵɵelementStart(0, "span", 78);
259
272
  i0.ɵɵtext(1, "Draft");
260
273
  i0.ɵɵelementEnd();
261
274
  } }
262
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_22_Template(rf, ctx) { if (rf & 1) {
263
- i0.ɵɵelement(0, "i", 54);
275
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
276
+ i0.ɵɵelement(0, "i", 57);
264
277
  } }
265
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_23_Template(rf, ctx) { if (rf & 1) {
266
- i0.ɵɵelement(0, "i", 55);
278
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
279
+ i0.ɵɵelement(0, "i", 58);
267
280
  } }
268
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_1_Template(rf, ctx) { if (rf & 1) {
269
- i0.ɵɵelementStart(0, "div", 83)(1, "label");
281
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_1_Template(rf, ctx) { if (rf & 1) {
282
+ i0.ɵɵelementStart(0, "div", 87)(1, "label");
270
283
  i0.ɵɵtext(2, "Description");
271
284
  i0.ɵɵelementEnd();
272
285
  i0.ɵɵelementStart(3, "p");
@@ -278,11 +291,11 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_C
278
291
  i0.ɵɵadvance(4);
279
292
  i0.ɵɵtextInterpolate(ctx_r2.getComponentDescription(component_r12));
280
293
  } }
281
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_21_Template(rf, ctx) { if (rf & 1) {
282
- i0.ɵɵelementStart(0, "div", 85)(1, "span", 86);
294
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_21_Template(rf, ctx) { if (rf & 1) {
295
+ i0.ɵɵelementStart(0, "div", 89)(1, "span", 90);
283
296
  i0.ɵɵtext(2, "Loaded:");
284
297
  i0.ɵɵelementEnd();
285
- i0.ɵɵelementStart(3, "span", 87);
298
+ i0.ɵɵelementStart(3, "span", 91);
286
299
  i0.ɵɵtext(4);
287
300
  i0.ɵɵpipe(5, "date");
288
301
  i0.ɵɵelementEnd()();
@@ -292,11 +305,11 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_C
292
305
  i0.ɵɵadvance(4);
293
306
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r2.getComponentLoadedAt(component_r12), "short"));
294
307
  } }
295
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_22_Template(rf, ctx) { if (rf & 1) {
296
- i0.ɵɵelementStart(0, "div", 85)(1, "span", 86);
308
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_22_Template(rf, ctx) { if (rf & 1) {
309
+ i0.ɵɵelementStart(0, "div", 89)(1, "span", 90);
297
310
  i0.ɵɵtext(2, "Updated:");
298
311
  i0.ɵɵelementEnd();
299
- i0.ɵɵelementStart(3, "span", 87);
312
+ i0.ɵɵelementStart(3, "span", 91);
300
313
  i0.ɵɵtext(4);
301
314
  i0.ɵɵpipe(5, "date");
302
315
  i0.ɵɵelementEnd()();
@@ -306,64 +319,64 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_C
306
319
  i0.ɵɵadvance(4);
307
320
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind2(5, 1, ctx_r2.getComponentUpdatedAt(component_r12), "short"));
308
321
  } }
309
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_24_Template(rf, ctx) { if (rf & 1) {
322
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_24_Template(rf, ctx) { if (rf & 1) {
310
323
  const _r14 = i0.ɵɵgetCurrentView();
311
324
  i0.ɵɵelementStart(0, "button", 9);
312
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_24_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.stopComponent(); return i0.ɵɵresetView($event.stopPropagation()); });
313
- i0.ɵɵelement(1, "span", 90);
325
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_24_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r2 = i0.ɵɵnextContext(4); ctx_r2.stopComponent(); return i0.ɵɵresetView($event.stopPropagation()); });
326
+ i0.ɵɵelement(1, "span", 94);
314
327
  i0.ɵɵtext(2, " Stop Component ");
315
328
  i0.ɵɵelementEnd();
316
329
  } if (rf & 2) {
317
330
  i0.ɵɵproperty("themeColor", "error");
318
331
  } }
319
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_25_Template(rf, ctx) { if (rf & 1) {
332
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_25_Template(rf, ctx) { if (rf & 1) {
320
333
  const _r15 = i0.ɵɵgetCurrentView();
321
- i0.ɵɵelementStart(0, "button", 91);
322
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const component_r12 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.runComponent(component_r12); return i0.ɵɵresetView($event.stopPropagation()); });
323
- i0.ɵɵelement(1, "span", 92);
334
+ i0.ɵɵelementStart(0, "button", 95);
335
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_25_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r15); const component_r12 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.runComponent(component_r12); return i0.ɵɵresetView($event.stopPropagation()); });
336
+ i0.ɵɵelement(1, "span", 96);
324
337
  i0.ɵɵtext(2, " Switch to This Component ");
325
338
  i0.ɵɵelementEnd();
326
339
  } if (rf & 2) {
327
340
  i0.ɵɵproperty("themeColor", "base");
328
341
  } }
329
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_26_Template(rf, ctx) { if (rf & 1) {
342
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_26_Template(rf, ctx) { if (rf & 1) {
330
343
  const _r16 = i0.ɵɵgetCurrentView();
331
344
  i0.ɵɵelementStart(0, "button", 9);
332
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_26_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const component_r12 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.runComponent(component_r12); return i0.ɵɵresetView($event.stopPropagation()); });
333
- i0.ɵɵelement(1, "span", 92);
345
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_26_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const component_r12 = i0.ɵɵnextContext(2).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); ctx_r2.runComponent(component_r12); return i0.ɵɵresetView($event.stopPropagation()); });
346
+ i0.ɵɵelement(1, "span", 96);
334
347
  i0.ɵɵtext(2, " Run Component ");
335
348
  i0.ɵɵelementEnd();
336
349
  } if (rf & 2) {
337
350
  i0.ɵɵproperty("themeColor", "primary");
338
351
  } }
339
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Template(rf, ctx) { if (rf & 1) {
340
- i0.ɵɵelementStart(0, "div", 79);
341
- i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_1_Template, 5, 1, "div", 83);
342
- i0.ɵɵelementStart(2, "div", 83)(3, "label");
352
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Template(rf, ctx) { if (rf & 1) {
353
+ i0.ɵɵelementStart(0, "div", 83);
354
+ i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_1_Template, 5, 1, "div", 87);
355
+ i0.ɵɵelementStart(2, "div", 87)(3, "label");
343
356
  i0.ɵɵtext(4, "Component Info");
344
357
  i0.ɵɵelementEnd();
345
- i0.ɵɵelementStart(5, "div", 84)(6, "div", 85)(7, "span", 86);
358
+ i0.ɵɵelementStart(5, "div", 88)(6, "div", 89)(7, "span", 90);
346
359
  i0.ɵɵtext(8, "Type:");
347
360
  i0.ɵɵelementEnd();
348
- i0.ɵɵelementStart(9, "span", 87);
361
+ i0.ɵɵelementStart(9, "span", 91);
349
362
  i0.ɵɵtext(10);
350
363
  i0.ɵɵelementEnd()();
351
- i0.ɵɵelementStart(11, "div", 85)(12, "span", 86);
364
+ i0.ɵɵelementStart(11, "div", 89)(12, "span", 90);
352
365
  i0.ɵɵtext(13, "Version:");
353
366
  i0.ɵɵelementEnd();
354
- i0.ɵɵelementStart(14, "span", 87);
367
+ i0.ɵɵelementStart(14, "span", 91);
355
368
  i0.ɵɵtext(15);
356
369
  i0.ɵɵelementEnd()();
357
- i0.ɵɵelementStart(16, "div", 85)(17, "span", 86);
370
+ i0.ɵɵelementStart(16, "div", 89)(17, "span", 90);
358
371
  i0.ɵɵtext(18, "Status:");
359
372
  i0.ɵɵelementEnd();
360
- i0.ɵɵelementStart(19, "span", 87);
373
+ i0.ɵɵelementStart(19, "span", 91);
361
374
  i0.ɵɵtext(20);
362
375
  i0.ɵɵelementEnd()();
363
- i0.ɵɵtemplate(21, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_21_Template, 6, 4, "div", 85)(22, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_22_Template, 6, 4, "div", 85);
376
+ i0.ɵɵtemplate(21, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_21_Template, 6, 4, "div", 89)(22, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_22_Template, 6, 4, "div", 89);
364
377
  i0.ɵɵelementEnd()();
365
- i0.ɵɵelementStart(23, "div", 88);
366
- i0.ɵɵtemplate(24, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_24_Template, 3, 1, "button", 7)(25, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_25_Template, 3, 1, "button", 89)(26, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Conditional_26_Template, 3, 1, "button", 7);
378
+ i0.ɵɵelementStart(23, "div", 92);
379
+ i0.ɵɵtemplate(24, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_24_Template, 3, 1, "button", 7)(25, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_25_Template, 3, 1, "button", 93)(26, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Conditional_26_Template, 3, 1, "button", 7);
367
380
  i0.ɵɵelementEnd()();
368
381
  } if (rf & 2) {
369
382
  const component_r12 = i0.ɵɵnextContext().$implicit;
@@ -381,34 +394,34 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_T
381
394
  i0.ɵɵadvance(3);
382
395
  i0.ɵɵconditional(ctx_r2.selectedComponent && ctx_r2.getComponentId(ctx_r2.selectedComponent) === ctx_r2.getComponentId(component_r12) && ctx_r2.isRunning ? 24 : ctx_r2.isRunning && ctx_r2.selectedComponent && ctx_r2.getComponentId(ctx_r2.selectedComponent) !== ctx_r2.getComponentId(component_r12) ? 25 : 26);
383
396
  } }
384
- function ComponentStudioDashboardComponent_Conditional_44_For_1_Template(rf, ctx) { if (rf & 1) {
397
+ function ComponentStudioDashboardComponent_Conditional_47_For_1_Template(rf, ctx) { if (rf & 1) {
385
398
  const _r11 = i0.ɵɵgetCurrentView();
386
- i0.ɵɵelementStart(0, "div", 62)(1, "div", 63);
387
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_44_For_1_Template_div_click_1_listener() { const component_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleComponentExpansion(component_r12)); });
388
- i0.ɵɵelementStart(2, "div", 64);
389
- i0.ɵɵelement(3, "i", 65);
399
+ i0.ɵɵelementStart(0, "div", 65)(1, "div", 66);
400
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_For_1_Template_div_click_1_listener() { const component_r12 = i0.ɵɵrestoreView(_r11).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.toggleComponentExpansion(component_r12)); });
401
+ i0.ɵɵelementStart(2, "div", 67);
402
+ i0.ɵɵelement(3, "i", 68);
390
403
  i0.ɵɵelementEnd();
391
- i0.ɵɵtemplate(4, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_4_Template, 3, 4, "button", 66);
392
- i0.ɵɵelementStart(5, "div", 67)(6, "div", 68);
404
+ i0.ɵɵtemplate(4, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_4_Template, 3, 4, "button", 69);
405
+ i0.ɵɵelementStart(5, "div", 70)(6, "div", 71);
393
406
  i0.ɵɵtext(7);
394
- i0.ɵɵtemplate(8, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_8_Template, 3, 2, "span", 69);
407
+ i0.ɵɵtemplate(8, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_8_Template, 3, 2, "span", 72);
395
408
  i0.ɵɵelementEnd();
396
- i0.ɵɵelementStart(9, "div", 70)(10, "span", 71);
409
+ i0.ɵɵelementStart(9, "div", 73)(10, "span", 74);
397
410
  i0.ɵɵtext(11);
398
411
  i0.ɵɵelementEnd();
399
- i0.ɵɵelementStart(12, "span", 72);
412
+ i0.ɵɵelementStart(12, "span", 75);
400
413
  i0.ɵɵtext(13);
401
414
  i0.ɵɵelementEnd();
402
- i0.ɵɵtemplate(14, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_14_Template, 2, 1)(15, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_15_Template, 2, 0, "span", 73)(16, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_16_Template, 2, 0, "span", 74);
415
+ i0.ɵɵtemplate(14, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_14_Template, 2, 1)(15, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_15_Template, 2, 0, "span", 76)(16, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_16_Template, 2, 0, "span", 77)(17, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_17_Template, 2, 0, "span", 78);
403
416
  i0.ɵɵelementEnd();
404
- i0.ɵɵelementStart(17, "div", 75)(18, "span", 76);
405
- i0.ɵɵelement(19, "i", 77);
406
- i0.ɵɵtext(20);
417
+ i0.ɵɵelementStart(18, "div", 79)(19, "span", 80);
418
+ i0.ɵɵelement(20, "i", 81);
419
+ i0.ɵɵtext(21);
407
420
  i0.ɵɵelementEnd()()();
408
- i0.ɵɵelementStart(21, "div", 78);
409
- i0.ɵɵtemplate(22, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_22_Template, 1, 0, "i", 54)(23, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_23_Template, 1, 0, "i", 55);
421
+ i0.ɵɵelementStart(22, "div", 82);
422
+ i0.ɵɵtemplate(23, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_23_Template, 1, 0, "i", 57)(24, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_24_Template, 1, 0, "i", 58);
410
423
  i0.ɵɵelementEnd()();
411
- i0.ɵɵtemplate(24, ComponentStudioDashboardComponent_Conditional_44_For_1_Conditional_24_Template, 27, 6, "div", 79);
424
+ i0.ɵɵtemplate(25, ComponentStudioDashboardComponent_Conditional_47_For_1_Conditional_25_Template, 27, 6, "div", 83);
412
425
  i0.ɵɵelementEnd();
413
426
  } if (rf & 2) {
414
427
  const component_r12 = ctx.$implicit;
@@ -429,25 +442,25 @@ function ComponentStudioDashboardComponent_Conditional_44_For_1_Template(rf, ctx
429
442
  i0.ɵɵadvance(2);
430
443
  i0.ɵɵtextInterpolate1("v", ctx_r2.getComponentVersion(component_r12), "");
431
444
  i0.ɵɵadvance();
432
- i0.ɵɵconditional(ctx_r2.isFileLoadedComponent(component_r12) ? 14 : ctx_r2.getComponentStatus(component_r12) === "Published" ? 15 : 16);
433
- i0.ɵɵadvance(4);
445
+ i0.ɵɵconditional(ctx_r2.isFileLoadedComponent(component_r12) ? 14 : ctx_r2.getComponentStatus(component_r12) === "Deprecated" ? 15 : ctx_r2.getComponentStatus(component_r12) === "Published" ? 16 : 17);
446
+ i0.ɵɵadvance(5);
434
447
  i0.ɵɵstyleProp("background-color", ctx_r2.getNamespaceColor(ctx_r2.getComponentNamespace(component_r12)));
435
448
  i0.ɵɵproperty("title", ctx_r2.getComponentNamespace(component_r12) || "Uncategorized");
436
449
  i0.ɵɵadvance(2);
437
450
  i0.ɵɵtextInterpolate1(" ", ctx_r2.formatNamespace(ctx_r2.getComponentNamespace(component_r12)), " ");
438
451
  i0.ɵɵadvance(2);
439
- i0.ɵɵconditional(ctx_r2.expandedComponent && ctx_r2.getComponentId(ctx_r2.expandedComponent) === ctx_r2.getComponentId(component_r12) ? 22 : 23);
452
+ i0.ɵɵconditional(ctx_r2.expandedComponent && ctx_r2.getComponentId(ctx_r2.expandedComponent) === ctx_r2.getComponentId(component_r12) ? 23 : 24);
440
453
  i0.ɵɵadvance(2);
441
- i0.ɵɵconditional(ctx_r2.expandedComponent && ctx_r2.getComponentId(ctx_r2.expandedComponent) === ctx_r2.getComponentId(component_r12) ? 24 : -1);
454
+ i0.ɵɵconditional(ctx_r2.expandedComponent && ctx_r2.getComponentId(ctx_r2.expandedComponent) === ctx_r2.getComponentId(component_r12) ? 25 : -1);
442
455
  } }
443
- function ComponentStudioDashboardComponent_Conditional_44_Template(rf, ctx) { if (rf & 1) {
444
- i0.ɵɵrepeaterCreate(0, ComponentStudioDashboardComponent_Conditional_44_For_1_Template, 25, 21, "div", 61, _forTrack1, true);
456
+ function ComponentStudioDashboardComponent_Conditional_47_Template(rf, ctx) { if (rf & 1) {
457
+ i0.ɵɵrepeaterCreate(0, ComponentStudioDashboardComponent_Conditional_47_For_1_Template, 26, 21, "div", 64, _forTrack1, true);
445
458
  } if (rf & 2) {
446
459
  const ctx_r2 = i0.ɵɵnextContext();
447
460
  i0.ɵɵrepeater(ctx_r2.filteredComponents);
448
461
  } }
449
- function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
450
- i0.ɵɵelementStart(0, "details", 108)(1, "summary");
462
+ function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_0_Conditional_18_Template(rf, ctx) { if (rf & 1) {
463
+ i0.ɵɵelementStart(0, "details", 111)(1, "summary");
451
464
  i0.ɵɵtext(2, "Technical Details (click to expand)");
452
465
  i0.ɵɵelementEnd();
453
466
  i0.ɵɵelementStart(3, "pre");
@@ -458,21 +471,21 @@ function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditio
458
471
  i0.ɵɵadvance(4);
459
472
  i0.ɵɵtextInterpolate(ctx_r2.formatTechnicalDetails(ctx_r2.currentError.technicalDetails));
460
473
  } }
461
- function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
474
+ function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_0_Template(rf, ctx) { if (rf & 1) {
462
475
  const _r18 = i0.ɵɵgetCurrentView();
463
- i0.ɵɵelementStart(0, "div", 99)(1, "div", 101)(2, "div", 102);
464
- i0.ɵɵelement(3, "i", 103);
476
+ i0.ɵɵelementStart(0, "div", 103)(1, "div", 105)(2, "div", 106);
477
+ i0.ɵɵelement(3, "i", 48);
465
478
  i0.ɵɵelementStart(4, "h3");
466
479
  i0.ɵɵtext(5, "Component Error");
467
480
  i0.ɵɵelementEnd();
468
- i0.ɵɵelementStart(6, "button", 104);
469
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.copyErrorToClipboard()); });
470
- i0.ɵɵelement(7, "i", 105);
481
+ i0.ɵɵelementStart(6, "button", 107);
482
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_0_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.copyErrorToClipboard()); });
483
+ i0.ɵɵelement(7, "i", 108);
471
484
  i0.ɵɵelementEnd()();
472
- i0.ɵɵelementStart(8, "p", 106);
485
+ i0.ɵɵelementStart(8, "p", 109);
473
486
  i0.ɵɵtext(9, " The component could not be rendered due to the following error: ");
474
487
  i0.ɵɵelementEnd();
475
- i0.ɵɵelementStart(10, "div", 107)(11, "strong");
488
+ i0.ɵɵelementStart(10, "div", 110)(11, "strong");
476
489
  i0.ɵɵtext(12, "Error Type:");
477
490
  i0.ɵɵelementEnd();
478
491
  i0.ɵɵtext(13);
@@ -481,9 +494,9 @@ function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditio
481
494
  i0.ɵɵtext(16, "Message:");
482
495
  i0.ɵɵelementEnd();
483
496
  i0.ɵɵtext(17);
484
- i0.ɵɵtemplate(18, ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_0_Conditional_18_Template, 5, 1, "details", 108);
497
+ i0.ɵɵtemplate(18, ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_0_Conditional_18_Template, 5, 1, "details", 111);
485
498
  i0.ɵɵelementEnd();
486
- i0.ɵɵelementStart(19, "div", 109)(20, "strong");
499
+ i0.ɵɵelementStart(19, "div", 112)(20, "strong");
487
500
  i0.ɵɵtext(21, "What to do:");
488
501
  i0.ɵɵelementEnd();
489
502
  i0.ɵɵelementStart(22, "ol")(23, "li");
@@ -498,14 +511,14 @@ function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditio
498
511
  i0.ɵɵelementStart(29, "li");
499
512
  i0.ɵɵtext(30, "Contact your system administrator if the issue persists");
500
513
  i0.ɵɵelementEnd()()();
501
- i0.ɵɵelementStart(31, "div", 110)(32, "button", 111);
502
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_0_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.retryComponent()); });
503
- i0.ɵɵelement(33, "span", 112);
514
+ i0.ɵɵelementStart(31, "div", 113)(32, "button", 114);
515
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_0_Template_button_click_32_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.retryComponent()); });
516
+ i0.ɵɵelement(33, "span", 115);
504
517
  i0.ɵɵtext(34, " Retry ");
505
518
  i0.ɵɵelementEnd();
506
519
  i0.ɵɵelementStart(35, "button", 9);
507
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_0_Template_button_click_35_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.stopComponent()); });
508
- i0.ɵɵelement(36, "span", 90);
520
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_0_Template_button_click_35_listener() { i0.ɵɵrestoreView(_r18); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.stopComponent()); });
521
+ i0.ɵɵelement(36, "span", 94);
509
522
  i0.ɵɵtext(37, " Stop ");
510
523
  i0.ɵɵelementEnd()()()();
511
524
  } if (rf & 2) {
@@ -519,34 +532,34 @@ function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditio
519
532
  i0.ɵɵadvance(17);
520
533
  i0.ɵɵproperty("themeColor", "error");
521
534
  } }
522
- function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
535
+ function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_1_Template(rf, ctx) { if (rf & 1) {
523
536
  const _r19 = i0.ɵɵgetCurrentView();
524
- i0.ɵɵelementStart(0, "mj-react-component", 113);
525
- i0.ɵɵlistener("componentEvent", function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_1_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onComponentEvent($event)); })("openEntityRecord", function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_1_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onOpenEntityRecord($event)); });
537
+ i0.ɵɵelementStart(0, "mj-react-component", 116);
538
+ i0.ɵɵlistener("componentEvent", function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_1_Template_mj_react_component_componentEvent_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onComponentEvent($event)); })("openEntityRecord", function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_1_Template_mj_react_component_openEntityRecord_0_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onOpenEntityRecord($event)); });
526
539
  i0.ɵɵelementEnd();
527
540
  } if (rf & 2) {
528
541
  const ctx_r2 = i0.ɵɵnextContext(3);
529
542
  i0.ɵɵproperty("component", ctx_r2.componentSpec);
530
543
  } }
531
- function ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Template(rf, ctx) { if (rf & 1) {
532
- i0.ɵɵtemplate(0, ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_0_Template, 38, 4, "div", 99)(1, ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Conditional_1_Template, 1, 1, "mj-react-component", 100);
544
+ function ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Template(rf, ctx) { if (rf & 1) {
545
+ i0.ɵɵtemplate(0, ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_0_Template, 38, 4, "div", 103)(1, ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Conditional_1_Template, 1, 1, "mj-react-component", 104);
533
546
  } if (rf & 2) {
534
547
  const ctx_r2 = i0.ɵɵnextContext(2);
535
548
  i0.ɵɵconditional(ctx_r2.currentError ? 0 : 1);
536
549
  } }
537
- function ComponentStudioDashboardComponent_Conditional_47_Conditional_4_Template(rf, ctx) { if (rf & 1) {
550
+ function ComponentStudioDashboardComponent_Conditional_50_Conditional_4_Template(rf, ctx) { if (rf & 1) {
538
551
  const _r20 = i0.ɵɵgetCurrentView();
539
- i0.ɵɵelementStart(0, "div", 95);
540
- i0.ɵɵelement(1, "i", 114);
552
+ i0.ɵɵelementStart(0, "div", 99);
553
+ i0.ɵɵelement(1, "i", 117);
541
554
  i0.ɵɵelementStart(2, "h3");
542
555
  i0.ɵɵtext(3);
543
556
  i0.ɵɵelementEnd();
544
557
  i0.ɵɵelementStart(4, "p");
545
558
  i0.ɵɵtext(5);
546
559
  i0.ɵɵelementEnd();
547
- i0.ɵɵelementStart(6, "button", 115);
548
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_Conditional_4_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.runComponent(ctx_r2.selectedComponent)); });
549
- i0.ɵɵelement(7, "span", 92);
560
+ i0.ɵɵelementStart(6, "button", 118);
561
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_Conditional_4_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r20); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.runComponent(ctx_r2.selectedComponent)); });
562
+ i0.ɵɵelement(7, "span", 96);
550
563
  i0.ɵɵtext(8, " Run Component ");
551
564
  i0.ɵɵelementEnd()();
552
565
  } if (rf & 2) {
@@ -558,43 +571,43 @@ function ComponentStudioDashboardComponent_Conditional_47_Conditional_4_Template
558
571
  i0.ɵɵadvance();
559
572
  i0.ɵɵproperty("themeColor", "primary")("size", "large");
560
573
  } }
561
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
574
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Conditional_6_Template(rf, ctx) { if (rf & 1) {
562
575
  const _r22 = i0.ɵɵgetCurrentView();
563
576
  i0.ɵɵelementStart(0, "button", 9);
564
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.applySpecChanges()); });
565
- i0.ɵɵelement(1, "span", 122);
577
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r22); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.applySpecChanges()); });
578
+ i0.ɵɵelement(1, "span", 125);
566
579
  i0.ɵɵtext(2, " Apply Changes ");
567
580
  i0.ɵɵelementEnd();
568
- i0.ɵɵelementStart(3, "button", 111);
569
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Conditional_6_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.initializeEditors()); });
570
- i0.ɵɵelement(4, "span", 57);
581
+ i0.ɵɵelementStart(3, "button", 114);
582
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Conditional_6_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r22); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.initializeEditors()); });
583
+ i0.ɵɵelement(4, "span", 60);
571
584
  i0.ɵɵtext(5, " Cancel ");
572
585
  i0.ɵɵelementEnd();
573
586
  } if (rf & 2) {
574
587
  i0.ɵɵproperty("themeColor", "primary");
575
588
  } }
576
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Conditional_7_Template(rf, ctx) { if (rf & 1) {
589
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Conditional_7_Template(rf, ctx) { if (rf & 1) {
577
590
  const _r23 = i0.ɵɵgetCurrentView();
578
591
  i0.ɵɵelementStart(0, "button", 9);
579
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.refreshComponent()); });
592
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r23); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.refreshComponent()); });
580
593
  i0.ɵɵelement(1, "span", 15);
581
594
  i0.ɵɵtext(2, " Refresh Component ");
582
595
  i0.ɵɵelementEnd();
583
596
  } if (rf & 2) {
584
597
  i0.ɵɵproperty("themeColor", "info");
585
598
  } }
586
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Template(rf, ctx) { if (rf & 1) {
599
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Template(rf, ctx) { if (rf & 1) {
587
600
  const _r21 = i0.ɵɵgetCurrentView();
588
- i0.ɵɵelementStart(0, "div", 116)(1, "div", 117)(2, "h4");
589
- i0.ɵɵelement(3, "i", 118);
601
+ i0.ɵɵelementStart(0, "div", 119)(1, "div", 120)(2, "h4");
602
+ i0.ɵɵelement(3, "i", 121);
590
603
  i0.ɵɵtext(4, " Component Specification (JSON)");
591
604
  i0.ɵɵelementEnd();
592
- i0.ɵɵelementStart(5, "div", 119);
593
- i0.ɵɵtemplate(6, ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Conditional_6_Template, 6, 1)(7, ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Conditional_7_Template, 3, 1, "button", 7);
605
+ i0.ɵɵelementStart(5, "div", 122);
606
+ i0.ɵɵtemplate(6, ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Conditional_6_Template, 6, 1)(7, ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Conditional_7_Template, 3, 1, "button", 7);
594
607
  i0.ɵɵelementEnd()();
595
- i0.ɵɵelementStart(8, "div", 120)(9, "mj-code-editor", 121);
596
- i0.ɵɵtwoWayListener("ngModelChange", function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Template_mj_code_editor_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.editableSpec, $event) || (ctx_r2.editableSpec = $event); return i0.ɵɵresetView($event); });
597
- i0.ɵɵlistener("ngModelChange", function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Template_mj_code_editor_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onSpecChange($event)); });
608
+ i0.ɵɵelementStart(8, "div", 123)(9, "mj-code-editor", 124);
609
+ i0.ɵɵtwoWayListener("ngModelChange", function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Template_mj_code_editor_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r2 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r2.editableSpec, $event) || (ctx_r2.editableSpec = $event); return i0.ɵɵresetView($event); });
610
+ i0.ɵɵlistener("ngModelChange", function ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Template_mj_code_editor_ngModelChange_9_listener($event) { i0.ɵɵrestoreView(_r21); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onSpecChange($event)); });
598
611
  i0.ɵɵelementEnd()()();
599
612
  } if (rf & 2) {
600
613
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -606,58 +619,58 @@ function ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Template
606
619
  i0.ɵɵtwoWayProperty("ngModel", ctx_r2.editableSpec);
607
620
  i0.ɵɵproperty("language", "json")("readonly", false);
608
621
  } }
609
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
622
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Conditional_6_Template(rf, ctx) { if (rf & 1) {
610
623
  const _r24 = i0.ɵɵgetCurrentView();
611
624
  i0.ɵɵelementStart(0, "button", 9);
612
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.applyCodeChanges()); });
613
- i0.ɵɵelement(1, "span", 122);
625
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.applyCodeChanges()); });
626
+ i0.ɵɵelement(1, "span", 125);
614
627
  i0.ɵɵtext(2, " Apply Changes ");
615
628
  i0.ɵɵelementEnd();
616
- i0.ɵɵelementStart(3, "button", 111);
617
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Conditional_6_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.initializeEditors()); });
618
- i0.ɵɵelement(4, "span", 57);
629
+ i0.ɵɵelementStart(3, "button", 114);
630
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Conditional_6_Template_button_click_3_listener() { i0.ɵɵrestoreView(_r24); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.initializeEditors()); });
631
+ i0.ɵɵelement(4, "span", 60);
619
632
  i0.ɵɵtext(5, " Cancel ");
620
633
  i0.ɵɵelementEnd();
621
634
  } if (rf & 2) {
622
635
  i0.ɵɵproperty("themeColor", "primary");
623
636
  } }
624
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
637
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Conditional_7_Template(rf, ctx) { if (rf & 1) {
625
638
  const _r25 = i0.ɵɵgetCurrentView();
626
639
  i0.ɵɵelementStart(0, "button", 9);
627
- i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.refreshComponent()); });
640
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Conditional_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r25); const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.refreshComponent()); });
628
641
  i0.ɵɵelement(1, "span", 15);
629
642
  i0.ɵɵtext(2, " Refresh Component ");
630
643
  i0.ɵɵelementEnd();
631
644
  } if (rf & 2) {
632
645
  i0.ɵɵproperty("themeColor", "info");
633
646
  } }
634
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_For_11_ng_template_1_Template(rf, ctx) { if (rf & 1) {
647
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_For_11_ng_template_1_Template(rf, ctx) { if (rf & 1) {
635
648
  const _r26 = i0.ɵɵgetCurrentView();
636
- i0.ɵɵelementStart(0, "mj-code-editor", 128);
637
- i0.ɵɵlistener("ngModelChange", function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_For_11_ng_template_1_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r26); const ɵ$index_511_r27 = i0.ɵɵnextContext().$index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onCodeSectionChange($event, ɵ$index_511_r27)); });
649
+ i0.ɵɵelementStart(0, "mj-code-editor", 131);
650
+ i0.ɵɵlistener("ngModelChange", function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_For_11_ng_template_1_Template_mj_code_editor_ngModelChange_0_listener($event) { i0.ɵɵrestoreView(_r26); const ɵ$index_525_r27 = i0.ɵɵnextContext().$index; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onCodeSectionChange($event, ɵ$index_525_r27)); });
638
651
  i0.ɵɵelementEnd();
639
652
  } if (rf & 2) {
640
653
  const section_r28 = i0.ɵɵnextContext().$implicit;
641
654
  i0.ɵɵproperty("ngModel", section_r28.code)("language", "javascript")("readonly", false);
642
655
  } }
643
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_For_11_Template(rf, ctx) { if (rf & 1) {
644
- i0.ɵɵelementStart(0, "kendo-panelbar-item", 126);
645
- i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_47_ng_template_11_For_11_ng_template_1_Template, 1, 3, "ng-template", 127);
656
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_For_11_Template(rf, ctx) { if (rf & 1) {
657
+ i0.ɵɵelementStart(0, "kendo-panelbar-item", 129);
658
+ i0.ɵɵtemplate(1, ComponentStudioDashboardComponent_Conditional_50_ng_template_11_For_11_ng_template_1_Template, 1, 3, "ng-template", 130);
646
659
  i0.ɵɵelementEnd();
647
660
  } if (rf & 2) {
648
661
  const section_r28 = ctx.$implicit;
649
662
  i0.ɵɵproperty("title", section_r28.title)("expanded", section_r28.expanded);
650
663
  } }
651
- function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Template(rf, ctx) { if (rf & 1) {
652
- i0.ɵɵelementStart(0, "div", 123)(1, "div", 117)(2, "h4");
653
- i0.ɵɵelement(3, "i", 124);
664
+ function ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Template(rf, ctx) { if (rf & 1) {
665
+ i0.ɵɵelementStart(0, "div", 126)(1, "div", 120)(2, "h4");
666
+ i0.ɵɵelement(3, "i", 127);
654
667
  i0.ɵɵtext(4, " Component Code (JavaScript/React)");
655
668
  i0.ɵɵelementEnd();
656
- i0.ɵɵelementStart(5, "div", 119);
657
- i0.ɵɵtemplate(6, ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Conditional_6_Template, 6, 1)(7, ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Conditional_7_Template, 3, 1, "button", 7);
669
+ i0.ɵɵelementStart(5, "div", 122);
670
+ i0.ɵɵtemplate(6, ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Conditional_6_Template, 6, 1)(7, ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Conditional_7_Template, 3, 1, "button", 7);
658
671
  i0.ɵɵelementEnd()();
659
- i0.ɵɵelementStart(8, "div", 120)(9, "kendo-panelbar", 125);
660
- i0.ɵɵrepeaterCreate(10, ComponentStudioDashboardComponent_Conditional_47_ng_template_11_For_11_Template, 2, 2, "kendo-panelbar-item", 126, _forTrack2);
672
+ i0.ɵɵelementStart(8, "div", 123)(9, "kendo-panelbar", 128);
673
+ i0.ɵɵrepeaterCreate(10, ComponentStudioDashboardComponent_Conditional_50_ng_template_11_For_11_Template, 2, 2, "kendo-panelbar-item", 129, _forTrack2);
661
674
  i0.ɵɵelementEnd()()();
662
675
  } if (rf & 2) {
663
676
  const ctx_r2 = i0.ɵɵnextContext(2);
@@ -668,21 +681,21 @@ function ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Templat
668
681
  i0.ɵɵadvance(3);
669
682
  i0.ɵɵrepeater(ctx_r2.getComponentCodeSections());
670
683
  } }
671
- function ComponentStudioDashboardComponent_Conditional_47_Conditional_12_Template(rf, ctx) { }
672
- function ComponentStudioDashboardComponent_Conditional_47_Template(rf, ctx) { if (rf & 1) {
684
+ function ComponentStudioDashboardComponent_Conditional_50_Conditional_12_Template(rf, ctx) { }
685
+ function ComponentStudioDashboardComponent_Conditional_50_Template(rf, ctx) { if (rf & 1) {
673
686
  const _r17 = i0.ɵɵgetCurrentView();
674
- i0.ɵɵelementStart(0, "kendo-splitter", 17)(1, "kendo-splitter-pane", 93)(2, "div", 94);
675
- i0.ɵɵtemplate(3, ComponentStudioDashboardComponent_Conditional_47_Conditional_3_Template, 2, 1)(4, ComponentStudioDashboardComponent_Conditional_47_Conditional_4_Template, 9, 4, "div", 95);
687
+ i0.ɵɵelementStart(0, "kendo-splitter", 17)(1, "kendo-splitter-pane", 97)(2, "div", 98);
688
+ i0.ɵɵtemplate(3, ComponentStudioDashboardComponent_Conditional_50_Conditional_3_Template, 2, 1)(4, ComponentStudioDashboardComponent_Conditional_50_Conditional_4_Template, 9, 4, "div", 99);
676
689
  i0.ɵɵelementEnd()();
677
- i0.ɵɵelementStart(5, "kendo-splitter-pane", 93)(6, "div")(7, "kendo-tabstrip", 96);
678
- i0.ɵɵlistener("tabSelect", function ComponentStudioDashboardComponent_Conditional_47_Template_kendo_tabstrip_tabSelect_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTabSelect($event)); });
679
- i0.ɵɵelementStart(8, "kendo-tabstrip-tab", 97);
680
- i0.ɵɵtemplate(9, ComponentStudioDashboardComponent_Conditional_47_ng_template_9_Template, 10, 5, "ng-template", 98);
690
+ i0.ɵɵelementStart(5, "kendo-splitter-pane", 97)(6, "div")(7, "kendo-tabstrip", 100);
691
+ i0.ɵɵlistener("tabSelect", function ComponentStudioDashboardComponent_Conditional_50_Template_kendo_tabstrip_tabSelect_7_listener($event) { i0.ɵɵrestoreView(_r17); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onTabSelect($event)); });
692
+ i0.ɵɵelementStart(8, "kendo-tabstrip-tab", 101);
693
+ i0.ɵɵtemplate(9, ComponentStudioDashboardComponent_Conditional_50_ng_template_9_Template, 10, 5, "ng-template", 102);
681
694
  i0.ɵɵelementEnd();
682
- i0.ɵɵelementStart(10, "kendo-tabstrip-tab", 97);
683
- i0.ɵɵtemplate(11, ComponentStudioDashboardComponent_Conditional_47_ng_template_11_Template, 12, 2, "ng-template", 98);
695
+ i0.ɵɵelementStart(10, "kendo-tabstrip-tab", 101);
696
+ i0.ɵɵtemplate(11, ComponentStudioDashboardComponent_Conditional_50_ng_template_11_Template, 12, 2, "ng-template", 102);
684
697
  i0.ɵɵelementEnd()()()()();
685
- i0.ɵɵtemplate(12, ComponentStudioDashboardComponent_Conditional_47_Conditional_12_Template, 0, 0);
698
+ i0.ɵɵtemplate(12, ComponentStudioDashboardComponent_Conditional_50_Conditional_12_Template, 0, 0);
686
699
  } if (rf & 2) {
687
700
  const ctx_r2 = i0.ɵɵnextContext();
688
701
  i0.ɵɵadvance();
@@ -698,9 +711,9 @@ function ComponentStudioDashboardComponent_Conditional_47_Template(rf, ctx) { if
698
711
  i0.ɵɵadvance(2);
699
712
  i0.ɵɵconditional(!ctx_r2.isDetailsPaneCollapsed ? 12 : -1);
700
713
  } }
701
- function ComponentStudioDashboardComponent_Conditional_48_Template(rf, ctx) { if (rf & 1) {
702
- i0.ɵɵelementStart(0, "div", 35);
703
- i0.ɵɵelement(1, "i", 129);
714
+ function ComponentStudioDashboardComponent_Conditional_51_Template(rf, ctx) { if (rf & 1) {
715
+ i0.ɵɵelementStart(0, "div", 36);
716
+ i0.ɵɵelement(1, "i", 132);
704
717
  i0.ɵɵelementStart(2, "h2");
705
718
  i0.ɵɵtext(3, "Ready to Test Components");
706
719
  i0.ɵɵelementEnd();
@@ -730,6 +743,7 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
730
743
  // Favorites
731
744
  favoriteComponents = new Set(); // Set of component IDs
732
745
  showOnlyFavorites = false; // Filter to show only favorites
746
+ showDeprecatedComponents = false; // Filter to show/hide deprecated components
733
747
  metadata = new Metadata();
734
748
  // Error handling
735
749
  currentError = null;
@@ -868,6 +882,13 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
868
882
  this.showOnlyFavorites = !this.showOnlyFavorites;
869
883
  this.combineAndFilterComponents();
870
884
  }
885
+ /**
886
+ * Toggle showing deprecated components
887
+ */
888
+ toggleShowDeprecatedComponents() {
889
+ this.showDeprecatedComponents = !this.showDeprecatedComponents;
890
+ this.combineAndFilterComponents();
891
+ }
871
892
  onSearchChange(query) {
872
893
  this.searchQuery = query;
873
894
  this.combineAndFilterComponents();
@@ -882,7 +903,14 @@ let ComponentStudioDashboardComponent = class ComponentStudioDashboardComponent
882
903
  this.buildCategories();
883
904
  // Apply filters
884
905
  let filtered = [...this.allComponents];
885
- // Apply favorites filter first if enabled
906
+ // Filter out deprecated components unless explicitly shown
907
+ if (!this.showDeprecatedComponents) {
908
+ filtered = filtered.filter(c => {
909
+ const status = this.getComponentStatus(c);
910
+ return status !== 'Deprecated';
911
+ });
912
+ }
913
+ // Apply favorites filter if enabled
886
914
  if (this.showOnlyFavorites) {
887
915
  filtered = filtered.filter(c => this.isFavorite(c));
888
916
  }
@@ -1813,7 +1841,7 @@ ${this.currentError.technicalDetails ? '\nTechnical Details:\n' + JSON.stringify
1813
1841
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.fileInput = _t.first);
1814
1842
  } }, hostBindings: function ComponentStudioDashboardComponent_HostBindings(rf, ctx) { if (rf & 1) {
1815
1843
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_click_HostBindingHandler($event) { return ctx.onDocumentClick($event); }, false, i0.ɵɵresolveDocument);
1816
- } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 49, vars: 21, consts: [["fileInput", ""], [1, "component-studio"], [1, "dashboard-header"], [1, "header-content"], [1, "fa-solid", "fa-puzzle-piece"], [1, "header-subtitle"], [1, "header-buttons"], ["kendoButton", "", 3, "themeColor"], [1, "import-dropdown"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-file-import"], [1, "fa-solid", "fa-chevron-down", 2, "margin-left", "5px", "font-size", "10px"], [1, "dropdown-menu"], [1, "export-dropdown", 3, "open"], ["kendoButton", "", 3, "click", "disabled"], [1, "fa-solid", "fa-sync"], ["type", "file", "accept", ".json", 2, "display", "none", 3, "change"], ["orientation", "horizontal"], [3, "min", "max", "size"], [1, "components-panel"], [1, "panel-header"], [1, "panel-header-top"], [1, "header-actions"], ["title", "Show only favorites", 1, "favorites-toggle", 3, "click"], [1, "component-count"], [1, "category-filters"], [1, "filter-pills"], [1, "search-box"], ["placeholder", "Search components...", 3, "valueChange", "value", "clearButton"], ["kendoTextBoxPrefixTemplate", ""], [1, "components-list"], [1, "loading-message"], [1, "empty-message"], [3, "min"], [1, "component-display"], [1, "empty-state"], [1, "fa-solid", "fa-eye"], [1, "fa-solid", "fa-eye-slash"], [1, "dropdown-item", 3, "click"], [1, "fa-solid", "fa-file"], [1, "fa-solid", "fa-keyboard"], [1, "export-dropdown"], [1, "fa-solid", "fa-file-export"], [1, "fa-solid", "fa-save"], [1, "fa-solid", "fa-clipboard"], [1, "fa-solid", "fa-star"], [1, "fa-regular", "fa-star"], [1, "category-pill", 3, "active", "--pill-color"], [1, "more-button"], [1, "clear-filters-button"], [1, "category-pill", 3, "click"], [1, "pill-name"], [1, "pill-count"], [1, "more-button", 3, "click"], [1, "fa-solid", "fa-chevron-up"], [1, "fa-solid", "fa-chevron-down"], [1, "clear-filters-button", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-search"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-info-circle"], [1, "component-card", 3, "expanded", "running", "file-loaded"], [1, "component-card"], [1, "card-header", 3, "click"], [1, "card-icon"], [1, "fa-solid", 3, "ngClass"], [1, "favorite-btn", 3, "is-favorite", "title"], [1, "card-info"], [1, "card-name"], [1, "file-badge", 3, "title"], [1, "card-meta"], [1, "card-type"], [1, "card-version"], [1, "status-badge", "published"], [1, "status-badge", "draft"], [1, "card-namespace"], [1, "namespace-chip", 3, "title"], [1, "fa-solid", "fa-folder-tree"], [1, "card-chevron"], [1, "card-details"], [1, "favorite-btn", 3, "click", "title"], [1, "status-badge", "text"], [1, "status-badge", "file"], [1, "detail-section"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "card-actions"], ["kendoButton", "", "title", "Stop current component and run this one", 3, "themeColor"], [1, "fa-solid", "fa-stop"], ["kendoButton", "", "title", "Stop current component and run this one", 3, "click", "themeColor"], [1, "fa-solid", "fa-play"], [3, "size"], [1, "component-runtime"], [1, "run-empty-state"], [1, "editor-tabs", 3, "tabSelect"], [3, "title", "selected"], ["kendoTabContent", ""], [1, "error-display"], [3, "component"], [1, "error-container"], [1, "error-header"], [1, "fa-solid", "fa-exclamation-triangle"], ["title", "Copy error details", 1, "copy-button", 3, "click"], [1, "fa-solid", "fa-copy"], [1, "error-intro"], [1, "error-details"], [1, "technical-details"], [1, "error-help"], [1, "error-actions"], ["kendoButton", "", 3, "click"], [1, "fa-solid", "fa-rotate"], [3, "componentEvent", "openEntityRecord", "component"], [1, "fa-solid", "fa-play-circle", "fa-3x"], ["kendoButton", "", 3, "click", "themeColor", "size"], [1, "tab-content", "spec-tab"], [1, "editor-header"], [1, "fa-solid", "fa-code"], [1, "editor-actions"], [1, "editor-wrapper"], [2, "height", "100%", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [1, "fa-solid", "fa-check"], [1, "tab-content", "code-tab"], [1, "fa-solid", "fa-file-code"], [1, "code-sections"], [3, "title", "expanded"], ["kendoPanelBarContent", ""], [2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [1, "fa-solid", "fa-rocket", "fa-3x"]], template: function ComponentStudioDashboardComponent_Template(rf, ctx) { if (rf & 1) {
1844
+ } }, features: [i0.ɵɵInheritDefinitionFeature], decls: 52, vars: 24, consts: [["fileInput", ""], [1, "component-studio"], [1, "dashboard-header"], [1, "header-content"], [1, "fa-solid", "fa-puzzle-piece"], [1, "header-subtitle"], [1, "header-buttons"], ["kendoButton", "", 3, "themeColor"], [1, "import-dropdown"], ["kendoButton", "", 3, "click", "themeColor"], [1, "fa-solid", "fa-file-import"], [1, "fa-solid", "fa-chevron-down", 2, "margin-left", "5px", "font-size", "10px"], [1, "dropdown-menu"], [1, "export-dropdown", 3, "open"], ["kendoButton", "", 3, "click", "disabled"], [1, "fa-solid", "fa-sync"], ["type", "file", "accept", ".json", 2, "display", "none", 3, "change"], ["orientation", "horizontal"], [3, "min", "max", "size"], [1, "components-panel"], [1, "panel-header"], [1, "panel-header-top"], [1, "header-actions"], ["title", "Show only favorites", 1, "favorites-toggle", 3, "click"], ["title", "Toggle deprecated components", 1, "deprecated-toggle", 3, "click"], [1, "component-count"], [1, "category-filters"], [1, "filter-pills"], [1, "search-box"], ["placeholder", "Search components...", 3, "valueChange", "value", "clearButton"], ["kendoTextBoxPrefixTemplate", ""], [1, "components-list"], [1, "loading-message"], [1, "empty-message"], [3, "min"], [1, "component-display"], [1, "empty-state"], [1, "fa-solid", "fa-eye"], [1, "fa-solid", "fa-eye-slash"], [1, "dropdown-item", 3, "click"], [1, "fa-solid", "fa-file"], [1, "fa-solid", "fa-keyboard"], [1, "export-dropdown"], [1, "fa-solid", "fa-file-export"], [1, "fa-solid", "fa-save"], [1, "fa-solid", "fa-clipboard"], [1, "fa-solid", "fa-star"], [1, "fa-regular", "fa-star"], [1, "fa-solid", "fa-exclamation-triangle"], [1, "fa-regular", "fa-exclamation-triangle"], [1, "category-pill", 3, "active", "--pill-color"], [1, "more-button"], [1, "clear-filters-button"], [1, "category-pill", 3, "click"], [1, "pill-name"], [1, "pill-count"], [1, "more-button", 3, "click"], [1, "fa-solid", "fa-chevron-up"], [1, "fa-solid", "fa-chevron-down"], [1, "clear-filters-button", 3, "click"], [1, "fa-solid", "fa-times"], [1, "fa-solid", "fa-search"], [1, "fa-solid", "fa-spinner", "fa-spin"], [1, "fa-solid", "fa-info-circle"], [1, "component-card", 3, "expanded", "running", "file-loaded"], [1, "component-card"], [1, "card-header", 3, "click"], [1, "card-icon"], [1, "fa-solid", 3, "ngClass"], [1, "favorite-btn", 3, "is-favorite", "title"], [1, "card-info"], [1, "card-name"], [1, "file-badge", 3, "title"], [1, "card-meta"], [1, "card-type"], [1, "card-version"], [1, "status-badge", "deprecated"], [1, "status-badge", "published"], [1, "status-badge", "draft"], [1, "card-namespace"], [1, "namespace-chip", 3, "title"], [1, "fa-solid", "fa-folder-tree"], [1, "card-chevron"], [1, "card-details"], [1, "favorite-btn", 3, "click", "title"], [1, "status-badge", "text"], [1, "status-badge", "file"], [1, "detail-section"], [1, "info-grid"], [1, "info-item"], [1, "info-label"], [1, "info-value"], [1, "card-actions"], ["kendoButton", "", "title", "Stop current component and run this one", 3, "themeColor"], [1, "fa-solid", "fa-stop"], ["kendoButton", "", "title", "Stop current component and run this one", 3, "click", "themeColor"], [1, "fa-solid", "fa-play"], [3, "size"], [1, "component-runtime"], [1, "run-empty-state"], [1, "editor-tabs", 3, "tabSelect"], [3, "title", "selected"], ["kendoTabContent", ""], [1, "error-display"], [3, "component"], [1, "error-container"], [1, "error-header"], ["title", "Copy error details", 1, "copy-button", 3, "click"], [1, "fa-solid", "fa-copy"], [1, "error-intro"], [1, "error-details"], [1, "technical-details"], [1, "error-help"], [1, "error-actions"], ["kendoButton", "", 3, "click"], [1, "fa-solid", "fa-rotate"], [3, "componentEvent", "openEntityRecord", "component"], [1, "fa-solid", "fa-play-circle", "fa-3x"], ["kendoButton", "", 3, "click", "themeColor", "size"], [1, "tab-content", "spec-tab"], [1, "editor-header"], [1, "fa-solid", "fa-code"], [1, "editor-actions"], [1, "editor-wrapper"], [2, "height", "100%", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [1, "fa-solid", "fa-check"], [1, "tab-content", "code-tab"], [1, "fa-solid", "fa-file-code"], [1, "code-sections"], [3, "title", "expanded"], ["kendoPanelBarContent", ""], [2, "height", "400px", "width", "100%", 3, "ngModelChange", "ngModel", "language", "readonly"], [1, "fa-solid", "fa-rocket", "fa-3x"]], template: function ComponentStudioDashboardComponent_Template(rf, ctx) { if (rf & 1) {
1817
1845
  const _r1 = i0.ɵɵgetCurrentView();
1818
1846
  i0.ɵɵelementStart(0, "div", 1)(1, "div", 2)(2, "div", 3)(3, "div")(4, "h1");
1819
1847
  i0.ɵɵelement(5, "i", 4);
@@ -1848,21 +1876,25 @@ ${this.currentError.technicalDetails ? '\nTechnical Details:\n' + JSON.stringify
1848
1876
  i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Template_button_click_31_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleShowOnlyFavorites()); });
1849
1877
  i0.ɵɵtemplate(32, ComponentStudioDashboardComponent_Conditional_32_Template, 2, 0)(33, ComponentStudioDashboardComponent_Conditional_33_Template, 2, 0);
1850
1878
  i0.ɵɵelementEnd();
1851
- i0.ɵɵelementStart(34, "span", 24);
1852
- i0.ɵɵtext(35);
1879
+ i0.ɵɵelementStart(34, "button", 24);
1880
+ i0.ɵɵlistener("click", function ComponentStudioDashboardComponent_Template_button_click_34_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.toggleShowDeprecatedComponents()); });
1881
+ i0.ɵɵtemplate(35, ComponentStudioDashboardComponent_Conditional_35_Template, 2, 0)(36, ComponentStudioDashboardComponent_Conditional_36_Template, 2, 0);
1882
+ i0.ɵɵelementEnd();
1883
+ i0.ɵɵelementStart(37, "span", 25);
1884
+ i0.ɵɵtext(38);
1853
1885
  i0.ɵɵelementEnd()()();
1854
- i0.ɵɵelementStart(36, "div", 25);
1855
- i0.ɵɵtemplate(37, ComponentStudioDashboardComponent_Conditional_37_Template, 5, 2, "div", 26);
1886
+ i0.ɵɵelementStart(39, "div", 26);
1887
+ i0.ɵɵtemplate(40, ComponentStudioDashboardComponent_Conditional_40_Template, 5, 2, "div", 27);
1856
1888
  i0.ɵɵelementEnd();
1857
- i0.ɵɵelementStart(38, "div", 27)(39, "kendo-textbox", 28);
1858
- i0.ɵɵlistener("valueChange", function ComponentStudioDashboardComponent_Template_kendo_textbox_valueChange_39_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
1859
- i0.ɵɵtemplate(40, ComponentStudioDashboardComponent_ng_template_40_Template, 1, 0, "ng-template", 29);
1889
+ i0.ɵɵelementStart(41, "div", 28)(42, "kendo-textbox", 29);
1890
+ i0.ɵɵlistener("valueChange", function ComponentStudioDashboardComponent_Template_kendo_textbox_valueChange_42_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.onSearchChange($event)); });
1891
+ i0.ɵɵtemplate(43, ComponentStudioDashboardComponent_ng_template_43_Template, 1, 0, "ng-template", 30);
1860
1892
  i0.ɵɵelementEnd()()();
1861
- i0.ɵɵelementStart(41, "div", 30);
1862
- i0.ɵɵtemplate(42, ComponentStudioDashboardComponent_Conditional_42_Template, 3, 0, "div", 31)(43, ComponentStudioDashboardComponent_Conditional_43_Template, 6, 0, "div", 32)(44, ComponentStudioDashboardComponent_Conditional_44_Template, 2, 0);
1893
+ i0.ɵɵelementStart(44, "div", 31);
1894
+ i0.ɵɵtemplate(45, ComponentStudioDashboardComponent_Conditional_45_Template, 3, 0, "div", 32)(46, ComponentStudioDashboardComponent_Conditional_46_Template, 6, 0, "div", 33)(47, ComponentStudioDashboardComponent_Conditional_47_Template, 2, 0);
1863
1895
  i0.ɵɵelementEnd()()();
1864
- i0.ɵɵelementStart(45, "kendo-splitter-pane", 33)(46, "div", 34);
1865
- i0.ɵɵtemplate(47, ComponentStudioDashboardComponent_Conditional_47_Template, 13, 8)(48, ComponentStudioDashboardComponent_Conditional_48_Template, 6, 0, "div", 35);
1896
+ i0.ɵɵelementStart(48, "kendo-splitter-pane", 34)(49, "div", 35);
1897
+ i0.ɵɵtemplate(50, ComponentStudioDashboardComponent_Conditional_50_Template, 13, 8)(51, ComponentStudioDashboardComponent_Conditional_51_Template, 6, 0, "div", 36);
1866
1898
  i0.ɵɵelementEnd()()()();
1867
1899
  } if (rf & 2) {
1868
1900
  i0.ɵɵadvance(10);
@@ -1883,19 +1915,23 @@ ${this.currentError.technicalDetails ? '\nTechnical Details:\n' + JSON.stringify
1883
1915
  i0.ɵɵclassProp("active", ctx.showOnlyFavorites);
1884
1916
  i0.ɵɵadvance();
1885
1917
  i0.ɵɵconditional(ctx.showOnlyFavorites ? 32 : 33);
1918
+ i0.ɵɵadvance(2);
1919
+ i0.ɵɵclassProp("active", ctx.showDeprecatedComponents);
1920
+ i0.ɵɵadvance();
1921
+ i0.ɵɵconditional(ctx.showDeprecatedComponents ? 35 : 36);
1886
1922
  i0.ɵɵadvance(3);
1887
1923
  i0.ɵɵtextInterpolate2("", ctx.filteredComponents.length, " of ", ctx.allComponents.length, "");
1888
1924
  i0.ɵɵadvance(2);
1889
- i0.ɵɵconditional(ctx.availableCategories.length > 0 ? 37 : -1);
1925
+ i0.ɵɵconditional(ctx.availableCategories.length > 0 ? 40 : -1);
1890
1926
  i0.ɵɵadvance(2);
1891
1927
  i0.ɵɵproperty("value", ctx.searchQuery)("clearButton", true);
1892
1928
  i0.ɵɵadvance(3);
1893
- i0.ɵɵconditional(ctx.isLoading ? 42 : ctx.filteredComponents.length === 0 ? 43 : 44);
1929
+ i0.ɵɵconditional(ctx.isLoading ? 45 : ctx.filteredComponents.length === 0 ? 46 : 47);
1894
1930
  i0.ɵɵadvance(3);
1895
1931
  i0.ɵɵproperty("min", "400px");
1896
1932
  i0.ɵɵadvance(2);
1897
- i0.ɵɵconditional(ctx.selectedComponent ? 47 : 48);
1898
- } }, dependencies: [i2.NgClass, i3.NgControlStatus, i3.NgModel, i4.TextBoxComponent, i4.TextBoxPrefixTemplateDirective, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.SplitterComponent, i5.SplitterPaneComponent, i5.TabStripComponent, i5.TabStripTabComponent, i5.TabContentDirective, i6.CodeEditorComponent, i7.ButtonComponent, i8.MJReactComponent, i2.DatePipe], styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-studio[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100vh;\n background: #f8f9fa;\n overflow: hidden;\n position: relative;\n\n .dashboard-header {\n background: white;\n border-bottom: 1px solid #dee2e6;\n padding: 16px 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n \n .header-content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-buttons {\n display: flex;\n gap: 8px;\n \n .import-dropdown, .export-dropdown {\n position: relative;\n \n .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 180px;\n \n .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: 14px;\n color: #212529;\n transition: background-color 0.2s;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:not(:last-child) {\n border-bottom: 1px solid #e9ecef;\n }\n \n i {\n width: 16px;\n text-align: center;\n color: #6366f1;\n }\n }\n }\n }\n }\n \n h1 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #212529;\n display: flex;\n align-items: center;\n gap: 12px;\n \n i {\n color: #6366f1;\n }\n }\n \n .header-subtitle {\n margin: 4px 0 0 0;\n font-size: 13px;\n color: #6c757d;\n font-weight: normal;\n }\n }\n }\n\n kendo-splitter {\n flex: 1;\n background: white;\n display: flex;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n \n ::ng-deep .k-pane {\n overflow: hidden;\n height: 100%;\n }\n }\n\n .components-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n \n .panel-header {\n padding: 20px;\n background: white;\n border-bottom: 1px solid #dee2e6;\n \n .panel-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #212529;\n }\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n \n .favorites-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n \n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n \n &.active {\n background: #fff3cd;\n border-color: #ffc107;\n color: #856404;\n \n i {\n color: #ffc107;\n }\n }\n \n i {\n font-size: 14px;\n }\n }\n \n .component-count {\n font-size: 13px;\n color: #6c757d;\n background: #f8f9fa;\n padding: 4px 10px;\n border-radius: 12px;\n font-weight: 500;\n }\n }\n }\n \n .category-filters {\n margin-bottom: 16px;\n \n .filter-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n \n .category-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 2px solid #e9ecef;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n &.active {\n border-color: var(--pill-color);\n background: var(--pill-color);\n color: white;\n \n .pill-count {\n background: rgba(255, 255, 255, 0.3);\n color: white;\n }\n }\n \n .pill-name {\n font-weight: 500;\n }\n \n .pill-count {\n background: #f1f3f5;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n min-width: 20px;\n text-align: center;\n }\n }\n \n .more-button,\n .clear-filters-button {\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n \n i {\n font-size: 11px;\n margin-right: 4px;\n }\n }\n \n .clear-filters-button {\n background: #fee2e2;\n border-color: #fca5a5;\n color: #dc2626;\n \n &:hover {\n background: #fca5a5;\n color: white;\n }\n }\n }\n }\n \n .search-box {\n kendo-textbox {\n width: 100%;\n }\n }\n }\n \n .components-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px;\n \n .loading-message,\n .empty-message {\n padding: 48px 24px;\n text-align: center;\n color: #6c757d;\n font-size: 14px;\n \n i {\n margin-right: 8px;\n }\n }\n \n .component-card {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 8px;\n margin-bottom: 12px;\n transition: all 0.2s ease;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n border-color: #6366f1;\n }\n \n &.running {\n border-color: #10b981;\n box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);\n background: linear-gradient(to right, rgba(16, 185, 129, 0.03) 0%, white 100%);\n \n .card-header {\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n background: #10b981;\n }\n }\n }\n \n &.file-loaded {\n background: linear-gradient(135deg, #f0f8ff 0%, white 100%);\n border-style: dashed;\n border-color: #3b82f6;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15);\n }\n \n &.expanded {\n border-style: solid;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);\n }\n }\n \n .card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n &:hover {\n background: #f8f9fa;\n }\n \n .card-icon {\n font-size: 24px;\n margin-right: 16px;\n width: 32px;\n text-align: center;\n flex-shrink: 0;\n }\n \n .favorite-btn {\n position: absolute;\n top: 12px;\n right: 48px; // Leave room for chevron\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n transform: scale(1.1);\n }\n \n &.is-favorite {\n color: #ffc107;\n border-color: #ffc107;\n background: #fff3cd;\n \n &:hover {\n background: #ffe69c;\n }\n }\n \n i {\n font-size: 14px;\n }\n }\n \n .card-info {\n flex: 1;\n min-width: 0;\n \n .card-name {\n font-size: 15px;\n font-weight: 600;\n color: #212529;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n gap: 8px;\n \n .file-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n background: #e0f2fe;\n color: #0369a1;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n \n i {\n font-size: 10px;\n }\n }\n }\n \n .card-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: #6c757d;\n \n .card-type {\n font-weight: 500;\n }\n \n .card-version {\n color: #868e96;\n }\n \n .status-badge {\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n \n &.published {\n background: #d1fae5;\n color: #065f46;\n }\n \n &.draft {\n background: #fef3c7;\n color: #92400e;\n }\n \n &.file {\n background: #e0f2fe;\n color: #0369a1;\n }\n \n &.text {\n background: #f3e8ff;\n color: #6b21a8;\n }\n }\n }\n \n .card-namespace {\n margin-top: 8px;\n \n .namespace-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: white;\n \n i {\n font-size: 11px;\n opacity: 0.9;\n }\n }\n }\n }\n \n .card-chevron {\n color: #6c757d;\n font-size: 12px;\n margin-left: 12px;\n transition: transform 0.2s ease;\n }\n }\n \n .card-details {\n padding: 0 16px 16px 16px;\n border-top: 1px solid #e9ecef;\n animation: slideDown 0.2s ease;\n \n .detail-section {\n margin-top: 16px;\n \n label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n }\n \n p {\n margin: 0;\n font-size: 13px;\n color: #495057;\n line-height: 1.5;\n }\n \n .info-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n \n .info-item {\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-size: 13px;\n \n .info-label {\n font-weight: 500;\n color: #6c757d;\n min-width: 50px;\n }\n \n .info-value {\n color: #212529;\n }\n }\n }\n }\n \n .card-actions {\n margin-top: 16px;\n display: flex;\n gap: 8px;\n \n button {\n flex: 1;\n }\n }\n }\n }\n }\n }\n\n .component-display {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow: hidden;\n \n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #868e96;\n padding: 48px;\n text-align: center;\n \n i {\n color: #dee2e6;\n margin-bottom: 24px;\n }\n \n h2 {\n margin: 0 0 12px 0;\n font-size: 24px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n max-width: 400px;\n }\n }\n \n .error-display {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: #f8f9fa;\n \n .error-container {\n width: 100%;\n max-width: 600px;\n background: white;\n border: 2px solid #dc3545;\n border-radius: 8px;\n padding: 24px;\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.15);\n \n .error-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n color: #dc3545;\n position: relative;\n \n i {\n font-size: 24px;\n }\n \n h3 {\n margin: 0;\n font-size: 20px;\n flex: 1;\n }\n \n .copy-button {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 6px 10px;\n cursor: pointer;\n color: #6c757d;\n transition: all 0.2s;\n \n &:hover {\n background: #e9ecef;\n color: #495057;\n }\n \n i {\n font-size: 14px;\n }\n }\n }\n \n .error-intro {\n color: #495057;\n margin-bottom: 20px;\n font-size: 14px;\n }\n \n .error-details {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 13px;\n \n .technical-details {\n margin-top: 12px;\n \n summary {\n cursor: pointer;\n color: #0066cc;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n \n &:hover {\n text-decoration: underline;\n }\n }\n \n pre {\n margin-top: 8px;\n white-space: pre-wrap;\n word-break: break-word;\n font-size: 11px;\n color: #495057;\n max-height: 200px;\n overflow-y: auto;\n }\n }\n }\n \n .error-help {\n background: #e7f3ff;\n border: 1px solid #b3d9ff;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-size: 13px;\n \n strong {\n display: block;\n margin-bottom: 8px;\n font-size: 14px;\n color: #0066cc;\n }\n \n ol {\n margin: 0;\n padding-left: 20px;\n \n li {\n margin-bottom: 4px;\n color: #495057;\n }\n }\n }\n \n .error-actions {\n display: flex;\n gap: 12px;\n \n button {\n min-width: 100px;\n }\n }\n }\n }\n \n mj-react-component {\n flex: 1;\n width: 100%;\n height: 100%;\n display: block;\n overflow-y: auto;\n overflow-x: hidden;\n }\n \n // Component and editor splitter\n .component-editor-splitter {\n height: 100%;\n overflow: hidden;\n \n ::ng-deep .k-splitter-bar {\n background: #6366f1; // Same blue as Import button\n width: 6px; // Make it slightly wider for visibility\n \n &:hover {\n background: #4f52d9; // Darker blue on hover\n }\n \n .k-resize-handle {\n background-color: rgba(255, 255, 255, 0.3);\n }\n }\n \n ::ng-deep .k-pane {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n }\n \n // Component runtime area\n .component-runtime {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow-y: auto;\n overflow-x: hidden;\n \n .run-empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n text-align: center;\n \n i {\n color: #10b981;\n margin-bottom: 24px;\n }\n \n h3 {\n margin: 0 0 12px 0;\n font-size: 20px;\n font-weight: 600;\n color: #212529;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n }\n }\n }\n \n // Editor tabs on the right\n .editor-tabs {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n ::ng-deep .k-tabstrip-items-wrapper {\n background: #f8f9fa;\n border-bottom: 2px solid #dee2e6;\n flex-shrink: 0;\n }\n \n ::ng-deep .k-tabstrip-content {\n flex: 1;\n padding: 0;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n \n ::ng-deep .k-item.k-tabstrip-item {\n font-weight: 500;\n \n &.k-active {\n background: white;\n border-bottom-color: white;\n }\n }\n }\n \n .tab-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n &.spec-tab, &.code-tab {\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n \n .editor-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n min-width: 0; // Fix width issue\n \n h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 1; // Allow title to shrink\n min-width: 0; // Prevent overflow\n \n i {\n color: #6366f1;\n flex-shrink: 0; // Keep icon from shrinking\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0; // Prevent buttons from shrinking\n \n button {\n min-width: auto;\n padding: 4px 12px;\n font-size: 13px;\n white-space: nowrap; // Prevent button text wrapping\n }\n }\n }\n \n .editor-wrapper {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n min-height: 0;\n position: relative;\n }\n \n ::ng-deep .monaco-editor {\n border: 1px solid #dee2e6;\n }\n }\n \n .code-sections {\n height: 100%;\n \n ::ng-deep .k-panelbar-item-header {\n background: #f8f9fa;\n font-weight: 500;\n font-size: 14px;\n }\n \n ::ng-deep .k-panelbar-content {\n padding: 0;\n }\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Removed[_ngcontent-%COMP%] tree[_ngcontent-%COMP%] view[_ngcontent-%COMP%] styles[_ngcontent-%COMP%] -[_ngcontent-%COMP%] using[_ngcontent-%COMP%] modern[_ngcontent-%COMP%] category[_ngcontent-%COMP%] filters[_ngcontent-%COMP%] instead\n\n@keyframes[_ngcontent-%COMP%] slideDown[_ngcontent-%COMP%] {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}"] });
1933
+ i0.ɵɵconditional(ctx.selectedComponent ? 50 : 51);
1934
+ } }, dependencies: [i2.NgClass, i3.NgControlStatus, i3.NgModel, i4.TextBoxComponent, i4.TextBoxPrefixTemplateDirective, i5.PanelBarComponent, i5.PanelBarItemComponent, i5.PanelBarContentDirective, i5.SplitterComponent, i5.SplitterPaneComponent, i5.TabStripComponent, i5.TabStripTabComponent, i5.TabContentDirective, i6.CodeEditorComponent, i7.ButtonComponent, i8.MJReactComponent, i2.DatePipe], styles: ["[_nghost-%COMP%] {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-studio[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n height: 100vh;\n background: #f8f9fa;\n overflow: hidden;\n position: relative;\n\n .dashboard-header {\n background: white;\n border-bottom: 1px solid #dee2e6;\n padding: 16px 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n \n .header-content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-buttons {\n display: flex;\n gap: 8px;\n \n .import-dropdown, .export-dropdown {\n position: relative;\n \n .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 180px;\n \n .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: 14px;\n color: #212529;\n transition: background-color 0.2s;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:not(:last-child) {\n border-bottom: 1px solid #e9ecef;\n }\n \n i {\n width: 16px;\n text-align: center;\n color: #6366f1;\n }\n }\n }\n }\n }\n \n h1 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #212529;\n display: flex;\n align-items: center;\n gap: 12px;\n \n i {\n color: #6366f1;\n }\n }\n \n .header-subtitle {\n margin: 4px 0 0 0;\n font-size: 13px;\n color: #6c757d;\n font-weight: normal;\n }\n }\n }\n\n kendo-splitter {\n flex: 1;\n background: white;\n display: flex;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n \n ::ng-deep .k-pane {\n overflow: hidden;\n height: 100%;\n }\n }\n\n .components-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n \n .panel-header {\n padding: 20px;\n background: white;\n border-bottom: 1px solid #dee2e6;\n \n .panel-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #212529;\n }\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n \n .favorites-toggle,\n .deprecated-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n\n i {\n font-size: 14px;\n }\n }\n\n .favorites-toggle.active {\n background: #fff3cd;\n border-color: #ffc107;\n color: #856404;\n\n i {\n color: #ffc107;\n }\n }\n\n .deprecated-toggle.active {\n background: #ffe4e1;\n border-color: #ff6b6b;\n color: #c92a2a;\n\n i {\n color: #ff6b6b;\n }\n }\n \n .component-count {\n font-size: 13px;\n color: #6c757d;\n background: #f8f9fa;\n padding: 4px 10px;\n border-radius: 12px;\n font-weight: 500;\n }\n }\n }\n \n .category-filters {\n margin-bottom: 16px;\n \n .filter-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n \n .category-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 2px solid #e9ecef;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n &.active {\n border-color: var(--pill-color);\n background: var(--pill-color);\n color: white;\n \n .pill-count {\n background: rgba(255, 255, 255, 0.3);\n color: white;\n }\n }\n \n .pill-name {\n font-weight: 500;\n }\n \n .pill-count {\n background: #f1f3f5;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n min-width: 20px;\n text-align: center;\n }\n }\n \n .more-button,\n .clear-filters-button {\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n \n i {\n font-size: 11px;\n margin-right: 4px;\n }\n }\n \n .clear-filters-button {\n background: #fee2e2;\n border-color: #fca5a5;\n color: #dc2626;\n \n &:hover {\n background: #fca5a5;\n color: white;\n }\n }\n }\n }\n \n .search-box {\n kendo-textbox {\n width: 100%;\n }\n }\n }\n \n .components-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px;\n \n .loading-message,\n .empty-message {\n padding: 48px 24px;\n text-align: center;\n color: #6c757d;\n font-size: 14px;\n \n i {\n margin-right: 8px;\n }\n }\n \n .component-card {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 8px;\n margin-bottom: 12px;\n transition: all 0.2s ease;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n border-color: #6366f1;\n }\n \n &.running {\n border-color: #10b981;\n box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);\n background: linear-gradient(to right, rgba(16, 185, 129, 0.03) 0%, white 100%);\n \n .card-header {\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n background: #10b981;\n }\n }\n }\n \n &.file-loaded {\n background: linear-gradient(135deg, #f0f8ff 0%, white 100%);\n border-style: dashed;\n border-color: #3b82f6;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15);\n }\n \n &.expanded {\n border-style: solid;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);\n }\n }\n \n .card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n &:hover {\n background: #f8f9fa;\n }\n \n .card-icon {\n font-size: 24px;\n margin-right: 16px;\n width: 32px;\n text-align: center;\n flex-shrink: 0;\n }\n \n .favorite-btn {\n position: absolute;\n top: 12px;\n right: 48px; // Leave room for chevron\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n transform: scale(1.1);\n }\n \n &.is-favorite {\n color: #ffc107;\n border-color: #ffc107;\n background: #fff3cd;\n \n &:hover {\n background: #ffe69c;\n }\n }\n \n i {\n font-size: 14px;\n }\n }\n \n .card-info {\n flex: 1;\n min-width: 0;\n \n .card-name {\n font-size: 15px;\n font-weight: 600;\n color: #212529;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n gap: 8px;\n \n .file-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n background: #e0f2fe;\n color: #0369a1;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n \n i {\n font-size: 10px;\n }\n }\n }\n \n .card-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: #6c757d;\n \n .card-type {\n font-weight: 500;\n }\n \n .card-version {\n color: #868e96;\n }\n \n .status-badge {\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n \n &.published {\n background: #d1fae5;\n color: #065f46;\n }\n \n &.draft {\n background: #fef3c7;\n color: #92400e;\n }\n\n &.deprecated {\n background: #ffe4e1;\n color: #c92a2a;\n border: 1px solid #ff6b6b;\n }\n\n &.file {\n background: #e0f2fe;\n color: #0369a1;\n }\n \n &.text {\n background: #f3e8ff;\n color: #6b21a8;\n }\n }\n }\n \n .card-namespace {\n margin-top: 8px;\n \n .namespace-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: white;\n \n i {\n font-size: 11px;\n opacity: 0.9;\n }\n }\n }\n }\n \n .card-chevron {\n color: #6c757d;\n font-size: 12px;\n margin-left: 12px;\n transition: transform 0.2s ease;\n }\n }\n \n .card-details {\n padding: 0 16px 16px 16px;\n border-top: 1px solid #e9ecef;\n animation: slideDown 0.2s ease;\n \n .detail-section {\n margin-top: 16px;\n \n label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n }\n \n p {\n margin: 0;\n font-size: 13px;\n color: #495057;\n line-height: 1.5;\n }\n \n .info-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n \n .info-item {\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-size: 13px;\n \n .info-label {\n font-weight: 500;\n color: #6c757d;\n min-width: 50px;\n }\n \n .info-value {\n color: #212529;\n }\n }\n }\n }\n \n .card-actions {\n margin-top: 16px;\n display: flex;\n gap: 8px;\n \n button {\n flex: 1;\n }\n }\n }\n }\n }\n }\n\n .component-display {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow: hidden;\n \n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #868e96;\n padding: 48px;\n text-align: center;\n \n i {\n color: #dee2e6;\n margin-bottom: 24px;\n }\n \n h2 {\n margin: 0 0 12px 0;\n font-size: 24px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n max-width: 400px;\n }\n }\n \n .error-display {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: #f8f9fa;\n \n .error-container {\n width: 100%;\n max-width: 600px;\n background: white;\n border: 2px solid #dc3545;\n border-radius: 8px;\n padding: 24px;\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.15);\n \n .error-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n color: #dc3545;\n position: relative;\n \n i {\n font-size: 24px;\n }\n \n h3 {\n margin: 0;\n font-size: 20px;\n flex: 1;\n }\n \n .copy-button {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 6px 10px;\n cursor: pointer;\n color: #6c757d;\n transition: all 0.2s;\n \n &:hover {\n background: #e9ecef;\n color: #495057;\n }\n \n i {\n font-size: 14px;\n }\n }\n }\n \n .error-intro {\n color: #495057;\n margin-bottom: 20px;\n font-size: 14px;\n }\n \n .error-details {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 13px;\n \n .technical-details {\n margin-top: 12px;\n \n summary {\n cursor: pointer;\n color: #0066cc;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n \n &:hover {\n text-decoration: underline;\n }\n }\n \n pre {\n margin-top: 8px;\n white-space: pre-wrap;\n word-break: break-word;\n font-size: 11px;\n color: #495057;\n max-height: 200px;\n overflow-y: auto;\n }\n }\n }\n \n .error-help {\n background: #e7f3ff;\n border: 1px solid #b3d9ff;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-size: 13px;\n \n strong {\n display: block;\n margin-bottom: 8px;\n font-size: 14px;\n color: #0066cc;\n }\n \n ol {\n margin: 0;\n padding-left: 20px;\n \n li {\n margin-bottom: 4px;\n color: #495057;\n }\n }\n }\n \n .error-actions {\n display: flex;\n gap: 12px;\n \n button {\n min-width: 100px;\n }\n }\n }\n }\n \n mj-react-component {\n flex: 1;\n width: 100%;\n height: 100%;\n display: block;\n overflow-y: auto;\n overflow-x: hidden;\n }\n \n // Component and editor splitter\n .component-editor-splitter {\n height: 100%;\n overflow: hidden;\n \n ::ng-deep .k-splitter-bar {\n background: #6366f1; // Same blue as Import button\n width: 6px; // Make it slightly wider for visibility\n \n &:hover {\n background: #4f52d9; // Darker blue on hover\n }\n \n .k-resize-handle {\n background-color: rgba(255, 255, 255, 0.3);\n }\n }\n \n ::ng-deep .k-pane {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n }\n \n // Component runtime area\n .component-runtime {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow-y: auto;\n overflow-x: hidden;\n \n .run-empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n text-align: center;\n \n i {\n color: #10b981;\n margin-bottom: 24px;\n }\n \n h3 {\n margin: 0 0 12px 0;\n font-size: 20px;\n font-weight: 600;\n color: #212529;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n }\n }\n }\n \n // Editor tabs on the right\n .editor-tabs {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n ::ng-deep .k-tabstrip-items-wrapper {\n background: #f8f9fa;\n border-bottom: 2px solid #dee2e6;\n flex-shrink: 0;\n }\n \n ::ng-deep .k-tabstrip-content {\n flex: 1;\n padding: 0;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n \n ::ng-deep .k-item.k-tabstrip-item {\n font-weight: 500;\n \n &.k-active {\n background: white;\n border-bottom-color: white;\n }\n }\n }\n \n .tab-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n &.spec-tab, &.code-tab {\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n \n .editor-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n min-width: 0; // Fix width issue\n \n h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 1; // Allow title to shrink\n min-width: 0; // Prevent overflow\n \n i {\n color: #6366f1;\n flex-shrink: 0; // Keep icon from shrinking\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0; // Prevent buttons from shrinking\n \n button {\n min-width: auto;\n padding: 4px 12px;\n font-size: 13px;\n white-space: nowrap; // Prevent button text wrapping\n }\n }\n }\n \n .editor-wrapper {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n min-height: 0;\n position: relative;\n }\n \n ::ng-deep .monaco-editor {\n border: 1px solid #dee2e6;\n }\n }\n \n .code-sections {\n height: 100%;\n \n ::ng-deep .k-panelbar-item-header {\n background: #f8f9fa;\n font-weight: 500;\n font-size: 14px;\n }\n \n ::ng-deep .k-panelbar-content {\n padding: 0;\n }\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Removed[_ngcontent-%COMP%] tree[_ngcontent-%COMP%] view[_ngcontent-%COMP%] styles[_ngcontent-%COMP%] -[_ngcontent-%COMP%] using[_ngcontent-%COMP%] modern[_ngcontent-%COMP%] category[_ngcontent-%COMP%] filters[_ngcontent-%COMP%] instead\n\n@keyframes[_ngcontent-%COMP%] slideDown[_ngcontent-%COMP%] {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes _ngcontent-%COMP%_pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}"] });
1899
1935
  };
1900
1936
  ComponentStudioDashboardComponent = __decorate([
1901
1937
  RegisterClass(BaseDashboard, 'ComponentStudioDashboard')
@@ -1903,7 +1939,7 @@ ComponentStudioDashboardComponent = __decorate([
1903
1939
  export { ComponentStudioDashboardComponent };
1904
1940
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ComponentStudioDashboardComponent, [{
1905
1941
  type: Component,
1906
- args: [{ selector: 'mj-component-studio-dashboard', template: "<div class=\"component-studio\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-content\">\n <div>\n <h1><i class=\"fa-solid fa-puzzle-piece\"></i> Component Studio</h1>\n <p class=\"header-subtitle\">Testing components without required custom properties</p>\n </div>\n <div class=\"header-buttons\">\n @if (selectedComponent && isRunning) {\n <button kendoButton (click)=\"toggleDetailsPane()\" [themeColor]=\"'base'\">\n @if (isDetailsPaneCollapsed) {\n <span class=\"fa-solid fa-eye\"></span> Show Details\n } @else {\n <span class=\"fa-solid fa-eye-slash\"></span> Hide Details\n }\n </button>\n }\n <div class=\"import-dropdown\" [class.open]=\"importDropdownOpen\">\n <button kendoButton (click)=\"toggleImportDropdown()\" [themeColor]=\"'info'\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n <span class=\"fa-solid fa-chevron-down\" style=\"margin-left: 5px; font-size: 10px;\"></span>\n </button>\n @if (importDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"importFromFile()\">\n <i class=\"fa-solid fa-file\"></i> Import from File\n </button>\n <button class=\"dropdown-item\" (click)=\"importFromText()\">\n <i class=\"fa-solid fa-keyboard\"></i> Import from Text\n </button>\n </div>\n }\n </div>\n @if (selectedComponent && isRunning) {\n <div class=\"export-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button kendoButton (click)=\"toggleExportDropdown()\" [themeColor]=\"'primary'\">\n <span class=\"fa-solid fa-file-export\"></span> Export\n <span class=\"fa-solid fa-chevron-down\" style=\"margin-left: 5px; font-size: 10px;\"></span>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"exportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> Export to Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"exportToFile()\">\n <i class=\"fa-solid fa-file\"></i> Export to File\n </button>\n <button class=\"dropdown-item\" (click)=\"exportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> Export to Clipboard\n </button>\n </div>\n }\n </div>\n }\n <button kendoButton (click)=\"refreshData()\" [disabled]=\"isLoading\">\n <span class=\"fa-solid fa-sync\"></span> Refresh\n </button>\n </div>\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"handleFileSelect($event)\" style=\"display: none;\" />\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <kendo-splitter orientation=\"horizontal\">\n <!-- Left Panel - Component List -->\n <kendo-splitter-pane [min]=\"'350px'\" [max]=\"'650px'\" [size]=\"'400px'\">\n <div class=\"components-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-header-top\">\n <h3>Components</h3>\n <div class=\"header-actions\">\n <button \n class=\"favorites-toggle\"\n [class.active]=\"showOnlyFavorites\"\n (click)=\"toggleShowOnlyFavorites()\"\n title=\"Show only favorites\">\n @if (showOnlyFavorites) {\n <i class=\"fa-solid fa-star\"></i> Favorites\n } @else {\n <i class=\"fa-regular fa-star\"></i> All\n }\n </button>\n <span class=\"component-count\">{{ filteredComponents.length }} of {{ allComponents.length }}</span>\n </div>\n </div>\n \n <!-- Modern Category Filter Pills -->\n <div class=\"category-filters\">\n @if (availableCategories.length > 0) {\n <div class=\"filter-pills\">\n @for (category of getVisibleCategories(); track category.name) {\n <button \n class=\"category-pill\"\n [class.active]=\"isCategorySelected(category.name)\"\n [style.--pill-color]=\"category.color\"\n (click)=\"toggleCategory(category.name)\">\n <span class=\"pill-name\">{{ category.name }}</span>\n <span class=\"pill-count\">{{ category.count }}</span>\n </button>\n }\n @if (availableCategories.length > 5) {\n <button \n class=\"more-button\"\n (click)=\"toggleShowAllCategories()\">\n @if (showAllCategories) {\n <i class=\"fa-solid fa-chevron-up\"></i> Less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> +{{ availableCategories.length - 5 }} more\n }\n </button>\n }\n @if (selectedCategories.size > 0) {\n <button \n class=\"clear-filters-button\"\n (click)=\"clearCategoryFilters()\">\n <i class=\"fa-solid fa-times\"></i> Clear\n </button>\n }\n </div>\n }\n </div>\n \n <div class=\"search-box\">\n <kendo-textbox \n [value]=\"searchQuery\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search components...\"\n [clearButton]=\"true\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n </div>\n \n <div class=\"components-list\">\n @if (isLoading) {\n <div class=\"loading-message\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading components...\n </div>\n } @else if (filteredComponents.length === 0) {\n <div class=\"empty-message\">\n <i class=\"fa-solid fa-info-circle\"></i> No components found without required custom properties.\n <br>\n <small>Components with optional custom props can be tested, but not those with required props.</small>\n </div>\n } @else {\n <!-- Component Cards -->\n @for (component of filteredComponents; track getComponentId(component)) {\n <div class=\"component-card\" \n [class.expanded]=\"expandedComponent && getComponentId(expandedComponent) === getComponentId(component)\"\n [class.running]=\"selectedComponent && getComponentId(selectedComponent) === getComponentId(component) && isRunning\"\n [class.file-loaded]=\"isFileLoadedComponent(component)\">\n \n <!-- Card Header - Always visible -->\n <div class=\"card-header\" (click)=\"toggleComponentExpansion(component)\">\n <div class=\"card-icon\" [style.color]=\"getComponentTypeColor(getComponentType(component))\">\n <i class=\"fa-solid\" [ngClass]=\"getComponentTypeIcon(getComponentType(component))\"></i>\n </div>\n @if (!isFileLoadedComponent(component)) {\n <button \n class=\"favorite-btn\"\n [class.is-favorite]=\"isFavorite(component)\"\n (click)=\"toggleFavorite(component, $event)\"\n [title]=\"isFavorite(component) ? 'Remove from favorites' : 'Add to favorites'\">\n @if (isFavorite(component)) {\n <i class=\"fa-solid fa-star\"></i>\n } @else {\n <i class=\"fa-regular fa-star\"></i>\n }\n </button>\n }\n <div class=\"card-info\">\n <div class=\"card-name\">\n {{ getComponentName(component) }}\n @if (isFileLoadedComponent(component)) {\n <span class=\"file-badge\" [title]=\"getComponentStatus(component) === 'Text' ? 'Imported from text input' : 'Loaded from ' + getComponentFilename(component)\">\n @if (getComponentStatus(component) === 'Text') {\n <i class=\"fa-solid fa-keyboard\"></i> Text Import\n } @else {\n <i class=\"fa-solid fa-file\"></i> {{ getComponentFilename(component) }}\n }\n </span>\n }\n </div>\n <div class=\"card-meta\">\n <span class=\"card-type\">{{ getComponentType(component) || 'Component' }}</span>\n <span class=\"card-version\">v{{ getComponentVersion(component) }}</span>\n @if (isFileLoadedComponent(component)) {\n @if (getComponentStatus(component) === 'Text') {\n <span class=\"status-badge text\">Text</span>\n } @else {\n <span class=\"status-badge file\">File</span>\n }\n } @else if (getComponentStatus(component) === 'Published') {\n <span class=\"status-badge published\">Published</span>\n } @else {\n <span class=\"status-badge draft\">Draft</span>\n }\n </div>\n <!-- Namespace chip with color coding -->\n <div class=\"card-namespace\">\n <span class=\"namespace-chip\" \n [style.background-color]=\"getNamespaceColor(getComponentNamespace(component))\"\n [title]=\"getComponentNamespace(component) || 'Uncategorized'\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n {{ formatNamespace(getComponentNamespace(component)) }}\n </span>\n </div>\n </div>\n <div class=\"card-chevron\">\n @if (expandedComponent && getComponentId(expandedComponent) === getComponentId(component)) {\n <i class=\"fa-solid fa-chevron-up\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i>\n }\n </div>\n </div>\n \n <!-- Card Details - Only visible when expanded -->\n @if (expandedComponent && getComponentId(expandedComponent) === getComponentId(component)) {\n <div class=\"card-details\">\n @if (getComponentDescription(component)) {\n <div class=\"detail-section\">\n <label>Description</label>\n <p>{{ getComponentDescription(component) }}</p>\n </div>\n }\n \n <div class=\"detail-section\">\n <label>Component Info</label>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Type:</span>\n <span class=\"info-value\">{{ getComponentType(component) || 'Unknown' }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Version:</span>\n <span class=\"info-value\">{{ getComponentVersion(component) }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Status:</span>\n <span class=\"info-value\">{{ getComponentStatus(component) || 'Draft' }}</span>\n </div>\n @if (isFileLoadedComponent(component)) {\n <div class=\"info-item\">\n <span class=\"info-label\">Loaded:</span>\n <span class=\"info-value\">{{ getComponentLoadedAt(component) | date:'short' }}</span>\n </div>\n } @else if (!isFileLoadedComponent(component) && getComponentUpdatedAt(component)) {\n <div class=\"info-item\">\n <span class=\"info-label\">Updated:</span>\n <span class=\"info-value\">{{ getComponentUpdatedAt(component) | date:'short' }}</span>\n </div>\n }\n </div>\n </div>\n \n <div class=\"card-actions\">\n @if (selectedComponent && getComponentId(selectedComponent) === getComponentId(component) && isRunning) {\n <button kendoButton \n [themeColor]=\"'error'\"\n (click)=\"stopComponent(); $event.stopPropagation()\">\n <span class=\"fa-solid fa-stop\"></span> Stop Component\n </button>\n } @else if (isRunning && selectedComponent && getComponentId(selectedComponent) !== getComponentId(component)) {\n <button kendoButton \n [themeColor]=\"'base'\"\n title=\"Stop current component and run this one\"\n (click)=\"runComponent(component); $event.stopPropagation()\">\n <span class=\"fa-solid fa-play\"></span> Switch to This Component\n </button>\n } @else {\n <button kendoButton \n [themeColor]=\"'primary'\"\n (click)=\"runComponent(component); $event.stopPropagation()\">\n <span class=\"fa-solid fa-play\"></span> Run Component\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n </kendo-splitter-pane>\n\n <!-- Right Panel - Component Display with Editor Splitter -->\n <kendo-splitter-pane [min]=\"'400px'\">\n <div class=\"component-display\">\n @if (selectedComponent) {\n <kendo-splitter orientation=\"horizontal\">\n <kendo-splitter-pane [size]=\"isDetailsPaneCollapsed ? '100%' : '50%'\">\n <div class=\"component-runtime\">\n @if (isRunning && componentSpec) {\n @if (currentError) {\n <!-- Error Display -->\n <div class=\"error-display\">\n <div class=\"error-container\">\n <div class=\"error-header\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>Component Error</h3>\n <button class=\"copy-button\" (click)=\"copyErrorToClipboard()\" title=\"Copy error details\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n \n <p class=\"error-intro\">\n The component could not be rendered due to the following error:\n </p>\n \n <div class=\"error-details\">\n <strong>Error Type:</strong> {{ currentError.type }}<br>\n <strong>Message:</strong> {{ currentError.message }}\n @if (currentError.technicalDetails) {\n <details class=\"technical-details\">\n <summary>Technical Details (click to expand)</summary>\n <pre>{{ formatTechnicalDetails(currentError.technicalDetails) }}</pre>\n </details>\n }\n </div>\n \n <div class=\"error-help\">\n <strong>What to do:</strong>\n <ol>\n <li>Check that the component code is valid JavaScript/React</li>\n <li>Ensure all required dependencies are available</li>\n <li>Review the technical details for specific error information</li>\n <li>Contact your system administrator if the issue persists</li>\n </ol>\n </div>\n \n <div class=\"error-actions\">\n <button kendoButton (click)=\"retryComponent()\">\n <span class=\"fa-solid fa-rotate\"></span> Retry\n </button>\n <button kendoButton (click)=\"stopComponent()\" [themeColor]=\"'error'\">\n <span class=\"fa-solid fa-stop\"></span> Stop\n </button>\n </div>\n </div>\n </div>\n } @else {\n <!-- React Component -->\n <mj-react-component \n [component]=\"componentSpec\"\n (componentEvent)=\"onComponentEvent($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-react-component>\n }\n } @else {\n <!-- Component Not Running State -->\n <div class=\"run-empty-state\">\n <i class=\"fa-solid fa-play-circle fa-3x\"></i>\n <h3>Component: {{ getComponentName(selectedComponent) }}</h3>\n <p>{{ getComponentDescription(selectedComponent) || 'No description available' }}</p>\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'large'\" (click)=\"runComponent(selectedComponent)\">\n <span class=\"fa-solid fa-play\"></span> Run Component\n </button>\n </div>\n }\n </div>\n\n </kendo-splitter-pane>\n <kendo-splitter-pane [size]=\"isDetailsPaneCollapsed ? '0px' : '50%'\">\n <div>\n <kendo-tabstrip (tabSelect)=\"onTabSelect($event)\" class=\"editor-tabs\">\n <!-- Spec Tab -->\n <kendo-tabstrip-tab [title]=\"'Spec'\" [selected]=\"activeTab === 0\">\n <ng-template kendoTabContent>\n <div class=\"tab-content spec-tab\">\n <div class=\"editor-header\">\n <h4><i class=\"fa-solid fa-code\"></i> Component Specification (JSON)</h4>\n <div class=\"editor-actions\">\n @if (isEditingSpec) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"applySpecChanges()\">\n <span class=\"fa-solid fa-check\"></span> Apply Changes\n </button>\n <button kendoButton (click)=\"initializeEditors()\">\n <span class=\"fa-solid fa-times\"></span> Cancel\n </button>\n }\n @if (isRunning) {\n <button kendoButton (click)=\"refreshComponent()\" [themeColor]=\"'info'\">\n <span class=\"fa-solid fa-sync\"></span> Refresh Component\n </button>\n }\n </div>\n </div>\n <div class=\"editor-wrapper\">\n <mj-code-editor\n [(ngModel)]=\"editableSpec\"\n (ngModelChange)=\"onSpecChange($event)\"\n [language]=\"'json'\"\n [readonly]=\"false\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n \n <!-- Code Tab -->\n <kendo-tabstrip-tab [title]=\"'Code'\" [selected]=\"activeTab === 1\">\n <ng-template kendoTabContent>\n <div class=\"tab-content code-tab\">\n <div class=\"editor-header\">\n <h4><i class=\"fa-solid fa-file-code\"></i> Component Code (JavaScript/React)</h4>\n <div class=\"editor-actions\">\n @if (isEditingCode) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"applyCodeChanges()\">\n <span class=\"fa-solid fa-check\"></span> Apply Changes\n </button>\n <button kendoButton (click)=\"initializeEditors()\">\n <span class=\"fa-solid fa-times\"></span> Cancel\n </button>\n }\n @if (isRunning) {\n <button kendoButton (click)=\"refreshComponent()\" [themeColor]=\"'info'\">\n <span class=\"fa-solid fa-sync\"></span> Refresh Component\n </button>\n }\n </div>\n </div>\n \n <!-- Always use panel bar for consistency and to show all components -->\n <div class=\"editor-wrapper\">\n <kendo-panelbar class=\"code-sections\">\n @for (section of getComponentCodeSections(); track section.title; let i = $index) {\n <kendo-panelbar-item [title]=\"section.title\" [expanded]=\"section.expanded\">\n <ng-template kendoPanelBarContent>\n <mj-code-editor\n [ngModel]=\"section.code\"\n (ngModelChange)=\"onCodeSectionChange($event, i)\"\n [language]=\"'javascript'\"\n [readonly]=\"false\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </ng-template>\n </kendo-panelbar-item>\n }\n </kendo-panelbar>\n </div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n\n @if (!isDetailsPaneCollapsed) {\n \n }\n } @else {\n <!-- Empty State when no component selected -->\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-rocket fa-3x\"></i>\n <h2>Ready to Test Components</h2>\n <p>Select a component from the list to view its details and run it</p>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n</div>", styles: [":host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-studio {\n display: flex;\n flex-direction: column;\n height: 100vh;\n background: #f8f9fa;\n overflow: hidden;\n position: relative;\n\n .dashboard-header {\n background: white;\n border-bottom: 1px solid #dee2e6;\n padding: 16px 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n \n .header-content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-buttons {\n display: flex;\n gap: 8px;\n \n .import-dropdown, .export-dropdown {\n position: relative;\n \n .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 180px;\n \n .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: 14px;\n color: #212529;\n transition: background-color 0.2s;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:not(:last-child) {\n border-bottom: 1px solid #e9ecef;\n }\n \n i {\n width: 16px;\n text-align: center;\n color: #6366f1;\n }\n }\n }\n }\n }\n \n h1 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #212529;\n display: flex;\n align-items: center;\n gap: 12px;\n \n i {\n color: #6366f1;\n }\n }\n \n .header-subtitle {\n margin: 4px 0 0 0;\n font-size: 13px;\n color: #6c757d;\n font-weight: normal;\n }\n }\n }\n\n kendo-splitter {\n flex: 1;\n background: white;\n display: flex;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n \n ::ng-deep .k-pane {\n overflow: hidden;\n height: 100%;\n }\n }\n\n .components-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n \n .panel-header {\n padding: 20px;\n background: white;\n border-bottom: 1px solid #dee2e6;\n \n .panel-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #212529;\n }\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n \n .favorites-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n \n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n \n &.active {\n background: #fff3cd;\n border-color: #ffc107;\n color: #856404;\n \n i {\n color: #ffc107;\n }\n }\n \n i {\n font-size: 14px;\n }\n }\n \n .component-count {\n font-size: 13px;\n color: #6c757d;\n background: #f8f9fa;\n padding: 4px 10px;\n border-radius: 12px;\n font-weight: 500;\n }\n }\n }\n \n .category-filters {\n margin-bottom: 16px;\n \n .filter-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n \n .category-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 2px solid #e9ecef;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n &.active {\n border-color: var(--pill-color);\n background: var(--pill-color);\n color: white;\n \n .pill-count {\n background: rgba(255, 255, 255, 0.3);\n color: white;\n }\n }\n \n .pill-name {\n font-weight: 500;\n }\n \n .pill-count {\n background: #f1f3f5;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n min-width: 20px;\n text-align: center;\n }\n }\n \n .more-button,\n .clear-filters-button {\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n \n i {\n font-size: 11px;\n margin-right: 4px;\n }\n }\n \n .clear-filters-button {\n background: #fee2e2;\n border-color: #fca5a5;\n color: #dc2626;\n \n &:hover {\n background: #fca5a5;\n color: white;\n }\n }\n }\n }\n \n .search-box {\n kendo-textbox {\n width: 100%;\n }\n }\n }\n \n .components-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px;\n \n .loading-message,\n .empty-message {\n padding: 48px 24px;\n text-align: center;\n color: #6c757d;\n font-size: 14px;\n \n i {\n margin-right: 8px;\n }\n }\n \n .component-card {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 8px;\n margin-bottom: 12px;\n transition: all 0.2s ease;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n border-color: #6366f1;\n }\n \n &.running {\n border-color: #10b981;\n box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);\n background: linear-gradient(to right, rgba(16, 185, 129, 0.03) 0%, white 100%);\n \n .card-header {\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n background: #10b981;\n }\n }\n }\n \n &.file-loaded {\n background: linear-gradient(135deg, #f0f8ff 0%, white 100%);\n border-style: dashed;\n border-color: #3b82f6;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15);\n }\n \n &.expanded {\n border-style: solid;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);\n }\n }\n \n .card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n &:hover {\n background: #f8f9fa;\n }\n \n .card-icon {\n font-size: 24px;\n margin-right: 16px;\n width: 32px;\n text-align: center;\n flex-shrink: 0;\n }\n \n .favorite-btn {\n position: absolute;\n top: 12px;\n right: 48px; // Leave room for chevron\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n transform: scale(1.1);\n }\n \n &.is-favorite {\n color: #ffc107;\n border-color: #ffc107;\n background: #fff3cd;\n \n &:hover {\n background: #ffe69c;\n }\n }\n \n i {\n font-size: 14px;\n }\n }\n \n .card-info {\n flex: 1;\n min-width: 0;\n \n .card-name {\n font-size: 15px;\n font-weight: 600;\n color: #212529;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n gap: 8px;\n \n .file-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n background: #e0f2fe;\n color: #0369a1;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n \n i {\n font-size: 10px;\n }\n }\n }\n \n .card-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: #6c757d;\n \n .card-type {\n font-weight: 500;\n }\n \n .card-version {\n color: #868e96;\n }\n \n .status-badge {\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n \n &.published {\n background: #d1fae5;\n color: #065f46;\n }\n \n &.draft {\n background: #fef3c7;\n color: #92400e;\n }\n \n &.file {\n background: #e0f2fe;\n color: #0369a1;\n }\n \n &.text {\n background: #f3e8ff;\n color: #6b21a8;\n }\n }\n }\n \n .card-namespace {\n margin-top: 8px;\n \n .namespace-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: white;\n \n i {\n font-size: 11px;\n opacity: 0.9;\n }\n }\n }\n }\n \n .card-chevron {\n color: #6c757d;\n font-size: 12px;\n margin-left: 12px;\n transition: transform 0.2s ease;\n }\n }\n \n .card-details {\n padding: 0 16px 16px 16px;\n border-top: 1px solid #e9ecef;\n animation: slideDown 0.2s ease;\n \n .detail-section {\n margin-top: 16px;\n \n label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n }\n \n p {\n margin: 0;\n font-size: 13px;\n color: #495057;\n line-height: 1.5;\n }\n \n .info-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n \n .info-item {\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-size: 13px;\n \n .info-label {\n font-weight: 500;\n color: #6c757d;\n min-width: 50px;\n }\n \n .info-value {\n color: #212529;\n }\n }\n }\n }\n \n .card-actions {\n margin-top: 16px;\n display: flex;\n gap: 8px;\n \n button {\n flex: 1;\n }\n }\n }\n }\n }\n }\n\n .component-display {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow: hidden;\n \n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #868e96;\n padding: 48px;\n text-align: center;\n \n i {\n color: #dee2e6;\n margin-bottom: 24px;\n }\n \n h2 {\n margin: 0 0 12px 0;\n font-size: 24px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n max-width: 400px;\n }\n }\n \n .error-display {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: #f8f9fa;\n \n .error-container {\n width: 100%;\n max-width: 600px;\n background: white;\n border: 2px solid #dc3545;\n border-radius: 8px;\n padding: 24px;\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.15);\n \n .error-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n color: #dc3545;\n position: relative;\n \n i {\n font-size: 24px;\n }\n \n h3 {\n margin: 0;\n font-size: 20px;\n flex: 1;\n }\n \n .copy-button {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 6px 10px;\n cursor: pointer;\n color: #6c757d;\n transition: all 0.2s;\n \n &:hover {\n background: #e9ecef;\n color: #495057;\n }\n \n i {\n font-size: 14px;\n }\n }\n }\n \n .error-intro {\n color: #495057;\n margin-bottom: 20px;\n font-size: 14px;\n }\n \n .error-details {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 13px;\n \n .technical-details {\n margin-top: 12px;\n \n summary {\n cursor: pointer;\n color: #0066cc;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n \n &:hover {\n text-decoration: underline;\n }\n }\n \n pre {\n margin-top: 8px;\n white-space: pre-wrap;\n word-break: break-word;\n font-size: 11px;\n color: #495057;\n max-height: 200px;\n overflow-y: auto;\n }\n }\n }\n \n .error-help {\n background: #e7f3ff;\n border: 1px solid #b3d9ff;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-size: 13px;\n \n strong {\n display: block;\n margin-bottom: 8px;\n font-size: 14px;\n color: #0066cc;\n }\n \n ol {\n margin: 0;\n padding-left: 20px;\n \n li {\n margin-bottom: 4px;\n color: #495057;\n }\n }\n }\n \n .error-actions {\n display: flex;\n gap: 12px;\n \n button {\n min-width: 100px;\n }\n }\n }\n }\n \n mj-react-component {\n flex: 1;\n width: 100%;\n height: 100%;\n display: block;\n overflow-y: auto;\n overflow-x: hidden;\n }\n \n // Component and editor splitter\n .component-editor-splitter {\n height: 100%;\n overflow: hidden;\n \n ::ng-deep .k-splitter-bar {\n background: #6366f1; // Same blue as Import button\n width: 6px; // Make it slightly wider for visibility\n \n &:hover {\n background: #4f52d9; // Darker blue on hover\n }\n \n .k-resize-handle {\n background-color: rgba(255, 255, 255, 0.3);\n }\n }\n \n ::ng-deep .k-pane {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n }\n \n // Component runtime area\n .component-runtime {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow-y: auto;\n overflow-x: hidden;\n \n .run-empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n text-align: center;\n \n i {\n color: #10b981;\n margin-bottom: 24px;\n }\n \n h3 {\n margin: 0 0 12px 0;\n font-size: 20px;\n font-weight: 600;\n color: #212529;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n }\n }\n }\n \n // Editor tabs on the right\n .editor-tabs {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n ::ng-deep .k-tabstrip-items-wrapper {\n background: #f8f9fa;\n border-bottom: 2px solid #dee2e6;\n flex-shrink: 0;\n }\n \n ::ng-deep .k-tabstrip-content {\n flex: 1;\n padding: 0;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n \n ::ng-deep .k-item.k-tabstrip-item {\n font-weight: 500;\n \n &.k-active {\n background: white;\n border-bottom-color: white;\n }\n }\n }\n \n .tab-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n &.spec-tab, &.code-tab {\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n \n .editor-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n min-width: 0; // Fix width issue\n \n h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 1; // Allow title to shrink\n min-width: 0; // Prevent overflow\n \n i {\n color: #6366f1;\n flex-shrink: 0; // Keep icon from shrinking\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0; // Prevent buttons from shrinking\n \n button {\n min-width: auto;\n padding: 4px 12px;\n font-size: 13px;\n white-space: nowrap; // Prevent button text wrapping\n }\n }\n }\n \n .editor-wrapper {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n min-height: 0;\n position: relative;\n }\n \n ::ng-deep .monaco-editor {\n border: 1px solid #dee2e6;\n }\n }\n \n .code-sections {\n height: 100%;\n \n ::ng-deep .k-panelbar-item-header {\n background: #f8f9fa;\n font-weight: 500;\n font-size: 14px;\n }\n \n ::ng-deep .k-panelbar-content {\n padding: 0;\n }\n }\n }\n }\n}\n\n// Removed tree view styles - using modern category filters instead\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}"] }]
1942
+ args: [{ selector: 'mj-component-studio-dashboard', template: "<div class=\"component-studio\">\n <!-- Header -->\n <div class=\"dashboard-header\">\n <div class=\"header-content\">\n <div>\n <h1><i class=\"fa-solid fa-puzzle-piece\"></i> Component Studio</h1>\n <p class=\"header-subtitle\">Testing components without required custom properties</p>\n </div>\n <div class=\"header-buttons\">\n @if (selectedComponent && isRunning) {\n <button kendoButton (click)=\"toggleDetailsPane()\" [themeColor]=\"'base'\">\n @if (isDetailsPaneCollapsed) {\n <span class=\"fa-solid fa-eye\"></span> Show Details\n } @else {\n <span class=\"fa-solid fa-eye-slash\"></span> Hide Details\n }\n </button>\n }\n <div class=\"import-dropdown\" [class.open]=\"importDropdownOpen\">\n <button kendoButton (click)=\"toggleImportDropdown()\" [themeColor]=\"'info'\">\n <span class=\"fa-solid fa-file-import\"></span> Import\n <span class=\"fa-solid fa-chevron-down\" style=\"margin-left: 5px; font-size: 10px;\"></span>\n </button>\n @if (importDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"importFromFile()\">\n <i class=\"fa-solid fa-file\"></i> Import from File\n </button>\n <button class=\"dropdown-item\" (click)=\"importFromText()\">\n <i class=\"fa-solid fa-keyboard\"></i> Import from Text\n </button>\n </div>\n }\n </div>\n @if (selectedComponent && isRunning) {\n <div class=\"export-dropdown\" [class.open]=\"exportDropdownOpen\">\n <button kendoButton (click)=\"toggleExportDropdown()\" [themeColor]=\"'primary'\">\n <span class=\"fa-solid fa-file-export\"></span> Export\n <span class=\"fa-solid fa-chevron-down\" style=\"margin-left: 5px; font-size: 10px;\"></span>\n </button>\n @if (exportDropdownOpen) {\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" (click)=\"exportToArtifact()\">\n <i class=\"fa-solid fa-save\"></i> Export to Artifact\n </button>\n <button class=\"dropdown-item\" (click)=\"exportToFile()\">\n <i class=\"fa-solid fa-file\"></i> Export to File\n </button>\n <button class=\"dropdown-item\" (click)=\"exportToClipboard()\">\n <i class=\"fa-solid fa-clipboard\"></i> Export to Clipboard\n </button>\n </div>\n }\n </div>\n }\n <button kendoButton (click)=\"refreshData()\" [disabled]=\"isLoading\">\n <span class=\"fa-solid fa-sync\"></span> Refresh\n </button>\n </div>\n <!-- Hidden file input -->\n <input #fileInput type=\"file\" accept=\".json\" (change)=\"handleFileSelect($event)\" style=\"display: none;\" />\n </div>\n </div>\n\n <!-- Main Content with Splitter -->\n <kendo-splitter orientation=\"horizontal\">\n <!-- Left Panel - Component List -->\n <kendo-splitter-pane [min]=\"'350px'\" [max]=\"'650px'\" [size]=\"'400px'\">\n <div class=\"components-panel\">\n <div class=\"panel-header\">\n <div class=\"panel-header-top\">\n <h3>Components</h3>\n <div class=\"header-actions\">\n <button\n class=\"favorites-toggle\"\n [class.active]=\"showOnlyFavorites\"\n (click)=\"toggleShowOnlyFavorites()\"\n title=\"Show only favorites\">\n @if (showOnlyFavorites) {\n <i class=\"fa-solid fa-star\"></i> Favorites\n } @else {\n <i class=\"fa-regular fa-star\"></i> All\n }\n </button>\n <button\n class=\"deprecated-toggle\"\n [class.active]=\"showDeprecatedComponents\"\n (click)=\"toggleShowDeprecatedComponents()\"\n title=\"Toggle deprecated components\">\n @if (showDeprecatedComponents) {\n <i class=\"fa-solid fa-exclamation-triangle\"></i> Show Deprecated\n } @else {\n <i class=\"fa-regular fa-exclamation-triangle\"></i> Hide Deprecated\n }\n </button>\n <span class=\"component-count\">{{ filteredComponents.length }} of {{ allComponents.length }}</span>\n </div>\n </div>\n \n <!-- Modern Category Filter Pills -->\n <div class=\"category-filters\">\n @if (availableCategories.length > 0) {\n <div class=\"filter-pills\">\n @for (category of getVisibleCategories(); track category.name) {\n <button \n class=\"category-pill\"\n [class.active]=\"isCategorySelected(category.name)\"\n [style.--pill-color]=\"category.color\"\n (click)=\"toggleCategory(category.name)\">\n <span class=\"pill-name\">{{ category.name }}</span>\n <span class=\"pill-count\">{{ category.count }}</span>\n </button>\n }\n @if (availableCategories.length > 5) {\n <button \n class=\"more-button\"\n (click)=\"toggleShowAllCategories()\">\n @if (showAllCategories) {\n <i class=\"fa-solid fa-chevron-up\"></i> Less\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i> +{{ availableCategories.length - 5 }} more\n }\n </button>\n }\n @if (selectedCategories.size > 0) {\n <button \n class=\"clear-filters-button\"\n (click)=\"clearCategoryFilters()\">\n <i class=\"fa-solid fa-times\"></i> Clear\n </button>\n }\n </div>\n }\n </div>\n \n <div class=\"search-box\">\n <kendo-textbox \n [value]=\"searchQuery\"\n (valueChange)=\"onSearchChange($event)\"\n placeholder=\"Search components...\"\n [clearButton]=\"true\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n </div>\n \n <div class=\"components-list\">\n @if (isLoading) {\n <div class=\"loading-message\">\n <i class=\"fa-solid fa-spinner fa-spin\"></i> Loading components...\n </div>\n } @else if (filteredComponents.length === 0) {\n <div class=\"empty-message\">\n <i class=\"fa-solid fa-info-circle\"></i> No components found without required custom properties.\n <br>\n <small>Components with optional custom props can be tested, but not those with required props.</small>\n </div>\n } @else {\n <!-- Component Cards -->\n @for (component of filteredComponents; track getComponentId(component)) {\n <div class=\"component-card\" \n [class.expanded]=\"expandedComponent && getComponentId(expandedComponent) === getComponentId(component)\"\n [class.running]=\"selectedComponent && getComponentId(selectedComponent) === getComponentId(component) && isRunning\"\n [class.file-loaded]=\"isFileLoadedComponent(component)\">\n \n <!-- Card Header - Always visible -->\n <div class=\"card-header\" (click)=\"toggleComponentExpansion(component)\">\n <div class=\"card-icon\" [style.color]=\"getComponentTypeColor(getComponentType(component))\">\n <i class=\"fa-solid\" [ngClass]=\"getComponentTypeIcon(getComponentType(component))\"></i>\n </div>\n @if (!isFileLoadedComponent(component)) {\n <button \n class=\"favorite-btn\"\n [class.is-favorite]=\"isFavorite(component)\"\n (click)=\"toggleFavorite(component, $event)\"\n [title]=\"isFavorite(component) ? 'Remove from favorites' : 'Add to favorites'\">\n @if (isFavorite(component)) {\n <i class=\"fa-solid fa-star\"></i>\n } @else {\n <i class=\"fa-regular fa-star\"></i>\n }\n </button>\n }\n <div class=\"card-info\">\n <div class=\"card-name\">\n {{ getComponentName(component) }}\n @if (isFileLoadedComponent(component)) {\n <span class=\"file-badge\" [title]=\"getComponentStatus(component) === 'Text' ? 'Imported from text input' : 'Loaded from ' + getComponentFilename(component)\">\n @if (getComponentStatus(component) === 'Text') {\n <i class=\"fa-solid fa-keyboard\"></i> Text Import\n } @else {\n <i class=\"fa-solid fa-file\"></i> {{ getComponentFilename(component) }}\n }\n </span>\n }\n </div>\n <div class=\"card-meta\">\n <span class=\"card-type\">{{ getComponentType(component) || 'Component' }}</span>\n <span class=\"card-version\">v{{ getComponentVersion(component) }}</span>\n @if (isFileLoadedComponent(component)) {\n @if (getComponentStatus(component) === 'Text') {\n <span class=\"status-badge text\">Text</span>\n } @else {\n <span class=\"status-badge file\">File</span>\n }\n } @else if (getComponentStatus(component) === 'Deprecated') {\n <span class=\"status-badge deprecated\">Deprecated</span>\n } @else if (getComponentStatus(component) === 'Published') {\n <span class=\"status-badge published\">Published</span>\n } @else {\n <span class=\"status-badge draft\">Draft</span>\n }\n </div>\n <!-- Namespace chip with color coding -->\n <div class=\"card-namespace\">\n <span class=\"namespace-chip\" \n [style.background-color]=\"getNamespaceColor(getComponentNamespace(component))\"\n [title]=\"getComponentNamespace(component) || 'Uncategorized'\">\n <i class=\"fa-solid fa-folder-tree\"></i>\n {{ formatNamespace(getComponentNamespace(component)) }}\n </span>\n </div>\n </div>\n <div class=\"card-chevron\">\n @if (expandedComponent && getComponentId(expandedComponent) === getComponentId(component)) {\n <i class=\"fa-solid fa-chevron-up\"></i>\n } @else {\n <i class=\"fa-solid fa-chevron-down\"></i>\n }\n </div>\n </div>\n \n <!-- Card Details - Only visible when expanded -->\n @if (expandedComponent && getComponentId(expandedComponent) === getComponentId(component)) {\n <div class=\"card-details\">\n @if (getComponentDescription(component)) {\n <div class=\"detail-section\">\n <label>Description</label>\n <p>{{ getComponentDescription(component) }}</p>\n </div>\n }\n \n <div class=\"detail-section\">\n <label>Component Info</label>\n <div class=\"info-grid\">\n <div class=\"info-item\">\n <span class=\"info-label\">Type:</span>\n <span class=\"info-value\">{{ getComponentType(component) || 'Unknown' }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Version:</span>\n <span class=\"info-value\">{{ getComponentVersion(component) }}</span>\n </div>\n <div class=\"info-item\">\n <span class=\"info-label\">Status:</span>\n <span class=\"info-value\">{{ getComponentStatus(component) || 'Draft' }}</span>\n </div>\n @if (isFileLoadedComponent(component)) {\n <div class=\"info-item\">\n <span class=\"info-label\">Loaded:</span>\n <span class=\"info-value\">{{ getComponentLoadedAt(component) | date:'short' }}</span>\n </div>\n } @else if (!isFileLoadedComponent(component) && getComponentUpdatedAt(component)) {\n <div class=\"info-item\">\n <span class=\"info-label\">Updated:</span>\n <span class=\"info-value\">{{ getComponentUpdatedAt(component) | date:'short' }}</span>\n </div>\n }\n </div>\n </div>\n \n <div class=\"card-actions\">\n @if (selectedComponent && getComponentId(selectedComponent) === getComponentId(component) && isRunning) {\n <button kendoButton \n [themeColor]=\"'error'\"\n (click)=\"stopComponent(); $event.stopPropagation()\">\n <span class=\"fa-solid fa-stop\"></span> Stop Component\n </button>\n } @else if (isRunning && selectedComponent && getComponentId(selectedComponent) !== getComponentId(component)) {\n <button kendoButton \n [themeColor]=\"'base'\"\n title=\"Stop current component and run this one\"\n (click)=\"runComponent(component); $event.stopPropagation()\">\n <span class=\"fa-solid fa-play\"></span> Switch to This Component\n </button>\n } @else {\n <button kendoButton \n [themeColor]=\"'primary'\"\n (click)=\"runComponent(component); $event.stopPropagation()\">\n <span class=\"fa-solid fa-play\"></span> Run Component\n </button>\n }\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n </kendo-splitter-pane>\n\n <!-- Right Panel - Component Display with Editor Splitter -->\n <kendo-splitter-pane [min]=\"'400px'\">\n <div class=\"component-display\">\n @if (selectedComponent) {\n <kendo-splitter orientation=\"horizontal\">\n <kendo-splitter-pane [size]=\"isDetailsPaneCollapsed ? '100%' : '50%'\">\n <div class=\"component-runtime\">\n @if (isRunning && componentSpec) {\n @if (currentError) {\n <!-- Error Display -->\n <div class=\"error-display\">\n <div class=\"error-container\">\n <div class=\"error-header\">\n <i class=\"fa-solid fa-exclamation-triangle\"></i>\n <h3>Component Error</h3>\n <button class=\"copy-button\" (click)=\"copyErrorToClipboard()\" title=\"Copy error details\">\n <i class=\"fa-solid fa-copy\"></i>\n </button>\n </div>\n \n <p class=\"error-intro\">\n The component could not be rendered due to the following error:\n </p>\n \n <div class=\"error-details\">\n <strong>Error Type:</strong> {{ currentError.type }}<br>\n <strong>Message:</strong> {{ currentError.message }}\n @if (currentError.technicalDetails) {\n <details class=\"technical-details\">\n <summary>Technical Details (click to expand)</summary>\n <pre>{{ formatTechnicalDetails(currentError.technicalDetails) }}</pre>\n </details>\n }\n </div>\n \n <div class=\"error-help\">\n <strong>What to do:</strong>\n <ol>\n <li>Check that the component code is valid JavaScript/React</li>\n <li>Ensure all required dependencies are available</li>\n <li>Review the technical details for specific error information</li>\n <li>Contact your system administrator if the issue persists</li>\n </ol>\n </div>\n \n <div class=\"error-actions\">\n <button kendoButton (click)=\"retryComponent()\">\n <span class=\"fa-solid fa-rotate\"></span> Retry\n </button>\n <button kendoButton (click)=\"stopComponent()\" [themeColor]=\"'error'\">\n <span class=\"fa-solid fa-stop\"></span> Stop\n </button>\n </div>\n </div>\n </div>\n } @else {\n <!-- React Component -->\n <mj-react-component \n [component]=\"componentSpec\"\n (componentEvent)=\"onComponentEvent($event)\"\n (openEntityRecord)=\"onOpenEntityRecord($event)\">\n </mj-react-component>\n }\n } @else {\n <!-- Component Not Running State -->\n <div class=\"run-empty-state\">\n <i class=\"fa-solid fa-play-circle fa-3x\"></i>\n <h3>Component: {{ getComponentName(selectedComponent) }}</h3>\n <p>{{ getComponentDescription(selectedComponent) || 'No description available' }}</p>\n <button kendoButton [themeColor]=\"'primary'\" [size]=\"'large'\" (click)=\"runComponent(selectedComponent)\">\n <span class=\"fa-solid fa-play\"></span> Run Component\n </button>\n </div>\n }\n </div>\n\n </kendo-splitter-pane>\n <kendo-splitter-pane [size]=\"isDetailsPaneCollapsed ? '0px' : '50%'\">\n <div>\n <kendo-tabstrip (tabSelect)=\"onTabSelect($event)\" class=\"editor-tabs\">\n <!-- Spec Tab -->\n <kendo-tabstrip-tab [title]=\"'Spec'\" [selected]=\"activeTab === 0\">\n <ng-template kendoTabContent>\n <div class=\"tab-content spec-tab\">\n <div class=\"editor-header\">\n <h4><i class=\"fa-solid fa-code\"></i> Component Specification (JSON)</h4>\n <div class=\"editor-actions\">\n @if (isEditingSpec) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"applySpecChanges()\">\n <span class=\"fa-solid fa-check\"></span> Apply Changes\n </button>\n <button kendoButton (click)=\"initializeEditors()\">\n <span class=\"fa-solid fa-times\"></span> Cancel\n </button>\n }\n @if (isRunning) {\n <button kendoButton (click)=\"refreshComponent()\" [themeColor]=\"'info'\">\n <span class=\"fa-solid fa-sync\"></span> Refresh Component\n </button>\n }\n </div>\n </div>\n <div class=\"editor-wrapper\">\n <mj-code-editor\n [(ngModel)]=\"editableSpec\"\n (ngModelChange)=\"onSpecChange($event)\"\n [language]=\"'json'\"\n [readonly]=\"false\"\n style=\"height: 100%; width: 100%;\">\n </mj-code-editor>\n </div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n \n <!-- Code Tab -->\n <kendo-tabstrip-tab [title]=\"'Code'\" [selected]=\"activeTab === 1\">\n <ng-template kendoTabContent>\n <div class=\"tab-content code-tab\">\n <div class=\"editor-header\">\n <h4><i class=\"fa-solid fa-file-code\"></i> Component Code (JavaScript/React)</h4>\n <div class=\"editor-actions\">\n @if (isEditingCode) {\n <button kendoButton [themeColor]=\"'primary'\" (click)=\"applyCodeChanges()\">\n <span class=\"fa-solid fa-check\"></span> Apply Changes\n </button>\n <button kendoButton (click)=\"initializeEditors()\">\n <span class=\"fa-solid fa-times\"></span> Cancel\n </button>\n }\n @if (isRunning) {\n <button kendoButton (click)=\"refreshComponent()\" [themeColor]=\"'info'\">\n <span class=\"fa-solid fa-sync\"></span> Refresh Component\n </button>\n }\n </div>\n </div>\n \n <!-- Always use panel bar for consistency and to show all components -->\n <div class=\"editor-wrapper\">\n <kendo-panelbar class=\"code-sections\">\n @for (section of getComponentCodeSections(); track section.title; let i = $index) {\n <kendo-panelbar-item [title]=\"section.title\" [expanded]=\"section.expanded\">\n <ng-template kendoPanelBarContent>\n <mj-code-editor\n [ngModel]=\"section.code\"\n (ngModelChange)=\"onCodeSectionChange($event, i)\"\n [language]=\"'javascript'\"\n [readonly]=\"false\"\n style=\"height: 400px; width: 100%;\">\n </mj-code-editor>\n </ng-template>\n </kendo-panelbar-item>\n }\n </kendo-panelbar>\n </div>\n </div>\n </ng-template>\n </kendo-tabstrip-tab>\n </kendo-tabstrip>\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n\n @if (!isDetailsPaneCollapsed) {\n \n }\n } @else {\n <!-- Empty State when no component selected -->\n <div class=\"empty-state\">\n <i class=\"fa-solid fa-rocket fa-3x\"></i>\n <h2>Ready to Test Components</h2>\n <p>Select a component from the list to view its details and run it</p>\n </div>\n }\n </div>\n </kendo-splitter-pane>\n </kendo-splitter>\n</div>", styles: [":host {\n display: block;\n width: 100%;\n height: 100%;\n}\n\n.component-studio {\n display: flex;\n flex-direction: column;\n height: 100vh;\n background: #f8f9fa;\n overflow: hidden;\n position: relative;\n\n .dashboard-header {\n background: white;\n border-bottom: 1px solid #dee2e6;\n padding: 16px 24px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);\n \n .header-content {\n display: flex;\n justify-content: space-between;\n align-items: center;\n \n .header-buttons {\n display: flex;\n gap: 8px;\n \n .import-dropdown, .export-dropdown {\n position: relative;\n \n .dropdown-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n min-width: 180px;\n \n .dropdown-item {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 10px 16px;\n border: none;\n background: none;\n text-align: left;\n cursor: pointer;\n font-size: 14px;\n color: #212529;\n transition: background-color 0.2s;\n \n &:hover {\n background-color: #f8f9fa;\n }\n \n &:not(:last-child) {\n border-bottom: 1px solid #e9ecef;\n }\n \n i {\n width: 16px;\n text-align: center;\n color: #6366f1;\n }\n }\n }\n }\n }\n \n h1 {\n margin: 0;\n font-size: 24px;\n font-weight: 600;\n color: #212529;\n display: flex;\n align-items: center;\n gap: 12px;\n \n i {\n color: #6366f1;\n }\n }\n \n .header-subtitle {\n margin: 4px 0 0 0;\n font-size: 13px;\n color: #6c757d;\n font-weight: normal;\n }\n }\n }\n\n kendo-splitter {\n flex: 1;\n background: white;\n display: flex;\n height: 100%;\n min-height: 0;\n overflow: hidden;\n \n ::ng-deep .k-pane {\n overflow: hidden;\n height: 100%;\n }\n }\n\n .components-panel {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: #f8f9fa;\n \n .panel-header {\n padding: 20px;\n background: white;\n border-bottom: 1px solid #dee2e6;\n \n .panel-header-top {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n \n h3 {\n margin: 0;\n font-size: 18px;\n font-weight: 600;\n color: #212529;\n }\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 12px;\n \n .favorites-toggle,\n .deprecated-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n font-weight: 500;\n color: #6c757d;\n cursor: pointer;\n transition: all 0.2s ease;\n\n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n\n i {\n font-size: 14px;\n }\n }\n\n .favorites-toggle.active {\n background: #fff3cd;\n border-color: #ffc107;\n color: #856404;\n\n i {\n color: #ffc107;\n }\n }\n\n .deprecated-toggle.active {\n background: #ffe4e1;\n border-color: #ff6b6b;\n color: #c92a2a;\n\n i {\n color: #ff6b6b;\n }\n }\n \n .component-count {\n font-size: 13px;\n color: #6c757d;\n background: #f8f9fa;\n padding: 4px 10px;\n border-radius: 12px;\n font-weight: 500;\n }\n }\n }\n \n .category-filters {\n margin-bottom: 16px;\n \n .filter-pills {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n \n .category-pill {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 12px;\n border: 2px solid #e9ecef;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n position: relative;\n overflow: hidden;\n \n &:hover {\n transform: translateY(-1px);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n }\n \n &.active {\n border-color: var(--pill-color);\n background: var(--pill-color);\n color: white;\n \n .pill-count {\n background: rgba(255, 255, 255, 0.3);\n color: white;\n }\n }\n \n .pill-name {\n font-weight: 500;\n }\n \n .pill-count {\n background: #f1f3f5;\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 600;\n min-width: 20px;\n text-align: center;\n }\n }\n \n .more-button,\n .clear-filters-button {\n padding: 6px 12px;\n border: 1px solid #dee2e6;\n background: white;\n border-radius: 20px;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n border-color: #adb5bd;\n }\n \n i {\n font-size: 11px;\n margin-right: 4px;\n }\n }\n \n .clear-filters-button {\n background: #fee2e2;\n border-color: #fca5a5;\n color: #dc2626;\n \n &:hover {\n background: #fca5a5;\n color: white;\n }\n }\n }\n }\n \n .search-box {\n kendo-textbox {\n width: 100%;\n }\n }\n }\n \n .components-list {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px;\n \n .loading-message,\n .empty-message {\n padding: 48px 24px;\n text-align: center;\n color: #6c757d;\n font-size: 14px;\n \n i {\n margin-right: 8px;\n }\n }\n \n .component-card {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 8px;\n margin-bottom: 12px;\n transition: all 0.2s ease;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);\n }\n \n &.expanded {\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n border-color: #6366f1;\n }\n \n &.running {\n border-color: #10b981;\n box-shadow: 0 0 0 3px rgba(16, 185, 129, 0.1);\n background: linear-gradient(to right, rgba(16, 185, 129, 0.03) 0%, white 100%);\n \n .card-header {\n &::before {\n content: '';\n position: absolute;\n left: 0;\n top: 0;\n bottom: 0;\n width: 4px;\n background: #10b981;\n }\n }\n }\n \n &.file-loaded {\n background: linear-gradient(135deg, #f0f8ff 0%, white 100%);\n border-style: dashed;\n border-color: #3b82f6;\n \n &:hover {\n box-shadow: 0 2px 8px rgba(59, 130, 246, 0.15);\n }\n \n &.expanded {\n border-style: solid;\n box-shadow: 0 4px 12px rgba(59, 130, 246, 0.2);\n }\n }\n \n .card-header {\n display: flex;\n align-items: center;\n padding: 16px;\n cursor: pointer;\n user-select: none;\n position: relative;\n \n &:hover {\n background: #f8f9fa;\n }\n \n .card-icon {\n font-size: 24px;\n margin-right: 16px;\n width: 32px;\n text-align: center;\n flex-shrink: 0;\n }\n \n .favorite-btn {\n position: absolute;\n top: 12px;\n right: 48px; // Leave room for chevron\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: all 0.2s ease;\n color: #6c757d;\n \n &:hover {\n background: #f8f9fa;\n transform: scale(1.1);\n }\n \n &.is-favorite {\n color: #ffc107;\n border-color: #ffc107;\n background: #fff3cd;\n \n &:hover {\n background: #ffe69c;\n }\n }\n \n i {\n font-size: 14px;\n }\n }\n \n .card-info {\n flex: 1;\n min-width: 0;\n \n .card-name {\n font-size: 15px;\n font-weight: 600;\n color: #212529;\n margin-bottom: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: flex;\n align-items: center;\n gap: 8px;\n \n .file-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 6px;\n background: #e0f2fe;\n color: #0369a1;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n flex-shrink: 0;\n \n i {\n font-size: 10px;\n }\n }\n }\n \n .card-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: #6c757d;\n \n .card-type {\n font-weight: 500;\n }\n \n .card-version {\n color: #868e96;\n }\n \n .status-badge {\n padding: 2px 6px;\n border-radius: 10px;\n font-size: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.3px;\n \n &.published {\n background: #d1fae5;\n color: #065f46;\n }\n \n &.draft {\n background: #fef3c7;\n color: #92400e;\n }\n\n &.deprecated {\n background: #ffe4e1;\n color: #c92a2a;\n border: 1px solid #ff6b6b;\n }\n\n &.file {\n background: #e0f2fe;\n color: #0369a1;\n }\n \n &.text {\n background: #f3e8ff;\n color: #6b21a8;\n }\n }\n }\n \n .card-namespace {\n margin-top: 8px;\n \n .namespace-chip {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 16px;\n font-size: 12px;\n font-weight: 500;\n color: white;\n \n i {\n font-size: 11px;\n opacity: 0.9;\n }\n }\n }\n }\n \n .card-chevron {\n color: #6c757d;\n font-size: 12px;\n margin-left: 12px;\n transition: transform 0.2s ease;\n }\n }\n \n .card-details {\n padding: 0 16px 16px 16px;\n border-top: 1px solid #e9ecef;\n animation: slideDown 0.2s ease;\n \n .detail-section {\n margin-top: 16px;\n \n label {\n display: block;\n font-size: 11px;\n font-weight: 600;\n color: #6c757d;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 8px;\n }\n \n p {\n margin: 0;\n font-size: 13px;\n color: #495057;\n line-height: 1.5;\n }\n \n .info-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n \n .info-item {\n display: flex;\n align-items: baseline;\n gap: 6px;\n font-size: 13px;\n \n .info-label {\n font-weight: 500;\n color: #6c757d;\n min-width: 50px;\n }\n \n .info-value {\n color: #212529;\n }\n }\n }\n }\n \n .card-actions {\n margin-top: 16px;\n display: flex;\n gap: 8px;\n \n button {\n flex: 1;\n }\n }\n }\n }\n }\n }\n\n .component-display {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow: hidden;\n \n .empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: #868e96;\n padding: 48px;\n text-align: center;\n \n i {\n color: #dee2e6;\n margin-bottom: 24px;\n }\n \n h2 {\n margin: 0 0 12px 0;\n font-size: 24px;\n font-weight: 600;\n color: #495057;\n }\n \n p {\n margin: 0;\n font-size: 14px;\n max-width: 400px;\n }\n }\n \n .error-display {\n flex: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 24px;\n background: #f8f9fa;\n \n .error-container {\n width: 100%;\n max-width: 600px;\n background: white;\n border: 2px solid #dc3545;\n border-radius: 8px;\n padding: 24px;\n box-shadow: 0 4px 12px rgba(220, 53, 69, 0.15);\n \n .error-header {\n display: flex;\n align-items: center;\n gap: 12px;\n margin-bottom: 20px;\n color: #dc3545;\n position: relative;\n \n i {\n font-size: 24px;\n }\n \n h3 {\n margin: 0;\n font-size: 20px;\n flex: 1;\n }\n \n .copy-button {\n background: white;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 6px 10px;\n cursor: pointer;\n color: #6c757d;\n transition: all 0.2s;\n \n &:hover {\n background: #e9ecef;\n color: #495057;\n }\n \n i {\n font-size: 14px;\n }\n }\n }\n \n .error-intro {\n color: #495057;\n margin-bottom: 20px;\n font-size: 14px;\n }\n \n .error-details {\n background: #f8f9fa;\n border: 1px solid #dee2e6;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-family: 'SF Mono', Monaco, 'Courier New', monospace;\n font-size: 13px;\n \n .technical-details {\n margin-top: 12px;\n \n summary {\n cursor: pointer;\n color: #0066cc;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n \n &:hover {\n text-decoration: underline;\n }\n }\n \n pre {\n margin-top: 8px;\n white-space: pre-wrap;\n word-break: break-word;\n font-size: 11px;\n color: #495057;\n max-height: 200px;\n overflow-y: auto;\n }\n }\n }\n \n .error-help {\n background: #e7f3ff;\n border: 1px solid #b3d9ff;\n border-radius: 4px;\n padding: 16px;\n margin-bottom: 20px;\n font-size: 13px;\n \n strong {\n display: block;\n margin-bottom: 8px;\n font-size: 14px;\n color: #0066cc;\n }\n \n ol {\n margin: 0;\n padding-left: 20px;\n \n li {\n margin-bottom: 4px;\n color: #495057;\n }\n }\n }\n \n .error-actions {\n display: flex;\n gap: 12px;\n \n button {\n min-width: 100px;\n }\n }\n }\n }\n \n mj-react-component {\n flex: 1;\n width: 100%;\n height: 100%;\n display: block;\n overflow-y: auto;\n overflow-x: hidden;\n }\n \n // Component and editor splitter\n .component-editor-splitter {\n height: 100%;\n overflow: hidden;\n \n ::ng-deep .k-splitter-bar {\n background: #6366f1; // Same blue as Import button\n width: 6px; // Make it slightly wider for visibility\n \n &:hover {\n background: #4f52d9; // Darker blue on hover\n }\n \n .k-resize-handle {\n background-color: rgba(255, 255, 255, 0.3);\n }\n }\n \n ::ng-deep .k-pane {\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n }\n \n // Component runtime area\n .component-runtime {\n height: 100%;\n display: flex;\n flex-direction: column;\n background: white;\n position: relative;\n overflow-y: auto;\n overflow-x: hidden;\n \n .run-empty-state {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 48px;\n text-align: center;\n \n i {\n color: #10b981;\n margin-bottom: 24px;\n }\n \n h3 {\n margin: 0 0 12px 0;\n font-size: 20px;\n font-weight: 600;\n color: #212529;\n }\n \n p {\n margin: 0 0 24px 0;\n font-size: 14px;\n color: #6c757d;\n max-width: 400px;\n }\n }\n }\n \n // Editor tabs on the right\n .editor-tabs {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n ::ng-deep .k-tabstrip-items-wrapper {\n background: #f8f9fa;\n border-bottom: 2px solid #dee2e6;\n flex-shrink: 0;\n }\n \n ::ng-deep .k-tabstrip-content {\n flex: 1;\n padding: 0;\n overflow: hidden;\n min-height: 0;\n display: flex;\n flex-direction: column;\n }\n \n ::ng-deep .k-item.k-tabstrip-item {\n font-weight: 500;\n \n &.k-active {\n background: white;\n border-bottom-color: white;\n }\n }\n }\n \n .tab-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n \n &.spec-tab, &.code-tab {\n height: 100%;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n \n .editor-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: #f8f9fa;\n border-bottom: 1px solid #dee2e6;\n flex-shrink: 0;\n min-width: 0; // Fix width issue\n \n h4 {\n margin: 0;\n font-size: 14px;\n font-weight: 600;\n color: #495057;\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 1; // Allow title to shrink\n min-width: 0; // Prevent overflow\n \n i {\n color: #6366f1;\n flex-shrink: 0; // Keep icon from shrinking\n }\n }\n \n .editor-actions {\n display: flex;\n gap: 8px;\n flex-shrink: 0; // Prevent buttons from shrinking\n \n button {\n min-width: auto;\n padding: 4px 12px;\n font-size: 13px;\n white-space: nowrap; // Prevent button text wrapping\n }\n }\n }\n \n .editor-wrapper {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n min-height: 0;\n position: relative;\n }\n \n ::ng-deep .monaco-editor {\n border: 1px solid #dee2e6;\n }\n }\n \n .code-sections {\n height: 100%;\n \n ::ng-deep .k-panelbar-item-header {\n background: #f8f9fa;\n font-weight: 500;\n font-size: 14px;\n }\n \n ::ng-deep .k-panelbar-content {\n padding: 0;\n }\n }\n }\n }\n}\n\n// Removed tree view styles - using modern category filters instead\n\n@keyframes slideDown {\n from {\n opacity: 0;\n transform: translateY(-10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes pulse {\n 0%, 100% {\n opacity: 1;\n }\n 50% {\n opacity: 0.5;\n }\n}"] }]
1907
1943
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.DialogService }, { type: i0.ViewContainerRef }], { fileInput: [{
1908
1944
  type: ViewChild,
1909
1945
  args: ['fileInput', { static: false }]