@acorex/components 7.24.5 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/common/lib/classes/datasource.class.d.ts +2 -0
  2. package/data-table/index.d.ts +3 -2
  3. package/data-table/lib/base-data-table.class.d.ts +25 -0
  4. package/data-table/lib/columns/row-command-column.component.d.ts +2 -2
  5. package/data-table/lib/data-table/data-table.component.d.ts +52 -0
  6. package/data-table/lib/data-table.module.d.ts +21 -18
  7. package/data-table/lib/{data-table.component.d.ts → infinite-scroll-data-table/infinite-scroll-data-table.component.d.ts} +8 -22
  8. package/esm2022/button/lib/button.component.mjs +2 -2
  9. package/esm2022/common/lib/classes/datasource.class.mjs +8 -2
  10. package/esm2022/common/lib/components/selection-base.component.class.mjs +2 -2
  11. package/esm2022/data-pager/lib/data-pager.component.mjs +7 -11
  12. package/esm2022/data-table/index.mjs +4 -3
  13. package/esm2022/data-table/lib/base-data-table.class.mjs +36 -0
  14. package/esm2022/data-table/lib/columns/row-command-column.component.mjs +57 -69
  15. package/esm2022/data-table/lib/columns/row-index-column.component.mjs +7 -21
  16. package/esm2022/data-table/lib/columns/row-select-column.component.mjs +6 -18
  17. package/esm2022/data-table/lib/data-table/data-table.component.mjs +233 -0
  18. package/esm2022/data-table/lib/data-table.module.mjs +24 -7
  19. package/esm2022/data-table/lib/infinite-scroll-data-table/infinite-scroll-data-table.component.mjs +272 -0
  20. package/esm2022/otp/lib/otp.component.mjs +2 -2
  21. package/esm2022/phone-box/lib/phone-box.component.mjs +21 -38
  22. package/esm2022/select-box/lib/select-box.component.mjs +2 -2
  23. package/esm2022/text-area/lib/text-area.component.mjs +6 -22
  24. package/fesm2022/acorex-components-button.mjs +2 -2
  25. package/fesm2022/acorex-components-button.mjs.map +1 -1
  26. package/fesm2022/acorex-components-common.mjs +8 -2
  27. package/fesm2022/acorex-components-common.mjs.map +1 -1
  28. package/fesm2022/acorex-components-data-pager.mjs +5 -9
  29. package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
  30. package/fesm2022/acorex-components-data-table.mjs +684 -470
  31. package/fesm2022/acorex-components-data-table.mjs.map +1 -1
  32. package/fesm2022/acorex-components-otp.mjs +2 -2
  33. package/fesm2022/acorex-components-otp.mjs.map +1 -1
  34. package/fesm2022/acorex-components-phone-box.mjs +22 -38
  35. package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
  36. package/fesm2022/acorex-components-select-box.mjs +2 -2
  37. package/fesm2022/acorex-components-select-box.mjs.map +1 -1
  38. package/fesm2022/acorex-components-text-area.mjs +5 -21
  39. package/fesm2022/acorex-components-text-area.mjs.map +1 -1
  40. package/package.json +25 -31
  41. package/phone-box/lib/phone-box.component.d.ts +4 -13
  42. package/text-area/lib/text-area.component.d.ts +0 -1
  43. package/data-table-2/README.md +0 -3
  44. package/data-table-2/index.d.ts +0 -8
  45. package/data-table-2/lib/columns/data-table-column-resizable.directive.d.ts +0 -22
  46. package/data-table-2/lib/columns/data-table-column.d.ts +0 -22
  47. package/data-table-2/lib/columns/data-text-column.component.d.ts +0 -18
  48. package/data-table-2/lib/columns/row-command-column.component.d.ts +0 -40
  49. package/data-table-2/lib/columns/row-index-column.component.d.ts +0 -18
  50. package/data-table-2/lib/columns/row-select-column.component.d.ts +0 -14
  51. package/data-table-2/lib/data-table-2.component.d.ts +0 -61
  52. package/data-table-2/lib/data-table-2.module.d.ts +0 -24
  53. package/esm2022/data-table/lib/data-table.component.mjs +0 -290
  54. package/esm2022/data-table-2/acorex-components-data-table-2.mjs +0 -5
  55. package/esm2022/data-table-2/index.mjs +0 -9
  56. package/esm2022/data-table-2/lib/columns/data-table-column-resizable.directive.mjs +0 -59
  57. package/esm2022/data-table-2/lib/columns/data-table-column.mjs +0 -42
  58. package/esm2022/data-table-2/lib/columns/data-text-column.component.mjs +0 -81
  59. package/esm2022/data-table-2/lib/columns/row-command-column.component.mjs +0 -231
  60. package/esm2022/data-table-2/lib/columns/row-index-column.component.mjs +0 -71
  61. package/esm2022/data-table-2/lib/columns/row-select-column.component.mjs +0 -61
  62. package/esm2022/data-table-2/lib/data-table-2.component.mjs +0 -211
  63. package/esm2022/data-table-2/lib/data-table-2.module.mjs +0 -94
  64. package/fesm2022/acorex-components-data-table-2.mjs +0 -822
  65. package/fesm2022/acorex-components-data-table-2.mjs.map +0 -1
@@ -1,31 +1,35 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Input, inject, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, NgZone, EventEmitter, ContentChildren, Output, ChangeDetectorRef, Directive, HostListener, NgModule } from '@angular/core';
2
+ import { Injectable, Input, Directive, HostListener, inject, TemplateRef, Component, ViewEncapsulation, ChangeDetectionStrategy, ViewChild, EventEmitter, Output, ChangeDetectorRef, signal, ContentChildren, NgZone, NgModule } from '@angular/core';
3
+ import { isBrowser } from '@acorex/core/platform';
4
+ import { Subject, debounceTime, buffer, filter } from 'rxjs';
3
5
  import { __decorate, __metadata } from 'tslib';
4
- import * as i2$2 from '@acorex/core/format';
6
+ import * as i2 from '@acorex/core/format';
5
7
  import { AXFormatService, AXFormatModule } from '@acorex/core/format';
6
8
  import { Memorize } from '@acorex/core/memorize';
7
- import * as i5$1 from '@acorex/components/common';
9
+ import * as i5 from '@acorex/components/common';
8
10
  import { MXBaseComponent, convertArrayToDataSource, AXListDataSource, AXPagedComponent, AXCommonModule, AXRippleDirective } from '@acorex/components/common';
9
- import * as i2 from '@angular/cdk/scrolling';
10
- import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
11
- import sum from 'lodash-es/sum';
12
- import { Subject, buffer, debounceTime, filter } from 'rxjs';
13
- import * as i1 from '@angular/common';
14
- import { CommonModule } from '@angular/common';
15
- import * as i2$1 from '@acorex/components/decorators';
11
+ import * as i1 from '@acorex/components/loading';
12
+ import { AXLoadingModule } from '@acorex/components/loading';
13
+ import * as i3 from '@acorex/components/decorators';
16
14
  import { AXDecoratorModule } from '@acorex/components/decorators';
17
- import * as i4 from '@acorex/components/skeleton';
18
- import { AXSkeletonModule } from '@acorex/components/skeleton';
19
- import * as i5 from '@acorex/components/button';
15
+ import * as i3$1 from '@acorex/components/button';
20
16
  import { AXButtonModule } from '@acorex/components/button';
21
- import * as i1$1 from '@acorex/components/loading';
22
- import { AXLoadingModule } from '@acorex/components/loading';
23
- import * as i4$1 from '@acorex/components/dropdown';
17
+ import * as i4 from '@acorex/components/dropdown';
24
18
  import { AXDropdownModule } from '@acorex/components/dropdown';
25
19
  import { AXUnsubscriber } from '@acorex/core/utils';
26
- import { isBrowser } from '@acorex/core/platform';
20
+ import * as i1$1 from '@angular/common';
21
+ import { CommonModule } from '@angular/common';
22
+ import * as i5$1 from '@acorex/components/data-pager';
23
+ import { AXDataPagerModule } from '@acorex/components/data-pager';
27
24
  import { AXResultModule } from '@acorex/components/result';
25
+ import * as i4$1 from '@acorex/components/skeleton';
26
+ import { AXSkeletonModule } from '@acorex/components/skeleton';
28
27
  import { AXTranslationModule } from '@acorex/core/translation';
28
+ import * as i6 from '@angular/cdk/drag-drop';
29
+ import { moveItemInArray, CdkDropList, CdkDrag, CdkDragPlaceholder, CdkDragHandle } from '@angular/cdk/drag-drop';
30
+ import * as i2$1 from '@angular/cdk/scrolling';
31
+ import { CdkVirtualScrollViewport, ScrollingModule } from '@angular/cdk/scrolling';
32
+ import sum from 'lodash-es/sum';
29
33
 
30
34
  class AXDataTableColumnComponent {
31
35
  constructor() {
@@ -63,6 +67,60 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
63
67
  type: Input
64
68
  }] } });
65
69
 
70
+ class AXDataTableColumnResizableDirective {
71
+ constructor(el, renderer, ngZone, cdr) {
72
+ this.el = el;
73
+ this.renderer = renderer;
74
+ this.ngZone = ngZone;
75
+ this.cdr = cdr;
76
+ this.resize$ = new Subject();
77
+ this.onMouseMoveRawBound = this.onMouseMoveRaw.bind(this);
78
+ this.onMouseUpBound = this.onMouseUp.bind(this);
79
+ this.resize$.pipe(debounceTime(10)).subscribe((event) => this.onMouseMove(event));
80
+ }
81
+ onMouseDown(event) {
82
+ if (isBrowser()) {
83
+ event.stopPropagation();
84
+ this.ngZone.runOutsideAngular(() => {
85
+ this.startX = event.pageX;
86
+ this.startWidth = this.el?.nativeElement?.parentElement.offsetWidth;
87
+ document.addEventListener('mousemove', this.onMouseMoveRawBound);
88
+ document.addEventListener('mouseup', this.onMouseUpBound);
89
+ });
90
+ this.cdr.detach(); // Detach the change detector
91
+ }
92
+ }
93
+ onMouseMoveRaw(event) {
94
+ this.resize$.next(event);
95
+ }
96
+ onMouseMove(event) {
97
+ if (isBrowser()) {
98
+ const newWidth = this.startWidth + (event.pageX - this.startX);
99
+ this.renderer.setStyle(this.el?.nativeElement?.parentElement, 'width', `${newWidth}px`);
100
+ this.column.width = `${newWidth}px`;
101
+ }
102
+ }
103
+ onMouseUp() {
104
+ document.removeEventListener('mousemove', this.onMouseMoveRawBound);
105
+ document.removeEventListener('mouseup', this.onMouseUpBound);
106
+ this.cdr.reattach(); // Reattach the change detector
107
+ }
108
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableColumnResizableDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
109
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AXDataTableColumnResizableDirective, selector: "[ax-table-column-resizble]", inputs: { column: ["ax-table-column-resizble", "column"] }, host: { listeners: { "mousedown": "onMouseDown($event)" } }, ngImport: i0 }); }
110
+ }
111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableColumnResizableDirective, decorators: [{
112
+ type: Directive,
113
+ args: [{
114
+ selector: '[ax-table-column-resizble]',
115
+ }]
116
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }], propDecorators: { column: [{
117
+ type: Input,
118
+ args: ['ax-table-column-resizble']
119
+ }], onMouseDown: [{
120
+ type: HostListener,
121
+ args: ['mousedown', ['$event']]
122
+ }] } });
123
+
66
124
  class AXDataTableTextColumnComponent extends AXDataTableColumnComponent {
67
125
  constructor() {
68
126
  super(...arguments);
@@ -138,57 +196,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
138
196
  type: Input
139
197
  }] } });
140
198
 
