@memberjunction/ng-action-gallery 5.22.0 → 5.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/action-gallery-dialog.service.d.ts +2 -2
- package/dist/lib/action-gallery-dialog.service.d.ts.map +1 -1
- package/dist/lib/action-gallery-dialog.service.js +17 -19
- package/dist/lib/action-gallery-dialog.service.js.map +1 -1
- package/dist/lib/action-gallery.component.js +58 -62
- package/dist/lib/action-gallery.component.js.map +1 -1
- package/dist/module.d.ts +4 -13
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +6 -44
- package/dist/module.js.map +1 -1
- package/package.json +7 -17
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ViewContainerRef } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { MJDialogService } from '@memberjunction/ng-ui-components';
|
|
3
3
|
import { ActionGalleryConfig } from './action-gallery.component';
|
|
4
4
|
import { MJActionEntity } from '@memberjunction/core-entities';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
@@ -17,7 +17,7 @@ export interface ActionGalleryDialogConfig extends ActionGalleryConfig {
|
|
|
17
17
|
export declare class ActionGalleryDialogService {
|
|
18
18
|
private dialogService;
|
|
19
19
|
private dialogRef;
|
|
20
|
-
constructor(dialogService:
|
|
20
|
+
constructor(dialogService: MJDialogService);
|
|
21
21
|
/**
|
|
22
22
|
* Opens the Action Gallery in a dialog for single selection
|
|
23
23
|
* @param config Configuration for the gallery
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-gallery-dialog.service.d.ts","sourceRoot":"","sources":["../../src/lib/action-gallery-dialog.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"action-gallery-dialog.service.d.ts","sourceRoot":"","sources":["../../src/lib/action-gallery-dialog.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAiD,MAAM,kCAAkC,CAAC;AAClH,OAAO,EAA0B,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAW,MAAM,MAAM,CAAC;;AAE3C,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,qBAGa,0BAA0B;IAGzB,OAAO,CAAC,aAAa;IAFjC,OAAO,CAAC,SAAS,CAA4B;gBAEzB,aAAa,EAAE,eAAe;IAElD;;;;;OAKG;IACH,sBAAsB,CACpB,MAAM,GAAE,yBAA8B,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC;IA4BpC;;;;;OAKG;IACH,qBAAqB,CACnB,MAAM,GAAE,yBAA8B,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,UAAU,CAAC,cAAc,EAAE,CAAC;IA4B/B;;;;OAIG;IACH,eAAe,CACb,MAAM,GAAE,yBAA8B,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,IAAI;IA8BP;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,UAAU;yCAtIP,0BAA0B;6CAA1B,0BAA0B;CAiKtC"}
|
|
@@ -2,7 +2,7 @@ import { Injectable } from '@angular/core';
|
|
|
2
2
|
import { ActionGalleryComponent } from './action-gallery.component';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@
|
|
5
|
+
import * as i1 from "@memberjunction/ng-ui-components";
|
|
6
6
|
export class ActionGalleryDialogService {
|
|
7
7
|
constructor(dialogService) {
|
|
8
8
|
this.dialogService = dialogService;
|
|
@@ -24,8 +24,9 @@ export class ActionGalleryDialogService {
|
|
|
24
24
|
};
|
|
25
25
|
this.openDialog(galleryConfig, viewContainerRef, (component) => {
|
|
26
26
|
// Handle dialog result
|
|
27
|
-
this.dialogRef.
|
|
28
|
-
|
|
27
|
+
this.dialogRef.Result.subscribe((result) => {
|
|
28
|
+
const action = result;
|
|
29
|
+
if (action && action.text === (config.submitButtonText || 'Select')) {
|
|
29
30
|
const selectedActions = component.getSelectedActions();
|
|
30
31
|
resultSubject.next(selectedActions[0] || null);
|
|
31
32
|
}
|
|
@@ -54,8 +55,9 @@ export class ActionGalleryDialogService {
|
|
|
54
55
|
};
|
|
55
56
|
this.openDialog(galleryConfig, viewContainerRef, (component) => {
|
|
56
57
|
// Handle dialog result
|
|
57
|
-
this.dialogRef.
|
|
58
|
-
|
|
58
|
+
this.dialogRef.Result.subscribe((result) => {
|
|
59
|
+
const action = result;
|
|
60
|
+
if (action && action.text === (config.submitButtonText || 'Select')) {
|
|
59
61
|
const selectedActions = component.getSelectedActions();
|
|
60
62
|
resultSubject.next(selectedActions);
|
|
61
63
|
}
|
|
@@ -84,19 +86,17 @@ export class ActionGalleryDialogService {
|
|
|
84
86
|
width: config.width || 1200,
|
|
85
87
|
height: config.height || 800,
|
|
86
88
|
minWidth: config.minWidth || 800,
|
|
87
|
-
minHeight: config.minHeight || 600,
|
|
88
89
|
content: ActionGalleryComponent,
|
|
89
90
|
actions: [
|
|
90
|
-
{ text: 'Close'
|
|
91
|
-
]
|
|
92
|
-
preventAction: () => false
|
|
91
|
+
{ text: 'Close' }
|
|
92
|
+
]
|
|
93
93
|
};
|
|
94
94
|
this.dialogRef = this.dialogService.open(dialogSettings);
|
|
95
95
|
// Configure the component
|
|
96
|
-
const component = this.dialogRef.
|
|
96
|
+
const component = this.dialogRef.Content.instance;
|
|
97
97
|
component.config = galleryConfig;
|
|
98
98
|
// Handle dialog close
|
|
99
|
-
this.dialogRef.
|
|
99
|
+
this.dialogRef.Result.subscribe(() => {
|
|
100
100
|
this.dialogRef = null;
|
|
101
101
|
});
|
|
102
102
|
}
|
|
@@ -105,7 +105,7 @@ export class ActionGalleryDialogService {
|
|
|
105
105
|
*/
|
|
106
106
|
close() {
|
|
107
107
|
if (this.dialogRef) {
|
|
108
|
-
this.dialogRef.
|
|
108
|
+
this.dialogRef.Close();
|
|
109
109
|
this.dialogRef = null;
|
|
110
110
|
}
|
|
111
111
|
}
|
|
@@ -121,23 +121,21 @@ export class ActionGalleryDialogService {
|
|
|
121
121
|
width: config.width || 1200,
|
|
122
122
|
height: config.height || 800,
|
|
123
123
|
minWidth: config.minWidth || 800,
|
|
124
|
-
minHeight: config.minHeight || 600,
|
|
125
124
|
content: ActionGalleryComponent,
|
|
126
125
|
actions: [
|
|
127
126
|
{ text: config.cancelButtonText || 'Cancel' },
|
|
128
|
-
{ text: config.submitButtonText || 'Select',
|
|
129
|
-
]
|
|
130
|
-
preventAction: () => false
|
|
127
|
+
{ text: config.submitButtonText || 'Select', primary: true }
|
|
128
|
+
]
|
|
131
129
|
};
|
|
132
130
|
this.dialogRef = this.dialogService.open(dialogSettings);
|
|
133
131
|
// Configure the component
|
|
134
|
-
const component = this.dialogRef.
|
|
132
|
+
const component = this.dialogRef.Content.instance;
|
|
135
133
|
component.config = config;
|
|
136
134
|
component.preSelectedActions = config.preSelectedActions || [];
|
|
137
135
|
// Handle result
|
|
138
136
|
resultHandler(component);
|
|
139
137
|
}
|
|
140
|
-
static { this.ɵfac = function ActionGalleryDialogService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionGalleryDialogService)(i0.ɵɵinject(i1.
|
|
138
|
+
static { this.ɵfac = function ActionGalleryDialogService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionGalleryDialogService)(i0.ɵɵinject(i1.MJDialogService)); }; }
|
|
141
139
|
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: ActionGalleryDialogService, factory: ActionGalleryDialogService.ɵfac, providedIn: 'root' }); }
|
|
142
140
|
}
|
|
143
141
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionGalleryDialogService, [{
|
|
@@ -145,5 +143,5 @@ export class ActionGalleryDialogService {
|
|
|
145
143
|
args: [{
|
|
146
144
|
providedIn: 'root'
|
|
147
145
|
}]
|
|
148
|
-
}], () => [{ type: i1.
|
|
146
|
+
}], () => [{ type: i1.MJDialogService }], null); })();
|
|
149
147
|
//# sourceMappingURL=action-gallery-dialog.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-gallery-dialog.service.js","sourceRoot":"","sources":["../../src/lib/action-gallery-dialog.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAuB,MAAM,4BAA4B,CAAC;AAEzF,OAAO,EAAc,OAAO,EAAE,MAAM,MAAM,CAAC;;;AAgB3C,MAAM,OAAO,0BAA0B;IAGrC,YAAoB,
|
|
1
|
+
{"version":3,"file":"action-gallery-dialog.service.js","sourceRoot":"","sources":["../../src/lib/action-gallery-dialog.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, ViewContainerRef } from '@angular/core';\nimport { MJDialogService, MJDialogRef, MJDialogAction, MJDialogSettings } from '@memberjunction/ng-ui-components';\nimport { ActionGalleryComponent, ActionGalleryConfig } from './action-gallery.component';\nimport { MJActionEntity } from '@memberjunction/core-entities';\nimport { Observable, Subject } from 'rxjs';\n\nexport interface ActionGalleryDialogConfig extends ActionGalleryConfig {\n title?: string;\n width?: number;\n height?: number;\n minWidth?: number;\n minHeight?: number;\n submitButtonText?: string;\n cancelButtonText?: string;\n preSelectedActions?: string[];\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ActionGalleryDialogService {\n private dialogRef: MJDialogRef | null = null;\n\n constructor(private dialogService: MJDialogService) {}\n\n /**\n * Opens the Action Gallery in a dialog for single selection\n * @param config Configuration for the gallery\n * @param viewContainerRef Optional ViewContainerRef for proper positioning\n * @returns Observable that emits the selected action when confirmed\n */\n openForSingleSelection(\n config: ActionGalleryDialogConfig = {},\n viewContainerRef?: ViewContainerRef\n ): Observable<MJActionEntity | null> {\n const resultSubject = new Subject<MJActionEntity | null>();\n\n // Configure for single selection\n const galleryConfig: ActionGalleryDialogConfig = {\n ...config,\n selectionMode: true,\n multiSelect: false\n };\n\n this.openDialog(galleryConfig, viewContainerRef, (component) => {\n // Handle dialog result\n this.dialogRef!.Result.subscribe((result) => {\n const action = result as MJDialogAction | undefined;\n if (action && action.text === (config.submitButtonText || 'Select')) {\n const selectedActions = component.getSelectedActions();\n resultSubject.next(selectedActions[0] || null);\n } else {\n resultSubject.next(null);\n }\n resultSubject.complete();\n this.dialogRef = null;\n });\n });\n\n return resultSubject.asObservable();\n }\n\n /**\n * Opens the Action Gallery in a dialog for multiple selection\n * @param config Configuration for the gallery\n * @param viewContainerRef Optional ViewContainerRef for proper positioning\n * @returns Observable that emits the selected actions when confirmed\n */\n openForMultiSelection(\n config: ActionGalleryDialogConfig = {},\n viewContainerRef?: ViewContainerRef\n ): Observable<MJActionEntity[]> {\n const resultSubject = new Subject<MJActionEntity[]>();\n\n // Configure for multi selection\n const galleryConfig: ActionGalleryDialogConfig = {\n ...config,\n selectionMode: true,\n multiSelect: true\n };\n\n this.openDialog(galleryConfig, viewContainerRef, (component) => {\n // Handle dialog result\n this.dialogRef!.Result.subscribe((result) => {\n const action = result as MJDialogAction | undefined;\n if (action && action.text === (config.submitButtonText || 'Select')) {\n const selectedActions = component.getSelectedActions();\n resultSubject.next(selectedActions);\n } else {\n resultSubject.next([]);\n }\n resultSubject.complete();\n this.dialogRef = null;\n });\n });\n\n return resultSubject.asObservable();\n }\n\n /**\n * Opens the Action Gallery in a dialog for browsing only (no selection)\n * @param config Configuration for the gallery\n * @param viewContainerRef Optional ViewContainerRef for proper positioning\n */\n openForBrowsing(\n config: ActionGalleryDialogConfig = {},\n viewContainerRef?: ViewContainerRef\n ): void {\n const galleryConfig: ActionGalleryDialogConfig = {\n ...config,\n selectionMode: false,\n enableQuickTest: true\n };\n\n const dialogSettings: MJDialogSettings = {\n title: config.title || 'Action Gallery',\n width: config.width || 1200,\n height: config.height || 800,\n minWidth: config.minWidth || 800,\n content: ActionGalleryComponent,\n actions: [\n { text: 'Close' }\n ]\n };\n\n this.dialogRef = this.dialogService.open(dialogSettings);\n\n // Configure the component\n const component = this.dialogRef.Content!.instance as unknown as ActionGalleryComponent;\n component.config = galleryConfig;\n\n // Handle dialog close\n this.dialogRef.Result.subscribe(() => {\n this.dialogRef = null;\n });\n }\n\n /**\n * Closes the currently open dialog\n */\n close(): void {\n if (this.dialogRef) {\n this.dialogRef.Close();\n this.dialogRef = null;\n }\n }\n\n /**\n * Checks if a dialog is currently open\n */\n isOpen(): boolean {\n return this.dialogRef !== null;\n }\n\n private openDialog(\n config: ActionGalleryDialogConfig,\n viewContainerRef: ViewContainerRef | undefined,\n resultHandler: (component: ActionGalleryComponent) => void\n ): void {\n const dialogSettings: MJDialogSettings = {\n title: config.title || 'Select Actions',\n width: config.width || 1200,\n height: config.height || 800,\n minWidth: config.minWidth || 800,\n content: ActionGalleryComponent,\n actions: [\n { text: config.cancelButtonText || 'Cancel' },\n { text: config.submitButtonText || 'Select', primary: true }\n ]\n };\n\n this.dialogRef = this.dialogService.open(dialogSettings);\n\n // Configure the component\n const component = this.dialogRef.Content!.instance as unknown as ActionGalleryComponent;\n component.config = config;\n component.preSelectedActions = config.preSelectedActions || [];\n\n // Handle result\n resultHandler(component);\n }\n}"]}
|
|
@@ -5,46 +5,40 @@ import { RunView } from '@memberjunction/core';
|
|
|
5
5
|
import { UUIDsEqual } from '@memberjunction/global';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/forms";
|
|
8
|
-
import * as i2 from "@
|
|
9
|
-
import * as i3 from "@
|
|
10
|
-
import * as i4 from "@
|
|
11
|
-
import * as i5 from "@memberjunction/ng-shared-generic";
|
|
12
|
-
import * as i6 from "@angular/common";
|
|
8
|
+
import * as i2 from "@memberjunction/ng-ui-components";
|
|
9
|
+
import * as i3 from "@memberjunction/ng-shared-generic";
|
|
10
|
+
import * as i4 from "@angular/common";
|
|
13
11
|
const _c0 = ["searchInput"];
|
|
14
12
|
const _forTrack0 = ($index, $item) => $item.id;
|
|
15
13
|
const _forTrack1 = ($index, $item) => $item.ID;
|
|
16
|
-
function ActionGalleryComponent_Conditional_1_ng_template_5_Template(rf, ctx) { if (rf & 1) {
|
|
17
|
-
i0.ɵɵelement(0, "i", 21);
|
|
18
|
-
} }
|
|
19
14
|
function ActionGalleryComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
20
15
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
21
|
-
i0.ɵɵelementStart(0, "div", 2)(1, "div", 10)(2, "div", 11)(3, "
|
|
22
|
-
i0.ɵɵ
|
|
16
|
+
i0.ɵɵelementStart(0, "div", 2)(1, "div", 10)(2, "div", 11)(3, "div", 12);
|
|
17
|
+
i0.ɵɵelement(4, "i", 13)(5, "input", 14, 0);
|
|
23
18
|
i0.ɵɵelementEnd()();
|
|
24
|
-
i0.ɵɵelementStart(
|
|
25
|
-
i0.ɵɵpipe(9, "async");
|
|
19
|
+
i0.ɵɵelementStart(7, "div", 15)(8, "div", 16)(9, "button", 17);
|
|
26
20
|
i0.ɵɵpipe(10, "async");
|
|
27
|
-
i0.ɵɵlistener("click", function
|
|
28
|
-
i0.ɵɵelement(11, "i",
|
|
21
|
+
i0.ɵɵlistener("click", function ActionGalleryComponent_Conditional_1_Template_button_click_9_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleViewMode()); });
|
|
22
|
+
i0.ɵɵelement(11, "i", 18);
|
|
29
23
|
i0.ɵɵpipe(12, "async");
|
|
30
24
|
i0.ɵɵpipe(13, "async");
|
|
31
25
|
i0.ɵɵelementEnd()();
|
|
32
|
-
i0.ɵɵelementStart(14, "div",
|
|
33
|
-
i0.ɵɵelement(16, "i",
|
|
26
|
+
i0.ɵɵelementStart(14, "div", 19)(15, "span", 20);
|
|
27
|
+
i0.ɵɵelement(16, "i", 21);
|
|
34
28
|
i0.ɵɵtext(17);
|
|
35
29
|
i0.ɵɵpipe(18, "async");
|
|
36
30
|
i0.ɵɵelementEnd()()()()();
|
|
37
31
|
} if (rf & 2) {
|
|
38
|
-
let
|
|
32
|
+
let tmp_6_0;
|
|
39
33
|
const ctx_r1 = i0.ɵɵnextContext();
|
|
40
|
-
i0.ɵɵadvance(3);
|
|
41
|
-
i0.ɵɵproperty("formControl", ctx_r1.searchControl)("clearButton", true);
|
|
42
34
|
i0.ɵɵadvance(5);
|
|
43
|
-
i0.ɵɵproperty("
|
|
44
|
-
i0.ɵɵadvance(
|
|
45
|
-
i0.ɵɵ
|
|
35
|
+
i0.ɵɵproperty("formControl", ctx_r1.searchControl);
|
|
36
|
+
i0.ɵɵadvance(4);
|
|
37
|
+
i0.ɵɵproperty("title", i0.ɵɵpipeBind1(10, 8, ctx_r1.viewMode$) === "grid" ? "Switch to list view" : "Switch to grid view");
|
|
38
|
+
i0.ɵɵadvance(2);
|
|
39
|
+
i0.ɵɵclassProp("fa-th", i0.ɵɵpipeBind1(12, 10, ctx_r1.viewMode$) === "grid")("fa-list", i0.ɵɵpipeBind1(13, 12, ctx_r1.viewMode$) === "list");
|
|
46
40
|
i0.ɵɵadvance(6);
|
|
47
|
-
i0.ɵɵtextInterpolate2(" ", (
|
|
41
|
+
i0.ɵɵtextInterpolate2(" ", (tmp_6_0 = i0.ɵɵpipeBind1(18, 14, ctx_r1.filteredActions$)) == null ? null : tmp_6_0.length, " of ", ctx_r1.totalActions, " actions ");
|
|
48
42
|
} }
|
|
49
43
|
function ActionGalleryComponent_Conditional_3_For_3_Conditional_8_Template(rf, ctx) { if (rf & 1) {
|
|
50
44
|
const _r5 = i0.ɵɵgetCurrentView();
|
|
@@ -165,11 +159,12 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_10_Template(rf,
|
|
|
165
159
|
const _r11 = i0.ɵɵgetCurrentView();
|
|
166
160
|
i0.ɵɵelementStart(0, "button", 55);
|
|
167
161
|
i0.ɵɵlistener("click", function ActionGalleryComponent_Conditional_10_For_2_Conditional_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)); });
|
|
162
|
+
i0.ɵɵelement(1, "i", 56);
|
|
168
163
|
i0.ɵɵelementEnd();
|
|
169
164
|
} }
|
|
170
165
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_16_Template(rf, ctx) { if (rf & 1) {
|
|
171
166
|
i0.ɵɵelementStart(0, "span", 51);
|
|
172
|
-
i0.ɵɵelement(1, "i",
|
|
167
|
+
i0.ɵɵelement(1, "i", 57);
|
|
173
168
|
i0.ɵɵtext(2);
|
|
174
169
|
i0.ɵɵelementEnd();
|
|
175
170
|
} if (rf & 2) {
|
|
@@ -179,7 +174,7 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_16_Template(rf,
|
|
|
179
174
|
} }
|
|
180
175
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_17_Template(rf, ctx) { if (rf & 1) {
|
|
181
176
|
i0.ɵɵelementStart(0, "span", 51);
|
|
182
|
-
i0.ɵɵelement(1, "i",
|
|
177
|
+
i0.ɵɵelement(1, "i", 58);
|
|
183
178
|
i0.ɵɵtext(2);
|
|
184
179
|
i0.ɵɵelementEnd();
|
|
185
180
|
} if (rf & 2) {
|
|
@@ -189,7 +184,7 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_17_Template(rf,
|
|
|
189
184
|
} }
|
|
190
185
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_18_Template(rf, ctx) { if (rf & 1) {
|
|
191
186
|
i0.ɵɵelementStart(0, "span", 51);
|
|
192
|
-
i0.ɵɵelement(1, "i",
|
|
187
|
+
i0.ɵɵelement(1, "i", 59);
|
|
193
188
|
i0.ɵɵtext(2);
|
|
194
189
|
i0.ɵɵelementEnd();
|
|
195
190
|
} if (rf & 2) {
|
|
@@ -198,18 +193,18 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_18_Template(rf,
|
|
|
198
193
|
i0.ɵɵtextInterpolate1(" ", action_r10.Type, " ");
|
|
199
194
|
} }
|
|
200
195
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_For_6_Conditional_5_Template(rf, ctx) { if (rf & 1) {
|
|
201
|
-
i0.ɵɵelementStart(0, "span",
|
|
196
|
+
i0.ɵɵelementStart(0, "span", 65);
|
|
202
197
|
i0.ɵɵtext(1, "Required");
|
|
203
198
|
i0.ɵɵelementEnd();
|
|
204
199
|
} }
|
|
205
200
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
206
|
-
i0.ɵɵelementStart(0, "div",
|
|
201
|
+
i0.ɵɵelementStart(0, "div", 62)(1, "span", 63);
|
|
207
202
|
i0.ɵɵtext(2);
|
|
208
203
|
i0.ɵɵelementEnd();
|
|
209
|
-
i0.ɵɵelementStart(3, "span",
|
|
204
|
+
i0.ɵɵelementStart(3, "span", 64);
|
|
210
205
|
i0.ɵɵtext(4);
|
|
211
206
|
i0.ɵɵelementEnd();
|
|
212
|
-
i0.ɵɵconditionalCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_For_6_Conditional_5_Template, 2, 0, "span",
|
|
207
|
+
i0.ɵɵconditionalCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_For_6_Conditional_5_Template, 2, 0, "span", 65);
|
|
213
208
|
i0.ɵɵelementEnd();
|
|
214
209
|
} if (rf & 2) {
|
|
215
210
|
const param_r12 = ctx.$implicit;
|
|
@@ -221,12 +216,12 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_
|
|
|
221
216
|
i0.ɵɵconditional(param_r12.IsRequired ? 5 : -1);
|
|
222
217
|
} }
|
|
223
218
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
224
|
-
i0.ɵɵelementStart(0, "div",
|
|
225
|
-
i0.ɵɵelement(2, "i",
|
|
219
|
+
i0.ɵɵelementStart(0, "div", 60)(1, "h4");
|
|
220
|
+
i0.ɵɵelement(2, "i", 57);
|
|
226
221
|
i0.ɵɵtext(3, " Parameters ");
|
|
227
222
|
i0.ɵɵelementEnd();
|
|
228
|
-
i0.ɵɵelementStart(4, "div",
|
|
229
|
-
i0.ɵɵrepeaterCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_For_6_Template, 6, 3, "div",
|
|
223
|
+
i0.ɵɵelementStart(4, "div", 61);
|
|
224
|
+
i0.ɵɵrepeaterCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_For_6_Template, 6, 3, "div", 62, _forTrack1);
|
|
230
225
|
i0.ɵɵelementEnd()();
|
|
231
226
|
} if (rf & 2) {
|
|
232
227
|
const action_r10 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -234,10 +229,10 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_
|
|
|
234
229
|
i0.ɵɵrepeater(action_r10.parameters);
|
|
235
230
|
} }
|
|
236
231
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_For_6_Template(rf, ctx) { if (rf & 1) {
|
|
237
|
-
i0.ɵɵelementStart(0, "div",
|
|
232
|
+
i0.ɵɵelementStart(0, "div", 67)(1, "span", 68);
|
|
238
233
|
i0.ɵɵtext(2);
|
|
239
234
|
i0.ɵɵelementEnd();
|
|
240
|
-
i0.ɵɵelementStart(3, "span",
|
|
235
|
+
i0.ɵɵelementStart(3, "span", 69);
|
|
241
236
|
i0.ɵɵtext(4);
|
|
242
237
|
i0.ɵɵelementEnd()();
|
|
243
238
|
} if (rf & 2) {
|
|
@@ -248,12 +243,12 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_
|
|
|
248
243
|
i0.ɵɵtextInterpolate(code_r13.Description);
|
|
249
244
|
} }
|
|
250
245
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
251
|
-
i0.ɵɵelementStart(0, "div",
|
|
252
|
-
i0.ɵɵelement(2, "i",
|
|
246
|
+
i0.ɵɵelementStart(0, "div", 60)(1, "h4");
|
|
247
|
+
i0.ɵɵelement(2, "i", 58);
|
|
253
248
|
i0.ɵɵtext(3, " Result Codes ");
|
|
254
249
|
i0.ɵɵelementEnd();
|
|
255
|
-
i0.ɵɵelementStart(4, "div",
|
|
256
|
-
i0.ɵɵrepeaterCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_For_6_Template, 5, 2, "div",
|
|
250
|
+
i0.ɵɵelementStart(4, "div", 66);
|
|
251
|
+
i0.ɵɵrepeaterCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_For_6_Template, 5, 2, "div", 67, _forTrack1);
|
|
257
252
|
i0.ɵɵelementEnd()();
|
|
258
253
|
} if (rf & 2) {
|
|
259
254
|
const action_r10 = i0.ɵɵnextContext(2).$implicit;
|
|
@@ -262,8 +257,8 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_
|
|
|
262
257
|
} }
|
|
263
258
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Template(rf, ctx) { if (rf & 1) {
|
|
264
259
|
i0.ɵɵelementStart(0, "div", 52);
|
|
265
|
-
i0.ɵɵconditionalCreate(1, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_Template, 7, 0, "div",
|
|
266
|
-
i0.ɵɵconditionalCreate(2, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_Template, 7, 0, "div",
|
|
260
|
+
i0.ɵɵconditionalCreate(1, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_Template, 7, 0, "div", 60);
|
|
261
|
+
i0.ɵɵconditionalCreate(2, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_Template, 7, 0, "div", 60);
|
|
267
262
|
i0.ɵɵelementEnd();
|
|
268
263
|
} if (rf & 2) {
|
|
269
264
|
const action_r10 = i0.ɵɵnextContext().$implicit;
|
|
@@ -274,7 +269,7 @@ function ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Template(rf,
|
|
|
274
269
|
} }
|
|
275
270
|
function ActionGalleryComponent_Conditional_10_For_2_Conditional_20_Template(rf, ctx) { if (rf & 1) {
|
|
276
271
|
i0.ɵɵelementStart(0, "div", 53);
|
|
277
|
-
i0.ɵɵelement(1, "i",
|
|
272
|
+
i0.ɵɵelement(1, "i", 18);
|
|
278
273
|
i0.ɵɵelementEnd();
|
|
279
274
|
} if (rf & 2) {
|
|
280
275
|
const action_r10 = i0.ɵɵnextContext().$implicit;
|
|
@@ -297,7 +292,7 @@ function ActionGalleryComponent_Conditional_10_For_2_Template(rf, ctx) { if (rf
|
|
|
297
292
|
i0.ɵɵconditionalCreate(8, ActionGalleryComponent_Conditional_10_For_2_Conditional_8_Template, 3, 1, "span", 44);
|
|
298
293
|
i0.ɵɵelementEnd()();
|
|
299
294
|
i0.ɵɵelementStart(9, "div", 45);
|
|
300
|
-
i0.ɵɵconditionalCreate(10, ActionGalleryComponent_Conditional_10_For_2_Conditional_10_Template,
|
|
295
|
+
i0.ɵɵconditionalCreate(10, ActionGalleryComponent_Conditional_10_For_2_Conditional_10_Template, 2, 0, "button", 46);
|
|
301
296
|
i0.ɵɵelement(11, "i", 47);
|
|
302
297
|
i0.ɵɵelementEnd()();
|
|
303
298
|
i0.ɵɵelementStart(12, "div", 48)(13, "p", 49);
|
|
@@ -353,11 +348,12 @@ function ActionGalleryComponent_Conditional_15_For_13_Conditional_11_Template(rf
|
|
|
353
348
|
const _r16 = i0.ɵɵgetCurrentView();
|
|
354
349
|
i0.ɵɵelementStart(0, "button", 55);
|
|
355
350
|
i0.ɵɵlistener("click", function ActionGalleryComponent_Conditional_15_For_13_Conditional_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)); });
|
|
351
|
+
i0.ɵɵelement(1, "i", 56);
|
|
356
352
|
i0.ɵɵelementEnd();
|
|
357
353
|
} }
|
|
358
354
|
function ActionGalleryComponent_Conditional_15_For_13_Conditional_12_Template(rf, ctx) { if (rf & 1) {
|
|
359
355
|
i0.ɵɵelementStart(0, "div", 53);
|
|
360
|
-
i0.ɵɵelement(1, "i",
|
|
356
|
+
i0.ɵɵelement(1, "i", 18);
|
|
361
357
|
i0.ɵɵelementEnd();
|
|
362
358
|
} if (rf & 2) {
|
|
363
359
|
const action_r15 = i0.ɵɵnextContext().$implicit;
|
|
@@ -366,23 +362,23 @@ function ActionGalleryComponent_Conditional_15_For_13_Conditional_12_Template(rf
|
|
|
366
362
|
} }
|
|
367
363
|
function ActionGalleryComponent_Conditional_15_For_13_Template(rf, ctx) { if (rf & 1) {
|
|
368
364
|
const _r14 = i0.ɵɵgetCurrentView();
|
|
369
|
-
i0.ɵɵelementStart(0, "div",
|
|
365
|
+
i0.ɵɵelementStart(0, "div", 77);
|
|
370
366
|
i0.ɵɵlistener("click", function ActionGalleryComponent_Conditional_15_For_13_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)); });
|
|
371
|
-
i0.ɵɵelementStart(1, "span",
|
|
367
|
+
i0.ɵɵelementStart(1, "span", 71);
|
|
372
368
|
i0.ɵɵelement(2, "i");
|
|
373
369
|
i0.ɵɵtext(3);
|
|
374
370
|
i0.ɵɵelementEnd();
|
|
375
|
-
i0.ɵɵelementStart(4, "span",
|
|
371
|
+
i0.ɵɵelementStart(4, "span", 72);
|
|
376
372
|
i0.ɵɵtext(5);
|
|
377
373
|
i0.ɵɵelementEnd();
|
|
378
|
-
i0.ɵɵelementStart(6, "span",
|
|
374
|
+
i0.ɵɵelementStart(6, "span", 73);
|
|
379
375
|
i0.ɵɵtext(7);
|
|
380
376
|
i0.ɵɵelementEnd();
|
|
381
|
-
i0.ɵɵelementStart(8, "span",
|
|
377
|
+
i0.ɵɵelementStart(8, "span", 74);
|
|
382
378
|
i0.ɵɵtext(9);
|
|
383
379
|
i0.ɵɵelementEnd();
|
|
384
|
-
i0.ɵɵelementStart(10, "span",
|
|
385
|
-
i0.ɵɵconditionalCreate(11, ActionGalleryComponent_Conditional_15_For_13_Conditional_11_Template,
|
|
380
|
+
i0.ɵɵelementStart(10, "span", 75);
|
|
381
|
+
i0.ɵɵconditionalCreate(11, ActionGalleryComponent_Conditional_15_For_13_Conditional_11_Template, 2, 0, "button", 46);
|
|
386
382
|
i0.ɵɵelementEnd();
|
|
387
383
|
i0.ɵɵconditionalCreate(12, ActionGalleryComponent_Conditional_15_For_13_Conditional_12_Template, 2, 4, "div", 53);
|
|
388
384
|
i0.ɵɵelementEnd();
|
|
@@ -406,22 +402,22 @@ function ActionGalleryComponent_Conditional_15_For_13_Template(rf, ctx) { if (rf
|
|
|
406
402
|
i0.ɵɵconditional(ctx_r1.config.selectionMode ? 12 : -1);
|
|
407
403
|
} }
|
|
408
404
|
function ActionGalleryComponent_Conditional_15_Template(rf, ctx) { if (rf & 1) {
|
|
409
|
-
i0.ɵɵelementStart(0, "div", 9)(1, "div",
|
|
405
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "div", 70)(2, "span", 71);
|
|
410
406
|
i0.ɵɵtext(3, "Name");
|
|
411
407
|
i0.ɵɵelementEnd();
|
|
412
|
-
i0.ɵɵelementStart(4, "span",
|
|
408
|
+
i0.ɵɵelementStart(4, "span", 72);
|
|
413
409
|
i0.ɵɵtext(5, "Category");
|
|
414
410
|
i0.ɵɵelementEnd();
|
|
415
|
-
i0.ɵɵelementStart(6, "span",
|
|
411
|
+
i0.ɵɵelementStart(6, "span", 73);
|
|
416
412
|
i0.ɵɵtext(7, "Type");
|
|
417
413
|
i0.ɵɵelementEnd();
|
|
418
|
-
i0.ɵɵelementStart(8, "span",
|
|
414
|
+
i0.ɵɵelementStart(8, "span", 74);
|
|
419
415
|
i0.ɵɵtext(9, "Parameters");
|
|
420
416
|
i0.ɵɵelementEnd();
|
|
421
|
-
i0.ɵɵelementStart(10, "span",
|
|
417
|
+
i0.ɵɵelementStart(10, "span", 75);
|
|
422
418
|
i0.ɵɵtext(11, "Actions");
|
|
423
419
|
i0.ɵɵelementEnd()();
|
|
424
|
-
i0.ɵɵrepeaterCreate(12, ActionGalleryComponent_Conditional_15_For_13_Template, 13, 11, "div",
|
|
420
|
+
i0.ɵɵrepeaterCreate(12, ActionGalleryComponent_Conditional_15_For_13_Template, 13, 11, "div", 76, _forTrack1);
|
|
425
421
|
i0.ɵɵpipe(14, "async");
|
|
426
422
|
i0.ɵɵelementEnd();
|
|
427
423
|
} if (rf & 2) {
|
|
@@ -764,9 +760,9 @@ export class ActionGalleryComponent {
|
|
|
764
760
|
} if (rf & 2) {
|
|
765
761
|
let _t;
|
|
766
762
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.searchInput = _t.first);
|
|
767
|
-
} }, inputs: { config: "config", preSelectedActions: "preSelectedActions" }, outputs: { actionSelected: "actionSelected", actionsSelected: "actionsSelected", actionTestRequested: "actionTestRequested" }, standalone: false, decls: 20, vars: 34, consts: [["searchInput", ""], [1, "action-gallery"], [1, "gallery-header"], [1, "gallery-content"], [1, "category-sidebar"], [1, "actions-container"], [1, "loading-state"], [1, "empty-state"], [1, "actions-grid", 3, "grid-template-columns"], [1, "actions-list"], [1, "header-content"], [1, "search-section"], ["placeholder", "Search actions by name, description, or category...", 1, "
|
|
763
|
+
} }, inputs: { config: "config", preSelectedActions: "preSelectedActions" }, outputs: { actionSelected: "actionSelected", actionsSelected: "actionsSelected", actionTestRequested: "actionTestRequested" }, standalone: false, decls: 20, vars: 34, consts: [["searchInput", ""], [1, "action-gallery"], [1, "gallery-header"], [1, "gallery-content"], [1, "category-sidebar"], [1, "actions-container"], [1, "loading-state"], [1, "empty-state"], [1, "actions-grid", 3, "grid-template-columns"], [1, "actions-list"], [1, "header-content"], [1, "search-section"], [1, "search-input-wrapper"], [1, "fa-solid", "fa-search"], ["placeholder", "Search actions by name, description, or category...", 1, "mj-input", "search-input", 3, "formControl"], [1, "header-actions"], [1, "view-toggle"], ["mjButton", "", "size", "sm", 3, "click", "title"], [1, "fa-solid"], [1, "stats"], [1, "stat-item"], [1, "fa-solid", "fa-bolt"], [1, "category-tree"], [1, "category-item", 3, "selected", "has-children"], [1, "category-item", 3, "click"], [1, "category-header"], [1, "category-name"], [1, "category-count"], [1, "fa-solid", "fa-chevron-right", "expand-icon", 3, "expanded"], [1, "sub-categories"], [1, "fa-solid", "fa-chevron-right", "expand-icon", 3, "click"], [1, "category-item", "sub-category", 3, "selected"], [1, "category-item", "sub-category", 3, "click"], ["text", "Loading actions...", "size", "large"], [1, "fa-solid", "fa-search-minus"], ["mjButton", "", 3, "click"], [1, "actions-grid"], [1, "action-card", 3, "expanded", "selected", "animate", "hover"], [1, "action-card", 3, "mouseenter", "mouseleave", "click"], [1, "card-header", 3, "click"], [1, "action-icon"], [1, "action-info"], [1, "action-name"], [1, "action-meta"], [1, "category-badge"], [1, "card-actions"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test this action"], [1, "fa-solid", "expand-indicator"], [1, "card-body"], [1, "action-description"], [1, "action-stats"], [1, "stat"], [1, "card-details"], [1, "selection-indicator"], [1, "fa-solid", "fa-folder"], ["mjButton", "", "variant", "flat", "size", "sm", "title", "Test this action", 3, "click"], [1, "fa-solid", "fa-play"], [1, "fa-solid", "fa-sliders"], [1, "fa-solid", "fa-code-branch"], [1, "fa-solid", "fa-tag"], [1, "detail-section"], [1, "parameters-list"], [1, "parameter-item"], [1, "param-name"], [1, "param-type"], [1, "param-required"], [1, "result-codes-list"], [1, "result-code-item"], [1, "code-value"], [1, "code-desc"], [1, "list-header"], [1, "col-name"], [1, "col-category"], [1, "col-type"], [1, "col-params"], [1, "col-actions"], [1, "list-item", 3, "selected"], [1, "list-item", 3, "click"]], template: function ActionGalleryComponent_Template(rf, ctx) { if (rf & 1) {
|
|
768
764
|
i0.ɵɵelementStart(0, "div", 1);
|
|
769
|
-
i0.ɵɵconditionalCreate(1, ActionGalleryComponent_Conditional_1_Template, 19,
|
|
765
|
+
i0.ɵɵconditionalCreate(1, ActionGalleryComponent_Conditional_1_Template, 19, 16, "div", 2);
|
|
770
766
|
i0.ɵɵelementStart(2, "div", 3);
|
|
771
767
|
i0.ɵɵconditionalCreate(3, ActionGalleryComponent_Conditional_3_Template, 5, 2, "div", 4);
|
|
772
768
|
i0.ɵɵelementStart(4, "div", 5);
|
|
@@ -803,11 +799,11 @@ export class ActionGalleryComponent {
|
|
|
803
799
|
i0.ɵɵconditional(!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 ? 10 : -1);
|
|
804
800
|
i0.ɵɵadvance(5);
|
|
805
801
|
i0.ɵɵconditional(!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 ? 15 : -1);
|
|
806
|
-
} }, dependencies: [i1.NgControlStatus, i1.FormControlDirective, i2.
|
|
802
|
+
} }, dependencies: [i1.DefaultValueAccessor, i1.NgControlStatus, i1.FormControlDirective, i2.MJButtonDirective, i3.LoadingComponent, i4.AsyncPipe], encapsulation: 2 }); }
|
|
807
803
|
}
|
|
808
804
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionGalleryComponent, [{
|
|
809
805
|
type: Component,
|
|
810
|
-
args: [{ standalone: false, selector: 'mj-action-gallery', template: "<div class=\"action-gallery\" [class.dark-theme]=\"config.theme === 'dark'\" [class.selection-mode]=\"config.selectionMode\">\n <!-- Gallery Header -->\n @if (config.showSearch) {\n <div class=\"gallery-header\">\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\n <!-- Main Content -->\n <div class=\"gallery-content\" [class.no-categories]=\"!config.showCategories\">\n <!-- Category Sidebar -->\n @if (config.showCategories) {\n <div class=\"category-sidebar\">\n <div class=\"category-tree\">\n @for (category of categoryTree$ | async; track category.id) {\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 @if (category.children && category.children.length > 0) {\n <i class=\"fa-solid fa-chevron-right expand-icon\" \n [class.expanded]=\"expandedCategories.has(category.id)\"\n (click)=\"toggleCategoryExpanded(category.id); $event.stopPropagation()\"></i>\n }\n </div>\n \n <!-- Sub-categories -->\n @if (category.children && expandedCategories.has(category.id)) {\n <div class=\"sub-categories\">\n @for (subCategory of category.children; track subCategory.id) {\n <div class=\"category-item sub-category\" \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 }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading actions...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && (filteredActions$ | async)?.length === 0) {\n <div class=\"empty-state\">\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\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-grid\" \n [style.grid-template-columns]=\"'repeat(' + (config.gridColumns || 3) + ', 1fr)'\">\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \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 @if (action.Category) {\n <span class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.Category }}\n </span>\n }\n </div>\n </div>\n <div class=\"card-actions\">\n @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\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 @if (action.parameters?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ action.parameters?.length || 0 }} params\n </span>\n }\n @if (action.resultCodes?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-code-branch\"></i>\n {{ action.resultCodes?.length || 0 }} results\n </span>\n }\n @if (action.Type) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </span>\n }\n </div>\n </div>\n \n <!-- Expanded Details -->\n @if (action.expanded) {\n <div class=\"card-details\">\n <!-- Parameters -->\n @if (action.parameters && action.parameters.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </h4>\n <div class=\"parameters-list\">\n @for (param of action.parameters; track param.ID) {\n <div class=\"parameter-item\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n @if (param.IsRequired) {\n <span class=\"param-required\">Required</span>\n }\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Result Codes -->\n @if (action.resultCodes && action.resultCodes.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Result Codes\n </h4>\n <div class=\"result-codes-list\">\n @for (code of action.resultCodes; track code.ID) {\n <div class=\"result-code-item\">\n <span class=\"code-value\">{{ code.ResultCode }}</span>\n <span class=\"code-desc\">{{ code.Description }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-list\">\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 @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \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 @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\n </span>\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n", styles: ["/* Error: Can't find stylesheet to import.\n * ,\n * 1 | @import '@progress/kendo-theme-default/scss/all';\n * | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n * '\n * src/lib/action-gallery.component.scss 1:9 root stylesheet */\n\nbody::before {\n font-family: \"Source Code Pro\", \"SF Mono\", Monaco, Inconsolata, \"Fira Mono\",\n \"Droid Sans Mono\", monospace, monospace;\n white-space: pre;\n display: block;\n padding: 1em;\n margin-bottom: 1em;\n border-bottom: 2px solid black;\n content: \"Error: Can't find stylesheet to import.\\a \\2577 \\a 1 \\2502 @import '@progress/kendo-theme-default/scss/all';\\a \\2502 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\a \\2575 \\a src/lib/action-gallery.component.scss 1:9 root stylesheet\";\n}\n"] }]
|
|
806
|
+
args: [{ standalone: false, selector: 'mj-action-gallery', template: "<div class=\"action-gallery\" [class.dark-theme]=\"config.theme === 'dark'\" [class.selection-mode]=\"config.selectionMode\">\n <!-- Gallery Header -->\n @if (config.showSearch) {\n <div class=\"gallery-header\">\n <div class=\"header-content\">\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n #searchInput\n class=\"mj-input search-input\"\n [formControl]=\"searchControl\"\n placeholder=\"Search actions by name, description, or category...\"\n />\n </div>\n </div>\n \n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button mjButton\n size=\"sm\"\n (click)=\"toggleViewMode()\"\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\n <!-- Main Content -->\n <div class=\"gallery-content\" [class.no-categories]=\"!config.showCategories\">\n <!-- Category Sidebar -->\n @if (config.showCategories) {\n <div class=\"category-sidebar\">\n <div class=\"category-tree\">\n @for (category of categoryTree$ | async; track category.id) {\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 @if (category.children && category.children.length > 0) {\n <i class=\"fa-solid fa-chevron-right expand-icon\" \n [class.expanded]=\"expandedCategories.has(category.id)\"\n (click)=\"toggleCategoryExpanded(category.id); $event.stopPropagation()\"></i>\n }\n </div>\n \n <!-- Sub-categories -->\n @if (category.children && expandedCategories.has(category.id)) {\n <div class=\"sub-categories\">\n @for (subCategory of category.children; track subCategory.id) {\n <div class=\"category-item sub-category\" \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 }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading actions...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && (filteredActions$ | async)?.length === 0) {\n <div class=\"empty-state\">\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 mjButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n }\n\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-grid\" \n [style.grid-template-columns]=\"'repeat(' + (config.gridColumns || 3) + ', 1fr)'\">\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \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 @if (action.Category) {\n <span class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.Category }}\n </span>\n }\n </div>\n </div>\n <div class=\"card-actions\">\n @if (config.enableQuickTest) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"testAction(action, $event)\"\n title=\"Test this action\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\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 @if (action.parameters?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ action.parameters?.length || 0 }} params\n </span>\n }\n @if (action.resultCodes?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-code-branch\"></i>\n {{ action.resultCodes?.length || 0 }} results\n </span>\n }\n @if (action.Type) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </span>\n }\n </div>\n </div>\n \n <!-- Expanded Details -->\n @if (action.expanded) {\n <div class=\"card-details\">\n <!-- Parameters -->\n @if (action.parameters && action.parameters.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </h4>\n <div class=\"parameters-list\">\n @for (param of action.parameters; track param.ID) {\n <div class=\"parameter-item\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n @if (param.IsRequired) {\n <span class=\"param-required\">Required</span>\n }\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Result Codes -->\n @if (action.resultCodes && action.resultCodes.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Result Codes\n </h4>\n <div class=\"result-codes-list\">\n @for (code of action.resultCodes; track code.ID) {\n <div class=\"result-code-item\">\n <span class=\"code-value\">{{ code.ResultCode }}</span>\n <span class=\"code-desc\">{{ code.Description }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-list\">\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 @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \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 @if (config.enableQuickTest) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"testAction(action, $event)\"\n title=\"Test this action\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </span>\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n", styles: ["/* Action Gallery Component Styles */\n"] }]
|
|
811
807
|
}], () => [], { config: [{
|
|
812
808
|
type: Input
|
|
813
809
|
}], preSelectedActions: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-gallery.component.js","sourceRoot":"","sources":["../../src/lib/action-gallery.component.ts","../../src/lib/action-gallery.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionParamEntity, MJActionResultCodeEntity } from '@memberjunction/core-entities';\n\nexport interface ActionGalleryConfig {\n selectionMode?: boolean;\n multiSelect?: boolean;\n showCategories?: boolean;\n showSearch?: boolean;\n defaultView?: 'grid' | 'list';\n gridColumns?: number;\n enableQuickTest?: boolean;\n theme?: 'light' | 'dark';\n}\n\nexport interface CategoryNode {\n id: string;\n name: string;\n parent?: string;\n children?: CategoryNode[];\n count?: number;\n icon?: string;\n}\n\nexport interface ActionWithDetails extends MJActionEntity {\n parameters?: MJActionParamEntity[];\n resultCodes?: MJActionResultCodeEntity[];\n expanded?: boolean;\n selected?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-gallery',\n templateUrl: './action-gallery.component.html',\n styleUrls: ['./action-gallery.component.css']\n})\nexport class ActionGalleryComponent implements OnInit, OnDestroy {\n @Input() config: ActionGalleryConfig = {\n selectionMode: false,\n multiSelect: false,\n showCategories: true,\n showSearch: true,\n defaultView: 'grid',\n gridColumns: 3,\n enableQuickTest: true,\n theme: 'light'\n };\n \n @Input() preSelectedActions: string[] = [];\n @Output() actionSelected = new EventEmitter<MJActionEntity>();\n @Output() actionsSelected = new EventEmitter<MJActionEntity[]>();\n @Output() actionTestRequested = new EventEmitter<MJActionEntity>();\n \n @ViewChild('searchInput', { static: false }) searchInput: ElementRef<HTMLInputElement>;\n \n // State management\n private destroy$ = new Subject<void>();\n actions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryNode[]>([]);\n selectedCategory$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n isLoading$ = new BehaviorSubject<boolean>(false);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n \n // Form controls\n searchControl = new FormControl('');\n \n // UI state\n expandedCategories = new Set<string>();\n hoveredAction: string | null = null;\n animateCards = false;\n \n // Statistics\n totalActions = 0;\n categoryCounts = new Map<string, number>();\n \n constructor() {}\n \n ngOnInit() {\n // Set initial view mode\n this.viewMode$.next(this.config.defaultView || 'grid');\n \n // Load data\n this.loadData();\n \n // Set up filtering\n combineLatest([\n this.actions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ),\n this.selectedCategory$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, category]) => {\n this.filterActions(actions, searchTerm || '', category);\n });\n \n // Initialize with pre-selected actions\n if (this.preSelectedActions.length > 0) {\n this.selectedActions$.next(new Set(this.preSelectedActions));\n }\n \n // Enable animations after initial load\n setTimeout(() => {\n this.animateCards = true;\n }, 100);\n }\n \n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n \n async loadData() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Load actions and categories in parallel\n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ResultType: 'entity_object',\n OrderBy: 'Category, Name',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ResultType: 'entity_object',\n OrderBy: 'Name',\n MaxRows: 1000\n }\n ]);\n \n if (actionsResult.Success && categoriesResult.Success) {\n const actions = actionsResult.Results as MJActionEntity[] || [];\n const categories = categoriesResult.Results as MJActionCategoryEntity[] || [];\n \n // Process actions\n const actionsWithDetails = actions.map(action => ({\n ...action,\n expanded: false,\n selected: this.preSelectedActions.some(id => UUIDsEqual(id, action.ID))\n } as ActionWithDetails));\n \n this.actions$.next(actionsWithDetails);\n this.totalActions = actions.length;\n \n // Process categories\n this.categories$.next(categories);\n this.buildCategoryTree(categories, actions);\n \n // Initial filter\n this.filterActions(actionsWithDetails, '', 'all');\n }\n } catch (error) {\n console.error('Error loading gallery data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n \n private buildCategoryTree(categories: MJActionCategoryEntity[], actions: MJActionEntity[]) {\n // Count actions per category\n this.categoryCounts.clear();\n actions.forEach(action => {\n const count = this.categoryCounts.get(action.Category || 'Uncategorized') || 0;\n this.categoryCounts.set(action.Category || 'Uncategorized', count + 1);\n });\n \n // Build tree structure\n const nodeMap = new Map<string, CategoryNode>();\n const rootNodes: CategoryNode[] = [];\n \n // Create nodes\n categories.forEach(cat => {\n const node: CategoryNode = {\n id: cat.ID,\n name: cat.Name,\n parent: cat.ParentID || undefined,\n children: [],\n count: this.categoryCounts.get(cat.Name) || 0,\n icon: this.getCategoryIcon(cat.Name)\n };\n nodeMap.set(cat.ID, node);\n });\n \n // Build hierarchy\n nodeMap.forEach(node => {\n if (node.parent && nodeMap.has(node.parent)) {\n const parent = nodeMap.get(node.parent)!;\n parent.children!.push(node);\n // Accumulate counts up the tree\n parent.count = (parent.count || 0) + (node.count || 0);\n } else {\n rootNodes.push(node);\n }\n });\n \n // Add \"All\" category at the top\n const allNode: CategoryNode = {\n id: 'all',\n name: 'All Actions',\n count: this.totalActions,\n icon: 'fa-th'\n };\n \n // Add \"Uncategorized\" if needed\n const uncategorizedCount = this.categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n const uncategorizedNode: CategoryNode = {\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n };\n rootNodes.push(uncategorizedNode);\n }\n \n this.categoryTree$.next([allNode, ...rootNodes]);\n }\n \n private getCategoryIcon(categoryName: string): string {\n const iconMap: { [key: string]: string } = {\n 'Data': 'fa-database',\n 'Communication': 'fa-envelope',\n 'Integration': 'fa-plug',\n 'Security': 'fa-shield',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n \n return iconMap[categoryName] || 'fa-folder';\n }\n \n getCategoryIconClass(category: CategoryNode): string {\n // Ensure we have a valid icon\n if (!category.icon) {\n return 'fa-solid fa-folder category-icon';\n }\n return `fa-solid ${category.icon} category-icon`;\n }\n \n private filterActions(actions: ActionWithDetails[], searchTerm: string, category: string) {\n let filtered = [...actions];\n \n // Category filter\n if (category && category !== 'all') {\n if (category === 'uncategorized') {\n filtered = filtered.filter(a => !a.Category);\n } else {\n const categoryName = this.getCategoryName(category);\n filtered = filtered.filter(a => a.Category === categoryName);\n }\n }\n \n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(action => \n action.Name.toLowerCase().includes(term) ||\n action.Description?.toLowerCase().includes(term) ||\n action.Category?.toLowerCase().includes(term)\n );\n }\n \n this.filteredActions$.next(filtered);\n }\n \n private getCategoryName(categoryId: string): string {\n const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));\n return category?.Name || '';\n }\n \n selectCategory(categoryId: string) {\n this.selectedCategory$.next(categoryId);\n }\n \n toggleCategoryExpanded(categoryId: string) {\n if (this.expandedCategories.has(categoryId)) {\n this.expandedCategories.delete(categoryId);\n } else {\n this.expandedCategories.add(categoryId);\n }\n }\n \n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n \n async toggleActionExpanded(action: ActionWithDetails) {\n action.expanded = !action.expanded;\n \n // Load details if expanding and not already loaded\n if (action.expanded && !action.parameters) {\n await this.loadActionDetails(action);\n }\n }\n \n async loadActionDetails(action: ActionWithDetails) {\n const rv = new RunView();\n \n try {\n const [paramsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'Sequence',\n ResultType: 'entity_object',\n MaxRows: 100\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'ResultCode',\n ResultType: 'entity_object',\n MaxRows: 100\n }\n ]);\n \n if (paramsResult.Success) {\n action.parameters = paramsResult.Results as MJActionParamEntity[] || [];\n }\n \n if (resultCodesResult.Success) {\n action.resultCodes = resultCodesResult.Results as MJActionResultCodeEntity[] || [];\n }\n } catch (error) {\n console.error('Error loading action details:', error);\n }\n }\n \n toggleActionSelection(action: ActionWithDetails) {\n if (!this.config.selectionMode) return;\n \n const selected = this.selectedActions$.value;\n \n if (!this.config.multiSelect) {\n // Single select mode\n selected.clear();\n if (!action.selected) {\n selected.add(action.ID);\n action.selected = true;\n this.actionSelected.emit(action);\n }\n } else {\n // Multi-select mode\n if (action.selected) {\n selected.delete(action.ID);\n action.selected = false;\n } else {\n selected.add(action.ID);\n action.selected = true;\n }\n }\n \n this.selectedActions$.next(new Set(selected));\n \n if (this.config.multiSelect) {\n const selectedActions = this.actions$.value.filter(a => selected.has(a.ID));\n this.actionsSelected.emit(selectedActions);\n }\n }\n \n testAction(action: MJActionEntity, event: Event) {\n event.stopPropagation();\n \n if (this.config.enableQuickTest) {\n // TODO: Implement test harness integration\n console.log('Test action:', action.Name);\n }\n \n this.actionTestRequested.emit(action);\n }\n \n clearSearch() {\n this.searchControl.reset();\n if (this.searchInput) {\n this.searchInput.nativeElement.focus();\n }\n }\n \n getSelectedActions(): MJActionEntity[] {\n const selected = this.selectedActions$.value;\n return this.actions$.value.filter(a => selected.has(a.ID));\n }\n \n getActionIcon(action: MJActionEntity): string {\n const typeIcons: { [key: string]: string } = {\n 'Create': 'fa-plus-circle',\n 'Update': 'fa-edit',\n 'Delete': 'fa-trash',\n 'Query': 'fa-search',\n 'Process': 'fa-cogs',\n 'Email': 'fa-envelope',\n 'Report': 'fa-file-alt',\n 'Export': 'fa-file-export',\n 'Import': 'fa-file-import',\n 'API': 'fa-plug',\n 'Script': 'fa-code'\n };\n \n for (const [key, icon] of Object.entries(typeIcons)) {\n if (action.Name.toLowerCase().includes(key.toLowerCase()) || \n action.Type?.toLowerCase().includes(key.toLowerCase())) {\n return icon;\n }\n }\n \n return 'fa-bolt';\n }\n}","<div class=\"action-gallery\" [class.dark-theme]=\"config.theme === 'dark'\" [class.selection-mode]=\"config.selectionMode\">\n <!-- Gallery Header -->\n @if (config.showSearch) {\n <div class=\"gallery-header\">\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\n <!-- Main Content -->\n <div class=\"gallery-content\" [class.no-categories]=\"!config.showCategories\">\n <!-- Category Sidebar -->\n @if (config.showCategories) {\n <div class=\"category-sidebar\">\n <div class=\"category-tree\">\n @for (category of categoryTree$ | async; track category.id) {\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 @if (category.children && category.children.length > 0) {\n <i class=\"fa-solid fa-chevron-right expand-icon\" \n [class.expanded]=\"expandedCategories.has(category.id)\"\n (click)=\"toggleCategoryExpanded(category.id); $event.stopPropagation()\"></i>\n }\n </div>\n \n <!-- Sub-categories -->\n @if (category.children && expandedCategories.has(category.id)) {\n <div class=\"sub-categories\">\n @for (subCategory of category.children; track subCategory.id) {\n <div class=\"category-item sub-category\" \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 }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading actions...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && (filteredActions$ | async)?.length === 0) {\n <div class=\"empty-state\">\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\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-grid\" \n [style.grid-template-columns]=\"'repeat(' + (config.gridColumns || 3) + ', 1fr)'\">\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \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 @if (action.Category) {\n <span class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.Category }}\n </span>\n }\n </div>\n </div>\n <div class=\"card-actions\">\n @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\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 @if (action.parameters?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ action.parameters?.length || 0 }} params\n </span>\n }\n @if (action.resultCodes?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-code-branch\"></i>\n {{ action.resultCodes?.length || 0 }} results\n </span>\n }\n @if (action.Type) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </span>\n }\n </div>\n </div>\n \n <!-- Expanded Details -->\n @if (action.expanded) {\n <div class=\"card-details\">\n <!-- Parameters -->\n @if (action.parameters && action.parameters.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </h4>\n <div class=\"parameters-list\">\n @for (param of action.parameters; track param.ID) {\n <div class=\"parameter-item\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n @if (param.IsRequired) {\n <span class=\"param-required\">Required</span>\n }\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Result Codes -->\n @if (action.resultCodes && action.resultCodes.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Result Codes\n </h4>\n <div class=\"result-codes-list\">\n @for (code of action.resultCodes; track code.ID) {\n <div class=\"result-code-item\">\n <span class=\"code-value\">{{ code.ResultCode }}</span>\n <span class=\"code-desc\">{{ code.Description }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-list\">\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 @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \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 @if (config.enableQuickTest) {\n <button kendoButton \n look=\"flat\" \n size=\"small\"\n icon=\"play\"\n (click)=\"testAction(action, $event)\"\n kendoTooltip\n title=\"Test this action\">\n </button>\n }\n </span>\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n"]}
|
|
1
|
+
{"version":3,"file":"action-gallery.component.js","sourceRoot":"","sources":["../../src/lib/action-gallery.component.ts","../../src/lib/action-gallery.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, Input, Output, EventEmitter, OnInit, OnDestroy, ViewChild, ElementRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { Subject, BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, takeUntil } from 'rxjs';\nimport { RunView } from '@memberjunction/core';\nimport { UUIDsEqual } from '@memberjunction/global';\nimport { MJActionEntity, MJActionCategoryEntity, MJActionParamEntity, MJActionResultCodeEntity } from '@memberjunction/core-entities';\n\nexport interface ActionGalleryConfig {\n selectionMode?: boolean;\n multiSelect?: boolean;\n showCategories?: boolean;\n showSearch?: boolean;\n defaultView?: 'grid' | 'list';\n gridColumns?: number;\n enableQuickTest?: boolean;\n theme?: 'light' | 'dark';\n}\n\nexport interface CategoryNode {\n id: string;\n name: string;\n parent?: string;\n children?: CategoryNode[];\n count?: number;\n icon?: string;\n}\n\nexport interface ActionWithDetails extends MJActionEntity {\n parameters?: MJActionParamEntity[];\n resultCodes?: MJActionResultCodeEntity[];\n expanded?: boolean;\n selected?: boolean;\n}\n\n@Component({\n standalone: false,\n selector: 'mj-action-gallery',\n templateUrl: './action-gallery.component.html',\n styleUrls: ['./action-gallery.component.css']\n})\nexport class ActionGalleryComponent implements OnInit, OnDestroy {\n @Input() config: ActionGalleryConfig = {\n selectionMode: false,\n multiSelect: false,\n showCategories: true,\n showSearch: true,\n defaultView: 'grid',\n gridColumns: 3,\n enableQuickTest: true,\n theme: 'light'\n };\n \n @Input() preSelectedActions: string[] = [];\n @Output() actionSelected = new EventEmitter<MJActionEntity>();\n @Output() actionsSelected = new EventEmitter<MJActionEntity[]>();\n @Output() actionTestRequested = new EventEmitter<MJActionEntity>();\n \n @ViewChild('searchInput', { static: false }) searchInput: ElementRef<HTMLInputElement>;\n \n // State management\n private destroy$ = new Subject<void>();\n actions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categories$ = new BehaviorSubject<MJActionCategoryEntity[]>([]);\n filteredActions$ = new BehaviorSubject<ActionWithDetails[]>([]);\n categoryTree$ = new BehaviorSubject<CategoryNode[]>([]);\n selectedCategory$ = new BehaviorSubject<string>('all');\n viewMode$ = new BehaviorSubject<'grid' | 'list'>('grid');\n isLoading$ = new BehaviorSubject<boolean>(false);\n selectedActions$ = new BehaviorSubject<Set<string>>(new Set());\n \n // Form controls\n searchControl = new FormControl('');\n \n // UI state\n expandedCategories = new Set<string>();\n hoveredAction: string | null = null;\n animateCards = false;\n \n // Statistics\n totalActions = 0;\n categoryCounts = new Map<string, number>();\n \n constructor() {}\n \n ngOnInit() {\n // Set initial view mode\n this.viewMode$.next(this.config.defaultView || 'grid');\n \n // Load data\n this.loadData();\n \n // Set up filtering\n combineLatest([\n this.actions$,\n this.searchControl.valueChanges.pipe(\n debounceTime(300),\n distinctUntilChanged()\n ),\n this.selectedCategory$\n ]).pipe(\n takeUntil(this.destroy$)\n ).subscribe(([actions, searchTerm, category]) => {\n this.filterActions(actions, searchTerm || '', category);\n });\n \n // Initialize with pre-selected actions\n if (this.preSelectedActions.length > 0) {\n this.selectedActions$.next(new Set(this.preSelectedActions));\n }\n \n // Enable animations after initial load\n setTimeout(() => {\n this.animateCards = true;\n }, 100);\n }\n \n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n \n async loadData() {\n this.isLoading$.next(true);\n \n try {\n const rv = new RunView();\n \n // Load actions and categories in parallel\n const [actionsResult, categoriesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Actions',\n ResultType: 'entity_object',\n OrderBy: 'Category, Name',\n MaxRows: 5000\n },\n {\n EntityName: 'MJ: Action Categories',\n ResultType: 'entity_object',\n OrderBy: 'Name',\n MaxRows: 1000\n }\n ]);\n \n if (actionsResult.Success && categoriesResult.Success) {\n const actions = actionsResult.Results as MJActionEntity[] || [];\n const categories = categoriesResult.Results as MJActionCategoryEntity[] || [];\n \n // Process actions\n const actionsWithDetails = actions.map(action => ({\n ...action,\n expanded: false,\n selected: this.preSelectedActions.some(id => UUIDsEqual(id, action.ID))\n } as ActionWithDetails));\n \n this.actions$.next(actionsWithDetails);\n this.totalActions = actions.length;\n \n // Process categories\n this.categories$.next(categories);\n this.buildCategoryTree(categories, actions);\n \n // Initial filter\n this.filterActions(actionsWithDetails, '', 'all');\n }\n } catch (error) {\n console.error('Error loading gallery data:', error);\n } finally {\n this.isLoading$.next(false);\n }\n }\n \n private buildCategoryTree(categories: MJActionCategoryEntity[], actions: MJActionEntity[]) {\n // Count actions per category\n this.categoryCounts.clear();\n actions.forEach(action => {\n const count = this.categoryCounts.get(action.Category || 'Uncategorized') || 0;\n this.categoryCounts.set(action.Category || 'Uncategorized', count + 1);\n });\n \n // Build tree structure\n const nodeMap = new Map<string, CategoryNode>();\n const rootNodes: CategoryNode[] = [];\n \n // Create nodes\n categories.forEach(cat => {\n const node: CategoryNode = {\n id: cat.ID,\n name: cat.Name,\n parent: cat.ParentID || undefined,\n children: [],\n count: this.categoryCounts.get(cat.Name) || 0,\n icon: this.getCategoryIcon(cat.Name)\n };\n nodeMap.set(cat.ID, node);\n });\n \n // Build hierarchy\n nodeMap.forEach(node => {\n if (node.parent && nodeMap.has(node.parent)) {\n const parent = nodeMap.get(node.parent)!;\n parent.children!.push(node);\n // Accumulate counts up the tree\n parent.count = (parent.count || 0) + (node.count || 0);\n } else {\n rootNodes.push(node);\n }\n });\n \n // Add \"All\" category at the top\n const allNode: CategoryNode = {\n id: 'all',\n name: 'All Actions',\n count: this.totalActions,\n icon: 'fa-th'\n };\n \n // Add \"Uncategorized\" if needed\n const uncategorizedCount = this.categoryCounts.get('Uncategorized') || 0;\n if (uncategorizedCount > 0) {\n const uncategorizedNode: CategoryNode = {\n id: 'uncategorized',\n name: 'Uncategorized',\n count: uncategorizedCount,\n icon: 'fa-question-circle'\n };\n rootNodes.push(uncategorizedNode);\n }\n \n this.categoryTree$.next([allNode, ...rootNodes]);\n }\n \n private getCategoryIcon(categoryName: string): string {\n const iconMap: { [key: string]: string } = {\n 'Data': 'fa-database',\n 'Communication': 'fa-envelope',\n 'Integration': 'fa-plug',\n 'Security': 'fa-shield',\n 'Workflow': 'fa-project-diagram',\n 'AI': 'fa-brain',\n 'Files': 'fa-file',\n 'Utilities': 'fa-tools',\n 'System': 'fa-cog',\n 'Analytics': 'fa-chart-line'\n };\n \n return iconMap[categoryName] || 'fa-folder';\n }\n \n getCategoryIconClass(category: CategoryNode): string {\n // Ensure we have a valid icon\n if (!category.icon) {\n return 'fa-solid fa-folder category-icon';\n }\n return `fa-solid ${category.icon} category-icon`;\n }\n \n private filterActions(actions: ActionWithDetails[], searchTerm: string, category: string) {\n let filtered = [...actions];\n \n // Category filter\n if (category && category !== 'all') {\n if (category === 'uncategorized') {\n filtered = filtered.filter(a => !a.Category);\n } else {\n const categoryName = this.getCategoryName(category);\n filtered = filtered.filter(a => a.Category === categoryName);\n }\n }\n \n // Search filter\n if (searchTerm) {\n const term = searchTerm.toLowerCase();\n filtered = filtered.filter(action => \n action.Name.toLowerCase().includes(term) ||\n action.Description?.toLowerCase().includes(term) ||\n action.Category?.toLowerCase().includes(term)\n );\n }\n \n this.filteredActions$.next(filtered);\n }\n \n private getCategoryName(categoryId: string): string {\n const category = this.categories$.value.find(c => UUIDsEqual(c.ID, categoryId));\n return category?.Name || '';\n }\n \n selectCategory(categoryId: string) {\n this.selectedCategory$.next(categoryId);\n }\n \n toggleCategoryExpanded(categoryId: string) {\n if (this.expandedCategories.has(categoryId)) {\n this.expandedCategories.delete(categoryId);\n } else {\n this.expandedCategories.add(categoryId);\n }\n }\n \n toggleViewMode() {\n const currentMode = this.viewMode$.value;\n this.viewMode$.next(currentMode === 'grid' ? 'list' : 'grid');\n }\n \n async toggleActionExpanded(action: ActionWithDetails) {\n action.expanded = !action.expanded;\n \n // Load details if expanding and not already loaded\n if (action.expanded && !action.parameters) {\n await this.loadActionDetails(action);\n }\n }\n \n async loadActionDetails(action: ActionWithDetails) {\n const rv = new RunView();\n \n try {\n const [paramsResult, resultCodesResult] = await rv.RunViews([\n {\n EntityName: 'MJ: Action Params',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'Sequence',\n ResultType: 'entity_object',\n MaxRows: 100\n },\n {\n EntityName: 'MJ: Action Result Codes',\n ExtraFilter: `ActionID='${action.ID}'`,\n OrderBy: 'ResultCode',\n ResultType: 'entity_object',\n MaxRows: 100\n }\n ]);\n \n if (paramsResult.Success) {\n action.parameters = paramsResult.Results as MJActionParamEntity[] || [];\n }\n \n if (resultCodesResult.Success) {\n action.resultCodes = resultCodesResult.Results as MJActionResultCodeEntity[] || [];\n }\n } catch (error) {\n console.error('Error loading action details:', error);\n }\n }\n \n toggleActionSelection(action: ActionWithDetails) {\n if (!this.config.selectionMode) return;\n \n const selected = this.selectedActions$.value;\n \n if (!this.config.multiSelect) {\n // Single select mode\n selected.clear();\n if (!action.selected) {\n selected.add(action.ID);\n action.selected = true;\n this.actionSelected.emit(action);\n }\n } else {\n // Multi-select mode\n if (action.selected) {\n selected.delete(action.ID);\n action.selected = false;\n } else {\n selected.add(action.ID);\n action.selected = true;\n }\n }\n \n this.selectedActions$.next(new Set(selected));\n \n if (this.config.multiSelect) {\n const selectedActions = this.actions$.value.filter(a => selected.has(a.ID));\n this.actionsSelected.emit(selectedActions);\n }\n }\n \n testAction(action: MJActionEntity, event: Event) {\n event.stopPropagation();\n \n if (this.config.enableQuickTest) {\n // TODO: Implement test harness integration\n console.log('Test action:', action.Name);\n }\n \n this.actionTestRequested.emit(action);\n }\n \n clearSearch() {\n this.searchControl.reset();\n if (this.searchInput) {\n this.searchInput.nativeElement.focus();\n }\n }\n \n getSelectedActions(): MJActionEntity[] {\n const selected = this.selectedActions$.value;\n return this.actions$.value.filter(a => selected.has(a.ID));\n }\n \n getActionIcon(action: MJActionEntity): string {\n const typeIcons: { [key: string]: string } = {\n 'Create': 'fa-plus-circle',\n 'Update': 'fa-edit',\n 'Delete': 'fa-trash',\n 'Query': 'fa-search',\n 'Process': 'fa-cogs',\n 'Email': 'fa-envelope',\n 'Report': 'fa-file-alt',\n 'Export': 'fa-file-export',\n 'Import': 'fa-file-import',\n 'API': 'fa-plug',\n 'Script': 'fa-code'\n };\n \n for (const [key, icon] of Object.entries(typeIcons)) {\n if (action.Name.toLowerCase().includes(key.toLowerCase()) || \n action.Type?.toLowerCase().includes(key.toLowerCase())) {\n return icon;\n }\n }\n \n return 'fa-bolt';\n }\n}","<div class=\"action-gallery\" [class.dark-theme]=\"config.theme === 'dark'\" [class.selection-mode]=\"config.selectionMode\">\n <!-- Gallery Header -->\n @if (config.showSearch) {\n <div class=\"gallery-header\">\n <div class=\"header-content\">\n <div class=\"search-section\">\n <div class=\"search-input-wrapper\">\n <i class=\"fa-solid fa-search\"></i>\n <input\n #searchInput\n class=\"mj-input search-input\"\n [formControl]=\"searchControl\"\n placeholder=\"Search actions by name, description, or category...\"\n />\n </div>\n </div>\n \n <div class=\"header-actions\">\n <div class=\"view-toggle\">\n <button mjButton\n size=\"sm\"\n (click)=\"toggleViewMode()\"\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\n <!-- Main Content -->\n <div class=\"gallery-content\" [class.no-categories]=\"!config.showCategories\">\n <!-- Category Sidebar -->\n @if (config.showCategories) {\n <div class=\"category-sidebar\">\n <div class=\"category-tree\">\n @for (category of categoryTree$ | async; track category.id) {\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 @if (category.children && category.children.length > 0) {\n <i class=\"fa-solid fa-chevron-right expand-icon\" \n [class.expanded]=\"expandedCategories.has(category.id)\"\n (click)=\"toggleCategoryExpanded(category.id); $event.stopPropagation()\"></i>\n }\n </div>\n \n <!-- Sub-categories -->\n @if (category.children && expandedCategories.has(category.id)) {\n <div class=\"sub-categories\">\n @for (subCategory of category.children; track subCategory.id) {\n <div class=\"category-item sub-category\" \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 }\n </div>\n }\n </div>\n }\n </div>\n </div>\n }\n\n <!-- Actions Display -->\n <div class=\"actions-container\">\n <!-- Loading State -->\n @if (isLoading$ | async) {\n <div class=\"loading-state\">\n <mj-loading text=\"Loading actions...\" size=\"large\"></mj-loading>\n </div>\n }\n\n <!-- Empty State -->\n @if (!(isLoading$ | async) && (filteredActions$ | async)?.length === 0) {\n <div class=\"empty-state\">\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 mjButton (click)=\"clearSearch()\">Clear Search</button>\n </div>\n }\n\n <!-- Grid View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'grid' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-grid\" \n [style.grid-template-columns]=\"'repeat(' + (config.gridColumns || 3) + ', 1fr)'\">\n \n @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"action-card\" \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 @if (action.Category) {\n <span class=\"category-badge\">\n <i class=\"fa-solid fa-folder\"></i>\n {{ action.Category }}\n </span>\n }\n </div>\n </div>\n <div class=\"card-actions\">\n @if (config.enableQuickTest) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"testAction(action, $event)\"\n title=\"Test this action\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\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 @if (action.parameters?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-sliders\"></i>\n {{ action.parameters?.length || 0 }} params\n </span>\n }\n @if (action.resultCodes?.length) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-code-branch\"></i>\n {{ action.resultCodes?.length || 0 }} results\n </span>\n }\n @if (action.Type) {\n <span class=\"stat\">\n <i class=\"fa-solid fa-tag\"></i>\n {{ action.Type }}\n </span>\n }\n </div>\n </div>\n \n <!-- Expanded Details -->\n @if (action.expanded) {\n <div class=\"card-details\">\n <!-- Parameters -->\n @if (action.parameters && action.parameters.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-sliders\"></i>\n Parameters\n </h4>\n <div class=\"parameters-list\">\n @for (param of action.parameters; track param.ID) {\n <div class=\"parameter-item\">\n <span class=\"param-name\">{{ param.Name }}</span>\n <span class=\"param-type\">{{ param.Type }}</span>\n @if (param.IsRequired) {\n <span class=\"param-required\">Required</span>\n }\n </div>\n }\n </div>\n </div>\n }\n \n <!-- Result Codes -->\n @if (action.resultCodes && action.resultCodes.length > 0) {\n <div class=\"detail-section\">\n <h4>\n <i class=\"fa-solid fa-code-branch\"></i>\n Result Codes\n </h4>\n <div class=\"result-codes-list\">\n @for (code of action.resultCodes; track code.ID) {\n <div class=\"result-code-item\">\n <span class=\"code-value\">{{ code.ResultCode }}</span>\n <span class=\"code-desc\">{{ code.Description }}</span>\n </div>\n }\n </div>\n </div>\n }\n </div>\n }\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n\n <!-- List View -->\n @if (!(isLoading$ | async) && (viewMode$ | async) === 'list' && (filteredActions$ | async) && (filteredActions$ | async)!.length > 0) {\n <div class=\"actions-list\">\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 @for (action of filteredActions$ | async; track action.ID) {\n <div class=\"list-item\" \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 @if (config.enableQuickTest) {\n <button mjButton\n variant=\"flat\"\n size=\"sm\"\n (click)=\"testAction(action, $event)\"\n title=\"Test this action\">\n <i class=\"fa-solid fa-play\"></i>\n </button>\n }\n </span>\n \n <!-- Selection Indicator -->\n @if (config.selectionMode) {\n <div class=\"selection-indicator\">\n <i class=\"fa-solid\" [class.fa-check-circle]=\"action.selected\" [class.fa-circle]=\"!action.selected\"></i>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n </div>\n</div>\n\n"]}
|
package/dist/module.d.ts
CHANGED
|
@@ -2,21 +2,12 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./lib/action-gallery.component";
|
|
3
3
|
import * as i2 from "@angular/common";
|
|
4
4
|
import * as i3 from "@angular/forms";
|
|
5
|
-
import * as i4 from "@
|
|
6
|
-
import * as i5 from "@
|
|
7
|
-
import * as i6 from "@
|
|
8
|
-
import * as i7 from "@progress/kendo-angular-inputs";
|
|
9
|
-
import * as i8 from "@progress/kendo-angular-layout";
|
|
10
|
-
import * as i9 from "@progress/kendo-angular-notification";
|
|
11
|
-
import * as i10 from "@progress/kendo-angular-indicators";
|
|
12
|
-
import * as i11 from "@progress/kendo-angular-tooltip";
|
|
13
|
-
import * as i12 from "@progress/kendo-angular-treeview";
|
|
14
|
-
import * as i13 from "@progress/kendo-angular-icons";
|
|
15
|
-
import * as i14 from "@memberjunction/ng-ai-test-harness";
|
|
16
|
-
import * as i15 from "@memberjunction/ng-shared-generic";
|
|
5
|
+
import * as i4 from "@memberjunction/ng-ui-components";
|
|
6
|
+
import * as i5 from "@memberjunction/ng-ai-test-harness";
|
|
7
|
+
import * as i6 from "@memberjunction/ng-shared-generic";
|
|
17
8
|
export declare class ActionGalleryModule {
|
|
18
9
|
static ɵfac: i0.ɵɵFactoryDeclaration<ActionGalleryModule, never>;
|
|
19
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<ActionGalleryModule, [typeof i1.ActionGalleryComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i3.ReactiveFormsModule, typeof i4.
|
|
10
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<ActionGalleryModule, [typeof i1.ActionGalleryComponent], [typeof i2.CommonModule, typeof i3.FormsModule, typeof i3.ReactiveFormsModule, typeof i4.MJButtonDirective, typeof i5.AITestHarnessModule, typeof i6.SharedGenericModule], [typeof i1.ActionGalleryComponent]>;
|
|
20
11
|
static ɵinj: i0.ɵɵInjectorDeclaration<ActionGalleryModule>;
|
|
21
12
|
}
|
|
22
13
|
//# sourceMappingURL=module.d.ts.map
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;AAiBA,qBAqBa,mBAAmB;yCAAnB,mBAAmB;0CAAnB,mBAAmB;0CAAnB,mBAAmB;CAAI"}
|
package/dist/module.js
CHANGED
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import { NgModule } from '@angular/core';
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
3
|
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
4
|
-
//
|
|
5
|
-
import {
|
|
6
|
-
import { DialogsModule } from '@progress/kendo-angular-dialog';
|
|
7
|
-
import { DropDownsModule } from '@progress/kendo-angular-dropdowns';
|
|
8
|
-
import { InputsModule } from '@progress/kendo-angular-inputs';
|
|
9
|
-
import { LayoutModule } from '@progress/kendo-angular-layout';
|
|
10
|
-
import { NotificationModule } from '@progress/kendo-angular-notification';
|
|
11
|
-
import { IndicatorsModule } from '@progress/kendo-angular-indicators';
|
|
12
|
-
import { TooltipsModule } from '@progress/kendo-angular-tooltip';
|
|
13
|
-
import { TreeViewModule } from '@progress/kendo-angular-treeview';
|
|
14
|
-
import { IconsModule } from '@progress/kendo-angular-icons';
|
|
4
|
+
// MJ UI Components
|
|
5
|
+
import { MJButtonDirective } from '@memberjunction/ng-ui-components';
|
|
15
6
|
// MemberJunction
|
|
16
7
|
import { AITestHarnessModule } from '@memberjunction/ng-ai-test-harness';
|
|
17
8
|
import { SharedGenericModule } from '@memberjunction/ng-shared-generic';
|
|
@@ -28,17 +19,6 @@ export class ActionGalleryModule {
|
|
|
28
19
|
], imports: [CommonModule,
|
|
29
20
|
FormsModule,
|
|
30
21
|
ReactiveFormsModule,
|
|
31
|
-
// Kendo UI
|
|
32
|
-
ButtonsModule,
|
|
33
|
-
DialogsModule,
|
|
34
|
-
DropDownsModule,
|
|
35
|
-
InputsModule,
|
|
36
|
-
LayoutModule,
|
|
37
|
-
NotificationModule,
|
|
38
|
-
IndicatorsModule,
|
|
39
|
-
TooltipsModule,
|
|
40
|
-
TreeViewModule,
|
|
41
|
-
IconsModule,
|
|
42
22
|
// MemberJunction
|
|
43
23
|
AITestHarnessModule,
|
|
44
24
|
SharedGenericModule] }); }
|
|
@@ -53,17 +33,8 @@ export class ActionGalleryModule {
|
|
|
53
33
|
CommonModule,
|
|
54
34
|
FormsModule,
|
|
55
35
|
ReactiveFormsModule,
|
|
56
|
-
//
|
|
57
|
-
|
|
58
|
-
DialogsModule,
|
|
59
|
-
DropDownsModule,
|
|
60
|
-
InputsModule,
|
|
61
|
-
LayoutModule,
|
|
62
|
-
NotificationModule,
|
|
63
|
-
IndicatorsModule,
|
|
64
|
-
TooltipsModule,
|
|
65
|
-
TreeViewModule,
|
|
66
|
-
IconsModule,
|
|
36
|
+
// MJ UI
|
|
37
|
+
MJButtonDirective,
|
|
67
38
|
// MemberJunction
|
|
68
39
|
AITestHarnessModule,
|
|
69
40
|
SharedGenericModule
|
|
@@ -79,17 +50,8 @@ export class ActionGalleryModule {
|
|
|
79
50
|
(function () { (typeof ngJitMode === "undefined" || ngJitMode) && i0.ɵɵsetNgModuleScope(ActionGalleryModule, { declarations: [ActionGalleryComponent], imports: [CommonModule,
|
|
80
51
|
FormsModule,
|
|
81
52
|
ReactiveFormsModule,
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
DialogsModule,
|
|
85
|
-
DropDownsModule,
|
|
86
|
-
InputsModule,
|
|
87
|
-
LayoutModule,
|
|
88
|
-
NotificationModule,
|
|
89
|
-
IndicatorsModule,
|
|
90
|
-
TooltipsModule,
|
|
91
|
-
TreeViewModule,
|
|
92
|
-
IconsModule,
|
|
53
|
+
// MJ UI
|
|
54
|
+
MJButtonDirective,
|
|
93
55
|
// MemberJunction
|
|
94
56
|
AITestHarnessModule,
|
|
95
57
|
SharedGenericModule], exports: [ActionGalleryComponent] }); })();
|
package/dist/module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAElE,mBAAmB;AACnB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAElE,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,iBAAiB;AACjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAExE,aAAa;AACb,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,WAAW;AACX,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;;AAuBjF,MAAM,OAAO,mBAAmB;oHAAnB,mBAAmB;mEAAnB,mBAAmB;wEAJnB;YACT,0BAA0B;SAC3B,YAdC,YAAY;YACZ,WAAW;YACX,mBAAmB;YAGnB,iBAAiB;YACjB,mBAAmB;YACnB,mBAAmB;;iFASV,mBAAmB;cArB/B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,sBAAsB;iBACvB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,mBAAmB;oBACnB,QAAQ;oBACR,iBAAiB;oBACjB,iBAAiB;oBACjB,mBAAmB;oBACnB,mBAAmB;iBACpB;gBACD,OAAO,EAAE;oBACP,sBAAsB;iBACvB;gBACD,SAAS,EAAE;oBACT,0BAA0B;iBAC3B;aACF;;wFACY,mBAAmB,mBAnB5B,sBAAsB,aAGtB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,QAAQ;QACR,iBAAiB;QACjB,iBAAiB;QACjB,mBAAmB;QACnB,mBAAmB,aAGnB,sBAAsB","sourcesContent":["import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\n// MJ UI Components\nimport { MJButtonDirective } from '@memberjunction/ng-ui-components';\n\n// MemberJunction\nimport { AITestHarnessModule } from '@memberjunction/ng-ai-test-harness';\nimport { SharedGenericModule } from '@memberjunction/ng-shared-generic';\n\n// Components\nimport { ActionGalleryComponent } from './lib/action-gallery.component';\n\n// Services\nimport { ActionGalleryDialogService } from './lib/action-gallery-dialog.service';\n\n@NgModule({\n declarations: [\n ActionGalleryComponent\n ],\n imports: [\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n // MJ UI\n MJButtonDirective,\n // MemberJunction\n AITestHarnessModule,\n SharedGenericModule\n ],\n exports: [\n ActionGalleryComponent\n ],\n providers: [\n ActionGalleryDialogService\n ]\n})\nexport class ActionGalleryModule { }"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ng-action-gallery",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.24.0",
|
|
4
4
|
"description": "MemberJunction Action Gallery - A beautiful, filterable gallery component for browsing and selecting actions",
|
|
5
5
|
"main": "./dist/public-api.js",
|
|
6
6
|
"typings": "./dist/public-api.d.ts",
|
|
@@ -33,22 +33,12 @@
|
|
|
33
33
|
"@angular/animations": "21.1.3"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@memberjunction/core": "5.
|
|
37
|
-
"@memberjunction/core-entities": "5.
|
|
38
|
-
"@memberjunction/ng-ai-test-harness": "5.
|
|
39
|
-
"@memberjunction/ng-container-directives": "5.
|
|
40
|
-
"@memberjunction/ng-shared-generic": "5.
|
|
41
|
-
"@
|
|
42
|
-
"@progress/kendo-angular-dialog": "22.0.1",
|
|
43
|
-
"@progress/kendo-angular-dropdowns": "22.0.1",
|
|
44
|
-
"@progress/kendo-angular-icons": "22.0.1",
|
|
45
|
-
"@progress/kendo-angular-indicators": "22.0.1",
|
|
46
|
-
"@progress/kendo-angular-inputs": "22.0.1",
|
|
47
|
-
"@progress/kendo-angular-layout": "22.0.1",
|
|
48
|
-
"@progress/kendo-angular-notification": "22.0.1",
|
|
49
|
-
"@progress/kendo-angular-tooltip": "22.0.1",
|
|
50
|
-
"@progress/kendo-angular-treeview": "22.0.1",
|
|
51
|
-
"@progress/kendo-theme-default": "12.3.0",
|
|
36
|
+
"@memberjunction/core": "5.24.0",
|
|
37
|
+
"@memberjunction/core-entities": "5.24.0",
|
|
38
|
+
"@memberjunction/ng-ai-test-harness": "5.24.0",
|
|
39
|
+
"@memberjunction/ng-container-directives": "5.24.0",
|
|
40
|
+
"@memberjunction/ng-shared-generic": "5.24.0",
|
|
41
|
+
"@memberjunction/ng-ui-components": "5.24.0",
|
|
52
42
|
"rxjs": "^7.8.2",
|
|
53
43
|
"tslib": "^2.8.1"
|
|
54
44
|
},
|