ngssm-ag-grid 21.1.1 → 21.1.3

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.
@@ -161,7 +161,7 @@ var ChangeOrigin;
161
161
  * - The `isDisabled` and `isHidden` properties can accept multiple input types (boolean, function, signal, or observable), providing flexibility in defining button behavior.
162
162
  */
163
163
  class NgssmActionsCellRendererComponent {
164
- actionButtons = signal([], ...(ngDevMode ? [{ debugName: "actionButtons" }] : []));
164
+ actionButtons = signal([], ...(ngDevMode ? [{ debugName: "actionButtons" }] : /* istanbul ignore next */ []));
165
165
  environmentInjector = inject(EnvironmentInjector);
166
166
  cellParams;
167
167
  agInit(params) {
@@ -226,10 +226,10 @@ class NgssmActionsCellRendererComponent {
226
226
  setupPopupComponent(component, action) {
227
227
  component?.init?.(action.popupRendered, this.cellParams, action.actionConfig.popupParameter);
228
228
  }
229
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmActionsCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
230
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.3", type: NgssmActionsCellRendererComponent, isStandalone: true, selector: "ngssm-actions-cell-renderer", ngImport: i0, template: "<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
229
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmActionsCellRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
230
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.5", type: NgssmActionsCellRendererComponent, isStandalone: true, selector: "ngssm-actions-cell-renderer", ngImport: i0, template: "<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: NgssmComponentDisplayDirective, selector: "[ngssmComponentDisplay]", inputs: ["ngssmComponentDisplay", "ngssmComponentAction"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
231
231
  }
232
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmActionsCellRendererComponent, decorators: [{
232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmActionsCellRendererComponent, decorators: [{
233
233
  type: Component,
234
234
  args: [{ selector: 'ngssm-actions-cell-renderer', imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n" }]
235
235
  }] });
@@ -285,10 +285,10 @@ class NgssmAgGridThemeDirective {
285
285
  this.agGridAngular.defaultColDef = this.options?.defaultColDef;
286
286
  }
287
287
  }
288
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmAgGridThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
289
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.1.3", type: NgssmAgGridThemeDirective, isStandalone: true, selector: "[ngssmAgGridTheme]", host: { properties: { "class": "this.className" } }, ngImport: i0 });
288
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmAgGridThemeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
289
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.5", type: NgssmAgGridThemeDirective, isStandalone: true, selector: "[ngssmAgGridTheme]", host: { properties: { "class": "this.className" } }, ngImport: i0 });
290
290
  }
291
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmAgGridThemeDirective, decorators: [{
291
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmAgGridThemeDirective, decorators: [{
292
292
  type: Directive,
293
293
  args: [{
294
294
  selector: '[ngssmAgGridTheme]'
@@ -299,7 +299,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
299
299
  }] } });
300
300
 
301
301
  class NgssmAgGridDirective {
302
- config = input.required({ ...(ngDevMode ? { debugName: "config" } : {}), alias: 'ngssmAgGrid',
302
+ config = input.required({ ...(ngDevMode ? { debugName: "config" } : /* istanbul ignore next */ {}), alias: 'ngssmAgGrid',
303
303
  transform: (v) => {
304
304
  if (typeof v === 'string') {
305
305
  return {
@@ -315,7 +315,7 @@ class NgssmAgGridDirective {
315
315
  store = inject(Store);
316
316
  agGridAngular = inject(AgGridAngular);
317
317
  injector = inject(Injector);
318
- gridInitialized = signal(false, ...(ngDevMode ? [{ debugName: "gridInitialized" }] : []));
318
+ gridInitialized = signal(false, ...(ngDevMode ? [{ debugName: "gridInitialized" }] : /* istanbul ignore next */ []));
319
319
  gridStates = createSignal((state) => selectAgGridState(state).gridStates);
320
320
  selectedRows = createSignal((state) => selectAgGridState(state).selectedRows);
321
321
  constructor() {
@@ -351,7 +351,7 @@ class NgssmAgGridDirective {
351
351
  runInInjectionContext(this.injector, () => this.initSateChangeListener());
352
352
  effectRef.destroy();
353
353
  this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' done`);
354
- }, ...(ngDevMode ? [{ debugName: "effectRef" }] : []));
354
+ }, ...(ngDevMode ? [{ debugName: "effectRef" }] : /* istanbul ignore next */ []));
355
355
  // process changes in columns when not comming from ui
356
356
  effect(() => {
357
357
  if (!this.gridInitialized()) {
@@ -448,10 +448,10 @@ class NgssmAgGridDirective {
448
448
  }
449
449
  return menuItems;
450
450
  }
451
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmAgGridDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
452
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.1.3", type: NgssmAgGridDirective, isStandalone: true, selector: "[ngssmAgGrid]", inputs: { config: { classPropertyName: "config", publicName: "ngssmAgGrid", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
451
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmAgGridDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
452
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.5", type: NgssmAgGridDirective, isStandalone: true, selector: "[ngssmAgGrid]", inputs: { config: { classPropertyName: "config", publicName: "ngssmAgGrid", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 });
453
453
  }
454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NgssmAgGridDirective, decorators: [{
454
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: NgssmAgGridDirective, decorators: [{
455
455
  type: Directive,
456
456
  args: [{
457
457
  selector: '[ngssmAgGrid]'
@@ -559,11 +559,11 @@ class NgssmBaseCellEditor {
559
559
  * - The `isOpen` signal can be used to programmatically control the popup's visibility.
560
560
  */
561
561
  class ActionConfirmationPopupComponent {
562
- message = signal('No message', ...(ngDevMode ? [{ debugName: "message" }] : []));
563
- cancelButtonLabel = signal('No', ...(ngDevMode ? [{ debugName: "cancelButtonLabel" }] : []));
564
- confirmButtonLabel = signal('Yes', ...(ngDevMode ? [{ debugName: "confirmButtonLabel" }] : []));
565
- color = signal('primary', ...(ngDevMode ? [{ debugName: "color" }] : []));
566
- isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : []));
562
+ message = signal('No message', ...(ngDevMode ? [{ debugName: "message" }] : /* istanbul ignore next */ []));
563
+ cancelButtonLabel = signal('No', ...(ngDevMode ? [{ debugName: "cancelButtonLabel" }] : /* istanbul ignore next */ []));
564
+ confirmButtonLabel = signal('Yes', ...(ngDevMode ? [{ debugName: "confirmButtonLabel" }] : /* istanbul ignore next */ []));
565
+ color = signal('primary', ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
566
+ isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
567
567
  params;
568
568
  popupParameter;
569
569
  init(popupRendered, params, popupParameter) {
@@ -582,10 +582,10 @@ class ActionConfirmationPopupComponent {
582
582
  this.popupParameter?.confirmAction?.(this.params);
583
583
  this.closePopup();
584
584
  }
585
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ActionConfirmationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
586
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ActionConfirmationPopupComponent, isStandalone: true, selector: "ngssm-action-confirmation-popup", ngImport: i0, template: "<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n", dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
585
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ActionConfirmationPopupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
586
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.5", type: ActionConfirmationPopupComponent, isStandalone: true, selector: "ngssm-action-confirmation-popup", ngImport: i0, template: "<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n", dependencies: [{ kind: "component", type: MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "component", type: MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
587
587
  }
588
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ActionConfirmationPopupComponent, decorators: [{
588
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: ActionConfirmationPopupComponent, decorators: [{
589
589
  type: Component,
590
590
  args: [{ selector: 'ngssm-action-confirmation-popup', imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n" }]
591
591
  }] });
@@ -649,10 +649,10 @@ class LocalStorageEffect {
649
649
  getFilterModelLocalStorageKey(gridId) {
650
650
  return `ngssm-ag-grid_filters_${gridId}`;
651
651
  }
652
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: LocalStorageEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
653
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: LocalStorageEffect });
652
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LocalStorageEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
653
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LocalStorageEffect });
654
654
  }
655
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: LocalStorageEffect, decorators: [{
655
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: LocalStorageEffect, decorators: [{
656
656
  type: Injectable
657
657
  }] });
658
658
 
@@ -678,10 +678,10 @@ class GridStatesReducer {
678
678
  }
679
679
  return state;
680
680
  }
681
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GridStatesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
682
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GridStatesReducer });
681
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GridStatesReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
682
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GridStatesReducer });
683
683
  }
684
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: GridStatesReducer, decorators: [{
684
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: GridStatesReducer, decorators: [{
685
685
  type: Injectable
686
686
  }] });
687
687
 
@@ -705,10 +705,10 @@ class SelectedRowsReducer {
705
705
  }
706
706
  return state;
707
707
  }
708
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SelectedRowsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
709
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SelectedRowsReducer });
708
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SelectedRowsReducer, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
709
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SelectedRowsReducer });
710
710
  }
711
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SelectedRowsReducer, decorators: [{
711
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.5", ngImport: i0, type: SelectedRowsReducer, decorators: [{
712
712
  type: Injectable
713
713
  }] });
714
714
 
@@ -1 +1 @@
1
- {"version":3,"file":"ngssm-ag-grid.mjs","sources":["../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid-action-type.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-ag-grid-state.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-selected-rows.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid.action.ts","../../../projects/ngssm-ag-grid/src/lib/state/ag-grid.state.ts","../../../projects/ngssm-ag-grid/src/lib/state/change-origin.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.html","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer-params.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-config.ts","../../../projects/ngssm-ag-grid/src/lib/ngssm-ag-grid-options.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-theme.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-base-cell-editor.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.html","../../../projects/ngssm-ag-grid/src/lib/helpers.ts","../../../projects/ngssm-ag-grid/src/lib/effects/local-storage.effect.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/grid-states.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/selected-rows.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/provide-ngssm-ag-grid.ts","../../../projects/ngssm-ag-grid/src/public-api.ts","../../../projects/ngssm-ag-grid/src/ngssm-ag-grid.ts"],"sourcesContent":["export enum AgGridActionType {\n registerAgGridState = '[AgGridActionType] registerAgGridState',\n registerSelectedRows = '[AgGridActionType] registerSelectedRows',\n saveColumnStatesOnDisk = '[AgGridActionType] saveColumnStatesOnDisk',\n resetColumnStatesFromDisk = '[AgGridActionType] resetColumnStatesFromDisk'\n}\n","import { ColumnState, FilterModel } from 'ag-grid-community';\n\nimport { Action } from 'ngssm-store';\n\nimport { ChangeOrigin, ColumnGroupState } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterAgGridStateAction implements Action {\n public readonly type: string = AgGridActionType.registerAgGridState;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly columnStates: ColumnState[],\n public readonly columnGroupStates: ColumnGroupState[],\n public readonly filterModel: FilterModel | null\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ChangeOrigin } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterSelectedRowsAction implements Action {\n public readonly type: string = AgGridActionType.registerSelectedRows;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly ids: string[]\n ) {}\n}\n","import { Action } from 'ngssm-store';\n\nexport class AgGridAction implements Action {\n constructor(\n public readonly type: string,\n public readonly gridId: string\n ) {}\n}\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { GridState } from './grid-state';\nimport { SelectedRows } from './selected-rows';\n\nexport const selectAgGridState = (state: State): AgGridState => state[AgGridStateSpecification.featureStateKey] as AgGridState;\n\nexport const updateAgGridState = (state: State, command: Spec<AgGridState, never>): State =>\n update(state, {\n [AgGridStateSpecification.featureStateKey]: command\n });\n\nexport interface AgGridState {\n gridStates: Record<string, GridState>;\n selectedRows: Record<string, SelectedRows>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: AgGridStateSpecification.featureStateKey,\n initialState: AgGridStateSpecification.initialState\n})\nexport class AgGridStateSpecification {\n public static readonly featureStateKey = 'ag-grid-state';\n public static readonly initialState: AgGridState = {\n gridStates: {},\n selectedRows: {}\n };\n}\n","export enum ChangeOrigin {\n agGrid = 'agGrid',\n other = 'other'\n}\n","/**\n * The `NgssmActionsCellRendererComponent` is a custom cell renderer for `ag-grid` that dynamically renders\n * action buttons within a grid cell. It provides flexibility in configuring button behavior, visibility, and state.\n *\n * ### Features:\n * - Dynamically generates action buttons based on the provided configuration.\n * - Supports reactive state management using Angular signals.\n * - Integrates with observables, functions, or signals for `isDisabled` and `isHidden` properties.\n * - Provides customizable tooltips and button styles.\n * - Executes custom actions when buttons are clicked.\n *\n * ### Usage:\n * To use this component, provide it as a cell renderer in your `ag-grid` column definition:\n *\n * ```typescript\n * columnDefs: [\n * {\n * headerName: 'Actions',\n * field: 'actions',\n * cellRenderer: NgssmActionsCellRendererComponent,\n * cellRendererParams: {\n * actions: [\n * {\n * cssClass: 'delete-button',\n * color: 'warn',\n * tooltip: 'Delete Item',\n * isDisabled: (params) => params.data.isLocked,\n * isHidden: (params) => !params.data.canDelete,\n * click: (params) => console.log('Delete action clicked', params)\n * }\n * ]\n * }\n * }\n * ];\n * ```\n *\n * ### Inputs:\n * - `NgssmActionsCellRendererParams`: Configuration object passed to the component via `cellRendererParams`.\n * - `actions`: Array of `ActionConfig` objects defining the buttons to render.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatIconButton`, `MatIcon`, `MatTooltip`.\n * - `ag-grid-angular` for integration with `ag-grid`.\n *\n * ### Example ActionConfig:\n * ```typescript\n * interface ActionConfig {\n * cssClass: string; // CSS class for the button.\n * color?: string; // Button color (e.g., 'primary', 'warn').\n * tooltip?: string; // Tooltip text for the button.\n * isDisabled?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * isHidden?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * click?: (params: ICellRendererParams) => void; // Action to execute on button click.\n * }\n * ```\n *\n * ### Methods:\n * - `agInit(params: ICellRendererParams)`: Initializes the component with the provided cell renderer parameters.\n * - `refresh(params: ICellRendererParams)`: Refreshes the component state when the grid updates.\n * - `executeAction(action: ActionButton)`: Executes the action associated with a button.\n *\n * ### Internal Logic:\n * - The `setupActions` method initializes the action buttons based on the provided configuration.\n * - The `setUpActionSignal` method handles the initialization of `isDisabled` and `isHidden` states for each button.\n * - The component uses Angular signals (`WritableSignal` and `Signal`) to manage the state of `isDisabled` and `isHidden`.\n * - Observables are converted to signals using `toSignal` for seamless integration with Angular's reactivity system.\n *\n * ### Change Detection:\n * - The component uses `ChangeDetectionStrategy.OnPush` for improved performance by minimizing unnecessary change detection cycles.\n *\n * ### Notes:\n * - Ensure that the `actions` array in `NgssmActionsCellRendererParams` is properly configured to avoid runtime errors.\n * - The component is designed to work with Angular Material and requires the relevant modules to be imported in your application.\n * - The `isDisabled` and `isHidden` properties can accept multiple input types (boolean, function, signal, or observable), providing flexibility in defining button behavior.\n */\n\nimport {\n Component,\n ChangeDetectionStrategy,\n signal,\n WritableSignal,\n Signal,\n inject,\n EnvironmentInjector,\n runInInjectionContext,\n isSignal\n} from '@angular/core';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIconButton } from '@angular/material/button';\nimport { isObservable } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmActionsCellRendererParams } from './ngssm-actions-cell-renderer-params';\nimport { ActionConfig, ActionDisabledFunc, ActionHiddenFunc, ActionPopupComponent } from './action-config';\n\ninterface ActionButton {\n cssClass: string;\n color: string;\n\n isDisabled: WritableSignal<boolean> | Signal<boolean>;\n isHidden: WritableSignal<boolean> | Signal<boolean>;\n\n isDisabledInputAFunction: boolean;\n isHiddenInputAFunction: boolean;\n\n actionConfig: ActionConfig;\n\n tooltip: string;\n\n popupRendered: WritableSignal<boolean>;\n popupAction?: NgssmComponentAction;\n}\n\n@Component({\n selector: 'ngssm-actions-cell-renderer',\n imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-actions-cell-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmActionsCellRendererComponent implements ICellRendererAngularComp {\n public readonly actionButtons = signal<ActionButton[]>([]);\n\n private environmentInjector = inject(EnvironmentInjector);\n private cellParams: ICellRendererParams | undefined;\n\n public agInit(params: ICellRendererParams): void {\n this.cellParams = params;\n this.setupActions(params as unknown as NgssmActionsCellRendererParams);\n }\n\n public refresh(params: ICellRendererParams): boolean {\n this.cellParams = params;\n this.actionButtons().forEach((a) => {\n if (a.isDisabledInputAFunction) {\n (a.isDisabled as WritableSignal<boolean>).set((a.actionConfig.isDisabled as ActionDisabledFunc)(params));\n }\n\n if (a.isHiddenInputAFunction) {\n (a.isHidden as WritableSignal<boolean>).set((a.actionConfig.isHidden as ActionHiddenFunc)(params));\n }\n });\n return true;\n }\n\n public executeAction(action: ActionButton): void {\n const params = this.cellParams;\n if (params) {\n action.actionConfig.click?.(params);\n }\n }\n\n private setupActions(rendererParams: NgssmActionsCellRendererParams): void {\n runInInjectionContext(this.environmentInjector, () => {\n const actionButtons: ActionButton[] = (rendererParams?.actions ?? []).map((a) => {\n const actionButton: ActionButton = {\n cssClass: a.cssClass,\n color: a.color ?? 'primary',\n isDisabled: signal(false),\n isDisabledInputAFunction: false,\n isHidden: signal(false),\n isHiddenInputAFunction: false,\n actionConfig: a,\n tooltip: a.tooltip ?? '',\n popupRendered: signal(false)\n };\n\n if (a.popupComponent) {\n actionButton.popupAction = ((component: ActionPopupComponent) =>\n this.setupPopupComponent(component, actionButton)) as NgssmComponentAction;\n }\n\n this.setUpActionSignal(actionButton, a, rendererParams, 'isDisabled');\n this.setUpActionSignal(actionButton, a, rendererParams, 'isHidden');\n\n return actionButton;\n });\n\n this.actionButtons.set(actionButtons);\n });\n }\n\n private setUpActionSignal(\n actionButton: ActionButton,\n config: ActionConfig,\n rendererParams: NgssmActionsCellRendererParams,\n signalName: 'isDisabled' | 'isHidden'\n ): void {\n const input = config[signalName];\n\n if (isSignal(input)) {\n actionButton[signalName] = input as Signal<boolean>;\n } else if (input instanceof Function) {\n (actionButton[signalName] as WritableSignal<boolean>).set(input(rendererParams as unknown as ICellRendererParams));\n actionButton[`${signalName}InputAFunction`] = true;\n } else if (isObservable(input)) {\n actionButton[signalName] = toSignal(input, { initialValue: false });\n }\n }\n\n private setupPopupComponent(component: ActionPopupComponent, action: ActionButton): void {\n component?.init?.(action.popupRendered, this.cellParams as unknown as ICellRendererParams, action.actionConfig.popupParameter);\n }\n}\n","<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n","import { ColDef } from 'ag-grid-community';\n\nimport { ActionConfig } from './action-config';\nimport { NgssmActionsCellRendererComponent } from './ngssm-actions-cell-renderer.component';\n\n// Parameters of the actions cell renderer\n// For now, an action is rendered as a mat-icon-button with the class passed in ActionConfig\nexport interface NgssmActionsCellRendererParams<TData = unknown, TValue = unknown> {\n actions: ActionConfig<TData, TValue>[];\n}\n\nexport const getNgssmActionsCellColDef = <TData = unknown, TValue = unknown>(\n params: NgssmActionsCellRendererParams<TData, TValue>\n): Partial<ColDef> => ({\n cellRenderer: NgssmActionsCellRendererComponent,\n cellRendererParams: params\n});\n","import { AgPublicEventType, GetContextMenuItems } from 'ag-grid-community';\n\n/**\n * List of default ag-grid events listened by the directive to update the stored state.\n */\nexport const defaultAgGridColumnsEvents: AgPublicEventType[] = [\n 'sortChanged',\n 'filterChanged',\n 'columnPinned',\n 'columnResized',\n 'displayedColumnsChanged',\n 'filterChanged',\n 'columnGroupOpened'\n];\n\n/**\n * Configuration parameters of the {@link NgssmAgGridDirective} directive to apply on a\n * {@link https://www.ag-grid.com/ ag-grid instance}\n */\nexport interface NgssmAgGridConfig {\n /**\n * Unique identifier of the grid on which the directive is applied\n */\n gridId: string;\n\n /**\n * If true, the selected rows are stored in the state and restored when the directive is created.\n */\n keepSelection?: boolean;\n\n /**\n * If true, context menus are added to the grid to save the columns state into the local storage\n * and to restore from the local storage.\n *\n * @remarks\n *\n * this functionnality is only available for enterprise version of {@link https://www.ag-grid.com/}.\n */\n canSaveOnDiskColumnStates?: boolean;\n\n /**\n * Used to override default context menu items.\n */\n getContextMenuItems?: GetContextMenuItems;\n\n /**\n * Defines the list of ag-grid events listened to by the directive to update the state of stored columns.\n * By default: defaultAgGridColumnsEvents\n */\n listenedColumnsEvents?: AgPublicEventType[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { ColDef, StatusPanelDef } from 'ag-grid-community';\n\n/**\n * Configuration options for NgssmAgGrid.\n * - theme: The CSS theme to use for the grid.\n * - statusBar: Optional status bar configuration for AG Grid.\n * - defaultColDef: Optional default column definition for all columns.\n * - loadSavedGridStatesAtStartup: If true, grid states saved in local storage are loaded during app initialization.\n */\nexport class NgssmAgGridOptions {\n theme = 'ag-theme-material';\n statusBar:\n | {\n statusPanels: StatusPanelDef[];\n }\n | undefined = undefined;\n defaultColDef: ColDef | undefined = undefined;\n loadSavedGridStatesAtStartup?: boolean = undefined;\n}\n\n/**\n * Injection token for providing NgssmAgGridOptions in Angular DI.\n *\n * Provide options through the provideNgssmAgGrid function instead of using this token.\n */\nexport const NGSSM_AG_GRID_OPTIONS = new InjectionToken<NgssmAgGridOptions>('NGSSM_AG_GRID_OPTIONS');\n","import { Directive, HostBinding, inject } from '@angular/core';\n\nimport { AgGridAngular } from 'ag-grid-angular';\n\nimport { NgssmAgGridOptions, NGSSM_AG_GRID_OPTIONS } from '../ngssm-ag-grid-options';\n\n@Directive({\n selector: '[ngssmAgGridTheme]'\n})\nexport class NgssmAgGridThemeDirective {\n @HostBinding('class') className = '';\n\n private readonly options: NgssmAgGridOptions | null = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n private agGridAngular = inject(AgGridAngular);\n\n constructor() {\n this.className = (this.options ?? new NgssmAgGridOptions()).theme;\n if (this.agGridAngular.statusBar === undefined) {\n this.agGridAngular.statusBar = this.options?.statusBar;\n }\n\n if (this.agGridAngular.defaultColDef === undefined) {\n this.agGridAngular.defaultColDef = this.options?.defaultColDef;\n }\n }\n}\n","import { Directive, inject, signal, input, effect, runInInjectionContext, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { take } from 'rxjs';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport { DefaultMenuItem, GetContextMenuItemsParams, MenuItemDef } from 'ag-grid-community';\n\nimport { createSignal, Logger, Store } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction, RegisterSelectedRowsAction } from '../actions';\nimport { ChangeOrigin, ColumnGroupState, selectAgGridState } from '../state';\nimport { defaultAgGridColumnsEvents, NgssmAgGridConfig } from './ngssm-ag-grid-config';\n\n@Directive({\n selector: '[ngssmAgGrid]'\n})\nexport class NgssmAgGridDirective {\n public readonly config = input.required<NgssmAgGridConfig, string | NgssmAgGridConfig>({\n alias: 'ngssmAgGrid',\n transform: (v) => {\n if (typeof v === 'string') {\n return {\n gridId: v as string\n };\n }\n\n const conf = v as NgssmAgGridConfig;\n return {\n ...conf\n };\n }\n });\n\n private readonly logger = inject(Logger);\n private readonly store = inject(Store);\n private readonly agGridAngular = inject(AgGridAngular);\n private readonly injector = inject(Injector);\n\n private readonly gridInitialized = signal(false);\n private readonly gridStates = createSignal((state) => selectAgGridState(state).gridStates);\n private readonly selectedRows = createSignal((state) => selectAgGridState(state).selectedRows);\n\n constructor() {\n this.logger.information(`[NgssmAgGridDirective] Initialization...`);\n\n // Setup gridInintialized signal\n this.agGridAngular.gridReady.pipe(take(1)).subscribe(() => this.gridInitialized.set(true));\n\n // Apply registered grid setup if any and start listening to ag-grid events\n const effectRef = effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' in progress`);\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState) {\n this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnStates,\n applyOrder: true\n });\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n\n if (this.config().keepSelection) {\n const selection = this.selectedRows()[this.config().gridId];\n if (selection) {\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n }\n }\n\n runInInjectionContext(this.injector, () => this.initSateChangeListener());\n\n effectRef.destroy();\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' done`);\n });\n\n // process changes in columns when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState?.origin === ChangeOrigin.other) {\n this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnStates,\n applyOrder: true\n });\n\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n });\n\n // process changes in selection when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selection = this.selectedRows()[this.config().gridId];\n if (!selection || selection.origin !== ChangeOrigin.other) {\n return;\n }\n\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n });\n\n this.agGridAngular.getContextMenuItems = (params) => this.getContextMenuItems(params);\n this.logger.information(`[NgssmAgGridDirective] Initialization done.`);\n }\n\n private initSateChangeListener(): void {\n (this.config().listenedColumnsEvents ?? defaultAgGridColumnsEvents).forEach((eventType) => {\n this.agGridAngular.api.addEventListener(eventType, () => this.saveGridState());\n });\n\n this.agGridAngular.rowSelected.pipe(takeUntilDestroyed()).subscribe(() => this.processSelectionChanged());\n }\n\n private saveGridState(): void {\n const state = this.agGridAngular.api.getColumnState();\n const filterModel = this.agGridAngular.api.getFilterModel();\n const columnGroupStates: ColumnGroupState[] = this.agGridAngular.api.getColumnGroupState();\n this.store.dispatchAction(\n new RegisterAgGridStateAction(this.config().gridId, ChangeOrigin.agGrid, state, columnGroupStates, filterModel)\n );\n }\n\n private processSelectionChanged(): void {\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selectedRows = this.agGridAngular.api\n .getSelectedNodes()\n .map((n) => n.id ?? '')\n .filter((n) => n !== '');\n\n this.store.dispatchAction(new RegisterSelectedRowsAction(this.config().gridId, ChangeOrigin.agGrid, selectedRows));\n }\n\n private getContextMenuItems(params: GetContextMenuItemsParams): (DefaultMenuItem | MenuItemDef)[] {\n this.logger.information('[NgssmAgGridDirective] Generating the context menu...');\n const menuItems: (DefaultMenuItem | MenuItemDef)[] = [];\n const getContextMenuItems = this.config().getContextMenuItems;\n if (getContextMenuItems) {\n menuItems.push(...(getContextMenuItems(params) as (DefaultMenuItem | MenuItemDef)[]));\n } else {\n menuItems.push(...(params.defaultItems ?? []));\n }\n\n if (this.config().canSaveOnDiskColumnStates === true) {\n const gridId = this.config().gridId;\n menuItems.push(\n ...[\n 'separator' as DefaultMenuItem,\n {\n name: 'Save columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.saveColumnStatesOnDisk, gridId)),\n icon: '<i class=\"fa-regular fa-floppy-disk\"></i>'\n },\n {\n name: 'Restore columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnStatesFromDisk, gridId)),\n icon: '<i class=\"fa-solid fa-rotate-right\"></i>'\n },\n {\n name: 'Reset columns state to default',\n action: () => {\n this.agGridAngular.api.resetColumnState();\n this.agGridAngular.api.resetColumnGroupState();\n this.agGridAngular.api.setFilterModel(null);\n },\n icon: '<i class=\"fa-solid fa-clock-rotate-left\"></i>'\n }\n ]\n );\n }\n return menuItems;\n }\n}\n","import { ICellEditorAngularComp } from 'ag-grid-angular';\nimport { ICellEditorParams } from 'ag-grid-community';\n\nexport abstract class NgssmBaseCellEditor implements ICellEditorAngularComp {\n protected params?: ICellEditorParams;\n\n public agInit(params: ICellEditorParams): void {\n this.params = params;\n }\n\n public getValue() {\n return '';\n }\n\n public isPopup(): boolean {\n return true;\n }\n\n public getPopupPosition(): 'over' | 'under' | undefined {\n return 'over';\n }\n\n public isCancelAfterEnd(): boolean {\n return true;\n }\n\n public cancel(): void {\n this.params?.stopEditing();\n }\n}\n","import { ChangeDetectionStrategy, Component, signal, WritableSignal } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatCard, MatCardActions, MatCardTitle, MatCardHeader } from '@angular/material/card';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { ActionConfirmationPopupParameter } from './action-confirmation-popup-parameter';\nimport { ActionPopupComponent } from '../ngssm-actions-cell-renderer';\n\n/**\n * The `ActionConfirmationPopupComponent` is a reusable confirmation popup component designed to work with `ag-grid`.\n * It provides a customizable confirmation dialog for user actions, allowing developers to define messages, button labels,\n * and actions dynamically.\n *\n * ### Features:\n * - Displays a confirmation popup with customizable message, button labels, and color.\n * - Integrates with the `ActionPopupComponent` interface for seamless use with `NgssmActionsCellRendererComponent`.\n * - Uses Angular signals for efficient state management.\n * - Supports dynamic initialization with parameters provided by `ag-grid`.\n * - Provides methods to handle user actions (confirm or cancel) and close the popup.\n *\n * ### Usage:\n * This component is typically used as a popup in conjunction with the `NgssmActionsCellRendererComponent`.\n * To configure it, pass an `ActionConfirmationPopupParameter` object when initializing the popup.\n *\n * Example:\n * ```typescript\n * const popupParameter: ActionConfirmationPopupParameter = {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * };\n * ```\n *\n * ### Inputs:\n * - `popupRendered`: A writable signal indicating whether the popup is currently rendered.\n * - `params`: The cell renderer parameters provided by `ag-grid`.\n * - `popupParameter`: An object of type `ActionConfirmationPopupParameter` that defines the popup's behavior and content.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatCard`, `MatButton`.\n * - `ag-grid-community` for integration with `ag-grid`.\n *\n * ### Methods:\n * - `init(popupRendered, params, popupParameter)`: Initializes the popup with the provided parameters.\n * - `popupRendered`: A writable signal to track the popup's visibility.\n * - `params`: The cell renderer parameters from `ag-grid`.\n * - `popupParameter`: The configuration object for the popup.\n *\n * - `closePopup()`: Closes the popup by setting the `isOpen` signal to `false`.\n *\n * - `executeAction()`: Executes the confirmation action defined in the `popupParameter` and closes the popup.\n *\n * ### Signals:\n * - `message`: The message displayed in the popup.\n * - `cancelButtonLabel`: The label for the cancel button.\n * - `confirmButtonLabel`: The label for the confirm button.\n * - `color`: The color theme for the confirm button (e.g., 'primary', 'warn').\n * - `isOpen`: Tracks whether the popup is currently open.\n *\n * ### Example Initialization:\n * ```typescript\n * const popup = new ActionConfirmationPopupComponent();\n * popup.init(\n * popupRenderedSignal,\n * cellRendererParams,\n * {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * }\n * );\n * ```\n *\n * ### Notes:\n * - Ensure that the `popupParameter` object is properly configured to avoid runtime errors.\n * - The `messageBuilder` function in `popupParameter` allows dynamic message generation based on the `params` object.\n * - The component uses `ChangeDetectionStrategy.OnPush` for performance optimization.\n * - The `isOpen` signal can be used to programmatically control the popup's visibility.\n */\n@Component({\n selector: 'ngssm-action-confirmation-popup',\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton],\n templateUrl: './action-confirmation-popup.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionConfirmationPopupComponent implements ActionPopupComponent<unknown, unknown, ActionConfirmationPopupParameter> {\n public readonly message = signal<string>('No message');\n public readonly cancelButtonLabel = signal<string>('No');\n public readonly confirmButtonLabel = signal<string>('Yes');\n public readonly color = signal<string>('primary');\n\n public isOpen = signal<boolean>(false);\n\n private params?: ICellRendererParams;\n private popupParameter?: ActionConfirmationPopupParameter;\n\n public init(\n popupRendered: WritableSignal<boolean>,\n params?: ICellRendererParams<unknown, unknown>,\n popupParameter?: ActionConfirmationPopupParameter\n ): void {\n this.params = params;\n this.popupParameter = popupParameter;\n\n this.message.set(popupParameter?.messageBuilder?.(params) ?? 'No message');\n this.color.set(popupParameter?.color ?? 'primary');\n this.cancelButtonLabel.set(popupParameter?.cancelButtonLabel ?? 'Cancel');\n this.confirmButtonLabel.set(popupParameter?.confirmButtonLabel ?? 'Confirm');\n\n this.isOpen = popupRendered;\n }\n\n public closePopup(): void {\n this.isOpen.set(false);\n }\n\n public executeAction(): void {\n this.popupParameter?.confirmAction?.(this.params);\n this.closePopup();\n }\n}\n","<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n","import { ColDef } from 'ag-grid-community';\n\nexport const getColDefWithNoPadding = (): Partial<ColDef> => ({\n cellClass: ['cell-with-no-padding']\n});\n\nexport const getColDefForEditableColumn = (): Partial<ColDef> => ({\n editable: true,\n headerClass: 'ngssm-ag-editable-cell',\n valueSetter: () => false\n});\n","import { inject, Injectable } from '@angular/core';\n\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { ChangeOrigin, selectAgGridState } from '../state';\n\n@Injectable()\nexport class LocalStorageEffect implements Effect {\n public readonly processedActions: string[] = [AgGridActionType.saveColumnStatesOnDisk, AgGridActionType.resetColumnStatesFromDisk];\n\n private readonly logger = inject(Logger);\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const agGridAction = action as AgGridAction;\n\n switch (action.type) {\n case AgGridActionType.saveColumnStatesOnDisk: {\n const gridState = selectAgGridState(state).gridStates[agGridAction.gridId];\n if (gridState) {\n localStorage.setItem(this.getColumnStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnStates));\n localStorage.setItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnGroupStates));\n if (gridState.filterModel) {\n localStorage.setItem(this.getFilterModelLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.filterModel));\n }\n }\n\n break;\n }\n\n case AgGridActionType.resetColumnStatesFromDisk: {\n const stored = localStorage.getItem(this.getColumnStatesLocalStorageKey(agGridAction.gridId));\n const columnGroupStates = localStorage.getItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId));\n const filterModelStored = localStorage.getItem(this.getFilterModelLocalStorageKey(agGridAction.gridId));\n console.log(stored, filterModelStored);\n if (stored) {\n try {\n const columnStates = JSON.parse(stored);\n if (Array.isArray(columnStates)) {\n const action = new RegisterAgGridStateAction(\n agGridAction.gridId,\n ChangeOrigin.other,\n columnStates,\n columnGroupStates ? JSON.parse(columnGroupStates) : [],\n filterModelStored ? JSON.parse(filterModelStored) : null\n );\n actiondispatcher.dispatchAction(action);\n } else {\n this.logger.error(`Wrong columns state config for grid '${agGridAction.gridId}'`, stored);\n }\n } catch (error) {\n this.logger.error(`Unable to load config for grid '${agGridAction.gridId}'`, error);\n }\n }\n\n break;\n }\n }\n }\n\n private getColumnStatesLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_${gridId}`;\n }\n\n private getcolumnGroupStatesLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_groups_${gridId}`;\n }\n\n private getFilterModelLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_filters_${gridId}`;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class GridStatesReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerAgGridState];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerAgGridState: {\n const registerAgGridStateAction = action as RegisterAgGridStateAction;\n return updateAgGridState(state, {\n gridStates: {\n [registerAgGridStateAction.gridId]: {\n $set: {\n origin: registerAgGridStateAction.origin,\n columnStates: registerAgGridStateAction.columnStates,\n columnGroupStates: registerAgGridStateAction.columnGroupStates,\n filterModel: registerAgGridStateAction.filterModel\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterSelectedRowsAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class SelectedRowsReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerSelectedRows];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerSelectedRows: {\n const registerSelectedRowsAction = action as RegisterSelectedRowsAction;\n return updateAgGridState(state, {\n selectedRows: {\n [registerSelectedRowsAction.gridId]: {\n $set: {\n origin: registerSelectedRowsAction.origin,\n ids: registerSelectedRowsAction.ids\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\n\nimport { Logger, provideEffect, provideReducers, Store } from 'ngssm-store';\n\nimport { LocalStorageEffect } from './effects/local-storage.effect';\nimport { GridStatesReducer } from './reducers/grid-states.reducer';\nimport { SelectedRowsReducer } from './reducers/selected-rows.reducer';\nimport { NGSSM_AG_GRID_OPTIONS, NgssmAgGridOptions } from './ngssm-ag-grid-options';\nimport { AgGridAction, AgGridActionType } from './actions';\n\n/**\n * Loads saved grid states from localStorage at application startup if enabled in options.\n * Dispatches actions to restore grid state for each matching key.\n */\nexport const loadGridStates = () => {\n const logger = inject(Logger);\n const options = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n if (!options?.loadSavedGridStatesAtStartup) {\n logger.information('[ag-grid] No grid state must be loaded at startup.');\n return;\n }\n\n const store = inject(Store);\n const wantedPrefix = 'ngssm-ag-grid_';\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(wantedPrefix)) {\n const gridId = key.slice(wantedPrefix.length);\n logger.information(`[ag-grid] Restoring '${gridId}'.`);\n store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnStatesFromDisk, gridId));\n }\n }\n};\n\n/**\n * Provides all necessary providers for NgssmAgGrid, including reducers, effects, options, and grid state loading.\n * @param options Optional configuration for the grid.\n * @returns EnvironmentProviders for NgssmAgGrid.\n */\nexport const provideNgssmAgGrid = (options?: NgssmAgGridOptions): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideAppInitializer(loadGridStates),\n {\n provide: NGSSM_AG_GRID_OPTIONS,\n useValue: options ?? null\n },\n provideReducers(GridStatesReducer, SelectedRowsReducer),\n provideEffect(LocalStorageEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-ag-grid\n */\n\nexport * from './lib/actions';\nexport * from './lib/state';\nexport * from './lib/components';\nexport * from './lib/ngssm-ag-grid-options';\nexport * from './lib/helpers';\nexport * from './lib/provide-ngssm-ag-grid';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngssm-ag-grid.mjs","sources":["../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid-action-type.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-ag-grid-state.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/register-selected-rows.action.ts","../../../projects/ngssm-ag-grid/src/lib/actions/ag-grid.action.ts","../../../projects/ngssm-ag-grid/src/lib/state/ag-grid.state.ts","../../../projects/ngssm-ag-grid/src/lib/state/change-origin.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer.component.html","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-actions-cell-renderer/ngssm-actions-cell-renderer-params.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-config.ts","../../../projects/ngssm-ag-grid/src/lib/ngssm-ag-grid-options.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid-theme.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-ag-grid.directive.ts","../../../projects/ngssm-ag-grid/src/lib/components/ngssm-base-cell-editor.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.ts","../../../projects/ngssm-ag-grid/src/lib/components/action-confirmation-popup/action-confirmation-popup.component.html","../../../projects/ngssm-ag-grid/src/lib/helpers.ts","../../../projects/ngssm-ag-grid/src/lib/effects/local-storage.effect.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/grid-states.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/reducers/selected-rows.reducer.ts","../../../projects/ngssm-ag-grid/src/lib/provide-ngssm-ag-grid.ts","../../../projects/ngssm-ag-grid/src/public-api.ts","../../../projects/ngssm-ag-grid/src/ngssm-ag-grid.ts"],"sourcesContent":["export enum AgGridActionType {\n registerAgGridState = '[AgGridActionType] registerAgGridState',\n registerSelectedRows = '[AgGridActionType] registerSelectedRows',\n saveColumnStatesOnDisk = '[AgGridActionType] saveColumnStatesOnDisk',\n resetColumnStatesFromDisk = '[AgGridActionType] resetColumnStatesFromDisk'\n}\n","import { ColumnState, FilterModel } from 'ag-grid-community';\n\nimport { Action } from 'ngssm-store';\n\nimport { ChangeOrigin, ColumnGroupState } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterAgGridStateAction implements Action {\n public readonly type: string = AgGridActionType.registerAgGridState;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly columnStates: ColumnState[],\n public readonly columnGroupStates: ColumnGroupState[],\n public readonly filterModel: FilterModel | null\n ) {}\n}\n","import { Action } from 'ngssm-store';\nimport { ChangeOrigin } from '../state';\nimport { AgGridActionType } from './ag-grid-action-type';\n\nexport class RegisterSelectedRowsAction implements Action {\n public readonly type: string = AgGridActionType.registerSelectedRows;\n\n constructor(\n public readonly gridId: string,\n public readonly origin: ChangeOrigin,\n public readonly ids: string[]\n ) {}\n}\n","import { Action } from 'ngssm-store';\n\nexport class AgGridAction implements Action {\n constructor(\n public readonly type: string,\n public readonly gridId: string\n ) {}\n}\n","import update, { Spec } from 'immutability-helper';\n\nimport { NgSsmFeatureState, State } from 'ngssm-store';\nimport { GridState } from './grid-state';\nimport { SelectedRows } from './selected-rows';\n\nexport const selectAgGridState = (state: State): AgGridState => state[AgGridStateSpecification.featureStateKey] as AgGridState;\n\nexport const updateAgGridState = (state: State, command: Spec<AgGridState, never>): State =>\n update(state, {\n [AgGridStateSpecification.featureStateKey]: command\n });\n\nexport interface AgGridState {\n gridStates: Record<string, GridState>;\n selectedRows: Record<string, SelectedRows>;\n}\n\n@NgSsmFeatureState({\n featureStateKey: AgGridStateSpecification.featureStateKey,\n initialState: AgGridStateSpecification.initialState\n})\nexport class AgGridStateSpecification {\n public static readonly featureStateKey = 'ag-grid-state';\n public static readonly initialState: AgGridState = {\n gridStates: {},\n selectedRows: {}\n };\n}\n","export enum ChangeOrigin {\n agGrid = 'agGrid',\n other = 'other'\n}\n","/**\n * The `NgssmActionsCellRendererComponent` is a custom cell renderer for `ag-grid` that dynamically renders\n * action buttons within a grid cell. It provides flexibility in configuring button behavior, visibility, and state.\n *\n * ### Features:\n * - Dynamically generates action buttons based on the provided configuration.\n * - Supports reactive state management using Angular signals.\n * - Integrates with observables, functions, or signals for `isDisabled` and `isHidden` properties.\n * - Provides customizable tooltips and button styles.\n * - Executes custom actions when buttons are clicked.\n *\n * ### Usage:\n * To use this component, provide it as a cell renderer in your `ag-grid` column definition:\n *\n * ```typescript\n * columnDefs: [\n * {\n * headerName: 'Actions',\n * field: 'actions',\n * cellRenderer: NgssmActionsCellRendererComponent,\n * cellRendererParams: {\n * actions: [\n * {\n * cssClass: 'delete-button',\n * color: 'warn',\n * tooltip: 'Delete Item',\n * isDisabled: (params) => params.data.isLocked,\n * isHidden: (params) => !params.data.canDelete,\n * click: (params) => console.log('Delete action clicked', params)\n * }\n * ]\n * }\n * }\n * ];\n * ```\n *\n * ### Inputs:\n * - `NgssmActionsCellRendererParams`: Configuration object passed to the component via `cellRendererParams`.\n * - `actions`: Array of `ActionConfig` objects defining the buttons to render.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatIconButton`, `MatIcon`, `MatTooltip`.\n * - `ag-grid-angular` for integration with `ag-grid`.\n *\n * ### Example ActionConfig:\n * ```typescript\n * interface ActionConfig {\n * cssClass: string; // CSS class for the button.\n * color?: string; // Button color (e.g., 'primary', 'warn').\n * tooltip?: string; // Tooltip text for the button.\n * isDisabled?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * isHidden?: boolean | Signal<boolean> | Observable<boolean> | ((params: ICellRendererParams) => boolean);\n * click?: (params: ICellRendererParams) => void; // Action to execute on button click.\n * }\n * ```\n *\n * ### Methods:\n * - `agInit(params: ICellRendererParams)`: Initializes the component with the provided cell renderer parameters.\n * - `refresh(params: ICellRendererParams)`: Refreshes the component state when the grid updates.\n * - `executeAction(action: ActionButton)`: Executes the action associated with a button.\n *\n * ### Internal Logic:\n * - The `setupActions` method initializes the action buttons based on the provided configuration.\n * - The `setUpActionSignal` method handles the initialization of `isDisabled` and `isHidden` states for each button.\n * - The component uses Angular signals (`WritableSignal` and `Signal`) to manage the state of `isDisabled` and `isHidden`.\n * - Observables are converted to signals using `toSignal` for seamless integration with Angular's reactivity system.\n *\n * ### Change Detection:\n * - The component uses `ChangeDetectionStrategy.OnPush` for improved performance by minimizing unnecessary change detection cycles.\n *\n * ### Notes:\n * - Ensure that the `actions` array in `NgssmActionsCellRendererParams` is properly configured to avoid runtime errors.\n * - The component is designed to work with Angular Material and requires the relevant modules to be imported in your application.\n * - The `isDisabled` and `isHidden` properties can accept multiple input types (boolean, function, signal, or observable), providing flexibility in defining button behavior.\n */\n\nimport {\n Component,\n ChangeDetectionStrategy,\n signal,\n WritableSignal,\n Signal,\n inject,\n EnvironmentInjector,\n runInInjectionContext,\n isSignal\n} from '@angular/core';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport { MatIconButton } from '@angular/material/button';\nimport { isObservable } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { ICellRendererAngularComp } from 'ag-grid-angular';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { NgssmComponentAction, NgssmComponentDisplayDirective } from 'ngssm-toolkit';\n\nimport { NgssmActionsCellRendererParams } from './ngssm-actions-cell-renderer-params';\nimport { ActionConfig, ActionDisabledFunc, ActionHiddenFunc, ActionPopupComponent } from './action-config';\n\ninterface ActionButton {\n cssClass: string;\n color: string;\n\n isDisabled: WritableSignal<boolean> | Signal<boolean>;\n isHidden: WritableSignal<boolean> | Signal<boolean>;\n\n isDisabledInputAFunction: boolean;\n isHiddenInputAFunction: boolean;\n\n actionConfig: ActionConfig;\n\n tooltip: string;\n\n popupRendered: WritableSignal<boolean>;\n popupAction?: NgssmComponentAction;\n}\n\n@Component({\n selector: 'ngssm-actions-cell-renderer',\n imports: [MatIconButton, MatIcon, MatTooltip, CdkOverlayOrigin, CdkConnectedOverlay, NgssmComponentDisplayDirective],\n templateUrl: './ngssm-actions-cell-renderer.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NgssmActionsCellRendererComponent implements ICellRendererAngularComp {\n public readonly actionButtons = signal<ActionButton[]>([]);\n\n private environmentInjector = inject(EnvironmentInjector);\n private cellParams: ICellRendererParams | undefined;\n\n public agInit(params: ICellRendererParams): void {\n this.cellParams = params;\n this.setupActions(params as unknown as NgssmActionsCellRendererParams);\n }\n\n public refresh(params: ICellRendererParams): boolean {\n this.cellParams = params;\n this.actionButtons().forEach((a) => {\n if (a.isDisabledInputAFunction) {\n (a.isDisabled as WritableSignal<boolean>).set((a.actionConfig.isDisabled as ActionDisabledFunc)(params));\n }\n\n if (a.isHiddenInputAFunction) {\n (a.isHidden as WritableSignal<boolean>).set((a.actionConfig.isHidden as ActionHiddenFunc)(params));\n }\n });\n return true;\n }\n\n public executeAction(action: ActionButton): void {\n const params = this.cellParams;\n if (params) {\n action.actionConfig.click?.(params);\n }\n }\n\n private setupActions(rendererParams: NgssmActionsCellRendererParams): void {\n runInInjectionContext(this.environmentInjector, () => {\n const actionButtons: ActionButton[] = (rendererParams?.actions ?? []).map((a) => {\n const actionButton: ActionButton = {\n cssClass: a.cssClass,\n color: a.color ?? 'primary',\n isDisabled: signal(false),\n isDisabledInputAFunction: false,\n isHidden: signal(false),\n isHiddenInputAFunction: false,\n actionConfig: a,\n tooltip: a.tooltip ?? '',\n popupRendered: signal(false)\n };\n\n if (a.popupComponent) {\n actionButton.popupAction = ((component: ActionPopupComponent) =>\n this.setupPopupComponent(component, actionButton)) as NgssmComponentAction;\n }\n\n this.setUpActionSignal(actionButton, a, rendererParams, 'isDisabled');\n this.setUpActionSignal(actionButton, a, rendererParams, 'isHidden');\n\n return actionButton;\n });\n\n this.actionButtons.set(actionButtons);\n });\n }\n\n private setUpActionSignal(\n actionButton: ActionButton,\n config: ActionConfig,\n rendererParams: NgssmActionsCellRendererParams,\n signalName: 'isDisabled' | 'isHidden'\n ): void {\n const input = config[signalName];\n\n if (isSignal(input)) {\n actionButton[signalName] = input as Signal<boolean>;\n } else if (input instanceof Function) {\n (actionButton[signalName] as WritableSignal<boolean>).set(input(rendererParams as unknown as ICellRendererParams));\n actionButton[`${signalName}InputAFunction`] = true;\n } else if (isObservable(input)) {\n actionButton[signalName] = toSignal(input, { initialValue: false });\n }\n }\n\n private setupPopupComponent(component: ActionPopupComponent, action: ActionButton): void {\n component?.init?.(action.popupRendered, this.cellParams as unknown as ICellRendererParams, action.actionConfig.popupParameter);\n }\n}\n","<div class=\"ngssm-actions-cell\">\n @for (actionButton of actionButtons(); track actionButton; let idx = $index) {\n @if (!actionButton.isHidden()) {\n @if (actionButton.actionConfig.popupComponent) {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n [matTooltip]=\"actionButton.tooltip\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"actionButton.popupRendered.set(true)\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"actionButton.popupRendered()\">\n <div [ngssmComponentDisplay]=\"actionButton.actionConfig.popupComponent\" [ngssmComponentAction]=\"actionButton.popupAction\"></div>\n </ng-template>\n } @else {\n <button\n mat-icon-button\n class=\"ngssm-actions-cell-button\"\n [color]=\"actionButton.color\"\n id=\"action_{{ idx }}\"\n [disabled]=\"actionButton.isDisabled()\"\n (click)=\"executeAction(actionButton)\"\n [matTooltip]=\"actionButton.tooltip\">\n <mat-icon [class]=\"actionButton.cssClass\"></mat-icon>\n </button>\n }\n }\n }\n</div>\n","import { ColDef } from 'ag-grid-community';\n\nimport { ActionConfig } from './action-config';\nimport { NgssmActionsCellRendererComponent } from './ngssm-actions-cell-renderer.component';\n\n// Parameters of the actions cell renderer\n// For now, an action is rendered as a mat-icon-button with the class passed in ActionConfig\nexport interface NgssmActionsCellRendererParams<TData = unknown, TValue = unknown> {\n actions: ActionConfig<TData, TValue>[];\n}\n\nexport const getNgssmActionsCellColDef = <TData = unknown, TValue = unknown>(\n params: NgssmActionsCellRendererParams<TData, TValue>\n): Partial<ColDef> => ({\n cellRenderer: NgssmActionsCellRendererComponent,\n cellRendererParams: params\n});\n","import { AgPublicEventType, GetContextMenuItems } from 'ag-grid-community';\n\n/**\n * List of default ag-grid events listened by the directive to update the stored state.\n */\nexport const defaultAgGridColumnsEvents: AgPublicEventType[] = [\n 'sortChanged',\n 'filterChanged',\n 'columnPinned',\n 'columnResized',\n 'displayedColumnsChanged',\n 'filterChanged',\n 'columnGroupOpened'\n];\n\n/**\n * Configuration parameters of the {@link NgssmAgGridDirective} directive to apply on a\n * {@link https://www.ag-grid.com/ ag-grid instance}\n */\nexport interface NgssmAgGridConfig {\n /**\n * Unique identifier of the grid on which the directive is applied\n */\n gridId: string;\n\n /**\n * If true, the selected rows are stored in the state and restored when the directive is created.\n */\n keepSelection?: boolean;\n\n /**\n * If true, context menus are added to the grid to save the columns state into the local storage\n * and to restore from the local storage.\n *\n * @remarks\n *\n * this functionnality is only available for enterprise version of {@link https://www.ag-grid.com/}.\n */\n canSaveOnDiskColumnStates?: boolean;\n\n /**\n * Used to override default context menu items.\n */\n getContextMenuItems?: GetContextMenuItems;\n\n /**\n * Defines the list of ag-grid events listened to by the directive to update the state of stored columns.\n * By default: defaultAgGridColumnsEvents\n */\n listenedColumnsEvents?: AgPublicEventType[];\n}\n","import { InjectionToken } from '@angular/core';\nimport { ColDef, StatusPanelDef } from 'ag-grid-community';\n\n/**\n * Configuration options for NgssmAgGrid.\n * - theme: The CSS theme to use for the grid.\n * - statusBar: Optional status bar configuration for AG Grid.\n * - defaultColDef: Optional default column definition for all columns.\n * - loadSavedGridStatesAtStartup: If true, grid states saved in local storage are loaded during app initialization.\n */\nexport class NgssmAgGridOptions {\n theme = 'ag-theme-material';\n statusBar:\n | {\n statusPanels: StatusPanelDef[];\n }\n | undefined = undefined;\n defaultColDef: ColDef | undefined = undefined;\n loadSavedGridStatesAtStartup?: boolean = undefined;\n}\n\n/**\n * Injection token for providing NgssmAgGridOptions in Angular DI.\n *\n * Provide options through the provideNgssmAgGrid function instead of using this token.\n */\nexport const NGSSM_AG_GRID_OPTIONS = new InjectionToken<NgssmAgGridOptions>('NGSSM_AG_GRID_OPTIONS');\n","import { Directive, HostBinding, inject } from '@angular/core';\n\nimport { AgGridAngular } from 'ag-grid-angular';\n\nimport { NgssmAgGridOptions, NGSSM_AG_GRID_OPTIONS } from '../ngssm-ag-grid-options';\n\n@Directive({\n selector: '[ngssmAgGridTheme]'\n})\nexport class NgssmAgGridThemeDirective {\n @HostBinding('class') className = '';\n\n private readonly options: NgssmAgGridOptions | null = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n private agGridAngular = inject(AgGridAngular);\n\n constructor() {\n this.className = (this.options ?? new NgssmAgGridOptions()).theme;\n if (this.agGridAngular.statusBar === undefined) {\n this.agGridAngular.statusBar = this.options?.statusBar;\n }\n\n if (this.agGridAngular.defaultColDef === undefined) {\n this.agGridAngular.defaultColDef = this.options?.defaultColDef;\n }\n }\n}\n","import { Directive, inject, signal, input, effect, runInInjectionContext, Injector } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { take } from 'rxjs';\n\nimport { AgGridAngular } from 'ag-grid-angular';\nimport { DefaultMenuItem, GetContextMenuItemsParams, MenuItemDef } from 'ag-grid-community';\n\nimport { createSignal, Logger, Store } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction, RegisterSelectedRowsAction } from '../actions';\nimport { ChangeOrigin, ColumnGroupState, selectAgGridState } from '../state';\nimport { defaultAgGridColumnsEvents, NgssmAgGridConfig } from './ngssm-ag-grid-config';\n\n@Directive({\n selector: '[ngssmAgGrid]'\n})\nexport class NgssmAgGridDirective {\n public readonly config = input.required<NgssmAgGridConfig, string | NgssmAgGridConfig>({\n alias: 'ngssmAgGrid',\n transform: (v) => {\n if (typeof v === 'string') {\n return {\n gridId: v as string\n };\n }\n\n const conf = v as NgssmAgGridConfig;\n return {\n ...conf\n };\n }\n });\n\n private readonly logger = inject(Logger);\n private readonly store = inject(Store);\n private readonly agGridAngular = inject(AgGridAngular);\n private readonly injector = inject(Injector);\n\n private readonly gridInitialized = signal(false);\n private readonly gridStates = createSignal((state) => selectAgGridState(state).gridStates);\n private readonly selectedRows = createSignal((state) => selectAgGridState(state).selectedRows);\n\n constructor() {\n this.logger.information(`[NgssmAgGridDirective] Initialization...`);\n\n // Setup gridInintialized signal\n this.agGridAngular.gridReady.pipe(take(1)).subscribe(() => this.gridInitialized.set(true));\n\n // Apply registered grid setup if any and start listening to ag-grid events\n const effectRef = effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' in progress`);\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState) {\n this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnStates,\n applyOrder: true\n });\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n\n if (this.config().keepSelection) {\n const selection = this.selectedRows()[this.config().gridId];\n if (selection) {\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n }\n }\n\n runInInjectionContext(this.injector, () => this.initSateChangeListener());\n\n effectRef.destroy();\n\n this.logger.information(`[NgssmAgGridDirective] Initialization for '${this.config().gridId}' done`);\n });\n\n // process changes in columns when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n const gridState = this.gridStates()[this.config().gridId];\n if (gridState?.origin === ChangeOrigin.other) {\n this.agGridAngular.api.setColumnGroupState(gridState.columnGroupStates);\n this.agGridAngular.api.applyColumnState({\n state: gridState.columnStates,\n applyOrder: true\n });\n\n this.agGridAngular.api.setFilterModel(gridState.filterModel);\n }\n });\n\n // process changes in selection when not comming from ui\n effect(() => {\n if (!this.gridInitialized()) {\n return;\n }\n\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selection = this.selectedRows()[this.config().gridId];\n if (!selection || selection.origin !== ChangeOrigin.other) {\n return;\n }\n\n const ids = selection.ids ?? [];\n this.agGridAngular.api.forEachNode((node) => {\n if (node.id) {\n node.setSelected(ids.includes(node.id));\n }\n });\n });\n\n this.agGridAngular.getContextMenuItems = (params) => this.getContextMenuItems(params);\n this.logger.information(`[NgssmAgGridDirective] Initialization done.`);\n }\n\n private initSateChangeListener(): void {\n (this.config().listenedColumnsEvents ?? defaultAgGridColumnsEvents).forEach((eventType) => {\n this.agGridAngular.api.addEventListener(eventType, () => this.saveGridState());\n });\n\n this.agGridAngular.rowSelected.pipe(takeUntilDestroyed()).subscribe(() => this.processSelectionChanged());\n }\n\n private saveGridState(): void {\n const state = this.agGridAngular.api.getColumnState();\n const filterModel = this.agGridAngular.api.getFilterModel();\n const columnGroupStates: ColumnGroupState[] = this.agGridAngular.api.getColumnGroupState();\n this.store.dispatchAction(\n new RegisterAgGridStateAction(this.config().gridId, ChangeOrigin.agGrid, state, columnGroupStates, filterModel)\n );\n }\n\n private processSelectionChanged(): void {\n if (this.config().keepSelection !== true) {\n return;\n }\n\n const selectedRows = this.agGridAngular.api\n .getSelectedNodes()\n .map((n) => n.id ?? '')\n .filter((n) => n !== '');\n\n this.store.dispatchAction(new RegisterSelectedRowsAction(this.config().gridId, ChangeOrigin.agGrid, selectedRows));\n }\n\n private getContextMenuItems(params: GetContextMenuItemsParams): (DefaultMenuItem | MenuItemDef)[] {\n this.logger.information('[NgssmAgGridDirective] Generating the context menu...');\n const menuItems: (DefaultMenuItem | MenuItemDef)[] = [];\n const getContextMenuItems = this.config().getContextMenuItems;\n if (getContextMenuItems) {\n menuItems.push(...(getContextMenuItems(params) as (DefaultMenuItem | MenuItemDef)[]));\n } else {\n menuItems.push(...(params.defaultItems ?? []));\n }\n\n if (this.config().canSaveOnDiskColumnStates === true) {\n const gridId = this.config().gridId;\n menuItems.push(\n ...[\n 'separator' as DefaultMenuItem,\n {\n name: 'Save columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.saveColumnStatesOnDisk, gridId)),\n icon: '<i class=\"fa-regular fa-floppy-disk\"></i>'\n },\n {\n name: 'Restore columns state',\n action: () => this.store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnStatesFromDisk, gridId)),\n icon: '<i class=\"fa-solid fa-rotate-right\"></i>'\n },\n {\n name: 'Reset columns state to default',\n action: () => {\n this.agGridAngular.api.resetColumnState();\n this.agGridAngular.api.resetColumnGroupState();\n this.agGridAngular.api.setFilterModel(null);\n },\n icon: '<i class=\"fa-solid fa-clock-rotate-left\"></i>'\n }\n ]\n );\n }\n return menuItems;\n }\n}\n","import { ICellEditorAngularComp } from 'ag-grid-angular';\nimport { ICellEditorParams } from 'ag-grid-community';\n\nexport abstract class NgssmBaseCellEditor implements ICellEditorAngularComp {\n protected params?: ICellEditorParams;\n\n public agInit(params: ICellEditorParams): void {\n this.params = params;\n }\n\n public getValue() {\n return '';\n }\n\n public isPopup(): boolean {\n return true;\n }\n\n public getPopupPosition(): 'over' | 'under' | undefined {\n return 'over';\n }\n\n public isCancelAfterEnd(): boolean {\n return true;\n }\n\n public cancel(): void {\n this.params?.stopEditing();\n }\n}\n","import { ChangeDetectionStrategy, Component, signal, WritableSignal } from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { MatCard, MatCardActions, MatCardTitle, MatCardHeader } from '@angular/material/card';\nimport { ICellRendererParams } from 'ag-grid-community';\n\nimport { ActionConfirmationPopupParameter } from './action-confirmation-popup-parameter';\nimport { ActionPopupComponent } from '../ngssm-actions-cell-renderer';\n\n/**\n * The `ActionConfirmationPopupComponent` is a reusable confirmation popup component designed to work with `ag-grid`.\n * It provides a customizable confirmation dialog for user actions, allowing developers to define messages, button labels,\n * and actions dynamically.\n *\n * ### Features:\n * - Displays a confirmation popup with customizable message, button labels, and color.\n * - Integrates with the `ActionPopupComponent` interface for seamless use with `NgssmActionsCellRendererComponent`.\n * - Uses Angular signals for efficient state management.\n * - Supports dynamic initialization with parameters provided by `ag-grid`.\n * - Provides methods to handle user actions (confirm or cancel) and close the popup.\n *\n * ### Usage:\n * This component is typically used as a popup in conjunction with the `NgssmActionsCellRendererComponent`.\n * To configure it, pass an `ActionConfirmationPopupParameter` object when initializing the popup.\n *\n * Example:\n * ```typescript\n * const popupParameter: ActionConfirmationPopupParameter = {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * };\n * ```\n *\n * ### Inputs:\n * - `popupRendered`: A writable signal indicating whether the popup is currently rendered.\n * - `params`: The cell renderer parameters provided by `ag-grid`.\n * - `popupParameter`: An object of type `ActionConfirmationPopupParameter` that defines the popup's behavior and content.\n *\n * ### Outputs:\n * None.\n *\n * ### Dependencies:\n * - Angular Material components: `MatCard`, `MatButton`.\n * - `ag-grid-community` for integration with `ag-grid`.\n *\n * ### Methods:\n * - `init(popupRendered, params, popupParameter)`: Initializes the popup with the provided parameters.\n * - `popupRendered`: A writable signal to track the popup's visibility.\n * - `params`: The cell renderer parameters from `ag-grid`.\n * - `popupParameter`: The configuration object for the popup.\n *\n * - `closePopup()`: Closes the popup by setting the `isOpen` signal to `false`.\n *\n * - `executeAction()`: Executes the confirmation action defined in the `popupParameter` and closes the popup.\n *\n * ### Signals:\n * - `message`: The message displayed in the popup.\n * - `cancelButtonLabel`: The label for the cancel button.\n * - `confirmButtonLabel`: The label for the confirm button.\n * - `color`: The color theme for the confirm button (e.g., 'primary', 'warn').\n * - `isOpen`: Tracks whether the popup is currently open.\n *\n * ### Example Initialization:\n * ```typescript\n * const popup = new ActionConfirmationPopupComponent();\n * popup.init(\n * popupRenderedSignal,\n * cellRendererParams,\n * {\n * messageBuilder: (params) => `Are you sure you want to delete ${params.data.name}?`,\n * color: 'warn',\n * cancelButtonLabel: 'No',\n * confirmButtonLabel: 'Yes',\n * confirmAction: (params) => console.log('Confirmed action for:', params.data)\n * }\n * );\n * ```\n *\n * ### Notes:\n * - Ensure that the `popupParameter` object is properly configured to avoid runtime errors.\n * - The `messageBuilder` function in `popupParameter` allows dynamic message generation based on the `params` object.\n * - The component uses `ChangeDetectionStrategy.OnPush` for performance optimization.\n * - The `isOpen` signal can be used to programmatically control the popup's visibility.\n */\n@Component({\n selector: 'ngssm-action-confirmation-popup',\n imports: [MatCard, MatCardHeader, MatCardTitle, MatCardActions, MatButton],\n templateUrl: './action-confirmation-popup.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ActionConfirmationPopupComponent implements ActionPopupComponent<unknown, unknown, ActionConfirmationPopupParameter> {\n public readonly message = signal<string>('No message');\n public readonly cancelButtonLabel = signal<string>('No');\n public readonly confirmButtonLabel = signal<string>('Yes');\n public readonly color = signal<string>('primary');\n\n public isOpen = signal<boolean>(false);\n\n private params?: ICellRendererParams;\n private popupParameter?: ActionConfirmationPopupParameter;\n\n public init(\n popupRendered: WritableSignal<boolean>,\n params?: ICellRendererParams<unknown, unknown>,\n popupParameter?: ActionConfirmationPopupParameter\n ): void {\n this.params = params;\n this.popupParameter = popupParameter;\n\n this.message.set(popupParameter?.messageBuilder?.(params) ?? 'No message');\n this.color.set(popupParameter?.color ?? 'primary');\n this.cancelButtonLabel.set(popupParameter?.cancelButtonLabel ?? 'Cancel');\n this.confirmButtonLabel.set(popupParameter?.confirmButtonLabel ?? 'Confirm');\n\n this.isOpen = popupRendered;\n }\n\n public closePopup(): void {\n this.isOpen.set(false);\n }\n\n public executeAction(): void {\n this.popupParameter?.confirmAction?.(this.params);\n this.closePopup();\n }\n}\n","<mat-card class=\"fxFlex flex-column-stretch\">\n <mat-card-header>\n <mat-card-title>{{ message() }}</mat-card-title>\n </mat-card-header>\n <mat-card-actions class=\"flex-row-center\">\n <span class=\"fxFlex\"></span>\n <button mat-button (click)=\"closePopup()\">{{ cancelButtonLabel() }}</button>\n <button mat-raised-button [color]=\"color()\" (click)=\"executeAction()\">{{ confirmButtonLabel() }}</button>\n </mat-card-actions>\n</mat-card>\n","import { ColDef } from 'ag-grid-community';\n\nexport const getColDefWithNoPadding = (): Partial<ColDef> => ({\n cellClass: ['cell-with-no-padding']\n});\n\nexport const getColDefForEditableColumn = (): Partial<ColDef> => ({\n editable: true,\n headerClass: 'ngssm-ag-editable-cell',\n valueSetter: () => false\n});\n","import { inject, Injectable } from '@angular/core';\n\nimport { Effect, State, Action, Logger, ActionDispatcher } from 'ngssm-store';\n\nimport { AgGridAction, AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { ChangeOrigin, selectAgGridState } from '../state';\n\n@Injectable()\nexport class LocalStorageEffect implements Effect {\n public readonly processedActions: string[] = [AgGridActionType.saveColumnStatesOnDisk, AgGridActionType.resetColumnStatesFromDisk];\n\n private readonly logger = inject(Logger);\n\n public processAction(actiondispatcher: ActionDispatcher, state: State, action: Action): void {\n const agGridAction = action as AgGridAction;\n\n switch (action.type) {\n case AgGridActionType.saveColumnStatesOnDisk: {\n const gridState = selectAgGridState(state).gridStates[agGridAction.gridId];\n if (gridState) {\n localStorage.setItem(this.getColumnStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnStates));\n localStorage.setItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.columnGroupStates));\n if (gridState.filterModel) {\n localStorage.setItem(this.getFilterModelLocalStorageKey(agGridAction.gridId), JSON.stringify(gridState.filterModel));\n }\n }\n\n break;\n }\n\n case AgGridActionType.resetColumnStatesFromDisk: {\n const stored = localStorage.getItem(this.getColumnStatesLocalStorageKey(agGridAction.gridId));\n const columnGroupStates = localStorage.getItem(this.getcolumnGroupStatesLocalStorageKey(agGridAction.gridId));\n const filterModelStored = localStorage.getItem(this.getFilterModelLocalStorageKey(agGridAction.gridId));\n console.log(stored, filterModelStored);\n if (stored) {\n try {\n const columnStates = JSON.parse(stored);\n if (Array.isArray(columnStates)) {\n const action = new RegisterAgGridStateAction(\n agGridAction.gridId,\n ChangeOrigin.other,\n columnStates,\n columnGroupStates ? JSON.parse(columnGroupStates) : [],\n filterModelStored ? JSON.parse(filterModelStored) : null\n );\n actiondispatcher.dispatchAction(action);\n } else {\n this.logger.error(`Wrong columns state config for grid '${agGridAction.gridId}'`, stored);\n }\n } catch (error) {\n this.logger.error(`Unable to load config for grid '${agGridAction.gridId}'`, error);\n }\n }\n\n break;\n }\n }\n }\n\n private getColumnStatesLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_${gridId}`;\n }\n\n private getcolumnGroupStatesLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_groups_${gridId}`;\n }\n\n private getFilterModelLocalStorageKey(gridId: string): string {\n return `ngssm-ag-grid_filters_${gridId}`;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterAgGridStateAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class GridStatesReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerAgGridState];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerAgGridState: {\n const registerAgGridStateAction = action as RegisterAgGridStateAction;\n return updateAgGridState(state, {\n gridStates: {\n [registerAgGridStateAction.gridId]: {\n $set: {\n origin: registerAgGridStateAction.origin,\n columnStates: registerAgGridStateAction.columnStates,\n columnGroupStates: registerAgGridStateAction.columnGroupStates,\n filterModel: registerAgGridStateAction.filterModel\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { Injectable } from '@angular/core';\n\nimport { Reducer, State, Action } from 'ngssm-store';\n\nimport { AgGridActionType, RegisterSelectedRowsAction } from '../actions';\nimport { updateAgGridState } from '../state';\n\n@Injectable()\nexport class SelectedRowsReducer implements Reducer {\n public readonly processedActions: string[] = [AgGridActionType.registerSelectedRows];\n\n public updateState(state: State, action: Action): State {\n switch (action.type) {\n case AgGridActionType.registerSelectedRows: {\n const registerSelectedRowsAction = action as RegisterSelectedRowsAction;\n return updateAgGridState(state, {\n selectedRows: {\n [registerSelectedRowsAction.gridId]: {\n $set: {\n origin: registerSelectedRowsAction.origin,\n ids: registerSelectedRowsAction.ids\n }\n }\n }\n });\n }\n }\n\n return state;\n }\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, inject, provideAppInitializer } from '@angular/core';\n\nimport { Logger, provideEffect, provideReducers, Store } from 'ngssm-store';\n\nimport { LocalStorageEffect } from './effects/local-storage.effect';\nimport { GridStatesReducer } from './reducers/grid-states.reducer';\nimport { SelectedRowsReducer } from './reducers/selected-rows.reducer';\nimport { NGSSM_AG_GRID_OPTIONS, NgssmAgGridOptions } from './ngssm-ag-grid-options';\nimport { AgGridAction, AgGridActionType } from './actions';\n\n/**\n * Loads saved grid states from localStorage at application startup if enabled in options.\n * Dispatches actions to restore grid state for each matching key.\n */\nexport const loadGridStates = () => {\n const logger = inject(Logger);\n const options = inject(NGSSM_AG_GRID_OPTIONS, { optional: true });\n if (!options?.loadSavedGridStatesAtStartup) {\n logger.information('[ag-grid] No grid state must be loaded at startup.');\n return;\n }\n\n const store = inject(Store);\n const wantedPrefix = 'ngssm-ag-grid_';\n for (let i = 0; i < localStorage.length; i++) {\n const key = localStorage.key(i);\n if (key?.startsWith(wantedPrefix)) {\n const gridId = key.slice(wantedPrefix.length);\n logger.information(`[ag-grid] Restoring '${gridId}'.`);\n store.dispatchAction(new AgGridAction(AgGridActionType.resetColumnStatesFromDisk, gridId));\n }\n }\n};\n\n/**\n * Provides all necessary providers for NgssmAgGrid, including reducers, effects, options, and grid state loading.\n * @param options Optional configuration for the grid.\n * @returns EnvironmentProviders for NgssmAgGrid.\n */\nexport const provideNgssmAgGrid = (options?: NgssmAgGridOptions): EnvironmentProviders => {\n return makeEnvironmentProviders([\n provideAppInitializer(loadGridStates),\n {\n provide: NGSSM_AG_GRID_OPTIONS,\n useValue: options ?? null\n },\n provideReducers(GridStatesReducer, SelectedRowsReducer),\n provideEffect(LocalStorageEffect)\n ]);\n};\n","/*\n * Public API Surface of ngssm-ag-grid\n */\n\nexport * from './lib/actions';\nexport * from './lib/state';\nexport * from './lib/components';\nexport * from './lib/ngssm-ag-grid-options';\nexport * from './lib/helpers';\nexport * from './lib/provide-ngssm-ag-grid';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;IAAY;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,qBAAA,CAAA,GAAA,wCAA8D;AAC9D,IAAA,gBAAA,CAAA,sBAAA,CAAA,GAAA,yCAAgE;AAChE,IAAA,gBAAA,CAAA,wBAAA,CAAA,GAAA,2CAAoE;AACpE,IAAA,gBAAA,CAAA,2BAAA,CAAA,GAAA,8CAA0E;AAC5E,CAAC,EALW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;;MCOf,yBAAyB,CAAA;AAIlB,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,YAAA;AACA,IAAA,iBAAA;AACA,IAAA,WAAA;AAPF,IAAA,IAAI,GAAW,gBAAgB,CAAC,mBAAmB;IAEnE,WAAA,CACkB,MAAc,EACd,MAAoB,EACpB,YAA2B,EAC3B,iBAAqC,EACrC,WAA+B,EAAA;QAJ/B,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;QACjB,IAAA,CAAA,WAAW,GAAX,WAAW;IAC1B;AACJ;;MCbY,0BAA0B,CAAA;AAInB,IAAA,MAAA;AACA,IAAA,MAAA;AACA,IAAA,GAAA;AALF,IAAA,IAAI,GAAW,gBAAgB,CAAC,oBAAoB;AAEpE,IAAA,WAAA,CACkB,MAAc,EACd,MAAoB,EACpB,GAAa,EAAA;QAFb,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,GAAG,GAAH,GAAG;IAClB;AACJ;;MCVY,YAAY,CAAA;AAEL,IAAA,IAAA;AACA,IAAA,MAAA;IAFlB,WAAA,CACkB,IAAY,EACZ,MAAc,EAAA;QADd,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,MAAM,GAAN,MAAM;IACrB;AACJ;;ACDM,MAAM,iBAAiB,GAAG,CAAC,KAAY,KAAkB,KAAK,CAAC,wBAAwB,CAAC,eAAe;AAEvG,MAAM,iBAAiB,GAAG,CAAC,KAAY,EAAE,OAAiC,KAC/E,MAAM,CAAC,KAAK,EAAE;AACZ,IAAA,CAAC,wBAAwB,CAAC,eAAe,GAAG;AAC7C,CAAA;AAWI,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB,CAAA;AAC5B,IAAA,OAAgB,eAAe,GAAG,eAAe;IACjD,OAAgB,YAAY,GAAgB;AACjD,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,YAAY,EAAE;KACf;;AALU,wBAAwB,GAAA,UAAA,CAAA;AAJpC,IAAA,iBAAiB,CAAC;QACjB,eAAe,EAAE,wBAAwB,CAAC,eAAe;QACzD,YAAY,EAAE,wBAAwB,CAAC;KACxC;AACY,CAAA,EAAA,wBAAwB,CAMpC;;IC5BW;AAAZ,CAAA,UAAY,YAAY,EAAA;AACtB,IAAA,YAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACjB,CAAC,EAHW,YAAY,KAAZ,YAAY,GAAA,EAAA,CAAA,CAAA;;ACAxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EG;MAoDU,iCAAiC,CAAA;AAC5B,IAAA,aAAa,GAAG,MAAM,CAAiB,EAAE,oFAAC;AAElD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,UAAU;AAEX,IAAA,MAAM,CAAC,MAA2B,EAAA;AACvC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;AACxB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAmD,CAAC;IACxE;AAEO,IAAA,OAAO,CAAC,MAA2B,EAAA;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;QACxB,IAAI,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAI;AACjC,YAAA,IAAI,CAAC,CAAC,wBAAwB,EAAE;AAC7B,gBAAA,CAAC,CAAC,UAAsC,CAAC,GAAG,CAAE,CAAC,CAAC,YAAY,CAAC,UAAiC,CAAC,MAAM,CAAC,CAAC;YAC1G;AAEA,YAAA,IAAI,CAAC,CAAC,sBAAsB,EAAE;AAC3B,gBAAA,CAAC,CAAC,QAAoC,CAAC,GAAG,CAAE,CAAC,CAAC,YAAY,CAAC,QAA6B,CAAC,MAAM,CAAC,CAAC;YACpG;AACF,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAEO,IAAA,aAAa,CAAC,MAAoB,EAAA;AACvC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU;QAC9B,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,YAAY,CAAC,KAAK,GAAG,MAAM,CAAC;QACrC;IACF;AAEQ,IAAA,YAAY,CAAC,cAA8C,EAAA;AACjE,QAAA,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAK;AACnD,YAAA,MAAM,aAAa,GAAmB,CAAC,cAAc,EAAE,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAI;AAC9E,gBAAA,MAAM,YAAY,GAAiB;oBACjC,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACpB,oBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,SAAS;AAC3B,oBAAA,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC;AACzB,oBAAA,wBAAwB,EAAE,KAAK;AAC/B,oBAAA,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC;AACvB,oBAAA,sBAAsB,EAAE,KAAK;AAC7B,oBAAA,YAAY,EAAE,CAAC;AACf,oBAAA,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,EAAE;AACxB,oBAAA,aAAa,EAAE,MAAM,CAAC,KAAK;iBAC5B;AAED,gBAAA,IAAI,CAAC,CAAC,cAAc,EAAE;AACpB,oBAAA,YAAY,CAAC,WAAW,IAAI,CAAC,SAA+B,KAC1D,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAyB;gBAC9E;gBAEA,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,YAAY,CAAC;gBACrE,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC;AAEnE,gBAAA,OAAO,YAAY;AACrB,YAAA,CAAC,CAAC;AAEF,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;AACvC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,iBAAiB,CACvB,YAA0B,EAC1B,MAAoB,EACpB,cAA8C,EAC9C,UAAqC,EAAA;AAErC,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhC,QAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;AACnB,YAAA,YAAY,CAAC,UAAU,CAAC,GAAG,KAAwB;QACrD;AAAO,aAAA,IAAI,KAAK,YAAY,QAAQ,EAAE;YACnC,YAAY,CAAC,UAAU,CAA6B,CAAC,GAAG,CAAC,KAAK,CAAC,cAAgD,CAAC,CAAC;AAClH,YAAA,YAAY,CAAC,CAAA,EAAG,UAAU,gBAAgB,CAAC,GAAG,IAAI;QACpD;AAAO,aAAA,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE;AAC9B,YAAA,YAAY,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACrE;IACF;IAEQ,mBAAmB,CAAC,SAA+B,EAAE,MAAoB,EAAA;AAC/E,QAAA,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,UAA4C,EAAE,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC;IAChI;uGAlFW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iCAAiC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjI9C,4gDAsCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDuFY,aAAa,EAAA,QAAA,EAAA,sFAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,4BAAA,EAAA,oBAAA,EAAA,qBAAA,EAAA,qBAAA,EAAA,yBAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,4DAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,qkCAAE,8BAA8B,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,uBAAA,EAAA,sBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIxG,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAN7C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,WAC9B,CAAC,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,8BAA8B,CAAC,EAAA,eAAA,EAEnG,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,4gDAAA,EAAA;;;MEpHpC,yBAAyB,GAAG,CACvC,MAAqD,MAChC;AACrB,IAAA,YAAY,EAAE,iCAAiC;AAC/C,IAAA,kBAAkB,EAAE;AACrB,CAAA;;ACdD;;AAEG;AACI,MAAM,0BAA0B,GAAwB;IAC7D,aAAa;IACb,eAAe;IACf,cAAc;IACd,eAAe;IACf,yBAAyB;IACzB,eAAe;IACf;;;ACTF;;;;;;AAMG;MACU,kBAAkB,CAAA;IAC7B,KAAK,GAAG,mBAAmB;IAC3B,SAAS,GAIO,SAAS;IACzB,aAAa,GAAuB,SAAS;IAC7C,4BAA4B,GAAa,SAAS;AACnD;AAED;;;;AAIG;MACU,qBAAqB,GAAG,IAAI,cAAc,CAAqB,uBAAuB;;MCjBtF,yBAAyB,CAAA;IACd,SAAS,GAAG,EAAE;IAEnB,OAAO,GAA8B,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/F,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7C,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,kBAAkB,EAAE,EAAE,KAAK;QACjE,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS;QACxD;QAEA,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,KAAK,SAAS,EAAE;YAClD,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,aAAa;QAChE;IACF;uGAfW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;sBAEE,WAAW;uBAAC,OAAO;;;MCMT,oBAAoB,CAAA;AACf,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,CAAA,EACrC,KAAK,EAAE,aAAa;AACpB,QAAA,SAAS,EAAE,CAAC,CAAC,KAAI;AACf,YAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;gBACzB,OAAO;AACL,oBAAA,MAAM,EAAE;iBACT;YACH;YAEA,MAAM,IAAI,GAAG,CAAsB;YACnC,OAAO;AACL,gBAAA,GAAG;aACJ;AACH,QAAA,CAAC,GACD;AAEe,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AACrB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAE3B,IAAA,eAAe,GAAG,MAAM,CAAC,KAAK,sFAAC;AAC/B,IAAA,UAAU,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;AACzE,IAAA,YAAY,GAAG,YAAY,CAAC,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC;AAE9F,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,wCAAA,CAA0C,CAAC;;QAGnE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;AAG1F,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAK;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;gBAC3B;YACF;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,2CAAA,EAA8C,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAA,aAAA,CAAe,CAAC;AAE1G,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;YACzD,IAAI,SAAS,EAAE;gBACb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC;AACvE,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;oBACtC,KAAK,EAAE,SAAS,CAAC,YAAY;AAC7B,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC;YAC9D;AAEA,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE;AAC/B,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;gBAC3D,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE;oBAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,KAAI;AAC1C,wBAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,4BAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACzC;AACF,oBAAA,CAAC,CAAC;gBACJ;YACF;AAEA,YAAA,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAEzE,SAAS,CAAC,OAAO,EAAE;AAEnB,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,2CAAA,EAA8C,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAA,MAAA,CAAQ,CAAC;AACrG,QAAA,CAAC,gFAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;gBAC3B;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;YACzD,IAAI,SAAS,EAAE,MAAM,KAAK,YAAY,CAAC,KAAK,EAAE;gBAC5C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,CAAC,SAAS,CAAC,iBAAiB,CAAC;AACvE,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;oBACtC,KAAK,EAAE,SAAS,CAAC,YAAY;AAC7B,oBAAA,UAAU,EAAE;AACb,iBAAA,CAAC;gBAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,WAAW,CAAC;YAC9D;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;gBAC3B;YACF;YAEA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,KAAK,IAAI,EAAE;gBACxC;YACF;AAEA,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC;YAC3D,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK,EAAE;gBACzD;YACF;AAEA,YAAA,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,KAAI;AAC1C,gBAAA,IAAI,IAAI,CAAC,EAAE,EAAE;AACX,oBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzC;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;AACrF,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA,2CAAA,CAA6C,CAAC;IACxE;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,qBAAqB,IAAI,0BAA0B,EAAE,OAAO,CAAC,CAAC,SAAS,KAAI;AACxF,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAChF,QAAA,CAAC,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,uBAAuB,EAAE,CAAC;IAC3G;IAEQ,aAAa,GAAA;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE;QAC3D,MAAM,iBAAiB,GAAuB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,mBAAmB,EAAE;QAC1F,IAAI,CAAC,KAAK,CAAC,cAAc,CACvB,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,iBAAiB,EAAE,WAAW,CAAC,CAChH;IACH;IAEQ,uBAAuB,GAAA;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa,KAAK,IAAI,EAAE;YACxC;QACF;AAEA,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;AACrC,aAAA,gBAAgB;aAChB,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE;aACrB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAE1B,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,0BAA0B,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACpH;AAEQ,IAAA,mBAAmB,CAAC,MAAiC,EAAA;AAC3D,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,uDAAuD,CAAC;QAChF,MAAM,SAAS,GAAsC,EAAE;QACvD,MAAM,mBAAmB,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,mBAAmB;QAC7D,IAAI,mBAAmB,EAAE;YACvB,SAAS,CAAC,IAAI,CAAC,GAAI,mBAAmB,CAAC,MAAM,CAAuC,CAAC;QACvF;aAAO;AACL,YAAA,SAAS,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;QAChD;QAEA,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,yBAAyB,KAAK,IAAI,EAAE;YACpD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM;YACnC,SAAS,CAAC,IAAI,CACZ,GAAG;gBACD,WAA8B;AAC9B,gBAAA;AACE,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;AAC1G,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,IAAI,EAAE,uBAAuB;AAC7B,oBAAA,MAAM,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;AAC7G,oBAAA,IAAI,EAAE;AACP,iBAAA;AACD,gBAAA;AACE,oBAAA,IAAI,EAAE,gCAAgC;oBACtC,MAAM,EAAE,MAAK;AACX,wBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE;AACzC,wBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,qBAAqB,EAAE;wBAC9C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC;oBAC7C,CAAC;AACD,oBAAA,IAAI,EAAE;AACP;AACF,aAAA,CACF;QACH;AACA,QAAA,OAAO,SAAS;IAClB;uGAtLW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;MCZqB,mBAAmB,CAAA;AAC7B,IAAA,MAAM;AAET,IAAA,MAAM,CAAC,MAAyB,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;IAEO,QAAQ,GAAA;AACb,QAAA,OAAO,EAAE;IACX;IAEO,OAAO,GAAA;AACZ,QAAA,OAAO,IAAI;IACb;IAEO,gBAAgB,GAAA;AACrB,QAAA,OAAO,MAAM;IACf;IAEO,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI;IACb;IAEO,MAAM,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;IAC5B;AACD;;ACrBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6EG;MAOU,gCAAgC,CAAA;AAC3B,IAAA,OAAO,GAAG,MAAM,CAAS,YAAY,8EAAC;AACtC,IAAA,iBAAiB,GAAG,MAAM,CAAS,IAAI,wFAAC;AACxC,IAAA,kBAAkB,GAAG,MAAM,CAAS,KAAK,yFAAC;AAC1C,IAAA,KAAK,GAAG,MAAM,CAAS,SAAS,4EAAC;AAE1C,IAAA,MAAM,GAAG,MAAM,CAAU,KAAK,6EAAC;AAE9B,IAAA,MAAM;AACN,IAAA,cAAc;AAEf,IAAA,IAAI,CACT,aAAsC,EACtC,MAA8C,EAC9C,cAAiD,EAAA;AAEjD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,QAAA,IAAI,CAAC,cAAc,GAAG,cAAc;AAEpC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAAC,IAAI,YAAY,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,IAAI,SAAS,CAAC;QAClD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,IAAI,QAAQ,CAAC;QACzE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,IAAI,SAAS,CAAC;AAE5E,QAAA,IAAI,CAAC,MAAM,GAAG,aAAa;IAC7B;IAEO,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB;IAEO,aAAa,GAAA;QAClB,IAAI,CAAC,cAAc,EAAE,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QACjD,IAAI,CAAC,UAAU,EAAE;IACnB;uGAlCW,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC5F7C,mdAUA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED8EY,OAAO,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,YAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,kDAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,cAAc,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,SAAS,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI9D,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBAN5C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,EAAA,OAAA,EAClC,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,CAAC,EAAA,eAAA,EAEzD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,mdAAA,EAAA;;;AExF1C,MAAM,sBAAsB,GAAG,OAAwB;IAC5D,SAAS,EAAE,CAAC,sBAAsB;AACnC,CAAA;AAEM,MAAM,0BAA0B,GAAG,OAAwB;AAChE,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,WAAW,EAAE,wBAAwB;AACrC,IAAA,WAAW,EAAE,MAAM;AACpB,CAAA;;MCFY,kBAAkB,CAAA;IACb,gBAAgB,GAAa,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,yBAAyB,CAAC;AAEjH,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAEjC,IAAA,aAAa,CAAC,gBAAkC,EAAE,KAAY,EAAE,MAAc,EAAA;QACnF,MAAM,YAAY,GAAG,MAAsB;AAE3C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,gBAAgB,CAAC,sBAAsB,EAAE;AAC5C,gBAAA,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC;gBAC1E,IAAI,SAAS,EAAE;oBACb,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;oBACtH,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;AAChI,oBAAA,IAAI,SAAS,CAAC,WAAW,EAAE;wBACzB,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;oBACtH;gBACF;gBAEA;YACF;AAEA,YAAA,KAAK,gBAAgB,CAAC,yBAAyB,EAAE;AAC/C,gBAAA,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC7F,gBAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC7G,gBAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACvG,gBAAA,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBACtC,IAAI,MAAM,EAAE;AACV,oBAAA,IAAI;wBACF,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AACvC,wBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;4BAC/B,MAAM,MAAM,GAAG,IAAI,yBAAyB,CAC1C,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,KAAK,EAClB,YAAY,EACZ,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,EAAE,EACtD,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,GAAG,IAAI,CACzD;AACD,4BAAA,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC;wBACzC;6BAAO;AACL,4BAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,qCAAA,EAAwC,YAAY,CAAC,MAAM,CAAA,CAAA,CAAG,EAAE,MAAM,CAAC;wBAC3F;oBACF;oBAAE,OAAO,KAAK,EAAE;AACd,wBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,gCAAA,EAAmC,YAAY,CAAC,MAAM,CAAA,CAAA,CAAG,EAAE,KAAK,CAAC;oBACrF;gBACF;gBAEA;YACF;;IAEJ;AAEQ,IAAA,8BAA8B,CAAC,MAAc,EAAA;QACnD,OAAO,CAAA,cAAA,EAAiB,MAAM,CAAA,CAAE;IAClC;AAEQ,IAAA,mCAAmC,CAAC,MAAc,EAAA;QACxD,OAAO,CAAA,qBAAA,EAAwB,MAAM,CAAA,CAAE;IACzC;AAEQ,IAAA,6BAA6B,CAAC,MAAc,EAAA;QAClD,OAAO,CAAA,sBAAA,EAAyB,MAAM,CAAA,CAAE;IAC1C;uGA9DW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAlB,kBAAkB,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;;MCCY,iBAAiB,CAAA;AACZ,IAAA,gBAAgB,GAAa,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;IAE5E,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,gBAAgB,CAAC,mBAAmB,EAAE;gBACzC,MAAM,yBAAyB,GAAG,MAAmC;gBACrE,OAAO,iBAAiB,CAAC,KAAK,EAAE;AAC9B,oBAAA,UAAU,EAAE;AACV,wBAAA,CAAC,yBAAyB,CAAC,MAAM,GAAG;AAClC,4BAAA,IAAI,EAAE;gCACJ,MAAM,EAAE,yBAAyB,CAAC,MAAM;gCACxC,YAAY,EAAE,yBAAyB,CAAC,YAAY;gCACpD,iBAAiB,EAAE,yBAAyB,CAAC,iBAAiB;gCAC9D,WAAW,EAAE,yBAAyB,CAAC;AACxC;AACF;AACF;AACF,iBAAA,CAAC;YACJ;;AAGF,QAAA,OAAO,KAAK;IACd;uGAvBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAjB,iBAAiB,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;MCCY,mBAAmB,CAAA;AACd,IAAA,gBAAgB,GAAa,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;IAE7E,WAAW,CAAC,KAAY,EAAE,MAAc,EAAA;AAC7C,QAAA,QAAQ,MAAM,CAAC,IAAI;AACjB,YAAA,KAAK,gBAAgB,CAAC,oBAAoB,EAAE;gBAC1C,MAAM,0BAA0B,GAAG,MAAoC;gBACvE,OAAO,iBAAiB,CAAC,KAAK,EAAE;AAC9B,oBAAA,YAAY,EAAE;AACZ,wBAAA,CAAC,0BAA0B,CAAC,MAAM,GAAG;AACnC,4BAAA,IAAI,EAAE;gCACJ,MAAM,EAAE,0BAA0B,CAAC,MAAM;gCACzC,GAAG,EAAE,0BAA0B,CAAC;AACjC;AACF;AACF;AACF,iBAAA,CAAC;YACJ;;AAGF,QAAA,OAAO,KAAK;IACd;uGArBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAnB,mBAAmB,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;;ACGD;;;AAGG;AACI,MAAM,cAAc,GAAG,MAAK;AACjC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,OAAO,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACjE,IAAA,IAAI,CAAC,OAAO,EAAE,4BAA4B,EAAE;AAC1C,QAAA,MAAM,CAAC,WAAW,CAAC,oDAAoD,CAAC;QACxE;IACF;AAEA,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC3B,MAAM,YAAY,GAAG,gBAAgB;AACrC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,GAAG,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE;YACjC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC;AAC7C,YAAA,MAAM,CAAC,WAAW,CAAC,wBAAwB,MAAM,CAAA,EAAA,CAAI,CAAC;AACtD,YAAA,KAAK,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,gBAAgB,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;QAC5F;IACF;AACF;AAEA;;;;AAIG;AACI,MAAM,kBAAkB,GAAG,CAAC,OAA4B,KAA0B;AACvF,IAAA,OAAO,wBAAwB,CAAC;QAC9B,qBAAqB,CAAC,cAAc,CAAC;AACrC,QAAA;AACE,YAAA,OAAO,EAAE,qBAAqB;YAC9B,QAAQ,EAAE,OAAO,IAAI;AACtB,SAAA;AACD,QAAA,eAAe,CAAC,iBAAiB,EAAE,mBAAmB,CAAC;QACvD,aAAa,CAAC,kBAAkB;AACjC,KAAA,CAAC;AACJ;;ACjDA;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngssm-ag-grid",
3
- "version": "21.1.1",
3
+ "version": "21.1.3",
4
4
  "description": "NgSsm - Helpers for ag-grid and columns state save/restore feature.",
5
5
  "author": "Lion Marc",
6
6
  "license": "MIT",