141
- class AXDataTableComponent extends MXBaseComponent {
199
+ class AXBaseDataTable extends MXBaseComponent {
142
200
  constructor() {
143
201
  super(...arguments);
144
- this.ngZone = inject(NgZone);
145
- this.onPageChanged = new EventEmitter();
146
- this.clickSubject = new Subject();
147
- this.onRowClick = new EventEmitter();
148
- this.onRowDbClick = new EventEmitter();
149
- this.showHeader = true;
150
- this.fetchDataMode = 'auto';
151
202
  this.dataSource = convertArrayToDataSource([]);
152
- this.loading = {
153
- enabled: true,
154
- animation: true,
155
- };
156
- this.isLoading = true;
157
- this.hasItems = false;
158
- this.totalRows = 0;
159
- this.currentPage = 0;
160
- this.totalPages = 0;
161
- this.startRowIndex = 0;
162
- this.lastIndex = 0;
163
- this.focusedRowChange = new EventEmitter();
164
203
  this.selectedRowsChange = new EventEmitter();
165
204
  this._selectedRows = [];
166
- this.itemHeight = 40;
167
- this.width = '100%';
168
- this.height = '100%';
169
- this.onScrolledIndexChanged = new EventEmitter();
170
- }
171
- startFixedColumn() {
172
- return this.columns?.toArray().filter((c) => c.fixed == 'start') ?? [];
173
- }
174
- endFixedColumn() {
175
- return this.columns?.toArray().filter((c) => c.fixed == 'end') ?? [];
176
- }
177
- notFixedColumn() {
178
- return this.columns?.toArray().filter((c) => !c.fixed) ?? [];
179
- }
180
- notFixedColumnCount() {
181
- return this.columns?.toArray().filter((c) => !c.fixed).length ?? 0;
182
- }
183
- fixedColumnCount() {
184
- return this.columns?.toArray().filter((c) => c.fixed).length ?? 0;
185
- }
186
- get focusedRow() {
187
- return this._focusedRow;
188
- }
189
- set focusedRow(v) {
190
- this._focusedRow = v;
191
- this.focusedRowChange.emit(v);
192
205
  }
193
206
  get selectedRows() {
194
207
  return this._selectedRows;
@@ -203,274 +216,75 @@ class AXDataTableComponent extends MXBaseComponent {
203
216
  unSelectRows(...rows) {
204
217
  this.selectedRows = this.selectedRows.filter((c) => !rows.includes(c));
205
218
  }
206
- trackByIdx(i) {
207
- return i;
219
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBaseDataTable, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
220
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBaseDataTable }); }
221
+ }
222
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXBaseDataTable, decorators: [{
223
+ type: Injectable
224
+ }], propDecorators: { dataSource: [{
225
+ type: Input
226
+ }], selectedRowsChange: [{
227
+ type: Output
228
+ }], selectedRows: [{
229
+ type: Input
230
+ }] } });
231
+
232
+ class AXBaseRowCommandColumnComponent extends AXDataTableColumnComponent {
233
+ constructor() {
234
+ super(...arguments);
235
+ this.grid = inject(AXBaseDataTable);
236
+ this.cdr = inject(ChangeDetectorRef);
237
+ this.allowSorting = false;
238
+ this.onItemClick = new EventEmitter();
208
239
  }
209
- ngOnInit() {
210
- super.ngOnInit();
211
- this.listDataSource = new AXListDataSource({
212
- source: this.dataSource,
213
- });
214
- this.listDataSource.source.onLoadingChanged.subscribe((data) => {
215
- this.isLoading = data;
216
- });
217
- this.listDataSource.source.onChanged.subscribe((data) => {
218
- this.totalRows = data.totalCount;
219
- this.hasItems = data.totalCount > 0;
220
- setTimeout(() => {
221
- this.render();
222
- }, 100);
223
- });
224
- //
225
- this.clickSubject
226
- .pipe(buffer(this.clickSubject.pipe(debounceTime(250))), filter((clickArray) => clickArray.length === 2))
227
- .subscribe((clickArray) => {
228
- this.handleRowDoubleClick(clickArray[0].event, clickArray[0].item);
229
- });
240
+ get loadingEnabled() {
241
+ return false;
230
242
  }
231
- _handleOnscrolledIndexChange(e) {
232
- this.lastIndex = e;
233
- this.onScrolledIndexChanged.emit({
234
- component: this,
235
- index: this.lastIndex,
236
- isUserInteraction: true,
237
- });
243
+ get cssClass() {
244
+ return 'ax-command-column';
238
245
  }
239
- ngDoCheck() {
240
- //this.copyFixedColumns();
241
- this.updateHScroll();
242
- //
243
- this.updateWidth();
244
- this.updateHeight();
245
- //
246
- this.updateTotalCount();
246
+ }
247
+ class AXRowDropdownCommandColumnComponent extends AXBaseRowCommandColumnComponent {
248
+ constructor() {
249
+ super(...arguments);
250
+ this._items = [];
251
+ this.items = [];
247
252
  }
248
- updateTotalCount() {
249
- this.startRowIndex = this.lastIndex;
250
- if (this.startRowIndex < 1)
251
- this.startRowIndex = 1;
252
- if (this.startRowIndex > this.totalRows)
253
- this.startRowIndex = this.totalRows;
253
+ get template() {
254
+ return this._template;
254
255
  }
255
- updateHeight() {
256
- this.height = `calc(100% - ${(this.headerContainer?.nativeElement.clientHeight ?? 0) +
257
- (this.footerContainer?.nativeElement.clientHeight ?? 0)}px)`;
256
+ get name() {
257
+ return 'cl-dd-cmd';
258
258
  }
259
- updateWidth() {
260
- if (this.columns && this.columns.length) {
261
- const sumPx = sum(this.columns
262
- .toArray()
263
- .map((c) => typeof c.width == 'number'
264
- ? c.width
265
- : Number(c.width.replace('px', ''))));
266
- this.width = `${Math.max(sumPx, this.getHostElement().clientWidth - 5)}px`;
259
+ async handleOnOpened(rowData) {
260
+ if (Array.isArray(this.items)) {
261
+ this._items = this.items;
267
262
  }
268
- }
269
- updateHScroll() {
270
- this.ngZone.runOutsideAngular(() => {
271
- if (this.headerContainer) {
272
- const headerContainer = this.headerContainer.nativeElement;
273
- const left = this.scrollableContainer.nativeElement.scrollLeft;
274
- headerContainer.style.transform = `translateX(${-left}px)`;
263
+ else
264
+ typeof this.items == 'function';
265
+ {
266
+ const result = this['items'](rowData);
267
+ if (Array.isArray(result)) {
268
+ this._items = result;
275
269
  }
276
- });
277
- }
278
- // Function to copy fixed columns
279
- copyFixedColumns() {
280
- const originalRows = Array.from(this.viewport._contentWrapper.nativeElement.querySelectorAll('tr'));
281
- const fixedColumnTable = this.getHostElement().querySelector('.ax-body-fixed-columns > table > tbody');
282
- fixedColumnTable.querySelectorAll('tr').forEach((n) => n.remove());
283
- for (const row of originalRows) {
284
- const fixedCells = Array.from(row.querySelectorAll('[data-fixed="start"]'));
285
- const fixedRow = document.createElement('tr');
286
- for (const cell of fixedCells) {
287
- const clonedCell = cell.cloneNode(true);
288
- fixedRow.appendChild(clonedCell);
270
+ else if (result instanceof Promise) {
271
+ this._items = await result;
289
272
  }
290
- fixedColumnTable.appendChild(fixedRow);
291
273
  }
292
- const scrollTop = this.getHostElement().querySelector('.cdk-virtual-scrollable').scrollTop;
293
- fixedColumnTable.style.transform = `translateY(${-scrollTop}px)`;
294
- }
295
- render() {
296
- this.viewport.checkViewportSize();
297
- this.viewport.scrollToIndex(this.lastIndex);
298
- this.cdr.markForCheck();
299
- }
300
- refresh() {
301
- this.lastIndex = 0;
302
- this.dataSource.refresh();
274
+ this.cdr.detectChanges();
303
275
  }
304
- handleRowClick(event, item) {
305
- this.handleRowSingleClick(event, item);
306
- this.clickSubject.next({ event, item });
276
+ handleOnClosed() {
277
+ this._items = [];
307
278
  }
308
- handleRowSingleClick(event, item) {
309
- if (this.focusedRow == item) {
310
- this.focusedRow = null;
311
- }
312
- else {
313
- this.focusedRow = item;
314
- }
315
- //
316
- this.onRowClick.emit({
317
- component: this,
318
- data: item,
279
+ handleOnItemClick(e, data) {
280
+ const args = {
281
+ component: this.grid,
319
282
  isUserInteraction: true,
320
- });
321
- }
322
- handleRowDoubleClick(e, item) {
323
- this.focusedRow = item;
324
- //
325
- this.onRowDbClick.emit({
326
- component: this,
327
- data: item,
328
- isUserInteraction: true,
329
- });
330
- }
331
- handleColumnClick(e, column) {
332
- if (column instanceof AXDataTableTextColumnComponent) {
333
- const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
334
- if (!sort) {
335
- this.dataSource.query.sort.push({
336
- field: column.dataField,
337
- dir: 'asc',
338
- });
339
- }
340
- else {
341
- if (sort.dir == 'asc') {
342
- sort.dir = 'desc';
343
- }
344
- else {
345
- this.dataSource.query.sort = this.dataSource.query.sort.filter((c) => c != sort);
346
- }
347
- }
348
- this.refresh();
349
- }
350
- }
351
- getSort(column) {
352
- if (column instanceof AXDataTableTextColumnComponent) {
353
- const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
354
- return sort
355
- ? sort.dir == 'asc'
356
- ? 'ax-icon-arrow-long-down'
357
- : 'ax-icon-arrow-long-up'
358
- : undefined;
359
- }
360
- return undefined;
361
- }
362
- _handleOnScroll() {
363
- this.updateHScroll();
364
- }
365
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
366
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: AXDataTableComponent, selector: "ax-data-table", inputs: { rowTemplate: "rowTemplate", emptyTemplate: "emptyTemplate", showHeader: "showHeader", fetchDataMode: "fetchDataMode", dataSource: "dataSource", loading: "loading", focusedRow: "focusedRow", selectedRows: "selectedRows", itemHeight: "itemHeight" }, outputs: { onPageChanged: "onPageChanged", onRowClick: "onRowClick", onRowDbClick: "onRowDbClick", focusedRowChange: "focusedRowChange", selectedRowsChange: "selectedRowsChange", onScrolledIndexChanged: "onScrolledIndexChanged" }, providers: [{ provide: AXPagedComponent, useExisting: AXDataTableComponent }], queries: [{ propertyName: "columns", predicate: AXDataTableColumnComponent }], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, static: true }, { propertyName: "headerContainer", first: true, predicate: ["headerContainer"], descendants: true }, { propertyName: "footerContainer", first: true, predicate: ["footerContainer"], descendants: true }, { propertyName: "scrollableContainer", first: true, predicate: ["scrolling"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-header\"> </ng-content>\n<!------------------- Header contents ------------------->\n@if(showHeader){\n<div class=\"ax-header-content\">\n <div class=\"ax-header-columns\">\n <table tabindex=\"0\" [style.width]=\"width\" #headerContainer>\n <thead>\n <tr>\n @for(c of notFixedColumn();track c.name)\n {\n <th [class.ax-interactive]=\"c.allowSorting\" (click)=\"c.allowSorting ? handleColumnClick($event, c) : null\"\n [style.width]=\"c.width\">\n @if(c.headerTemplate)\n {\n <ng-container *ngTemplateOutlet=\"c.headerTemplate\"></ng-container>\n }\n @else {\n <div class=\"ax-caption\">\n {{ c.caption }}\n @if(getSort(c)){\n <ax-icon icon=\"ax-icon {{ getSort(c) }}\"></ax-icon>\n }\n </div>\n }\n <!-- @if(c.allowResizing)\n {\n <div class=\"ax-resize-handle\" [ax-table-column-resizble]=\"c\"></div>\n } -->\n </th>\n }\n <th></th>\n </tr>\n </thead>\n </table>\n </div>\n</div>\n}\n\n<!------------------- Body contents ------------------->\n<div [style.height]=\"height\" class=\"ax-body-content\">\n <div class=\"ax-body-columns\">\n <div cdkVirtualScrollingElement #scrolling [style.height]=\"'100%'\" (scroll)=\"_handleOnScroll()\">\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.--item-height]=\"itemHeight + 'px'\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\">\n <table tabindex=\"0\" class=\"ax-table-body ax-relative\" [style.width]=\"width\">\n <colgroup>\n @for(c of notFixedColumn();track c.name)\n {\n <col [style.width]=\"c.width\" />\n }\n <col />\n </colgroup>\n <tbody>\n <ng-container *cdkVirtualFor=\"\n let item of listDataSource;\n templateCacheSize: 100;\n let i = index;\n trackBy: trackByIdx;\n let rIndex = index\n \">\n <!------------------- custom row template------------------->\n @if (rowTemplate != null) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: { data: item, rowIndex: rIndex } }\">\n </ng-container>\n } @else {\n <!------------------- normal row template------------------->\n <tr [class.ax-state-focused]=\"focusedRow && item === focusedRow\" [attr.data-index]=\"rIndex\"\n [class.ax-state-selected]=\"selectedRows.includes(item)\" (click)=\"handleRowClick($event, item)\">\n <!------------------- start fixed column ------------------->\n\n <!------------------- Not fixed column ------------------->\n @for (c of notFixedColumn(); track c.name) {\n <!------------------- custom cell template ------------------->\n @if (c.cellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"c.cellTemplate;context: { $implicit: { data: item, rowIndex: rIndex } }\">\n </ng-container>\n } @else {\n <!------------------- default cell template ------------------->\n <td [attr.data-label]=\"c.caption\" tabindex=\"0\" [class]=\"c.cssClass\">\n @if (item) {\n <!------------------- render cell ------------------->\n <ng-container\n *ngTemplateOutlet=\"c.template;context: { $implicit: { data: item, rowIndex: rIndex } }\"></ng-container>\n }\n @else {\n <!------------------- render loading ------------------->\n @if (c.loadingEnabled && loading) {\n <ax-skeleton [animated]=\"loading.animation\"></ax-skeleton>\n }\n }\n </td>\n }\n }\n <td></td>\n </tr>\n }\n </ng-container>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n<div class=\"ax-table-footer\" #footerContainer>\n <div class=\"ax-table-info\">\n <div>Showing {{ startRowIndex }} of {{ totalRows }} items</div>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"refresh()\">\n <ax-icon icon=\"ax-icon ax-icon-refresh\"></ax-icon>\n </ax-button>\n </div>\n <ng-content select=\"ax-footer\"> </ng-content>\n</div>", styles: [".ax-dark ax-data-table .ax-header-content th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-500))!important}.ax-dark ax-data-table .ax-body-content tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}ax-data-table{display:block;height:100%;overflow:hidden;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default));font-size:.875rem;line-height:1.25rem}ax-data-table table{table-layout:fixed}ax-data-table .ax-header-content{position:relative;height:3rem;overflow:hidden}ax-data-table .ax-header-content .ax-header-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-data-table .ax-header-content .ax-header-fixed-columns th.ax-column-fixed{pointer-events:auto}ax-data-table .ax-header-content .ax-header-fixed-columns th:not(.ax-column-fixed){visibility:hidden;background-color:transparent}ax-data-table .ax-header-content .ax-header-columns{height:100%}ax-data-table .ax-header-content .ax-header-columns>table{height:100%;overflow:hidden;border-start-end-radius:var(--ax-rounded-border-default);border-start-start-radius:var(--ax-rounded-border-default)}ax-data-table .ax-header-content .ax-header-columns>table th{border-bottom-width:1px;border-inline-end-width:1px;border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}ax-data-table .ax-header-content .ax-header-columns>table th.ax-interactive{cursor:pointer}ax-data-table .ax-header-content .ax-header-columns>table th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-200))}ax-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle{position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;background:transparent}ax-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle:hover{background-color:rgba(var(--ax-color-neutral-300))}ax-data-table .ax-header-content .ax-header-columns>table th .ax-caption{display:flex;align-items:center;gap:.5rem}ax-data-table .ax-header-content .ax-header-columns>table th:last-child{border-inline-end-width:0px}ax-data-table .ax-body-content{position:relative}ax-data-table .ax-body-content .ax-body-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-data-table .ax-body-content .ax-body-columns{height:100%}ax-data-table .ax-body-content .ax-body-columns table{border-collapse:collapse}ax-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) td{background-color:rgba(var(--ax-color-on-surface))}ax-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) ax-skeleton{width:25%}ax-data-table .ax-body-content .ax-body-columns table tr{height:2.5rem}ax-data-table .ax-body-content .ax-body-columns table tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-400));color:rgba(var(--ax-color-primary-fore))}ax-data-table .ax-body-content .ax-body-columns table td{position:relative;min-width:2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom-width:1px;border-inline-end-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));padding:.5rem 1rem;vertical-align:middle}ax-data-table .ax-body-content .ax-body-columns table td.ax-index-column{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(var(--ax-color-on-surface));text-align:center}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button.ax-state-disabled{position:relative!important;cursor:not-allowed!important;opacity:.5!important}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column>div{position:absolute;inset-inline-start:0px;top:50%;display:flex;width:100%;transform:translateY(-50%);align-items:center;justify-content:center}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button{position:relative;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--ax-rounded-border-default);border-style:none;border-color:rgba(var(--ax-color-border-default));background-color:transparent;padding:.25rem;line-height:1;color:rgba(var(--ax-color-ghost-fore))}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover:not(ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-selected,ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-disabled){opacity:.75}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:active{opacity:1}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button .ax-ripple{background-color:rgba(var(--ax-color-ghost-fore),.05)}ax-data-table .ax-body-content .ax-body-columns table td:last-child{border-inline-end-width:0px}ax-data-table .ax-body-content .ax-body-columns table td ax-skeleton{height:.875rem;width:33.333333%;border-radius:.375rem}ax-data-table .ax-table-footer{border-collapse:collapse;overflow:hidden;border-top-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem .875rem}ax-data-table .ax-table-footer .ax-table-info{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i2.CdkVirtualScrollableElement, selector: "[cdkVirtualScrollingElement]" }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: i5.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
367
- }
368
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableComponent, decorators: [{
369
- type: Component,
370
- args: [{ selector: 'ax-data-table', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: AXPagedComponent, useExisting: AXDataTableComponent }], template: "<ng-content select=\"ax-header\"> </ng-content>\n<!------------------- Header contents ------------------->\n@if(showHeader){\n<div class=\"ax-header-content\">\n <div class=\"ax-header-columns\">\n <table tabindex=\"0\" [style.width]=\"width\" #headerContainer>\n <thead>\n <tr>\n @for(c of notFixedColumn();track c.name)\n {\n <th [class.ax-interactive]=\"c.allowSorting\" (click)=\"c.allowSorting ? handleColumnClick($event, c) : null\"\n [style.width]=\"c.width\">\n @if(c.headerTemplate)\n {\n <ng-container *ngTemplateOutlet=\"c.headerTemplate\"></ng-container>\n }\n @else {\n <div class=\"ax-caption\">\n {{ c.caption }}\n @if(getSort(c)){\n <ax-icon icon=\"ax-icon {{ getSort(c) }}\"></ax-icon>\n }\n </div>\n }\n <!-- @if(c.allowResizing)\n {\n <div class=\"ax-resize-handle\" [ax-table-column-resizble]=\"c\"></div>\n } -->\n </th>\n }\n <th></th>\n </tr>\n </thead>\n </table>\n </div>\n</div>\n}\n\n<!------------------- Body contents ------------------->\n<div [style.height]=\"height\" class=\"ax-body-content\">\n <div class=\"ax-body-columns\">\n <div cdkVirtualScrollingElement #scrolling [style.height]=\"'100%'\" (scroll)=\"_handleOnScroll()\">\n <cdk-virtual-scroll-viewport [itemSize]=\"itemHeight\" [style.--item-height]=\"itemHeight + 'px'\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\">\n <table tabindex=\"0\" class=\"ax-table-body ax-relative\" [style.width]=\"width\">\n <colgroup>\n @for(c of notFixedColumn();track c.name)\n {\n <col [style.width]=\"c.width\" />\n }\n <col />\n </colgroup>\n <tbody>\n <ng-container *cdkVirtualFor=\"\n let item of listDataSource;\n templateCacheSize: 100;\n let i = index;\n trackBy: trackByIdx;\n let rIndex = index\n \">\n <!------------------- custom row template------------------->\n @if (rowTemplate != null) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: { data: item, rowIndex: rIndex } }\">\n </ng-container>\n } @else {\n <!------------------- normal row template------------------->\n <tr [class.ax-state-focused]=\"focusedRow && item === focusedRow\" [attr.data-index]=\"rIndex\"\n [class.ax-state-selected]=\"selectedRows.includes(item)\" (click)=\"handleRowClick($event, item)\">\n <!------------------- start fixed column ------------------->\n\n <!------------------- Not fixed column ------------------->\n @for (c of notFixedColumn(); track c.name) {\n <!------------------- custom cell template ------------------->\n @if (c.cellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"c.cellTemplate;context: { $implicit: { data: item, rowIndex: rIndex } }\">\n </ng-container>\n } @else {\n <!------------------- default cell template ------------------->\n <td [attr.data-label]=\"c.caption\" tabindex=\"0\" [class]=\"c.cssClass\">\n @if (item) {\n <!------------------- render cell ------------------->\n <ng-container\n *ngTemplateOutlet=\"c.template;context: { $implicit: { data: item, rowIndex: rIndex } }\"></ng-container>\n }\n @else {\n <!------------------- render loading ------------------->\n @if (c.loadingEnabled && loading) {\n <ax-skeleton [animated]=\"loading.animation\"></ax-skeleton>\n }\n }\n </td>\n }\n }\n <td></td>\n </tr>\n }\n </ng-container>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n<div class=\"ax-table-footer\" #footerContainer>\n <div class=\"ax-table-info\">\n <div>Showing {{ startRowIndex }} of {{ totalRows }} items</div>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"refresh()\">\n <ax-icon icon=\"ax-icon ax-icon-refresh\"></ax-icon>\n </ax-button>\n </div>\n <ng-content select=\"ax-footer\"> </ng-content>\n</div>", styles: [".ax-dark ax-data-table .ax-header-content th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-500))!important}.ax-dark ax-data-table .ax-body-content tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table .ax-body-content tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}ax-data-table{display:block;height:100%;overflow:hidden;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default));font-size:.875rem;line-height:1.25rem}ax-data-table table{table-layout:fixed}ax-data-table .ax-header-content{position:relative;height:3rem;overflow:hidden}ax-data-table .ax-header-content .ax-header-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-data-table .ax-header-content .ax-header-fixed-columns th.ax-column-fixed{pointer-events:auto}ax-data-table .ax-header-content .ax-header-fixed-columns th:not(.ax-column-fixed){visibility:hidden;background-color:transparent}ax-data-table .ax-header-content .ax-header-columns{height:100%}ax-data-table .ax-header-content .ax-header-columns>table{height:100%;overflow:hidden;border-start-end-radius:var(--ax-rounded-border-default);border-start-start-radius:var(--ax-rounded-border-default)}ax-data-table .ax-header-content .ax-header-columns>table th{border-bottom-width:1px;border-inline-end-width:1px;border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}ax-data-table .ax-header-content .ax-header-columns>table th.ax-interactive{cursor:pointer}ax-data-table .ax-header-content .ax-header-columns>table th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-200))}ax-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle{position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;background:transparent}ax-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle:hover{background-color:rgba(var(--ax-color-neutral-300))}ax-data-table .ax-header-content .ax-header-columns>table th .ax-caption{display:flex;align-items:center;gap:.5rem}ax-data-table .ax-header-content .ax-header-columns>table th:last-child{border-inline-end-width:0px}ax-data-table .ax-body-content{position:relative}ax-data-table .ax-body-content .ax-body-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-data-table .ax-body-content .ax-body-columns{height:100%}ax-data-table .ax-body-content .ax-body-columns table{border-collapse:collapse}ax-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) td{background-color:rgba(var(--ax-color-on-surface))}ax-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) ax-skeleton{width:25%}ax-data-table .ax-body-content .ax-body-columns table tr{height:2.5rem}ax-data-table .ax-body-content .ax-body-columns table tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-400));color:rgba(var(--ax-color-primary-fore))}ax-data-table .ax-body-content .ax-body-columns table td{position:relative;min-width:2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom-width:1px;border-inline-end-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));padding:.5rem 1rem;vertical-align:middle}ax-data-table .ax-body-content .ax-body-columns table td.ax-index-column{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(var(--ax-color-on-surface));text-align:center}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button.ax-state-disabled{position:relative!important;cursor:not-allowed!important;opacity:.5!important}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column>div{position:absolute;inset-inline-start:0px;top:50%;display:flex;width:100%;transform:translateY(-50%);align-items:center;justify-content:center}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button{position:relative;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--ax-rounded-border-default);border-style:none;border-color:rgba(var(--ax-color-border-default));background-color:transparent;padding:.25rem;line-height:1;color:rgba(var(--ax-color-ghost-fore))}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover:not(ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-selected,ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-disabled){opacity:.75}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:active{opacity:1}ax-data-table .ax-body-content .ax-body-columns table td.ax-command-column button .ax-ripple{background-color:rgba(var(--ax-color-ghost-fore),.05)}ax-data-table .ax-body-content .ax-body-columns table td:last-child{border-inline-end-width:0px}ax-data-table .ax-body-content .ax-body-columns table td ax-skeleton{height:.875rem;width:33.333333%;border-radius:.375rem}ax-data-table .ax-table-footer{border-collapse:collapse;overflow:hidden;border-top-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem .875rem}ax-data-table .ax-table-footer .ax-table-info{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between}\n"] }]
371
- }], propDecorators: { columns: [{
372
- type: ContentChildren,
373
- args: [AXDataTableColumnComponent]
374
- }], onPageChanged: [{
375
- type: Output
376
- }], onRowClick: [{
377
- type: Output
378
- }], onRowDbClick: [{
379
- type: Output
380
- }], rowTemplate: [{
381
- type: Input
382
- }], emptyTemplate: [{
383
- type: Input
384
- }], showHeader: [{
385
- type: Input
386
- }], fetchDataMode: [{
387
- type: Input
388
- }], dataSource: [{
389
- type: Input
390
- }], loading: [{
391
- type: Input
392
- }], focusedRowChange: [{
393
- type: Output
394
- }], focusedRow: [{
395
- type: Input
396
- }], selectedRowsChange: [{
397
- type: Output
398
- }], selectedRows: [{
399
- type: Input
400
- }], itemHeight: [{
401
- type: Input
402
- }], viewport: [{
403
- type: ViewChild,
404
- args: [CdkVirtualScrollViewport, { static: true }]
405
- }], onScrolledIndexChanged: [{
406
- type: Output
407
- }], headerContainer: [{
408
- type: ViewChild,
409
- args: ['headerContainer']
410
- }], footerContainer: [{
411
- type: ViewChild,
412
- args: ['footerContainer']
413
- }], scrollableContainer: [{
414
- type: ViewChild,
415
- args: ['scrolling', { static: true }]
416
- }] } });
417
-
418
- class AXBaseRowCommandColumnComponent extends AXDataTableColumnComponent {
419
- constructor() {
420
- super(...arguments);
421
- this.grid = inject(AXDataTableComponent);
422
- this.cdr = inject(ChangeDetectorRef);
423
- this.allowSorting = false;
424
- this.onItemClick = new EventEmitter();
425
- }
426
- get loadingEnabled() {
427
- return false;
428
- }
429
- get cssClass() {
430
- return 'ax-command-column';
431
- }
432
- }
433
- class AXRowDropdownCommandColumnComponent extends AXBaseRowCommandColumnComponent {
434
- constructor() {
435
- super(...arguments);
436
- this._items = [];
437
- this.items = [];
438
- }
439
- get template() {
440
- return this._template;
441
- }
442
- get name() {
443
- return 'cl-dd-cmd';
444
- }
445
- async handleOnOpened(rowData) {
446
- if (Array.isArray(this.items)) {
447
- this._items = this.items;
448
- }
449
- else
450
- typeof this.items == 'function';
451
- {
452
- const result = this['items'](rowData);
453
- if (Array.isArray(result)) {
454
- this._items = result;
455
- }
456
- else if (result instanceof Promise) {
457
- this._items = await result;
458
- }
459
- }
460
- this.cdr.detectChanges();
461
- }
462
- handleOnClosed() {
463
- this._items = [];
464
- }
465
- handleOnItemClick(e, data) {
466
- const args = {
467
- component: this.grid,
468
- isUserInteraction: true,
469
- nativeEvent: e,
470
- data,
471
- name: e.name,
472
- };
473
- this.onItemClick.emit(args);
283
+ nativeEvent: e,
284
+ data,
285
+ name: e.name,
286
+ };
287
+ this.onItemClick.emit(args);
474
288
  }
475
289
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRowDropdownCommandColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
476
290
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: AXRowDropdownCommandColumnComponent, selector: "ax-dropdown-command-column", inputs: { width: "width", caption: "caption", fixed: "fixed", items: "items" }, outputs: { onItemClick: "onItemClick" }, providers: [
@@ -480,35 +294,27 @@ class AXRowDropdownCommandColumnComponent extends AXBaseRowCommandColumnComponen
480
294
  },
481
295
  ], viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: ` <ng-template let-row>
482
296
  @if (row.data) {
483
- <div>
484
- <button [axRipple]>
485
- <ax-icon icon="ax-icon ax-icon-solid ax-icon-more-horizontal"></ax-icon>
486
- <ax-dropdown-panel
487
- [adaptivityEnabled]="true"
488
- (onOpened)="handleOnOpened(row.data)"
489
- (onClosed)="handleOnClosed()"
490
- >
491
- @if (_items.length) {
492
- <ax-button-item-list
493
- (onItemClick)="handleOnItemClick($event, row.data)"
494
- [items]="_items"
495
- >
496
- </ax-button-item-list>
497
- } @else {
498
- <div panel style="padding: 0.875rem;">
499
- <ax-loading></ax-loading>
500
- </div>
501
- }
502
- </ax-dropdown-panel>
503
- </button>
504
- </div>
297
+ <div>
298
+ <button [axRipple]>
299
+ <ax-icon icon="ax-icon ax-icon-solid ax-icon-more-horizontal"></ax-icon>
300
+ <ax-dropdown-panel [adaptivityEnabled]="true" (onOpened)="handleOnOpened(row.data)" (onClosed)="handleOnClosed()">
301
+ @if (_items.length) {
302
+ <ax-button-item-list (onItemClick)="handleOnItemClick($event, row.data)" [items]="_items"> </ax-button-item-list>
303
+ } @else {
304
+ <div panel style="padding: 0.875rem;">
305
+ <ax-loading></ax-loading>
306
+ </div>
307
+ }
308
+ </ax-dropdown-panel>
309
+ </button>
310
+ </div>
505
311
  }
506
312
  <ng-template #loading>
507
313
  <div panel style="padding: 0.875rem;">
508
314
  <ax-loading></ax-loading>
509
315
  </div>
510
316
  </ng-template>
511
- </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: i1$1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i5.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "component", type: i4$1.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: i5$1.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
317
+ </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: i1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "directive", type: i5.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
512
318
  }
513
319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRowDropdownCommandColumnComponent, decorators: [{
514
320
  type: Component,
@@ -516,28 +322,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
516
322
  selector: 'ax-dropdown-command-column',
517
323
  template: ` <ng-template let-row>
518
324
  @if (row.data) {
519
- <div>
520
- <button [axRipple]>
521
- <ax-icon icon="ax-icon ax-icon-solid ax-icon-more-horizontal"></ax-icon>
522
- <ax-dropdown-panel
523
- [adaptivityEnabled]="true"
524
- (onOpened)="handleOnOpened(row.data)"
525
- (onClosed)="handleOnClosed()"
526
- >
527
- @if (_items.length) {
528
- <ax-button-item-list
529
- (onItemClick)="handleOnItemClick($event, row.data)"
530
- [items]="_items"
531
- >
532
- </ax-button-item-list>
533
- } @else {
534
- <div panel style="padding: 0.875rem;">
535
- <ax-loading></ax-loading>
536
- </div>
537
- }
538
- </ax-dropdown-panel>
539
- </button>
540
- </div>
325
+ <div>
326
+ <button [axRipple]>
327
+ <ax-icon icon="ax-icon ax-icon-solid ax-icon-more-horizontal"></ax-icon>
328
+ <ax-dropdown-panel [adaptivityEnabled]="true" (onOpened)="handleOnOpened(row.data)" (onClosed)="handleOnClosed()">
329
+ @if (_items.length) {
330
+ <ax-button-item-list (onItemClick)="handleOnItemClick($event, row.data)" [items]="_items"> </ax-button-item-list>
331
+ } @else {
332
+ <div panel style="padding: 0.875rem;">
333
+ <ax-loading></ax-loading>
334
+ </div>
335
+ }
336
+ </ax-dropdown-panel>
337
+ </button>
338
+ </div>
541
339
  }
542
340
  <ng-template #loading>
543
341
  <div panel style="padding: 0.875rem;">
@@ -601,35 +399,39 @@ class AXRowCommandColumnComponent extends AXBaseRowCommandColumnComponent {
601
399
  useExisting: AXRowCommandColumnComponent,
602
400
  },
603
401
  ], viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: ` <ng-template let-row>
604
- @if (row.data) { @for (item of getItems(row.data); track $index) {
605
- <button
606
- [style.color]="'rgba(var(--ax-color-' + (item.color ?? 'primary)')"
607
- [disabled]="item.disabled"
608
- [class.ax-state-disabled]="item.disabled"
609
- [axRipple]="!item.disabled"
610
- (click)="handleOnItemClick($event, item, row.data)"
611
- >
612
- <ax-icon [icon]="item.icon"></ax-icon>
613
- </button>
614
- } }
615
- </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: i5$1.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
402
+ @if (row.data) {
403
+ @for (item of getItems(row.data); track $index) {
404
+ <button
405
+ [style.color]="'rgba(var(--ax-color-' + (item.color ?? 'primary)')"
406
+ [disabled]="item.disabled"
407
+ [class.ax-state-disabled]="item.disabled"
408
+ [axRipple]="!item.disabled"
409
+ (click)="handleOnItemClick($event, item, row.data)"
410
+ >
411
+ <ax-icon [icon]="item.icon"></ax-icon>
412
+ </button>
413
+ }
414
+ }
415
+ </ng-template>`, isInline: true, dependencies: [{ kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: i5.AXRippleDirective, selector: "[axRipple]", inputs: ["axRipple", "axRippleColor"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
616
416
  }
617
417
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRowCommandColumnComponent, decorators: [{
618
418
  type: Component,
619
419
  args: [{
620
420
  selector: 'ax-command-column',
621
421
  template: ` <ng-template let-row>
622
- @if (row.data) { @for (item of getItems(row.data); track $index) {
623
- <button
624
- [style.color]="'rgba(var(--ax-color-' + (item.color ?? 'primary)')"
625
- [disabled]="item.disabled"
626
- [class.ax-state-disabled]="item.disabled"
627
- [axRipple]="!item.disabled"
628
- (click)="handleOnItemClick($event, item, row.data)"
629
- >
630
- <ax-icon [icon]="item.icon"></ax-icon>
631
- </button>
632
- } }
422
+ @if (row.data) {
423
+ @for (item of getItems(row.data); track $index) {
424
+ <button
425
+ [style.color]="'rgba(var(--ax-color-' + (item.color ?? 'primary)')"
426
+ [disabled]="item.disabled"
427
+ [class.ax-state-disabled]="item.disabled"
428
+ [axRipple]="!item.disabled"
429
+ (click)="handleOnItemClick($event, item, row.data)"
430
+ >
431
+ <ax-icon [icon]="item.icon"></ax-icon>
432
+ </button>
433
+ }
434
+ }
633
435
  </ng-template>`,
634
436
  encapsulation: ViewEncapsulation.None,
635
437
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -652,7 +454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
652
454
  class AXRowIndexColumnComponent extends AXDataTableColumnComponent {
653
455
  constructor() {
654
456
  super(...arguments);
655
- this.grid = inject(AXDataTableComponent);
457
+ this.grid = inject(AXBaseDataTable);
656
458
  this.unsubscriber = inject(AXUnsubscriber);
657
459
  this.padZero = false;
658
460
  this.formatCount = 1;
@@ -666,9 +468,7 @@ class AXRowIndexColumnComponent extends AXDataTableColumnComponent {
666
468
  }
667
469
  ngOnInit() {
668
470
  if (this.padZero) {
669
- this.grid.dataSource.onChanged
670
- .pipe(this.unsubscriber.takeUntilDestroy)
671
- .subscribe((c) => {
471
+ this.grid.dataSource.onChanged.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
672
472
  this.formatCount = c.totalCount.toString().length;
673
473
  });
674
474
  }
@@ -687,27 +487,15 @@ class AXRowIndexColumnComponent extends AXDataTableColumnComponent {
687
487
  useExisting: AXRowIndexColumnComponent,
688
488
  },
689
489
  ], viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: ` <ng-template let-row>
690
- {{
691
- row.rowIndex + 1
692
- | format
693
- : 'number'
694
- : { zeroPadLength: this.formatCount, thousandSeparator: false }
695
- | async
696
- }}
697
- </ng-template>`, isInline: true, dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$2.AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
490
+ {{ row.rowIndex + 1 | format: 'number' : { zeroPadLength: this.formatCount, thousandSeparator: false } | async }}
491
+ </ng-template>`, isInline: true, dependencies: [{ kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.AXFormatPipe, name: "format" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
698
492
  }
699
493
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRowIndexColumnComponent, decorators: [{
700
494
  type: Component,
701
495
  args: [{
702
496
  selector: 'ax-index-column',
703
497
  template: ` <ng-template let-row>
704
- {{
705
- row.rowIndex + 1
706
- | format
707
- : 'number'
708
- : { zeroPadLength: this.formatCount, thousandSeparator: false }
709
- | async
710
- }}
498
+ {{ row.rowIndex + 1 | format: 'number' : { zeroPadLength: this.formatCount, thousandSeparator: false } | async }}
711
499
  </ng-template>`,
712
500
  encapsulation: ViewEncapsulation.None,
713
501
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -730,7 +518,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
730
518
  class AXRowSelectColumnComponent extends AXDataTableColumnComponent {
731
519
  constructor() {
732
520
  super(...arguments);
733
- this.grid = inject(AXDataTableComponent);
521
+ this.grid = inject(AXBaseDataTable);
734
522
  }
735
523
  get template() {
736
524
  return this._template;
@@ -759,13 +547,7 @@ class AXRowSelectColumnComponent extends AXDataTableColumnComponent {
759
547
  useExisting: AXRowSelectColumnComponent,
760
548
  },
761
549
  ], viewQueries: [{ propertyName: "_template", first: true, predicate: TemplateRef, descendants: true }], usesInheritance: true, ngImport: i0, template: ` <ng-template let-row>
762
- <input
763
- class="ax-checkbox"
764
- type="checkbox"
765
- [disabled]="!row.data"
766
- (change)="handleChange(row.data)"
767
- [checked]="isSelected(row.data)"
768
- />
550
+ <input class="ax-checkbox" type="checkbox" [disabled]="!row.data" (change)="handleChange(row.data)" [checked]="isSelected(row.data)" />
769
551
  </ng-template>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
770
552
  }
771
553
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXRowSelectColumnComponent, decorators: [{
@@ -773,13 +555,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
773
555
  args: [{
774
556
  selector: 'ax-select-column',
775
557
  template: ` <ng-template let-row>
776
- <input
777
- class="ax-checkbox"
778
- type="checkbox"
779
- [disabled]="!row.data"
780
- (change)="handleChange(row.data)"
781
- [checked]="isSelected(row.data)"
782
- />
558
+ <input class="ax-checkbox" type="checkbox" [disabled]="!row.data" (change)="handleChange(row.data)" [checked]="isSelected(row.data)" />
783
559
  </ng-template>`,
784
560
  encapsulation: ViewEncapsulation.None,
785
561
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -796,61 +572,486 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
796
572
  args: [TemplateRef]
797
573
  }] } });
798
574
 
799
- class AXDataTableColumnResizableDirective {
800
- constructor(el, renderer, ngZone, cdr) {
801
- this.el = el;
802
- this.renderer = renderer;
803
- this.ngZone = ngZone;
804
- this.cdr = cdr;
805
- this.resize$ = new Subject();
806
- this.onMouseMoveRawBound = this.onMouseMoveRaw.bind(this);
807
- this.onMouseUpBound = this.onMouseUp.bind(this);
808
- this.resize$.pipe(debounceTime(10)).subscribe((event) => this.onMouseMove(event));
575
+ class AXDataTableComponent extends AXBaseDataTable {
576
+ constructor() {
577
+ super(...arguments);
578
+ this.onColumnsOrderChanged = new EventEmitter();
579
+ this.displayedRows = signal([]);
580
+ this.page = signal(0);
581
+ this.pageSize = signal(0);
582
+ this.columnsList = signal([]);
583
+ this.showHeader = true;
584
+ this.fixedHeader = true;
585
+ this.itemHeight = 40;
586
+ this.fetchDataMode = 'auto';
587
+ this.loading = {
588
+ enabled: true,
589
+ animation: true,
590
+ };
591
+ this.isLoading = signal(true);
592
+ this.hasItems = false;
593
+ this.totalRows = 0;
594
+ this.currentPage = 0;
595
+ this.totalPages = 0;
596
+ this.startRowIndex = 0;
597
+ this.lastIndex = 0;
598
+ this.focusedRowChange = new EventEmitter();
599
+ this.onRowClick = new EventEmitter();
600
+ this.onRowDbClick = new EventEmitter();
601
+ this.clickSubject = new Subject();
809
602
  }
810
- onMouseDown(event) {
811
- if (isBrowser()) {
812
- event.stopPropagation();
813
- this.ngZone.runOutsideAngular(() => {
814
- this.startX = event.pageX;
815
- this.startWidth = this.el?.nativeElement?.parentElement.offsetWidth;
816
- document.addEventListener('mousemove', this.onMouseMoveRawBound);
817
- document.addEventListener('mouseup', this.onMouseUpBound);
818
- });
819
- this.cdr.detach(); // Detach the change detector
820
- }
603
+ ngAfterViewInit() {
604
+ this.calculateStickyColumnsPositions();
605
+ this.columnsList.set(this.columns.toArray());
821
606
  }
822
- onMouseMoveRaw(event) {
823
- this.resize$.next(event);
607
+ drop(event) {
608
+ moveItemInArray(this.columnsList(), event.previousIndex, event.currentIndex);
609
+ this.onColumnsOrderChanged.emit({
610
+ component: this,
611
+ data: { event },
612
+ isUserInteraction: true,
613
+ });
824
614
  }
825
- onMouseMove(event) {
826
- if (isBrowser()) {
827
- const newWidth = this.startWidth + (event.pageX - this.startX);
828
- this.renderer.setStyle(this.el?.nativeElement?.parentElement, 'width', `${newWidth}px`);
829
- this.column.width = `${newWidth}px`;
615
+ ngOnInit() {
616
+ super.ngOnInit();
617
+ this.dataSource.useCache = false;
618
+ this.totalRows = this.dataSource.items.length;
619
+ this.dataSource.onLoadingChanged.subscribe((data) => {
620
+ this.isLoading.set(data);
621
+ });
622
+ this.dataSource.onChanged.subscribe((data) => {
623
+ this.displayedRows.set(data.items);
624
+ this.totalRows = data.totalCount;
625
+ this.hasItems = data.totalCount > 0;
626
+ });
627
+ //
628
+ this.clickSubject
629
+ .pipe(buffer(this.clickSubject.pipe(debounceTime(250))), filter((clickArray) => clickArray.length === 2))
630
+ .subscribe((clickArray) => {
631
+ this.handleRowDoubleClick(clickArray[0].event, clickArray[0].item);
632
+ });
633
+ }
634
+ get focusedRow() {
635
+ return this._focusedRow;
636
+ }
637
+ set focusedRow(v) {
638
+ this._focusedRow = v;
639
+ this.focusedRowChange.emit(v);
640
+ }
641
+ handleRowClick(event, item) {
642
+ this.handleRowSingleClick(event, item);
643
+ this.clickSubject.next({ event, item });
644
+ }
645
+ handleRowSingleClick(event, item) {
646
+ if (this.focusedRow == item) {
647
+ this.focusedRow = null;
830
648
  }
649
+ else {
650
+ this.focusedRow = item;
651
+ }
652
+ //
653
+ this.onRowClick.emit({
654
+ component: this,
655
+ data: item,
656
+ isUserInteraction: true,
657
+ });
831
658
  }
832
- onMouseUp() {
833
- document.removeEventListener('mousemove', this.onMouseMoveRawBound);
834
- document.removeEventListener('mouseup', this.onMouseUpBound);
835
- this.cdr.reattach(); // Reattach the change detector
659
+ onPageChanged(event) {
660
+ if (event.page - 1 != this.page()) {
661
+ this.page.set(event.page - 1);
662
+ this.displayedRows.set(new Array(this.dataSource.pageSize));
663
+ this.dataSource.setPage(event.page - 1);
664
+ }
665
+ else if (event.take != this.pageSize()) {
666
+ this.pageSize.set(event.take);
667
+ this.displayedRows.set(new Array(this.dataSource.pageSize));
668
+ this.dataSource.setPageSize(event.take);
669
+ }
836
670
  }
837
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableColumnResizableDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.NgZone }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
838
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.2", type: AXDataTableColumnResizableDirective, selector: "[ax-table-column-resizble]", inputs: { column: ["ax-table-column-resizble", "column"] }, host: { listeners: { "mousedown": "onMouseDown($event)" } }, ngImport: i0 }); }
839
- }
840
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableColumnResizableDirective, decorators: [{
841
- type: Directive,
842
- args: [{
843
- selector: '[ax-table-column-resizble]',
844
- }]
845
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }], propDecorators: { column: [{
846
- type: Input,
847
- args: ['ax-table-column-resizble']
848
- }], onMouseDown: [{
849
- type: HostListener,
850
- args: ['mousedown', ['$event']]
671
+ handleRowDoubleClick(e, item) {
672
+ this.focusedRow = item;
673
+ //
674
+ this.onRowDbClick.emit({
675
+ component: this,
676
+ data: item,
677
+ isUserInteraction: true,
678
+ });
679
+ }
680
+ handleColumnClick(e, column) {
681
+ if (column instanceof AXDataTableTextColumnComponent) {
682
+ const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
683
+ if (!sort) {
684
+ this.dataSource.query.sort.push({
685
+ field: column.dataField,
686
+ dir: 'asc',
687
+ });
688
+ }
689
+ else {
690
+ if (sort.dir == 'asc') {
691
+ sort.dir = 'desc';
692
+ }
693
+ else {
694
+ this.dataSource.query.sort = this.dataSource.query.sort.filter((c) => c != sort);
695
+ }
696
+ }
697
+ this.refresh();
698
+ }
699
+ }
700
+ getSort(column) {
701
+ if (column instanceof AXDataTableTextColumnComponent) {
702
+ const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
703
+ return sort ? (sort.dir == 'asc' ? 'ax-icon-arrow-long-down' : 'ax-icon-arrow-long-up') : undefined;
704
+ }
705
+ return undefined;
706
+ }
707
+ refresh() {
708
+ this.lastIndex = 0;
709
+ this.dataSource.refresh();
710
+ }
711
+ calculateStickyColumnsPositions() {
712
+ let totalWidth = 0;
713
+ let accumulatedWidthFromStart = 0;
714
+ console.log('columns: ', this.columns);
715
+ this.columns.forEach((column) => {
716
+ const width = parseInt(column.width);
717
+ if (!isNaN(width)) {
718
+ totalWidth += width;
719
+ }
720
+ });
721
+ let lastStartColumn;
722
+ this.columns.forEach((column) => {
723
+ const width = parseInt(column.width);
724
+ if (column.fixed === 'start' && !isNaN(width)) {
725
+ column['stickyStart'] = accumulatedWidthFromStart + 'px';
726
+ lastStartColumn = column;
727
+ }
728
+ if (!isNaN(width)) {
729
+ accumulatedWidthFromStart += width;
730
+ }
731
+ });
732
+ if (lastStartColumn)
733
+ lastStartColumn['isLastFixedColumn'] = true;
734
+ let accumulatedWidthFromEnd = 0;
735
+ let firstEndColumn;
736
+ for (let i = this.columns.length - 1; i >= 0; i--) {
737
+ const column = this.columns.get(i);
738
+ const width = parseInt(column.width);
739
+ if (column.fixed === 'end' && !isNaN(width)) {
740
+ column['stickyEnd'] = accumulatedWidthFromEnd + 'px';
741
+ firstEndColumn = column;
742
+ }
743
+ if (!isNaN(width)) {
744
+ accumulatedWidthFromEnd += width;
745
+ }
746
+ }
747
+ if (firstEndColumn)
748
+ firstEndColumn['isFirstFixedColumn'] = true;
749
+ }
750
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
751
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: AXDataTableComponent, selector: "ax-data-table", inputs: { dataSource: "dataSource", rowTemplate: "rowTemplate", emptyTemplate: "emptyTemplate", showHeader: "showHeader", fixedHeader: "fixedHeader", itemHeight: "itemHeight", fetchDataMode: "fetchDataMode", loading: "loading", focusedRow: "focusedRow" }, outputs: { onColumnsOrderChanged: "onColumnsOrderChanged", focusedRowChange: "focusedRowChange", onRowClick: "onRowClick", onRowDbClick: "onRowDbClick" }, host: { attributes: { "ngSkipHydration": "true" } }, providers: [
752
+ {
753
+ provide: AXBaseDataTable,
754
+ useExisting: AXDataTableComponent,
755
+ },
756
+ ], queries: [{ propertyName: "columns", predicate: AXDataTableColumnComponent }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-header\"> </ng-content>\n<div class=\"ax-data-table-wrapper\">\n <table>\n @if (showHeader) {\n <thead [ngClass]=\"{ 'ax-data-table-sticky-header': fixedHeader }\">\n <tr cdkDropList cdkScrollable cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event)\">\n @for (column of columnsList(); track $index) {\n <th\n cdkDrag\n [cdkDragDisabled]=\"column.fixed\"\n cdkDragLockAxis=\"x\"\n class=\"ax-data-table-head-cell\"\n [class.ax-interactive]=\"column.allowSorting\"\n (click)=\"column.allowSorting ? handleColumnClick($event, column) : null\"\n [class.ax-data-table-sticky-header-cell]=\"column.fixed && column.width\"\n [style.width]=\"column.width\"\n [class.sticky-end]=\"column.fixed === 'end'\"\n [class.sticky-start]=\"column.fixed === 'start'\"\n [class.isFirst]=\"column['isFirstFixedColumn']\"\n [class.isLast]=\"column['isLastFixedColumn']\"\n [style.--sticky-start]=\"column['stickyStart']\"\n [style.--sticky-end]=\"column['stickyEnd']\"\n >\n <div class=\"ax-caption\">\n {{ column.caption }}\n @if (getSort(column)) {\n <ax-icon icon=\"ax-icon {{ getSort(column) }}\"></ax-icon>\n }\n </div>\n </th>\n }\n <th></th>\n </tr>\n </thead>\n }\n <tbody>\n @for (row of displayedRows(); track $index) {\n @if (rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: { data: row, rowIndex: $index } }\"> </ng-container>\n } @else {\n <tr\n [class.ax-state-focused]=\"focusedRow && row === focusedRow\"\n [attr.data-index]=\"$index\"\n [class.ax-state-selected]=\"selectedRows.includes(row)\"\n style.height=\"{{ itemHeight }}px\"\n (click)=\"handleRowClick($event, row)\"\n >\n @for (c of columnsList(); track $index) {\n @if (c.cellTemplate) {\n <ng-container *ngTemplateOutlet=\"c.cellTemplate; context: { $implicit: { data: row, rowIndex: $index } }\"> </ng-container>\n } @else {\n <td\n [style.width]=\"c.width\"\n [class.ax-data-table-sticky-body-cell]=\"c.fixed && c.width\"\n [class.sticky-end]=\"c.fixed === 'end'\"\n [class.sticky-start]=\"c.fixed === 'start'\"\n [class.isFirst]=\"c['isFirstFixedColumn']\"\n [class.isLast]=\"c['isLastFixedColumn']\"\n [style.--sticky-start]=\"c['stickyStart']\"\n [style.--sticky-end]=\"c['stickyEnd']\"\n [attr.data-label]=\"c.caption\"\n tabindex=\"0\"\n [class]=\"c.cssClass\"\n >\n @if (row && !isLoading()) {\n <ng-container *ngTemplateOutlet=\"c.template; context: { $implicit: { data: row, rowIndex: $index } }\"></ng-container>\n } @else {\n @if (c.loadingEnabled && loading) {\n <ax-skeleton [animated]=\"loading.animation\"></ax-skeleton>\n }\n }\n </td>\n }\n }\n <td></td>\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ax-table-footer\" #footerContainer>\n <ax-data-pager\n class=\"ax-justify-center md:ax-justify-between\"\n [displayMode]=\"'custom'\"\n (onChanged)=\"onPageChanged($event)\"\n [total]=\"dataSource.totalCount\"\n [size]=\"dataSource.pageSize\"\n >\n <ax-prefix class=\"ax-hidden lg:ax-flex\">\n <ax-data-pager-numeric-selector> </ax-data-pager-numeric-selector>\n <ax-data-pager-page-sizes> </ax-data-pager-page-sizes>\n </ax-prefix>\n <ax-prefix class=\"ax-flex lg:ax-hidden\">\n <ax-data-pager-prev-buttons> </ax-data-pager-prev-buttons>\n <ax-data-pager-input-selector> </ax-data-pager-input-selector>\n <ax-data-pager-next-buttons> </ax-data-pager-next-buttons>\n </ax-prefix>\n <ax-suffix class=\"ax-hidden md:ax-block\">\n <ax-data-pager-info> </ax-data-pager-info>\n </ax-suffix>\n </ax-data-pager>\n <ng-content select=\"ax-footer\"> </ng-content>\n</div>\n", styles: [".ax-dark ax-data-table thead th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-500))!important}.ax-dark ax-data-table tbody tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table tbody tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table tbody tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}.ax-dark ax-data-table tbody tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table tbody tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}@media screen and (min-width: 768px){html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-start{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-start.isLast{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-end{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-end.isFirst{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}}@media screen and (min-width: 768px){html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-start{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-start.isLast{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-end{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-end.isFirst{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}}ax-data-table{display:flex;flex-direction:column;height:100%;width:100%;font-size:.875rem;line-height:1.25rem;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper{overflow:auto;width:100%;flex:1;border-radius:var(--ax-rounded-border-default)}ax-data-table .ax-data-table-wrapper table{display:table;height:100%;width:100%;table-layout:fixed;overflow-x:auto}ax-data-table .ax-data-table-wrapper table thead{overflow:hidden;border-start-end-radius:var(--ax-rounded-border-default);border-start-start-radius:var(--ax-rounded-border-default)}ax-data-table .ax-data-table-wrapper table thead th{border-bottom-width:1px;border-inline-end-width:1px;border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding-inline-start:1rem;padding-inline-end:1rem;padding-top:.75rem;padding-bottom:.75rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}ax-data-table .ax-data-table-wrapper table thead th.ax-interactive{cursor:pointer}ax-data-table .ax-data-table-wrapper table thead th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-200))}ax-data-table .ax-data-table-wrapper table thead th .ax-resize-handle{position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;background:transparent}ax-data-table .ax-data-table-wrapper table thead th .ax-resize-handle:hover{background-color:rgba(var(--ax-color-neutral-300))}ax-data-table .ax-data-table-wrapper table thead th .ax-caption{display:flex;align-items:center;gap:.5rem}ax-data-table .ax-data-table-wrapper table thead th:last-child{border-inline-end-width:0px}ax-data-table .ax-data-table-wrapper table thead.ax-data-table-sticky-header{position:sticky;top:0;background-color:rgba(var(--ax-color-on-surface));border-top:none;border-bottom:none;z-index:3;box-shadow:1px 0 rgba(var(--ax-color-border-default)),0 -1px rgba(var(--ax-color-border-default))}@media screen and (min-width: 768px){ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell{position:sticky;z-index:2;border-inline-start:none;border-inline-end:none}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-start{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-start.isLast{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-end{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-end.isFirst{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}}@media screen and (min-width: 768px){ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell{position:sticky;z-index:2;background-color:rgba(var(--ax-color-surface));border-inline-start:none;border-inline-end:none}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-start{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-start.isLast{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-end{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-end.isFirst{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}}ax-data-table .ax-data-table-wrapper table tbody tr:nth-child(2n) td{background-color:rgba(var(--ax-color-on-surface))}ax-data-table .ax-data-table-wrapper table tbody tr:nth-child(2n) ax-skeleton{width:25%}ax-data-table .ax-data-table-wrapper table tbody tr{height:2.5rem}ax-data-table .ax-data-table-wrapper table tbody tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-400));color:rgba(var(--ax-color-primary-fore))}ax-data-table .ax-data-table-wrapper table tbody td{position:relative;min-width:2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom-width:1px;border-inline-end-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));padding-inline-start:1rem;padding-inline-end:1rem;padding-top:.5rem;padding-bottom:.5rem;vertical-align:middle}ax-data-table .ax-data-table-wrapper table tbody td.ax-index-column{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(var(--ax-color-on-surface));text-align:center}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button.ax-state-disabled{position:relative!important;cursor:not-allowed!important;opacity:.5!important}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column>div{position:absolute;inset-inline-start:0px;top:50%;display:flex;width:100%;transform:translateY(-50%);align-items:center;justify-content:center}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button{position:relative;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--ax-rounded-border-default);border-style:none;border-color:rgba(var(--ax-color-border-default));background-color:transparent;padding:.25rem;line-height:1;color:rgba(var(--ax-color-ghost-fore))}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:hover:not(ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:hover.ax-state-selected,ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:hover.ax-state-disabled){opacity:.75}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:active{opacity:1}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button .ax-ripple{background-color:rgba(var(--ax-color-ghost-fore),.05)}ax-data-table .ax-data-table-wrapper table tbody td:last-child{border-inline-end-width:0px}ax-data-table .ax-data-table-wrapper table tbody td ax-skeleton{height:.875rem;width:33.333333%;border-radius:.375rem}ax-data-table .ax-data-table-wrapper table .sticky-end{inset-inline-end:var(--sticky-end)}ax-data-table .ax-data-table-wrapper table .sticky-start{inset-inline-start:var(--sticky-start)}ax-data-table .ax-table-footer{border-top-width:1px;border-collapse:collapse;overflow:hidden;border-color:rgba(var(--ax-color-border-default));padding-inline-start:.875rem;padding-inline-end:.875rem;padding-top:.5rem;padding-bottom:.5rem}ax-data-table .ax-table-footer .ax-table-info{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between}.ax-data-table-head-cell{border-bottom-width:1px;border-inline-end-width:1px;box-shadow:0 5px 5px -3px rgba(var(--ax-color-primary-900),.2),0 8px 10px 1px rgba(var(--ax-color-primary-900),.14),0 3px 14px 2px rgba(var(--ax-color-primary-900),.12);border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding-inline-start:1rem;padding-inline-end:1rem;padding-top:.75rem;padding-bottom:.75rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}\n"], dependencies: [{ kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title , ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i4$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: i5$1.AXDataPagerComponent, selector: "ax-data-pager", inputs: ["value", "name", "disabled", "readonly", "size", "total", "displayMode"], outputs: ["valueChange", "onValueChanged", "disabledChange", "readonlyChange", "displayModeChange", "onChanged"] }, { kind: "component", type: i5$1.AXDataPagerNextButtonsComponent, selector: "ax-data-pager-next-buttons" }, { kind: "component", type: i5$1.AXDataPagerPrevButtonsComponent, selector: "ax-data-pager-prev-buttons" }, { kind: "component", type: i5$1.AXDataPagerPageSizesComponent, selector: "ax-data-pager-page-sizes", inputs: ["sizes"] }, { kind: "component", type: i5$1.AXDataPagerNumericSelectorComponent, selector: "ax-data-pager-numeric-selector" }, { kind: "component", type: i5$1.AXDataPagerInputSelectorComponent, selector: "ax-data-pager-input-selector" }, { kind: "component", type: i5$1.AXDataPagerInfoComponent, selector: "ax-data-pager-info", inputs: ["text"] }, { kind: "directive", type: i6.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i6.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
757
+ }
758
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableComponent, decorators: [{
759
+ type: Component,
760
+ args: [{ selector: 'ax-data-table', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { ngSkipHydration: 'true' }, inputs: ['dataSource'], providers: [
761
+ {
762
+ provide: AXBaseDataTable,
763
+ useExisting: AXDataTableComponent,
764
+ },
765
+ ], template: "<ng-content select=\"ax-header\"> </ng-content>\n<div class=\"ax-data-table-wrapper\">\n <table>\n @if (showHeader) {\n <thead [ngClass]=\"{ 'ax-data-table-sticky-header': fixedHeader }\">\n <tr cdkDropList cdkScrollable cdkDropListOrientation=\"horizontal\" (cdkDropListDropped)=\"drop($event)\">\n @for (column of columnsList(); track $index) {\n <th\n cdkDrag\n [cdkDragDisabled]=\"column.fixed\"\n cdkDragLockAxis=\"x\"\n class=\"ax-data-table-head-cell\"\n [class.ax-interactive]=\"column.allowSorting\"\n (click)=\"column.allowSorting ? handleColumnClick($event, column) : null\"\n [class.ax-data-table-sticky-header-cell]=\"column.fixed && column.width\"\n [style.width]=\"column.width\"\n [class.sticky-end]=\"column.fixed === 'end'\"\n [class.sticky-start]=\"column.fixed === 'start'\"\n [class.isFirst]=\"column['isFirstFixedColumn']\"\n [class.isLast]=\"column['isLastFixedColumn']\"\n [style.--sticky-start]=\"column['stickyStart']\"\n [style.--sticky-end]=\"column['stickyEnd']\"\n >\n <div class=\"ax-caption\">\n {{ column.caption }}\n @if (getSort(column)) {\n <ax-icon icon=\"ax-icon {{ getSort(column) }}\"></ax-icon>\n }\n </div>\n </th>\n }\n <th></th>\n </tr>\n </thead>\n }\n <tbody>\n @for (row of displayedRows(); track $index) {\n @if (rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: { data: row, rowIndex: $index } }\"> </ng-container>\n } @else {\n <tr\n [class.ax-state-focused]=\"focusedRow && row === focusedRow\"\n [attr.data-index]=\"$index\"\n [class.ax-state-selected]=\"selectedRows.includes(row)\"\n style.height=\"{{ itemHeight }}px\"\n (click)=\"handleRowClick($event, row)\"\n >\n @for (c of columnsList(); track $index) {\n @if (c.cellTemplate) {\n <ng-container *ngTemplateOutlet=\"c.cellTemplate; context: { $implicit: { data: row, rowIndex: $index } }\"> </ng-container>\n } @else {\n <td\n [style.width]=\"c.width\"\n [class.ax-data-table-sticky-body-cell]=\"c.fixed && c.width\"\n [class.sticky-end]=\"c.fixed === 'end'\"\n [class.sticky-start]=\"c.fixed === 'start'\"\n [class.isFirst]=\"c['isFirstFixedColumn']\"\n [class.isLast]=\"c['isLastFixedColumn']\"\n [style.--sticky-start]=\"c['stickyStart']\"\n [style.--sticky-end]=\"c['stickyEnd']\"\n [attr.data-label]=\"c.caption\"\n tabindex=\"0\"\n [class]=\"c.cssClass\"\n >\n @if (row && !isLoading()) {\n <ng-container *ngTemplateOutlet=\"c.template; context: { $implicit: { data: row, rowIndex: $index } }\"></ng-container>\n } @else {\n @if (c.loadingEnabled && loading) {\n <ax-skeleton [animated]=\"loading.animation\"></ax-skeleton>\n }\n }\n </td>\n }\n }\n <td></td>\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ax-table-footer\" #footerContainer>\n <ax-data-pager\n class=\"ax-justify-center md:ax-justify-between\"\n [displayMode]=\"'custom'\"\n (onChanged)=\"onPageChanged($event)\"\n [total]=\"dataSource.totalCount\"\n [size]=\"dataSource.pageSize\"\n >\n <ax-prefix class=\"ax-hidden lg:ax-flex\">\n <ax-data-pager-numeric-selector> </ax-data-pager-numeric-selector>\n <ax-data-pager-page-sizes> </ax-data-pager-page-sizes>\n </ax-prefix>\n <ax-prefix class=\"ax-flex lg:ax-hidden\">\n <ax-data-pager-prev-buttons> </ax-data-pager-prev-buttons>\n <ax-data-pager-input-selector> </ax-data-pager-input-selector>\n <ax-data-pager-next-buttons> </ax-data-pager-next-buttons>\n </ax-prefix>\n <ax-suffix class=\"ax-hidden md:ax-block\">\n <ax-data-pager-info> </ax-data-pager-info>\n </ax-suffix>\n </ax-data-pager>\n <ng-content select=\"ax-footer\"> </ng-content>\n</div>\n", styles: [".ax-dark ax-data-table thead th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-500))!important}.ax-dark ax-data-table tbody tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table tbody tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table tbody tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}.ax-dark ax-data-table tbody tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-data-table tbody tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}@media screen and (min-width: 768px){html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-start{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-start.isLast{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-end{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table thead th.ax-data-table-sticky-header-cell.sticky-end.isFirst{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}}@media screen and (min-width: 768px){html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-start{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-start.isLast{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-end{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}html[dir=rtl] ax-data-table .ax-data-table-wrapper table tbody td.ax-data-table-sticky-body-cell.sticky-end.isFirst{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}}ax-data-table{display:flex;flex-direction:column;height:100%;width:100%;font-size:.875rem;line-height:1.25rem;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper{overflow:auto;width:100%;flex:1;border-radius:var(--ax-rounded-border-default)}ax-data-table .ax-data-table-wrapper table{display:table;height:100%;width:100%;table-layout:fixed;overflow-x:auto}ax-data-table .ax-data-table-wrapper table thead{overflow:hidden;border-start-end-radius:var(--ax-rounded-border-default);border-start-start-radius:var(--ax-rounded-border-default)}ax-data-table .ax-data-table-wrapper table thead th{border-bottom-width:1px;border-inline-end-width:1px;border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding-inline-start:1rem;padding-inline-end:1rem;padding-top:.75rem;padding-bottom:.75rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}ax-data-table .ax-data-table-wrapper table thead th.ax-interactive{cursor:pointer}ax-data-table .ax-data-table-wrapper table thead th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-200))}ax-data-table .ax-data-table-wrapper table thead th .ax-resize-handle{position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;background:transparent}ax-data-table .ax-data-table-wrapper table thead th .ax-resize-handle:hover{background-color:rgba(var(--ax-color-neutral-300))}ax-data-table .ax-data-table-wrapper table thead th .ax-caption{display:flex;align-items:center;gap:.5rem}ax-data-table .ax-data-table-wrapper table thead th:last-child{border-inline-end-width:0px}ax-data-table .ax-data-table-wrapper table thead.ax-data-table-sticky-header{position:sticky;top:0;background-color:rgba(var(--ax-color-on-surface));border-top:none;border-bottom:none;z-index:3;box-shadow:1px 0 rgba(var(--ax-color-border-default)),0 -1px rgba(var(--ax-color-border-default))}@media screen and (min-width: 768px){ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell{position:sticky;z-index:2;border-inline-start:none;border-inline-end:none}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-start{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-start.isLast{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-end{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table thead .ax-data-table-sticky-header-cell.sticky-end.isFirst{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}}@media screen and (min-width: 768px){ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell{position:sticky;z-index:2;background-color:rgba(var(--ax-color-surface));border-inline-start:none;border-inline-end:none}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-start{box-shadow:inset -1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-start.isLast{box-shadow:inset -2px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-end{box-shadow:inset 1px 0 rgba(var(--ax-color-border-default))}ax-data-table .ax-data-table-wrapper table tbody tr .ax-data-table-sticky-body-cell.sticky-end.isFirst{box-shadow:inset 2px 0 rgba(var(--ax-color-border-default))}}ax-data-table .ax-data-table-wrapper table tbody tr:nth-child(2n) td{background-color:rgba(var(--ax-color-on-surface))}ax-data-table .ax-data-table-wrapper table tbody tr:nth-child(2n) ax-skeleton{width:25%}ax-data-table .ax-data-table-wrapper table tbody tr{height:2.5rem}ax-data-table .ax-data-table-wrapper table tbody tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300));color:rgba(var(--ax-color-primary-fore-tint))}ax-data-table .ax-data-table-wrapper table tbody tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-400));color:rgba(var(--ax-color-primary-fore))}ax-data-table .ax-data-table-wrapper table tbody td{position:relative;min-width:2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom-width:1px;border-inline-end-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));padding-inline-start:1rem;padding-inline-end:1rem;padding-top:.5rem;padding-bottom:.5rem;vertical-align:middle}ax-data-table .ax-data-table-wrapper table tbody td.ax-index-column{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(var(--ax-color-on-surface));text-align:center}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button.ax-state-disabled{position:relative!important;cursor:not-allowed!important;opacity:.5!important}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column>div{position:absolute;inset-inline-start:0px;top:50%;display:flex;width:100%;transform:translateY(-50%);align-items:center;justify-content:center}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button{position:relative;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--ax-rounded-border-default);border-style:none;border-color:rgba(var(--ax-color-border-default));background-color:transparent;padding:.25rem;line-height:1;color:rgba(var(--ax-color-ghost-fore))}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:hover:not(ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:hover.ax-state-selected,ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:hover.ax-state-disabled){opacity:.75}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button:active{opacity:1}ax-data-table .ax-data-table-wrapper table tbody td.ax-command-column button .ax-ripple{background-color:rgba(var(--ax-color-ghost-fore),.05)}ax-data-table .ax-data-table-wrapper table tbody td:last-child{border-inline-end-width:0px}ax-data-table .ax-data-table-wrapper table tbody td ax-skeleton{height:.875rem;width:33.333333%;border-radius:.375rem}ax-data-table .ax-data-table-wrapper table .sticky-end{inset-inline-end:var(--sticky-end)}ax-data-table .ax-data-table-wrapper table .sticky-start{inset-inline-start:var(--sticky-start)}ax-data-table .ax-table-footer{border-top-width:1px;border-collapse:collapse;overflow:hidden;border-color:rgba(var(--ax-color-border-default));padding-inline-start:.875rem;padding-inline-end:.875rem;padding-top:.5rem;padding-bottom:.5rem}ax-data-table .ax-table-footer .ax-table-info{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between}.ax-data-table-head-cell{border-bottom-width:1px;border-inline-end-width:1px;box-shadow:0 5px 5px -3px rgba(var(--ax-color-primary-900),.2),0 8px 10px 1px rgba(var(--ax-color-primary-900),.14),0 3px 14px 2px rgba(var(--ax-color-primary-900),.12);border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding-inline-start:1rem;padding-inline-end:1rem;padding-top:.75rem;padding-bottom:.75rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}\n"] }]
766
+ }], propDecorators: { onColumnsOrderChanged: [{
767
+ type: Output
768
+ }], columns: [{
769
+ type: ContentChildren,
770
+ args: [AXDataTableColumnComponent]
771
+ }], rowTemplate: [{
772
+ type: Input
773
+ }], emptyTemplate: [{
774
+ type: Input
775
+ }], showHeader: [{
776
+ type: Input
777
+ }], fixedHeader: [{
778
+ type: Input
779
+ }], itemHeight: [{
780
+ type: Input
781
+ }], fetchDataMode: [{
782
+ type: Input
783
+ }], loading: [{
784
+ type: Input
785
+ }], focusedRow: [{
786
+ type: Input
787
+ }], focusedRowChange: [{
788
+ type: Output
789
+ }], onRowClick: [{
790
+ type: Output
791
+ }], onRowDbClick: [{
792
+ type: Output
793
+ }] } });
794
+
795
+ class AXInfiniteScrollDataTableComponent extends AXBaseDataTable {
796
+ constructor() {
797
+ super(...arguments);
798
+ this.ngZone = inject(NgZone);
799
+ this.onPageChanged = new EventEmitter();
800
+ this.clickSubject = new Subject();
801
+ this.onRowClick = new EventEmitter();
802
+ this.onRowDbClick = new EventEmitter();
803
+ this.showHeader = true;
804
+ this.fetchDataMode = 'auto';
805
+ this.loading = {
806
+ enabled: true,
807
+ animation: true,
808
+ };
809
+ this.isLoading = signal(true);
810
+ this.hasItems = false;
811
+ this.totalRows = 0;
812
+ this.currentPage = 0;
813
+ this.totalPages = 0;
814
+ this.startRowIndex = 0;
815
+ this.lastIndex = 0;
816
+ this.focusedRowChange = new EventEmitter();
817
+ this.itemHeight = 40;
818
+ this.width = '100%';
819
+ this.height = '100%';
820
+ this.onScrolledIndexChanged = new EventEmitter();
821
+ }
822
+ startFixedColumn() {
823
+ return this.columns?.toArray().filter((c) => c.fixed == 'start') ?? [];
824
+ }
825
+ endFixedColumn() {
826
+ return this.columns?.toArray().filter((c) => c.fixed == 'end') ?? [];
827
+ }
828
+ notFixedColumn() {
829
+ return this.columns?.toArray().filter((c) => !c.fixed) ?? [];
830
+ }
831
+ notFixedColumnCount() {
832
+ return this.columns?.toArray().filter((c) => !c.fixed).length ?? 0;
833
+ }
834
+ fixedColumnCount() {
835
+ return this.columns?.toArray().filter((c) => c.fixed).length ?? 0;
836
+ }
837
+ get focusedRow() {
838
+ return this._focusedRow;
839
+ }
840
+ set focusedRow(v) {
841
+ this._focusedRow = v;
842
+ this.focusedRowChange.emit(v);
843
+ }
844
+ trackByIdx(i) {
845
+ return i;
846
+ }
847
+ ngOnInit() {
848
+ super.ngOnInit();
849
+ this.listDataSource = new AXListDataSource({
850
+ source: this.dataSource,
851
+ });
852
+ this.listDataSource.source.onLoadingChanged.subscribe((data) => {
853
+ this.isLoading.set(data);
854
+ });
855
+ this.listDataSource.source.onChanged.subscribe((data) => {
856
+ this.totalRows = data.totalCount;
857
+ this.hasItems = data.totalCount > 0;
858
+ setTimeout(() => {
859
+ this.render();
860
+ }, 100);
861
+ });
862
+ //
863
+ this.clickSubject
864
+ .pipe(buffer(this.clickSubject.pipe(debounceTime(250))), filter((clickArray) => clickArray.length === 2))
865
+ .subscribe((clickArray) => {
866
+ this.handleRowDoubleClick(clickArray[0].event, clickArray[0].item);
867
+ });
868
+ }
869
+ _handleOnscrolledIndexChange(e) {
870
+ this.lastIndex = e;
871
+ this.onScrolledIndexChanged.emit({
872
+ component: this,
873
+ index: this.lastIndex,
874
+ isUserInteraction: true,
875
+ });
876
+ }
877
+ ngDoCheck() {
878
+ //this.copyFixedColumns();
879
+ this.updateHScroll();
880
+ //
881
+ this.updateWidth();
882
+ this.updateHeight();
883
+ //
884
+ this.updateTotalCount();
885
+ }
886
+ updateTotalCount() {
887
+ this.startRowIndex = this.lastIndex;
888
+ if (this.startRowIndex < 1)
889
+ this.startRowIndex = 1;
890
+ if (this.startRowIndex > this.totalRows)
891
+ this.startRowIndex = this.totalRows;
892
+ }
893
+ updateHeight() {
894
+ this.height = `calc(100% - ${(this.headerContainer?.nativeElement.clientHeight ?? 0) + (this.footerContainer?.nativeElement.clientHeight ?? 0)}px)`;
895
+ }
896
+ updateWidth() {
897
+ if (this.columns && this.columns.length) {
898
+ const sumPx = sum(this.columns.toArray().map((c) => (typeof c.width == 'number' ? c.width : Number(c.width.replace('px', '')))));
899
+ this.width = `${Math.max(sumPx, this.getHostElement().clientWidth - 5)}px`;
900
+ }
901
+ }
902
+ updateHScroll() {
903
+ this.ngZone.runOutsideAngular(() => {
904
+ if (this.headerContainer) {
905
+ const headerContainer = this.headerContainer.nativeElement;
906
+ const left = this.scrollableContainer.nativeElement.scrollLeft;
907
+ headerContainer.style.transform = `translateX(${-left}px)`;
908
+ }
909
+ });
910
+ }
911
+ // Function to copy fixed columns
912
+ copyFixedColumns() {
913
+ const originalRows = Array.from(this.viewport._contentWrapper.nativeElement.querySelectorAll('tr'));
914
+ const fixedColumnTable = this.getHostElement().querySelector('.ax-body-fixed-columns > table > tbody');
915
+ fixedColumnTable.querySelectorAll('tr').forEach((n) => n.remove());
916
+ for (const row of originalRows) {
917
+ const fixedCells = Array.from(row.querySelectorAll('[data-fixed="start"]'));
918
+ const fixedRow = document.createElement('tr');
919
+ for (const cell of fixedCells) {
920
+ const clonedCell = cell.cloneNode(true);
921
+ fixedRow.appendChild(clonedCell);
922
+ }
923
+ fixedColumnTable.appendChild(fixedRow);
924
+ }
925
+ const scrollTop = this.getHostElement().querySelector('.cdk-virtual-scrollable').scrollTop;
926
+ fixedColumnTable.style.transform = `translateY(${-scrollTop}px)`;
927
+ }
928
+ render() {
929
+ this.viewport.checkViewportSize();
930
+ this.viewport.scrollToIndex(this.lastIndex);
931
+ this.cdr.markForCheck();
932
+ }
933
+ refresh() {
934
+ this.lastIndex = 0;
935
+ this.listDataSource.refresh();
936
+ }
937
+ handleRowClick(event, item) {
938
+ this.handleRowSingleClick(event, item);
939
+ this.clickSubject.next({ event, item });
940
+ }
941
+ handleRowSingleClick(event, item) {
942
+ if (this.focusedRow == item) {
943
+ this.focusedRow = null;
944
+ }
945
+ else {
946
+ this.focusedRow = item;
947
+ }
948
+ //
949
+ this.onRowClick.emit({
950
+ component: this,
951
+ data: item,
952
+ isUserInteraction: true,
953
+ });
954
+ }
955
+ handleRowDoubleClick(e, item) {
956
+ this.focusedRow = item;
957
+ //
958
+ this.onRowDbClick.emit({
959
+ component: this,
960
+ data: item,
961
+ isUserInteraction: true,
962
+ });
963
+ }
964
+ handleColumnClick(e, column) {
965
+ if (column instanceof AXDataTableTextColumnComponent) {
966
+ const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
967
+ if (!sort) {
968
+ this.dataSource.query.sort.push({
969
+ field: column.dataField,
970
+ dir: 'asc',
971
+ });
972
+ }
973
+ else {
974
+ if (sort.dir == 'asc') {
975
+ sort.dir = 'desc';
976
+ }
977
+ else {
978
+ this.dataSource.query.sort = this.dataSource.query.sort.filter((c) => c != sort);
979
+ }
980
+ }
981
+ this.refresh();
982
+ }
983
+ }
984
+ getSort(column) {
985
+ if (column instanceof AXDataTableTextColumnComponent) {
986
+ const sort = this.dataSource.query.sort.find((c) => c.field == column.dataField);
987
+ return sort ? (sort.dir == 'asc' ? 'ax-icon-arrow-long-down' : 'ax-icon-arrow-long-up') : undefined;
988
+ }
989
+ return undefined;
990
+ }
991
+ _handleOnScroll() {
992
+ this.updateHScroll();
993
+ }
994
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXInfiniteScrollDataTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
995
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.2", type: AXInfiniteScrollDataTableComponent, selector: "ax-infinite-scroll-data-table", inputs: { dataSource: "dataSource", rowTemplate: "rowTemplate", emptyTemplate: "emptyTemplate", showHeader: "showHeader", fetchDataMode: "fetchDataMode", loading: "loading", focusedRow: "focusedRow", itemHeight: "itemHeight" }, outputs: { onPageChanged: "onPageChanged", onRowClick: "onRowClick", onRowDbClick: "onRowDbClick", focusedRowChange: "focusedRowChange", onScrolledIndexChanged: "onScrolledIndexChanged" }, providers: [
996
+ { provide: AXPagedComponent, useExisting: AXInfiniteScrollDataTableComponent },
997
+ {
998
+ provide: AXBaseDataTable,
999
+ useExisting: AXInfiniteScrollDataTableComponent,
1000
+ },
1001
+ ], queries: [{ propertyName: "columns", predicate: AXDataTableColumnComponent }], viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true, static: true }, { propertyName: "headerContainer", first: true, predicate: ["headerContainer"], descendants: true }, { propertyName: "footerContainer", first: true, predicate: ["footerContainer"], descendants: true }, { propertyName: "scrollableContainer", first: true, predicate: ["scrolling"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-header\"> </ng-content>\n<!------------------- Header contents ------------------->\n@if (showHeader) {\n <div class=\"ax-header-content\">\n <div class=\"ax-header-columns\">\n <table tabindex=\"0\" [style.width]=\"width\" #headerContainer>\n <thead>\n <tr>\n @for (c of notFixedColumn(); track c.name) {\n <th\n [class.ax-interactive]=\"c.allowSorting\"\n (click)=\"c.allowSorting ? handleColumnClick($event, c) : null\"\n [style.width]=\"c.width\"\n >\n @if (c.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"c.headerTemplate\"></ng-container>\n } @else {\n <div class=\"ax-caption\">\n {{ c.caption }}\n @if (getSort(c)) {\n <ax-icon icon=\"ax-icon {{ getSort(c) }}\"></ax-icon>\n }\n </div>\n }\n <!-- @if(c.allowResizing)\n {\n <div class=\"ax-resize-handle\" [ax-table-column-resizble]=\"c\"></div>\n } -->\n </th>\n }\n <th></th>\n </tr>\n </thead>\n </table>\n </div>\n </div>\n}\n\n<!------------------- Body contents ------------------->\n<div [style.height]=\"height\" class=\"ax-body-content\">\n <div class=\"ax-body-columns\">\n <div cdkVirtualScrollingElement #scrolling [style.height]=\"'100%'\" (scroll)=\"_handleOnScroll()\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"itemHeight\"\n [style.--item-height]=\"itemHeight + 'px'\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n >\n <table tabindex=\"0\" class=\"ax-table-body ax-relative\" [style.width]=\"width\">\n <colgroup>\n @for (c of notFixedColumn(); track c.name) {\n <col [style.width]=\"c.width\" />\n }\n <col />\n </colgroup>\n <tbody>\n <ng-container\n *cdkVirtualFor=\"let item of listDataSource; templateCacheSize: 100; let i = index; trackBy: trackByIdx; let rIndex = index\"\n >\n <!------------------- custom row template------------------->\n @if (rowTemplate != null) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: { data: item, rowIndex: rIndex } }\"> </ng-container>\n } @else {\n <!------------------- normal row template------------------->\n <tr\n [class.ax-state-focused]=\"focusedRow && item === focusedRow\"\n [attr.data-index]=\"rIndex\"\n [class.ax-state-selected]=\"selectedRows.includes(item)\"\n (click)=\"handleRowClick($event, item)\"\n >\n <!------------------- start fixed column ------------------->\n\n <!------------------- Not fixed column ------------------->\n @for (c of notFixedColumn(); track c.name) {\n <!------------------- custom cell template ------------------->\n @if (c.cellTemplate) {\n <ng-container *ngTemplateOutlet=\"c.cellTemplate; context: { $implicit: { data: item, rowIndex: rIndex } }\">\n </ng-container>\n } @else {\n <!------------------- default cell template ------------------->\n <td [attr.data-label]=\"c.caption\" tabindex=\"0\" [class]=\"c.cssClass\">\n @if (item && !isLoading()) {\n <!------------------- render cell ------------------->\n <ng-container\n *ngTemplateOutlet=\"c.template; context: { $implicit: { data: item, rowIndex: rIndex } }\"\n ></ng-container>\n } @else {\n <!------------------- render loading ------------------->\n @if (c.loadingEnabled && loading) {\n <ax-skeleton [animated]=\"loading.animation\"></ax-skeleton>\n }\n }\n </td>\n }\n }\n <td></td>\n </tr>\n }\n </ng-container>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n<div class=\"ax-table-footer\" #footerContainer>\n <div class=\"ax-table-info\">\n <div>Showing {{ startRowIndex }} of {{ totalRows }} items</div>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"refresh()\">\n <ax-icon icon=\"ax-icon ax-icon-refresh\"></ax-icon>\n </ax-button>\n </div>\n <ng-content select=\"ax-footer\"> </ng-content>\n</div>\n", styles: [".ax-dark ax-infinite-scroll-data-table .ax-header-content th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-500))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}ax-infinite-scroll-data-table{display:block;height:100%;overflow:hidden;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default));font-size:.875rem;line-height:1.25rem}ax-infinite-scroll-data-table table{table-layout:fixed}ax-infinite-scroll-data-table .ax-header-content{position:relative;height:3rem;overflow:hidden}ax-infinite-scroll-data-table .ax-header-content .ax-header-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-infinite-scroll-data-table .ax-header-content .ax-header-fixed-columns th.ax-column-fixed{pointer-events:auto}ax-infinite-scroll-data-table .ax-header-content .ax-header-fixed-columns th:not(.ax-column-fixed){visibility:hidden;background-color:transparent}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns{height:100%}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table{height:100%;overflow:hidden;border-start-end-radius:var(--ax-rounded-border-default);border-start-start-radius:var(--ax-rounded-border-default)}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th{border-bottom-width:1px;border-inline-end-width:1px;border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th.ax-interactive{cursor:pointer}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-200))}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle{position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;background:transparent}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle:hover{background-color:rgba(var(--ax-color-neutral-300))}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th .ax-caption{display:flex;align-items:center;gap:.5rem}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th:last-child{border-inline-end-width:0px}ax-infinite-scroll-data-table .ax-body-content{position:relative}ax-infinite-scroll-data-table .ax-body-content .ax-body-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns{height:100%}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table{border-collapse:collapse}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) td{background-color:rgba(var(--ax-color-on-surface))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) ax-skeleton{width:25%}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr{height:2.5rem}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300));color:rgba(var(--ax-color-primary-fore-tint))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-400));color:rgba(var(--ax-color-primary-fore))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td{position:relative;min-width:2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom-width:1px;border-inline-end-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));padding:.5rem 1rem;vertical-align:middle}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-index-column{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(var(--ax-color-on-surface));text-align:center}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button.ax-state-disabled{position:relative!important;cursor:not-allowed!important;opacity:.5!important}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column>div{position:absolute;inset-inline-start:0px;top:50%;display:flex;width:100%;transform:translateY(-50%);align-items:center;justify-content:center}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button{position:relative;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--ax-rounded-border-default);border-style:none;border-color:rgba(var(--ax-color-border-default));background-color:transparent;padding:.25rem;line-height:1;color:rgba(var(--ax-color-ghost-fore))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover:not(ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-selected,ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-disabled){opacity:.75}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:active{opacity:1}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button .ax-ripple{background-color:rgba(var(--ax-color-ghost-fore),.05)}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td:last-child{border-inline-end-width:0px}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td ax-skeleton{height:.875rem;width:33.333333%;border-radius:.375rem}ax-infinite-scroll-data-table .ax-table-footer{border-collapse:collapse;overflow:hidden;border-top-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem .875rem}ax-infinite-scroll-data-table .ax-table-footer .ax-table-info{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i2$1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i2$1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "directive", type: i2$1.CdkVirtualScrollableElement, selector: "[cdkVirtualScrollingElement]" }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4$1.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }, { kind: "component", type: i3$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1002
+ }
1003
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXInfiniteScrollDataTableComponent, decorators: [{
1004
+ type: Component,
1005
+ args: [{ selector: 'ax-infinite-scroll-data-table', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
1006
+ { provide: AXPagedComponent, useExisting: AXInfiniteScrollDataTableComponent },
1007
+ {
1008
+ provide: AXBaseDataTable,
1009
+ useExisting: AXInfiniteScrollDataTableComponent,
1010
+ },
1011
+ ], inputs: ['dataSource'], template: "<ng-content select=\"ax-header\"> </ng-content>\n<!------------------- Header contents ------------------->\n@if (showHeader) {\n <div class=\"ax-header-content\">\n <div class=\"ax-header-columns\">\n <table tabindex=\"0\" [style.width]=\"width\" #headerContainer>\n <thead>\n <tr>\n @for (c of notFixedColumn(); track c.name) {\n <th\n [class.ax-interactive]=\"c.allowSorting\"\n (click)=\"c.allowSorting ? handleColumnClick($event, c) : null\"\n [style.width]=\"c.width\"\n >\n @if (c.headerTemplate) {\n <ng-container *ngTemplateOutlet=\"c.headerTemplate\"></ng-container>\n } @else {\n <div class=\"ax-caption\">\n {{ c.caption }}\n @if (getSort(c)) {\n <ax-icon icon=\"ax-icon {{ getSort(c) }}\"></ax-icon>\n }\n </div>\n }\n <!-- @if(c.allowResizing)\n {\n <div class=\"ax-resize-handle\" [ax-table-column-resizble]=\"c\"></div>\n } -->\n </th>\n }\n <th></th>\n </tr>\n </thead>\n </table>\n </div>\n </div>\n}\n\n<!------------------- Body contents ------------------->\n<div [style.height]=\"height\" class=\"ax-body-content\">\n <div class=\"ax-body-columns\">\n <div cdkVirtualScrollingElement #scrolling [style.height]=\"'100%'\" (scroll)=\"_handleOnScroll()\">\n <cdk-virtual-scroll-viewport\n [itemSize]=\"itemHeight\"\n [style.--item-height]=\"itemHeight + 'px'\"\n (scrolledIndexChange)=\"_handleOnscrolledIndexChange($event)\"\n >\n <table tabindex=\"0\" class=\"ax-table-body ax-relative\" [style.width]=\"width\">\n <colgroup>\n @for (c of notFixedColumn(); track c.name) {\n <col [style.width]=\"c.width\" />\n }\n <col />\n </colgroup>\n <tbody>\n <ng-container\n *cdkVirtualFor=\"let item of listDataSource; templateCacheSize: 100; let i = index; trackBy: trackByIdx; let rIndex = index\"\n >\n <!------------------- custom row template------------------->\n @if (rowTemplate != null) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: { data: item, rowIndex: rIndex } }\"> </ng-container>\n } @else {\n <!------------------- normal row template------------------->\n <tr\n [class.ax-state-focused]=\"focusedRow && item === focusedRow\"\n [attr.data-index]=\"rIndex\"\n [class.ax-state-selected]=\"selectedRows.includes(item)\"\n (click)=\"handleRowClick($event, item)\"\n >\n <!------------------- start fixed column ------------------->\n\n <!------------------- Not fixed column ------------------->\n @for (c of notFixedColumn(); track c.name) {\n <!------------------- custom cell template ------------------->\n @if (c.cellTemplate) {\n <ng-container *ngTemplateOutlet=\"c.cellTemplate; context: { $implicit: { data: item, rowIndex: rIndex } }\">\n </ng-container>\n } @else {\n <!------------------- default cell template ------------------->\n <td [attr.data-label]=\"c.caption\" tabindex=\"0\" [class]=\"c.cssClass\">\n @if (item && !isLoading()) {\n <!------------------- render cell ------------------->\n <ng-container\n *ngTemplateOutlet=\"c.template; context: { $implicit: { data: item, rowIndex: rIndex } }\"\n ></ng-container>\n } @else {\n <!------------------- render loading ------------------->\n @if (c.loadingEnabled && loading) {\n <ax-skeleton [animated]=\"loading.animation\"></ax-skeleton>\n }\n }\n </td>\n }\n }\n <td></td>\n </tr>\n }\n </ng-container>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </div>\n </div>\n</div>\n<div class=\"ax-table-footer\" #footerContainer>\n <div class=\"ax-table-info\">\n <div>Showing {{ startRowIndex }} of {{ totalRows }} items</div>\n <ax-button look=\"blank\" class=\"ax-sm\" (onClick)=\"refresh()\">\n <ax-icon icon=\"ax-icon ax-icon-refresh\"></ax-icon>\n </ax-button>\n </div>\n <ng-content select=\"ax-footer\"> </ng-content>\n</div>\n", styles: [".ax-dark ax-infinite-scroll-data-table .ax-header-content th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-500))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-900))!important;color:rgba(var(--ax-color-primary-fore))!important}.ax-dark ax-infinite-scroll-data-table .ax-body-content tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-800))!important}ax-infinite-scroll-data-table{display:block;height:100%;overflow:hidden;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default));font-size:.875rem;line-height:1.25rem}ax-infinite-scroll-data-table table{table-layout:fixed}ax-infinite-scroll-data-table .ax-header-content{position:relative;height:3rem;overflow:hidden}ax-infinite-scroll-data-table .ax-header-content .ax-header-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-infinite-scroll-data-table .ax-header-content .ax-header-fixed-columns th.ax-column-fixed{pointer-events:auto}ax-infinite-scroll-data-table .ax-header-content .ax-header-fixed-columns th:not(.ax-column-fixed){visibility:hidden;background-color:transparent}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns{height:100%}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table{height:100%;overflow:hidden;border-start-end-radius:var(--ax-rounded-border-default);border-start-start-radius:var(--ax-rounded-border-default)}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th{border-bottom-width:1px;border-inline-end-width:1px;border-style:solid;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-on-surface));padding:.75rem 1rem;text-align:start;font-weight:500;text-transform:uppercase;position:relative}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th.ax-interactive{cursor:pointer}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th.ax-interactive:hover{background-color:rgba(var(--ax-color-neutral-200))}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle{position:absolute;right:0;top:0;bottom:0;width:4px;cursor:col-resize;background:transparent}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th .ax-resize-handle:hover{background-color:rgba(var(--ax-color-neutral-300))}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th .ax-caption{display:flex;align-items:center;gap:.5rem}ax-infinite-scroll-data-table .ax-header-content .ax-header-columns>table th:last-child{border-inline-end-width:0px}ax-infinite-scroll-data-table .ax-body-content{position:relative}ax-infinite-scroll-data-table .ax-body-content .ax-body-fixed-columns{pointer-events:none;position:absolute;z-index:10}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns{height:100%}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table{border-collapse:collapse}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) td{background-color:rgba(var(--ax-color-on-surface))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr:nth-child(2n) ax-skeleton{width:25%}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr{height:2.5rem}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-200));color:rgba(var(--ax-color-primary-fore-tint))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-focused:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-300));color:rgba(var(--ax-color-primary-fore-tint))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table tr.ax-state-selected:hover td:not(.ax-index-column){background-color:rgba(var(--ax-color-primary-400));color:rgba(var(--ax-color-primary-fore))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td{position:relative;min-width:2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-bottom-width:1px;border-inline-end-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));padding:.5rem 1rem;vertical-align:middle}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-index-column{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:rgba(var(--ax-color-on-surface));text-align:center}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button.ax-state-disabled{position:relative!important;cursor:not-allowed!important;opacity:.5!important}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column>div{position:absolute;inset-inline-start:0px;top:50%;display:flex;width:100%;transform:translateY(-50%);align-items:center;justify-content:center}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button{position:relative;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-radius:var(--ax-rounded-border-default);border-style:none;border-color:rgba(var(--ax-color-border-default));background-color:transparent;padding:.25rem;line-height:1;color:rgba(var(--ax-color-ghost-fore))}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover:not(ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-selected,ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:hover.ax-state-disabled){opacity:.75}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button:active{opacity:1}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td.ax-command-column button .ax-ripple{background-color:rgba(var(--ax-color-ghost-fore),.05)}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td:last-child{border-inline-end-width:0px}ax-infinite-scroll-data-table .ax-body-content .ax-body-columns table td ax-skeleton{height:.875rem;width:33.333333%;border-radius:.375rem}ax-infinite-scroll-data-table .ax-table-footer{border-collapse:collapse;overflow:hidden;border-top-width:1px;border-color:rgba(var(--ax-color-border-default));padding:.5rem .875rem}ax-infinite-scroll-data-table .ax-table-footer .ax-table-info{display:flex;flex:1 1 0%;align-items:center;justify-content:space-between}\n"] }]
1012
+ }], propDecorators: { columns: [{
1013
+ type: ContentChildren,
1014
+ args: [AXDataTableColumnComponent]
1015
+ }], onPageChanged: [{
1016
+ type: Output
1017
+ }], onRowClick: [{
1018
+ type: Output
1019
+ }], onRowDbClick: [{
1020
+ type: Output
1021
+ }], rowTemplate: [{
1022
+ type: Input
1023
+ }], emptyTemplate: [{
1024
+ type: Input
1025
+ }], showHeader: [{
1026
+ type: Input
1027
+ }], fetchDataMode: [{
1028
+ type: Input
1029
+ }], loading: [{
1030
+ type: Input
1031
+ }], focusedRowChange: [{
1032
+ type: Output
1033
+ }], focusedRow: [{
1034
+ type: Input
1035
+ }], itemHeight: [{
1036
+ type: Input
1037
+ }], viewport: [{
1038
+ type: ViewChild,
1039
+ args: [CdkVirtualScrollViewport, { static: true }]
1040
+ }], onScrolledIndexChanged: [{
1041
+ type: Output
1042
+ }], headerContainer: [{
1043
+ type: ViewChild,
1044
+ args: ['headerContainer']
1045
+ }], footerContainer: [{
1046
+ type: ViewChild,
1047
+ args: ['footerContainer']
1048
+ }], scrollableContainer: [{
1049
+ type: ViewChild,
1050
+ args: ['scrolling', { static: true }]
851
1051
  }] } });
852
1052
 
853
1053
  const COMPONENT = [
1054
+ AXInfiniteScrollDataTableComponent,
854
1055
  AXDataTableComponent,
855
1056
  AXDataTableTextColumnComponent,
856
1057
  AXRowIndexColumnComponent,
@@ -872,10 +1073,16 @@ const MODULES = [
872
1073
  AXDropdownModule,
873
1074
  AXFormatModule,
874
1075
  AXRippleDirective,
1076
+ AXDataPagerModule,
1077
+ CdkDropList,
1078
+ CdkDrag,
1079
+ CdkDragPlaceholder,
1080
+ CdkDragHandle,
875
1081
  ];
876
1082
  class AXDataTableModule {
877
1083
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
878
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableModule, declarations: [AXDataTableComponent,
1084
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableModule, declarations: [AXInfiniteScrollDataTableComponent,
1085
+ AXDataTableComponent,
879
1086
  AXDataTableTextColumnComponent,
880
1087
  AXRowIndexColumnComponent,
881
1088
  AXRowSelectColumnComponent,
@@ -892,7 +1099,13 @@ class AXDataTableModule {
892
1099
  AXButtonModule,
893
1100
  AXDropdownModule,
894
1101
  AXFormatModule,
895
- AXRippleDirective], exports: [AXDataTableComponent,
1102
+ AXRippleDirective,
1103
+ AXDataPagerModule,
1104
+ CdkDropList,
1105
+ CdkDrag,
1106
+ CdkDragPlaceholder,
1107
+ CdkDragHandle], exports: [AXInfiniteScrollDataTableComponent,
1108
+ AXDataTableComponent,
896
1109
  AXDataTableTextColumnComponent,
897
1110
  AXRowIndexColumnComponent,
898
1111
  AXRowSelectColumnComponent,
@@ -909,7 +1122,8 @@ class AXDataTableModule {
909
1122
  AXSkeletonModule,
910
1123
  AXButtonModule,
911
1124
  AXDropdownModule,
912
- AXFormatModule] }); }
1125
+ AXFormatModule,
1126
+ AXDataPagerModule] }); }
913
1127
  }
914
1128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImport: i0, type: AXDataTableModule, decorators: [{
915
1129
  type: NgModule,
@@ -925,5 +1139,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.2", ngImpor
925
1139
  * Generated bundle index. Do not edit.
926
1140
  */
927
1141
 
928
- export { AXBaseRowCommandColumnComponent, AXDataTableColumnComponent, AXDataTableColumnResizableDirective, AXDataTableComponent, AXDataTableModule, AXDataTableTextColumnComponent, AXRowCommandColumnComponent, AXRowDropdownCommandColumnComponent, AXRowIndexColumnComponent, AXRowSelectColumnComponent };
1142
+ export { AXBaseRowCommandColumnComponent, AXDataTableColumnComponent, AXDataTableColumnResizableDirective, AXDataTableComponent, AXDataTableModule, AXDataTableTextColumnComponent, AXInfiniteScrollDataTableComponent, AXRowCommandColumnComponent, AXRowDropdownCommandColumnComponent, AXRowIndexColumnComponent, AXRowSelectColumnComponent };
929
1143
  //# sourceMappingURL=acorex-components-data-table.mjs.map