@memberjunction/ng-action-gallery 2.55.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.
@@ -0,0 +1,817 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild } from '@angular/core';
2
+ import { FormControl } from '@angular/forms';
3
+ import { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';
4
+ import { RunView } from '@memberjunction/core';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common";
7
+ import * as i2 from "@angular/forms";
8
+ import * as i3 from "@progress/kendo-angular-buttons";
9
+ import * as i4 from "@progress/kendo-angular-inputs";
10
+ import * as i5 from "@progress/kendo-angular-indicators";
11
+ import * as i6 from "@progress/kendo-angular-tooltip";
12
+ const _c0 = ["searchInput"];
13
+ function ActionGalleryComponent_div_1_ng_template_5_Template(rf, ctx) { if (rf & 1) {
14
+ i0.ɵɵelement(0, "i", 22);
15
+ } }
16
+ function ActionGalleryComponent_div_1_Template(rf, ctx) { if (rf & 1) {
17
+ const _r1 = i0.ɵɵgetCurrentView();
18
+ i0.ɵɵelementStart(0, "div", 10)(1, "div", 11)(2, "div", 12)(3, "kendo-textbox", 13, 0);
19
+ i0.ɵɵtemplate(5, ActionGalleryComponent_div_1_ng_template_5_Template, 1, 0, "ng-template", 14);
20
+ i0.ɵɵelementEnd()();
21
+ i0.ɵɵelementStart(6, "div", 15)(7, "div", 16)(8, "button", 17);
22
+ i0.ɵɵpipe(9, "async");
23
+ i0.ɵɵpipe(10, "async");
24
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_1_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleViewMode()); });
25
+ i0.ɵɵelement(11, "i", 18);
26
+ i0.ɵɵpipe(12, "async");
27
+ i0.ɵɵpipe(13, "async");
28
+ i0.ɵɵelementEnd()();
29
+ i0.ɵɵelementStart(14, "div", 19)(15, "span", 20);
30
+ i0.ɵɵelement(16, "i", 21);
31
+ i0.ɵɵtext(17);
32
+ i0.ɵɵpipe(18, "async");
33
+ i0.ɵɵelementEnd()()()()();
34
+ } if (rf & 2) {
35
+ let tmp_9_0;
36
+ const ctx_r1 = i0.ɵɵnextContext();
37
+ i0.ɵɵadvance(3);
38
+ i0.ɵɵproperty("formControl", ctx_r1.searchControl)("clearButton", true);
39
+ i0.ɵɵadvance(5);
40
+ i0.ɵɵproperty("toggleable", true)("selected", i0.ɵɵpipeBind1(9, 11, ctx_r1.viewMode$) === "grid")("title", i0.ɵɵpipeBind1(10, 13, ctx_r1.viewMode$) === "grid" ? "Switch to list view" : "Switch to grid view");
41
+ i0.ɵɵadvance(3);
42
+ i0.ɵɵclassProp("fa-th", i0.ɵɵpipeBind1(12, 15, ctx_r1.viewMode$) === "grid")("fa-list", i0.ɵɵpipeBind1(13, 17, ctx_r1.viewMode$) === "list");
43
+ i0.ɵɵadvance(6);
44
+ i0.ɵɵtextInterpolate2(" ", (tmp_9_0 = i0.ɵɵpipeBind1(18, 19, ctx_r1.filteredActions$)) == null ? null : tmp_9_0.length, " of ", ctx_r1.totalActions, " actions ");
45
+ } }
46
+ function ActionGalleryComponent_div_3_ng_container_2_i_9_Template(rf, ctx) { if (rf & 1) {
47
+ const _r5 = i0.ɵɵgetCurrentView();
48
+ i0.ɵɵelementStart(0, "i", 32);
49
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_3_ng_container_2_i_9_Template_i_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const category_r4 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.toggleCategoryExpanded(category_r4.id); return i0.ɵɵresetView($event.stopPropagation()); });
50
+ i0.ɵɵelementEnd();
51
+ } if (rf & 2) {
52
+ const category_r4 = i0.ɵɵnextContext().$implicit;
53
+ const ctx_r1 = i0.ɵɵnextContext(2);
54
+ i0.ɵɵclassProp("expanded", ctx_r1.expandedCategories.has(category_r4.id));
55
+ } }
56
+ function ActionGalleryComponent_div_3_ng_container_2_div_10_div_1_Template(rf, ctx) { if (rf & 1) {
57
+ const _r6 = i0.ɵɵgetCurrentView();
58
+ i0.ɵɵelementStart(0, "div", 35);
59
+ i0.ɵɵpipe(1, "async");
60
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_3_ng_container_2_div_10_div_1_Template_div_click_0_listener($event) { const subCategory_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); ctx_r1.selectCategory(subCategory_r7.id); return i0.ɵɵresetView($event.stopPropagation()); });
61
+ i0.ɵɵelementStart(2, "div", 27);
62
+ i0.ɵɵelement(3, "i");
63
+ i0.ɵɵelementStart(4, "span", 28);
64
+ i0.ɵɵtext(5);
65
+ i0.ɵɵelementEnd();
66
+ i0.ɵɵelementStart(6, "span", 29);
67
+ i0.ɵɵtext(7);
68
+ i0.ɵɵelementEnd()()();
69
+ } if (rf & 2) {
70
+ const subCategory_r7 = ctx.$implicit;
71
+ const ctx_r1 = i0.ɵɵnextContext(4);
72
+ i0.ɵɵclassProp("selected", i0.ɵɵpipeBind1(1, 7, ctx_r1.selectedCategory$) === subCategory_r7.id);
73
+ i0.ɵɵadvance(3);
74
+ i0.ɵɵclassMapInterpolate1("fa-solid ", subCategory_r7.icon, " category-icon");
75
+ i0.ɵɵadvance(2);
76
+ i0.ɵɵtextInterpolate(subCategory_r7.name);
77
+ i0.ɵɵadvance(2);
78
+ i0.ɵɵtextInterpolate(subCategory_r7.count);
79
+ } }
80
+ function ActionGalleryComponent_div_3_ng_container_2_div_10_Template(rf, ctx) { if (rf & 1) {
81
+ i0.ɵɵelementStart(0, "div", 33);
82
+ i0.ɵɵtemplate(1, ActionGalleryComponent_div_3_ng_container_2_div_10_div_1_Template, 8, 9, "div", 34);
83
+ i0.ɵɵelementEnd();
84
+ } if (rf & 2) {
85
+ const category_r4 = i0.ɵɵnextContext().$implicit;
86
+ i0.ɵɵadvance();
87
+ i0.ɵɵproperty("ngForOf", category_r4.children);
88
+ } }
89
+ function ActionGalleryComponent_div_3_ng_container_2_Template(rf, ctx) { if (rf & 1) {
90
+ const _r3 = i0.ɵɵgetCurrentView();
91
+ i0.ɵɵelementContainerStart(0);
92
+ i0.ɵɵelementStart(1, "div", 26);
93
+ i0.ɵɵpipe(2, "async");
94
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_3_ng_container_2_Template_div_click_1_listener() { const category_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.selectCategory(category_r4.id)); });
95
+ i0.ɵɵelementStart(3, "div", 27);
96
+ i0.ɵɵelement(4, "i");
97
+ i0.ɵɵelementStart(5, "span", 28);
98
+ i0.ɵɵtext(6);
99
+ i0.ɵɵelementEnd();
100
+ i0.ɵɵelementStart(7, "span", 29);
101
+ i0.ɵɵtext(8);
102
+ i0.ɵɵelementEnd();
103
+ i0.ɵɵtemplate(9, ActionGalleryComponent_div_3_ng_container_2_i_9_Template, 1, 2, "i", 30);
104
+ i0.ɵɵelementEnd();
105
+ i0.ɵɵtemplate(10, ActionGalleryComponent_div_3_ng_container_2_div_10_Template, 2, 1, "div", 31);
106
+ i0.ɵɵelementEnd();
107
+ i0.ɵɵelementContainerEnd();
108
+ } if (rf & 2) {
109
+ const category_r4 = ctx.$implicit;
110
+ const ctx_r1 = i0.ɵɵnextContext(2);
111
+ i0.ɵɵadvance();
112
+ i0.ɵɵclassProp("selected", i0.ɵɵpipeBind1(2, 11, ctx_r1.selectedCategory$) === category_r4.id)("has-children", category_r4.children && category_r4.children.length > 0);
113
+ i0.ɵɵadvance(3);
114
+ i0.ɵɵclassMapInterpolate1("fa-solid ", category_r4.icon, " category-icon");
115
+ i0.ɵɵadvance(2);
116
+ i0.ɵɵtextInterpolate(category_r4.name);
117
+ i0.ɵɵadvance(2);
118
+ i0.ɵɵtextInterpolate(category_r4.count);
119
+ i0.ɵɵadvance();
120
+ i0.ɵɵproperty("ngIf", category_r4.children && category_r4.children.length > 0);
121
+ i0.ɵɵadvance();
122
+ i0.ɵɵproperty("ngIf", category_r4.children && ctx_r1.expandedCategories.has(category_r4.id));
123
+ } }
124
+ function ActionGalleryComponent_div_3_Template(rf, ctx) { if (rf & 1) {
125
+ i0.ɵɵelementStart(0, "div", 23)(1, "div", 24);
126
+ i0.ɵɵtemplate(2, ActionGalleryComponent_div_3_ng_container_2_Template, 11, 13, "ng-container", 25);
127
+ i0.ɵɵpipe(3, "async");
128
+ i0.ɵɵelementEnd()();
129
+ } if (rf & 2) {
130
+ const ctx_r1 = i0.ɵɵnextContext();
131
+ i0.ɵɵadvance(2);
132
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(3, 1, ctx_r1.categoryTree$));
133
+ } }
134
+ function ActionGalleryComponent_div_5_Template(rf, ctx) { if (rf & 1) {
135
+ i0.ɵɵelementStart(0, "div", 36);
136
+ i0.ɵɵelement(1, "kendo-loader", 37);
137
+ i0.ɵɵelementStart(2, "p");
138
+ i0.ɵɵtext(3, "Loading actions...");
139
+ i0.ɵɵelementEnd()();
140
+ } }
141
+ function ActionGalleryComponent_div_7_Template(rf, ctx) { if (rf & 1) {
142
+ const _r8 = i0.ɵɵgetCurrentView();
143
+ i0.ɵɵelementStart(0, "div", 38);
144
+ i0.ɵɵelement(1, "i", 39);
145
+ i0.ɵɵelementStart(2, "h3");
146
+ i0.ɵɵtext(3, "No actions found");
147
+ i0.ɵɵelementEnd();
148
+ i0.ɵɵelementStart(4, "p");
149
+ i0.ɵɵtext(5, "Try adjusting your search criteria or selecting a different category");
150
+ i0.ɵɵelementEnd();
151
+ i0.ɵɵelementStart(6, "button", 40);
152
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_7_Template_button_click_6_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.clearSearch()); });
153
+ i0.ɵɵtext(7, "Clear Search");
154
+ i0.ɵɵelementEnd()();
155
+ } }
156
+ function ActionGalleryComponent_div_10_div_1_span_8_Template(rf, ctx) { if (rf & 1) {
157
+ i0.ɵɵelementStart(0, "span", 59);
158
+ i0.ɵɵelement(1, "i", 60);
159
+ i0.ɵɵtext(2);
160
+ i0.ɵɵelementEnd();
161
+ } if (rf & 2) {
162
+ const action_r10 = i0.ɵɵnextContext().$implicit;
163
+ i0.ɵɵadvance(2);
164
+ i0.ɵɵtextInterpolate1(" ", action_r10.Category, " ");
165
+ } }
166
+ function ActionGalleryComponent_div_10_div_1_button_10_Template(rf, ctx) { if (rf & 1) {
167
+ const _r11 = i0.ɵɵgetCurrentView();
168
+ i0.ɵɵelementStart(0, "button", 61);
169
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_10_div_1_button_10_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r11); const action_r10 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testAction(action_r10, $event)); });
170
+ i0.ɵɵelementEnd();
171
+ } }
172
+ function ActionGalleryComponent_div_10_div_1_span_16_Template(rf, ctx) { if (rf & 1) {
173
+ i0.ɵɵelementStart(0, "span", 62);
174
+ i0.ɵɵelement(1, "i", 63);
175
+ i0.ɵɵtext(2);
176
+ i0.ɵɵelementEnd();
177
+ } if (rf & 2) {
178
+ const action_r10 = i0.ɵɵnextContext().$implicit;
179
+ i0.ɵɵadvance(2);
180
+ i0.ɵɵtextInterpolate1(" ", (action_r10.parameters == null ? null : action_r10.parameters.length) || 0, " params ");
181
+ } }
182
+ function ActionGalleryComponent_div_10_div_1_span_17_Template(rf, ctx) { if (rf & 1) {
183
+ i0.ɵɵelementStart(0, "span", 62);
184
+ i0.ɵɵelement(1, "i", 64);
185
+ i0.ɵɵtext(2);
186
+ i0.ɵɵelementEnd();
187
+ } if (rf & 2) {
188
+ const action_r10 = i0.ɵɵnextContext().$implicit;
189
+ i0.ɵɵadvance(2);
190
+ i0.ɵɵtextInterpolate1(" ", (action_r10.resultCodes == null ? null : action_r10.resultCodes.length) || 0, " results ");
191
+ } }
192
+ function ActionGalleryComponent_div_10_div_1_span_18_Template(rf, ctx) { if (rf & 1) {
193
+ i0.ɵɵelementStart(0, "span", 62);
194
+ i0.ɵɵelement(1, "i", 65);
195
+ i0.ɵɵtext(2);
196
+ i0.ɵɵelementEnd();
197
+ } if (rf & 2) {
198
+ const action_r10 = i0.ɵɵnextContext().$implicit;
199
+ i0.ɵɵadvance(2);
200
+ i0.ɵɵtextInterpolate1(" ", action_r10.Type, " ");
201
+ } }
202
+ function ActionGalleryComponent_div_10_div_1_div_19_div_1_div_5_span_5_Template(rf, ctx) { if (rf & 1) {
203
+ i0.ɵɵelementStart(0, "span", 75);
204
+ i0.ɵɵtext(1, "Required");
205
+ i0.ɵɵelementEnd();
206
+ } }
207
+ function ActionGalleryComponent_div_10_div_1_div_19_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
208
+ i0.ɵɵelementStart(0, "div", 71)(1, "span", 72);
209
+ i0.ɵɵtext(2);
210
+ i0.ɵɵelementEnd();
211
+ i0.ɵɵelementStart(3, "span", 73);
212
+ i0.ɵɵtext(4);
213
+ i0.ɵɵelementEnd();
214
+ i0.ɵɵtemplate(5, ActionGalleryComponent_div_10_div_1_div_19_div_1_div_5_span_5_Template, 2, 0, "span", 74);
215
+ i0.ɵɵelementEnd();
216
+ } if (rf & 2) {
217
+ const param_r12 = ctx.$implicit;
218
+ i0.ɵɵadvance(2);
219
+ i0.ɵɵtextInterpolate(param_r12.Name);
220
+ i0.ɵɵadvance(2);
221
+ i0.ɵɵtextInterpolate(param_r12.Type);
222
+ i0.ɵɵadvance();
223
+ i0.ɵɵproperty("ngIf", param_r12.IsRequired);
224
+ } }
225
+ function ActionGalleryComponent_div_10_div_1_div_19_div_1_Template(rf, ctx) { if (rf & 1) {
226
+ i0.ɵɵelementStart(0, "div", 68)(1, "h4");
227
+ i0.ɵɵelement(2, "i", 63);
228
+ i0.ɵɵtext(3, " Parameters ");
229
+ i0.ɵɵelementEnd();
230
+ i0.ɵɵelementStart(4, "div", 69);
231
+ i0.ɵɵtemplate(5, ActionGalleryComponent_div_10_div_1_div_19_div_1_div_5_Template, 6, 3, "div", 70);
232
+ i0.ɵɵelementEnd()();
233
+ } if (rf & 2) {
234
+ const action_r10 = i0.ɵɵnextContext(2).$implicit;
235
+ i0.ɵɵadvance(5);
236
+ i0.ɵɵproperty("ngForOf", action_r10.parameters);
237
+ } }
238
+ function ActionGalleryComponent_div_10_div_1_div_19_div_2_div_5_Template(rf, ctx) { if (rf & 1) {
239
+ i0.ɵɵelementStart(0, "div", 78)(1, "span", 79);
240
+ i0.ɵɵtext(2);
241
+ i0.ɵɵelementEnd();
242
+ i0.ɵɵelementStart(3, "span", 80);
243
+ i0.ɵɵtext(4);
244
+ i0.ɵɵelementEnd()();
245
+ } if (rf & 2) {
246
+ const code_r13 = ctx.$implicit;
247
+ i0.ɵɵadvance(2);
248
+ i0.ɵɵtextInterpolate(code_r13.ResultCode);
249
+ i0.ɵɵadvance(2);
250
+ i0.ɵɵtextInterpolate(code_r13.Description);
251
+ } }
252
+ function ActionGalleryComponent_div_10_div_1_div_19_div_2_Template(rf, ctx) { if (rf & 1) {
253
+ i0.ɵɵelementStart(0, "div", 68)(1, "h4");
254
+ i0.ɵɵelement(2, "i", 64);
255
+ i0.ɵɵtext(3, " Result Codes ");
256
+ i0.ɵɵelementEnd();
257
+ i0.ɵɵelementStart(4, "div", 76);
258
+ i0.ɵɵtemplate(5, ActionGalleryComponent_div_10_div_1_div_19_div_2_div_5_Template, 5, 2, "div", 77);
259
+ i0.ɵɵelementEnd()();
260
+ } if (rf & 2) {
261
+ const action_r10 = i0.ɵɵnextContext(2).$implicit;
262
+ i0.ɵɵadvance(5);
263
+ i0.ɵɵproperty("ngForOf", action_r10.resultCodes);
264
+ } }
265
+ function ActionGalleryComponent_div_10_div_1_div_19_Template(rf, ctx) { if (rf & 1) {
266
+ i0.ɵɵelementStart(0, "div", 66);
267
+ i0.ɵɵtemplate(1, ActionGalleryComponent_div_10_div_1_div_19_div_1_Template, 6, 1, "div", 67)(2, ActionGalleryComponent_div_10_div_1_div_19_div_2_Template, 6, 1, "div", 67);
268
+ i0.ɵɵelementEnd();
269
+ } if (rf & 2) {
270
+ const action_r10 = i0.ɵɵnextContext().$implicit;
271
+ i0.ɵɵadvance();
272
+ i0.ɵɵproperty("ngIf", action_r10.parameters && action_r10.parameters.length > 0);
273
+ i0.ɵɵadvance();
274
+ i0.ɵɵproperty("ngIf", action_r10.resultCodes && action_r10.resultCodes.length > 0);
275
+ } }
276
+ function ActionGalleryComponent_div_10_div_1_div_20_Template(rf, ctx) { if (rf & 1) {
277
+ i0.ɵɵelementStart(0, "div", 81);
278
+ i0.ɵɵelement(1, "i", 18);
279
+ i0.ɵɵelementEnd();
280
+ } if (rf & 2) {
281
+ const action_r10 = i0.ɵɵnextContext().$implicit;
282
+ i0.ɵɵadvance();
283
+ i0.ɵɵclassProp("fa-check-circle", action_r10.selected)("fa-circle", !action_r10.selected);
284
+ } }
285
+ function ActionGalleryComponent_div_10_div_1_Template(rf, ctx) { if (rf & 1) {
286
+ const _r9 = i0.ɵɵgetCurrentView();
287
+ i0.ɵɵelementStart(0, "div", 43);
288
+ i0.ɵɵlistener("mouseenter", function ActionGalleryComponent_div_10_div_1_Template_div_mouseenter_0_listener() { const action_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.hoveredAction = action_r10.ID); })("mouseleave", function ActionGalleryComponent_div_10_div_1_Template_div_mouseleave_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.hoveredAction = null); })("click", function ActionGalleryComponent_div_10_div_1_Template_div_click_0_listener() { const action_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleActionSelection(action_r10)); });
289
+ i0.ɵɵelementStart(1, "div", 44);
290
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_10_div_1_Template_div_click_1_listener($event) { const action_r10 = i0.ɵɵrestoreView(_r9).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); ctx_r1.toggleActionExpanded(action_r10); return i0.ɵɵresetView($event.stopPropagation()); });
291
+ i0.ɵɵelementStart(2, "div", 45);
292
+ i0.ɵɵelement(3, "i");
293
+ i0.ɵɵelementEnd();
294
+ i0.ɵɵelementStart(4, "div", 46)(5, "h3", 47);
295
+ i0.ɵɵtext(6);
296
+ i0.ɵɵelementEnd();
297
+ i0.ɵɵelementStart(7, "div", 48);
298
+ i0.ɵɵtemplate(8, ActionGalleryComponent_div_10_div_1_span_8_Template, 3, 1, "span", 49);
299
+ i0.ɵɵelementEnd()();
300
+ i0.ɵɵelementStart(9, "div", 50);
301
+ i0.ɵɵtemplate(10, ActionGalleryComponent_div_10_div_1_button_10_Template, 1, 0, "button", 51);
302
+ i0.ɵɵelement(11, "i", 52);
303
+ i0.ɵɵelementEnd()();
304
+ i0.ɵɵelementStart(12, "div", 53)(13, "p", 54);
305
+ i0.ɵɵtext(14);
306
+ i0.ɵɵelementEnd();
307
+ i0.ɵɵelementStart(15, "div", 55);
308
+ i0.ɵɵtemplate(16, ActionGalleryComponent_div_10_div_1_span_16_Template, 3, 1, "span", 56)(17, ActionGalleryComponent_div_10_div_1_span_17_Template, 3, 1, "span", 56)(18, ActionGalleryComponent_div_10_div_1_span_18_Template, 3, 1, "span", 56);
309
+ i0.ɵɵelementEnd()();
310
+ i0.ɵɵtemplate(19, ActionGalleryComponent_div_10_div_1_div_19_Template, 3, 2, "div", 57)(20, ActionGalleryComponent_div_10_div_1_div_20_Template, 2, 4, "div", 58);
311
+ i0.ɵɵelementEnd();
312
+ } if (rf & 2) {
313
+ const action_r10 = ctx.$implicit;
314
+ const ctx_r1 = i0.ɵɵnextContext(2);
315
+ i0.ɵɵclassProp("expanded", action_r10.expanded)("selected", action_r10.selected)("animate", ctx_r1.animateCards)("hover", ctx_r1.hoveredAction === action_r10.ID);
316
+ i0.ɵɵadvance(3);
317
+ i0.ɵɵclassMapInterpolate1("fa-solid ", ctx_r1.getActionIcon(action_r10), "");
318
+ i0.ɵɵadvance(3);
319
+ i0.ɵɵtextInterpolate(action_r10.Name);
320
+ i0.ɵɵadvance(2);
321
+ i0.ɵɵproperty("ngIf", action_r10.Category);
322
+ i0.ɵɵadvance(2);
323
+ i0.ɵɵproperty("ngIf", ctx_r1.config.enableQuickTest);
324
+ i0.ɵɵadvance();
325
+ i0.ɵɵclassProp("fa-chevron-down", !action_r10.expanded)("fa-chevron-up", action_r10.expanded);
326
+ i0.ɵɵadvance(3);
327
+ i0.ɵɵtextInterpolate(action_r10.Description || "No description available");
328
+ i0.ɵɵadvance(2);
329
+ i0.ɵɵproperty("ngIf", action_r10.parameters == null ? null : action_r10.parameters.length);
330
+ i0.ɵɵadvance();
331
+ i0.ɵɵproperty("ngIf", action_r10.resultCodes == null ? null : action_r10.resultCodes.length);
332
+ i0.ɵɵadvance();
333
+ i0.ɵɵproperty("ngIf", action_r10.Type);
334
+ i0.ɵɵadvance();
335
+ i0.ɵɵproperty("ngIf", action_r10.expanded);
336
+ i0.ɵɵadvance();
337
+ i0.ɵɵproperty("ngIf", ctx_r1.config.selectionMode);
338
+ } }
339
+ function ActionGalleryComponent_div_10_Template(rf, ctx) { if (rf & 1) {
340
+ i0.ɵɵelementStart(0, "div", 41);
341
+ i0.ɵɵtemplate(1, ActionGalleryComponent_div_10_div_1_Template, 21, 24, "div", 42);
342
+ i0.ɵɵpipe(2, "async");
343
+ i0.ɵɵelementEnd();
344
+ } if (rf & 2) {
345
+ const ctx_r1 = i0.ɵɵnextContext();
346
+ i0.ɵɵstyleProp("grid-template-columns", "repeat(" + (ctx_r1.config.gridColumns || 3) + ", 1fr)");
347
+ i0.ɵɵadvance();
348
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(2, 3, ctx_r1.filteredActions$));
349
+ } }
350
+ function ActionGalleryComponent_div_15_div_12_button_11_Template(rf, ctx) { if (rf & 1) {
351
+ const _r16 = i0.ɵɵgetCurrentView();
352
+ i0.ɵɵelementStart(0, "button", 61);
353
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_15_div_12_button_11_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r16); const action_r15 = i0.ɵɵnextContext().$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.testAction(action_r15, $event)); });
354
+ i0.ɵɵelementEnd();
355
+ } }
356
+ function ActionGalleryComponent_div_15_div_12_div_12_Template(rf, ctx) { if (rf & 1) {
357
+ i0.ɵɵelementStart(0, "div", 81);
358
+ i0.ɵɵelement(1, "i", 18);
359
+ i0.ɵɵelementEnd();
360
+ } if (rf & 2) {
361
+ const action_r15 = i0.ɵɵnextContext().$implicit;
362
+ i0.ɵɵadvance();
363
+ i0.ɵɵclassProp("fa-check-circle", action_r15.selected)("fa-circle", !action_r15.selected);
364
+ } }
365
+ function ActionGalleryComponent_div_15_div_12_Template(rf, ctx) { if (rf & 1) {
366
+ const _r14 = i0.ɵɵgetCurrentView();
367
+ i0.ɵɵelementStart(0, "div", 90);
368
+ i0.ɵɵlistener("click", function ActionGalleryComponent_div_15_div_12_Template_div_click_0_listener() { const action_r15 = i0.ɵɵrestoreView(_r14).$implicit; const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.toggleActionSelection(action_r15)); });
369
+ i0.ɵɵelementStart(1, "span", 84);
370
+ i0.ɵɵelement(2, "i");
371
+ i0.ɵɵtext(3);
372
+ i0.ɵɵelementEnd();
373
+ i0.ɵɵelementStart(4, "span", 85);
374
+ i0.ɵɵtext(5);
375
+ i0.ɵɵelementEnd();
376
+ i0.ɵɵelementStart(6, "span", 86);
377
+ i0.ɵɵtext(7);
378
+ i0.ɵɵelementEnd();
379
+ i0.ɵɵelementStart(8, "span", 87);
380
+ i0.ɵɵtext(9);
381
+ i0.ɵɵelementEnd();
382
+ i0.ɵɵelementStart(10, "span", 88);
383
+ i0.ɵɵtemplate(11, ActionGalleryComponent_div_15_div_12_button_11_Template, 1, 0, "button", 51);
384
+ i0.ɵɵelementEnd();
385
+ i0.ɵɵtemplate(12, ActionGalleryComponent_div_15_div_12_div_12_Template, 2, 4, "div", 58);
386
+ i0.ɵɵelementEnd();
387
+ } if (rf & 2) {
388
+ const action_r15 = ctx.$implicit;
389
+ const ctx_r1 = i0.ɵɵnextContext(2);
390
+ i0.ɵɵclassProp("selected", action_r15.selected);
391
+ i0.ɵɵadvance(2);
392
+ i0.ɵɵclassMapInterpolate1("fa-solid ", ctx_r1.getActionIcon(action_r15), " action-icon");
393
+ i0.ɵɵadvance();
394
+ i0.ɵɵtextInterpolate1(" ", action_r15.Name, " ");
395
+ i0.ɵɵadvance(2);
396
+ i0.ɵɵtextInterpolate(action_r15.Category || "-");
397
+ i0.ɵɵadvance(2);
398
+ i0.ɵɵtextInterpolate(action_r15.Type || "-");
399
+ i0.ɵɵadvance(2);
400
+ i0.ɵɵtextInterpolate((action_r15.parameters == null ? null : action_r15.parameters.length) || 0);
401
+ i0.ɵɵadvance(2);
402
+ i0.ɵɵproperty("ngIf", ctx_r1.config.enableQuickTest);
403
+ i0.ɵɵadvance();
404
+ i0.ɵɵproperty("ngIf", ctx_r1.config.selectionMode);
405
+ } }
406
+ function ActionGalleryComponent_div_15_Template(rf, ctx) { if (rf & 1) {
407
+ i0.ɵɵelementStart(0, "div", 82)(1, "div", 83)(2, "span", 84);
408
+ i0.ɵɵtext(3, "Name");
409
+ i0.ɵɵelementEnd();
410
+ i0.ɵɵelementStart(4, "span", 85);
411
+ i0.ɵɵtext(5, "Category");
412
+ i0.ɵɵelementEnd();
413
+ i0.ɵɵelementStart(6, "span", 86);
414
+ i0.ɵɵtext(7, "Type");
415
+ i0.ɵɵelementEnd();
416
+ i0.ɵɵelementStart(8, "span", 87);
417
+ i0.ɵɵtext(9, "Parameters");
418
+ i0.ɵɵelementEnd();
419
+ i0.ɵɵelementStart(10, "span", 88);
420
+ i0.ɵɵtext(11, "Actions");
421
+ i0.ɵɵelementEnd()();
422
+ i0.ɵɵtemplate(12, ActionGalleryComponent_div_15_div_12_Template, 13, 11, "div", 89);
423
+ i0.ɵɵpipe(13, "async");
424
+ i0.ɵɵelementEnd();
425
+ } if (rf & 2) {
426
+ const ctx_r1 = i0.ɵɵnextContext();
427
+ i0.ɵɵadvance(12);
428
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind1(13, 1, ctx_r1.filteredActions$));
429
+ } }
430
+ export class ActionGalleryComponent {
431
+ constructor() {
432
+ this.config = {
433
+ selectionMode: false,
434
+ multiSelect: false,
435
+ showCategories: true,
436
+ showSearch: true,
437
+ defaultView: 'grid',
438
+ gridColumns: 3,
439
+ enableQuickTest: true,
440
+ theme: 'light'
441
+ };
442
+ this.preSelectedActions = [];
443
+ this.actionSelected = new EventEmitter();
444
+ this.actionsSelected = new EventEmitter();
445
+ this.actionTestRequested = new EventEmitter();
446
+ // State management
447
+ this.destroy$ = new Subject();
448
+ this.actions$ = new BehaviorSubject([]);
449
+ this.categories$ = new BehaviorSubject([]);
450
+ this.filteredActions$ = new BehaviorSubject([]);
451
+ this.categoryTree$ = new BehaviorSubject([]);
452
+ this.selectedCategory$ = new BehaviorSubject('all');
453
+ this.viewMode$ = new BehaviorSubject('grid');
454
+ this.isLoading$ = new BehaviorSubject(false);
455
+ this.selectedActions$ = new BehaviorSubject(new Set());
456
+ // Form controls
457
+ this.searchControl = new FormControl('');
458
+ // UI state
459
+ this.expandedCategories = new Set();
460
+ this.hoveredAction = null;
461
+ this.animateCards = false;
462
+ // Statistics
463
+ this.totalActions = 0;
464
+ this.categoryCounts = new Map();
465
+ }
466
+ ngOnInit() {
467
+ // Set initial view mode
468
+ this.viewMode$.next(this.config.defaultView || 'grid');
469
+ // Load data
470
+ this.loadData();
471
+ // Set up filtering
472
+ combineLatest([
473
+ this.actions$,
474
+ this.searchControl.valueChanges.pipe(debounceTime(300), distinctUntilChanged()),
475
+ this.selectedCategory$
476
+ ]).pipe(takeUntil(this.destroy$)).subscribe(([actions, searchTerm, category]) => {
477
+ this.filterActions(actions, searchTerm || '', category);
478
+ });
479
+ // Initialize with pre-selected actions
480
+ if (this.preSelectedActions.length > 0) {
481
+ this.selectedActions$.next(new Set(this.preSelectedActions));
482
+ }
483
+ // Enable animations after initial load
484
+ setTimeout(() => {
485
+ this.animateCards = true;
486
+ }, 100);
487
+ }
488
+ ngOnDestroy() {
489
+ this.destroy$.next();
490
+ this.destroy$.complete();
491
+ }
492
+ async loadData() {
493
+ this.isLoading$.next(true);
494
+ try {
495
+ const rv = new RunView();
496
+ // Load actions and categories in parallel
497
+ const [actionsResult, categoriesResult] = await rv.RunViews([
498
+ {
499
+ EntityName: 'Actions',
500
+ ResultType: 'entity_object',
501
+ OrderBy: 'Category, Name',
502
+ MaxRows: 5000
503
+ },
504
+ {
505
+ EntityName: 'Action Categories',
506
+ ResultType: 'entity_object',
507
+ OrderBy: 'Name',
508
+ MaxRows: 1000
509
+ }
510
+ ]);
511
+ if (actionsResult.Success && categoriesResult.Success) {
512
+ const actions = actionsResult.Results || [];
513
+ const categories = categoriesResult.Results || [];
514
+ // Process actions
515
+ const actionsWithDetails = actions.map(action => ({
516
+ ...action,
517
+ expanded: false,
518
+ selected: this.preSelectedActions.includes(action.ID)
519
+ }));
520
+ this.actions$.next(actionsWithDetails);
521
+ this.totalActions = actions.length;
522
+ // Process categories
523
+ this.categories$.next(categories);
524
+ this.buildCategoryTree(categories, actions);
525
+ // Initial filter
526
+ this.filterActions(actionsWithDetails, '', 'all');
527
+ }
528
+ }
529
+ catch (error) {
530
+ console.error('Error loading gallery data:', error);
531
+ }
532
+ finally {
533
+ this.isLoading$.next(false);
534
+ }
535
+ }
536
+ buildCategoryTree(categories, actions) {
537
+ // Count actions per category
538
+ this.categoryCounts.clear();
539
+ actions.forEach(action => {
540
+ const count = this.categoryCounts.get(action.Category || 'Uncategorized') || 0;
541
+ this.categoryCounts.set(action.Category || 'Uncategorized', count + 1);
542
+ });
543
+ // Build tree structure
544
+ const nodeMap = new Map();
545
+ const rootNodes = [];
546
+ // Create nodes
547
+ categories.forEach(cat => {
548
+ const node = {
549
+ id: cat.ID,
550
+ name: cat.Name,
551
+ parent: cat.ParentID || undefined,
552
+ children: [],
553
+ count: this.categoryCounts.get(cat.Name) || 0,
554
+ icon: this.getCategoryIcon(cat.Name)
555
+ };
556
+ nodeMap.set(cat.ID, node);
557
+ });
558
+ // Build hierarchy
559
+ nodeMap.forEach(node => {
560
+ if (node.parent && nodeMap.has(node.parent)) {
561
+ const parent = nodeMap.get(node.parent);
562
+ parent.children.push(node);
563
+ // Accumulate counts up the tree
564
+ parent.count = (parent.count || 0) + (node.count || 0);
565
+ }
566
+ else {
567
+ rootNodes.push(node);
568
+ }
569
+ });
570
+ // Add "All" category at the top
571
+ const allNode = {
572
+ id: 'all',
573
+ name: 'All Actions',
574
+ count: this.totalActions,
575
+ icon: 'fa-th'
576
+ };
577
+ // Add "Uncategorized" if needed
578
+ const uncategorizedCount = this.categoryCounts.get('Uncategorized') || 0;
579
+ if (uncategorizedCount > 0) {
580
+ const uncategorizedNode = {
581
+ id: 'uncategorized',
582
+ name: 'Uncategorized',
583
+ count: uncategorizedCount,
584
+ icon: 'fa-question-circle'
585
+ };
586
+ rootNodes.push(uncategorizedNode);
587
+ }
588
+ this.categoryTree$.next([allNode, ...rootNodes]);
589
+ }
590
+ getCategoryIcon(categoryName) {
591
+ const iconMap = {
592
+ 'Data': 'fa-database',
593
+ 'Communication': 'fa-envelope',
594
+ 'Integration': 'fa-plug',
595
+ 'Security': 'fa-shield',
596
+ 'Workflow': 'fa-project-diagram',
597
+ 'AI': 'fa-brain',
598
+ 'Files': 'fa-file',
599
+ 'Utilities': 'fa-tools',
600
+ 'System': 'fa-cog',
601
+ 'Analytics': 'fa-chart-line'
602
+ };
603
+ return iconMap[categoryName] || 'fa-folder';
604
+ }
605
+ filterActions(actions, searchTerm, category) {
606
+ let filtered = [...actions];
607
+ // Category filter
608
+ if (category && category !== 'all') {
609
+ if (category === 'uncategorized') {
610
+ filtered = filtered.filter(a => !a.Category);
611
+ }
612
+ else {
613
+ const categoryName = this.getCategoryName(category);
614
+ filtered = filtered.filter(a => a.Category === categoryName);
615
+ }
616
+ }
617
+ // Search filter
618
+ if (searchTerm) {
619
+ const term = searchTerm.toLowerCase();
620
+ filtered = filtered.filter(action => action.Name.toLowerCase().includes(term) ||
621
+ action.Description?.toLowerCase().includes(term) ||
622
+ action.Category?.toLowerCase().includes(term));
623
+ }
624
+ this.filteredActions$.next(filtered);
625
+ }
626
+ getCategoryName(categoryId) {
627
+ const category = this.categories$.value.find(c => c.ID === categoryId);
628
+ return category?.Name || '';
629
+ }
630
+ selectCategory(categoryId) {
631
+ this.selectedCategory$.next(categoryId);
632
+ }
633
+ toggleCategoryExpanded(categoryId) {
634
+ if (this.expandedCategories.has(categoryId)) {
635
+ this.expandedCategories.delete(categoryId);
636
+ }
637
+ else {
638
+ this.expandedCategories.add(categoryId);
639
+ }
640
+ }
641
+ toggleViewMode() {
642
+ const currentMode = this.viewMode$.value;
643
+ this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');
644
+ }
645
+ async toggleActionExpanded(action) {
646
+ action.expanded = !action.expanded;
647
+ // Load details if expanding and not already loaded
648
+ if (action.expanded && !action.parameters) {
649
+ await this.loadActionDetails(action);
650
+ }
651
+ }
652
+ async loadActionDetails(action) {
653
+ const rv = new RunView();
654
+ try {
655
+ const [paramsResult, resultCodesResult] = await rv.RunViews([
656
+ {
657
+ EntityName: 'Action Params',
658
+ ExtraFilter: `ActionID='${action.ID}'`,
659
+ OrderBy: 'Sequence',
660
+ ResultType: 'entity_object',
661
+ MaxRows: 100
662
+ },
663
+ {
664
+ EntityName: 'Action Result Codes',
665
+ ExtraFilter: `ActionID='${action.ID}'`,
666
+ OrderBy: 'ResultCode',
667
+ ResultType: 'entity_object',
668
+ MaxRows: 100
669
+ }
670
+ ]);
671
+ if (paramsResult.Success) {
672
+ action.parameters = paramsResult.Results || [];
673
+ }
674
+ if (resultCodesResult.Success) {
675
+ action.resultCodes = resultCodesResult.Results || [];
676
+ }
677
+ }
678
+ catch (error) {
679
+ console.error('Error loading action details:', error);
680
+ }
681
+ }
682
+ toggleActionSelection(action) {
683
+ if (!this.config.selectionMode)
684
+ return;
685
+ const selected = this.selectedActions$.value;
686
+ if (!this.config.multiSelect) {
687
+ // Single select mode
688
+ selected.clear();
689
+ if (!action.selected) {
690
+ selected.add(action.ID);
691
+ action.selected = true;
692
+ this.actionSelected.emit(action);
693
+ }
694
+ }
695
+ else {
696
+ // Multi-select mode
697
+ if (action.selected) {
698
+ selected.delete(action.ID);
699
+ action.selected = false;
700
+ }
701
+ else {
702
+ selected.add(action.ID);
703
+ action.selected = true;
704
+ }
705
+ }
706
+ this.selectedActions$.next(new Set(selected));
707
+ if (this.config.multiSelect) {
708
+ const selectedActions = this.actions$.value.filter(a => selected.has(a.ID));
709
+ this.actionsSelected.emit(selectedActions);
710
+ }
711
+ }
712
+ testAction(action, event) {
713
+ event.stopPropagation();
714
+ if (this.config.enableQuickTest) {
715
+ // TODO: Implement test harness integration
716
+ console.log('Test action:', action.Name);
717
+ }
718
+ this.actionTestRequested.emit(action);
719
+ }
720
+ clearSearch() {
721
+ this.searchControl.reset();
722
+ if (this.searchInput) {
723
+ this.searchInput.nativeElement.focus();
724
+ }
725
+ }
726
+ getSelectedActions() {
727
+ const selected = this.selectedActions$.value;
728
+ return this.actions$.value.filter(a => selected.has(a.ID));
729
+ }
730
+ getActionIcon(action) {
731
+ const typeIcons = {
732
+ 'Create': 'fa-plus-circle',
733
+ 'Update': 'fa-edit',
734
+ 'Delete': 'fa-trash',
735
+ 'Query': 'fa-search',
736
+ 'Process': 'fa-cogs',
737
+ 'Email': 'fa-envelope',
738
+ 'Report': 'fa-file-alt',
739
+ 'Export': 'fa-file-export',
740
+ 'Import': 'fa-file-import',
741
+ 'API': 'fa-plug',
742
+ 'Script': 'fa-code'
743
+ };
744
+ for (const [key, icon] of Object.entries(typeIcons)) {
745
+ if (action.Name.toLowerCase().includes(key.toLowerCase()) ||
746
+ action.Type?.toLowerCase().includes(key.toLowerCase())) {
747
+ return icon;
748
+ }
749
+ }
750
+ return 'fa-bolt';
751
+ }
752
+ static { this.ɵfac = function ActionGalleryComponent_Factory(t) { return new (t || ActionGalleryComponent)(); }; }
753
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionGalleryComponent, selectors: [["mj-action-gallery"]], viewQuery: function ActionGalleryComponent_Query(rf, ctx) { if (rf & 1) {
754
+ i0.ɵɵviewQuery(_c0, 5);
755
+ } if (rf & 2) {
756
+ let _t;
757
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchInput = _t.first);
758
+ } }, inputs: { config: "config", preSelectedActions: "preSelectedActions" }, outputs: { actionSelected: "actionSelected", actionsSelected: "actionsSelected", actionTestRequested: "actionTestRequested" }, decls: 20, vars: 34, consts: [["searchInput", ""], [1, "action-gallery"], ["class", "gallery-header", 4, "ngIf"], [1, "gallery-content"], ["class", "category-sidebar", 4, "ngIf"], [1, "actions-container"], ["class", "loading-state", 4, "ngIf"], ["class", "empty-state", 4, "ngIf"], ["class", "actions-grid", 3, "grid-template-columns", 4, "ngIf"], ["class", "actions-list", 4, "ngIf"], [1, "gallery-header"], [1, "header-content"], [1, "search-section"], ["placeholder", "Search actions by name, description, or category...", 1, "search-input", 3, "formControl", "clearButton"], ["kendoTextBoxPrefixTemplate", ""], [1, "header-actions"], [1, "view-toggle"], ["kendoButton", "", "size", "small", "kendoTooltip", "", 3, "click", "toggleable", "selected", "title"], [1, "fa-solid"], [1, "stats"], [1, "stat-item"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-search"], [1, "category-sidebar"], [1, "category-tree"], [4, "ngFor", "ngForOf"], [1, "category-item", 3, "click"], [1, "category-header"], [1, "category-name"], [1, "category-count"], ["class", "fa-solid fa-chevron-right expand-icon", 3, "expanded", "click", 4, "ngIf"], ["class", "sub-categories", 4, "ngIf"], [1, "fa-solid", "fa-chevron-right", "expand-icon", 3, "click"], [1, "sub-categories"], ["class", "category-item sub-category", 3, "selected", "click", 4, "ngFor", "ngForOf"], [1, "category-item", "sub-category", 3, "click"], [1, "loading-state"], ["size", "large"], [1, "empty-state"], [1, "fa-solid", "fa-search-minus"], ["kendoButton", "", 3, "click"], [1, "actions-grid"], ["class", "action-card", 3, "expanded", "selected", "animate", "hover", "mouseenter", "mouseleave", "click", 4, "ngFor", "ngForOf"], [1, "action-card", 3, "mouseenter", "mouseleave", "click"], [1, "card-header", 3, "click"], [1, "action-icon"], [1, "action-info"], [1, "action-name"], [1, "action-meta"], ["class", "category-badge", 4, "ngIf"], [1, "card-actions"], ["kendoButton", "", "look", "flat", "size", "small", "icon", "play", "kendoTooltip", "", "title", "Test this action", 3, "click", 4, "ngIf"], [1, "fa-solid", "expand-indicator"], [1, "card-body"], [1, "action-description"], [1, "action-stats"], ["class", "stat", 4, "ngIf"], ["class", "card-details", 4, "ngIf"], ["class", "selection-indicator", 4, "ngIf"], [1, "category-badge"], [1, "fa-solid", "fa-folder"], ["kendoButton", "", "look", "flat", "size", "small", "icon", "play", "kendoTooltip", "", "title", "Test this action", 3, "click"], [1, "stat"], [1, "fa-solid", "fa-sliders"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-tag"], [1, "card-details"], ["class", "detail-section", 4, "ngIf"], [1, "detail-section"], [1, "parameters-list"], ["class", "parameter-item", 4, "ngFor", "ngForOf"], [1, "parameter-item"], [1, "param-name"], [1, "param-type"], ["class", "param-required", 4, "ngIf"], [1, "param-required"], [1, "result-codes-list"], ["class", "result-code-item", 4, "ngFor", "ngForOf"], [1, "result-code-item"], [1, "code-value"], [1, "code-desc"], [1, "selection-indicator"], [1, "actions-list"], [1, "list-header"], [1, "col-name"], [1, "col-category"], [1, "col-type"], [1, "col-params"], [1, "col-actions"], ["class", "list-item", 3, "selected", "click", 4, "ngFor", "ngForOf"], [1, "list-item", 3, "click"]], template: function ActionGalleryComponent_Template(rf, ctx) { if (rf & 1) {
759
+ i0.ɵɵelementStart(0, "div", 1);
760
+ i0.ɵɵtemplate(1, ActionGalleryComponent_div_1_Template, 19, 21, "div", 2);
761
+ i0.ɵɵelementStart(2, "div", 3);
762
+ i0.ɵɵtemplate(3, ActionGalleryComponent_div_3_Template, 4, 3, "div", 4);
763
+ i0.ɵɵelementStart(4, "div", 5);
764
+ i0.ɵɵtemplate(5, ActionGalleryComponent_div_5_Template, 4, 0, "div", 6);
765
+ i0.ɵɵpipe(6, "async");
766
+ i0.ɵɵtemplate(7, ActionGalleryComponent_div_7_Template, 8, 0, "div", 7);
767
+ i0.ɵɵpipe(8, "async");
768
+ i0.ɵɵpipe(9, "async");
769
+ i0.ɵɵtemplate(10, ActionGalleryComponent_div_10_Template, 3, 5, "div", 8);
770
+ i0.ɵɵpipe(11, "async");
771
+ i0.ɵɵpipe(12, "async");
772
+ i0.ɵɵpipe(13, "async");
773
+ i0.ɵɵpipe(14, "async");
774
+ i0.ɵɵtemplate(15, ActionGalleryComponent_div_15_Template, 14, 3, "div", 9);
775
+ i0.ɵɵpipe(16, "async");
776
+ i0.ɵɵpipe(17, "async");
777
+ i0.ɵɵpipe(18, "async");
778
+ i0.ɵɵpipe(19, "async");
779
+ i0.ɵɵelementEnd()()();
780
+ } if (rf & 2) {
781
+ let tmp_6_0;
782
+ i0.ɵɵclassProp("dark-theme", ctx.config.theme === "dark")("selection-mode", ctx.config.selectionMode);
783
+ i0.ɵɵadvance();
784
+ i0.ɵɵproperty("ngIf", ctx.config.showSearch);
785
+ i0.ɵɵadvance();
786
+ i0.ɵɵclassProp("no-categories", !ctx.config.showCategories);
787
+ i0.ɵɵadvance();
788
+ i0.ɵɵproperty("ngIf", ctx.config.showCategories);
789
+ i0.ɵɵadvance(2);
790
+ i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(6, 12, ctx.isLoading$));
791
+ i0.ɵɵadvance(2);
792
+ i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(8, 14, ctx.isLoading$) && ((tmp_6_0 = i0.ɵɵpipeBind1(9, 16, ctx.filteredActions$)) == null ? null : tmp_6_0.length) === 0);
793
+ i0.ɵɵadvance(3);
794
+ i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(11, 18, ctx.isLoading$) && i0.ɵɵpipeBind1(12, 20, ctx.viewMode$) === "grid" && i0.ɵɵpipeBind1(13, 22, ctx.filteredActions$) && i0.ɵɵpipeBind1(14, 24, ctx.filteredActions$).length > 0);
795
+ i0.ɵɵadvance(5);
796
+ i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(16, 26, ctx.isLoading$) && i0.ɵɵpipeBind1(17, 28, ctx.viewMode$) === "list" && i0.ɵɵpipeBind1(18, 30, ctx.filteredActions$) && i0.ɵɵpipeBind1(19, 32, ctx.filteredActions$).length > 0);
797
+ } }, dependencies: [i1.NgForOf, i1.NgIf, i2.NgControlStatus, i2.FormControlDirective, i3.ButtonComponent, i4.TextBoxComponent, i4.TextBoxPrefixTemplateDirective, i5.LoaderComponent, i6.TooltipDirective, i1.AsyncPipe], styles: ["@import '@progress/kendo-theme-default/scss/all';\n\n//[_ngcontent-%COMP%] Variables\n$primary-color[_ngcontent-%COMP%]: #3b82f6[_ngcontent-%COMP%];\n$secondary-color[_ngcontent-%COMP%]: #8b5cf6[_ngcontent-%COMP%];\n$success-color[_ngcontent-%COMP%]: #10b981[_ngcontent-%COMP%];\n$warning-color[_ngcontent-%COMP%]: #f59e0b[_ngcontent-%COMP%];\n$error-color[_ngcontent-%COMP%]: #ef4444[_ngcontent-%COMP%];\n$dark-bg[_ngcontent-%COMP%]: #1e293b[_ngcontent-%COMP%];\n$light-bg[_ngcontent-%COMP%]: #f8fafc[_ngcontent-%COMP%];\n$card-shadow[_ngcontent-%COMP%]: 0[_ngcontent-%COMP%] 1px[_ngcontent-%COMP%] 3px[_ngcontent-%COMP%] 0[_ngcontent-%COMP%] rgba(0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0.1)[_ngcontent-%COMP%], 0[_ngcontent-%COMP%] 1px[_ngcontent-%COMP%] 2px[_ngcontent-%COMP%] 0[_ngcontent-%COMP%] rgba(0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0.06)[_ngcontent-%COMP%];\n$card-hover-shadow[_ngcontent-%COMP%]: 0[_ngcontent-%COMP%] 10px[_ngcontent-%COMP%] 15px[_ngcontent-%COMP%] -3px[_ngcontent-%COMP%] rgba(0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0.1)[_ngcontent-%COMP%], 0[_ngcontent-%COMP%] 4px[_ngcontent-%COMP%] 6px[_ngcontent-%COMP%] -2px[_ngcontent-%COMP%] rgba(0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0[_ngcontent-%COMP%], 0.05)[_ngcontent-%COMP%];\n$border-radius[_ngcontent-%COMP%]: 12px[_ngcontent-%COMP%];\n$transition-speed[_ngcontent-%COMP%]: 0.3s[_ngcontent-%COMP%];\n\n//[_ngcontent-%COMP%] Animations\n@keyframes[_ngcontent-%COMP%] fadeIn[_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%_scaleIn {\n from {\n transform: scale(0.95);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes _ngcontent-%COMP%_shimmer {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n}\n\n.action-gallery[_ngcontent-%COMP%] {\n height: 100%;\n display: flex;\n flex-direction: column;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n \n &.dark-theme {\n background: $dark-bg;\n color: #f1f5f9;\n \n .gallery-header {\n background: #0f172a;\n border-bottom-color: #334155;\n }\n \n .category-sidebar {\n background: #0f172a;\n border-right-color: #334155;\n }\n \n .action-card {\n background: #1e293b;\n border-color: #334155;\n \n &:hover {\n background: #253449;\n }\n }\n \n .search-input .k-textbox {\n background: #1e293b;\n border-color: #334155;\n color: #f1f5f9;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Gallery[_ngcontent-%COMP%] Header\n.gallery-header[_ngcontent-%COMP%] {\n background: white;\n border-bottom: 1px solid #e5e7eb;\n padding: 1rem 1.5rem;\n \n .header-content {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n }\n \n .search-section {\n flex: 1;\n \n .search-input {\n width: 100%;\n \n .k-textbox {\n padding-left: 2.5rem;\n border-radius: 8px;\n height: 40px;\n transition: all $transition-speed ease;\n \n &:focus {\n border-color: $primary-color;\n box-shadow: 0 0 0 3px rgba($primary-color, 0.1);\n }\n }\n \n .fa-search {\n position: absolute;\n left: 1rem;\n color: #94a3b8;\n }\n }\n }\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n \n .view-toggle {\n .k-button {\n border-radius: 6px;\n }\n }\n \n .stats {\n .stat-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n color: #64748b;\n font-size: 0.875rem;\n \n i {\n color: $primary-color;\n }\n }\n }\n }\n}\n\n//[_ngcontent-%COMP%] Main[_ngcontent-%COMP%] Content\n.gallery-content[_ngcontent-%COMP%] {\n flex: 1;\n display: flex;\n overflow: hidden;\n \n &.no-categories {\n .actions-container {\n margin-left: 0;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Category[_ngcontent-%COMP%] Sidebar\n.category-sidebar[_ngcontent-%COMP%] {\n width: 280px;\n background: $light-bg;\n border-right: 1px solid #e5e7eb;\n overflow-y: auto;\n padding: 1rem;\n \n .category-tree {\n .category-item {\n margin-bottom: 0.25rem;\n cursor: pointer;\n transition: all $transition-speed ease;\n \n &:hover {\n .category-header {\n background: rgba($primary-color, 0.05);\n }\n }\n \n &.selected {\n .category-header {\n background: rgba($primary-color, 0.1);\n color: $primary-color;\n font-weight: 500;\n }\n }\n \n .category-header {\n display: flex;\n align-items: center;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n transition: all $transition-speed ease;\n \n .category-icon {\n width: 20px;\n margin-right: 0.75rem;\n color: #64748b;\n }\n \n .category-name {\n flex: 1;\n }\n \n .category-count {\n font-size: 0.875rem;\n color: #94a3b8;\n background: rgba(0, 0, 0, 0.05);\n padding: 0.125rem 0.5rem;\n border-radius: 12px;\n margin-right: 0.5rem;\n }\n \n .expand-icon {\n color: #94a3b8;\n transition: transform $transition-speed ease;\n \n &.expanded {\n transform: rotate(90deg);\n }\n }\n }\n \n &.sub-category {\n .category-header {\n padding-left: 2.5rem;\n font-size: 0.875rem;\n }\n }\n }\n \n .sub-categories {\n animation: fadeIn $transition-speed ease;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Actions[_ngcontent-%COMP%] Container\n.actions-container[_ngcontent-%COMP%] {\n flex: 1;\n padding: 1.5rem;\n overflow-y: auto;\n background: white;\n}\n\n//[_ngcontent-%COMP%] Loading[_ngcontent-%COMP%] State\n.loading-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #64748b;\n \n p {\n margin-top: 1rem;\n font-size: 1.125rem;\n }\n}\n\n//[_ngcontent-%COMP%] Empty[_ngcontent-%COMP%] State\n.empty-state[_ngcontent-%COMP%] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: #64748b;\n \n i {\n font-size: 4rem;\n color: #cbd5e1;\n margin-bottom: 1rem;\n }\n \n h3 {\n font-size: 1.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #475569;\n }\n \n p {\n margin-bottom: 1.5rem;\n }\n \n .k-button {\n border-radius: 8px;\n }\n}\n\n//[_ngcontent-%COMP%] Grid[_ngcontent-%COMP%] View\n.actions-grid[_ngcontent-%COMP%] {\n display: grid;\n gap: 1.5rem;\n grid-auto-rows: min-content;\n \n .action-card {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: $border-radius;\n overflow: hidden;\n transition: all $transition-speed ease;\n cursor: pointer;\n position: relative;\n \n &.animate {\n animation: _ngcontent-%COMP%_scaleIn 0.4s ease-out;\n animation-fill-mode: both;\n \n @for $i from 1 through 20 {\n &:nth-child(#{$i}) {\n animation-delay: #{$i * 0.05}s;\n }\n }\n }\n \n &:hover {\n transform: translateY(-4px);\n box-shadow: $card-hover-shadow;\n border-color: $primary-color;\n }\n \n &.selected {\n border-color: $primary-color;\n box-shadow: 0 0 0 3px rgba($primary-color, 0.1);\n \n .selection-indicator {\n color: $primary-color;\n }\n }\n \n .card-header {\n padding: 1.25rem;\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n cursor: pointer;\n \n .action-icon {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: linear-gradient(135deg, $primary-color, $secondary-color);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 1.5rem;\n flex-shrink: 0;\n }\n \n .action-info {\n flex: 1;\n min-width: 0;\n \n .action-name {\n font-size: 1.125rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n \n .action-meta {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n \n .category-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n font-size: 0.75rem;\n padding: 0.25rem 0.75rem;\n background: rgba($primary-color, 0.1);\n color: $primary-color;\n border-radius: 16px;\n font-weight: 500;\n \n i {\n font-size: 0.625rem;\n }\n }\n }\n }\n \n .card-actions {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n \n .k-button {\n opacity: 0;\n transition: opacity $transition-speed ease;\n }\n \n .expand-indicator {\n color: #94a3b8;\n transition: transform $transition-speed ease;\n }\n }\n }\n \n &:hover .card-header .card-actions .k-button {\n opacity: 1;\n }\n \n .card-body {\n padding: 0 1.25rem 1.25rem;\n \n .action-description {\n font-size: 0.875rem;\n color: #64748b;\n line-height: 1.5;\n margin-bottom: 1rem;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n \n .action-stats {\n display: flex;\n gap: 1rem;\n flex-wrap: wrap;\n \n .stat {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-size: 0.75rem;\n color: #94a3b8;\n \n i {\n font-size: 0.75rem;\n }\n }\n }\n }\n \n .card-details {\n border-top: 1px solid #e5e7eb;\n padding: 1.25rem;\n animation: fadeIn $transition-speed ease;\n \n .detail-section {\n margin-bottom: 1.25rem;\n \n &:last-child {\n margin-bottom: 0;\n }\n \n h4 {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.75rem;\n color: #475569;\n \n i {\n color: $primary-color;\n }\n }\n \n .parameters-list {\n .parameter-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.375rem 0;\n font-size: 0.8125rem;\n \n .param-name {\n font-weight: 500;\n color: #64748b;\n }\n \n .param-type {\n font-size: 0.75rem;\n color: #94a3b8;\n background: rgba(0, 0, 0, 0.05);\n padding: 0.125rem 0.5rem;\n border-radius: 4px;\n }\n \n .param-required {\n font-size: 0.625rem;\n color: $warning-color;\n text-transform: uppercase;\n font-weight: 600;\n }\n }\n }\n \n .result-codes-list {\n .result-code-item {\n display: flex;\n align-items: baseline;\n gap: 0.5rem;\n padding: 0.375rem 0;\n font-size: 0.8125rem;\n \n .code-value {\n font-weight: 600;\n color: $primary-color;\n font-family: monospace;\n min-width: 60px;\n }\n \n .code-desc {\n color: #64748b;\n font-size: 0.75rem;\n }\n }\n }\n }\n }\n \n .selection-indicator {\n position: absolute;\n top: 1rem;\n right: 1rem;\n font-size: 1.25rem;\n color: #cbd5e1;\n transition: all $transition-speed ease;\n }\n }\n}\n\n//[_ngcontent-%COMP%] List[_ngcontent-%COMP%] View\n.actions-list[_ngcontent-%COMP%] {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: $border-radius;\n overflow: hidden;\n \n .list-header {\n display: grid;\n grid-template-columns: 1fr 200px 120px 100px 100px;\n padding: 1rem 1.5rem;\n background: $light-bg;\n font-weight: 600;\n font-size: 0.875rem;\n color: #64748b;\n border-bottom: 1px solid #e5e7eb;\n }\n \n .list-item {\n display: grid;\n grid-template-columns: 1fr 200px 120px 100px 100px;\n padding: 1rem 1.5rem;\n border-bottom: 1px solid #f1f5f9;\n align-items: center;\n cursor: pointer;\n transition: all $transition-speed ease;\n position: relative;\n \n &:hover {\n background: $light-bg;\n }\n \n &.selected {\n background: rgba($primary-color, 0.05);\n \n .selection-indicator {\n color: $primary-color;\n }\n }\n \n .col-name {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-weight: 500;\n \n .action-icon {\n color: $primary-color;\n }\n }\n \n .col-category,\n .col-type,\n .col-params {\n color: #64748b;\n font-size: 0.875rem;\n }\n \n .col-actions {\n display: flex;\n justify-content: flex-end;\n }\n \n .selection-indicator {\n position: absolute;\n left: 0.5rem;\n font-size: 1rem;\n color: #cbd5e1;\n transition: all $transition-speed ease;\n }\n }\n}\n\n//[_ngcontent-%COMP%] Selection[_ngcontent-%COMP%] Mode[_ngcontent-%COMP%] Adjustments\n.action-gallery.selection-mode[_ngcontent-%COMP%] {\n .actions-grid .action-card,\n .actions-list .list-item {\n padding-left: 2.5rem;\n }\n}"] }); }
798
+ }
799
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionGalleryComponent, [{
800
+ type: Component,
801
+ args: [{ selector: 'mj-action-gallery', template: "<div class=\"action-gallery\" [class.dark-theme]=\"config.theme === 'dark'\" [class.selection-mode]=\"config.selectionMode\">\n <!-- Gallery Header -->\n <div class=\"gallery-header\" *ngIf=\"config.showSearch\">\n <div class=\"header-content\">\n <div class=\"search-section\">\n <kendo-textbox \n #searchInput\n [formControl]=\"searchControl\" \n placeholder=\"Search actions by name, description, or category...\"\n class=\"search-input\"\n [clearButton]=\"true\">\n <ng-template kendoTextBoxPrefixTemplate>\n <i class=\"fa-solid fa-search\"></i>\n </ng-template>\n </kendo-textbox>\n </div>\n \n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button kendoButton \n [toggleable]=\"true\" \n [selected]=\"(viewMode$ | async) === 'grid'\"\n (click)=\"toggleViewMode()\"\n size=\"small\"\n kendoTooltip\n [title]=\"(viewMode$ | async) === 'grid' ? 'Switch to list view' : 'Switch to grid view'\">\n <i class=\"fa-solid\" [class.fa-th]=\"(viewMode$ | async) === 'grid'\" [class.fa-list]=\"(viewMode$ | async) === 'list'\"></i>\n </button>\n </div>\n <div class=\"stats\">\n <span class=\"stat-item\">\n <i class=\"fa-solid fa-bolt\"></i>\n {{ (filteredActions$ | async)?.length }} of {{ totalActions }} actions\n </span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Main Content -->\n <div class=\"gallery-content\" [class.no-categories]=\"!config.showCategories\">\n <!-- Category Sidebar -->\n <div class=\"category-sidebar\" *ngIf=\"config.showCategories\">\n <div class=\"category-tree\">\n <ng-container *ngFor=\"let category of categoryTree$ | async\">\n <div class=\"category-item\" \n [class.selected]=\"(selectedCategory$ | async) === category.id\"\n [class.has-children]=\"category.children && category.children.length > 0\"\n (click)=\"selectCategory(category.id)\">\n \n <div class=\"category-header\">\n <i class=\"fa-solid {{ category.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ category.name }}</span>\n <span class=\"category-count\">{{ category.count }}</span>\n <i class=\"fa-solid fa-chevron-right expand-icon\" \n *ngIf=\"category.children && category.children.length > 0\"\n [class.expanded]=\"expandedCategories.has(category.id)\"\n (click)=\"toggleCategoryExpanded(category.id); $event.stopPropagation()\"></i>\n </div>\n \n <!-- Sub-categories -->\n <div class=\"sub-categories\" *ngIf=\"category.children && expandedCategories.has(category.id)\">\n <div class=\"category-item sub-category\" \n *ngFor=\"let subCategory of category.children\"\n [class.selected]=\"(selectedCategory$ | async) === subCategory.id\"\n (click)=\"selectCategory(subCategory.id); $event.stopPropagation()\">\n <div class=\"category-header\">\n <i class=\"fa-solid {{ subCategory.icon }} category-icon\"></i>\n <span class=\"category-name\">{{ subCategory.name }}</span>\n <span class=\"category-count\">{{ subCategory.count }}</span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n <!-- Loading State -->\n <div class=\"loading-state\" *ngIf=\"isLoading$ | async\">\n <kendo-loader size=\"large\"></kendo-loader>\n <p>Loading actions...</p>\n </div>\n\n <!-- Empty State -->\n <div class=\"empty-state\" *ngIf=\"!(isLoading$ | async) && (filteredActions$ | async)?.length === 0\">\n <i class=\"fa-solid fa-search-minus\"></i>\n <h3>No actions found</h3>\n <p>Try adjusting your search criteria or selecting a different category</p>\n <button kendoButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n\n <!-- Grid View -->\n <div class=\"actions-grid\" \n *ngIf=\"!(isLoading$ | async) && (viewMode$ | async) === 'grid' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0\"\n [style.grid-template-columns]=\"'repeat(' + (config.gridColumns || 3) + ', 1fr)'\">\n \n <div class=\"action-card\" \n *ngFor=\"let action of filteredActions$ | async\"\n [class.expanded]=\"action.expanded\"\n [class.selected]=\"action.selected\"\n [class.animate]=\"animateCards\"\n [class.hover]=\"hoveredAction === action.ID\"\n (mouseenter)=\"hoveredAction = action.ID\"\n (mouseleave)=\"hoveredAction = null\"\n (click)=\"toggleActionSelection(action)\">\n \n <!-- Card Header -->\n <div class=\"card-header\" (click)=\"toggleActionExpanded(action); $event.stopPropagation()\">\n <div class=\"action-icon\">\n <i class=\"fa-solid {{ getActionIcon(action) }}\"></i>\n </div>\n <div class=\"action-info\">\n <h3 class=\"action-name\">{{ action.Name }}</h3>\n <div class=\"action-meta\">\n <span class=\"category-badge\" *ngIf=\"action.Category\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.Category }}\n </span>\n </div>\n </div>\n <div class=\"card-actions\">\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n *ngIf=\"config.enableQuickTest\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n <i class=\"fa-solid expand-indicator\"\n [class.fa-chevron-down]=\"!action.expanded\"\n [class.fa-chevron-up]=\"action.expanded\"></i>\n </div>\n </div>\n \n <!-- Card Body -->\n <div class=\"card-body\">\n <p class=\"action-description\">{{ action.Description || 'No description available' }}</p>\n \n <!-- Quick Stats -->\n <div class=\"action-stats\">\n <span class=\"stat\" *ngIf=\"action.parameters?.length\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ action.parameters?.length || 0 }} params\n </span>\n <span class=\"stat\" *ngIf=\"action.resultCodes?.length\">\n <i class=\"fa-solid fa-code-branch\"></i>\n {{ action.resultCodes?.length || 0 }} results\n </span>\n <span class=\"stat\" *ngIf=\"action.Type\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </span>\n </div>\n </div>\n \n <!-- Expanded Details -->\n <div class=\"card-details\" *ngIf=\"action.expanded\">\n <!-- Parameters -->\n <div class=\"detail-section\" *ngIf=\"action.parameters && action.parameters.length > 0\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </h4>\n <div class=\"parameters-list\">\n <div class=\"parameter-item\" *ngFor=\"let param of action.parameters\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n <span class=\"param-required\" *ngIf=\"param.IsRequired\">Required</span>\n </div>\n </div>\n </div>\n \n <!-- Result Codes -->\n <div class=\"detail-section\" *ngIf=\"action.resultCodes && action.resultCodes.length > 0\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Result Codes\n </h4>\n <div class=\"result-codes-list\">\n <div class=\"result-code-item\" *ngFor=\"let code of action.resultCodes\">\n <span class=\"code-value\">{{ code.ResultCode }}</span>\n <span class=\"code-desc\">{{ code.Description }}</span>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\" *ngIf=\"config.selectionMode\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n </div>\n </div>\n\n <!-- List View -->\n <div class=\"actions-list\" \n *ngIf=\"!(isLoading$ | async) && (viewMode$ | async) === 'list' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0\">\n \n <div class=\"list-header\">\n <span class=\"col-name\">Name</span>\n <span class=\"col-category\">Category</span>\n <span class=\"col-type\">Type</span>\n <span class=\"col-params\">Parameters</span>\n <span class=\"col-actions\">Actions</span>\n </div>\n \n <div class=\"list-item\" \n *ngFor=\"let action of filteredActions$ | async\"\n [class.selected]=\"action.selected\"\n (click)=\"toggleActionSelection(action)\">\n \n <span class=\"col-name\">\n <i class=\"fa-solid {{ getActionIcon(action) }} action-icon\"></i>\n {{ action.Name }}\n </span>\n <span class=\"col-category\">{{ action.Category || '-' }}</span>\n <span class=\"col-type\">{{ action.Type || '-' }}</span>\n <span class=\"col-params\">{{ action.parameters?.length || 0 }}</span>\n <span class=\"col-actions\">\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n *ngIf=\"config.enableQuickTest\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n </span>\n \n <!-- Selection Indicator -->\n <div class=\"selection-indicator\" *ngIf=\"config.selectionMode\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n", styles: ["@import '@progress/kendo-theme-default/scss/all';\n\n// Variables\n$primary-color: #3b82f6;\n$secondary-color: #8b5cf6;\n$success-color: #10b981;\n$warning-color: #f59e0b;\n$error-color: #ef4444;\n$dark-bg: #1e293b;\n$light-bg: #f8fafc;\n$card-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px 0 rgba(0, 0, 0, 0.06);\n$card-hover-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n$border-radius: 12px;\n$transition-speed: 0.3s;\n\n// Animations\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(10px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@keyframes scaleIn {\n from {\n transform: scale(0.95);\n opacity: 0;\n }\n to {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n@keyframes shimmer {\n 0% {\n background-position: -1000px 0;\n }\n 100% {\n background-position: 1000px 0;\n }\n}\n\n.action-gallery {\n height: 100%;\n display: flex;\n flex-direction: column;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n \n &.dark-theme {\n background: $dark-bg;\n color: #f1f5f9;\n \n .gallery-header {\n background: #0f172a;\n border-bottom-color: #334155;\n }\n \n .category-sidebar {\n background: #0f172a;\n border-right-color: #334155;\n }\n \n .action-card {\n background: #1e293b;\n border-color: #334155;\n \n &:hover {\n background: #253449;\n }\n }\n \n .search-input .k-textbox {\n background: #1e293b;\n border-color: #334155;\n color: #f1f5f9;\n }\n }\n}\n\n// Gallery Header\n.gallery-header {\n background: white;\n border-bottom: 1px solid #e5e7eb;\n padding: 1rem 1.5rem;\n \n .header-content {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n }\n \n .search-section {\n flex: 1;\n \n .search-input {\n width: 100%;\n \n .k-textbox {\n padding-left: 2.5rem;\n border-radius: 8px;\n height: 40px;\n transition: all $transition-speed ease;\n \n &:focus {\n border-color: $primary-color;\n box-shadow: 0 0 0 3px rgba($primary-color, 0.1);\n }\n }\n \n .fa-search {\n position: absolute;\n left: 1rem;\n color: #94a3b8;\n }\n }\n }\n \n .header-actions {\n display: flex;\n align-items: center;\n gap: 1.5rem;\n \n .view-toggle {\n .k-button {\n border-radius: 6px;\n }\n }\n \n .stats {\n .stat-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n color: #64748b;\n font-size: 0.875rem;\n \n i {\n color: $primary-color;\n }\n }\n }\n }\n}\n\n// Main Content\n.gallery-content {\n flex: 1;\n display: flex;\n overflow: hidden;\n \n &.no-categories {\n .actions-container {\n margin-left: 0;\n }\n }\n}\n\n// Category Sidebar\n.category-sidebar {\n width: 280px;\n background: $light-bg;\n border-right: 1px solid #e5e7eb;\n overflow-y: auto;\n padding: 1rem;\n \n .category-tree {\n .category-item {\n margin-bottom: 0.25rem;\n cursor: pointer;\n transition: all $transition-speed ease;\n \n &:hover {\n .category-header {\n background: rgba($primary-color, 0.05);\n }\n }\n \n &.selected {\n .category-header {\n background: rgba($primary-color, 0.1);\n color: $primary-color;\n font-weight: 500;\n }\n }\n \n .category-header {\n display: flex;\n align-items: center;\n padding: 0.75rem 1rem;\n border-radius: 8px;\n transition: all $transition-speed ease;\n \n .category-icon {\n width: 20px;\n margin-right: 0.75rem;\n color: #64748b;\n }\n \n .category-name {\n flex: 1;\n }\n \n .category-count {\n font-size: 0.875rem;\n color: #94a3b8;\n background: rgba(0, 0, 0, 0.05);\n padding: 0.125rem 0.5rem;\n border-radius: 12px;\n margin-right: 0.5rem;\n }\n \n .expand-icon {\n color: #94a3b8;\n transition: transform $transition-speed ease;\n \n &.expanded {\n transform: rotate(90deg);\n }\n }\n }\n \n &.sub-category {\n .category-header {\n padding-left: 2.5rem;\n font-size: 0.875rem;\n }\n }\n }\n \n .sub-categories {\n animation: fadeIn $transition-speed ease;\n }\n }\n}\n\n// Actions Container\n.actions-container {\n flex: 1;\n padding: 1.5rem;\n overflow-y: auto;\n background: white;\n}\n\n// Loading State\n.loading-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n color: #64748b;\n \n p {\n margin-top: 1rem;\n font-size: 1.125rem;\n }\n}\n\n// Empty State\n.empty-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n text-align: center;\n color: #64748b;\n \n i {\n font-size: 4rem;\n color: #cbd5e1;\n margin-bottom: 1rem;\n }\n \n h3 {\n font-size: 1.5rem;\n font-weight: 600;\n margin-bottom: 0.5rem;\n color: #475569;\n }\n \n p {\n margin-bottom: 1.5rem;\n }\n \n .k-button {\n border-radius: 8px;\n }\n}\n\n// Grid View\n.actions-grid {\n display: grid;\n gap: 1.5rem;\n grid-auto-rows: min-content;\n \n .action-card {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: $border-radius;\n overflow: hidden;\n transition: all $transition-speed ease;\n cursor: pointer;\n position: relative;\n \n &.animate {\n animation: scaleIn 0.4s ease-out;\n animation-fill-mode: both;\n \n @for $i from 1 through 20 {\n &:nth-child(#{$i}) {\n animation-delay: #{$i * 0.05}s;\n }\n }\n }\n \n &:hover {\n transform: translateY(-4px);\n box-shadow: $card-hover-shadow;\n border-color: $primary-color;\n }\n \n &.selected {\n border-color: $primary-color;\n box-shadow: 0 0 0 3px rgba($primary-color, 0.1);\n \n .selection-indicator {\n color: $primary-color;\n }\n }\n \n .card-header {\n padding: 1.25rem;\n display: flex;\n align-items: flex-start;\n gap: 1rem;\n cursor: pointer;\n \n .action-icon {\n width: 48px;\n height: 48px;\n border-radius: 10px;\n background: linear-gradient(135deg, $primary-color, $secondary-color);\n display: flex;\n align-items: center;\n justify-content: center;\n color: white;\n font-size: 1.5rem;\n flex-shrink: 0;\n }\n \n .action-info {\n flex: 1;\n min-width: 0;\n \n .action-name {\n font-size: 1.125rem;\n font-weight: 600;\n margin: 0 0 0.5rem 0;\n line-height: 1.2;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n }\n \n .action-meta {\n display: flex;\n gap: 0.5rem;\n flex-wrap: wrap;\n \n .category-badge {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n font-size: 0.75rem;\n padding: 0.25rem 0.75rem;\n background: rgba($primary-color, 0.1);\n color: $primary-color;\n border-radius: 16px;\n font-weight: 500;\n \n i {\n font-size: 0.625rem;\n }\n }\n }\n }\n \n .card-actions {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n \n .k-button {\n opacity: 0;\n transition: opacity $transition-speed ease;\n }\n \n .expand-indicator {\n color: #94a3b8;\n transition: transform $transition-speed ease;\n }\n }\n }\n \n &:hover .card-header .card-actions .k-button {\n opacity: 1;\n }\n \n .card-body {\n padding: 0 1.25rem 1.25rem;\n \n .action-description {\n font-size: 0.875rem;\n color: #64748b;\n line-height: 1.5;\n margin-bottom: 1rem;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n }\n \n .action-stats {\n display: flex;\n gap: 1rem;\n flex-wrap: wrap;\n \n .stat {\n display: flex;\n align-items: center;\n gap: 0.375rem;\n font-size: 0.75rem;\n color: #94a3b8;\n \n i {\n font-size: 0.75rem;\n }\n }\n }\n }\n \n .card-details {\n border-top: 1px solid #e5e7eb;\n padding: 1.25rem;\n animation: fadeIn $transition-speed ease;\n \n .detail-section {\n margin-bottom: 1.25rem;\n \n &:last-child {\n margin-bottom: 0;\n }\n \n h4 {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n font-size: 0.875rem;\n font-weight: 600;\n margin-bottom: 0.75rem;\n color: #475569;\n \n i {\n color: $primary-color;\n }\n }\n \n .parameters-list {\n .parameter-item {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.375rem 0;\n font-size: 0.8125rem;\n \n .param-name {\n font-weight: 500;\n color: #64748b;\n }\n \n .param-type {\n font-size: 0.75rem;\n color: #94a3b8;\n background: rgba(0, 0, 0, 0.05);\n padding: 0.125rem 0.5rem;\n border-radius: 4px;\n }\n \n .param-required {\n font-size: 0.625rem;\n color: $warning-color;\n text-transform: uppercase;\n font-weight: 600;\n }\n }\n }\n \n .result-codes-list {\n .result-code-item {\n display: flex;\n align-items: baseline;\n gap: 0.5rem;\n padding: 0.375rem 0;\n font-size: 0.8125rem;\n \n .code-value {\n font-weight: 600;\n color: $primary-color;\n font-family: monospace;\n min-width: 60px;\n }\n \n .code-desc {\n color: #64748b;\n font-size: 0.75rem;\n }\n }\n }\n }\n }\n \n .selection-indicator {\n position: absolute;\n top: 1rem;\n right: 1rem;\n font-size: 1.25rem;\n color: #cbd5e1;\n transition: all $transition-speed ease;\n }\n }\n}\n\n// List View\n.actions-list {\n background: white;\n border: 1px solid #e5e7eb;\n border-radius: $border-radius;\n overflow: hidden;\n \n .list-header {\n display: grid;\n grid-template-columns: 1fr 200px 120px 100px 100px;\n padding: 1rem 1.5rem;\n background: $light-bg;\n font-weight: 600;\n font-size: 0.875rem;\n color: #64748b;\n border-bottom: 1px solid #e5e7eb;\n }\n \n .list-item {\n display: grid;\n grid-template-columns: 1fr 200px 120px 100px 100px;\n padding: 1rem 1.5rem;\n border-bottom: 1px solid #f1f5f9;\n align-items: center;\n cursor: pointer;\n transition: all $transition-speed ease;\n position: relative;\n \n &:hover {\n background: $light-bg;\n }\n \n &.selected {\n background: rgba($primary-color, 0.05);\n \n .selection-indicator {\n color: $primary-color;\n }\n }\n \n .col-name {\n display: flex;\n align-items: center;\n gap: 0.75rem;\n font-weight: 500;\n \n .action-icon {\n color: $primary-color;\n }\n }\n \n .col-category,\n .col-type,\n .col-params {\n color: #64748b;\n font-size: 0.875rem;\n }\n \n .col-actions {\n display: flex;\n justify-content: flex-end;\n }\n \n .selection-indicator {\n position: absolute;\n left: 0.5rem;\n font-size: 1rem;\n color: #cbd5e1;\n transition: all $transition-speed ease;\n }\n }\n}\n\n// Selection Mode Adjustments\n.action-gallery.selection-mode {\n .actions-grid .action-card,\n .actions-list .list-item {\n padding-left: 2.5rem;\n }\n}"] }]
802
+ }], () => [], { config: [{
803
+ type: Input
804
+ }], preSelectedActions: [{
805
+ type: Input
806
+ }], actionSelected: [{
807
+ type: Output
808
+ }], actionsSelected: [{
809
+ type: Output
810
+ }], actionTestRequested: [{
811
+ type: Output
812
+ }], searchInput: [{
813
+ type: ViewChild,
814
+ args: ['searchInput', { static: false }]
815
+ }] }); })();
816
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionGalleryComponent, { className: "ActionGalleryComponent", filePath: "lib/action-gallery.component.ts", lineNumber: 39 }); })();
817
+ //# sourceMappingURL=action-gallery.component.js.map