ngx-aur-mat-table 19.0.17 → 19.1.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.
- package/fesm2022/ngx-aur-mat-table.mjs +426 -146
- package/fesm2022/ngx-aur-mat-table.mjs.map +1 -1
- package/lib/model/AurPage.d.ts +20 -0
- package/lib/model/ColumnConfig.d.ts +49 -20
- package/lib/model/PaginatorState.d.ts +12 -0
- package/lib/model/RowStyleFactory.d.ts +15 -0
- package/lib/ngx-aur-mat-table.component.d.ts +40 -10
- package/lib/providers/ServerPageController.d.ts +37 -0
- package/lib/providers/TotalRowProvider.d.ts +0 -2
- package/lib/style-builder/style-builder.d.ts +3 -0
- package/lib/utils/ngx-aur-table-page-event.utils.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
|
@@ -8,7 +8,8 @@ import * as i4 from '@angular/material/paginator';
|
|
|
8
8
|
import { MatPaginator, MatPaginatorModule } from '@angular/material/paginator';
|
|
9
9
|
import { SelectionModel } from '@angular/cdk/collections';
|
|
10
10
|
import { trigger, state, transition, style, animate } from '@angular/animations';
|
|
11
|
-
import { first } from 'rxjs';
|
|
11
|
+
import { first, Subject, EMPTY } from 'rxjs';
|
|
12
|
+
import { tap, switchMap, map, catchError } from 'rxjs/operators';
|
|
12
13
|
import * as i1 from '@angular/common';
|
|
13
14
|
import { CommonModule } from '@angular/common';
|
|
14
15
|
import * as i2 from '@angular/material/icon';
|
|
@@ -43,6 +44,10 @@ class NgxAurTableConfigUtil {
|
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
class NgxAurTablePageEventUtils {
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated Not needed with the `pageSource` API — the table performs the initial
|
|
49
|
+
* load itself. Kept for the legacy manual server-pagination path.
|
|
50
|
+
*/
|
|
46
51
|
static createEmpty(tableConfig) {
|
|
47
52
|
return {
|
|
48
53
|
pageSize: tableConfig.pageableCfg.size,
|
|
@@ -53,6 +58,133 @@ class NgxAurTablePageEventUtils {
|
|
|
53
58
|
}
|
|
54
59
|
}
|
|
55
60
|
|
|
61
|
+
var StyleBuilder;
|
|
62
|
+
(function (StyleBuilder) {
|
|
63
|
+
class Row {
|
|
64
|
+
constructor() {
|
|
65
|
+
this._background = '';
|
|
66
|
+
this._color = '';
|
|
67
|
+
this._border = '';
|
|
68
|
+
this._fontWeight = '';
|
|
69
|
+
}
|
|
70
|
+
static builder() {
|
|
71
|
+
return new Row();
|
|
72
|
+
}
|
|
73
|
+
background(color) {
|
|
74
|
+
this._background = color;
|
|
75
|
+
return this;
|
|
76
|
+
}
|
|
77
|
+
color(color) {
|
|
78
|
+
this._color = color;
|
|
79
|
+
return this;
|
|
80
|
+
}
|
|
81
|
+
border(borderBuilderFn) {
|
|
82
|
+
const borderBuilder = new BorderStyleBuilder();
|
|
83
|
+
this._border = borderBuilderFn(borderBuilder).build();
|
|
84
|
+
return this;
|
|
85
|
+
}
|
|
86
|
+
fontWeight(weight) {
|
|
87
|
+
this._fontWeight = weight;
|
|
88
|
+
return this;
|
|
89
|
+
}
|
|
90
|
+
/** configured text color ('' if unset) — used to toggle `.new-color` */
|
|
91
|
+
get colorValue() {
|
|
92
|
+
return this._color;
|
|
93
|
+
}
|
|
94
|
+
overrideWith(o) {
|
|
95
|
+
const r = new Row();
|
|
96
|
+
r._background = o._background || this._background;
|
|
97
|
+
r._color = o._color || this._color;
|
|
98
|
+
r._border = o._border || this._border;
|
|
99
|
+
r._fontWeight = o._fontWeight || this._fontWeight;
|
|
100
|
+
return r;
|
|
101
|
+
}
|
|
102
|
+
build() {
|
|
103
|
+
let styles = '';
|
|
104
|
+
if (this._background)
|
|
105
|
+
styles += `background: ${this._background}; `;
|
|
106
|
+
if (this._color)
|
|
107
|
+
styles += `color: ${this._color}; `;
|
|
108
|
+
if (this._fontWeight)
|
|
109
|
+
styles += `font-weight: ${this._fontWeight}; `;
|
|
110
|
+
if (this._border)
|
|
111
|
+
styles += `${this._border}`;
|
|
112
|
+
return styles;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
StyleBuilder.Row = Row;
|
|
116
|
+
class BorderStyleBuilder {
|
|
117
|
+
constructor() {
|
|
118
|
+
this._top = '';
|
|
119
|
+
this._bottom = '';
|
|
120
|
+
this._right = '';
|
|
121
|
+
this._left = '';
|
|
122
|
+
}
|
|
123
|
+
top(width, style, color) {
|
|
124
|
+
this._top = `${width} ${style} ${color}`;
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
bottom(width, style, color) {
|
|
128
|
+
this._bottom = `${width} ${style} ${color}`;
|
|
129
|
+
return this;
|
|
130
|
+
}
|
|
131
|
+
right(width, style, color) {
|
|
132
|
+
this._right = `${width} ${style} ${color}`;
|
|
133
|
+
return this;
|
|
134
|
+
}
|
|
135
|
+
left(width, style, color) {
|
|
136
|
+
this._left = `${width} ${style} ${color}`;
|
|
137
|
+
return this;
|
|
138
|
+
}
|
|
139
|
+
allBorders(width, style, color) {
|
|
140
|
+
this._top = this._bottom = this._right = this._left = `${width} ${style} ${color}`;
|
|
141
|
+
return this;
|
|
142
|
+
}
|
|
143
|
+
build() {
|
|
144
|
+
let styles = '';
|
|
145
|
+
if (this._top)
|
|
146
|
+
styles += `border-top: ${this._top}; `;
|
|
147
|
+
if (this._bottom)
|
|
148
|
+
styles += `border-bottom: ${this._bottom}; `;
|
|
149
|
+
if (this._right)
|
|
150
|
+
styles += `border-right: ${this._right}; `;
|
|
151
|
+
if (this._left)
|
|
152
|
+
styles += `border-left: ${this._left}; `;
|
|
153
|
+
return styles;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
StyleBuilder.BorderStyleBuilder = BorderStyleBuilder;
|
|
157
|
+
let BorderStyle;
|
|
158
|
+
(function (BorderStyle) {
|
|
159
|
+
BorderStyle["SOLID"] = "solid";
|
|
160
|
+
BorderStyle["DOTTED"] = "dotted";
|
|
161
|
+
BorderStyle["DASHED"] = "dashed";
|
|
162
|
+
BorderStyle["DOUBLE"] = "double";
|
|
163
|
+
BorderStyle["GROOVE"] = "groove";
|
|
164
|
+
BorderStyle["RIDGE"] = "ridge";
|
|
165
|
+
BorderStyle["INSET"] = "inset";
|
|
166
|
+
BorderStyle["OUTSET"] = "outset";
|
|
167
|
+
BorderStyle["NONE"] = "none";
|
|
168
|
+
BorderStyle["HIDDEN"] = "hidden";
|
|
169
|
+
})(BorderStyle = StyleBuilder.BorderStyle || (StyleBuilder.BorderStyle = {}));
|
|
170
|
+
let FontWeight;
|
|
171
|
+
(function (FontWeight) {
|
|
172
|
+
FontWeight["NORMAL"] = "normal";
|
|
173
|
+
FontWeight["BOLD"] = "bold";
|
|
174
|
+
FontWeight["BOLDER"] = "bolder";
|
|
175
|
+
FontWeight["LIGHTER"] = "lighter";
|
|
176
|
+
FontWeight["W_100"] = "100";
|
|
177
|
+
FontWeight["W_200"] = "200";
|
|
178
|
+
FontWeight["W_300"] = "300";
|
|
179
|
+
FontWeight["W_400"] = "400";
|
|
180
|
+
FontWeight["W_500"] = "500";
|
|
181
|
+
FontWeight["W_600"] = "600";
|
|
182
|
+
FontWeight["W_700"] = "700";
|
|
183
|
+
FontWeight["W_800"] = "800";
|
|
184
|
+
FontWeight["W_900"] = "900";
|
|
185
|
+
})(FontWeight = StyleBuilder.FontWeight || (StyleBuilder.FontWeight = {}));
|
|
186
|
+
})(StyleBuilder || (StyleBuilder = {}));
|
|
187
|
+
|
|
56
188
|
class EmptyValue {
|
|
57
189
|
static { this.SELECTION_CONFIG = {
|
|
58
190
|
enable: false,
|
|
@@ -345,6 +477,24 @@ class TableViewFactory {
|
|
|
345
477
|
}
|
|
346
478
|
}
|
|
347
479
|
|
|
480
|
+
class RowStyleFactory {
|
|
481
|
+
/**
|
|
482
|
+
* Resolves bodyRowCfg.styleCfg into a per-row array indexed by row.id.
|
|
483
|
+
* Returns an empty array when the hook is not configured. Styles are kept raw
|
|
484
|
+
* (un-built StyleBuilder.Row | string) so the component can overrideWith()/build() at render time.
|
|
485
|
+
*/
|
|
486
|
+
static toRowStyles(rows, tableConfig) {
|
|
487
|
+
const cfg = tableConfig.bodyRowCfg?.styleCfg;
|
|
488
|
+
if (!cfg || (!cfg.class && !cfg.style)) {
|
|
489
|
+
return [];
|
|
490
|
+
}
|
|
491
|
+
return rows.map(row => ({
|
|
492
|
+
class: cfg.class ? cfg.class(row) : null,
|
|
493
|
+
style: cfg.style ? cfg.style(row) : null,
|
|
494
|
+
}));
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
|
|
348
498
|
/**
|
|
349
499
|
* Provides functionality to manage the index column in a table.
|
|
350
500
|
* The class can handle index configurations and modify the column array to include an index column.
|
|
@@ -486,10 +636,6 @@ class TotalRowProvider extends AbstractProvider {
|
|
|
486
636
|
this.isEnabled = true;
|
|
487
637
|
this.totals = new Map();
|
|
488
638
|
}
|
|
489
|
-
setStyle() {
|
|
490
|
-
this.style = this.tableConfig.totalRowCfg?.totalRowView?.style;
|
|
491
|
-
return this;
|
|
492
|
-
}
|
|
493
639
|
setTotalRow() {
|
|
494
640
|
this.tableConfig.columnsCfg.forEach(col => {
|
|
495
641
|
if (col.totalConverter) {
|
|
@@ -841,6 +987,80 @@ class TimelineProviderDummy extends TimelineProvider {
|
|
|
841
987
|
}
|
|
842
988
|
}
|
|
843
989
|
|
|
990
|
+
class PaginatorState {
|
|
991
|
+
constructor(_length, _pageIndex) {
|
|
992
|
+
this._length = _length;
|
|
993
|
+
this._pageIndex = _pageIndex;
|
|
994
|
+
}
|
|
995
|
+
get length() {
|
|
996
|
+
return this._length;
|
|
997
|
+
}
|
|
998
|
+
get pageIndex() {
|
|
999
|
+
return this._pageIndex;
|
|
1000
|
+
}
|
|
1001
|
+
static empty() {
|
|
1002
|
+
return new PaginatorState(0, 0);
|
|
1003
|
+
}
|
|
1004
|
+
static of(args) {
|
|
1005
|
+
return new PaginatorState(args.total, args.pageIndex);
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
|
|
1009
|
+
class ServerPageController {
|
|
1010
|
+
constructor(pageSource, callbacks) {
|
|
1011
|
+
this.pageSource = pageSource;
|
|
1012
|
+
this.callbacks = callbacks;
|
|
1013
|
+
this.request$ = new Subject();
|
|
1014
|
+
this.pageIndex = 0;
|
|
1015
|
+
this.pageSize = 0;
|
|
1016
|
+
}
|
|
1017
|
+
start(initial) {
|
|
1018
|
+
this.subscription?.unsubscribe();
|
|
1019
|
+
this.pageIndex = initial.pageIndex ?? 0;
|
|
1020
|
+
this.pageSize = initial.pageSize;
|
|
1021
|
+
this.sort = initial.sort;
|
|
1022
|
+
this.subscription = this.request$
|
|
1023
|
+
.pipe(tap(() => this.callbacks.onLoading(true)), switchMap(req => this.pageSource(req).pipe(map(page => ({ req, page })), catchError(error => {
|
|
1024
|
+
this.callbacks.onLoading(false);
|
|
1025
|
+
this.callbacks.onError(error);
|
|
1026
|
+
return EMPTY;
|
|
1027
|
+
}))))
|
|
1028
|
+
.subscribe(({ req, page }) => {
|
|
1029
|
+
this.callbacks.onLoading(false);
|
|
1030
|
+
this.callbacks.onResult({
|
|
1031
|
+
content: page.content,
|
|
1032
|
+
state: PaginatorState.of({
|
|
1033
|
+
total: page.totalElements,
|
|
1034
|
+
pageIndex: page.number ?? req.pageIndex,
|
|
1035
|
+
}),
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
1038
|
+
this.emit();
|
|
1039
|
+
}
|
|
1040
|
+
emit() {
|
|
1041
|
+
this.request$.next({ pageIndex: this.pageIndex, pageSize: this.pageSize, sort: this.sort });
|
|
1042
|
+
}
|
|
1043
|
+
onPage(event) {
|
|
1044
|
+
this.pageIndex = event.pageIndex;
|
|
1045
|
+
this.pageSize = event.pageSize;
|
|
1046
|
+
this.emit();
|
|
1047
|
+
}
|
|
1048
|
+
onSort(sort) {
|
|
1049
|
+
this.sort = sort;
|
|
1050
|
+
this.pageIndex = 0;
|
|
1051
|
+
this.emit();
|
|
1052
|
+
}
|
|
1053
|
+
reload(opts) {
|
|
1054
|
+
if (opts?.resetPageIndex !== false) {
|
|
1055
|
+
this.pageIndex = 0;
|
|
1056
|
+
}
|
|
1057
|
+
this.emit();
|
|
1058
|
+
}
|
|
1059
|
+
stop() {
|
|
1060
|
+
this.subscription?.unsubscribe();
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
|
|
844
1064
|
class IconViewComponent {
|
|
845
1065
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: IconViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
846
1066
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.17", type: IconViewComponent, isStandalone: false, selector: "lib-icon-view", inputs: { view: "view" }, ngImport: i0, template: "<div [ngClass]=\"{'circle': view?.wrapper}\"\n [style.background-color]=\"view?.wrapper?.color\">\n <mat-icon *ngIf=\"view && view?.display !== 'none'\"\n [matTooltip]=\"view?.tooltip?.toString() || ''\"\n [style.color]=\"view?.color\">\n {{ view?.name }}\n </mat-icon>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] }); }
|
|
@@ -880,21 +1100,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
880
1100
|
}]
|
|
881
1101
|
}] });
|
|
882
1102
|
|
|
883
|
-
class PaginatorState {
|
|
884
|
-
constructor(_length, _pageIndex) {
|
|
885
|
-
this._length = _length;
|
|
886
|
-
this._pageIndex = _pageIndex;
|
|
887
|
-
}
|
|
888
|
-
get length() {
|
|
889
|
-
return this._length;
|
|
890
|
-
}
|
|
891
|
-
get pageIndex() {
|
|
892
|
-
return this._pageIndex;
|
|
893
|
-
}
|
|
894
|
-
static empty() {
|
|
895
|
-
return new PaginatorState(0, 0);
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
1103
|
var ExpandState;
|
|
899
1104
|
(function (ExpandState) {
|
|
900
1105
|
ExpandState["COLLAPSED"] = "collapsed";
|
|
@@ -907,6 +1112,9 @@ class NgxAurMatTableComponent {
|
|
|
907
1112
|
this._customDisplayColumnsEnabled = columns && columns.length > 0;
|
|
908
1113
|
}
|
|
909
1114
|
}
|
|
1115
|
+
get activePaginator() {
|
|
1116
|
+
return this.externalPaginator ?? this.matPaginator;
|
|
1117
|
+
}
|
|
910
1118
|
constructor(viewContainerRef, cdr) {
|
|
911
1119
|
this.viewContainerRef = viewContainerRef;
|
|
912
1120
|
this.cdr = cdr;
|
|
@@ -920,6 +1128,11 @@ class NgxAurMatTableComponent {
|
|
|
920
1128
|
this._customDisplayColumnsEnabled = false;
|
|
921
1129
|
this._tableName = 'unknown-table-name';
|
|
922
1130
|
this.tableView = [];
|
|
1131
|
+
this.rowStyles = [];
|
|
1132
|
+
this._headerStyle = null;
|
|
1133
|
+
this._headerClass = null;
|
|
1134
|
+
this._totalStyle = null;
|
|
1135
|
+
this._totalClass = null;
|
|
923
1136
|
this.tableData = [];
|
|
924
1137
|
this.extendedRowTemplate = null;
|
|
925
1138
|
this.timelineMarkerTemplate = null;
|
|
@@ -937,6 +1150,8 @@ class NgxAurMatTableComponent {
|
|
|
937
1150
|
this.selectionModel = new EventEmitter();
|
|
938
1151
|
//------------------------
|
|
939
1152
|
this.onRowClick = new EventEmitter();
|
|
1153
|
+
this.loadingChange = new EventEmitter();
|
|
1154
|
+
this.pageError = new EventEmitter();
|
|
940
1155
|
/**
|
|
941
1156
|
* return filtered rows
|
|
942
1157
|
*/
|
|
@@ -958,6 +1173,7 @@ class NgxAurMatTableComponent {
|
|
|
958
1173
|
this.indexProvider = new IndexProviderDummy();
|
|
959
1174
|
this.paginationProvider = new PaginationProviderDummy();
|
|
960
1175
|
this.totalRowProvider = new TotalRowProviderDummy();
|
|
1176
|
+
this.hovered = null;
|
|
961
1177
|
this.customSortFunctions = new Map();
|
|
962
1178
|
this.filterStorage = new Map();
|
|
963
1179
|
this._searchText = '';
|
|
@@ -969,10 +1185,39 @@ class NgxAurMatTableComponent {
|
|
|
969
1185
|
if (changes['highlight'] && this.highlight) {
|
|
970
1186
|
this.handleHighlightChange(this.highlight);
|
|
971
1187
|
}
|
|
1188
|
+
if (changes['externalPaginator']) {
|
|
1189
|
+
if (this.externalPaginator) {
|
|
1190
|
+
if (this.isServerMode()) {
|
|
1191
|
+
// Server mode: do NOT bind dataSource.paginator (would slice the loaded page).
|
|
1192
|
+
// Only (re)wire once the controller exists; a first-change arriving before
|
|
1193
|
+
// ngAfterViewInit is handled by startServerController().
|
|
1194
|
+
if (this.serverPageController) {
|
|
1195
|
+
this.subscribeExternalPaginator();
|
|
1196
|
+
if (this.paginatorState) {
|
|
1197
|
+
this.applyExternalPaginatorState(this.paginatorState);
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
else if (!changes['externalPaginator'].firstChange) {
|
|
1202
|
+
// Client mode: bind the external paginator so MatTableDataSource slices through it.
|
|
1203
|
+
// Guard firstChange so we don't call initPaginator() before ngAfterViewInit.
|
|
1204
|
+
this.initPaginator();
|
|
1205
|
+
}
|
|
1206
|
+
}
|
|
1207
|
+
else {
|
|
1208
|
+
// External paginator removed: tear down its page subscription to avoid a leak.
|
|
1209
|
+
this.externalPaginatorSub?.unsubscribe();
|
|
1210
|
+
this.externalPaginatorSub = undefined;
|
|
1211
|
+
// Client mode falls back to the (now-rendered) built-in paginator.
|
|
1212
|
+
if (!this.isServerMode() && !changes['externalPaginator'].firstChange) {
|
|
1213
|
+
this.initPaginator();
|
|
1214
|
+
}
|
|
1215
|
+
}
|
|
1216
|
+
}
|
|
972
1217
|
}
|
|
973
1218
|
resetPaginatorPageIndex() {
|
|
974
|
-
if (this.
|
|
975
|
-
this.
|
|
1219
|
+
if (this.activePaginator) {
|
|
1220
|
+
this.activePaginator.firstPage();
|
|
976
1221
|
}
|
|
977
1222
|
}
|
|
978
1223
|
refreshTable() {
|
|
@@ -1001,17 +1246,33 @@ class NgxAurMatTableComponent {
|
|
|
1001
1246
|
if (!this.tableConfig) {
|
|
1002
1247
|
throw new Error("init inputs [tableConfig] is mandatory!");
|
|
1003
1248
|
}
|
|
1249
|
+
if (this.isServerWiring() && !this.paginatorState) {
|
|
1250
|
+
this.paginatorState = PaginatorState.empty();
|
|
1251
|
+
}
|
|
1004
1252
|
}
|
|
1005
1253
|
// we need this, in order to make pagination work with *ngIf
|
|
1006
1254
|
ngAfterViewInit() {
|
|
1255
|
+
// Must remain unconditional — also covers the externalPaginator first-change case
|
|
1256
|
+
// for client mode (ngOnChanges defers initPaginator() on firstChange).
|
|
1007
1257
|
this.initPaginator();
|
|
1008
1258
|
this.initSortingDataAccessor();
|
|
1009
1259
|
this.resizeColumnOffsetsObserver = new ResizeObserver(() => this.updateColumnOffsets());
|
|
1010
1260
|
this.resizeColumnOffsetsObserver.observe(this.table.nativeElement);
|
|
1261
|
+
if (this.isServerMode()) {
|
|
1262
|
+
this.startServerController();
|
|
1263
|
+
}
|
|
1011
1264
|
}
|
|
1012
1265
|
initPaginator() {
|
|
1013
1266
|
if (this.tableDataSource) {
|
|
1014
|
-
|
|
1267
|
+
// In server mode, do NOT bind the paginator to the data source — MatTableDataSource
|
|
1268
|
+
// would call _updatePaginator(filteredDataLength) and overwrite the server-supplied length.
|
|
1269
|
+
// Pagination is driven by ServerPageController instead.
|
|
1270
|
+
if (this.isServerMode()) {
|
|
1271
|
+
this.tableDataSource.paginator = null;
|
|
1272
|
+
}
|
|
1273
|
+
else {
|
|
1274
|
+
this.tableDataSource.paginator = this.activePaginator;
|
|
1275
|
+
}
|
|
1015
1276
|
}
|
|
1016
1277
|
}
|
|
1017
1278
|
initSortingDataAccessor() {
|
|
@@ -1058,8 +1319,12 @@ class NgxAurMatTableComponent {
|
|
|
1058
1319
|
.bindEventEmitters(this.selected, this.onSelect, this.onDeselect, this.selectionModel);
|
|
1059
1320
|
this.paginationProvider = PaginationProvider.create(this.tableConfig);
|
|
1060
1321
|
this.totalRowProvider = TotalRowProvider.create(this.tableConfig, this.tableDataSource)
|
|
1061
|
-
.setStyle()
|
|
1062
1322
|
.setTotalRow();
|
|
1323
|
+
const _totals = this.totalRowProvider.totals;
|
|
1324
|
+
const _data = this.tableDataSource.data;
|
|
1325
|
+
const _sc = this.tableConfig.totalRowCfg?.styleCfg;
|
|
1326
|
+
this._totalStyle = this.toCss(this.resolveTotal(_sc?.style, _totals, _data) ?? null);
|
|
1327
|
+
this._totalClass = this.resolveTotal(_sc?.class, _totals, _data) ?? null;
|
|
1063
1328
|
this.headerButtonProvider = new HeaderButtonProvider(this.tableConfig.tableHeaderButtonCfg);
|
|
1064
1329
|
this.dragDropProvider = DragDropProvider.create(this.viewContainerRef, this.tableConfig)
|
|
1065
1330
|
.addColumn(this._displayColumns);
|
|
@@ -1084,6 +1349,9 @@ class NgxAurMatTableComponent {
|
|
|
1084
1349
|
this.tableDataSource = MatTableDataSourceFactory.convert(this.tableData, this.tableConfig.columnsCfg);
|
|
1085
1350
|
this._defaultFilterPredicate = this.tableDataSource.filterPredicate;
|
|
1086
1351
|
this.tableView = TableViewFactory.toView(this.tableDataSource.data, this.tableConfig);
|
|
1352
|
+
this.rowStyles = RowStyleFactory.toRowStyles(this.tableDataSource.data, this.tableConfig);
|
|
1353
|
+
this._headerStyle = this.toCss(this.tableConfig.headerRowCfg?.styleCfg?.style);
|
|
1354
|
+
this._headerClass = this.tableConfig.headerRowCfg?.styleCfg?.class ?? null;
|
|
1087
1355
|
if (!this._customDisplayColumnsEnabled) {
|
|
1088
1356
|
this._displayColumns = DisplayColumnsFactory.create(this.tableConfig);
|
|
1089
1357
|
}
|
|
@@ -1130,6 +1398,9 @@ class NgxAurMatTableComponent {
|
|
|
1130
1398
|
}
|
|
1131
1399
|
sortTable(sortParameters) {
|
|
1132
1400
|
this.sort.emit(sortParameters);
|
|
1401
|
+
if (this.isServerMode() && this.serverPageController) {
|
|
1402
|
+
this.serverPageController.onSort(sortParameters);
|
|
1403
|
+
}
|
|
1133
1404
|
// MatTableDataSource обрабатывает sort через RxJS-подписку —
|
|
1134
1405
|
// filteredData обновится в следующем микротаске
|
|
1135
1406
|
Promise.resolve().then(() => {
|
|
@@ -1140,6 +1411,9 @@ class NgxAurMatTableComponent {
|
|
|
1140
1411
|
onPageChangeInternal(event) {
|
|
1141
1412
|
this.updateTimelineBounds();
|
|
1142
1413
|
this.pageChange.emit(event);
|
|
1414
|
+
if (this.isServerMode() && this.serverPageController) {
|
|
1415
|
+
this.serverPageController.onPage({ pageIndex: event.pageIndex, pageSize: event.pageSize });
|
|
1416
|
+
}
|
|
1143
1417
|
}
|
|
1144
1418
|
updateTimelineBounds() {
|
|
1145
1419
|
if (!this.timelineProvider.isEnabled)
|
|
@@ -1176,9 +1450,9 @@ class NgxAurMatTableComponent {
|
|
|
1176
1450
|
if (this.paginatorState)
|
|
1177
1451
|
return data;
|
|
1178
1452
|
// Client-side с пагинацией: вырезаем видимый срез
|
|
1179
|
-
if (this.paginationProvider.isEnabled && this.
|
|
1180
|
-
const start = this.
|
|
1181
|
-
return data.slice(start, start + this.
|
|
1453
|
+
if (this.paginationProvider.isEnabled && this.activePaginator) {
|
|
1454
|
+
const start = this.activePaginator.pageIndex * this.activePaginator.pageSize;
|
|
1455
|
+
return data.slice(start, start + this.activePaginator.pageSize);
|
|
1182
1456
|
}
|
|
1183
1457
|
// Без пагинации
|
|
1184
1458
|
return data;
|
|
@@ -1211,8 +1485,63 @@ class NgxAurMatTableComponent {
|
|
|
1211
1485
|
castSrc(row) {
|
|
1212
1486
|
return row;
|
|
1213
1487
|
}
|
|
1488
|
+
/** StyleBuilder.Row | string | null -> CSS string | null. */
|
|
1489
|
+
toCss(s) {
|
|
1490
|
+
if (s == null)
|
|
1491
|
+
return null;
|
|
1492
|
+
return typeof s === 'string' ? s : s.build();
|
|
1493
|
+
}
|
|
1494
|
+
/** base with `overlay` on top. Builders -> field override; any string -> concat (CSS last-wins). */
|
|
1495
|
+
mergeStyle(base, overlay) {
|
|
1496
|
+
if (base == null)
|
|
1497
|
+
return this.toCss(overlay);
|
|
1498
|
+
if (overlay == null)
|
|
1499
|
+
return this.toCss(base);
|
|
1500
|
+
if (base instanceof StyleBuilder.Row && overlay instanceof StyleBuilder.Row) {
|
|
1501
|
+
return base.overrideWith(overlay).build();
|
|
1502
|
+
}
|
|
1503
|
+
return `${this.toCss(base) ?? ''} ${this.toCss(overlay) ?? ''}`.trim();
|
|
1504
|
+
}
|
|
1505
|
+
/** total hook: static value or (totals, data) => value. */
|
|
1506
|
+
resolveTotal(v, totals, data) {
|
|
1507
|
+
return typeof v === 'function' ? v(totals, data) : v;
|
|
1508
|
+
}
|
|
1509
|
+
hoverActive(row) {
|
|
1510
|
+
const h = this.tableConfig.bodyRowCfg?.hoverCfg;
|
|
1511
|
+
return this.hovered === row && h?.enable !== false;
|
|
1512
|
+
}
|
|
1513
|
+
onRowEnter(row) { this.hovered = row; }
|
|
1514
|
+
onRowLeave(row) { if (this.hovered === row)
|
|
1515
|
+
this.hovered = null; }
|
|
1516
|
+
/** [style] for the body <tr>: base -> hover overlay -> highlight overlay (highlight wins). */
|
|
1517
|
+
rowStyle(row) {
|
|
1518
|
+
let acc = this.rowStyles[row.id]?.style ?? null;
|
|
1519
|
+
if (this.hoverActive(row)) {
|
|
1520
|
+
acc = this.mergeStyle(acc, this.tableConfig.bodyRowCfg?.hoverCfg?.styleCfg?.style ?? null);
|
|
1521
|
+
}
|
|
1522
|
+
if (this.highlighted === row.rowSrc) {
|
|
1523
|
+
acc = this.mergeStyle(acc, this.tableConfig.bodyRowCfg?.clickCfg?.highlightClicked ?? null);
|
|
1524
|
+
}
|
|
1525
|
+
return this.toCss(acc);
|
|
1526
|
+
}
|
|
1527
|
+
rowNgClass(row) {
|
|
1528
|
+
const hover = this.tableConfig.bodyRowCfg?.hoverCfg;
|
|
1529
|
+
const hl = this.tableConfig.bodyRowCfg?.clickCfg?.highlightClicked;
|
|
1530
|
+
const hlHasColor = hl instanceof StyleBuilder.Row ? !!hl.colorValue : !!hl;
|
|
1531
|
+
const cls = {
|
|
1532
|
+
'pointer': hover?.pointer || false,
|
|
1533
|
+
'new-color': this.highlighted === row.rowSrc && hlHasColor,
|
|
1534
|
+
};
|
|
1535
|
+
const custom = this.rowStyles[row.id]?.class;
|
|
1536
|
+
if (custom)
|
|
1537
|
+
cls[custom] = true;
|
|
1538
|
+
const hcls = this.hoverActive(row) ? hover?.styleCfg?.class : null;
|
|
1539
|
+
if (hcls)
|
|
1540
|
+
cls[hcls] = true;
|
|
1541
|
+
return cls;
|
|
1542
|
+
}
|
|
1214
1543
|
rowClick(row) {
|
|
1215
|
-
if (row.rowSrc !== this.highlighted || (row.rowSrc === this.highlighted && !this.tableConfig.clickCfg?.cancelable)) {
|
|
1544
|
+
if (row.rowSrc !== this.highlighted || (row.rowSrc === this.highlighted && !this.tableConfig.bodyRowCfg?.clickCfg?.cancelable)) {
|
|
1216
1545
|
this.onRowClick.emit(row.rowSrc);
|
|
1217
1546
|
this.highlighted = row.rowSrc;
|
|
1218
1547
|
}
|
|
@@ -1224,8 +1553,66 @@ class NgxAurMatTableComponent {
|
|
|
1224
1553
|
getSelectionModel() {
|
|
1225
1554
|
return this.selectionProvider.selection;
|
|
1226
1555
|
}
|
|
1556
|
+
isServerMode() {
|
|
1557
|
+
return !!this.pageSource;
|
|
1558
|
+
}
|
|
1559
|
+
isServerWiring() {
|
|
1560
|
+
return !!this.pageSource || this.tableConfig?.pageableCfg?.mode === 'server';
|
|
1561
|
+
}
|
|
1562
|
+
startServerController() {
|
|
1563
|
+
if (!this.pageSource) {
|
|
1564
|
+
return;
|
|
1565
|
+
}
|
|
1566
|
+
this.serverPageController = new ServerPageController(this.pageSource, {
|
|
1567
|
+
onResult: result => {
|
|
1568
|
+
this.paginatorState = result.state;
|
|
1569
|
+
this.applyExternalPaginatorState(result.state);
|
|
1570
|
+
this.tableData = result.content;
|
|
1571
|
+
this.refreshTable();
|
|
1572
|
+
this.cdr.markForCheck();
|
|
1573
|
+
},
|
|
1574
|
+
onLoading: loading => {
|
|
1575
|
+
this.loadingChange.emit(loading);
|
|
1576
|
+
this.cdr.markForCheck();
|
|
1577
|
+
},
|
|
1578
|
+
onError: error => this.pageError.emit(error),
|
|
1579
|
+
});
|
|
1580
|
+
this.subscribeExternalPaginator();
|
|
1581
|
+
const initialSort = this.matSort?.active ? { active: this.matSort.active, direction: this.matSort.direction } : undefined;
|
|
1582
|
+
this.serverPageController.start({
|
|
1583
|
+
// provider may not be initialized yet (no tableData binding in server mode) — read from config
|
|
1584
|
+
pageSize: this.tableConfig.pageableCfg?.size ?? 20,
|
|
1585
|
+
sort: initialSort,
|
|
1586
|
+
});
|
|
1587
|
+
}
|
|
1588
|
+
subscribeExternalPaginator() {
|
|
1589
|
+
this.externalPaginatorSub?.unsubscribe();
|
|
1590
|
+
if (this.externalPaginator) {
|
|
1591
|
+
this.externalPaginatorSub = this.externalPaginator.page.subscribe(event => this.onPageChangeInternal(event));
|
|
1592
|
+
}
|
|
1593
|
+
}
|
|
1594
|
+
applyExternalPaginatorState(state) {
|
|
1595
|
+
if (this.externalPaginator) {
|
|
1596
|
+
// RISK (spec approach C): OnPush MatPaginator needs CD to reflect imperative changes.
|
|
1597
|
+
this.externalPaginator.length = state.length;
|
|
1598
|
+
this.externalPaginator.pageIndex = state.pageIndex;
|
|
1599
|
+
this.cdr.markForCheck();
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
/** Re-invoke pageSource (server mode). resetPageIndex defaults to true (e.g. external filter changed). */
|
|
1603
|
+
reload(opts) {
|
|
1604
|
+
if (this.isServerMode() && this.serverPageController) {
|
|
1605
|
+
this.serverPageController.reload(opts);
|
|
1606
|
+
}
|
|
1607
|
+
else {
|
|
1608
|
+
// Client mode: re-apply current data/filters.
|
|
1609
|
+
this.refreshTable();
|
|
1610
|
+
}
|
|
1611
|
+
}
|
|
1227
1612
|
ngOnDestroy() {
|
|
1228
1613
|
this.resizeColumnOffsetsObserver.disconnect();
|
|
1614
|
+
this.serverPageController?.stop();
|
|
1615
|
+
this.externalPaginatorSub?.unsubscribe();
|
|
1229
1616
|
}
|
|
1230
1617
|
onDragStart($event, row) {
|
|
1231
1618
|
if (this.selectionProvider.isEnabled && this.dragDropProvider.multiple && this.selectionProvider.selection.selected.length > 1) {
|
|
@@ -1247,7 +1634,7 @@ class NgxAurMatTableComponent {
|
|
|
1247
1634
|
this.dragDropProvider.manager.endDrag();
|
|
1248
1635
|
}
|
|
1249
1636
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.17", ngImport: i0, type: NgxAurMatTableComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1250
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: NgxAurMatTableComponent, isStandalone: false, selector: "aur-mat-table", inputs: { displayColumns: "displayColumns", extraHeaderCellTopTemplate: "extraHeaderCellTopTemplate", extraHeaderCellBottomTemplate: "extraHeaderCellBottomTemplate", tableConfig: "tableConfig", tableData: "tableData", extendedRowTemplate: "extendedRowTemplate", timelineMarkerTemplate: "timelineMarkerTemplate", paginatorState: "paginatorState", isTableBodyHide: "isTableBodyHide", highlight: "highlight" }, outputs: { sort: "sort", pageChange: "pageChange", onRowAction: "onRowAction", selected: "selected", onSelect: "onSelect", onDeselect: "onDeselect", onSelectedRowsAction: "onSelectedRowsAction", selectionModel: "selectionModel", onRowClick: "onRowClick", onFilter: "onFilter", columnOffsets: "columnOffsets", onHeaderButton: "onHeaderButton" }, queries: [{ propertyName: "subFooterRowTemplate", first: true, predicate: NgxTableSubFooterRowDirective, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "rows", predicate: ["rowLink"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aur-mat-table\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && paginationProvider.position === 'bottom'}\">\n <ng-container>\n <!-- Filter -->\n <ng-container *ngIf=\"tableConfig.filterCfg?.enable ?? false\">\n <div class=\"search-container\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchPrefix]\"></ng-content>\n </ng-container>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\n <input matInput (keyup)=\"applySearchFilter($event)\"\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\n style=\"font-size: 18px;\">\n <mat-icon matPrefix>search</mat-icon>\n </mat-form-field>\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchSuffix]\"></ng-content>\n </ng-container>\n </div>\n </ng-container>\n\n\n <div class=\"table-container\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && paginationProvider.position === 'bottom'}\">\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\n class=\"table-settings-button\"\n [style.color]=\"headerButtonProvider.color\"\n [style.background-color]=\"headerButtonProvider.background\"\n (click)=\"onHeaderButton.emit($event)\">\n {{ headerButtonProvider.icon }}\n </mat-icon>\n\n <!-- Table -->\n <table #table mat-table matSort\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\n [dataSource]=\"tableDataSource\"\n (matSortChange)=\"sortTable($event)\"\n [style.height]=\"tableConfig.tableView?.height\"\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\n [style.min-height]=\"tableConfig.tableView?.minHeight\"\n [ngClass]=\"{'hide-table-body': isTableBodyHide}\">\n\n\n <!-- timeline-column-->\n <ng-container *ngIf=\"timelineProvider.isEnabled\" [matColumnDef]=\"timelineProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\">\n <div class=\"aur-timeline-marker-container\">\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineFirstId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.topColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.topGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n <ng-container *ngIf=\"timelineMarkerTemplate; else defaultMarker\">\n <ng-container *ngTemplateOutlet=\"timelineMarkerTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n <ng-template #defaultMarker>\n <div class=\"aur-timeline-marker-default\"\n [style.background-color]=\"timelineProvider.markerColor\">\n </div>\n </ng-template>\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineLastId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n </div>\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></td>\n </ng-container>\n\n <!-- drag-column-->\n <ng-container *ngIf=\"dragDropProvider.isEnabled && dragDropProvider.draggable\" [matColumnDef]=\"dragDropProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </th>\n\n <td mat-cell *matCellDef=\"let element;\" class=\"drag-column\"\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n <lib-icon-view draggable=\"true\"\n class=\"drag-icon\"\n [view]=\"dragDropProvider.dragIconView\"\n (dragstart)=\"onDragStart($event, element)\"\n (dragend)=\"onDragEnd($event, element)\">\n </lib-icon-view>\n\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- index-column-->\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n <lib-column-view [config]=\"indexProvider.headerView\">\n {{ indexProvider.name }}\n </lib-column-view>\n </th>\n\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ element.id + indexProvider.offset }}\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- selection-column-->\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <div class=\"flex-container\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n <div\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\n {{ selectionProvider.selection.selected.length }}\n <span\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ paginatorState?.length ? paginatorState?.length : tableDataSource.filteredData.length }}</span>\n </div>\n\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\n <ng-container *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\n <button mat-icon-button\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"$event.stopPropagation(); selectionProvider.selection.toggle(castSrc(row).rowSrc)\"\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <mat-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\n </mat-checkbox>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- action column -->\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" (click)=\"$event.stopPropagation()\" style=\"cursor: default\"\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n <ng-container *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\n <!-- action with dropdown menu -->\n <ng-container *ngIf=\"action.menu; else directAction\">\n <ng-container *ngIf=\"action.display !== 'none'\">\n <mat-menu #actionMenu=\"matMenu\">\n <ng-container *ngFor=\"let item of action.menu\">\n <button mat-menu-item\n *ngIf=\"item.display !== 'none'\"\n [disabled]=\"item.disabled === 'true'\"\n (click)=\"emitMenuAction(item.action, element.rowSrc)\">\n <mat-icon *ngIf=\"item.icon\" [style.color]=\"item.icon.color\">\n {{ item.icon.name }}\n </mat-icon>\n <span>{{ item.text }}</span>\n </button>\n </ng-container>\n </mat-menu>\n <button mat-icon-button\n [matMenuTriggerFor]=\"actionMenu\"\n [matTooltip]=\"action.icon.tooltip || ''\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </ng-container>\n\n <!-- direct action (existing behavior) -->\n <ng-template #directAction>\n <button mat-icon-button\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-template>\n </ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(rowActionsProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- value-icon-->\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\n\n <!-- if sortable column header -->\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-container>\n\n <!-- else not sortable -->\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-template>\n\n <!-- header value-->\n <ng-template #headerValue>\n <lib-column-view [config]=\"columnConfig.headerView\"\n [value]=\"columnConfig.name\">\n </lib-column-view>\n </ng-template>\n\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <lib-column-view\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\n </lib-column-view>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n {{ totalRowProvider.totals.get(columnConfig.key) ?? '' }}\n </td>\n\n </ng-container>\n\n <!-- extra header top cell-->\n <ng-container *ngFor=\"let extraTopCell of _displayExtraHeaderTopCell; let index = index\"\n [matColumnDef]=\"extraTopCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellTopTemplate; context: {key: extraTopCell.replace(EXTRA_HEADER_CELL_TOP_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n\n <!-- extra header bottom cell-->\n <ng-container *ngFor=\"let extraBottomCell of _displayExtraHeaderBottomCell; let index = index\"\n [matColumnDef]=\"extraBottomCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellBottomTemplate; context: {key: extraBottomCell.replace(EXTRA_HEADER_CELL_BOTTOM_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n <!-- extra header top row-->\n <ng-container *ngIf=\"extraHeaderCellTopTemplate\">\n <tr mat-header-row *matHeaderRowDef=\"_displayExtraHeaderTopCell; sticky: this.tableConfig.stickyCfg?.header\"\n class=\"extra-header-top-row\">\n </tr>\n </ng-container>\n\n <!-- header row-->\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\n </tr>\n\n <!-- extra header bottom row -->\n <ng-container *ngIf=\"extraHeaderCellBottomTemplate\">\n <tr mat-header-row\n *matHeaderRowDef=\"_displayExtraHeaderBottomCell; sticky: this.tableConfig.stickyCfg?.header\">\n </tr>\n </ng-container>\n\n <tr mat-row #rowLink\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, row)\"\n *matRowDef=\"let row; columns: _displayColumns;\"\n (click)=\"rowClick(row)\"\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\n [ngStyle]=\"{\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\n }\">\n </tr>\n\n <!--expanded-row-->\n <ng-container matColumnDef=\"expandedRow\">\n <td mat-cell class=\"expanded-cell\" *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\"\n style=\"padding-right: 0!important;\">\n <div class=\"row-detail\"\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\n <!-- timeline continuation -->\n <div *ngIf=\"timelineProvider.isEnabled\"\n class=\"aur-timeline-continuation\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n <!-- lazy-load of details -->\n <ng-container *ngIf=\"element.rowSrc === highlighted\">\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"extendedRowTemplate\">\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\n </ng-container>\n <!--expanded-row-->\n\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\n [style]=\"totalRowProvider.style\"></tr>\n </ng-container>\n\n <!--sub-footer-row-->\n <ng-container matColumnDef=\"subFooterRow\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\n </ng-container>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subFooterRowTemplate\">\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\n </ng-container>\n <!-- sub-footer-row END-->\n </table>\n </div>\n </ng-container>\n\n <!-- Pagination -->\n @if (this.paginationProvider.isEnabled) {\n <mat-paginator [ngClass]=\"{'hidePaginator': isTableBodyHide}\"\n [pageSizeOptions]=\"paginationProvider.sizes\"\n [pageSize]=\"paginationProvider.size\"\n [style]=\"tableConfig?.pageableCfg?.style\"\n [length]=\"paginatorState?.length\"\n [pageIndex]=\"paginatorState?.pageIndex\"\n (page)=\"onPageChangeInternal($event)\"\n showFirstLastButtons>\n </mat-paginator>\n }\n</div>\n", styles: [".aur-mat-table{display:flex;flex-direction:column}.aur-mat-table.bottom-pagination{height:100%}.aur-mat-table table{border-collapse:collapse}.aur-mat-table .table-container{position:relative}.aur-mat-table .table-container.bottom-pagination{flex-grow:1;overflow:auto}.aur-mat-table th,td{padding-right:4px!important;padding-left:4px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .expanded-row .expanded-cell{padding-right:0!important;padding-left:0!important}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:12px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px;z-index:9999999999}.mat-mdc-header-row th:last-child{padding-right:25px!important}.aur-mat-table .search-container{display:flex;gap:8px;align-items:center}.aur-mat-table .extra-header-top-row th{border-bottom:none}.aur-mat-table .drag-icon{cursor:grab}.hide-table-body tr:not(.mat-mdc-header-row){display:none!important}.hidePaginator{display:none}.aur-mat-table .drag-column{padding-left:8px;padding-right:8px;width:35px}.aur-mat-table .aur-timeline-cell{width:40px;min-width:40px;max-width:40px;padding:0!important}.aur-mat-table .aur-timeline-marker-container{display:flex;flex-direction:column;align-items:center;height:100%;min-height:48px}.aur-mat-table .aur-timeline-line{flex:1;min-height:8px}.aur-mat-table .aur-timeline-marker-default{width:12px;height:12px;border-radius:50%;flex-shrink:0}.aur-mat-table .aur-timeline-continuation{border-left-style:solid;align-self:stretch;margin-left:20px;flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: ColumnViewComponent, selector: "lib-column-view", inputs: ["config", "value"] }, { kind: "component", type: IconViewComponent, selector: "lib-icon-view", inputs: ["view"] }, { kind: "pipe", type: DataPropertyGetterPipe, name: "dataPropertyGetter" }], animations: [
|
|
1637
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.17", type: NgxAurMatTableComponent, isStandalone: false, selector: "aur-mat-table", inputs: { displayColumns: "displayColumns", extraHeaderCellTopTemplate: "extraHeaderCellTopTemplate", extraHeaderCellBottomTemplate: "extraHeaderCellBottomTemplate", tableConfig: "tableConfig", tableData: "tableData", extendedRowTemplate: "extendedRowTemplate", timelineMarkerTemplate: "timelineMarkerTemplate", paginatorState: "paginatorState", pageSource: "pageSource", externalPaginator: "externalPaginator", isTableBodyHide: "isTableBodyHide", highlight: "highlight" }, outputs: { sort: "sort", pageChange: "pageChange", onRowAction: "onRowAction", selected: "selected", onSelect: "onSelect", onDeselect: "onDeselect", onSelectedRowsAction: "onSelectedRowsAction", selectionModel: "selectionModel", onRowClick: "onRowClick", loadingChange: "loadingChange", pageError: "pageError", onFilter: "onFilter", columnOffsets: "columnOffsets", onHeaderButton: "onHeaderButton" }, queries: [{ propertyName: "subFooterRowTemplate", first: true, predicate: NgxTableSubFooterRowDirective, descendants: true }], viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true, read: ElementRef }, { propertyName: "matPaginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "matSort", first: true, predicate: MatSort, descendants: true, static: true }, { propertyName: "rows", predicate: ["rowLink"], descendants: true, read: ElementRef }], usesOnChanges: true, ngImport: i0, template: "<div class=\"aur-mat-table\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && !externalPaginator && paginationProvider.position === 'bottom'}\">\n <ng-container>\n <!-- Filter -->\n <ng-container *ngIf=\"tableConfig.filterCfg?.enable ?? false\">\n <div class=\"search-container\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchPrefix]\"></ng-content>\n </ng-container>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\n <input matInput (keyup)=\"applySearchFilter($event)\"\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\n style=\"font-size: 18px;\">\n <mat-icon matPrefix>search</mat-icon>\n </mat-form-field>\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchSuffix]\"></ng-content>\n </ng-container>\n </div>\n </ng-container>\n\n\n <div class=\"table-container\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && !externalPaginator && paginationProvider.position === 'bottom'}\">\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\n class=\"table-settings-button\"\n [style.color]=\"headerButtonProvider.color\"\n [style.background-color]=\"headerButtonProvider.background\"\n (click)=\"onHeaderButton.emit($event)\">\n {{ headerButtonProvider.icon }}\n </mat-icon>\n\n <!-- Table -->\n <table #table mat-table matSort\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\n [dataSource]=\"tableDataSource\"\n (matSortChange)=\"sortTable($event)\"\n [style.height]=\"tableConfig.tableView?.height\"\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\n [style.min-height]=\"tableConfig.tableView?.minHeight\"\n [ngClass]=\"{'hide-table-body': isTableBodyHide}\">\n\n\n <!-- timeline-column-->\n <ng-container *ngIf=\"timelineProvider.isEnabled\" [matColumnDef]=\"timelineProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\">\n <div class=\"aur-timeline-marker-container\">\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineFirstId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.topColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.topGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n <ng-container *ngIf=\"timelineMarkerTemplate; else defaultMarker\">\n <ng-container *ngTemplateOutlet=\"timelineMarkerTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n <ng-template #defaultMarker>\n <div class=\"aur-timeline-marker-default\"\n [style.background-color]=\"timelineProvider.markerColor\">\n </div>\n </ng-template>\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineLastId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n </div>\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></td>\n </ng-container>\n\n <!-- drag-column-->\n <ng-container *ngIf=\"dragDropProvider.isEnabled && dragDropProvider.draggable\" [matColumnDef]=\"dragDropProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </th>\n\n <td mat-cell *matCellDef=\"let element;\" class=\"drag-column\"\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n <lib-icon-view draggable=\"true\"\n class=\"drag-icon\"\n [view]=\"dragDropProvider.dragIconView\"\n (dragstart)=\"onDragStart($event, element)\"\n (dragend)=\"onDragEnd($event, element)\">\n </lib-icon-view>\n\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- index-column-->\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n <lib-column-view [config]=\"indexProvider.headerView\">\n {{ indexProvider.name }}\n </lib-column-view>\n </th>\n\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ element.id + indexProvider.offset }}\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- selection-column-->\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <div class=\"flex-container\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n <div\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\n {{ selectionProvider.selection.selected.length }}\n <span\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ paginatorState?.length ? paginatorState?.length : tableDataSource.filteredData.length }}</span>\n </div>\n\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\n <ng-container *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\n <button mat-icon-button\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"$event.stopPropagation(); selectionProvider.selection.toggle(castSrc(row).rowSrc)\"\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <mat-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\n </mat-checkbox>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- action column -->\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" (click)=\"$event.stopPropagation()\" style=\"cursor: default\"\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n <ng-container *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\n <!-- action with dropdown menu -->\n <ng-container *ngIf=\"action.menu; else directAction\">\n <ng-container *ngIf=\"action.display !== 'none'\">\n <mat-menu #actionMenu=\"matMenu\">\n <ng-container *ngFor=\"let item of action.menu\">\n <button mat-menu-item\n *ngIf=\"item.display !== 'none'\"\n [disabled]=\"item.disabled === 'true'\"\n (click)=\"emitMenuAction(item.action, element.rowSrc)\">\n <mat-icon *ngIf=\"item.icon\" [style.color]=\"item.icon.color\">\n {{ item.icon.name }}\n </mat-icon>\n <span>{{ item.text }}</span>\n </button>\n </ng-container>\n </mat-menu>\n <button mat-icon-button\n [matMenuTriggerFor]=\"actionMenu\"\n [matTooltip]=\"action.icon.tooltip || ''\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </ng-container>\n\n <!-- direct action (existing behavior) -->\n <ng-template #directAction>\n <button mat-icon-button\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-template>\n </ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(rowActionsProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- value-icon-->\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\n\n <!-- if sortable column header -->\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-container>\n\n <!-- else not sortable -->\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-template>\n\n <!-- header value-->\n <ng-template #headerValue>\n <lib-column-view [config]=\"columnConfig.headerView\"\n [value]=\"columnConfig.name\">\n </lib-column-view>\n </ng-template>\n\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <lib-column-view\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\n </lib-column-view>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n {{ totalRowProvider.totals.get(columnConfig.key) ?? '' }}\n </td>\n\n </ng-container>\n\n <!-- extra header top cell-->\n <ng-container *ngFor=\"let extraTopCell of _displayExtraHeaderTopCell; let index = index\"\n [matColumnDef]=\"extraTopCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellTopTemplate; context: {key: extraTopCell.replace(EXTRA_HEADER_CELL_TOP_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n\n <!-- extra header bottom cell-->\n <ng-container *ngFor=\"let extraBottomCell of _displayExtraHeaderBottomCell; let index = index\"\n [matColumnDef]=\"extraBottomCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellBottomTemplate; context: {key: extraBottomCell.replace(EXTRA_HEADER_CELL_BOTTOM_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n <!-- extra header top row-->\n <ng-container *ngIf=\"extraHeaderCellTopTemplate\">\n <tr mat-header-row *matHeaderRowDef=\"_displayExtraHeaderTopCell; sticky: this.tableConfig.stickyCfg?.header\"\n class=\"extra-header-top-row\">\n </tr>\n </ng-container>\n\n <!-- header row-->\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\"\n [style]=\"_headerStyle\" [ngClass]=\"_headerClass\">\n </tr>\n\n <!-- extra header bottom row -->\n <ng-container *ngIf=\"extraHeaderCellBottomTemplate\">\n <tr mat-header-row\n *matHeaderRowDef=\"_displayExtraHeaderBottomCell; sticky: this.tableConfig.stickyCfg?.header\">\n </tr>\n </ng-container>\n\n <tr mat-row #rowLink\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, row)\"\n *matRowDef=\"let row; columns: _displayColumns;\"\n (click)=\"rowClick(row)\"\n (mouseenter)=\"onRowEnter(row)\"\n (mouseleave)=\"onRowLeave(row)\"\n [ngClass]=\"rowNgClass(row)\"\n [style]=\"rowStyle(row)\">\n </tr>\n\n <!--expanded-row-->\n <ng-container matColumnDef=\"expandedRow\">\n <td mat-cell class=\"expanded-cell\" *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\"\n style=\"padding-right: 0!important;\">\n <div class=\"row-detail\"\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\n <!-- timeline continuation -->\n <div *ngIf=\"timelineProvider.isEnabled\"\n class=\"aur-timeline-continuation\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n <!-- lazy-load of details -->\n <ng-container *ngIf=\"element.rowSrc === highlighted\">\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"extendedRowTemplate\">\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\n </ng-container>\n <!--expanded-row-->\n\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\n [style]=\"_totalStyle\" [ngClass]=\"_totalClass\"></tr>\n </ng-container>\n\n <!--sub-footer-row-->\n <ng-container matColumnDef=\"subFooterRow\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\n </ng-container>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subFooterRowTemplate\">\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\n </ng-container>\n <!-- sub-footer-row END-->\n </table>\n </div>\n </ng-container>\n\n <!-- Pagination -->\n @if (this.paginationProvider.isEnabled && !externalPaginator) {\n <mat-paginator [ngClass]=\"{'hidePaginator': isTableBodyHide}\"\n [pageSizeOptions]=\"paginationProvider.sizes\"\n [pageSize]=\"paginationProvider.size\"\n [style]=\"tableConfig?.pageableCfg?.style\"\n [length]=\"paginatorState?.length\"\n [pageIndex]=\"paginatorState?.pageIndex\"\n (page)=\"onPageChangeInternal($event)\"\n showFirstLastButtons>\n </mat-paginator>\n }\n</div>\n", styles: [".aur-mat-table{display:flex;flex-direction:column}.aur-mat-table.bottom-pagination{height:100%}.aur-mat-table table{border-collapse:collapse}.aur-mat-table .table-container{position:relative}.aur-mat-table .table-container.bottom-pagination{flex-grow:1;overflow:auto}.aur-mat-table th,td{padding-right:4px!important;padding-left:4px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer{cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .expanded-row .expanded-cell{padding-right:0!important;padding-left:0!important}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:12px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px;z-index:9999999999}.mat-mdc-header-row th:last-child{padding-right:25px!important}.aur-mat-table .search-container{display:flex;gap:8px;align-items:center}.aur-mat-table .extra-header-top-row th{border-bottom:none}.aur-mat-table .drag-icon{cursor:grab}.hide-table-body tr:not(.mat-mdc-header-row){display:none!important}.hidePaginator{display:none}.aur-mat-table .drag-column{padding-left:8px;padding-right:8px;width:35px}.aur-mat-table .aur-timeline-cell{width:40px;min-width:40px;max-width:40px;padding:0!important}.aur-mat-table .aur-timeline-marker-container{display:flex;flex-direction:column;align-items:center;height:100%;min-height:48px}.aur-mat-table .aur-timeline-line{flex:1;min-height:8px}.aur-mat-table .aur-timeline-marker-default{width:12px;height:12px;border-radius:50%;flex-shrink:0}.aur-mat-table .aur-timeline-continuation{border-left-style:solid;align-self:stretch;margin-left:20px;flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i3$1.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i3$1.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i3$1.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i3$1.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i3$1.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i3$1.MatFooterCellDef, selector: "[matFooterCellDef]" }, { kind: "directive", type: i3$1.MatFooterRowDef, selector: "[matFooterRowDef]", inputs: ["matFooterRowDef", "matFooterRowDefSticky"] }, { kind: "directive", type: i3$1.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i3$1.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "directive", type: i3$1.MatFooterCell, selector: "mat-footer-cell, td[mat-footer-cell]" }, { kind: "component", type: i3$1.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i3$1.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "component", type: i3$1.MatFooterRow, selector: "mat-footer-row, tr[mat-footer-row]", exportAs: ["matFooterRow"] }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: i10.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: ColumnViewComponent, selector: "lib-column-view", inputs: ["config", "value"] }, { kind: "component", type: IconViewComponent, selector: "lib-icon-view", inputs: ["view"] }, { kind: "pipe", type: DataPropertyGetterPipe, name: "dataPropertyGetter" }], animations: [
|
|
1251
1638
|
trigger('detailExpand', [
|
|
1252
1639
|
state(ExpandState.COLLAPSED, style({ height: '0px', minHeight: '0' })),
|
|
1253
1640
|
state(ExpandState.EXPANDED, style({ height: '*' })),
|
|
@@ -1263,7 +1650,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1263
1650
|
state(ExpandState.EXPANDED, style({ height: '*' })),
|
|
1264
1651
|
transition(`${ExpandState.EXPANDED} <=> ${ExpandState.COLLAPSED}`, animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
|
|
1265
1652
|
]),
|
|
1266
|
-
], standalone: false, template: "<div class=\"aur-mat-table\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && paginationProvider.position === 'bottom'}\">\n <ng-container>\n <!-- Filter -->\n <ng-container *ngIf=\"tableConfig.filterCfg?.enable ?? false\">\n <div class=\"search-container\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchPrefix]\"></ng-content>\n </ng-container>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\n <input matInput (keyup)=\"applySearchFilter($event)\"\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\n style=\"font-size: 18px;\">\n <mat-icon matPrefix>search</mat-icon>\n </mat-form-field>\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchSuffix]\"></ng-content>\n </ng-container>\n </div>\n </ng-container>\n\n\n <div class=\"table-container\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && paginationProvider.position === 'bottom'}\">\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\n class=\"table-settings-button\"\n [style.color]=\"headerButtonProvider.color\"\n [style.background-color]=\"headerButtonProvider.background\"\n (click)=\"onHeaderButton.emit($event)\">\n {{ headerButtonProvider.icon }}\n </mat-icon>\n\n <!-- Table -->\n <table #table mat-table matSort\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\n [dataSource]=\"tableDataSource\"\n (matSortChange)=\"sortTable($event)\"\n [style.height]=\"tableConfig.tableView?.height\"\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\n [style.min-height]=\"tableConfig.tableView?.minHeight\"\n [ngClass]=\"{'hide-table-body': isTableBodyHide}\">\n\n\n <!-- timeline-column-->\n <ng-container *ngIf=\"timelineProvider.isEnabled\" [matColumnDef]=\"timelineProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\">\n <div class=\"aur-timeline-marker-container\">\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineFirstId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.topColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.topGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n <ng-container *ngIf=\"timelineMarkerTemplate; else defaultMarker\">\n <ng-container *ngTemplateOutlet=\"timelineMarkerTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n <ng-template #defaultMarker>\n <div class=\"aur-timeline-marker-default\"\n [style.background-color]=\"timelineProvider.markerColor\">\n </div>\n </ng-template>\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineLastId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n </div>\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></td>\n </ng-container>\n\n <!-- drag-column-->\n <ng-container *ngIf=\"dragDropProvider.isEnabled && dragDropProvider.draggable\" [matColumnDef]=\"dragDropProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </th>\n\n <td mat-cell *matCellDef=\"let element;\" class=\"drag-column\"\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n <lib-icon-view draggable=\"true\"\n class=\"drag-icon\"\n [view]=\"dragDropProvider.dragIconView\"\n (dragstart)=\"onDragStart($event, element)\"\n (dragend)=\"onDragEnd($event, element)\">\n </lib-icon-view>\n\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- index-column-->\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n <lib-column-view [config]=\"indexProvider.headerView\">\n {{ indexProvider.name }}\n </lib-column-view>\n </th>\n\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ element.id + indexProvider.offset }}\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- selection-column-->\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <div class=\"flex-container\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n <div\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\n {{ selectionProvider.selection.selected.length }}\n <span\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ paginatorState?.length ? paginatorState?.length : tableDataSource.filteredData.length }}</span>\n </div>\n\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\n <ng-container *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\n <button mat-icon-button\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"$event.stopPropagation(); selectionProvider.selection.toggle(castSrc(row).rowSrc)\"\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <mat-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\n </mat-checkbox>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- action column -->\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" (click)=\"$event.stopPropagation()\" style=\"cursor: default\"\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n <ng-container *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\n <!-- action with dropdown menu -->\n <ng-container *ngIf=\"action.menu; else directAction\">\n <ng-container *ngIf=\"action.display !== 'none'\">\n <mat-menu #actionMenu=\"matMenu\">\n <ng-container *ngFor=\"let item of action.menu\">\n <button mat-menu-item\n *ngIf=\"item.display !== 'none'\"\n [disabled]=\"item.disabled === 'true'\"\n (click)=\"emitMenuAction(item.action, element.rowSrc)\">\n <mat-icon *ngIf=\"item.icon\" [style.color]=\"item.icon.color\">\n {{ item.icon.name }}\n </mat-icon>\n <span>{{ item.text }}</span>\n </button>\n </ng-container>\n </mat-menu>\n <button mat-icon-button\n [matMenuTriggerFor]=\"actionMenu\"\n [matTooltip]=\"action.icon.tooltip || ''\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </ng-container>\n\n <!-- direct action (existing behavior) -->\n <ng-template #directAction>\n <button mat-icon-button\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-template>\n </ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(rowActionsProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- value-icon-->\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\n\n <!-- if sortable column header -->\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-container>\n\n <!-- else not sortable -->\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-template>\n\n <!-- header value-->\n <ng-template #headerValue>\n <lib-column-view [config]=\"columnConfig.headerView\"\n [value]=\"columnConfig.name\">\n </lib-column-view>\n </ng-template>\n\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <lib-column-view\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\n </lib-column-view>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n {{ totalRowProvider.totals.get(columnConfig.key) ?? '' }}\n </td>\n\n </ng-container>\n\n <!-- extra header top cell-->\n <ng-container *ngFor=\"let extraTopCell of _displayExtraHeaderTopCell; let index = index\"\n [matColumnDef]=\"extraTopCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellTopTemplate; context: {key: extraTopCell.replace(EXTRA_HEADER_CELL_TOP_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n\n <!-- extra header bottom cell-->\n <ng-container *ngFor=\"let extraBottomCell of _displayExtraHeaderBottomCell; let index = index\"\n [matColumnDef]=\"extraBottomCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellBottomTemplate; context: {key: extraBottomCell.replace(EXTRA_HEADER_CELL_BOTTOM_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n <!-- extra header top row-->\n <ng-container *ngIf=\"extraHeaderCellTopTemplate\">\n <tr mat-header-row *matHeaderRowDef=\"_displayExtraHeaderTopCell; sticky: this.tableConfig.stickyCfg?.header\"\n class=\"extra-header-top-row\">\n </tr>\n </ng-container>\n\n <!-- header row-->\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\">\n </tr>\n\n <!-- extra header bottom row -->\n <ng-container *ngIf=\"extraHeaderCellBottomTemplate\">\n <tr mat-header-row\n *matHeaderRowDef=\"_displayExtraHeaderBottomCell; sticky: this.tableConfig.stickyCfg?.header\">\n </tr>\n </ng-container>\n\n <tr mat-row #rowLink\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, row)\"\n *matRowDef=\"let row; columns: _displayColumns;\"\n (click)=\"rowClick(row)\"\n [ngClass]=\"{'pointer': tableConfig.clickCfg?.pointer || false, 'new-color': highlighted===row.rowSrc && tableConfig?.clickCfg?.highlightClicked?.color}\"\n [ngStyle]=\"{\n 'color': highlighted===row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.color : undefined,\n 'background-color': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.background : undefined,\n 'border': highlighted === row.rowSrc? tableConfig?.clickCfg?.highlightClicked?.border : undefined\n }\">\n </tr>\n\n <!--expanded-row-->\n <ng-container matColumnDef=\"expandedRow\">\n <td mat-cell class=\"expanded-cell\" *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\"\n style=\"padding-right: 0!important;\">\n <div class=\"row-detail\"\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\n <!-- timeline continuation -->\n <div *ngIf=\"timelineProvider.isEnabled\"\n class=\"aur-timeline-continuation\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n <!-- lazy-load of details -->\n <ng-container *ngIf=\"element.rowSrc === highlighted\">\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"extendedRowTemplate\">\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\n </ng-container>\n <!--expanded-row-->\n\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\n [style]=\"totalRowProvider.style\"></tr>\n </ng-container>\n\n <!--sub-footer-row-->\n <ng-container matColumnDef=\"subFooterRow\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\n </ng-container>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subFooterRowTemplate\">\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\n </ng-container>\n <!-- sub-footer-row END-->\n </table>\n </div>\n </ng-container>\n\n <!-- Pagination -->\n @if (this.paginationProvider.isEnabled) {\n <mat-paginator [ngClass]=\"{'hidePaginator': isTableBodyHide}\"\n [pageSizeOptions]=\"paginationProvider.sizes\"\n [pageSize]=\"paginationProvider.size\"\n [style]=\"tableConfig?.pageableCfg?.style\"\n [length]=\"paginatorState?.length\"\n [pageIndex]=\"paginatorState?.pageIndex\"\n (page)=\"onPageChangeInternal($event)\"\n showFirstLastButtons>\n </mat-paginator>\n }\n</div>\n", styles: [".aur-mat-table{display:flex;flex-direction:column}.aur-mat-table.bottom-pagination{height:100%}.aur-mat-table table{border-collapse:collapse}.aur-mat-table .table-container{position:relative}.aur-mat-table .table-container.bottom-pagination{flex-grow:1;overflow:auto}.aur-mat-table th,td{padding-right:4px!important;padding-left:4px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer:hover{background-color:#f2f2f2;cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .expanded-row .expanded-cell{padding-right:0!important;padding-left:0!important}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:12px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px;z-index:9999999999}.mat-mdc-header-row th:last-child{padding-right:25px!important}.aur-mat-table .search-container{display:flex;gap:8px;align-items:center}.aur-mat-table .extra-header-top-row th{border-bottom:none}.aur-mat-table .drag-icon{cursor:grab}.hide-table-body tr:not(.mat-mdc-header-row){display:none!important}.hidePaginator{display:none}.aur-mat-table .drag-column{padding-left:8px;padding-right:8px;width:35px}.aur-mat-table .aur-timeline-cell{width:40px;min-width:40px;max-width:40px;padding:0!important}.aur-mat-table .aur-timeline-marker-container{display:flex;flex-direction:column;align-items:center;height:100%;min-height:48px}.aur-mat-table .aur-timeline-line{flex:1;min-height:8px}.aur-mat-table .aur-timeline-marker-default{width:12px;height:12px;border-radius:50%;flex-shrink:0}.aur-mat-table .aur-timeline-continuation{border-left-style:solid;align-self:stretch;margin-left:20px;flex-shrink:0}\n"] }]
|
|
1653
|
+
], standalone: false, template: "<div class=\"aur-mat-table\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && !externalPaginator && paginationProvider.position === 'bottom'}\">\n <ng-container>\n <!-- Filter -->\n <ng-container *ngIf=\"tableConfig.filterCfg?.enable ?? false\">\n <div class=\"search-container\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchPrefix]\"></ng-content>\n </ng-container>\n <mat-form-field appearance=\"outline\" subscriptSizing=\"dynamic\">\n <mat-label>{{ tableConfig.filterCfg?.label }}</mat-label>\n <input matInput (keyup)=\"applySearchFilter($event)\"\n placeholder=\"{{tableConfig.filterCfg?.placeholder}}\"\n style=\"font-size: 18px;\">\n <mat-icon matPrefix>search</mat-icon>\n </mat-form-field>\n <ng-container>\n <ng-content select=\"[ngxAurTableSearchSuffix]\"></ng-content>\n </ng-container>\n </div>\n </ng-container>\n\n\n <div class=\"table-container\"\n [ngClass]=\"{'bottom-pagination': paginationProvider.isEnabled && !externalPaginator && paginationProvider.position === 'bottom'}\">\n <mat-icon *ngIf=\"headerButtonProvider.isEnabled\"\n class=\"table-settings-button\"\n [style.color]=\"headerButtonProvider.color\"\n [style.background-color]=\"headerButtonProvider.background\"\n (click)=\"onHeaderButton.emit($event)\">\n {{ headerButtonProvider.icon }}\n </mat-icon>\n\n <!-- Table -->\n <table #table mat-table matSort\n [multiTemplateDataRows]=\"extendedRowTemplate !== null\"\n [dataSource]=\"tableDataSource\"\n (matSortChange)=\"sortTable($event)\"\n [style.height]=\"tableConfig.tableView?.height\"\n [style.max-height]=\"tableConfig.tableView?.maxHeight\"\n [style.min-height]=\"tableConfig.tableView?.minHeight\"\n [ngClass]=\"{'hide-table-body': isTableBodyHide}\">\n\n\n <!-- timeline-column-->\n <ng-container *ngIf=\"timelineProvider.isEnabled\" [matColumnDef]=\"timelineProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\">\n <div class=\"aur-timeline-marker-container\">\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineFirstId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.topColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.topGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n <ng-container *ngIf=\"timelineMarkerTemplate; else defaultMarker\">\n <ng-container *ngTemplateOutlet=\"timelineMarkerTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n <ng-template #defaultMarker>\n <div class=\"aur-timeline-marker-default\"\n [style.background-color]=\"timelineProvider.markerColor\">\n </div>\n </ng-template>\n\n <div class=\"aur-timeline-line\"\n *ngIf=\"element.id !== _timelineLastId\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n\n </div>\n </td>\n <td mat-footer-cell *matFooterCellDef class=\"aur-timeline-cell\"\n [style.width]=\"timelineProvider.size?.width\"\n [style.min-width]=\"timelineProvider.size?.minWidth\"\n [style.max-width]=\"timelineProvider.size?.maxWidth\"></td>\n </ng-container>\n\n <!-- drag-column-->\n <ng-container *ngIf=\"dragDropProvider.isEnabled && dragDropProvider.draggable\" [matColumnDef]=\"dragDropProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </th>\n\n <td mat-cell *matCellDef=\"let element;\" class=\"drag-column\"\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n <lib-icon-view draggable=\"true\"\n class=\"drag-icon\"\n [view]=\"dragDropProvider.dragIconView\"\n (dragstart)=\"onDragStart($event, element)\"\n (dragend)=\"onDragEnd($event, element)\">\n </lib-icon-view>\n\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"dragDropProvider.size?.width\"\n [style.min-width]=\"dragDropProvider.size?.minWidth\"\n [style.max-width]=\"dragDropProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- index-column-->\n <ng-container *ngIf=\"indexProvider.isEnabled\" [matColumnDef]=\"indexProvider.COLUMN_NAME\">\n\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n <lib-column-view [config]=\"indexProvider.headerView\">\n {{ indexProvider.name }}\n </lib-column-view>\n </th>\n\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ element.id + indexProvider.offset }}\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"indexProvider.size?.width\"\n [style.min-width]=\"indexProvider.size?.minWidth\"\n [style.max-width]=\"indexProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(indexProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- selection-column-->\n <ng-container [matColumnDef]=\"selectionProvider.COLUMN_NAME\" *ngIf=\"selectionProvider.isEnabled\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <div class=\"flex-container\">\n <mat-checkbox (change)=\"$event ? masterToggle() : null\"\n [checked]=\"selectionProvider.selection.hasValue() && isAllSelected()\"\n [indeterminate]=\"selectionProvider.selection.hasValue() && !isAllSelected()\">\n </mat-checkbox>\n <div\n *ngIf=\"tableConfig.selectionCfg?.showSelectedCount && selectionProvider.selection.hasValue()\">\n {{ selectionProvider.selection.selected.length }}\n <span\n *ngIf=\"tableConfig.selectionCfg?.showTotalCount !== false\">/{{ paginatorState?.length ? paginatorState?.length : tableDataSource.filteredData.length }}</span>\n </div>\n\n <div *ngIf=\"selectionProvider.selection.hasValue() && tableConfig?.selectionCfg?.actions\">\n <ng-container *ngFor=\"let action of tableConfig.selectionCfg!.actions\">\n <button mat-icon-button\n (click)=\"emitSelectedRowsAction(action.action, selectionProvider.selection.selected)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </div>\n </div>\n\n </th>\n <td mat-cell *matCellDef=\"let row\"\n (click)=\"$event.stopPropagation(); selectionProvider.selection.toggle(castSrc(row).rowSrc)\"\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n <mat-checkbox (click)=\"$event.stopPropagation()\"\n (change)=\"$event ? selectionProvider.selection.toggle(castSrc(row).rowSrc) : null\"\n [checked]=\"selectionProvider.selection.isSelected(castSrc(row).rowSrc)\">\n </mat-checkbox>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"selectionProvider.size?.width\"\n [style.min-width]=\"selectionProvider.size?.minWidth\"\n [style.max-width]=\"selectionProvider.size?.maxWidth\">\n </td>\n </ng-container>\n\n <!-- action column -->\n <ng-container *ngIf=\"rowActionsProvider.isEnabled\" [matColumnDef]=\"rowActionsProvider.COLUMN_NAME\">\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\"></th>\n <td mat-cell *matCellDef=\"let element\" (click)=\"$event.stopPropagation()\" style=\"cursor: default\"\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n <ng-container *ngFor=\"let action of rowActionsProvider.actionView.get(element.id)\">\n <!-- action with dropdown menu -->\n <ng-container *ngIf=\"action.menu; else directAction\">\n <ng-container *ngIf=\"action.display !== 'none'\">\n <mat-menu #actionMenu=\"matMenu\">\n <ng-container *ngFor=\"let item of action.menu\">\n <button mat-menu-item\n *ngIf=\"item.display !== 'none'\"\n [disabled]=\"item.disabled === 'true'\"\n (click)=\"emitMenuAction(item.action, element.rowSrc)\">\n <mat-icon *ngIf=\"item.icon\" [style.color]=\"item.icon.color\">\n {{ item.icon.name }}\n </mat-icon>\n <span>{{ item.text }}</span>\n </button>\n </ng-container>\n </mat-menu>\n <button mat-icon-button\n [matMenuTriggerFor]=\"actionMenu\"\n [matTooltip]=\"action.icon.tooltip || ''\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-container>\n </ng-container>\n\n <!-- direct action (existing behavior) -->\n <ng-template #directAction>\n <button mat-icon-button\n (click)=\"emitRowAction(action.action, element.rowSrc, $event)\"\n [matTooltip]=\"action.icon.tooltip || ''\"\n *ngIf=\"action.display !== 'none'\">\n <mat-icon [style.color]=\"action.icon.color\">\n {{ action.icon.name }}\n </mat-icon>\n </button>\n </ng-template>\n </ng-container>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"rowActionsProvider.size?.width\"\n [style.min-width]=\"rowActionsProvider.size?.minWidth\"\n [style.max-width]=\"rowActionsProvider.size?.maxWidth\">\n {{ totalRowProvider.totals.get(rowActionsProvider.COLUMN_NAME) ?? '' }}\n </td>\n </ng-container>\n\n <!-- value-icon-->\n <ng-container *ngFor=\"let columnConfig of tableConfig.columnsCfg\" [matColumnDef]=\"columnConfig.key\">\n\n <!-- if sortable column header -->\n <ng-container *ngIf=\"columnConfig.sort && columnConfig.sort.enable; else notSortable\">\n <th mat-header-cell *matHeaderCellDef [mat-sort-header]=\"columnConfig.key\"\n [arrowPosition]=\"columnConfig.sort.position === 'right' ? 'before' : 'after'\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-container>\n\n <!-- else not sortable -->\n <ng-template #notSortable>\n <th mat-header-cell *matHeaderCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <ng-container *ngTemplateOutlet=\"headerValue\"></ng-container>\n </th>\n </ng-template>\n\n <!-- header value-->\n <ng-template #headerValue>\n <lib-column-view [config]=\"columnConfig.headerView\"\n [value]=\"columnConfig.name\">\n </lib-column-view>\n </ng-template>\n\n <!-- column value \u043F\u043E\u043B\u0443\u0447\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043A\u043E\u043B\u043E\u043D\u043E\u043A \u043D\u0443\u0436\u043D\u043E \u0447\u0435\u0440\u0435\u0437 getView(rowIndex, columnConfig.key) \u0442\u0430\u043C \u043D\u0430\u0445\u043E\u0434\u044F\u0442\u0441\u044F \u0443\u0436\u0435\n \u043F\u043E\u0434\u0433\u043E\u0442\u043E\u0432\u043B\u0435\u043D\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F-->\n <td mat-cell *matCellDef=\"let element;\"\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n <lib-column-view\n [config]=\"tableView[element.id]?.get(columnConfig.key)\"\n [value]=\"element | dataPropertyGetter: columnConfig.key\">\n </lib-column-view>\n </td>\n\n <td mat-footer-cell *matFooterCellDef\n [style.width]=\"columnConfig.size?.width\"\n [style.min-width]=\"columnConfig.size?.minWidth\"\n [style.max-width]=\"columnConfig.size?.maxWidth\">\n {{ totalRowProvider.totals.get(columnConfig.key) ?? '' }}\n </td>\n\n </ng-container>\n\n <!-- extra header top cell-->\n <ng-container *ngFor=\"let extraTopCell of _displayExtraHeaderTopCell; let index = index\"\n [matColumnDef]=\"extraTopCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellTopTemplate; context: {key: extraTopCell.replace(EXTRA_HEADER_CELL_TOP_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n\n <!-- extra header bottom cell-->\n <ng-container *ngFor=\"let extraBottomCell of _displayExtraHeaderBottomCell; let index = index\"\n [matColumnDef]=\"extraBottomCell\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container\n *ngTemplateOutlet=\"extraHeaderCellBottomTemplate; context: {key: extraBottomCell.replace(EXTRA_HEADER_CELL_BOTTOM_SUFFIX, ''), index: index}\"></ng-container>\n </th>\n </ng-container>\n\n <!-- extra header top row-->\n <ng-container *ngIf=\"extraHeaderCellTopTemplate\">\n <tr mat-header-row *matHeaderRowDef=\"_displayExtraHeaderTopCell; sticky: this.tableConfig.stickyCfg?.header\"\n class=\"extra-header-top-row\">\n </tr>\n </ng-container>\n\n <!-- header row-->\n <tr mat-header-row *matHeaderRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.header\"\n [style]=\"_headerStyle\" [ngClass]=\"_headerClass\">\n </tr>\n\n <!-- extra header bottom row -->\n <ng-container *ngIf=\"extraHeaderCellBottomTemplate\">\n <tr mat-header-row\n *matHeaderRowDef=\"_displayExtraHeaderBottomCell; sticky: this.tableConfig.stickyCfg?.header\">\n </tr>\n </ng-container>\n\n <tr mat-row #rowLink\n (dragover)=\"onDragOver($event)\"\n (drop)=\"onDrop($event, row)\"\n *matRowDef=\"let row; columns: _displayColumns;\"\n (click)=\"rowClick(row)\"\n (mouseenter)=\"onRowEnter(row)\"\n (mouseleave)=\"onRowLeave(row)\"\n [ngClass]=\"rowNgClass(row)\"\n [style]=\"rowStyle(row)\">\n </tr>\n\n <!--expanded-row-->\n <ng-container matColumnDef=\"expandedRow\">\n <td mat-cell class=\"expanded-cell\" *matCellDef=\"let element\" [attr.colspan]=\"_displayColumns.length\"\n style=\"padding-right: 0!important;\">\n <div class=\"row-detail\"\n [@detailExpand]=\"element.rowSrc === highlighted ? expandedStateEnum.EXPANDED : expandedStateEnum.COLLAPSED\">\n <!-- timeline continuation -->\n <div *ngIf=\"timelineProvider.isEnabled\"\n class=\"aur-timeline-continuation\"\n [style.border-left-width.px]=\"timelineProvider.line.width\"\n [style.border-left-color]=\"_timelineGaps.get(element.id)?.bottomColor ?? timelineProvider.line.color\"\n [style.border-left-style]=\"_timelineGaps.get(element.id)?.bottomGap ? timelineProvider.line.gapStyle : timelineProvider.line.style\">\n </div>\n <!-- lazy-load of details -->\n <ng-container *ngIf=\"element.rowSrc === highlighted\">\n <ng-container *ngTemplateOutlet=\"extendedRowTemplate; context: {$implicit: element}\"></ng-container>\n </ng-container>\n </div>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"extendedRowTemplate\">\n <tr mat-row class=\"expanded-row\" *matRowDef=\"let row; columns: ['expandedRow']\"></tr>\n </ng-container>\n <!--expanded-row-->\n\n <ng-container *ngIf=\"totalRowProvider.isEnabled\">\n <tr mat-footer-row *matFooterRowDef=\"_displayColumns; sticky: this.tableConfig.stickyCfg?.total\"\n [style]=\"_totalStyle\" [ngClass]=\"_totalClass\"></tr>\n </ng-container>\n\n <!--sub-footer-row-->\n <ng-container matColumnDef=\"subFooterRow\">\n <td mat-footer-cell *matFooterCellDef [attr.colspan]=\"_displayColumns.length\">\n <ng-container>\n <ng-content select=\"[ngxAurTableSubFooterRow]\"></ng-content>\n </ng-container>\n </td>\n </ng-container>\n\n <ng-container *ngIf=\"subFooterRowTemplate\">\n <tr mat-footer-row *matFooterRowDef=\"['subFooterRow']; sticky: this.tableConfig.stickyCfg?.subFooter\"></tr>\n </ng-container>\n <!-- sub-footer-row END-->\n </table>\n </div>\n </ng-container>\n\n <!-- Pagination -->\n @if (this.paginationProvider.isEnabled && !externalPaginator) {\n <mat-paginator [ngClass]=\"{'hidePaginator': isTableBodyHide}\"\n [pageSizeOptions]=\"paginationProvider.sizes\"\n [pageSize]=\"paginationProvider.size\"\n [style]=\"tableConfig?.pageableCfg?.style\"\n [length]=\"paginatorState?.length\"\n [pageIndex]=\"paginatorState?.pageIndex\"\n (page)=\"onPageChangeInternal($event)\"\n showFirstLastButtons>\n </mat-paginator>\n }\n</div>\n", styles: [".aur-mat-table{display:flex;flex-direction:column}.aur-mat-table.bottom-pagination{height:100%}.aur-mat-table table{border-collapse:collapse}.aur-mat-table .table-container{position:relative}.aur-mat-table .table-container.bottom-pagination{flex-grow:1;overflow:auto}.aur-mat-table th,td{padding-right:4px!important;padding-left:4px!important}.aur-mat-table .new-color td.mat-mdc-cell,.aur-mat-table .new-color td.mat-mdc-footer-cell{color:inherit}.aur-mat-table mat-form-field{width:100%}.aur-mat-table .text-right{text-align:right!important}.aur-mat-table .pointer{cursor:pointer}.aur-mat-table .flex-container{display:flex;align-items:center}.aur-mat-table .expanded-row{height:0}.aur-mat-table .expanded-row .expanded-cell{padding-right:0!important;padding-left:0!important}.aur-mat-table .row-detail{overflow:hidden;display:flex}.aur-mat-table .clear-bottom-border{border-bottom:none}.aur-mat-table .table-settings-button{position:absolute;right:4px;top:12px;cursor:pointer;border-radius:4px;padding-bottom:2px;padding-top:2px;z-index:9999999999}.mat-mdc-header-row th:last-child{padding-right:25px!important}.aur-mat-table .search-container{display:flex;gap:8px;align-items:center}.aur-mat-table .extra-header-top-row th{border-bottom:none}.aur-mat-table .drag-icon{cursor:grab}.hide-table-body tr:not(.mat-mdc-header-row){display:none!important}.hidePaginator{display:none}.aur-mat-table .drag-column{padding-left:8px;padding-right:8px;width:35px}.aur-mat-table .aur-timeline-cell{width:40px;min-width:40px;max-width:40px;padding:0!important}.aur-mat-table .aur-timeline-marker-container{display:flex;flex-direction:column;align-items:center;height:100%;min-height:48px}.aur-mat-table .aur-timeline-line{flex:1;min-height:8px}.aur-mat-table .aur-timeline-marker-default{width:12px;height:12px;border-radius:50%;flex-shrink:0}.aur-mat-table .aur-timeline-continuation{border-left-style:solid;align-self:stretch;margin-left:20px;flex-shrink:0}\n"] }]
|
|
1267
1654
|
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { displayColumns: [{
|
|
1268
1655
|
type: Input
|
|
1269
1656
|
}], subFooterRowTemplate: [{
|
|
@@ -1289,6 +1676,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1289
1676
|
type: Input
|
|
1290
1677
|
}], paginatorState: [{
|
|
1291
1678
|
type: Input
|
|
1679
|
+
}], pageSource: [{
|
|
1680
|
+
type: Input
|
|
1681
|
+
}], externalPaginator: [{
|
|
1682
|
+
type: Input
|
|
1292
1683
|
}], isTableBodyHide: [{
|
|
1293
1684
|
type: Input
|
|
1294
1685
|
}], matPaginator: [{
|
|
@@ -1315,6 +1706,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1315
1706
|
type: Output
|
|
1316
1707
|
}], onRowClick: [{
|
|
1317
1708
|
type: Output
|
|
1709
|
+
}], loadingChange: [{
|
|
1710
|
+
type: Output
|
|
1711
|
+
}], pageError: [{
|
|
1712
|
+
type: Output
|
|
1318
1713
|
}], onFilter: [{
|
|
1319
1714
|
type: Output
|
|
1320
1715
|
}], columnOffsets: [{
|
|
@@ -1424,121 +1819,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.17", ngImpo
|
|
|
1424
1819
|
}]
|
|
1425
1820
|
}] });
|
|
1426
1821
|
|
|
1427
|
-
var StyleBuilder;
|
|
1428
|
-
(function (StyleBuilder) {
|
|
1429
|
-
class Row {
|
|
1430
|
-
constructor() {
|
|
1431
|
-
this._background = '';
|
|
1432
|
-
this._color = '';
|
|
1433
|
-
this._border = '';
|
|
1434
|
-
this._fontWeight = '';
|
|
1435
|
-
}
|
|
1436
|
-
static builder() {
|
|
1437
|
-
return new Row();
|
|
1438
|
-
}
|
|
1439
|
-
background(color) {
|
|
1440
|
-
this._background = color;
|
|
1441
|
-
return this;
|
|
1442
|
-
}
|
|
1443
|
-
color(color) {
|
|
1444
|
-
this._color = color;
|
|
1445
|
-
return this;
|
|
1446
|
-
}
|
|
1447
|
-
border(borderBuilderFn) {
|
|
1448
|
-
const borderBuilder = new BorderStyleBuilder();
|
|
1449
|
-
this._border = borderBuilderFn(borderBuilder).build();
|
|
1450
|
-
return this;
|
|
1451
|
-
}
|
|
1452
|
-
fontWeight(weight) {
|
|
1453
|
-
this._fontWeight = weight;
|
|
1454
|
-
return this;
|
|
1455
|
-
}
|
|
1456
|
-
build() {
|
|
1457
|
-
let styles = '';
|
|
1458
|
-
if (this._background)
|
|
1459
|
-
styles += `background: ${this._background}; `;
|
|
1460
|
-
if (this._color)
|
|
1461
|
-
styles += `color: ${this._color}; `;
|
|
1462
|
-
if (this._fontWeight)
|
|
1463
|
-
styles += `font-weight: ${this._fontWeight}; `;
|
|
1464
|
-
if (this._border)
|
|
1465
|
-
styles += `${this._border}`;
|
|
1466
|
-
return styles;
|
|
1467
|
-
}
|
|
1468
|
-
}
|
|
1469
|
-
StyleBuilder.Row = Row;
|
|
1470
|
-
class BorderStyleBuilder {
|
|
1471
|
-
constructor() {
|
|
1472
|
-
this._top = '';
|
|
1473
|
-
this._bottom = '';
|
|
1474
|
-
this._right = '';
|
|
1475
|
-
this._left = '';
|
|
1476
|
-
}
|
|
1477
|
-
top(width, style, color) {
|
|
1478
|
-
this._top = `${width} ${style} ${color}`;
|
|
1479
|
-
return this;
|
|
1480
|
-
}
|
|
1481
|
-
bottom(width, style, color) {
|
|
1482
|
-
this._bottom = `${width} ${style} ${color}`;
|
|
1483
|
-
return this;
|
|
1484
|
-
}
|
|
1485
|
-
right(width, style, color) {
|
|
1486
|
-
this._right = `${width} ${style} ${color}`;
|
|
1487
|
-
return this;
|
|
1488
|
-
}
|
|
1489
|
-
left(width, style, color) {
|
|
1490
|
-
this._left = `${width} ${style} ${color}`;
|
|
1491
|
-
return this;
|
|
1492
|
-
}
|
|
1493
|
-
allBorders(width, style, color) {
|
|
1494
|
-
this._top = this._bottom = this._right = this._left = `${width} ${style} ${color}`;
|
|
1495
|
-
return this;
|
|
1496
|
-
}
|
|
1497
|
-
build() {
|
|
1498
|
-
let styles = '';
|
|
1499
|
-
if (this._top)
|
|
1500
|
-
styles += `border-top: ${this._top}; `;
|
|
1501
|
-
if (this._bottom)
|
|
1502
|
-
styles += `border-bottom: ${this._bottom}; `;
|
|
1503
|
-
if (this._right)
|
|
1504
|
-
styles += `border-right: ${this._right}; `;
|
|
1505
|
-
if (this._left)
|
|
1506
|
-
styles += `border-left: ${this._left}; `;
|
|
1507
|
-
return styles;
|
|
1508
|
-
}
|
|
1509
|
-
}
|
|
1510
|
-
StyleBuilder.BorderStyleBuilder = BorderStyleBuilder;
|
|
1511
|
-
let BorderStyle;
|
|
1512
|
-
(function (BorderStyle) {
|
|
1513
|
-
BorderStyle["SOLID"] = "solid";
|
|
1514
|
-
BorderStyle["DOTTED"] = "dotted";
|
|
1515
|
-
BorderStyle["DASHED"] = "dashed";
|
|
1516
|
-
BorderStyle["DOUBLE"] = "double";
|
|
1517
|
-
BorderStyle["GROOVE"] = "groove";
|
|
1518
|
-
BorderStyle["RIDGE"] = "ridge";
|
|
1519
|
-
BorderStyle["INSET"] = "inset";
|
|
1520
|
-
BorderStyle["OUTSET"] = "outset";
|
|
1521
|
-
BorderStyle["NONE"] = "none";
|
|
1522
|
-
BorderStyle["HIDDEN"] = "hidden";
|
|
1523
|
-
})(BorderStyle = StyleBuilder.BorderStyle || (StyleBuilder.BorderStyle = {}));
|
|
1524
|
-
let FontWeight;
|
|
1525
|
-
(function (FontWeight) {
|
|
1526
|
-
FontWeight["NORMAL"] = "normal";
|
|
1527
|
-
FontWeight["BOLD"] = "bold";
|
|
1528
|
-
FontWeight["BOLDER"] = "bolder";
|
|
1529
|
-
FontWeight["LIGHTER"] = "lighter";
|
|
1530
|
-
FontWeight["W_100"] = "100";
|
|
1531
|
-
FontWeight["W_200"] = "200";
|
|
1532
|
-
FontWeight["W_300"] = "300";
|
|
1533
|
-
FontWeight["W_400"] = "400";
|
|
1534
|
-
FontWeight["W_500"] = "500";
|
|
1535
|
-
FontWeight["W_600"] = "600";
|
|
1536
|
-
FontWeight["W_700"] = "700";
|
|
1537
|
-
FontWeight["W_800"] = "800";
|
|
1538
|
-
FontWeight["W_900"] = "900";
|
|
1539
|
-
})(FontWeight = StyleBuilder.FontWeight || (StyleBuilder.FontWeight = {}));
|
|
1540
|
-
})(StyleBuilder || (StyleBuilder = {}));
|
|
1541
|
-
|
|
1542
1822
|
var NgxAurFilters;
|
|
1543
1823
|
(function (NgxAurFilters) {
|
|
1544
1824
|
/**
|
|
@@ -1810,5 +2090,5 @@ var NgxAurFilters;
|
|
|
1810
2090
|
* Generated bundle index. Do not edit.
|
|
1811
2091
|
*/
|
|
1812
2092
|
|
|
1813
|
-
export { AurDragDropManager, DataPropertyGetterPipe, IndexProvider, IndexProviderDummy, NgxAurFilters, NgxAurMatTableComponent, NgxAurMatTableModule, NgxAurTableConfigUtil, NgxAurTablePageEventUtils, NgxAurTableSearchPrefixDirective, NgxAurTableSearchSuffixDirective, NgxTableSubFooterRowDirective, PaginatorState, RowActionProvider, RowActionProviderDummy, SelectionProvider, SelectionProviderDummy, StyleBuilder, TableRow, TimelineProvider, TimelineProviderDummy };
|
|
2093
|
+
export { AurDragDropManager, DataPropertyGetterPipe, IndexProvider, IndexProviderDummy, NgxAurFilters, NgxAurMatTableComponent, NgxAurMatTableModule, NgxAurTableConfigUtil, NgxAurTablePageEventUtils, NgxAurTableSearchPrefixDirective, NgxAurTableSearchSuffixDirective, NgxTableSubFooterRowDirective, PaginatorState, RowActionProvider, RowActionProviderDummy, SelectionProvider, SelectionProviderDummy, ServerPageController, StyleBuilder, TableRow, TimelineProvider, TimelineProviderDummy };
|
|
1814
2094
|
//# sourceMappingURL=ngx-aur-mat-table.mjs.map
|