bways-grid 0.0.9 → 0.0.11

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.
@@ -775,7 +775,7 @@ class HeaderMenuComponent {
775
775
  </div>
776
776
 
777
777
  </div>
778
- `, isInline: true, styles: [".ug-header-menu-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-menu-panel{position:fixed;z-index:1000;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:220px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color)}.ug-menu-item{display:flex;align-items:center;padding:8px 16px;cursor:pointer;position:relative;transition:background-color .15s ease;-webkit-user-select:none;user-select:none}.ug-menu-item:hover{background-color:var(--ug-row-hover-bg)}.ug-menu-icon{margin-right:12px;color:var(--ug-icon-color)}.ug-menu-text-only{margin-left:26px}.ug-menu-separator{height:1px;background-color:var(--ug-border-color);margin:4px 0}.ug-has-submenu{display:flex;justify-content:space-between}.ug-has-submenu span{flex:1}.ug-menu-arrow{color:var(--ug-icon-color);margin-left:8px}.ug-submenu{position:absolute;top:-9px;left:100%;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:150px;z-index:1001}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
778
+ `, isInline: true, styles: [".ug-header-menu-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-menu-panel{position:fixed;z-index:1000;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:220px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color)}.ug-menu-item{display:flex;align-items:center;padding:8px 16px;cursor:pointer;position:relative;transition:background-color .15s ease;-webkit-user-select:none;user-select:none}.ug-menu-item:hover{background-color:var(--ug-row-hover-bg)}.ug-menu-icon{margin-right:12px;color:var(--ug-icon-color)}.ug-menu-text-only{margin-left:26px}.ug-menu-separator{height:1px;background-color:var(--ug-border-color);margin:4px 0}.ug-has-submenu{display:flex;justify-content:space-between}.ug-has-submenu span{flex:1}.ug-menu-arrow{color:var(--ug-icon-color);margin-left:8px}.ug-submenu{position:absolute;top:-9px;left:100%;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:150px;z-index:1001}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
779
779
  }
780
780
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: HeaderMenuComponent, decorators: [{
781
781
  type: Component,
@@ -844,7 +844,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
844
844
  </div>
845
845
 
846
846
  </div>
847
- `, encapsulation: ViewEncapsulation.None, styles: [".ug-header-menu-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-menu-panel{position:fixed;z-index:1000;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:220px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color)}.ug-menu-item{display:flex;align-items:center;padding:8px 16px;cursor:pointer;position:relative;transition:background-color .15s ease;-webkit-user-select:none;user-select:none}.ug-menu-item:hover{background-color:var(--ug-row-hover-bg)}.ug-menu-icon{margin-right:12px;color:var(--ug-icon-color)}.ug-menu-text-only{margin-left:26px}.ug-menu-separator{height:1px;background-color:var(--ug-border-color);margin:4px 0}.ug-has-submenu{display:flex;justify-content:space-between}.ug-has-submenu span{flex:1}.ug-menu-arrow{color:var(--ug-icon-color);margin-left:8px}.ug-submenu{position:absolute;top:-9px;left:100%;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:150px;z-index:1001}\n"] }]
847
+ `, encapsulation: ViewEncapsulation.None, styles: [".ug-header-menu-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-menu-panel{position:fixed;z-index:1000;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:220px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color)}.ug-menu-item{display:flex;align-items:center;padding:8px 16px;cursor:pointer;position:relative;transition:background-color .15s ease;-webkit-user-select:none;user-select:none}.ug-menu-item:hover{background-color:var(--ug-row-hover-bg)}.ug-menu-icon{margin-right:12px;color:var(--ug-icon-color)}.ug-menu-text-only{margin-left:26px}.ug-menu-separator{height:1px;background-color:var(--ug-border-color);margin:4px 0}.ug-has-submenu{display:flex;justify-content:space-between}.ug-has-submenu span{flex:1}.ug-menu-arrow{color:var(--ug-icon-color);margin-left:8px}.ug-submenu{position:absolute;top:-9px;left:100%;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:150px;z-index:1001}\n"] }]
848
848
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { column: [{
849
849
  type: Input
850
850
  }], isOpen: [{
@@ -941,7 +941,7 @@ class ChooseColumnsComponent {
941
941
  </div>
942
942
 
943
943
  </div>
944
- `, isInline: true, styles: [".ug-choose-columns-panel{display:flex;flex-direction:column;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 12px -1px #00000026,0 2px 8px -2px #0000001a;width:250px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);overflow:hidden}.ug-cc-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-cc-title{font-weight:var(--ug-header-font-weight);color:var(--ug-header-color)}.ug-cc-close{background:none;border:none;cursor:pointer;color:var(--ug-icon-color);padding:4px;display:flex;align-items:center;justify-content:center;border-radius:4px}.ug-cc-close:hover{background-color:var(--ug-row-hover-bg)}.ug-cc-search{padding:8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-cc-search-icon{position:absolute;left:16px;color:var(--ug-icon-color);display:flex}.ug-cc-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-bg-color);color:var(--ug-color)}.ug-cc-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-cc-list{max-height:250px;overflow-y:auto;padding:8px 0}.ug-cc-item{display:flex;align-items:center;padding:4px 16px}.ug-cc-label{display:flex;align-items:center;width:100%;cursor:pointer}.ug-cc-label input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-cc-drag-handle{cursor:grab;color:var(--ug-icon-color);margin-right:12px;display:flex}.ug-cc-drag-handle:active{cursor:grabbing}.ug-cc-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{box-sizing:border-box;background-color:var(--ug-bg-color);border:1px solid var(--ug-primary-color);box-shadow:0 4px 6px -1px #0000001a;display:flex;align-items:center;padding:4px 16px}.cdk-drag-placeholder{opacity:.3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
944
+ `, isInline: true, styles: [".ug-choose-columns-panel{display:flex;flex-direction:column;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 12px -1px #00000026,0 2px 8px -2px #0000001a;width:250px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);overflow:hidden}.ug-cc-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-cc-title{font-weight:var(--ug-header-font-weight);color:var(--ug-header-color)}.ug-cc-close{background:none;border:none;cursor:pointer;color:var(--ug-icon-color);padding:4px;display:flex;align-items:center;justify-content:center;border-radius:4px}.ug-cc-close:hover{background-color:var(--ug-row-hover-bg)}.ug-cc-search{padding:8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-cc-search-icon{position:absolute;left:16px;color:var(--ug-icon-color);display:flex}.ug-cc-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-panel-bg);color:var(--ug-color)}.ug-cc-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-cc-list{max-height:250px;overflow-y:auto;padding:8px 0}.ug-cc-item{display:flex;align-items:center;padding:4px 16px}.ug-cc-label{display:flex;align-items:center;width:100%;cursor:pointer}.ug-cc-label input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-cc-drag-handle{cursor:grab;color:var(--ug-icon-color);margin-right:12px;display:flex}.ug-cc-drag-handle:active{cursor:grabbing}.ug-cc-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{box-sizing:border-box;background-color:var(--ug-panel-bg);border:1px solid var(--ug-primary-color);box-shadow:0 4px 6px -1px #0000001a;display:flex;align-items:center;padding:4px 16px}.cdk-drag-placeholder{opacity:.3}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
945
945
  }
946
946
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: ChooseColumnsComponent, decorators: [{
947
947
  type: Component,
@@ -979,7 +979,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
979
979
  </div>
980
980
 
981
981
  </div>
982
- `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-choose-columns-panel{display:flex;flex-direction:column;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 12px -1px #00000026,0 2px 8px -2px #0000001a;width:250px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);overflow:hidden}.ug-cc-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-cc-title{font-weight:var(--ug-header-font-weight);color:var(--ug-header-color)}.ug-cc-close{background:none;border:none;cursor:pointer;color:var(--ug-icon-color);padding:4px;display:flex;align-items:center;justify-content:center;border-radius:4px}.ug-cc-close:hover{background-color:var(--ug-row-hover-bg)}.ug-cc-search{padding:8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-cc-search-icon{position:absolute;left:16px;color:var(--ug-icon-color);display:flex}.ug-cc-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-bg-color);color:var(--ug-color)}.ug-cc-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-cc-list{max-height:250px;overflow-y:auto;padding:8px 0}.ug-cc-item{display:flex;align-items:center;padding:4px 16px}.ug-cc-label{display:flex;align-items:center;width:100%;cursor:pointer}.ug-cc-label input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-cc-drag-handle{cursor:grab;color:var(--ug-icon-color);margin-right:12px;display:flex}.ug-cc-drag-handle:active{cursor:grabbing}.ug-cc-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{box-sizing:border-box;background-color:var(--ug-bg-color);border:1px solid var(--ug-primary-color);box-shadow:0 4px 6px -1px #0000001a;display:flex;align-items:center;padding:4px 16px}.cdk-drag-placeholder{opacity:.3}\n"] }]
982
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-choose-columns-panel{display:flex;flex-direction:column;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 12px -1px #00000026,0 2px 8px -2px #0000001a;width:250px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);overflow:hidden}.ug-cc-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-cc-title{font-weight:var(--ug-header-font-weight);color:var(--ug-header-color)}.ug-cc-close{background:none;border:none;cursor:pointer;color:var(--ug-icon-color);padding:4px;display:flex;align-items:center;justify-content:center;border-radius:4px}.ug-cc-close:hover{background-color:var(--ug-row-hover-bg)}.ug-cc-search{padding:8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-cc-search-icon{position:absolute;left:16px;color:var(--ug-icon-color);display:flex}.ug-cc-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-panel-bg);color:var(--ug-color)}.ug-cc-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-cc-list{max-height:250px;overflow-y:auto;padding:8px 0}.ug-cc-item{display:flex;align-items:center;padding:4px 16px}.ug-cc-label{display:flex;align-items:center;width:100%;cursor:pointer}.ug-cc-label input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-cc-drag-handle{cursor:grab;color:var(--ug-icon-color);margin-right:12px;display:flex}.ug-cc-drag-handle:active{cursor:grabbing}.ug-cc-name{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cdk-drag-preview{box-sizing:border-box;background-color:var(--ug-panel-bg);border:1px solid var(--ug-primary-color);box-shadow:0 4px 6px -1px #0000001a;display:flex;align-items:center;padding:4px 16px}.cdk-drag-placeholder{opacity:.3}\n"] }]
983
983
  }], propDecorators: { columns: [{
984
984
  type: Input
985
985
  }], columnsChanged: [{
@@ -1108,7 +1108,7 @@ class HeaderFilterComponent {
1108
1108
  </div>
1109
1109
 
1110
1110
  </div>
1111
- `, isInline: true, styles: [".ug-header-filter-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-filter-panel{position:fixed;z-index:1000;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:250px;max-width:300px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);display:flex;flex-direction:column}.ug-filter-search{padding:0 12px 8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-filter-search-icon{position:absolute;left:20px;color:var(--ug-icon-color);display:flex}.ug-filter-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-bg-color);color:var(--ug-color)}.ug-filter-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-filter-list{padding:8px 0}.ug-filter-viewport{height:200px;width:100%}.ug-filter-select-all{border-bottom:1px solid var(--ug-border-color);margin-bottom:4px}.ug-filter-item{display:flex;align-items:center;padding:4px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.ug-filter-item:hover{background-color:var(--ug-row-hover-bg)}.ug-filter-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-filter-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ug-filter-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1111
+ `, isInline: true, styles: [".ug-header-filter-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-filter-panel{position:fixed;z-index:1000;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:250px;max-width:300px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);display:flex;flex-direction:column}.ug-filter-search{padding:0 12px 8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-filter-search-icon{position:absolute;left:20px;color:var(--ug-icon-color);display:flex}.ug-filter-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-panel-bg);color:var(--ug-color)}.ug-filter-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-filter-list{padding:8px 0}.ug-filter-viewport{height:200px;width:100%}.ug-filter-select-all{border-bottom:1px solid var(--ug-border-color);margin-bottom:4px}.ug-filter-item{display:flex;align-items:center;padding:4px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.ug-filter-item:hover{background-color:var(--ug-row-hover-bg)}.ug-filter-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-filter-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ug-filter-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1112
1112
  }
1113
1113
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: HeaderFilterComponent, decorators: [{
1114
1114
  type: Component,
@@ -1144,7 +1144,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
1144
1144
  </div>
1145
1145
 
1146
1146
  </div>
1147
- `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-header-filter-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-filter-panel{position:fixed;z-index:1000;background-color:var(--ug-bg-color);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:250px;max-width:300px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);display:flex;flex-direction:column}.ug-filter-search{padding:0 12px 8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-filter-search-icon{position:absolute;left:20px;color:var(--ug-icon-color);display:flex}.ug-filter-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-bg-color);color:var(--ug-color)}.ug-filter-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-filter-list{padding:8px 0}.ug-filter-viewport{height:200px;width:100%}.ug-filter-select-all{border-bottom:1px solid var(--ug-border-color);margin-bottom:4px}.ug-filter-item{display:flex;align-items:center;padding:4px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.ug-filter-item:hover{background-color:var(--ug-row-hover-bg)}.ug-filter-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-filter-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ug-filter-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic}\n"] }]
1147
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-header-filter-backdrop{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:999}.ug-header-filter-panel{position:fixed;z-index:1000;background-color:var(--ug-panel-bg);border:1px solid var(--ug-border-color);border-radius:4px;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;padding:8px 0;min-width:250px;max-width:300px;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-color);display:flex;flex-direction:column}.ug-filter-search{padding:0 12px 8px;border-bottom:1px solid var(--ug-border-color);position:relative;display:flex;align-items:center}.ug-filter-search-icon{position:absolute;left:20px;color:var(--ug-icon-color);display:flex}.ug-filter-search input{width:100%;padding:6px 8px 6px 28px;border:1px solid var(--ug-border-color);border-radius:4px;font-family:inherit;font-size:inherit;background-color:var(--ug-panel-bg);color:var(--ug-color)}.ug-filter-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-filter-list{padding:8px 0}.ug-filter-viewport{height:200px;width:100%}.ug-filter-select-all{border-bottom:1px solid var(--ug-border-color);margin-bottom:4px}.ug-filter-item{display:flex;align-items:center;padding:4px 16px;cursor:pointer;-webkit-user-select:none;user-select:none}.ug-filter-item:hover{background-color:var(--ug-row-hover-bg)}.ug-filter-item input[type=checkbox]{width:16px;height:16px;cursor:pointer;accent-color:var(--ug-primary-color);margin-right:12px}.ug-filter-item span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ug-filter-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic}\n"] }]
1148
1148
  }], propDecorators: { column: [{
1149
1149
  type: Input
1150
1150
  }], isOpen: [{
@@ -1653,11 +1653,12 @@ class FilterToolPanelComponent {
1653
1653
  rowData = [];
1654
1654
  activeFilters = new Map();
1655
1655
  conditionFilters = new Map();
1656
+ savedReportNames = [];
1656
1657
  filterApplied = new EventEmitter();
1657
1658
  conditionFilterChanged = new EventEmitter();
1658
1659
  clearAllFilters = new EventEmitter();
1659
- saveFiltersRequested = new EventEmitter();
1660
- filtersImported = new EventEmitter();
1660
+ saveReportRequested = new EventEmitter();
1661
+ loadReportRequested = new EventEmitter();
1661
1662
  sections = [];
1662
1663
  _loadedFields = new Set();
1663
1664
  constructor(cdr) {
@@ -1924,27 +1925,22 @@ class FilterToolPanelComponent {
1924
1925
  trackByField(index, section) {
1925
1926
  return section.column.field;
1926
1927
  }
1927
- onFileSelected(event) {
1928
- const file = event.target.files?.[0];
1929
- if (!file)
1930
- return;
1931
- const reader = new FileReader();
1932
- reader.onload = (e) => {
1933
- try {
1934
- const json = JSON.parse(e.target?.result);
1935
- this.filtersImported.emit(json);
1936
- // Reset input so importing same file again triggers change
1937
- event.target.value = '';
1938
- }
1939
- catch (err) {
1940
- console.error('Failed to parse filter JSON:', err);
1941
- alert('Invalid filter file format.');
1942
- }
1943
- };
1944
- reader.readAsText(file);
1928
+ onSaveReportPrompt() {
1929
+ const name = prompt('Enter a name for this report:');
1930
+ if (name && name.trim()) {
1931
+ this.saveReportRequested.emit(name.trim());
1932
+ }
1933
+ }
1934
+ onLoadReportSelected(event) {
1935
+ const select = event.target;
1936
+ const name = select.value;
1937
+ if (name) {
1938
+ this.loadReportRequested.emit(name);
1939
+ select.value = ''; // Reset so it can be re-selected if needed
1940
+ }
1945
1941
  }
1946
1942
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FilterToolPanelComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1947
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: FilterToolPanelComponent, isStandalone: true, selector: "ug-filter-tool-panel", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters" }, outputs: { filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters", saveFiltersRequested: "saveFiltersRequested", filtersImported: "filtersImported" }, usesOnChanges: true, ngImport: i0, template: `
1943
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: FilterToolPanelComponent, isStandalone: true, selector: "ug-filter-tool-panel", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters", savedReportNames: "savedReportNames" }, outputs: { filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters", saveReportRequested: "saveReportRequested", loadReportRequested: "loadReportRequested" }, usesOnChanges: true, ngImport: i0, template: `
1948
1944
  <div class="ug-ftp-wrapper">
1949
1945
  <!-- Global Toolbar -->
1950
1946
  <div class="ug-ftp-toolbar">
@@ -1963,15 +1959,15 @@ class FilterToolPanelComponent {
1963
1959
 
1964
1960
  <div style="flex: 1"></div>
1965
1961
 
1966
- <button class="ug-ftp-btn" (click)="saveFiltersRequested.emit()" title="Save Filters to JSON">
1962
+ <button class="ug-ftp-btn" (click)="onSaveReportPrompt()" title="Save Filters as Report">
1967
1963
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline></svg>
1968
1964
  Save
1969
1965
  </button>
1970
- <button class="ug-ftp-btn" (click)="fileInput.click()" title="Import Filters from JSON">
1971
- <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
1972
- Import
1973
- </button>
1974
- <input #fileInput type="file" accept=".json" style="display: none" (change)="onFileSelected($event)">
1966
+
1967
+ <select class="ug-ftp-toolbar-select" (change)="onLoadReportSelected($event)" title="Load Saved Report">
1968
+ <option value="" disabled selected>Load</option>
1969
+ <option *ngFor="let name of savedReportNames" [value]="name">{{ name }}</option>
1970
+ </select>
1975
1971
  </div>
1976
1972
 
1977
1973
  <!-- Column Filter Sections -->
@@ -2068,7 +2064,7 @@ class FilterToolPanelComponent {
2068
2064
  </div>
2069
2065
  </div>
2070
2066
  </div>
2071
- `, isInline: true, styles: [".ug-ftp-wrapper{display:flex;flex-direction:column;height:100%;font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color, #181d1f)}.ug-ftp-toolbar{display:flex;align-items:center;gap:4px;padding:8px 10px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg);flex-wrap:wrap}.ug-ftp-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color);color:var(--ug-header-color);font-family:inherit;font-size:11px;cursor:pointer;transition:all .15s ease;white-space:nowrap}.ug-ftp-btn:hover{background:var(--ug-row-hover-bg);border-color:var(--ug-primary-color);color:var(--ug-primary-color)}.ug-ftp-btn:disabled{opacity:.4;cursor:default;pointer-events:none}.ug-ftp-btn-clear{margin-left:auto}.ug-ftp-sections{flex:1;overflow-y:auto;overflow-x:hidden}.ug-ftp-section{border-bottom:1px solid var(--ug-border-color)}.ug-ftp-section-header{display:flex;align-items:center;padding:10px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px;background-color:var(--ug-bg-color);transition:background-color .15s}.ug-ftp-section-header:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-section-header.active-filter{font-weight:600}.ug-ftp-caret{transition:transform .2s ease;color:var(--ug-icon-color);flex-shrink:0}.ug-ftp-caret.expanded{transform:rotate(90deg)}.ug-ftp-section-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-active-dot{width:8px;height:8px;border-radius:50%;background-color:var(--ug-primary-color);flex-shrink:0}.ug-ftp-section-body{padding:0 12px 12px;background-color:var(--ug-bg-color)}.ug-ftp-condition-block{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;padding:10px;border:1px solid var(--ug-border-color);border-radius:4px;background:var(--ug-header-bg)}.ug-ftp-cond-select{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);cursor:pointer;box-sizing:border-box}.ug-ftp-cond-select:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-cond-input{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-cond-input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-operator-row{display:flex;align-items:center;gap:16px;padding:4px 0}.ug-ftp-radio{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;cursor:pointer;color:var(--ug-header-color)}.ug-ftp-radio input[type=radio]{accent-color:var(--ug-primary-color);cursor:pointer}.ug-ftp-search{position:relative;display:flex;align-items:center;margin-bottom:8px}.ug-ftp-search svg{position:absolute;left:8px;color:var(--ug-icon-color);pointer-events:none}.ug-ftp-search input{width:100%;padding:5px 8px 5px 26px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, inherit);font-size:var(--ug-font-size, 12px);background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-values{border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color)}.ug-ftp-viewport{height:200px}.ug-ftp-item{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;font-size:12px;transition:background-color .1s}.ug-ftp-item:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-item input[type=checkbox]{accent-color:var(--ug-primary-color);cursor:pointer;width:14px;height:14px;flex-shrink:0}.ug-ftp-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-select-all{border-bottom:1px solid var(--ug-border-color);font-weight:500;padding:6px 8px}.ug-ftp-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic;font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2067
+ `, isInline: true, styles: [".ug-ftp-wrapper{display:flex;flex-direction:column;height:100%;font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color, #181d1f)}.ug-ftp-toolbar{display:flex;align-items:center;gap:4px;padding:8px 10px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg);flex-wrap:wrap}.ug-ftp-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color);color:var(--ug-header-color);font-family:inherit;font-size:11px;cursor:pointer;transition:all .15s ease;white-space:nowrap}.ug-ftp-btn:hover{background:var(--ug-row-hover-bg);border-color:var(--ug-primary-color);color:var(--ug-primary-color)}.ug-ftp-btn:disabled{opacity:.4;cursor:default;pointer-events:none}.ug-ftp-btn-clear{margin-left:auto}.ug-ftp-toolbar-select{padding:3px 6px;border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color);color:var(--ug-header-color);font-family:inherit;font-size:11px;cursor:pointer;outline:none;transition:all .15s ease;max-width:120px}.ug-ftp-toolbar-select:hover{border-color:var(--ug-primary-color)}.ug-ftp-sections{flex:1;overflow-y:auto;overflow-x:hidden}.ug-ftp-section{border-bottom:1px solid var(--ug-border-color)}.ug-ftp-section-header{display:flex;align-items:center;padding:10px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px;background-color:var(--ug-bg-color);transition:background-color .15s}.ug-ftp-section-header:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-section-header.active-filter{font-weight:600}.ug-ftp-caret{transition:transform .2s ease;color:var(--ug-icon-color);flex-shrink:0}.ug-ftp-caret.expanded{transform:rotate(90deg)}.ug-ftp-section-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-active-dot{width:8px;height:8px;border-radius:50%;background-color:var(--ug-primary-color);flex-shrink:0}.ug-ftp-section-body{padding:0 12px 12px;background-color:var(--ug-bg-color)}.ug-ftp-condition-block{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;padding:10px;border:1px solid var(--ug-border-color);border-radius:4px;background:var(--ug-header-bg)}.ug-ftp-cond-select{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);cursor:pointer;box-sizing:border-box}.ug-ftp-cond-select:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-cond-input{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-cond-input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-operator-row{display:flex;align-items:center;gap:16px;padding:4px 0}.ug-ftp-radio{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;cursor:pointer;color:var(--ug-header-color)}.ug-ftp-radio input[type=radio]{accent-color:var(--ug-primary-color);cursor:pointer}.ug-ftp-search{position:relative;display:flex;align-items:center;margin-bottom:8px}.ug-ftp-search svg{position:absolute;left:8px;color:var(--ug-icon-color);pointer-events:none}.ug-ftp-search input{width:100%;padding:5px 8px 5px 26px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, inherit);font-size:var(--ug-font-size, 12px);background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-values{border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color)}.ug-ftp-viewport{height:200px}.ug-ftp-item{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;font-size:12px;transition:background-color .1s}.ug-ftp-item:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-item input[type=checkbox]{accent-color:var(--ug-primary-color);cursor:pointer;width:14px;height:14px;flex-shrink:0}.ug-ftp-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-select-all{border-bottom:1px solid var(--ug-border-color);font-weight:500;padding:6px 8px}.ug-ftp-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic;font-size:12px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2072
2068
  }
2073
2069
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: FilterToolPanelComponent, decorators: [{
2074
2070
  type: Component,
@@ -2091,15 +2087,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
2091
2087
 
2092
2088
  <div style="flex: 1"></div>
2093
2089
 
2094
- <button class="ug-ftp-btn" (click)="saveFiltersRequested.emit()" title="Save Filters to JSON">
2090
+ <button class="ug-ftp-btn" (click)="onSaveReportPrompt()" title="Save Filters as Report">
2095
2091
  <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"></path><polyline points="17 21 17 13 7 13 7 21"></polyline><polyline points="7 3 7 8 15 8"></polyline></svg>
2096
2092
  Save
2097
2093
  </button>
2098
- <button class="ug-ftp-btn" (click)="fileInput.click()" title="Import Filters from JSON">
2099
- <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
2100
- Import
2101
- </button>
2102
- <input #fileInput type="file" accept=".json" style="display: none" (change)="onFileSelected($event)">
2094
+
2095
+ <select class="ug-ftp-toolbar-select" (change)="onLoadReportSelected($event)" title="Load Saved Report">
2096
+ <option value="" disabled selected>Load</option>
2097
+ <option *ngFor="let name of savedReportNames" [value]="name">{{ name }}</option>
2098
+ </select>
2103
2099
  </div>
2104
2100
 
2105
2101
  <!-- Column Filter Sections -->
@@ -2196,7 +2192,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
2196
2192
  </div>
2197
2193
  </div>
2198
2194
  </div>
2199
- `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-ftp-wrapper{display:flex;flex-direction:column;height:100%;font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color, #181d1f)}.ug-ftp-toolbar{display:flex;align-items:center;gap:4px;padding:8px 10px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg);flex-wrap:wrap}.ug-ftp-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color);color:var(--ug-header-color);font-family:inherit;font-size:11px;cursor:pointer;transition:all .15s ease;white-space:nowrap}.ug-ftp-btn:hover{background:var(--ug-row-hover-bg);border-color:var(--ug-primary-color);color:var(--ug-primary-color)}.ug-ftp-btn:disabled{opacity:.4;cursor:default;pointer-events:none}.ug-ftp-btn-clear{margin-left:auto}.ug-ftp-sections{flex:1;overflow-y:auto;overflow-x:hidden}.ug-ftp-section{border-bottom:1px solid var(--ug-border-color)}.ug-ftp-section-header{display:flex;align-items:center;padding:10px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px;background-color:var(--ug-bg-color);transition:background-color .15s}.ug-ftp-section-header:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-section-header.active-filter{font-weight:600}.ug-ftp-caret{transition:transform .2s ease;color:var(--ug-icon-color);flex-shrink:0}.ug-ftp-caret.expanded{transform:rotate(90deg)}.ug-ftp-section-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-active-dot{width:8px;height:8px;border-radius:50%;background-color:var(--ug-primary-color);flex-shrink:0}.ug-ftp-section-body{padding:0 12px 12px;background-color:var(--ug-bg-color)}.ug-ftp-condition-block{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;padding:10px;border:1px solid var(--ug-border-color);border-radius:4px;background:var(--ug-header-bg)}.ug-ftp-cond-select{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);cursor:pointer;box-sizing:border-box}.ug-ftp-cond-select:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-cond-input{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-cond-input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-operator-row{display:flex;align-items:center;gap:16px;padding:4px 0}.ug-ftp-radio{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;cursor:pointer;color:var(--ug-header-color)}.ug-ftp-radio input[type=radio]{accent-color:var(--ug-primary-color);cursor:pointer}.ug-ftp-search{position:relative;display:flex;align-items:center;margin-bottom:8px}.ug-ftp-search svg{position:absolute;left:8px;color:var(--ug-icon-color);pointer-events:none}.ug-ftp-search input{width:100%;padding:5px 8px 5px 26px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, inherit);font-size:var(--ug-font-size, 12px);background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-values{border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color)}.ug-ftp-viewport{height:200px}.ug-ftp-item{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;font-size:12px;transition:background-color .1s}.ug-ftp-item:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-item input[type=checkbox]{accent-color:var(--ug-primary-color);cursor:pointer;width:14px;height:14px;flex-shrink:0}.ug-ftp-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-select-all{border-bottom:1px solid var(--ug-border-color);font-weight:500;padding:6px 8px}.ug-ftp-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic;font-size:12px}\n"] }]
2195
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-ftp-wrapper{display:flex;flex-direction:column;height:100%;font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color, #181d1f)}.ug-ftp-toolbar{display:flex;align-items:center;gap:4px;padding:8px 10px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg);flex-wrap:wrap}.ug-ftp-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color);color:var(--ug-header-color);font-family:inherit;font-size:11px;cursor:pointer;transition:all .15s ease;white-space:nowrap}.ug-ftp-btn:hover{background:var(--ug-row-hover-bg);border-color:var(--ug-primary-color);color:var(--ug-primary-color)}.ug-ftp-btn:disabled{opacity:.4;cursor:default;pointer-events:none}.ug-ftp-btn-clear{margin-left:auto}.ug-ftp-toolbar-select{padding:3px 6px;border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color);color:var(--ug-header-color);font-family:inherit;font-size:11px;cursor:pointer;outline:none;transition:all .15s ease;max-width:120px}.ug-ftp-toolbar-select:hover{border-color:var(--ug-primary-color)}.ug-ftp-sections{flex:1;overflow-y:auto;overflow-x:hidden}.ug-ftp-section{border-bottom:1px solid var(--ug-border-color)}.ug-ftp-section-header{display:flex;align-items:center;padding:10px 12px;cursor:pointer;-webkit-user-select:none;user-select:none;gap:8px;background-color:var(--ug-bg-color);transition:background-color .15s}.ug-ftp-section-header:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-section-header.active-filter{font-weight:600}.ug-ftp-caret{transition:transform .2s ease;color:var(--ug-icon-color);flex-shrink:0}.ug-ftp-caret.expanded{transform:rotate(90deg)}.ug-ftp-section-title{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-active-dot{width:8px;height:8px;border-radius:50%;background-color:var(--ug-primary-color);flex-shrink:0}.ug-ftp-section-body{padding:0 12px 12px;background-color:var(--ug-bg-color)}.ug-ftp-condition-block{display:flex;flex-direction:column;gap:6px;margin-bottom:10px;padding:10px;border:1px solid var(--ug-border-color);border-radius:4px;background:var(--ug-header-bg)}.ug-ftp-cond-select{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);cursor:pointer;box-sizing:border-box}.ug-ftp-cond-select:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-cond-input{width:100%;padding:5px 8px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, sans-serif);font-size:12px;background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-cond-input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-operator-row{display:flex;align-items:center;gap:16px;padding:4px 0}.ug-ftp-radio{display:flex;align-items:center;gap:4px;font-size:12px;font-weight:500;cursor:pointer;color:var(--ug-header-color)}.ug-ftp-radio input[type=radio]{accent-color:var(--ug-primary-color);cursor:pointer}.ug-ftp-search{position:relative;display:flex;align-items:center;margin-bottom:8px}.ug-ftp-search svg{position:absolute;left:8px;color:var(--ug-icon-color);pointer-events:none}.ug-ftp-search input{width:100%;padding:5px 8px 5px 26px;border:1px solid var(--ug-border-color);border-radius:3px;font-family:var(--ug-font-family, inherit);font-size:var(--ug-font-size, 12px);background-color:var(--ug-bg-color);color:var(--ug-header-color);box-sizing:border-box}.ug-ftp-search input:focus{outline:none;border-color:var(--ug-primary-color)}.ug-ftp-values{border:1px solid var(--ug-border-color);border-radius:3px;background:var(--ug-bg-color)}.ug-ftp-viewport{height:200px}.ug-ftp-item{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;font-size:12px;transition:background-color .1s}.ug-ftp-item:hover{background-color:var(--ug-row-hover-bg)}.ug-ftp-item input[type=checkbox]{accent-color:var(--ug-primary-color);cursor:pointer;width:14px;height:14px;flex-shrink:0}.ug-ftp-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ug-ftp-select-all{border-bottom:1px solid var(--ug-border-color);font-weight:500;padding:6px 8px}.ug-ftp-empty{padding:16px;text-align:center;color:var(--ug-icon-color);font-style:italic;font-size:12px}\n"] }]
2200
2196
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { columns: [{
2201
2197
  type: Input
2202
2198
  }], rowData: [{
@@ -2205,15 +2201,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
2205
2201
  type: Input
2206
2202
  }], conditionFilters: [{
2207
2203
  type: Input
2204
+ }], savedReportNames: [{
2205
+ type: Input
2208
2206
  }], filterApplied: [{
2209
2207
  type: Output
2210
2208
  }], conditionFilterChanged: [{
2211
2209
  type: Output
2212
2210
  }], clearAllFilters: [{
2213
2211
  type: Output
2214
- }], saveFiltersRequested: [{
2212
+ }], saveReportRequested: [{
2215
2213
  type: Output
2216
- }], filtersImported: [{
2214
+ }], loadReportRequested: [{
2217
2215
  type: Output
2218
2216
  }] } });
2219
2217
 
@@ -2226,6 +2224,7 @@ class SideBarComponent {
2226
2224
  valuesModel = [];
2227
2225
  pivotMode = false;
2228
2226
  pivotColumns = [];
2227
+ savedReportNames = [];
2229
2228
  columnsUpdated = new EventEmitter();
2230
2229
  groupModelUpdated = new EventEmitter();
2231
2230
  valuesModelUpdated = new EventEmitter();
@@ -2235,8 +2234,8 @@ class SideBarComponent {
2235
2234
  filterApplied = new EventEmitter();
2236
2235
  conditionFilterChanged = new EventEmitter();
2237
2236
  clearAllFilters = new EventEmitter();
2238
- saveFiltersRequested = new EventEmitter();
2239
- filtersImported = new EventEmitter();
2237
+ saveReportRequested = new EventEmitter();
2238
+ loadReportRequested = new EventEmitter();
2240
2239
  activeTab = 'columns'; // Open by default for demo parity
2241
2240
  cdr = inject(ChangeDetectorRef);
2242
2241
  toggleTab(tab) {
@@ -2281,7 +2280,7 @@ class SideBarComponent {
2281
2280
  this.pivotModelUpdated.emit(model);
2282
2281
  }
2283
2282
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SideBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2284
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SideBarComponent, isStandalone: true, selector: "ug-side-bar", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters", groupModel: "groupModel", valuesModel: "valuesModel", pivotMode: "pivotMode", pivotColumns: "pivotColumns" }, outputs: { columnsUpdated: "columnsUpdated", groupModelUpdated: "groupModelUpdated", valuesModelUpdated: "valuesModelUpdated", pivotModeUpdated: "pivotModeUpdated", pivotModelUpdated: "pivotModelUpdated", exportExcelClicked: "exportExcelClicked", filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters", saveFiltersRequested: "saveFiltersRequested", filtersImported: "filtersImported" }, ngImport: i0, template: `
2283
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: SideBarComponent, isStandalone: true, selector: "ug-side-bar", inputs: { columns: "columns", rowData: "rowData", activeFilters: "activeFilters", conditionFilters: "conditionFilters", groupModel: "groupModel", valuesModel: "valuesModel", pivotMode: "pivotMode", pivotColumns: "pivotColumns", savedReportNames: "savedReportNames" }, outputs: { columnsUpdated: "columnsUpdated", groupModelUpdated: "groupModelUpdated", valuesModelUpdated: "valuesModelUpdated", pivotModeUpdated: "pivotModeUpdated", pivotModelUpdated: "pivotModelUpdated", exportExcelClicked: "exportExcelClicked", filterApplied: "filterApplied", conditionFilterChanged: "conditionFilterChanged", clearAllFilters: "clearAllFilters", saveReportRequested: "saveReportRequested", loadReportRequested: "loadReportRequested" }, ngImport: i0, template: `
2285
2284
  <div class="ug-side-bar-wrapper">
2286
2285
  <!-- Content Area -->
2287
2286
  <div class="ug-side-bar-content" *ngIf="activeTab">
@@ -2314,11 +2313,12 @@ class SideBarComponent {
2314
2313
  [rowData]="rowData"
2315
2314
  [activeFilters]="activeFilters"
2316
2315
  [conditionFilters]="conditionFilters"
2316
+ [savedReportNames]="savedReportNames"
2317
2317
  (filterApplied)="onFilterApplied($event)"
2318
2318
  (conditionFilterChanged)="onConditionFilterChanged($event)"
2319
2319
  (clearAllFilters)="onClearAllFilters()"
2320
- (saveFiltersRequested)="saveFiltersRequested.emit()"
2321
- (filtersImported)="filtersImported.emit($event)">
2320
+ (saveReportRequested)="saveReportRequested.emit($event)"
2321
+ (loadReportRequested)="loadReportRequested.emit($event)">
2322
2322
  </ug-filter-tool-panel>
2323
2323
  </div>
2324
2324
  </div>
@@ -2340,7 +2340,7 @@ class SideBarComponent {
2340
2340
  </div>
2341
2341
  </div>
2342
2342
  </div>
2343
- `, isInline: true, styles: [".ug-side-bar-wrapper{display:flex;flex-direction:row;height:100%;background-color:var(--ug-bg-color);border-left:1px solid var(--ug-border-color);font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color)}.ug-side-bar-content{display:flex;flex-direction:column;width:250px;height:100%;border-right:1px solid var(--ug-border-color)}.ug-side-bar-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-side-bar-title{font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);font-weight:var(--ug-header-font-weight, 500);color:var(--ug-header-color)}.ug-side-bar-close{cursor:pointer;color:var(--ug-icon-color);display:flex;align-items:center;justify-content:center}.ug-side-bar-close:hover{color:var(--ug-primary-color)}.ug-side-bar-body{flex:1;overflow-y:auto;overflow-x:hidden;background-color:var(--ug-bg-color)}.ug-side-bar-toolbar{display:flex;flex-direction:column;width:40px;height:100%;background-color:var(--ug-header-bg);padding-top:8px;gap:8px;align-items:center}.ug-side-bar-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;cursor:pointer;color:var(--ug-icon-color);border-left:2px solid transparent;width:100%;box-sizing:border-box}.ug-side-bar-tab span{writing-mode:vertical-rl;transform:rotate(180deg);margin-top:12px;font-family:var(--ug-font-family, sans-serif);font-weight:var(--ug-header-font-weight, 500);font-size:var(--ug-font-size, 13px);letter-spacing:.5px}.ug-side-bar-tab:hover{color:var(--ug-primary-color);background-color:var(--ug-row-hover-bg)}.ug-side-bar-tab.active{color:var(--ug-primary-color);background-color:var(--ug-bg-color);border-left:2px solid var(--ug-primary-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnToolPanelComponent, selector: "ug-column-tool-panel", inputs: ["columns", "groupModel", "valuesModel", "pivotMode", "pivotColumns"], outputs: ["columnsUpdated", "groupModelChanged", "valuesModelChanged", "pivotModeChanged", "pivotModelChanged", "exportExcelClicked"] }, { kind: "component", type: FilterToolPanelComponent, selector: "ug-filter-tool-panel", inputs: ["columns", "rowData", "activeFilters", "conditionFilters"], outputs: ["filterApplied", "conditionFilterChanged", "clearAllFilters", "saveFiltersRequested", "filtersImported"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2343
+ `, isInline: true, styles: [".ug-side-bar-wrapper{display:flex;flex-direction:row;height:100%;background-color:var(--ug-panel-bg);border-left:1px solid var(--ug-border-color);font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color)}.ug-side-bar-content{display:flex;flex-direction:column;width:250px;height:100%;border-right:1px solid var(--ug-border-color)}.ug-side-bar-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-side-bar-title{font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);font-weight:var(--ug-header-font-weight, 500);color:var(--ug-header-color)}.ug-side-bar-close{cursor:pointer;color:var(--ug-icon-color);display:flex;align-items:center;justify-content:center}.ug-side-bar-close:hover{color:var(--ug-primary-color)}.ug-side-bar-body{flex:1;overflow-y:auto;overflow-x:hidden;background-color:var(--ug-panel-bg)}.ug-side-bar-toolbar{display:flex;flex-direction:column;width:40px;height:100%;background-color:var(--ug-header-bg);padding-top:8px;gap:8px;align-items:center}.ug-side-bar-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;cursor:pointer;color:var(--ug-icon-color);border-left:2px solid transparent;width:100%;box-sizing:border-box}.ug-side-bar-tab span{writing-mode:vertical-rl;transform:rotate(180deg);margin-top:12px;font-family:var(--ug-font-family, sans-serif);font-weight:var(--ug-header-font-weight, 500);font-size:var(--ug-font-size, 13px);letter-spacing:.5px}.ug-side-bar-tab:hover{color:var(--ug-primary-color);background-color:var(--ug-row-hover-bg)}.ug-side-bar-tab.active{color:var(--ug-primary-color);background-color:var(--ug-panel-bg);border-left:2px solid var(--ug-primary-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ColumnToolPanelComponent, selector: "ug-column-tool-panel", inputs: ["columns", "groupModel", "valuesModel", "pivotMode", "pivotColumns"], outputs: ["columnsUpdated", "groupModelChanged", "valuesModelChanged", "pivotModeChanged", "pivotModelChanged", "exportExcelClicked"] }, { kind: "component", type: FilterToolPanelComponent, selector: "ug-filter-tool-panel", inputs: ["columns", "rowData", "activeFilters", "conditionFilters", "savedReportNames"], outputs: ["filterApplied", "conditionFilterChanged", "clearAllFilters", "saveReportRequested", "loadReportRequested"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
2344
2344
  }
2345
2345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: SideBarComponent, decorators: [{
2346
2346
  type: Component,
@@ -2377,11 +2377,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
2377
2377
  [rowData]="rowData"
2378
2378
  [activeFilters]="activeFilters"
2379
2379
  [conditionFilters]="conditionFilters"
2380
+ [savedReportNames]="savedReportNames"
2380
2381
  (filterApplied)="onFilterApplied($event)"
2381
2382
  (conditionFilterChanged)="onConditionFilterChanged($event)"
2382
2383
  (clearAllFilters)="onClearAllFilters()"
2383
- (saveFiltersRequested)="saveFiltersRequested.emit()"
2384
- (filtersImported)="filtersImported.emit($event)">
2384
+ (saveReportRequested)="saveReportRequested.emit($event)"
2385
+ (loadReportRequested)="loadReportRequested.emit($event)">
2385
2386
  </ug-filter-tool-panel>
2386
2387
  </div>
2387
2388
  </div>
@@ -2403,7 +2404,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
2403
2404
  </div>
2404
2405
  </div>
2405
2406
  </div>
2406
- `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-side-bar-wrapper{display:flex;flex-direction:row;height:100%;background-color:var(--ug-bg-color);border-left:1px solid var(--ug-border-color);font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color)}.ug-side-bar-content{display:flex;flex-direction:column;width:250px;height:100%;border-right:1px solid var(--ug-border-color)}.ug-side-bar-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-side-bar-title{font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);font-weight:var(--ug-header-font-weight, 500);color:var(--ug-header-color)}.ug-side-bar-close{cursor:pointer;color:var(--ug-icon-color);display:flex;align-items:center;justify-content:center}.ug-side-bar-close:hover{color:var(--ug-primary-color)}.ug-side-bar-body{flex:1;overflow-y:auto;overflow-x:hidden;background-color:var(--ug-bg-color)}.ug-side-bar-toolbar{display:flex;flex-direction:column;width:40px;height:100%;background-color:var(--ug-header-bg);padding-top:8px;gap:8px;align-items:center}.ug-side-bar-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;cursor:pointer;color:var(--ug-icon-color);border-left:2px solid transparent;width:100%;box-sizing:border-box}.ug-side-bar-tab span{writing-mode:vertical-rl;transform:rotate(180deg);margin-top:12px;font-family:var(--ug-font-family, sans-serif);font-weight:var(--ug-header-font-weight, 500);font-size:var(--ug-font-size, 13px);letter-spacing:.5px}.ug-side-bar-tab:hover{color:var(--ug-primary-color);background-color:var(--ug-row-hover-bg)}.ug-side-bar-tab.active{color:var(--ug-primary-color);background-color:var(--ug-bg-color);border-left:2px solid var(--ug-primary-color)}\n"] }]
2407
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: [".ug-side-bar-wrapper{display:flex;flex-direction:row;height:100%;background-color:var(--ug-panel-bg);border-left:1px solid var(--ug-border-color);font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);color:var(--ug-header-color)}.ug-side-bar-content{display:flex;flex-direction:column;width:250px;height:100%;border-right:1px solid var(--ug-border-color)}.ug-side-bar-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--ug-border-color);background-color:var(--ug-header-bg)}.ug-side-bar-title{font-family:var(--ug-font-family, sans-serif);font-size:var(--ug-font-size, 13px);font-weight:var(--ug-header-font-weight, 500);color:var(--ug-header-color)}.ug-side-bar-close{cursor:pointer;color:var(--ug-icon-color);display:flex;align-items:center;justify-content:center}.ug-side-bar-close:hover{color:var(--ug-primary-color)}.ug-side-bar-body{flex:1;overflow-y:auto;overflow-x:hidden;background-color:var(--ug-panel-bg)}.ug-side-bar-toolbar{display:flex;flex-direction:column;width:40px;height:100%;background-color:var(--ug-header-bg);padding-top:8px;gap:8px;align-items:center}.ug-side-bar-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 4px;cursor:pointer;color:var(--ug-icon-color);border-left:2px solid transparent;width:100%;box-sizing:border-box}.ug-side-bar-tab span{writing-mode:vertical-rl;transform:rotate(180deg);margin-top:12px;font-family:var(--ug-font-family, sans-serif);font-weight:var(--ug-header-font-weight, 500);font-size:var(--ug-font-size, 13px);letter-spacing:.5px}.ug-side-bar-tab:hover{color:var(--ug-primary-color);background-color:var(--ug-row-hover-bg)}.ug-side-bar-tab.active{color:var(--ug-primary-color);background-color:var(--ug-panel-bg);border-left:2px solid var(--ug-primary-color)}\n"] }]
2407
2408
  }], propDecorators: { columns: [{
2408
2409
  type: Input
2409
2410
  }], rowData: [{
@@ -2420,6 +2421,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
2420
2421
  type: Input
2421
2422
  }], pivotColumns: [{
2422
2423
  type: Input
2424
+ }], savedReportNames: [{
2425
+ type: Input
2423
2426
  }], columnsUpdated: [{
2424
2427
  type: Output
2425
2428
  }], groupModelUpdated: [{
@@ -2438,9 +2441,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
2438
2441
  type: Output
2439
2442
  }], clearAllFilters: [{
2440
2443
  type: Output
2441
- }], saveFiltersRequested: [{
2444
+ }], saveReportRequested: [{
2442
2445
  type: Output
2443
- }], filtersImported: [{
2446
+ }], loadReportRequested: [{
2444
2447
  type: Output
2445
2448
  }] } });
2446
2449
 
@@ -2673,6 +2676,12 @@ class UltraGridComponent {
2673
2676
  pageSize = 100;
2674
2677
  rowClicked = new EventEmitter();
2675
2678
  sortChanged = new EventEmitter();
2679
+ selectionChanged = new EventEmitter();
2680
+ getSelectedRows() {
2681
+ if (!this._mappedRowData)
2682
+ return [];
2683
+ return this._mappedRowData.filter(row => row.selected).map(row => row.data);
2684
+ }
2676
2685
  isBrowser;
2677
2686
  visibleColumns = [];
2678
2687
  sortModel = [];
@@ -2705,6 +2714,7 @@ class UltraGridComponent {
2705
2714
  conditionFilters = new Map();
2706
2715
  isChooseColumnsOpen = false;
2707
2716
  chooseColumnsPosition = { x: 0, y: 0 };
2717
+ savedReportNames = [];
2708
2718
  destroy$ = new Subject();
2709
2719
  sortingWorker;
2710
2720
  sortingWorkerUrl;
@@ -2733,6 +2743,9 @@ class UltraGridComponent {
2733
2743
  this.fetchServerPage(1);
2734
2744
  }
2735
2745
  }
2746
+ if (this.isBrowser) {
2747
+ this.loadSavedReportNames();
2748
+ }
2736
2749
  }
2737
2750
  get selectedRowsCount() {
2738
2751
  if (!this._mappedRowData)
@@ -3272,6 +3285,7 @@ class UltraGridComponent {
3272
3285
  }
3273
3286
  this.selectionVersion++;
3274
3287
  this.cdr.markForCheck();
3288
+ this.selectionChanged.emit(this.getSelectedRows());
3275
3289
  }
3276
3290
  onPageSizeChanged(size) {
3277
3291
  this.pageSize = size;
@@ -3355,6 +3369,7 @@ class UltraGridComponent {
3355
3369
  this.selectionVersion++;
3356
3370
  this.rowClicked.emit(row);
3357
3371
  this.cdr.markForCheck();
3372
+ this.selectionChanged.emit(this.getSelectedRows());
3358
3373
  }
3359
3374
  getPlaceholderRow(index) {
3360
3375
  return {
@@ -3369,7 +3384,13 @@ class UltraGridComponent {
3369
3384
  }
3370
3385
  onHeaderMenuClicked(event) {
3371
3386
  this.activeMenuColumn = event.column;
3372
- this.menuPosition = { x: event.event.clientX, y: event.event.clientY };
3387
+ let x = event.event.clientX;
3388
+ const y = event.event.clientY;
3389
+ const panelWidth = 250;
3390
+ if (typeof window !== 'undefined' && (x + panelWidth > window.innerWidth)) {
3391
+ x = Math.max(0, window.innerWidth - panelWidth - 20);
3392
+ }
3393
+ this.menuPosition = { x, y };
3373
3394
  this.isMenuOpen = true;
3374
3395
  this.cdr.markForCheck();
3375
3396
  }
@@ -3422,7 +3443,13 @@ class UltraGridComponent {
3422
3443
  onMenuChooseColumns() {
3423
3444
  this.isChooseColumnsOpen = true;
3424
3445
  // Position it slightly shifted from the menu icon
3425
- this.chooseColumnsPosition = { x: this.menuPosition.x + 20, y: this.menuPosition.y + 20 };
3446
+ let x = this.menuPosition.x + 20;
3447
+ const y = this.menuPosition.y + 20;
3448
+ const panelWidth = 250;
3449
+ if (typeof window !== 'undefined' && (x + panelWidth > window.innerWidth)) {
3450
+ x = Math.max(0, window.innerWidth - panelWidth - 20);
3451
+ }
3452
+ this.chooseColumnsPosition = { x, y };
3426
3453
  this.isMenuOpen = false;
3427
3454
  this.cdr.markForCheck();
3428
3455
  }
@@ -3439,7 +3466,13 @@ class UltraGridComponent {
3439
3466
  }
3440
3467
  onHeaderFilterClicked(event) {
3441
3468
  this.activeFilterColumn = event.column;
3442
- this.filterPosition = { x: event.event.clientX, y: event.event.clientY };
3469
+ let x = event.event.clientX;
3470
+ const y = event.event.clientY;
3471
+ const panelWidth = 300;
3472
+ if (typeof window !== 'undefined' && (x + panelWidth > window.innerWidth)) {
3473
+ x = Math.max(0, window.innerWidth - panelWidth - 20);
3474
+ }
3475
+ this.filterPosition = { x, y };
3443
3476
  this.isFilterOpen = true;
3444
3477
  // Calculate unique values based on un-paginated / un-filtered raw data
3445
3478
  const uniqueSet = new Set();
@@ -3532,8 +3565,23 @@ class UltraGridComponent {
3532
3565
  }
3533
3566
  this.applyLocalData();
3534
3567
  }
3535
- // --- Save / Import Filters ---
3536
- handleSaveFilters() {
3568
+ // --- Save / Import Filters natively to LocalStorage ---
3569
+ loadSavedReportNames() {
3570
+ if (!this.isBrowser)
3571
+ return;
3572
+ try {
3573
+ const stored = localStorage.getItem('ug-saved-reports');
3574
+ if (stored) {
3575
+ const parsed = JSON.parse(stored);
3576
+ this.savedReportNames = Object.keys(parsed);
3577
+ this.cdr.markForCheck();
3578
+ }
3579
+ }
3580
+ catch (e) { }
3581
+ }
3582
+ handleSaveReport(reportName) {
3583
+ if (!reportName)
3584
+ return;
3537
3585
  const state = {
3538
3586
  activeFilters: {},
3539
3587
  conditionFilters: {}
@@ -3548,19 +3596,40 @@ class UltraGridComponent {
3548
3596
  if (this.conditionFilters.size > 0) {
3549
3597
  state.conditionFilters = Object.fromEntries(this.conditionFilters);
3550
3598
  }
3551
- const json = JSON.stringify(state, null, 2);
3552
- const blob = new Blob([json], { type: 'application/json' });
3553
- const url = URL.createObjectURL(blob);
3554
- const link = document.createElement('a');
3555
- link.href = url;
3556
- link.download = `grid-filters-${new Date().toISOString().slice(0, 10)}.json`;
3557
- link.click();
3558
- URL.revokeObjectURL(url);
3599
+ if (this.isBrowser) {
3600
+ try {
3601
+ const stored = localStorage.getItem('ug-saved-reports');
3602
+ const reports = stored ? JSON.parse(stored) : {};
3603
+ reports[reportName] = state;
3604
+ localStorage.setItem('ug-saved-reports', JSON.stringify(reports));
3605
+ this.loadSavedReportNames();
3606
+ console.log(`Report '${reportName}' saved successfully locally.`);
3607
+ }
3608
+ catch (err) {
3609
+ console.error('Failed to save report locally.', err);
3610
+ }
3611
+ }
3559
3612
  }
3560
- handleImportFilters(data) {
3613
+ handleLoadReport(reportName) {
3614
+ if (!reportName || !this.isBrowser)
3615
+ return;
3616
+ try {
3617
+ const stored = localStorage.getItem('ug-saved-reports');
3618
+ if (stored) {
3619
+ const reports = JSON.parse(stored);
3620
+ const data = reports[reportName];
3621
+ if (data) {
3622
+ this.applyImportedFilters(data);
3623
+ }
3624
+ }
3625
+ }
3626
+ catch (err) {
3627
+ console.error('Error loading report locally.', err);
3628
+ }
3629
+ }
3630
+ applyImportedFilters(data) {
3561
3631
  if (!data)
3562
3632
  return;
3563
- console.log('Importing filters:', data);
3564
3633
  try {
3565
3634
  // Restore activeFilters (Record -> Map<string, Set>)
3566
3635
  // Important: We create a NEW Map instance to trigger Output/Input change detection
@@ -3572,7 +3641,6 @@ class UltraGridComponent {
3572
3641
  }
3573
3642
  this.activeFilters = newActiveFilters;
3574
3643
  // Restore conditionFilters (Object -> Map)
3575
- // Important: We create a NEW Map instance to trigger Output/Input change detection
3576
3644
  if (data.conditionFilters) {
3577
3645
  this.conditionFilters = new Map(Object.entries(data.conditionFilters));
3578
3646
  }
@@ -3583,15 +3651,15 @@ class UltraGridComponent {
3583
3651
  this.currentPage = 1;
3584
3652
  this.applyLocalData();
3585
3653
  this.cdr.markForCheck();
3586
- console.log('Filters imported and applied successfully.');
3654
+ console.log('Filters loaded and applied successfully.');
3587
3655
  }
3588
3656
  catch (err) {
3589
- console.error('Error applying imported filters:', err);
3590
- alert('Error applying filters. Please ensure the file format is correct.');
3657
+ console.error('Error applying loaded filters:', err);
3658
+ alert('Error loading report. Please ensure local storage data is not corrupted.');
3591
3659
  }
3592
3660
  }
3593
3661
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UltraGridComponent, deps: [{ token: PLATFORM_ID }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: GridFlattenerService }, { token: ExcelExportService }], target: i0.ɵɵFactoryTarget.Component });
3594
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: UltraGridComponent, isStandalone: true, selector: "bways-grid", inputs: { columns: "columns", rowData: "rowData", serverDataSource: "serverDataSource", config: "config", pagination: "pagination", pageSize: "pageSize", groupModel: "groupModel", valuesModel: "valuesModel", pivotColumns: "pivotColumns" }, outputs: { rowClicked: "rowClicked", sortChanged: "sortChanged" }, usesOnChanges: true, ngImport: i0, template: `
3662
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.18", type: UltraGridComponent, isStandalone: true, selector: "bways-grid", inputs: { columns: "columns", rowData: "rowData", serverDataSource: "serverDataSource", config: "config", pagination: "pagination", pageSize: "pageSize", groupModel: "groupModel", valuesModel: "valuesModel", pivotColumns: "pivotColumns" }, outputs: { rowClicked: "rowClicked", sortChanged: "sortChanged", selectionChanged: "selectionChanged" }, usesOnChanges: true, ngImport: i0, template: `
3595
3663
  <div class="ug-wrapper" [ngClass]="config.theme || 'ag-theme-alpine'">
3596
3664
 
3597
3665
  <div class="ug-main">
@@ -3665,6 +3733,7 @@ class UltraGridComponent {
3665
3733
  [valuesModel]="valuesModel"
3666
3734
  [pivotMode]="!!config.pivotMode"
3667
3735
  [pivotColumns]="pivotColumns"
3736
+ [savedReportNames]="savedReportNames"
3668
3737
  (columnsUpdated)="onSideBarColumnsUpdated($event)"
3669
3738
  (groupModelUpdated)="onSideBarGroupModelUpdated($event)"
3670
3739
  (valuesModelUpdated)="onValuesModelUpdated($event)"
@@ -3674,12 +3743,14 @@ class UltraGridComponent {
3674
3743
  (filterApplied)="onFilterApplied($event)"
3675
3744
  (conditionFilterChanged)="onConditionFilterChanged($event)"
3676
3745
  (clearAllFilters)="onClearAllFilters()"
3677
- (saveFiltersRequested)="handleSaveFilters()"
3678
- (filtersImported)="handleImportFilters($event)">
3746
+ (saveReportRequested)="handleSaveReport($event)"
3747
+ (loadReportRequested)="handleLoadReport($event)">
3679
3748
  </ug-side-bar>
3680
3749
 
3750
+ </div>
3681
3751
 
3682
- <ug-header-menu
3752
+ <!-- Floating overlays rendered OUTSIDE .ug-wrapper to avoid backdrop-filter containing block -->
3753
+ <ug-header-menu
3683
3754
  [column]="activeMenuColumn"
3684
3755
  [isOpen]="isMenuOpen"
3685
3756
  [position]="menuPosition"
@@ -3709,9 +3780,7 @@ class UltraGridComponent {
3709
3780
  (closePanel)="isChooseColumnsOpen = false">
3710
3781
  </ug-choose-columns>
3711
3782
  </div>
3712
-
3713
- </div>
3714
- `, isInline: true, styles: ["bways-grid{display:block;height:100%;width:100%}.ug-wrapper{display:flex;flex-direction:row;height:100%;width:100%;border:1px solid var(--ug-border-color);background-color:var(--ug-bg-color);background-image:url(\"data:image/svg+xml;utf8,<svg viewBox='0 0 800 800' xmlns='http://www.w3.org/2000/svg'><g fill='rgba(0,0,0,0.02)'><path transform='translate(150,150) scale(1.6)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(600,250) scale(1.8)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(350,550) scale(1.7)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g><path transform='translate(700,700) scale(1.4)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(100,600) scale(1.5)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(450,100) scale(1.3)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g></g></svg>\"),radial-gradient(circle at 10% 20%,#fdf5f5 0%,transparent 60%),radial-gradient(circle at 80% 10%,#eefbf6 0%,transparent 60%),radial-gradient(circle at 50% 80%,#f9f5f0,#f1efe9);background-size:800px 800px,100% 100%,100% 100%,100% 100%;background-position:center;background-repeat:repeat,no-repeat,no-repeat,no-repeat;box-sizing:border-box;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-header-color);overflow:hidden}.ug-main{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden}.ug-body{flex:1;overflow:hidden;position:relative}.ug-viewport{height:100%;width:100%;overflow:auto}.ug-ssr-container{height:100%;width:100%;overflow:hidden}.ug-status-bar{display:flex;align-items:center;padding:0 16px;min-height:48px;border-top:1px solid var(--ug-border-color);font-weight:500;font-size:13px;color:var(--ug-header-color);background-color:var(--ug-footer-bg)}.ug-cc-overlay-container{position:fixed;z-index:1002}.ug-wrapper{--ug-border-color: rgba(221, 226, 235, .4);--ug-bg-color: transparent;--ug-header-bg: rgba(255, 255, 255, .25);--ug-header-color: #3f332f;--ug-header-hover-bg: rgba(255, 255, 255, .4);--ug-row-bg: rgba(255, 255, 255, .15);--ug-row-hover-bg: rgba(216, 48, 24, .05);--ug-row-selected-bg: rgba(216, 48, 24, .15);--ug-primary-color: #d83018;--ug-footer-bg: rgba(255, 255, 255, .25);--ug-footer-color: #554440;--ug-icon-color: #7b6d69;--ug-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ug-font-size: 13px;--ug-header-font-weight: 600;backdrop-filter:blur(8px)}.ug-wrapper.ag-theme-alpine-dark{--ug-border-color: #334155;--ug-bg-color: #1e293b;--ug-header-bg: #0f172a;--ug-header-color: #e2e8f0;--ug-header-hover-bg: #1e293b;--ug-row-bg: #1e293b;--ug-row-hover-bg: #334155;--ug-row-selected-bg: #0f172a;--ug-primary-color: #60a5fa;--ug-footer-bg: #0f172a;--ug-footer-color: #94a3b8;--ug-icon-color: #94a3b8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: HeaderComponent, selector: "ug-header", inputs: ["columns", "sortModel", "isAllSelected"], outputs: ["sortChanged", "columnsReordered", "columnResized", "headerCheckboxClicked", "menuClicked", "filterClicked"] }, { kind: "component", type: RowComponent, selector: "ug-row", inputs: ["columns", "row", "rowHeight", "isExpanded", "selectionVersion"], outputs: ["groupToggled"] }, { kind: "component", type: PaginationComponent, selector: "ug-pagination", inputs: ["totalCount", "pageSize", "currentPage"], outputs: ["pageChanged", "pageSizeChanged"] }, { kind: "component", type: HeaderMenuComponent, selector: "ug-header-menu", inputs: ["column", "isOpen", "position", "groupModel"], outputs: ["closeMenu", "sort", "pin", "autosize", "group", "chooseColumns"] }, { kind: "component", type: ChooseColumnsComponent, selector: "ug-choose-columns", inputs: ["columns"], outputs: ["columnsChanged", "closePanel"] }, { kind: "component", type: HeaderFilterComponent, selector: "ug-header-filter", inputs: ["column", "isOpen", "position", "uniqueValues", "activeFilterSet"], outputs: ["closeFilter", "filterApplied"] }, { kind: "component", type: SideBarComponent, selector: "ug-side-bar", inputs: ["columns", "rowData", "activeFilters", "conditionFilters", "groupModel", "valuesModel", "pivotMode", "pivotColumns"], outputs: ["columnsUpdated", "groupModelUpdated", "valuesModelUpdated", "pivotModeUpdated", "pivotModelUpdated", "exportExcelClicked", "filterApplied", "conditionFilterChanged", "clearAllFilters", "saveFiltersRequested", "filtersImported"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3783
+ `, isInline: true, styles: ["@charset \"UTF-8\";bways-grid{display:block;height:100%;width:100%;--ug-border-color: rgba(221, 226, 235, .4);--ug-bg-color: transparent;--ug-header-bg: rgba(255, 255, 255, .25);--ug-header-color: #3f332f;--ug-header-hover-bg: rgba(255, 255, 255, .4);--ug-row-bg: rgba(255, 255, 255, .15);--ug-row-hover-bg: rgba(216, 48, 24, .05);--ug-row-selected-bg: rgba(216, 48, 24, .15);--ug-primary-color: #d83018;--ug-panel-bg: #ffffff;--ug-footer-bg: rgba(255, 255, 255, .25);--ug-footer-color: #554440;--ug-icon-color: #7b6d69;--ug-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ug-font-size: 13px;--ug-header-font-weight: 600}.ug-wrapper{display:flex;flex-direction:row;height:100%;width:100%;border:1px solid var(--ug-border-color);background-color:var(--ug-bg-color);background-image:url(\"data:image/svg+xml;utf8,<svg viewBox='0 0 800 800' xmlns='http://www.w3.org/2000/svg'><g fill='rgba(0,0,0,0.02)'><path transform='translate(150,150) scale(1.6)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(600,250) scale(1.8)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(350,550) scale(1.7)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g><path transform='translate(700,700) scale(1.4)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(100,600) scale(1.5)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(450,100) scale(1.3)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g></g></svg>\"),radial-gradient(circle at 10% 20%,#fdf5f5 0%,transparent 60%),radial-gradient(circle at 80% 10%,#eefbf6 0%,transparent 60%),radial-gradient(circle at 50% 80%,#f9f5f0,#f1efe9);background-size:800px 800px,100% 100%,100% 100%,100% 100%;background-position:center;background-repeat:repeat,no-repeat,no-repeat,no-repeat;box-sizing:border-box;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-header-color);overflow:hidden;backdrop-filter:blur(8px)}.ug-main{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden}.ug-body{flex:1;overflow:hidden;position:relative}.ug-viewport{height:100%;width:100%;overflow:auto}.ug-ssr-container{height:100%;width:100%;overflow:hidden}.ug-status-bar{display:flex;align-items:center;padding:0 16px;min-height:48px;border-top:1px solid var(--ug-border-color);font-weight:500;font-size:13px;color:var(--ug-header-color);background-color:var(--ug-footer-bg)}.ug-cc-overlay-container{position:fixed;z-index:1002}bways-grid.ag-theme-alpine-dark{--ug-border-color: #334155;--ug-bg-color: #1e293b;--ug-header-bg: #0f172a;--ug-header-color: #e2e8f0;--ug-header-hover-bg: #1e293b;--ug-row-bg: #1e293b;--ug-row-hover-bg: #334155;--ug-row-selected-bg: #0f172a;--ug-primary-color: #60a5fa;--ug-footer-bg: #0f172a;--ug-footer-color: #94a3b8;--ug-icon-color: #94a3b8}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: HeaderComponent, selector: "ug-header", inputs: ["columns", "sortModel", "isAllSelected"], outputs: ["sortChanged", "columnsReordered", "columnResized", "headerCheckboxClicked", "menuClicked", "filterClicked"] }, { kind: "component", type: RowComponent, selector: "ug-row", inputs: ["columns", "row", "rowHeight", "isExpanded", "selectionVersion"], outputs: ["groupToggled"] }, { kind: "component", type: PaginationComponent, selector: "ug-pagination", inputs: ["totalCount", "pageSize", "currentPage"], outputs: ["pageChanged", "pageSizeChanged"] }, { kind: "component", type: HeaderMenuComponent, selector: "ug-header-menu", inputs: ["column", "isOpen", "position", "groupModel"], outputs: ["closeMenu", "sort", "pin", "autosize", "group", "chooseColumns"] }, { kind: "component", type: ChooseColumnsComponent, selector: "ug-choose-columns", inputs: ["columns"], outputs: ["columnsChanged", "closePanel"] }, { kind: "component", type: HeaderFilterComponent, selector: "ug-header-filter", inputs: ["column", "isOpen", "position", "uniqueValues", "activeFilterSet"], outputs: ["closeFilter", "filterApplied"] }, { kind: "component", type: SideBarComponent, selector: "ug-side-bar", inputs: ["columns", "rowData", "activeFilters", "conditionFilters", "groupModel", "valuesModel", "pivotMode", "pivotColumns", "savedReportNames"], outputs: ["columnsUpdated", "groupModelUpdated", "valuesModelUpdated", "pivotModeUpdated", "pivotModelUpdated", "exportExcelClicked", "filterApplied", "conditionFilterChanged", "clearAllFilters", "saveReportRequested", "loadReportRequested"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
3715
3784
  }
3716
3785
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImport: i0, type: UltraGridComponent, decorators: [{
3717
3786
  type: Component,
@@ -3799,6 +3868,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
3799
3868
  [valuesModel]="valuesModel"
3800
3869
  [pivotMode]="!!config.pivotMode"
3801
3870
  [pivotColumns]="pivotColumns"
3871
+ [savedReportNames]="savedReportNames"
3802
3872
  (columnsUpdated)="onSideBarColumnsUpdated($event)"
3803
3873
  (groupModelUpdated)="onSideBarGroupModelUpdated($event)"
3804
3874
  (valuesModelUpdated)="onValuesModelUpdated($event)"
@@ -3808,12 +3878,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
3808
3878
  (filterApplied)="onFilterApplied($event)"
3809
3879
  (conditionFilterChanged)="onConditionFilterChanged($event)"
3810
3880
  (clearAllFilters)="onClearAllFilters()"
3811
- (saveFiltersRequested)="handleSaveFilters()"
3812
- (filtersImported)="handleImportFilters($event)">
3881
+ (saveReportRequested)="handleSaveReport($event)"
3882
+ (loadReportRequested)="handleLoadReport($event)">
3813
3883
  </ug-side-bar>
3814
3884
 
3885
+ </div>
3815
3886
 
3816
- <ug-header-menu
3887
+ <!-- Floating overlays rendered OUTSIDE .ug-wrapper to avoid backdrop-filter containing block -->
3888
+ <ug-header-menu
3817
3889
  [column]="activeMenuColumn"
3818
3890
  [isOpen]="isMenuOpen"
3819
3891
  [position]="menuPosition"
@@ -3843,9 +3915,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
3843
3915
  (closePanel)="isChooseColumnsOpen = false">
3844
3916
  </ug-choose-columns>
3845
3917
  </div>
3846
-
3847
- </div>
3848
- `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: ["bways-grid{display:block;height:100%;width:100%}.ug-wrapper{display:flex;flex-direction:row;height:100%;width:100%;border:1px solid var(--ug-border-color);background-color:var(--ug-bg-color);background-image:url(\"data:image/svg+xml;utf8,<svg viewBox='0 0 800 800' xmlns='http://www.w3.org/2000/svg'><g fill='rgba(0,0,0,0.02)'><path transform='translate(150,150) scale(1.6)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(600,250) scale(1.8)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(350,550) scale(1.7)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g><path transform='translate(700,700) scale(1.4)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(100,600) scale(1.5)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(450,100) scale(1.3)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g></g></svg>\"),radial-gradient(circle at 10% 20%,#fdf5f5 0%,transparent 60%),radial-gradient(circle at 80% 10%,#eefbf6 0%,transparent 60%),radial-gradient(circle at 50% 80%,#f9f5f0,#f1efe9);background-size:800px 800px,100% 100%,100% 100%,100% 100%;background-position:center;background-repeat:repeat,no-repeat,no-repeat,no-repeat;box-sizing:border-box;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-header-color);overflow:hidden}.ug-main{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden}.ug-body{flex:1;overflow:hidden;position:relative}.ug-viewport{height:100%;width:100%;overflow:auto}.ug-ssr-container{height:100%;width:100%;overflow:hidden}.ug-status-bar{display:flex;align-items:center;padding:0 16px;min-height:48px;border-top:1px solid var(--ug-border-color);font-weight:500;font-size:13px;color:var(--ug-header-color);background-color:var(--ug-footer-bg)}.ug-cc-overlay-container{position:fixed;z-index:1002}.ug-wrapper{--ug-border-color: rgba(221, 226, 235, .4);--ug-bg-color: transparent;--ug-header-bg: rgba(255, 255, 255, .25);--ug-header-color: #3f332f;--ug-header-hover-bg: rgba(255, 255, 255, .4);--ug-row-bg: rgba(255, 255, 255, .15);--ug-row-hover-bg: rgba(216, 48, 24, .05);--ug-row-selected-bg: rgba(216, 48, 24, .15);--ug-primary-color: #d83018;--ug-footer-bg: rgba(255, 255, 255, .25);--ug-footer-color: #554440;--ug-icon-color: #7b6d69;--ug-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ug-font-size: 13px;--ug-header-font-weight: 600;backdrop-filter:blur(8px)}.ug-wrapper.ag-theme-alpine-dark{--ug-border-color: #334155;--ug-bg-color: #1e293b;--ug-header-bg: #0f172a;--ug-header-color: #e2e8f0;--ug-header-hover-bg: #1e293b;--ug-row-bg: #1e293b;--ug-row-hover-bg: #334155;--ug-row-selected-bg: #0f172a;--ug-primary-color: #60a5fa;--ug-footer-bg: #0f172a;--ug-footer-color: #94a3b8;--ug-icon-color: #94a3b8}\n"] }]
3918
+ `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, styles: ["@charset \"UTF-8\";bways-grid{display:block;height:100%;width:100%;--ug-border-color: rgba(221, 226, 235, .4);--ug-bg-color: transparent;--ug-header-bg: rgba(255, 255, 255, .25);--ug-header-color: #3f332f;--ug-header-hover-bg: rgba(255, 255, 255, .4);--ug-row-bg: rgba(255, 255, 255, .15);--ug-row-hover-bg: rgba(216, 48, 24, .05);--ug-row-selected-bg: rgba(216, 48, 24, .15);--ug-primary-color: #d83018;--ug-panel-bg: #ffffff;--ug-footer-bg: rgba(255, 255, 255, .25);--ug-footer-color: #554440;--ug-icon-color: #7b6d69;--ug-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;--ug-font-size: 13px;--ug-header-font-weight: 600}.ug-wrapper{display:flex;flex-direction:row;height:100%;width:100%;border:1px solid var(--ug-border-color);background-color:var(--ug-bg-color);background-image:url(\"data:image/svg+xml;utf8,<svg viewBox='0 0 800 800' xmlns='http://www.w3.org/2000/svg'><g fill='rgba(0,0,0,0.02)'><path transform='translate(150,150) scale(1.6)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(600,250) scale(1.8)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(350,550) scale(1.7)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g><path transform='translate(700,700) scale(1.4)' d='M-20 -30c0-10 40-10 40 0v60c0 10-40 10-40 0z M-20 -10c0 10 40 10 40 0 M-20 10c0 10 40 10 40 0'/><path transform='translate(100,600) scale(1.5)' d='M-40 10a30 30 0 0 1 50-10 40 40 0 0 1 30 60h-80a20 20 0 0 1 0-50z'/><g transform='translate(450,100) scale(1.3)'><circle cx='0' cy='-20' r='10'/><circle cx='-30' cy='10' r='8'/><circle cx='30' cy='10' r='8'/><path d='M0 -20l-30 30m30-30l30 30' stroke='rgba(0,0,0,0.02)' stroke-width='4'/></g></g></svg>\"),radial-gradient(circle at 10% 20%,#fdf5f5 0%,transparent 60%),radial-gradient(circle at 80% 10%,#eefbf6 0%,transparent 60%),radial-gradient(circle at 50% 80%,#f9f5f0,#f1efe9);background-size:800px 800px,100% 100%,100% 100%,100% 100%;background-position:center;background-repeat:repeat,no-repeat,no-repeat,no-repeat;box-sizing:border-box;font-family:var(--ug-font-family);font-size:var(--ug-font-size);color:var(--ug-header-color);overflow:hidden;backdrop-filter:blur(8px)}.ug-main{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden}.ug-body{flex:1;overflow:hidden;position:relative}.ug-viewport{height:100%;width:100%;overflow:auto}.ug-ssr-container{height:100%;width:100%;overflow:hidden}.ug-status-bar{display:flex;align-items:center;padding:0 16px;min-height:48px;border-top:1px solid var(--ug-border-color);font-weight:500;font-size:13px;color:var(--ug-header-color);background-color:var(--ug-footer-bg)}.ug-cc-overlay-container{position:fixed;z-index:1002}bways-grid.ag-theme-alpine-dark{--ug-border-color: #334155;--ug-bg-color: #1e293b;--ug-header-bg: #0f172a;--ug-header-color: #e2e8f0;--ug-header-hover-bg: #1e293b;--ug-row-bg: #1e293b;--ug-row-hover-bg: #334155;--ug-row-selected-bg: #0f172a;--ug-primary-color: #60a5fa;--ug-footer-bg: #0f172a;--ug-footer-color: #94a3b8;--ug-icon-color: #94a3b8}\n"] }]
3849
3919
  }], ctorParameters: () => [{ type: Object, decorators: [{
3850
3920
  type: Inject,
3851
3921
  args: [PLATFORM_ID]
@@ -3865,6 +3935,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
3865
3935
  type: Output
3866
3936
  }], sortChanged: [{
3867
3937
  type: Output
3938
+ }], selectionChanged: [{
3939
+ type: Output
3868
3940
  }], groupModel: [{
3869
3941
  type: Input
3870
3942
  }], valuesModel: [{