@memberjunction/ng-action-gallery 5.21.0 → 5.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  import { ViewContainerRef } from '@angular/core';
2
- import { DialogService } from '@progress/kendo-angular-dialog';
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: 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,aAAa,EAA6B,MAAM,gCAAgC,CAAC;AAC1F,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,CAA0B;gBAEvB,aAAa,EAAE,aAAa;IAEhD;;;;;OAKG;IACH,sBAAsB,CACpB,MAAM,GAAE,yBAA8B,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC;IA2BpC;;;;;OAKG;IACH,qBAAqB,CACnB,MAAM,GAAE,yBAA8B,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,UAAU,CAAC,cAAc,EAAE,CAAC;IA2B/B;;;;OAIG;IACH,eAAe,CACb,MAAM,GAAE,yBAA8B,EACtC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,IAAI;IAgCP;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB,OAAO,CAAC,UAAU;yCAtIP,0BAA0B;6CAA1B,0BAA0B;CAmKtC"}
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 "@progress/kendo-angular-dialog";
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.result.subscribe((result) => {
28
- if (result && result.action === 'submit') {
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.result.subscribe((result) => {
58
- if (result && result.action === 'submit') {
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', themeColor: 'base' }
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.content.instance;
96
+ const component = this.dialogRef.Content.instance;
97
97
  component.config = galleryConfig;
98
98
  // Handle dialog close
99
- this.dialogRef.result.subscribe(() => {
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.close();
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', themeColor: 'primary', action: 'submit' }
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.content.instance;
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.DialogService)); }; }
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.DialogService }], null); })();
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":"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","sourcesContent":["import { Injectable, ViewContainerRef } from '@angular/core';\nimport { DialogService, DialogRef, DialogSettings } from '@progress/kendo-angular-dialog';\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: DialogRef | null = null;\n\n constructor(private dialogService: DialogService) {}\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 if (result && (result as any).action === 'submit') {\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 if (result && (result as any).action === 'submit') {\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: DialogSettings = {\n title: config.title || 'Action Gallery',\n width: config.width || 1200,\n height: config.height || 800,\n minWidth: config.minWidth || 800,\n minHeight: config.minHeight || 600,\n content: ActionGalleryComponent,\n actions: [\n { text: 'Close', themeColor: 'base' }\n ],\n preventAction: () => false\n };\n\n this.dialogRef = this.dialogService.open(dialogSettings);\n \n // Configure the component\n const component = this.dialogRef.content.instance 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: DialogSettings = {\n title: config.title || 'Select Actions',\n width: config.width || 1200,\n height: config.height || 800,\n minWidth: config.minWidth || 800,\n minHeight: config.minHeight || 600,\n content: ActionGalleryComponent,\n actions: [\n { text: config.cancelButtonText || 'Cancel' },\n { text: config.submitButtonText || 'Select', themeColor: 'primary', action: 'submit' }\n ],\n preventAction: () => false\n };\n\n this.dialogRef = this.dialogService.open(dialogSettings);\n \n // Configure the component\n const component = this.dialogRef.content.instance as ActionGalleryComponent;\n component.config = config;\n component.preSelectedActions = config.preSelectedActions || [];\n \n // Handle result\n resultHandler(component);\n }\n}"]}
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 "@progress/kendo-angular-buttons";
9
- import * as i3 from "@progress/kendo-angular-inputs";
10
- import * as i4 from "@progress/kendo-angular-tooltip";
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, "kendo-textbox", 12, 0);
22
- i0.ɵɵtemplate(5, ActionGalleryComponent_Conditional_1_ng_template_5_Template, 1, 0, "ng-template", 13);
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(6, "div", 14)(7, "div", 15)(8, "button", 16);
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 ActionGalleryComponent_Conditional_1_Template_button_click_8_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.toggleViewMode()); });
28
- i0.ɵɵelement(11, "i", 17);
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", 18)(15, "span", 19);
33
- i0.ɵɵelement(16, "i", 20);
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 tmp_9_0;
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("toggleable", true)("selected", i0.ɵɵpipeBind1(9, 11, ctx_r1.viewMode$) === "grid")("title", i0.ɵɵpipeBind1(10, 13, ctx_r1.viewMode$) === "grid" ? "Switch to list view" : "Switch to grid view");
44
- i0.ɵɵadvance(3);
45
- i0.ɵɵclassProp("fa-th", i0.ɵɵpipeBind1(12, 15, ctx_r1.viewMode$) === "grid")("fa-list", i0.ɵɵpipeBind1(13, 17, ctx_r1.viewMode$) === "list");
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(" ", (tmp_9_0 = i0.ɵɵpipeBind1(18, 19, ctx_r1.filteredActions$)) == null ? null : tmp_9_0.length, " of ", ctx_r1.totalActions, " actions ");
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", 56);
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", 57);
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", 58);
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", 64);
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", 61)(1, "span", 62);
201
+ i0.ɵɵelementStart(0, "div", 62)(1, "span", 63);
207
202
  i0.ɵɵtext(2);
