@marcura/marcura-grid 19.0.0 → 19.1.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,24 +1,24 @@
1
- # Marcura Grid
2
-
3
- This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
4
-
5
- ## Code scaffolding
6
-
7
- Run `ng generate component component-name --project marcura-common` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project marcura-common`.
8
- > Note: Don't forget to add `--project marcura-common` or else it will be added to the default project in your `angular.json` file.
9
-
10
- ## Build
11
-
12
- Run `ng build marcura-common` to build the project. The build artifacts will be stored in the `dist/` directory.
13
-
14
- ## Publishing
15
-
16
- After building your library with `ng build marcura-common`, go to the dist folder `cd dist/marcura-common` and run `npm publish`.
17
-
18
- ## Running unit tests
19
-
20
- Run `ng test marcura-common` to execute the unit tests via [Karma](https://karma-runner.github.io).
21
-
22
- ## Further help
23
-
24
- To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
1
+ # Marcura Grid
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 7.2.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project marcura-common` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project marcura-common`.
8
+ > Note: Don't forget to add `--project marcura-common` or else it will be added to the default project in your `angular.json` file.
9
+
10
+ ## Build
11
+
12
+ Run `ng build marcura-common` to build the project. The build artifacts will be stored in the `dist/` directory.
13
+
14
+ ## Publishing
15
+
16
+ After building your library with `ng build marcura-common`, go to the dist folder `cd dist/marcura-common` and run `npm publish`.
17
+
18
+ ## Running unit tests
19
+
20
+ Run `ng test marcura-common` to execute the unit tests via [Jest](https://jestjs.io).
21
+
22
+ ## Further help
23
+
24
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
@@ -1,9 +1,9 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Input, Component, EventEmitter, Output, HostBinding, ChangeDetectionStrategy, NgModule } from '@angular/core';
2
+ import { Input, Component, input, computed, effect, ChangeDetectionStrategy, EventEmitter, Output, HostBinding, NgModule } from '@angular/core';
3
3
  import * as i2 from '@angular/forms';
4
4
  import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
5
5
  import { getValue, Assert, AtLeastOneSelectedFormGuard, Observer, Worker, Is } from '@marcura/marcura-common';
6
- import { Subject, BehaviorSubject, combineLatest } from 'rxjs';
6
+ import { Subject, BehaviorSubject, takeUntil, combineLatest } from 'rxjs';
7
7
  import * as i1 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
9
  import * as i3 from '@marcura/marcura-checkbox';
@@ -87,11 +87,11 @@ class CellComponent {
87
87
  return this.row && this.column && this.column.getValue(this.row);
88
88
  }
89
89
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
90
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: CellComponent, isStandalone: false, selector: "sg-grid-cell", inputs: { row: "row", column: "column" }, ngImport: i0, template: "<span class=\"c-body c-body--1 u-font-weight--inherit\">{{ value }}</span>\r\n" }); }
90
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: CellComponent, isStandalone: false, selector: "sg-grid-cell", inputs: { row: "row", column: "column" }, ngImport: i0, template: "<span class=\"c-body c-body--1 u-font-weight--inherit\">{{ value }}</span>\n" }); }
91
91
  }
92
92
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: CellComponent, decorators: [{
93
93
  type: Component,
94
- args: [{ selector: 'sg-grid-cell', standalone: false, template: "<span class=\"c-body c-body--1 u-font-weight--inherit\">{{ value }}</span>\r\n" }]
94
+ args: [{ selector: 'sg-grid-cell', standalone: false, template: "<span class=\"c-body c-body--1 u-font-weight--inherit\">{{ value }}</span>\n" }]
95
95
  }], propDecorators: { row: [{
96
96
  type: Input
97
97
  }], column: [{
@@ -149,59 +149,112 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImpor
149
149
  }] } });
150
150
 
151
151
  class ColumnsFormComponent {
152
+ static { this.MAX_ROWS = 5; }
152
153
  constructor() {
153
154
  this._atLeastOneSelectedFormGuard = null;
154
- this._list = [];
155
- this.columns = [];
156
- this.prefix = '';
157
- }
158
- static { this.MAX_ROWS = 5; }
159
- get list() {
160
- return this._list;
161
- }
162
- set list(value) {
163
- this._list = value || [];
164
- this._list = this._list.filter((column) => {
165
- return column.isVisibilityFormControlVisible;
155
+ this._destroy$ = new Subject();
156
+ // Signal inputs
157
+ this.list = input.required();
158
+ this.prefix = input('');
159
+ this.columnsLimit = input(undefined);
160
+ this.columnsLimitText = input(undefined);
161
+ // Computed signals
162
+ this.processedList = computed(() => {
163
+ const listValue = this.list();
164
+ return (listValue || []).filter((column) => {
165
+ return column.isVisibilityFormControlVisible;
166
+ });
167
+ });
168
+ this.columns = computed(() => {
169
+ const list = this.processedList();
170
+ const columnsCount = Math.ceil(list.length / ColumnsFormComponent.MAX_ROWS);
171
+ const columns = [];
172
+ for (let i = 0; i < columnsCount; i++) {
173
+ const items = list.slice(i * ColumnsFormComponent.MAX_ROWS, (i + 1) * ColumnsFormComponent.MAX_ROWS);
174
+ columns.push(items);
175
+ }
176
+ return columns;
177
+ });
178
+ this.showColumnsLimitMessage = computed(() => {
179
+ const limit = this.columnsLimit();
180
+ const text = this.columnsLimitText();
181
+ return limit !== undefined && limit > 0 && text !== undefined;
182
+ });
183
+ // Effect to handle list and columnsLimit changes
184
+ effect(() => {
185
+ const list = this.processedList();
186
+ const limitValue = this.columnsLimit();
187
+ this.updateFormGroup(list);
188
+ if (this._atLeastOneSelectedFormGuard) {
189
+ this._atLeastOneSelectedFormGuard.destroy();
190
+ }
191
+ const controls = list.map((column) => column.isVisibleControl);
192
+ this._atLeastOneSelectedFormGuard = new AtLeastOneSelectedFormGuard(controls);
193
+ // Setup subscriptions when both list and limit are ready
194
+ this.setupColumnLimitSubscription(list);
166
195
  });
167
- this.updateFormGroup();
168
- this.updateColumns();
169
- if (this._atLeastOneSelectedFormGuard) {
170
- this._atLeastOneSelectedFormGuard.destroy();
171
- }
172
- const controls = this._list.map((column) => column.isVisibleControl);
173
- this._atLeastOneSelectedFormGuard = new AtLeastOneSelectedFormGuard(controls);
174
196
  }
175
- updateFormGroup() {
197
+ normalizeFieldName(field) {
198
+ return field.replace(/\./g, '_');
199
+ }
200
+ updateFormGroup(list) {
176
201
  const controls = {};
177
- this.list.forEach((column) => (controls[column.field] = column.isVisibleControl));
202
+ list.forEach((column) => {
203
+ const field = this.normalizeFieldName(column.field);
204
+ controls[field] = column.isVisibleControl;
205
+ });
178
206
  this.form = new FormGroup(controls);
179
207
  }
180
- updateColumns() {
181
- const columnsCount = Math.ceil(this.list.length / ColumnsFormComponent.MAX_ROWS);
182
- this.columns = [];
183
- for (let i = 0; i < columnsCount; i++) {
184
- const items = this.list.slice(i * ColumnsFormComponent.MAX_ROWS, (i + 1) * ColumnsFormComponent.MAX_ROWS);
185
- this.columns.push(items);
208
+ getSelectedColumnsCount(list) {
209
+ return list.filter((column) => column.isVisibleControl.value === true).length;
210
+ }
211
+ updateColumnsDisabledState(list) {
212
+ const limit = this.columnsLimit();
213
+ if (!limit) {
214
+ return;
186
215
  }
216
+ const selectedCount = this.getSelectedColumnsCount(list);
217
+ const limitReached = selectedCount >= limit;
218
+ list.forEach((column) => {
219
+ const isChecked = column.isVisibleControl.value === true;
220
+ if (limitReached && !isChecked) {
221
+ column.isVisibleControl.disable({ emitEvent: false });
222
+ }
223
+ else if (!limitReached && column.isVisibleControl.disabled) {
224
+ column.isVisibleControl.enable({ emitEvent: false });
225
+ }
226
+ });
227
+ }
228
+ setupColumnLimitSubscription(list) {
229
+ // Clean up previous subscriptions before setting up new ones
230
+ this._destroy$.next();
231
+ const limit = this.columnsLimit();
232
+ if (!limit) {
233
+ return;
234
+ }
235
+ list.forEach((column) => {
236
+ column.isVisibleControl.valueChanges.pipe(takeUntil(this._destroy$)).subscribe(() => {
237
+ this.updateColumnsDisabledState(list);
238
+ });
239
+ });
240
+ // Initial state update
241
+ this.updateColumnsDisabledState(list);
187
242
  }
188
243
  ngOnDestroy() {
244
+ this._destroy$.next();
245
+ this._destroy$.complete();
189
246
  if (this._atLeastOneSelectedFormGuard) {
190
247
  this._atLeastOneSelectedFormGuard.destroy();
191
248
  this._atLeastOneSelectedFormGuard = null;
192
249
  }
193
250
  }
194
251
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ColumnsFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
195
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: ColumnsFormComponent, isStandalone: false, selector: "sg-columns-form", inputs: { list: "list", prefix: "prefix" }, ngImport: i0, template: "<form class=\"u-padding--s\" [formGroup]=\"form\">\r\n <div class=\"o-layout\">\r\n <div\r\n *ngFor=\"let column of columns; let lastColumn = last\"\r\n class=\"o-layout__item o-layout__item--12 o-layout__item--dynamic---m u-margin-bottom--m-none\"\r\n [ngClass]=\"{'u-margin-bottom--m': !lastColumn}\"\r\n >\r\n <div class=\"o-layout o-layout--list\">\r\n <div\r\n *ngFor=\"let item of column; let last = last\"\r\n class=\"o-layout__item o-layout__item--12\"\r\n [ngClass]=\"{'u-margin-bottom--m': !last}\"\r\n >\r\n <sg-field>\r\n <sg-checkbox class=\"u-padding-right--xs\" sgFieldContent [formControl]=\"item.isVisibleControl\">{{\r\n item.title\r\n }}</sg-checkbox>\r\n </sg-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n", dependencies: [{ 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: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.CheckboxComponent, selector: "sg-checkbox", inputs: ["id"] }, { kind: "component", type: i4.FieldComponent, selector: "sg-field", inputs: ["labelHidden", "inline", "size"] }] }); }
252
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.1.4", type: ColumnsFormComponent, isStandalone: false, selector: "sg-columns-form", inputs: { list: { classPropertyName: "list", publicName: "list", isSignal: true, isRequired: true, transformFunction: null }, prefix: { classPropertyName: "prefix", publicName: "prefix", isSignal: true, isRequired: false, transformFunction: null }, columnsLimit: { classPropertyName: "columnsLimit", publicName: "columnsLimit", isSignal: true, isRequired: false, transformFunction: null }, columnsLimitText: { classPropertyName: "columnsLimitText", publicName: "columnsLimitText", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<form class=\"u-padding--s\" [formGroup]=\"form\">\n <div class=\"o-layout\">\n <div\n *ngFor=\"let column of columns(); let lastColumn = last\"\n class=\"o-layout__item o-layout__item--12 o-layout__item--dynamic---m u-margin-bottom--m-none\"\n [ngClass]=\"{'u-margin-bottom--m': !lastColumn}\">\n <div class=\"o-layout o-layout--list\">\n <div\n *ngFor=\"let item of column; let last = last\"\n class=\"o-layout__item o-layout__item--12\"\n [ngClass]=\"{'u-margin-bottom--m': !last}\">\n <sg-field>\n <sg-checkbox class=\"u-padding-right--xs\" sgFieldContent [formControl]=\"item.isVisibleControl\">{{\n item.title\n }}</sg-checkbox>\n </sg-field>\n </div>\n </div>\n </div>\n </div>\n @if (showColumnsLimitMessage()) {\n <div class=\"u-margin-top--m\">\n <p>{{ columnsLimitText() }}</p>\n </div>\n }\n</form>\n", dependencies: [{ 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: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i3.CheckboxComponent, selector: "sg-checkbox", inputs: ["id"] }, { kind: "component", type: i4.FieldComponent, selector: "sg-field", inputs: ["labelHidden", "inline", "size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
196
253
  }
197
254
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ColumnsFormComponent, decorators: [{
198
255
  type: Component,
199
- args: [{ selector: 'sg-columns-form', standalone: false, template: "<form class=\"u-padding--s\" [formGroup]=\"form\">\r\n <div class=\"o-layout\">\r\n <div\r\n *ngFor=\"let column of columns; let lastColumn = last\"\r\n class=\"o-layout__item o-layout__item--12 o-layout__item--dynamic---m u-margin-bottom--m-none\"\r\n [ngClass]=\"{'u-margin-bottom--m': !lastColumn}\"\r\n >\r\n <div class=\"o-layout o-layout--list\">\r\n <div\r\n *ngFor=\"let item of column; let last = last\"\r\n class=\"o-layout__item o-layout__item--12\"\r\n [ngClass]=\"{'u-margin-bottom--m': !last}\"\r\n >\r\n <sg-field>\r\n <sg-checkbox class=\"u-padding-right--xs\" sgFieldContent [formControl]=\"item.isVisibleControl\">{{\r\n item.title\r\n }}</sg-checkbox>\r\n </sg-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n" }]
200
- }], propDecorators: { list: [{
201
- type: Input
202
- }], prefix: [{
203
- type: Input
204
- }] } });
256
+ args: [{ selector: 'sg-columns-form', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<form class=\"u-padding--s\" [formGroup]=\"form\">\n <div class=\"o-layout\">\n <div\n *ngFor=\"let column of columns(); let lastColumn = last\"\n class=\"o-layout__item o-layout__item--12 o-layout__item--dynamic---m u-margin-bottom--m-none\"\n [ngClass]=\"{'u-margin-bottom--m': !lastColumn}\">\n <div class=\"o-layout o-layout--list\">\n <div\n *ngFor=\"let item of column; let last = last\"\n class=\"o-layout__item o-layout__item--12\"\n [ngClass]=\"{'u-margin-bottom--m': !last}\">\n <sg-field>\n <sg-checkbox class=\"u-padding-right--xs\" sgFieldContent [formControl]=\"item.isVisibleControl\">{{\n item.title\n }}</sg-checkbox>\n </sg-field>\n </div>\n </div>\n </div>\n </div>\n @if (showColumnsLimitMessage()) {\n <div class=\"u-margin-top--m\">\n <p>{{ columnsLimitText() }}</p>\n </div>\n }\n</form>\n" }]
257
+ }], ctorParameters: () => [] });
205
258
 
206
259
  var CellVerticalAlignment;
207
260
  (function (CellVerticalAlignment) {
@@ -291,11 +344,11 @@ class LoadMoreComponent {
291
344
  }
292
345
  }
293
346
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: LoadMoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
294
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: LoadMoreComponent, isStandalone: false, selector: "sg-load-more", inputs: { isDisabled: "isDisabled" }, outputs: { clicked: "clicked" }, host: { properties: { "class.sg-load-more": "this.hasCssClass" } }, ngImport: i0, template: "<button kendoButton [look]=\"'flat'\" [disabled]=\"isDisabled\" (click)=\"onClicked()\">\r\n <span #content><ng-content></ng-content></span>\r\n <ng-container *ngIf=\"!content.innerHTML.trim()\">Load More</ng-container>\r\n</button>\r\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] }); }
347
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: LoadMoreComponent, isStandalone: false, selector: "sg-load-more", inputs: { isDisabled: "isDisabled" }, outputs: { clicked: "clicked" }, host: { properties: { "class.sg-load-more": "this.hasCssClass" } }, ngImport: i0, template: "<button kendoButton [look]=\"'flat'\" [disabled]=\"isDisabled\" (click)=\"onClicked()\">\n <span #content><ng-content></ng-content></span>\n <ng-container *ngIf=\"!content.innerHTML.trim()\">Load More</ng-container>\n</button>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.ButtonComponent, selector: "button[kendoButton]", inputs: ["arrowIcon", "toggleable", "togglable", "selected", "tabIndex", "imageUrl", "iconClass", "icon", "disabled", "size", "rounded", "fillMode", "themeColor", "svgIcon", "primary", "look"], outputs: ["selectedChange", "click"], exportAs: ["kendoButton"] }] }); }
295
348
  }
296
349
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: LoadMoreComponent, decorators: [{
297
350
  type: Component,
298
- args: [{ selector: 'sg-load-more', standalone: false, template: "<button kendoButton [look]=\"'flat'\" [disabled]=\"isDisabled\" (click)=\"onClicked()\">\r\n <span #content><ng-content></ng-content></span>\r\n <ng-container *ngIf=\"!content.innerHTML.trim()\">Load More</ng-container>\r\n</button>\r\n" }]
351
+ args: [{ selector: 'sg-load-more', standalone: false, template: "<button kendoButton [look]=\"'flat'\" [disabled]=\"isDisabled\" (click)=\"onClicked()\">\n <span #content><ng-content></ng-content></span>\n <ng-container *ngIf=\"!content.innerHTML.trim()\">Load More</ng-container>\n</button>\n" }]
299
352
  }], propDecorators: { hasCssClass: [{
300
353
  type: HostBinding,
301
354
  args: ['class.sg-load-more']
@@ -317,11 +370,11 @@ class ContinuousGridComponent extends GridComponent {
317
370
  this.rowClassFactory = () => '';
318
371
  }
319
372
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ContinuousGridComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
320
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: ContinuousGridComponent, isStandalone: false, selector: "sg-continuous-grid", inputs: { secondary: "secondary", loadMoreLabel: "loadMoreLabel", rowClassFactory: "rowClassFactory" }, host: { properties: { "class.sg-continuous-grid": "this.hasCssClass" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"sg-grid\">\r\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\r\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\r\n </div>\r\n <kendo-grid\r\n [class]=\"'k-grid--only-horizontal-scroll k-grid--cell-alignment-' + cellVerticalAlignment\"\r\n [data]=\"grid.observable.rows | async\"\r\n [sortable]=\"{\r\n allowUnsort: true,\r\n mode: 'single',\r\n }\"\r\n [resizable]=\"resizable\"\r\n [navigable]=\"true\"\r\n [selectable]=\"true\"\r\n [selectedKeys]=\"selection.keys\"\r\n [kendoGridSelectBy]=\"selection.selectBy\"\r\n [rowClass]=\"rowClassFactory\"\r\n (selectionChange)=\"selection.onChange($event)\"\r\n [sort]=\"grid.observable.sortDescriptor | async\"\r\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\r\n (columnResize)=\"grid.onColumnResized($event)\"\r\n [class.k-grid--secondary]=\"secondary\"\r\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\r\n >\r\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <ul>\r\n <li *ngFor=\"let column of grid.columns\">\r\n <div [hidden]=\"column.isHidden | async\">\r\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n <kendo-grid-column\r\n *ngFor=\"let column of grid.columns\"\r\n media=\"(min-width: 49rem)\"\r\n [title]=\"column.title\"\r\n [field]=\"column.field || FIELD_INPUT_FALLBACK\"\r\n [width]=\"column.width | async\"\r\n [locked]=\"column.isLocked | async\"\r\n [hidden]=\"column.isHidden | async\"\r\n [sortable]=\"column.isSortable | async\"\r\n [minResizableWidth]=\"column.minWidth | async\"\r\n >\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </ng-template>\r\n </kendo-grid-column>\r\n </kendo-grid>\r\n</div>\r\n<sg-load-more\r\n *ngIf=\"grid.hasMoreRows | async\"\r\n (clicked)=\"grid.loadMore()\"\r\n [isDisabled]=\"grid.observable.isLoading | async\"\r\n>\r\n {{ loadMoreLabel }}\r\n</sg-load-more>\r\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i2$2.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i2$2.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i2$2.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: LoadMoreComponent, selector: "sg-load-more", inputs: ["isDisabled"], outputs: ["clicked"] }, { kind: "component", type: ColumnCellComponent, selector: "sg-grid-column-cell", inputs: ["column", "row"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
373
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: ContinuousGridComponent, isStandalone: false, selector: "sg-continuous-grid", inputs: { secondary: "secondary", loadMoreLabel: "loadMoreLabel", rowClassFactory: "rowClassFactory" }, host: { properties: { "class.sg-continuous-grid": "this.hasCssClass" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"sg-grid\">\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\n </div>\n <kendo-grid\n [class]=\"'k-grid--only-horizontal-scroll k-grid--cell-alignment-' + cellVerticalAlignment\"\n [data]=\"grid.observable.rows | async\"\n [sortable]=\"{\n allowUnsort: true,\n mode: 'single',\n }\"\n [resizable]=\"resizable\"\n [navigable]=\"true\"\n [selectable]=\"true\"\n [selectedKeys]=\"selection.keys\"\n [kendoGridSelectBy]=\"selection.selectBy\"\n [rowClass]=\"rowClassFactory\"\n (selectionChange)=\"selection.onChange($event)\"\n [sort]=\"grid.observable.sortDescriptor | async\"\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\n (columnResize)=\"grid.onColumnResized($event)\"\n [class.k-grid--secondary]=\"secondary\"\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\n >\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <ul>\n <li *ngFor=\"let column of grid.columns\">\n <div [hidden]=\"column.isHidden | async\">\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </div>\n </li>\n </ul>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n *ngFor=\"let column of grid.columns\"\n media=\"(min-width: 49rem)\"\n [title]=\"column.title\"\n [field]=\"column.field || FIELD_INPUT_FALLBACK\"\n [width]=\"column.width | async\"\n [locked]=\"column.isLocked | async\"\n [hidden]=\"column.isHidden | async\"\n [sortable]=\"column.isSortable | async\"\n [minResizableWidth]=\"column.minWidth | async\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n</div>\n<sg-load-more\n *ngIf=\"grid.hasMoreRows | async\"\n (clicked)=\"grid.loadMore()\"\n [isDisabled]=\"grid.observable.isLoading | async\"\n>\n {{ loadMoreLabel }}\n</sg-load-more>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i2$2.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i2$2.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i2$2.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: LoadMoreComponent, selector: "sg-load-more", inputs: ["isDisabled"], outputs: ["clicked"] }, { kind: "component", type: ColumnCellComponent, selector: "sg-grid-column-cell", inputs: ["column", "row"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
321
374
  }
322
375
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: ContinuousGridComponent, decorators: [{
323
376
  type: Component,
324
- args: [{ selector: 'sg-continuous-grid', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sg-grid\">\r\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\r\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\r\n </div>\r\n <kendo-grid\r\n [class]=\"'k-grid--only-horizontal-scroll k-grid--cell-alignment-' + cellVerticalAlignment\"\r\n [data]=\"grid.observable.rows | async\"\r\n [sortable]=\"{\r\n allowUnsort: true,\r\n mode: 'single',\r\n }\"\r\n [resizable]=\"resizable\"\r\n [navigable]=\"true\"\r\n [selectable]=\"true\"\r\n [selectedKeys]=\"selection.keys\"\r\n [kendoGridSelectBy]=\"selection.selectBy\"\r\n [rowClass]=\"rowClassFactory\"\r\n (selectionChange)=\"selection.onChange($event)\"\r\n [sort]=\"grid.observable.sortDescriptor | async\"\r\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\r\n (columnResize)=\"grid.onColumnResized($event)\"\r\n [class.k-grid--secondary]=\"secondary\"\r\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\r\n >\r\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <ul>\r\n <li *ngFor=\"let column of grid.columns\">\r\n <div [hidden]=\"column.isHidden | async\">\r\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n <kendo-grid-column\r\n *ngFor=\"let column of grid.columns\"\r\n media=\"(min-width: 49rem)\"\r\n [title]=\"column.title\"\r\n [field]=\"column.field || FIELD_INPUT_FALLBACK\"\r\n [width]=\"column.width | async\"\r\n [locked]=\"column.isLocked | async\"\r\n [hidden]=\"column.isHidden | async\"\r\n [sortable]=\"column.isSortable | async\"\r\n [minResizableWidth]=\"column.minWidth | async\"\r\n >\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </ng-template>\r\n </kendo-grid-column>\r\n </kendo-grid>\r\n</div>\r\n<sg-load-more\r\n *ngIf=\"grid.hasMoreRows | async\"\r\n (clicked)=\"grid.loadMore()\"\r\n [isDisabled]=\"grid.observable.isLoading | async\"\r\n>\r\n {{ loadMoreLabel }}\r\n</sg-load-more>\r\n" }]
377
+ args: [{ selector: 'sg-continuous-grid', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sg-grid\">\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\n </div>\n <kendo-grid\n [class]=\"'k-grid--only-horizontal-scroll k-grid--cell-alignment-' + cellVerticalAlignment\"\n [data]=\"grid.observable.rows | async\"\n [sortable]=\"{\n allowUnsort: true,\n mode: 'single',\n }\"\n [resizable]=\"resizable\"\n [navigable]=\"true\"\n [selectable]=\"true\"\n [selectedKeys]=\"selection.keys\"\n [kendoGridSelectBy]=\"selection.selectBy\"\n [rowClass]=\"rowClassFactory\"\n (selectionChange)=\"selection.onChange($event)\"\n [sort]=\"grid.observable.sortDescriptor | async\"\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\n (columnResize)=\"grid.onColumnResized($event)\"\n [class.k-grid--secondary]=\"secondary\"\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\n >\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <ul>\n <li *ngFor=\"let column of grid.columns\">\n <div [hidden]=\"column.isHidden | async\">\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </div>\n </li>\n </ul>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n *ngFor=\"let column of grid.columns\"\n media=\"(min-width: 49rem)\"\n [title]=\"column.title\"\n [field]=\"column.field || FIELD_INPUT_FALLBACK\"\n [width]=\"column.width | async\"\n [locked]=\"column.isLocked | async\"\n [hidden]=\"column.isHidden | async\"\n [sortable]=\"column.isSortable | async\"\n [minResizableWidth]=\"column.minWidth | async\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n</div>\n<sg-load-more\n *ngIf=\"grid.hasMoreRows | async\"\n (clicked)=\"grid.loadMore()\"\n [isDisabled]=\"grid.observable.isLoading | async\"\n>\n {{ loadMoreLabel }}\n</sg-load-more>\n" }]
325
378
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { hasCssClass: [{
326
379
  type: HostBinding,
327
380
  args: ['class.sg-continuous-grid']
@@ -342,11 +395,11 @@ class PaginatedGridComponent extends GridComponent {
342
395
  this.secondary = false;
343
396
  }
344
397
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: PaginatedGridComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
345
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: PaginatedGridComponent, isStandalone: false, selector: "sg-paginated-grid", inputs: { secondary: "secondary" }, usesInheritance: true, ngImport: i0, template: "<div class=\"sg-grid\">\r\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\r\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\r\n </div>\r\n <kendo-grid\r\n [data]=\"grid.dataResult | async\"\r\n [sortable]=\"{\r\n allowUnsort: true,\r\n mode: 'single',\r\n }\"\r\n [resizable]=\"resizable\"\r\n [skip]=\"grid.observable.skip | async\"\r\n [pageSize]=\"grid.observable.pageSize | async\"\r\n [pageable]=\"grid.pageable\"\r\n [scrollable]=\"'scrollable'\"\r\n [navigable]=\"true\"\r\n (pageChange)=\"grid.pageChange($event)\"\r\n [selectable]=\"true\"\r\n [selectedKeys]=\"selection.keys\"\r\n [kendoGridSelectBy]=\"selection.selectBy\"\r\n (selectionChange)=\"selection.onChange($event)\"\r\n [sort]=\"grid.observable.sortDescriptor | async\"\r\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\r\n (columnResize)=\"grid.onColumnResized($event)\"\r\n [class.k-grid--secondary]=\"secondary\"\r\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\r\n >\r\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <ul>\r\n <li *ngFor=\"let column of grid.columns\">\r\n <div [hidden]=\"column.isHidden | async\">\r\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n <kendo-grid-column\r\n *ngFor=\"let column of grid.columns\"\r\n media=\"(min-width: 49rem)\"\r\n [title]=\"column.title\"\r\n [field]=\"column.field\"\r\n [width]=\"column.width | async\"\r\n [locked]=\"column.isLocked | async\"\r\n [hidden]=\"column.isHidden | async\"\r\n [sortable]=\"column.isSortable | async\"\r\n [minResizableWidth]=\"column.minWidth | async\"\r\n >\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </ng-template>\r\n </kendo-grid-column>\r\n </kendo-grid>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$2.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i2$2.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i2$2.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i2$2.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: ColumnCellComponent, selector: "sg-grid-column-cell", inputs: ["column", "row"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
398
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.1.4", type: PaginatedGridComponent, isStandalone: false, selector: "sg-paginated-grid", inputs: { secondary: "secondary" }, usesInheritance: true, ngImport: i0, template: "<div class=\"sg-grid\">\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\n </div>\n <kendo-grid\n [data]=\"grid.dataResult | async\"\n [sortable]=\"{\n allowUnsort: true,\n mode: 'single',\n }\"\n [resizable]=\"resizable\"\n [skip]=\"grid.observable.skip | async\"\n [pageSize]=\"grid.observable.pageSize | async\"\n [pageable]=\"grid.pageable\"\n [scrollable]=\"'scrollable'\"\n [navigable]=\"true\"\n (pageChange)=\"grid.pageChange($event)\"\n [selectable]=\"true\"\n [selectedKeys]=\"selection.keys\"\n [kendoGridSelectBy]=\"selection.selectBy\"\n (selectionChange)=\"selection.onChange($event)\"\n [sort]=\"grid.observable.sortDescriptor | async\"\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\n (columnResize)=\"grid.onColumnResized($event)\"\n [class.k-grid--secondary]=\"secondary\"\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\n >\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <ul>\n <li *ngFor=\"let column of grid.columns\">\n <div [hidden]=\"column.isHidden | async\">\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </div>\n </li>\n </ul>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n *ngFor=\"let column of grid.columns\"\n media=\"(min-width: 49rem)\"\n [title]=\"column.title\"\n [field]=\"column.field\"\n [width]=\"column.width | async\"\n [locked]=\"column.isLocked | async\"\n [hidden]=\"column.isHidden | async\"\n [sortable]=\"column.isSortable | async\"\n [minResizableWidth]=\"column.minWidth | async\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$2.GridComponent, selector: "kendo-grid", inputs: ["data", "pageSize", "height", "rowHeight", "detailRowHeight", "skip", "scrollable", "selectable", "sort", "size", "trackBy", "filter", "group", "virtualColumns", "filterable", "sortable", "pageable", "groupable", "rowReorderable", "navigable", "navigatable", "autoSize", "rowClass", "rowSticky", "rowSelected", "isRowSelectable", "cellSelected", "resizable", "reorderable", "loading", "columnMenu", "hideHeader", "isDetailExpanded", "isGroupExpanded"], outputs: ["filterChange", "pageChange", "groupChange", "sortChange", "selectionChange", "rowReorder", "dataStateChange", "groupExpand", "groupCollapse", "detailExpand", "detailCollapse", "edit", "cancel", "save", "remove", "add", "cellClose", "cellClick", "pdfExport", "excelExport", "columnResize", "columnReorder", "columnVisibilityChange", "columnLockedChange", "columnStickyChange", "scrollBottom", "contentScroll"], exportAs: ["kendoGrid"] }, { kind: "directive", type: i2$2.SelectionDirective, selector: "[kendoGridSelectBy]" }, { kind: "component", type: i2$2.ColumnComponent, selector: "kendo-grid-column", inputs: ["field", "format", "sortable", "groupable", "editor", "filter", "filterable", "editable"] }, { kind: "directive", type: i2$2.CellTemplateDirective, selector: "[kendoGridCellTemplate]" }, { kind: "component", type: ColumnCellComponent, selector: "sg-grid-column-cell", inputs: ["column", "row"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
346
399
  }
347
400
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.4", ngImport: i0, type: PaginatedGridComponent, decorators: [{
348
401
  type: Component,
349
- args: [{ selector: 'sg-paginated-grid', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sg-grid\">\r\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\r\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\r\n </div>\r\n <kendo-grid\r\n [data]=\"grid.dataResult | async\"\r\n [sortable]=\"{\r\n allowUnsort: true,\r\n mode: 'single',\r\n }\"\r\n [resizable]=\"resizable\"\r\n [skip]=\"grid.observable.skip | async\"\r\n [pageSize]=\"grid.observable.pageSize | async\"\r\n [pageable]=\"grid.pageable\"\r\n [scrollable]=\"'scrollable'\"\r\n [navigable]=\"true\"\r\n (pageChange)=\"grid.pageChange($event)\"\r\n [selectable]=\"true\"\r\n [selectedKeys]=\"selection.keys\"\r\n [kendoGridSelectBy]=\"selection.selectBy\"\r\n (selectionChange)=\"selection.onChange($event)\"\r\n [sort]=\"grid.observable.sortDescriptor | async\"\r\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\r\n (columnResize)=\"grid.onColumnResized($event)\"\r\n [class.k-grid--secondary]=\"secondary\"\r\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\r\n >\r\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <ul>\r\n <li *ngFor=\"let column of grid.columns\">\r\n <div [hidden]=\"column.isHidden | async\">\r\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n <kendo-grid-column\r\n *ngFor=\"let column of grid.columns\"\r\n media=\"(min-width: 49rem)\"\r\n [title]=\"column.title\"\r\n [field]=\"column.field\"\r\n [width]=\"column.width | async\"\r\n [locked]=\"column.isLocked | async\"\r\n [hidden]=\"column.isHidden | async\"\r\n [sortable]=\"column.isSortable | async\"\r\n [minResizableWidth]=\"column.minWidth | async\"\r\n >\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </ng-template>\r\n </kendo-grid-column>\r\n </kendo-grid>\r\n</div>\r\n" }]
402
+ args: [{ selector: 'sg-paginated-grid', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div class=\"sg-grid\">\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\n </div>\n <kendo-grid\n [data]=\"grid.dataResult | async\"\n [sortable]=\"{\n allowUnsort: true,\n mode: 'single',\n }\"\n [resizable]=\"resizable\"\n [skip]=\"grid.observable.skip | async\"\n [pageSize]=\"grid.observable.pageSize | async\"\n [pageable]=\"grid.pageable\"\n [scrollable]=\"'scrollable'\"\n [navigable]=\"true\"\n (pageChange)=\"grid.pageChange($event)\"\n [selectable]=\"true\"\n [selectedKeys]=\"selection.keys\"\n [kendoGridSelectBy]=\"selection.selectBy\"\n (selectionChange)=\"selection.onChange($event)\"\n [sort]=\"grid.observable.sortDescriptor | async\"\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\n (columnResize)=\"grid.onColumnResized($event)\"\n [class.k-grid--secondary]=\"secondary\"\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\n >\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <ul>\n <li *ngFor=\"let column of grid.columns\">\n <div [hidden]=\"column.isHidden | async\">\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </div>\n </li>\n </ul>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n *ngFor=\"let column of grid.columns\"\n media=\"(min-width: 49rem)\"\n [title]=\"column.title\"\n [field]=\"column.field\"\n [width]=\"column.width | async\"\n [locked]=\"column.isLocked | async\"\n [hidden]=\"column.isHidden | async\"\n [sortable]=\"column.isSortable | async\"\n [minResizableWidth]=\"column.minWidth | async\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n</div>\n" }]
350
403
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { secondary: [{
351
404
  type: Input
352
405
  }] } });
@@ -1 +1 @@
1
- {"version":3,"file":"marcura-marcura-grid.mjs","sources":["../../src/lib/model/sort-direction.enum.ts","../../src/lib/model/column.ts","../../src/lib/components/cell/cell.component.ts","../../src/lib/components/cell/cell.component.html","../../src/lib/components/column-cell/column-cell.component.ts","../../src/lib/components/columns-form/columns-form.component.ts","../../src/lib/components/columns-form/columns-form.component.html","../../src/lib/model/cell-vertical-alignment.enum.ts","../../src/lib/model/selection.ts","../../src/lib/components/grid/grid.component.ts","../../src/lib/components/load-more/load-more.component.ts","../../src/lib/components/load-more/load-more.component.html","../../src/lib/components/continuous-grid/continuous-grid.component.ts","../../src/lib/components/continuous-grid/continuous-grid.component.html","../../src/lib/components/paginated-grid/paginated-grid.component.ts","../../src/lib/components/paginated-grid/paginated-grid.component.html","../../src/lib/grid.module.ts","../../src/lib/model/grid.ts","../../src/lib/model/continuous-grid.ts","../../src/lib/model/paginated-grid.ts","../../src/marcura-marcura-grid.ts"],"sourcesContent":["export enum SortDirection {\r\n Asc = 'asc',\r\n Desc = 'desc',\r\n}\r\n","import {FormControl} from '@angular/forms';\r\nimport {getValue} from '@marcura/marcura-common';\r\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\r\nimport {SortDirection} from '../model/sort-direction.enum';\r\n\r\nexport class Column<TValue = any> {\r\n public readonly action: Subject<any> = new Subject();\r\n\r\n private readonly _isLocked: BehaviorSubject<boolean>;\r\n public get isLocked(): Observable<boolean> {\r\n return this._isLocked;\r\n }\r\n\r\n private readonly _isSortable: BehaviorSubject<boolean>;\r\n public get isSortable(): Observable<boolean> {\r\n return this._isSortable;\r\n }\r\n\r\n private readonly _isHidden: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n public get isHidden(): Observable<boolean> {\r\n return this._isHidden;\r\n }\r\n\r\n public readonly width: BehaviorSubject<number>;\r\n public readonly minWidth: Observable<number>;\r\n public readonly isVisibleControl: FormControl<boolean> = new FormControl<boolean>(true, {nonNullable: true});\r\n public isDefaultSortColumn: boolean = false;\r\n public defaultSortDirection: SortDirection = SortDirection.Asc;\r\n public title: string = '';\r\n public field: string = '';\r\n public isVisibilityFormControlVisible: boolean = true;\r\n\r\n public constructor(width: number, public readonly cellType: any, minWidth: number = 50) {\r\n this.width = new BehaviorSubject<number>(Math.max(width, minWidth));\r\n this.minWidth = new BehaviorSubject<number>(minWidth);\r\n this._isLocked = new BehaviorSubject<boolean>(false);\r\n this._isSortable = new BehaviorSubject<boolean>(false);\r\n this.isVisibleControl.valueChanges.subscribe((isVisible) => this._isHidden.next(!isVisible));\r\n }\r\n\r\n public forField(field: string): Column<TValue> {\r\n this.field = field;\r\n return this;\r\n }\r\n\r\n public withTitle(title: string): Column<TValue> {\r\n this.title = title;\r\n return this;\r\n }\r\n\r\n public locked(): Column<TValue> {\r\n this._isLocked.next(true);\r\n return this;\r\n }\r\n\r\n public sortable(): Column<TValue> {\r\n this._isSortable.next(true);\r\n return this;\r\n }\r\n\r\n public hidden(): Column<TValue> {\r\n this.isVisibleControl.setValue(false);\r\n return this;\r\n }\r\n\r\n public defaultSortColumn(direction: SortDirection = SortDirection.Asc): Column<TValue> {\r\n this.isDefaultSortColumn = true;\r\n this.defaultSortDirection = direction;\r\n return this;\r\n }\r\n\r\n public hiddenVisibilityFormControl(): Column<TValue> {\r\n this.isVisibilityFormControlVisible = false;\r\n return this;\r\n }\r\n\r\n public getValue(data: any): TValue | null {\r\n return this.field ? getValue(data, this.field) : null;\r\n }\r\n}\r\n","import {Component, Input} from '@angular/core';\r\nimport {Column} from '../../model/column';\r\n\r\n@Component({\r\n selector: 'sg-grid-cell',\r\n templateUrl: 'cell.component.html',\r\n standalone: false,\r\n})\r\nexport class CellComponent<TValue, TRow = any> {\r\n @Input()\r\n public row!: TRow;\r\n\r\n @Input()\r\n public column!: Column;\r\n\r\n public get value(): TValue | null {\r\n return this.row && this.column && this.column.getValue(this.row);\r\n }\r\n}\r\n","<span class=\"c-body c-body--1 u-font-weight--inherit\">{{ value }}</span>\r\n","import {\r\n Component,\r\n ComponentFactory,\r\n ComponentFactoryResolver,\r\n ComponentRef,\r\n Input,\r\n ViewContainerRef,\r\n} from '@angular/core';\r\nimport {Assert} from '@marcura/marcura-common';\r\nimport {CellComponent} from '../../components/cell/cell.component';\r\nimport {Column} from '../../model/column';\r\n\r\n@Component({\r\n selector: 'sg-grid-column-cell',\r\n template: '',\r\n standalone: false,\r\n})\r\nexport class ColumnCellComponent<TValue, TRow = any> {\r\n @Input()\r\n public get column(): Column {\r\n return Assert.defined(this._column);\r\n }\r\n public set column(value: Column) {\r\n this._column = value;\r\n\r\n if (this._componentReference) {\r\n this._componentReference.destroy();\r\n }\r\n\r\n const factory: ComponentFactory<CellComponent<TValue, TRow>> = this._factoryResolver.resolveComponentFactory(\r\n this._column.cellType\r\n );\r\n\r\n this._componentReference = this._viewContainerReference.createComponent(factory);\r\n this._updateComponentValue();\r\n }\r\n @Input()\r\n public get row(): TRow {\r\n return Assert.defined(this._row);\r\n }\r\n\r\n public set row(value: TRow) {\r\n this._row = value;\r\n this._updateComponentValue();\r\n }\r\n\r\n private _componentReference: ComponentRef<CellComponent<TValue, TRow>> | null = null;\r\n private _column: Column | null = null;\r\n private _row: TRow | null = null;\r\n\r\n public constructor(\r\n private readonly _viewContainerReference: ViewContainerRef,\r\n private readonly _factoryResolver: ComponentFactoryResolver\r\n ) {}\r\n\r\n private _updateComponentValue(): void {\r\n if (this._componentReference && this._row) {\r\n const component: CellComponent<TValue, TRow> = this._componentReference.instance;\r\n component.column = this.column;\r\n component.row = this.row;\r\n }\r\n }\r\n}\r\n","import {Component, Input, OnDestroy} from '@angular/core';\r\nimport {AbstractControl, FormGroup} from '@angular/forms';\r\nimport {AtLeastOneSelectedFormGuard} from '@marcura/marcura-common';\r\nimport {Column} from '../../model/column';\r\n\r\n@Component({\r\n selector: 'sg-columns-form',\r\n templateUrl: 'columns-form.component.html',\r\n standalone: false,\r\n})\r\nexport class ColumnsFormComponent implements OnDestroy {\r\n private static readonly MAX_ROWS: number = 5;\r\n\r\n private _atLeastOneSelectedFormGuard: AtLeastOneSelectedFormGuard | null = null;\r\n\r\n private _list: Column[] = [];\r\n @Input()\r\n public get list(): Column[] {\r\n return this._list;\r\n }\r\n public set list(value: Column[]) {\r\n this._list = value || [];\r\n this._list = this._list.filter((column) => {\r\n return column.isVisibilityFormControlVisible;\r\n });\r\n this.updateFormGroup();\r\n this.updateColumns();\r\n\r\n if (this._atLeastOneSelectedFormGuard) {\r\n this._atLeastOneSelectedFormGuard.destroy();\r\n }\r\n\r\n const controls: AbstractControl[] = this._list.map((column) => column.isVisibleControl);\r\n this._atLeastOneSelectedFormGuard = new AtLeastOneSelectedFormGuard(controls);\r\n }\r\n\r\n public columns: Column[][] = [];\r\n\r\n @Input()\r\n public prefix: string = '';\r\n\r\n public form!: FormGroup;\r\n\r\n private updateFormGroup(): void {\r\n const controls: {[field: string]: AbstractControl} = {};\r\n\r\n this.list.forEach((column) => (controls[column.field] = column.isVisibleControl));\r\n this.form = new FormGroup(controls);\r\n }\r\n\r\n private updateColumns(): void {\r\n const columnsCount: number = Math.ceil(this.list.length / ColumnsFormComponent.MAX_ROWS);\r\n this.columns = [];\r\n for (let i: number = 0; i < columnsCount; i++) {\r\n const items: Column[] = this.list.slice(\r\n i * ColumnsFormComponent.MAX_ROWS,\r\n (i + 1) * ColumnsFormComponent.MAX_ROWS\r\n );\r\n this.columns.push(items);\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n if (this._atLeastOneSelectedFormGuard) {\r\n this._atLeastOneSelectedFormGuard.destroy();\r\n this._atLeastOneSelectedFormGuard = null;\r\n }\r\n }\r\n}\r\n","<form class=\"u-padding--s\" [formGroup]=\"form\">\r\n <div class=\"o-layout\">\r\n <div\r\n *ngFor=\"let column of columns; let lastColumn = last\"\r\n class=\"o-layout__item o-layout__item--12 o-layout__item--dynamic---m u-margin-bottom--m-none\"\r\n [ngClass]=\"{'u-margin-bottom--m': !lastColumn}\"\r\n >\r\n <div class=\"o-layout o-layout--list\">\r\n <div\r\n *ngFor=\"let item of column; let last = last\"\r\n class=\"o-layout__item o-layout__item--12\"\r\n [ngClass]=\"{'u-margin-bottom--m': !last}\"\r\n >\r\n <sg-field>\r\n <sg-checkbox class=\"u-padding-right--xs\" sgFieldContent [formControl]=\"item.isVisibleControl\">{{\r\n item.title\r\n }}</sg-checkbox>\r\n </sg-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</form>\r\n","export enum CellVerticalAlignment {\r\n Top = 'top',\r\n Center = 'center',\r\n Bottom = 'bottom',\r\n}\r\n","import {RowArgs, SelectionEvent} from '@progress/kendo-angular-grid';\r\nimport {BehaviorSubject} from 'rxjs';\r\n\r\nexport class Selection<TItem> {\r\n private _items: BehaviorSubject<TItem[]> = new BehaviorSubject<TItem[]>([]);\r\n public get items(): BehaviorSubject<TItem[]> {\r\n return this._items;\r\n }\r\n\r\n public keys: TItem[] = [];\r\n\r\n public readonly selectBy = (context: RowArgs): TItem => {\r\n return context.dataItem;\r\n };\r\n\r\n public readonly onChange = (event: SelectionEvent): void => {\r\n this.keys = event.selectedRows?.map((row) => row.dataItem) ?? [];\r\n\r\n requestAnimationFrame(() => {\r\n this._items.next(this.keys);\r\n });\r\n };\r\n\r\n public readonly reset = (): void => {\r\n this.keys = [];\r\n this.onChange({} as SelectionEvent);\r\n };\r\n}\r\n","import {ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\r\nimport {Observer} from '@marcura/marcura-common';\r\nimport {skip} from 'rxjs/operators';\r\nimport {CellVerticalAlignment} from '../../model/cell-vertical-alignment.enum';\r\nimport {Grid} from '../../model/grid';\r\nimport {Selection} from '../../model/selection';\r\n\r\n@Component({template: '',\r\n standalone: false,})\r\nexport class GridComponent<TGrid extends Grid<TRow>, TRow> implements OnDestroy {\r\n protected _observer: Observer = new Observer();\r\n\r\n @Input()\r\n public cellVerticalAlignment: CellVerticalAlignment = CellVerticalAlignment.Top;\r\n\r\n @Input()\r\n public grid!: TGrid;\r\n\r\n @Input()\r\n public resizable: boolean = false;\r\n\r\n @Output()\r\n public rowClicked: EventEmitter<TRow> = new EventEmitter<TRow>();\r\n\r\n private readonly _rowClickSelection: Selection<TRow> = new Selection<TRow>();\r\n private _selection: Selection<TRow> = this._rowClickSelection;\r\n @Input()\r\n public get selection(): Selection<TRow> {\r\n return this._selection;\r\n }\r\n public set selection(value: Selection<TRow>) {\r\n this._selection = value || this._rowClickSelection;\r\n }\r\n\r\n public constructor(private readonly _changeDetectorRef: ChangeDetectorRef) {\r\n this._observer.listen(this._rowClickSelection.items.pipe(skip(1)), this._onRowClickSelectionChange);\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._observer.destroy();\r\n }\r\n\r\n private readonly _onRowClickSelectionChange = (selection: TRow[]): void => {\r\n if (selection.length > 0) {\r\n this.rowClicked.emit(selection[0]);\r\n this.selection.reset();\r\n this._changeDetectorRef.detectChanges();\r\n }\r\n };\r\n}\r\n","import {Component, EventEmitter, HostBinding, Input, Output} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sg-load-more',\r\n templateUrl: 'load-more.component.html',\r\n standalone: false,\r\n})\r\nexport class LoadMoreComponent {\r\n @HostBinding('class.sg-load-more')\r\n public readonly hasCssClass: boolean = true;\r\n @Input()\r\n public isDisabled: boolean = false;\r\n @Output()\r\n public readonly clicked: EventEmitter<void> = new EventEmitter();\r\n\r\n public onClicked(): void {\r\n if (!this.isDisabled) {\r\n this.clicked.emit();\r\n }\r\n }\r\n}\r\n","<button kendoButton [look]=\"'flat'\" [disabled]=\"isDisabled\" (click)=\"onClicked()\">\r\n <span #content><ng-content></ng-content></span>\r\n <ng-container *ngIf=\"!content.innerHTML.trim()\">Load More</ng-container>\r\n</button>\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input} from '@angular/core';\r\nimport {RowClassFn} from '@progress/kendo-angular-grid';\r\nimport {GridComponent} from '../../components/grid/grid.component';\r\nimport {ContinuousGrid} from '../../model/continuous-grid';\r\n\r\n@Component({\r\n selector: 'sg-continuous-grid',\r\n templateUrl: 'continuous-grid.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false,\r\n})\r\nexport class ContinuousGridComponent<TRow> extends GridComponent<ContinuousGrid<TRow>, TRow> {\r\n // Hack: after upgrade to kendo-angular-grid 5.5.X, they expect [field] to always target existing property in schema,\r\n // while we have some cases of columns for row, not any specific property\r\n public readonly FIELD_INPUT_FALLBACK: string = '_';\r\n\r\n @HostBinding('class.sg-continuous-grid')\r\n public readonly hasCssClass: boolean = true;\r\n @Input()\r\n public secondary: boolean = false;\r\n\r\n @Input()\r\n public loadMoreLabel: string = '';\r\n\r\n @Input()\r\n public rowClassFactory: RowClassFn = () => '';\r\n\r\n constructor(changeDetectorRef: ChangeDetectorRef) {\r\n super(changeDetectorRef);\r\n }\r\n}\r\n","<div class=\"sg-grid\">\r\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\r\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\r\n </div>\r\n <kendo-grid\r\n [class]=\"'k-grid--only-horizontal-scroll k-grid--cell-alignment-' + cellVerticalAlignment\"\r\n [data]=\"grid.observable.rows | async\"\r\n [sortable]=\"{\r\n allowUnsort: true,\r\n mode: 'single',\r\n }\"\r\n [resizable]=\"resizable\"\r\n [navigable]=\"true\"\r\n [selectable]=\"true\"\r\n [selectedKeys]=\"selection.keys\"\r\n [kendoGridSelectBy]=\"selection.selectBy\"\r\n [rowClass]=\"rowClassFactory\"\r\n (selectionChange)=\"selection.onChange($event)\"\r\n [sort]=\"grid.observable.sortDescriptor | async\"\r\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\r\n (columnResize)=\"grid.onColumnResized($event)\"\r\n [class.k-grid--secondary]=\"secondary\"\r\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\r\n >\r\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <ul>\r\n <li *ngFor=\"let column of grid.columns\">\r\n <div [hidden]=\"column.isHidden | async\">\r\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n <kendo-grid-column\r\n *ngFor=\"let column of grid.columns\"\r\n media=\"(min-width: 49rem)\"\r\n [title]=\"column.title\"\r\n [field]=\"column.field || FIELD_INPUT_FALLBACK\"\r\n [width]=\"column.width | async\"\r\n [locked]=\"column.isLocked | async\"\r\n [hidden]=\"column.isHidden | async\"\r\n [sortable]=\"column.isSortable | async\"\r\n [minResizableWidth]=\"column.minWidth | async\"\r\n >\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </ng-template>\r\n </kendo-grid-column>\r\n </kendo-grid>\r\n</div>\r\n<sg-load-more\r\n *ngIf=\"grid.hasMoreRows | async\"\r\n (clicked)=\"grid.loadMore()\"\r\n [isDisabled]=\"grid.observable.isLoading | async\"\r\n>\r\n {{ loadMoreLabel }}\r\n</sg-load-more>\r\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from '@angular/core';\r\nimport {GridComponent} from '../../components/grid/grid.component';\r\nimport {PaginatedGrid} from '../../model/paginated-grid';\r\n\r\n@Component({\r\n selector: 'sg-paginated-grid',\r\n templateUrl: 'paginated-grid.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: false,\r\n})\r\nexport class PaginatedGridComponent<TRow> extends GridComponent<PaginatedGrid<TRow>, TRow> {\r\n // Hack: after upgrade to kendo-angular-grid 5.5.X, they expect [field] to always target existing property in schema,\r\n // while we have some cases of columns for row, not any specific property\r\n public readonly FIELD_INPUT_FALLBACK: string = '_';\r\n\r\n @Input()\r\n public secondary: boolean = false;\r\n\r\n constructor(changeDetectorRef: ChangeDetectorRef) {\r\n super(changeDetectorRef);\r\n }\r\n}\r\n","<div class=\"sg-grid\">\r\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\r\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\r\n </div>\r\n <kendo-grid\r\n [data]=\"grid.dataResult | async\"\r\n [sortable]=\"{\r\n allowUnsort: true,\r\n mode: 'single',\r\n }\"\r\n [resizable]=\"resizable\"\r\n [skip]=\"grid.observable.skip | async\"\r\n [pageSize]=\"grid.observable.pageSize | async\"\r\n [pageable]=\"grid.pageable\"\r\n [scrollable]=\"'scrollable'\"\r\n [navigable]=\"true\"\r\n (pageChange)=\"grid.pageChange($event)\"\r\n [selectable]=\"true\"\r\n [selectedKeys]=\"selection.keys\"\r\n [kendoGridSelectBy]=\"selection.selectBy\"\r\n (selectionChange)=\"selection.onChange($event)\"\r\n [sort]=\"grid.observable.sortDescriptor | async\"\r\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\r\n (columnResize)=\"grid.onColumnResized($event)\"\r\n [class.k-grid--secondary]=\"secondary\"\r\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\r\n >\r\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <ul>\r\n <li *ngFor=\"let column of grid.columns\">\r\n <div [hidden]=\"column.isHidden | async\">\r\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </div>\r\n </li>\r\n </ul>\r\n </ng-template>\r\n </kendo-grid-column>\r\n\r\n <kendo-grid-column\r\n *ngFor=\"let column of grid.columns\"\r\n media=\"(min-width: 49rem)\"\r\n [title]=\"column.title\"\r\n [field]=\"column.field\"\r\n [width]=\"column.width | async\"\r\n [locked]=\"column.isLocked | async\"\r\n [hidden]=\"column.isHidden | async\"\r\n [sortable]=\"column.isSortable | async\"\r\n [minResizableWidth]=\"column.minWidth | async\"\r\n >\r\n <ng-template kendoGridCellTemplate let-dataItem>\r\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\r\n </ng-template>\r\n </kendo-grid-column>\r\n </kendo-grid>\r\n</div>\r\n","import {CommonModule} from '@angular/common';\r\nimport {NgModule} from '@angular/core';\r\nimport {ReactiveFormsModule} from '@angular/forms';\r\nimport {CheckboxModule} from '@marcura/marcura-checkbox';\r\nimport {FieldModule} from '@marcura/marcura-field';\r\nimport {ButtonModule} from '@progress/kendo-angular-buttons';\r\nimport {GridModule as KendoGridModule} from '@progress/kendo-angular-grid';\r\nimport {CellComponent} from './components/cell/cell.component';\r\nimport {ColumnCellComponent} from './components/column-cell/column-cell.component';\r\nimport {ColumnsFormComponent} from './components/columns-form/columns-form.component';\r\nimport {ContinuousGridComponent} from './components/continuous-grid/continuous-grid.component';\r\nimport {GridComponent} from './components/grid/grid.component';\r\nimport {LoadMoreComponent} from './components/load-more/load-more.component';\r\nimport {PaginatedGridComponent} from './components/paginated-grid/paginated-grid.component';\r\n\r\nconst components: any[] = [\r\n LoadMoreComponent,\r\n GridComponent,\r\n ContinuousGridComponent,\r\n PaginatedGridComponent,\r\n ColumnCellComponent,\r\n ColumnsFormComponent,\r\n];\r\n\r\nconst cells: any[] = [CellComponent];\r\n\r\nconst pages: any[] = [];\r\n\r\nconst pipes: any[] = [];\r\n\r\n@NgModule({\r\n declarations: [...components, ...pages, ...pipes, ...cells],\r\n imports: [CommonModule, KendoGridModule, ReactiveFormsModule, CheckboxModule, FieldModule, ButtonModule],\r\n exports: [...components, ...pages, ...pipes],\r\n providers: [],\r\n})\r\nexport class GridModule {}\r\n","import {ObservableGroup, Worker} from '@marcura/marcura-common';\r\nimport {ColumnComponent, ColumnResizeArgs} from '@progress/kendo-angular-grid';\r\nimport {SortDescriptor} from '@progress/kendo-data-query';\r\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\r\nimport {Column} from './column';\r\n\r\nexport interface IGridProperties<TRow> {\r\n isLoading: boolean;\r\n rows: TRow[];\r\n skip: number;\r\n pageSize: number;\r\n sortDescriptor: SortDescriptor[];\r\n}\r\n\r\nexport class Grid<TRow> {\r\n protected readonly _worker: Worker = new Worker();\r\n\r\n private readonly _rows: BehaviorSubject<TRow[]> = new BehaviorSubject<TRow[]>([]);\r\n public get rows(): TRow[] {\r\n return this._rows.value;\r\n }\r\n public set rows(value: TRow[]) {\r\n this._rows.next(value);\r\n }\r\n\r\n private readonly _skip: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n public get skip(): number {\r\n return this._skip.value;\r\n }\r\n public set skip(value: number) {\r\n if (!isNaN(value) && this.skip !== value) {\r\n this._skip.next(value);\r\n }\r\n }\r\n\r\n private readonly _pageSize: BehaviorSubject<number> = new BehaviorSubject<number>(25);\r\n public get pageSize(): number {\r\n return this._pageSize.value;\r\n }\r\n public set pageSize(value: number) {\r\n if (!isNaN(value) && this.pageSize !== value) {\r\n this._pageSize.next(value);\r\n }\r\n }\r\n\r\n protected readonly _sortDescriptor: BehaviorSubject<SortDescriptor[]> = new BehaviorSubject<SortDescriptor[]>([]);\r\n public get sortDescriptor(): SortDescriptor[] {\r\n return this._sortDescriptor.value;\r\n }\r\n public set sortDescriptor(value: SortDescriptor[]) {\r\n this._sortDescriptor.next(value);\r\n }\r\n\r\n public readonly observable: ObservableGroup<IGridProperties<TRow>> = {\r\n isLoading: this._worker.isWorking,\r\n rows: this._rows,\r\n sortDescriptor: this._sortDescriptor,\r\n skip: this._skip,\r\n pageSize: this._pageSize,\r\n };\r\n\r\n private readonly _loadingFailed: Subject<any> = new Subject<any>();\r\n public readonly loadingFailed: Observable<any> = this._loadingFailed;\r\n\r\n constructor(public readonly name: string, public readonly columns: Column[]) {\r\n const sortColumn: Column | undefined = columns.find((column) => column.isDefaultSortColumn);\r\n this.sortDescriptor =\r\n sortColumn !== undefined\r\n ? [\r\n {\r\n field: sortColumn.field,\r\n dir: sortColumn.defaultSortDirection,\r\n },\r\n ]\r\n : [];\r\n }\r\n\r\n public readonly reload = (): void => {};\r\n\r\n public readonly replace = (item: TRow, newItem: TRow): void => {\r\n const rows: TRow[] = this.rows.concat();\r\n const index: number = rows.indexOf(item);\r\n if (index > -1) {\r\n rows[index] = newItem;\r\n this._rows.next(rows);\r\n }\r\n };\r\n\r\n public readonly onColumnResized = (changes: ColumnResizeArgs[]): void => {\r\n changes\r\n .map((change) => ({column: change.column as ColumnComponent, newWidth: change.newWidth}))\r\n .forEach((change) => {\r\n const column: Column | undefined = this.columns.find((c) => c.field === change.column.field);\r\n if (column) {\r\n column.width.next(change.newWidth ?? 0);\r\n }\r\n });\r\n };\r\n\r\n public readonly onSortDescriptorChanged = (sortDescriptor: SortDescriptor[]): void => {\r\n this.sortDescriptor = sortDescriptor;\r\n this.reload();\r\n };\r\n\r\n public readonly onLoadError = (error: any): void => {\r\n this._loadingFailed.next(error);\r\n };\r\n}\r\n","import {SortDescriptor} from '@progress/kendo-data-query';\r\nimport {BehaviorSubject, Observable} from 'rxjs';\r\nimport {Column} from '../model/column';\r\nimport {Grid} from './grid';\r\n\r\nexport interface IContinuousGridDataResult<TRow> {\r\n rows: TRow[];\r\n isLastPage: boolean;\r\n}\r\n\r\nexport type ContinuousGridDataResultProvider<TRow> = (\r\n skip: number,\r\n size: number,\r\n sortDescriptor: SortDescriptor[]\r\n) => Observable<IContinuousGridDataResult<TRow>>;\r\n\r\nexport class ContinuousGrid<TRow> extends Grid<TRow> {\r\n private readonly _hasMoreRows: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\r\n public readonly hasMoreRows: Observable<boolean> = this._hasMoreRows;\r\n\r\n constructor(name: string, columns: Column[], private readonly _loadPage: ContinuousGridDataResultProvider<TRow>) {\r\n super(name, columns);\r\n }\r\n\r\n public preload(pagesCount: number): void {\r\n this.rows = [];\r\n this.skip = 0;\r\n this.skip = pagesCount > 0 ? (pagesCount - 1) * this.pageSize : 0;\r\n if (pagesCount > 0) {\r\n this._worker.handle(\r\n this._loadPage(0, pagesCount * this.pageSize, this._sortDescriptor.value),\r\n this.onLoadSuccess,\r\n this.onLoadError\r\n );\r\n }\r\n }\r\n\r\n public override readonly reload = (): void => {\r\n this.skip = 0;\r\n this._worker.handle(\r\n this._loadPage(this.skip, this.pageSize, this.sortDescriptor),\r\n this.onLoadSuccess,\r\n this.onLoadError\r\n );\r\n };\r\n\r\n public readonly loadMore = (): void => {\r\n this.skip += this.pageSize;\r\n this._worker.handle(\r\n this._loadPage(this.skip, this.pageSize, this.sortDescriptor),\r\n this.onLoadMoreSuccess,\r\n this.onLoadError\r\n );\r\n };\r\n\r\n private onLoadSuccess = (dataResult: IContinuousGridDataResult<TRow>): void => {\r\n this.rows = dataResult.rows;\r\n this._hasMoreRows.next(!dataResult.isLastPage);\r\n };\r\n\r\n private onLoadMoreSuccess = (dataResult: IContinuousGridDataResult<TRow>): void => {\r\n this.rows = [...this.rows, ...dataResult.rows];\r\n this._hasMoreRows.next(!dataResult.isLastPage);\r\n };\r\n}\r\n","import {Is} from '@marcura/marcura-common';\r\nimport {GridDataResult, PagerSettings, PageChangeEvent} from '@progress/kendo-angular-grid';\r\nimport {SortDescriptor} from '@progress/kendo-data-query';\r\nimport {combineLatest, BehaviorSubject, Observable} from 'rxjs';\r\nimport {map} from 'rxjs/operators';\r\nimport {Column} from './column';\r\nimport {Grid} from './grid';\r\n\r\nexport interface IPaginatedGridDataResult<TRow> {\r\n rows: TRow[];\r\n total: number;\r\n}\r\n\r\nexport type PaginatedGridDataResultProvider<TRow> = (\r\n skip: number,\r\n size: number,\r\n sortDescriptor: SortDescriptor[]\r\n) => Observable<IPaginatedGridDataResult<TRow>>;\r\n\r\nexport class PaginatedGrid<TRow> extends Grid<TRow> {\r\n public readonly pageable: PagerSettings = {\r\n buttonCount: 5,\r\n info: true,\r\n type: 'numeric',\r\n pageSizes: [100, 250, 500],\r\n previousNext: true,\r\n };\r\n\r\n private readonly _total: BehaviorSubject<number> = new BehaviorSubject<number>(0);\r\n public readonly dataResult: Observable<GridDataResult> = combineLatest([this.observable.rows, this._total]).pipe(\r\n map(([rows, total]: [TRow[], number]) => ({data: rows, total}))\r\n );\r\n\r\n constructor(name: string, columns: Column[], private readonly _loadPage: PaginatedGridDataResultProvider<TRow>) {\r\n super(name, columns);\r\n this.pageSize = Is.array(this.pageable.pageSizes) ? this.pageable.pageSizes[0] ?? 0 : 0;\r\n }\r\n\r\n public pageChange(event: PageChangeEvent): void {\r\n this.skip = event.skip;\r\n this.pageSize = event.take;\r\n this.reload();\r\n }\r\n\r\n public override reload = (): void => {\r\n this._worker.handle(\r\n this._loadPage(this.skip, this.pageSize, this._sortDescriptor.value),\r\n this.onLoadSuccess,\r\n this.onLoadError\r\n );\r\n };\r\n\r\n private readonly onLoadSuccess = (result: IPaginatedGridDataResult<TRow>): void => {\r\n this.rows = result.rows;\r\n this._total.next(result.total);\r\n };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3.LoadMoreComponent","i4.ColumnCellComponent","i3.ColumnCellComponent","KendoGridModule"],"mappings":"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"}
1
+ {"version":3,"file":"marcura-marcura-grid.mjs","sources":["../../src/lib/model/sort-direction.enum.ts","../../src/lib/model/column.ts","../../src/lib/components/cell/cell.component.ts","../../src/lib/components/cell/cell.component.html","../../src/lib/components/column-cell/column-cell.component.ts","../../src/lib/components/columns-form/columns-form.component.ts","../../src/lib/components/columns-form/columns-form.component.html","../../src/lib/model/cell-vertical-alignment.enum.ts","../../src/lib/model/selection.ts","../../src/lib/components/grid/grid.component.ts","../../src/lib/components/load-more/load-more.component.ts","../../src/lib/components/load-more/load-more.component.html","../../src/lib/components/continuous-grid/continuous-grid.component.ts","../../src/lib/components/continuous-grid/continuous-grid.component.html","../../src/lib/components/paginated-grid/paginated-grid.component.ts","../../src/lib/components/paginated-grid/paginated-grid.component.html","../../src/lib/grid.module.ts","../../src/lib/model/grid.ts","../../src/lib/model/continuous-grid.ts","../../src/lib/model/paginated-grid.ts","../../src/marcura-marcura-grid.ts"],"sourcesContent":["export enum SortDirection {\n Asc = 'asc',\n Desc = 'desc',\n}\n","import {FormControl} from '@angular/forms';\nimport {getValue} from '@marcura/marcura-common';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {SortDirection} from '../model/sort-direction.enum';\n\nexport class Column<TValue = any> {\n public readonly action: Subject<any> = new Subject();\n\n private readonly _isLocked: BehaviorSubject<boolean>;\n public get isLocked(): Observable<boolean> {\n return this._isLocked;\n }\n\n private readonly _isSortable: BehaviorSubject<boolean>;\n public get isSortable(): Observable<boolean> {\n return this._isSortable;\n }\n\n private readonly _isHidden: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n public get isHidden(): Observable<boolean> {\n return this._isHidden;\n }\n\n public readonly width: BehaviorSubject<number>;\n public readonly minWidth: Observable<number>;\n public readonly isVisibleControl: FormControl<boolean> = new FormControl<boolean>(true, {nonNullable: true});\n public isDefaultSortColumn: boolean = false;\n public defaultSortDirection: SortDirection = SortDirection.Asc;\n public title: string = '';\n public field: string = '';\n public isVisibilityFormControlVisible: boolean = true;\n\n public constructor(width: number, public readonly cellType: any, minWidth: number = 50) {\n this.width = new BehaviorSubject<number>(Math.max(width, minWidth));\n this.minWidth = new BehaviorSubject<number>(minWidth);\n this._isLocked = new BehaviorSubject<boolean>(false);\n this._isSortable = new BehaviorSubject<boolean>(false);\n this.isVisibleControl.valueChanges.subscribe((isVisible) => this._isHidden.next(!isVisible));\n }\n\n public forField(field: string): Column<TValue> {\n this.field = field;\n return this;\n }\n\n public withTitle(title: string): Column<TValue> {\n this.title = title;\n return this;\n }\n\n public locked(): Column<TValue> {\n this._isLocked.next(true);\n return this;\n }\n\n public sortable(): Column<TValue> {\n this._isSortable.next(true);\n return this;\n }\n\n public hidden(): Column<TValue> {\n this.isVisibleControl.setValue(false);\n return this;\n }\n\n public defaultSortColumn(direction: SortDirection = SortDirection.Asc): Column<TValue> {\n this.isDefaultSortColumn = true;\n this.defaultSortDirection = direction;\n return this;\n }\n\n public hiddenVisibilityFormControl(): Column<TValue> {\n this.isVisibilityFormControlVisible = false;\n return this;\n }\n\n public getValue(data: any): TValue | null {\n return this.field ? getValue(data, this.field) : null;\n }\n}\n","import {Component, Input} from '@angular/core';\nimport {Column} from '../../model/column';\n\n@Component({\n selector: 'sg-grid-cell',\n templateUrl: 'cell.component.html',\n standalone: false,\n})\nexport class CellComponent<TValue, TRow = any> {\n @Input()\n public row!: TRow;\n\n @Input()\n public column!: Column;\n\n public get value(): TValue | null {\n return this.row && this.column && this.column.getValue(this.row);\n }\n}\n","<span class=\"c-body c-body--1 u-font-weight--inherit\">{{ value }}</span>\n","import {\n Component,\n ComponentFactory,\n ComponentFactoryResolver,\n ComponentRef,\n Input,\n ViewContainerRef,\n} from '@angular/core';\nimport {Assert} from '@marcura/marcura-common';\nimport {CellComponent} from '../../components/cell/cell.component';\nimport {Column} from '../../model/column';\n\n@Component({\n selector: 'sg-grid-column-cell',\n template: '',\n standalone: false,\n})\nexport class ColumnCellComponent<TValue, TRow = any> {\n @Input()\n public get column(): Column {\n return Assert.defined(this._column);\n }\n public set column(value: Column) {\n this._column = value;\n\n if (this._componentReference) {\n this._componentReference.destroy();\n }\n\n const factory: ComponentFactory<CellComponent<TValue, TRow>> = this._factoryResolver.resolveComponentFactory(\n this._column.cellType\n );\n\n this._componentReference = this._viewContainerReference.createComponent(factory);\n this._updateComponentValue();\n }\n @Input()\n public get row(): TRow {\n return Assert.defined(this._row);\n }\n\n public set row(value: TRow) {\n this._row = value;\n this._updateComponentValue();\n }\n\n private _componentReference: ComponentRef<CellComponent<TValue, TRow>> | null = null;\n private _column: Column | null = null;\n private _row: TRow | null = null;\n\n public constructor(\n private readonly _viewContainerReference: ViewContainerRef,\n private readonly _factoryResolver: ComponentFactoryResolver\n ) {}\n\n private _updateComponentValue(): void {\n if (this._componentReference && this._row) {\n const component: CellComponent<TValue, TRow> = this._componentReference.instance;\n component.column = this.column;\n component.row = this.row;\n }\n }\n}\n","import {Component, input, effect, computed, OnDestroy, ChangeDetectionStrategy} from '@angular/core';\nimport {AbstractControl, FormGroup} from '@angular/forms';\nimport {AtLeastOneSelectedFormGuard} from '@marcura/marcura-common';\nimport {Subject, takeUntil} from 'rxjs';\nimport {Column} from '../../model/column';\n\n@Component({\n selector: 'sg-columns-form',\n templateUrl: 'columns-form.component.html',\n standalone: false,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ColumnsFormComponent implements OnDestroy {\n private static readonly MAX_ROWS: number = 5;\n\n private _atLeastOneSelectedFormGuard: AtLeastOneSelectedFormGuard | null = null;\n private _destroy$ = new Subject<void>();\n\n // Signal inputs\n public list = input.required<Column[]>();\n public prefix = input<string>('');\n public columnsLimit = input<number | undefined>(undefined);\n public columnsLimitText = input<string | undefined>(undefined);\n\n // Computed signals\n private processedList = computed(() => {\n const listValue = this.list();\n return (listValue || []).filter((column) => {\n return column.isVisibilityFormControlVisible;\n });\n });\n\n public columns = computed(() => {\n const list = this.processedList();\n const columnsCount = Math.ceil(list.length / ColumnsFormComponent.MAX_ROWS);\n const columns: Column[][] = [];\n for (let i = 0; i < columnsCount; i++) {\n const items = list.slice(i * ColumnsFormComponent.MAX_ROWS, (i + 1) * ColumnsFormComponent.MAX_ROWS);\n columns.push(items);\n }\n return columns;\n });\n\n public showColumnsLimitMessage = computed(() => {\n const limit = this.columnsLimit();\n const text = this.columnsLimitText();\n return limit !== undefined && limit > 0 && text !== undefined;\n });\n\n // Template-bound state\n public form!: FormGroup;\n\n constructor() {\n // Effect to handle list and columnsLimit changes\n effect(() => {\n const list = this.processedList();\n const limitValue = this.columnsLimit();\n\n this.updateFormGroup(list);\n\n if (this._atLeastOneSelectedFormGuard) {\n this._atLeastOneSelectedFormGuard.destroy();\n }\n\n const controls: AbstractControl[] = list.map((column) => column.isVisibleControl);\n this._atLeastOneSelectedFormGuard = new AtLeastOneSelectedFormGuard(controls);\n\n // Setup subscriptions when both list and limit are ready\n this.setupColumnLimitSubscription(list);\n });\n }\n\n private normalizeFieldName(field: string): string {\n return field.replace(/\\./g, '_');\n }\n\n private updateFormGroup(list: Column[]): void {\n const controls: {[field: string]: AbstractControl} = {};\n\n list.forEach((column) => {\n const field: string = this.normalizeFieldName(column.field);\n controls[field] = column.isVisibleControl;\n });\n this.form = new FormGroup(controls);\n }\n\n private getSelectedColumnsCount(list: Column[]): number {\n return list.filter((column) => column.isVisibleControl.value === true).length;\n }\n\n private updateColumnsDisabledState(list: Column[]): void {\n const limit = this.columnsLimit();\n if (!limit) {\n return;\n }\n\n const selectedCount = this.getSelectedColumnsCount(list);\n const limitReached = selectedCount >= limit;\n\n list.forEach((column) => {\n const isChecked = column.isVisibleControl.value === true;\n\n if (limitReached && !isChecked) {\n column.isVisibleControl.disable({emitEvent: false});\n } else if (!limitReached && column.isVisibleControl.disabled) {\n column.isVisibleControl.enable({emitEvent: false});\n }\n });\n }\n\n private setupColumnLimitSubscription(list: Column[]): void {\n // Clean up previous subscriptions before setting up new ones\n this._destroy$.next();\n\n const limit = this.columnsLimit();\n if (!limit) {\n return;\n }\n\n list.forEach((column) => {\n column.isVisibleControl.valueChanges.pipe(takeUntil(this._destroy$)).subscribe(() => {\n this.updateColumnsDisabledState(list);\n });\n });\n\n // Initial state update\n this.updateColumnsDisabledState(list);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next();\n this._destroy$.complete();\n\n if (this._atLeastOneSelectedFormGuard) {\n this._atLeastOneSelectedFormGuard.destroy();\n this._atLeastOneSelectedFormGuard = null;\n }\n }\n}\n","<form class=\"u-padding--s\" [formGroup]=\"form\">\n <div class=\"o-layout\">\n <div\n *ngFor=\"let column of columns(); let lastColumn = last\"\n class=\"o-layout__item o-layout__item--12 o-layout__item--dynamic---m u-margin-bottom--m-none\"\n [ngClass]=\"{'u-margin-bottom--m': !lastColumn}\">\n <div class=\"o-layout o-layout--list\">\n <div\n *ngFor=\"let item of column; let last = last\"\n class=\"o-layout__item o-layout__item--12\"\n [ngClass]=\"{'u-margin-bottom--m': !last}\">\n <sg-field>\n <sg-checkbox class=\"u-padding-right--xs\" sgFieldContent [formControl]=\"item.isVisibleControl\">{{\n item.title\n }}</sg-checkbox>\n </sg-field>\n </div>\n </div>\n </div>\n </div>\n @if (showColumnsLimitMessage()) {\n <div class=\"u-margin-top--m\">\n <p>{{ columnsLimitText() }}</p>\n </div>\n }\n</form>\n","export enum CellVerticalAlignment {\n Top = 'top',\n Center = 'center',\n Bottom = 'bottom',\n}\n","import {RowArgs, SelectionEvent} from '@progress/kendo-angular-grid';\nimport {BehaviorSubject} from 'rxjs';\n\nexport class Selection<TItem> {\n private _items: BehaviorSubject<TItem[]> = new BehaviorSubject<TItem[]>([]);\n public get items(): BehaviorSubject<TItem[]> {\n return this._items;\n }\n\n public keys: TItem[] = [];\n\n public readonly selectBy = (context: RowArgs): TItem => {\n return context.dataItem;\n };\n\n public readonly onChange = (event: SelectionEvent): void => {\n this.keys = event.selectedRows?.map((row) => row.dataItem) ?? [];\n\n requestAnimationFrame(() => {\n this._items.next(this.keys);\n });\n };\n\n public readonly reset = (): void => {\n this.keys = [];\n this.onChange({} as SelectionEvent);\n };\n}\n","import {ChangeDetectorRef, Component, EventEmitter, Input, OnDestroy, Output} from '@angular/core';\nimport {Observer} from '@marcura/marcura-common';\nimport {skip} from 'rxjs/operators';\nimport {CellVerticalAlignment} from '../../model/cell-vertical-alignment.enum';\nimport {Grid} from '../../model/grid';\nimport {Selection} from '../../model/selection';\n\n@Component({template: '',\n standalone: false,})\nexport class GridComponent<TGrid extends Grid<TRow>, TRow> implements OnDestroy {\n protected _observer: Observer = new Observer();\n\n @Input()\n public cellVerticalAlignment: CellVerticalAlignment = CellVerticalAlignment.Top;\n\n @Input()\n public grid!: TGrid;\n\n @Input()\n public resizable: boolean = false;\n\n @Output()\n public rowClicked: EventEmitter<TRow> = new EventEmitter<TRow>();\n\n private readonly _rowClickSelection: Selection<TRow> = new Selection<TRow>();\n private _selection: Selection<TRow> = this._rowClickSelection;\n @Input()\n public get selection(): Selection<TRow> {\n return this._selection;\n }\n public set selection(value: Selection<TRow>) {\n this._selection = value || this._rowClickSelection;\n }\n\n public constructor(private readonly _changeDetectorRef: ChangeDetectorRef) {\n this._observer.listen(this._rowClickSelection.items.pipe(skip(1)), this._onRowClickSelectionChange);\n }\n\n public ngOnDestroy(): void {\n this._observer.destroy();\n }\n\n private readonly _onRowClickSelectionChange = (selection: TRow[]): void => {\n if (selection.length > 0) {\n this.rowClicked.emit(selection[0]);\n this.selection.reset();\n this._changeDetectorRef.detectChanges();\n }\n };\n}\n","import {Component, EventEmitter, HostBinding, Input, Output} from '@angular/core';\n\n@Component({\n selector: 'sg-load-more',\n templateUrl: 'load-more.component.html',\n standalone: false,\n})\nexport class LoadMoreComponent {\n @HostBinding('class.sg-load-more')\n public readonly hasCssClass: boolean = true;\n @Input()\n public isDisabled: boolean = false;\n @Output()\n public readonly clicked: EventEmitter<void> = new EventEmitter();\n\n public onClicked(): void {\n if (!this.isDisabled) {\n this.clicked.emit();\n }\n }\n}\n","<button kendoButton [look]=\"'flat'\" [disabled]=\"isDisabled\" (click)=\"onClicked()\">\n <span #content><ng-content></ng-content></span>\n <ng-container *ngIf=\"!content.innerHTML.trim()\">Load More</ng-container>\n</button>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input} from '@angular/core';\nimport {RowClassFn} from '@progress/kendo-angular-grid';\nimport {GridComponent} from '../../components/grid/grid.component';\nimport {ContinuousGrid} from '../../model/continuous-grid';\n\n@Component({\n selector: 'sg-continuous-grid',\n templateUrl: 'continuous-grid.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class ContinuousGridComponent<TRow> extends GridComponent<ContinuousGrid<TRow>, TRow> {\n // Hack: after upgrade to kendo-angular-grid 5.5.X, they expect [field] to always target existing property in schema,\n // while we have some cases of columns for row, not any specific property\n public readonly FIELD_INPUT_FALLBACK: string = '_';\n\n @HostBinding('class.sg-continuous-grid')\n public readonly hasCssClass: boolean = true;\n @Input()\n public secondary: boolean = false;\n\n @Input()\n public loadMoreLabel: string = '';\n\n @Input()\n public rowClassFactory: RowClassFn = () => '';\n\n constructor(changeDetectorRef: ChangeDetectorRef) {\n super(changeDetectorRef);\n }\n}\n","<div class=\"sg-grid\">\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\n </div>\n <kendo-grid\n [class]=\"'k-grid--only-horizontal-scroll k-grid--cell-alignment-' + cellVerticalAlignment\"\n [data]=\"grid.observable.rows | async\"\n [sortable]=\"{\n allowUnsort: true,\n mode: 'single',\n }\"\n [resizable]=\"resizable\"\n [navigable]=\"true\"\n [selectable]=\"true\"\n [selectedKeys]=\"selection.keys\"\n [kendoGridSelectBy]=\"selection.selectBy\"\n [rowClass]=\"rowClassFactory\"\n (selectionChange)=\"selection.onChange($event)\"\n [sort]=\"grid.observable.sortDescriptor | async\"\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\n (columnResize)=\"grid.onColumnResized($event)\"\n [class.k-grid--secondary]=\"secondary\"\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\n >\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <ul>\n <li *ngFor=\"let column of grid.columns\">\n <div [hidden]=\"column.isHidden | async\">\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </div>\n </li>\n </ul>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n *ngFor=\"let column of grid.columns\"\n media=\"(min-width: 49rem)\"\n [title]=\"column.title\"\n [field]=\"column.field || FIELD_INPUT_FALLBACK\"\n [width]=\"column.width | async\"\n [locked]=\"column.isLocked | async\"\n [hidden]=\"column.isHidden | async\"\n [sortable]=\"column.isSortable | async\"\n [minResizableWidth]=\"column.minWidth | async\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n</div>\n<sg-load-more\n *ngIf=\"grid.hasMoreRows | async\"\n (clicked)=\"grid.loadMore()\"\n [isDisabled]=\"grid.observable.isLoading | async\"\n>\n {{ loadMoreLabel }}\n</sg-load-more>\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Input} from '@angular/core';\nimport {GridComponent} from '../../components/grid/grid.component';\nimport {PaginatedGrid} from '../../model/paginated-grid';\n\n@Component({\n selector: 'sg-paginated-grid',\n templateUrl: 'paginated-grid.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n})\nexport class PaginatedGridComponent<TRow> extends GridComponent<PaginatedGrid<TRow>, TRow> {\n // Hack: after upgrade to kendo-angular-grid 5.5.X, they expect [field] to always target existing property in schema,\n // while we have some cases of columns for row, not any specific property\n public readonly FIELD_INPUT_FALLBACK: string = '_';\n\n @Input()\n public secondary: boolean = false;\n\n constructor(changeDetectorRef: ChangeDetectorRef) {\n super(changeDetectorRef);\n }\n}\n","<div class=\"sg-grid\">\n <div class=\"sg-blocker sg-blocker--content\" [class.sg-blocker--active]=\"grid.observable.isLoading | async\">\n <div class=\"sg-blocker__sticky-container u-align--center\"><span class=\"fa fa-spinner fa-pulse\"></span></div>\n </div>\n <kendo-grid\n [data]=\"grid.dataResult | async\"\n [sortable]=\"{\n allowUnsort: true,\n mode: 'single',\n }\"\n [resizable]=\"resizable\"\n [skip]=\"grid.observable.skip | async\"\n [pageSize]=\"grid.observable.pageSize | async\"\n [pageable]=\"grid.pageable\"\n [scrollable]=\"'scrollable'\"\n [navigable]=\"true\"\n (pageChange)=\"grid.pageChange($event)\"\n [selectable]=\"true\"\n [selectedKeys]=\"selection.keys\"\n [kendoGridSelectBy]=\"selection.selectBy\"\n (selectionChange)=\"selection.onChange($event)\"\n [sort]=\"grid.observable.sortDescriptor | async\"\n (sortChange)=\"grid.onSortDescriptorChanged($event)\"\n (columnResize)=\"grid.onColumnResized($event)\"\n [class.k-grid--secondary]=\"secondary\"\n [class.k-grid--clickable]=\"rowClicked.observers.length > 0\"\n >\n <kendo-grid-column media=\"(max-width: 49rem)\" [field]=\"FIELD_INPUT_FALLBACK\">\n <ng-template kendoGridCellTemplate let-dataItem>\n <ul>\n <li *ngFor=\"let column of grid.columns\">\n <div [hidden]=\"column.isHidden | async\">\n <span class=\"u-color-text--secondary\">{{ column.title }} - </span>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </div>\n </li>\n </ul>\n </ng-template>\n </kendo-grid-column>\n\n <kendo-grid-column\n *ngFor=\"let column of grid.columns\"\n media=\"(min-width: 49rem)\"\n [title]=\"column.title\"\n [field]=\"column.field\"\n [width]=\"column.width | async\"\n [locked]=\"column.isLocked | async\"\n [hidden]=\"column.isHidden | async\"\n [sortable]=\"column.isSortable | async\"\n [minResizableWidth]=\"column.minWidth | async\"\n >\n <ng-template kendoGridCellTemplate let-dataItem>\n <sg-grid-column-cell [column]=\"column\" [row]=\"dataItem\"></sg-grid-column-cell>\n </ng-template>\n </kendo-grid-column>\n </kendo-grid>\n</div>\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {CheckboxModule} from '@marcura/marcura-checkbox';\nimport {FieldModule} from '@marcura/marcura-field';\nimport {ButtonModule} from '@progress/kendo-angular-buttons';\nimport {GridModule as KendoGridModule} from '@progress/kendo-angular-grid';\nimport {CellComponent} from './components/cell/cell.component';\nimport {ColumnCellComponent} from './components/column-cell/column-cell.component';\nimport {ColumnsFormComponent} from './components/columns-form/columns-form.component';\nimport {ContinuousGridComponent} from './components/continuous-grid/continuous-grid.component';\nimport {GridComponent} from './components/grid/grid.component';\nimport {LoadMoreComponent} from './components/load-more/load-more.component';\nimport {PaginatedGridComponent} from './components/paginated-grid/paginated-grid.component';\n\nconst components: any[] = [\n LoadMoreComponent,\n GridComponent,\n ContinuousGridComponent,\n PaginatedGridComponent,\n ColumnCellComponent,\n ColumnsFormComponent,\n];\n\nconst cells: any[] = [CellComponent];\n\nconst pages: any[] = [];\n\nconst pipes: any[] = [];\n\n@NgModule({\n declarations: [...components, ...pages, ...pipes, ...cells],\n imports: [CommonModule, KendoGridModule, ReactiveFormsModule, CheckboxModule, FieldModule, ButtonModule],\n exports: [...components, ...pages, ...pipes],\n providers: [],\n})\nexport class GridModule {}\n","import {ObservableGroup, Worker} from '@marcura/marcura-common';\nimport {ColumnComponent, ColumnResizeArgs} from '@progress/kendo-angular-grid';\nimport {SortDescriptor} from '@progress/kendo-data-query';\nimport {BehaviorSubject, Observable, Subject} from 'rxjs';\nimport {Column} from './column';\n\nexport interface IGridProperties<TRow> {\n isLoading: boolean;\n rows: TRow[];\n skip: number;\n pageSize: number;\n sortDescriptor: SortDescriptor[];\n}\n\nexport class Grid<TRow> {\n protected readonly _worker: Worker = new Worker();\n\n private readonly _rows: BehaviorSubject<TRow[]> = new BehaviorSubject<TRow[]>([]);\n public get rows(): TRow[] {\n return this._rows.value;\n }\n public set rows(value: TRow[]) {\n this._rows.next(value);\n }\n\n private readonly _skip: BehaviorSubject<number> = new BehaviorSubject<number>(0);\n public get skip(): number {\n return this._skip.value;\n }\n public set skip(value: number) {\n if (!isNaN(value) && this.skip !== value) {\n this._skip.next(value);\n }\n }\n\n private readonly _pageSize: BehaviorSubject<number> = new BehaviorSubject<number>(25);\n public get pageSize(): number {\n return this._pageSize.value;\n }\n public set pageSize(value: number) {\n if (!isNaN(value) && this.pageSize !== value) {\n this._pageSize.next(value);\n }\n }\n\n protected readonly _sortDescriptor: BehaviorSubject<SortDescriptor[]> = new BehaviorSubject<SortDescriptor[]>([]);\n public get sortDescriptor(): SortDescriptor[] {\n return this._sortDescriptor.value;\n }\n public set sortDescriptor(value: SortDescriptor[]) {\n this._sortDescriptor.next(value);\n }\n\n public readonly observable: ObservableGroup<IGridProperties<TRow>> = {\n isLoading: this._worker.isWorking,\n rows: this._rows,\n sortDescriptor: this._sortDescriptor,\n skip: this._skip,\n pageSize: this._pageSize,\n };\n\n private readonly _loadingFailed: Subject<any> = new Subject<any>();\n public readonly loadingFailed: Observable<any> = this._loadingFailed;\n\n constructor(public readonly name: string, public readonly columns: Column[]) {\n const sortColumn: Column | undefined = columns.find((column) => column.isDefaultSortColumn);\n this.sortDescriptor =\n sortColumn !== undefined\n ? [\n {\n field: sortColumn.field,\n dir: sortColumn.defaultSortDirection,\n },\n ]\n : [];\n }\n\n public readonly reload = (): void => {};\n\n public readonly replace = (item: TRow, newItem: TRow): void => {\n const rows: TRow[] = this.rows.concat();\n const index: number = rows.indexOf(item);\n if (index > -1) {\n rows[index] = newItem;\n this._rows.next(rows);\n }\n };\n\n public readonly onColumnResized = (changes: ColumnResizeArgs[]): void => {\n changes\n .map((change) => ({column: change.column as ColumnComponent, newWidth: change.newWidth}))\n .forEach((change) => {\n const column: Column | undefined = this.columns.find((c) => c.field === change.column.field);\n if (column) {\n column.width.next(change.newWidth ?? 0);\n }\n });\n };\n\n public readonly onSortDescriptorChanged = (sortDescriptor: SortDescriptor[]): void => {\n this.sortDescriptor = sortDescriptor;\n this.reload();\n };\n\n public readonly onLoadError = (error: any): void => {\n this._loadingFailed.next(error);\n };\n}\n","import {SortDescriptor} from '@progress/kendo-data-query';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {Column} from '../model/column';\nimport {Grid} from './grid';\n\nexport interface IContinuousGridDataResult<TRow> {\n rows: TRow[];\n isLastPage: boolean;\n}\n\nexport type ContinuousGridDataResultProvider<TRow> = (\n skip: number,\n size: number,\n sortDescriptor: SortDescriptor[]\n) => Observable<IContinuousGridDataResult<TRow>>;\n\nexport class ContinuousGrid<TRow> extends Grid<TRow> {\n private readonly _hasMoreRows: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n public readonly hasMoreRows: Observable<boolean> = this._hasMoreRows;\n\n constructor(name: string, columns: Column[], private readonly _loadPage: ContinuousGridDataResultProvider<TRow>) {\n super(name, columns);\n }\n\n public preload(pagesCount: number): void {\n this.rows = [];\n this.skip = 0;\n this.skip = pagesCount > 0 ? (pagesCount - 1) * this.pageSize : 0;\n if (pagesCount > 0) {\n this._worker.handle(\n this._loadPage(0, pagesCount * this.pageSize, this._sortDescriptor.value),\n this.onLoadSuccess,\n this.onLoadError\n );\n }\n }\n\n public override readonly reload = (): void => {\n this.skip = 0;\n this._worker.handle(\n this._loadPage(this.skip, this.pageSize, this.sortDescriptor),\n this.onLoadSuccess,\n this.onLoadError\n );\n };\n\n public readonly loadMore = (): void => {\n this.skip += this.pageSize;\n this._worker.handle(\n this._loadPage(this.skip, this.pageSize, this.sortDescriptor),\n this.onLoadMoreSuccess,\n this.onLoadError\n );\n };\n\n private onLoadSuccess = (dataResult: IContinuousGridDataResult<TRow>): void => {\n this.rows = dataResult.rows;\n this._hasMoreRows.next(!dataResult.isLastPage);\n };\n\n private onLoadMoreSuccess = (dataResult: IContinuousGridDataResult<TRow>): void => {\n this.rows = [...this.rows, ...dataResult.rows];\n this._hasMoreRows.next(!dataResult.isLastPage);\n };\n}\n","import {Is} from '@marcura/marcura-common';\nimport {GridDataResult, PagerSettings, PageChangeEvent} from '@progress/kendo-angular-grid';\nimport {SortDescriptor} from '@progress/kendo-data-query';\nimport {combineLatest, BehaviorSubject, Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {Column} from './column';\nimport {Grid} from './grid';\n\nexport interface IPaginatedGridDataResult<TRow> {\n rows: TRow[];\n total: number;\n}\n\nexport type PaginatedGridDataResultProvider<TRow> = (\n skip: number,\n size: number,\n sortDescriptor: SortDescriptor[]\n) => Observable<IPaginatedGridDataResult<TRow>>;\n\nexport class PaginatedGrid<TRow> extends Grid<TRow> {\n public readonly pageable: PagerSettings = {\n buttonCount: 5,\n info: true,\n type: 'numeric',\n pageSizes: [100, 250, 500],\n previousNext: true,\n };\n\n private readonly _total: BehaviorSubject<number> = new BehaviorSubject<number>(0);\n public readonly dataResult: Observable<GridDataResult> = combineLatest([this.observable.rows, this._total]).pipe(\n map(([rows, total]: [TRow[], number]) => ({data: rows, total}))\n );\n\n constructor(name: string, columns: Column[], private readonly _loadPage: PaginatedGridDataResultProvider<TRow>) {\n super(name, columns);\n this.pageSize = Is.array(this.pageable.pageSizes) ? this.pageable.pageSizes[0] ?? 0 : 0;\n }\n\n public pageChange(event: PageChangeEvent): void {\n this.skip = event.skip;\n this.pageSize = event.take;\n this.reload();\n }\n\n public override reload = (): void => {\n this._worker.handle(\n this._loadPage(this.skip, this.pageSize, this._sortDescriptor.value),\n this.onLoadSuccess,\n this.onLoadError\n );\n };\n\n private readonly onLoadSuccess = (result: IPaginatedGridDataResult<TRow>): void => {\n this.rows = result.rows;\n this._total.next(result.total);\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3.LoadMoreComponent","i4.ColumnCellComponent","i3.ColumnCellComponent","KendoGridModule"],"mappings":"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"}
@@ -5,15 +5,22 @@ import * as i0 from "@angular/core";
5
5
  export declare class ColumnsFormComponent implements OnDestroy {
6
6
  private static readonly MAX_ROWS;
7
7
  private _atLeastOneSelectedFormGuard;
8
- private _list;
9
- get list(): Column[];
10
- set list(value: Column[]);
11
- columns: Column[][];
12
- prefix: string;
8
+ private _destroy$;
9
+ list: import("@angular/core").InputSignal<Column<any>[]>;
10
+ prefix: import("@angular/core").InputSignal<string>;
11
+ columnsLimit: import("@angular/core").InputSignal<number>;
12
+ columnsLimitText: import("@angular/core").InputSignal<string>;
13
+ private processedList;
14
+ columns: import("@angular/core").Signal<Column<any>[][]>;
15
+ showColumnsLimitMessage: import("@angular/core").Signal<boolean>;
13
16
  form: FormGroup;
17
+ constructor();
18
+ private normalizeFieldName;
14
19
  private updateFormGroup;
15
- private updateColumns;
20
+ private getSelectedColumnsCount;
21
+ private updateColumnsDisabledState;
22
+ private setupColumnLimitSubscription;
16
23
  ngOnDestroy(): void;
17
24
  static ɵfac: i0.ɵɵFactoryDeclaration<ColumnsFormComponent, never>;
18
- static ɵcmp: i0.ɵɵComponentDeclaration<ColumnsFormComponent, "sg-columns-form", never, { "list": { "alias": "list"; "required": false; }; "prefix": { "alias": "prefix"; "required": false; }; }, {}, never, never, false, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnsFormComponent, "sg-columns-form", never, { "list": { "alias": "list"; "required": true; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "columnsLimit": { "alias": "columnsLimit"; "required": false; "isSignal": true; }; "columnsLimitText": { "alias": "columnsLimitText"; "required": false; "isSignal": true; }; }, {}, never, never, false, never>;
19
26
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marcura/marcura-grid",
3
- "version": "19.0.0",
3
+ "version": "19.1.0-dev.1",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">= 19",
6
6
  "@angular/core": ">= 19",