208
203
  i0.ɵɵelementEnd();
209
- i0.ɵɵelementStart(3, "span", 63);
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", 64);
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", 59)(1, "h4");
225
- i0.ɵɵelement(2, "i", 56);
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", 60);
229
- i0.ɵɵrepeaterCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_1_For_6_Template, 6, 3, "div", 61, _forTrack1);
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", 66)(1, "span", 67);
232
+ i0.ɵɵelementStart(0, "div", 67)(1, "span", 68);
238
233
  i0.ɵɵtext(2);
239
234
  i0.ɵɵelementEnd();
240
- i0.ɵɵelementStart(3, "span", 68);
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", 59)(1, "h4");
252
- i0.ɵɵelement(2, "i", 57);
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", 65);
256
- i0.ɵɵrepeaterCreate(5, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_For_6_Template, 5, 2, "div", 66, _forTrack1);
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", 59);
266
- i0.ɵɵconditionalCreate(2, ActionGalleryComponent_Conditional_10_For_2_Conditional_19_Conditional_2_Template, 7, 0, "div", 59);
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", 17);
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, 1, 0, "button", 46);
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", 17);
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", 76);
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", 70);
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", 71);
371
+ i0.ɵɵelementStart(4, "span", 72);
376
372
  i0.ɵɵtext(5);
377
373
  i0.ɵɵelementEnd();
378
- i0.ɵɵelementStart(6, "span", 72);
374
+ i0.ɵɵelementStart(6, "span", 73);
379
375
  i0.ɵɵtext(7);
380
376
  i0.ɵɵelementEnd();
381
- i0.ɵɵelementStart(8, "span", 73);
377
+ i0.ɵɵelementStart(8, "span", 74);
382
378
  i0.ɵɵtext(9);
383
379
  i0.ɵɵelementEnd();
384
- i0.ɵɵelementStart(10, "span", 74);
385
- i0.ɵɵconditionalCreate(11, ActionGalleryComponent_Conditional_15_For_13_Conditional_11_Template, 1, 0, "button", 46);
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", 69)(2, "span", 70);
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", 71);
408
+ i0.ɵɵelementStart(4, "span", 72);
413
409
  i0.ɵɵtext(5, "Category");
414
410
  i0.ɵɵelementEnd();
415
- i0.ɵɵelementStart(6, "span", 72);
411
+ i0.ɵɵelementStart(6, "span", 73);
416
412
  i0.ɵɵtext(7, "Type");
417
413
  i0.ɵɵelementEnd();
418
- i0.ɵɵelementStart(8, "span", 73);
414
+ i0.ɵɵelementStart(8, "span", 74);
419
415
  i0.ɵɵtext(9, "Parameters");
420
416
  i0.ɵɵelementEnd();
421
- i0.ɵɵelementStart(10, "span", 74);
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", 75, _forTrack1);
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, "search-input", 3, "formControl", "clearButton"], ["kendoTextBoxPrefixTemplate", ""], [1, "header-actions"], [1, "view-toggle"], ["kendoButton", "", "size", "small", "kendoTooltip", "", 3, "click", "toggleable", "selected", "title"], [1, "fa-solid"], [1, "stats"], [1, "stat-item"], [1, "fa-solid", "fa-bolt"], [1, "fa-solid", "fa-search"], [1, "category-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"], ["kendoButton", "", 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"], ["kendoButton", "", "look", "flat", "size", "small", "icon", "play", "kendoTooltip", "", "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"], ["kendoButton", "", "look", "flat", "size", "small", "icon", "play", "kendoTooltip", "", "title", "Test this action", 3, "click"], [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) {
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, 21, "div", 2);
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.ButtonComponent, i3.TextBoxComponent, i3.TextBoxPrefixTemplateDirective, i4.TooltipDirective, i5.LoadingComponent, i6.AsyncPipe], styles: ["\n\n\n\n\n\n\n\nbody[_ngcontent-%COMP%]::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}"] }); }
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 "@progress/kendo-angular-buttons";
6
- import * as i5 from "@progress/kendo-angular-dialog";
7
- import * as i6 from "@progress/kendo-angular-dropdowns";
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.ButtonsModule, typeof i5.DialogsModule, typeof i6.DropDownsModule, typeof i7.InputsModule, typeof i8.LayoutModule, typeof i9.NotificationModule, typeof i10.IndicatorsModule, typeof i11.TooltipsModule, typeof i12.TreeViewModule, typeof i13.IconsModule, typeof i14.AITestHarnessModule, typeof i15.SharedGenericModule], [typeof i1.ActionGalleryComponent]>;
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
@@ -1 +1 @@
1
- {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA0BA,qBA8Ba,mBAAmB;yCAAnB,mBAAmB;0CAAnB,mBAAmB;0CAAnB,mBAAmB;CAAI"}
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
- // Kendo UI Modules
5
- import { ButtonsModule } from '@progress/kendo-angular-buttons';
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
- // Kendo UI
57
- ButtonsModule,
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
- // Kendo UI
83
- ButtonsModule,
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] }); })();
@@ -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,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D,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;;AAgCjF,MAAM,OAAO,mBAAmB;oHAAnB,mBAAmB;mEAAnB,mBAAmB;wEAJnB;YACT,0BAA0B;SAC3B,YAvBC,YAAY;YACZ,WAAW;YACX,mBAAmB;YACnB,WAAW;YACX,aAAa;YACb,aAAa;YACb,eAAe;YACf,YAAY;YACZ,YAAY;YACZ,kBAAkB;YAClB,gBAAgB;YAChB,cAAc;YACd,cAAc;YACd,WAAW;YACX,iBAAiB;YACjB,mBAAmB;YACnB,mBAAmB;;iFASV,mBAAmB;cA9B/B,QAAQ;eAAC;gBACR,YAAY,EAAE;oBACZ,sBAAsB;iBACvB;gBACD,OAAO,EAAE;oBACP,YAAY;oBACZ,WAAW;oBACX,mBAAmB;oBACnB,WAAW;oBACX,aAAa;oBACb,aAAa;oBACb,eAAe;oBACf,YAAY;oBACZ,YAAY;oBACZ,kBAAkB;oBAClB,gBAAgB;oBAChB,cAAc;oBACd,cAAc;oBACd,WAAW;oBACX,iBAAiB;oBACjB,mBAAmB;oBACnB,mBAAmB;iBACpB;gBACD,OAAO,EAAE;oBACP,sBAAsB;iBACvB;gBACD,SAAS,EAAE;oBACT,0BAA0B;iBAC3B;aACF;;wFACY,mBAAmB,mBA5B5B,sBAAsB,aAGtB,YAAY;QACZ,WAAW;QACX,mBAAmB;QACnB,WAAW;QACX,aAAa;QACb,aAAa;QACb,eAAe;QACf,YAAY;QACZ,YAAY;QACZ,kBAAkB;QAClB,gBAAgB;QAChB,cAAc;QACd,cAAc;QACd,WAAW;QACX,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// Kendo UI Modules\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { DialogsModule } from '@progress/kendo-angular-dialog';\nimport { DropDownsModule } from '@progress/kendo-angular-dropdowns';\nimport { InputsModule } from '@progress/kendo-angular-inputs';\nimport { LayoutModule } from '@progress/kendo-angular-layout';\nimport { NotificationModule } from '@progress/kendo-angular-notification';\nimport { IndicatorsModule } from '@progress/kendo-angular-indicators';\nimport { TooltipsModule } from '@progress/kendo-angular-tooltip';\nimport { TreeViewModule } from '@progress/kendo-angular-treeview';\nimport { IconsModule } from '@progress/kendo-angular-icons';\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 // Kendo UI\n ButtonsModule,\n DialogsModule,\n DropDownsModule,\n InputsModule,\n LayoutModule,\n NotificationModule,\n IndicatorsModule,\n TooltipsModule,\n TreeViewModule,\n IconsModule,\n // MemberJunction\n AITestHarnessModule,\n SharedGenericModule\n ],\n exports: [\n ActionGalleryComponent\n ],\n providers: [\n ActionGalleryDialogService\n ]\n})\nexport class ActionGalleryModule { }"]}
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.21.0",
3
+ "version": "5.23.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.21.0",
37
- "@memberjunction/core-entities": "5.21.0",
38
- "@memberjunction/ng-ai-test-harness": "5.21.0",
39
- "@memberjunction/ng-container-directives": "5.21.0",
40
- "@memberjunction/ng-shared-generic": "5.21.0",
41
- "@progress/kendo-angular-buttons": "22.0.1",
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.23.0",
37
+ "@memberjunction/core-entities": "5.23.0",
38
+ "@memberjunction/ng-ai-test-harness": "5.23.0",
39
+ "@memberjunction/ng-container-directives": "5.23.0",
40
+ "@memberjunction/ng-shared-generic": "5.23.0",
41
+ "@memberjunction/ng-ui-components": "5.23.0",
52
42
  "rxjs": "^7.8.2",
53
43
  "tslib": "^2.8.1"
54
44
  },