@angular-generic-table/core 5.0.0-rc.9 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/angular-generic-table-core.mjs +1065 -0
- package/fesm2022/angular-generic-table-core.mjs.map +1 -0
- package/package.json +10 -16
- package/scss/index.scss +231 -14
- package/types/angular-generic-table-core.d.ts +396 -0
- package/angular-generic-table-core.d.ts +0 -5
- package/esm2020/angular-generic-table-core.mjs +0 -5
- package/esm2020/lib/core.component.mjs +0 -122
- package/esm2020/lib/core.module.mjs +0 -23
- package/esm2020/lib/core.service.mjs +0 -14
- package/esm2020/lib/enums/order.enum.mjs +0 -6
- package/esm2020/lib/models/table-column.interface.mjs +0 -2
- package/esm2020/lib/models/table-config.interface.mjs +0 -2
- package/esm2020/lib/models/table-info.interface.mjs +0 -2
- package/esm2020/lib/models/table-meta.interface.mjs +0 -2
- package/esm2020/lib/models/table-row.interface.mjs +0 -2
- package/esm2020/lib/models/table-sort.interface.mjs +0 -2
- package/esm2020/lib/pagination/pagination.component.mjs +0 -63
- package/esm2020/lib/pagination/pagination.module.mjs +0 -18
- package/esm2020/lib/pipes/capital-case.pipe.mjs +0 -17
- package/esm2020/lib/pipes/dash-case.pipe.mjs +0 -17
- package/esm2020/lib/pipes/dynamic.pipe.mjs +0 -25
- package/esm2020/lib/pipes/highlight.pipe.mjs +0 -48
- package/esm2020/lib/pipes/sort-class.pipe.mjs +0 -16
- package/esm2020/lib/utilities/utilities.mjs +0 -39
- package/esm2020/public-api.mjs +0 -15
- package/fesm2015/angular-generic-table-core.mjs +0 -384
- package/fesm2015/angular-generic-table-core.mjs.map +0 -1
- package/fesm2020/angular-generic-table-core.mjs +0 -381
- package/fesm2020/angular-generic-table-core.mjs.map +0 -1
- package/lib/core.component.d.ts +0 -33
- package/lib/core.module.d.ts +0 -13
- package/lib/core.service.d.ts +0 -6
- package/lib/enums/order.enum.d.ts +0 -4
- package/lib/models/table-column.interface.d.ts +0 -15
- package/lib/models/table-config.interface.d.ts +0 -15
- package/lib/models/table-info.interface.d.ts +0 -4
- package/lib/models/table-meta.interface.d.ts +0 -8
- package/lib/models/table-row.interface.d.ts +0 -4
- package/lib/models/table-sort.interface.d.ts +0 -5
- package/lib/pagination/pagination.component.d.ts +0 -14
- package/lib/pagination/pagination.module.d.ts +0 -8
- package/lib/pipes/capital-case.pipe.d.ts +0 -7
- package/lib/pipes/dash-case.pipe.d.ts +0 -7
- package/lib/pipes/dynamic.pipe.d.ts +0 -9
- package/lib/pipes/highlight.pipe.d.ts +0 -7
- package/lib/pipes/sort-class.pipe.d.ts +0 -11
- package/lib/utilities/utilities.d.ts +0 -6
- package/public-api.d.ts +0 -11
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { TemplateRef, Type, OnDestroy, TrackByFunction, PipeTransform, Injector } from '@angular/core';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import * as i1 from '@angular/common';
|
|
5
|
+
import { KeyValue } from '@angular/common';
|
|
6
|
+
|
|
7
|
+
interface TableRow {
|
|
8
|
+
[key: string]: number | string | boolean | any;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type GtSortOrder<R = TableRow> = Array<GtSortConfig<R>>;
|
|
12
|
+
interface GtSortConfig<R = {}> {
|
|
13
|
+
key: keyof R;
|
|
14
|
+
order: GtOrder;
|
|
15
|
+
}
|
|
16
|
+
type GtOrder = 'asc' | 'desc';
|
|
17
|
+
|
|
18
|
+
interface GtCellContext<R = TableRow> {
|
|
19
|
+
row: R;
|
|
20
|
+
col: {
|
|
21
|
+
key: string;
|
|
22
|
+
value: TableColumn<R>;
|
|
23
|
+
};
|
|
24
|
+
index: number;
|
|
25
|
+
data: R[];
|
|
26
|
+
search: string | null;
|
|
27
|
+
}
|
|
28
|
+
interface GtHeaderContext<R = TableRow> {
|
|
29
|
+
column: {
|
|
30
|
+
key: string;
|
|
31
|
+
value: TableColumn<R>;
|
|
32
|
+
};
|
|
33
|
+
sortable: boolean;
|
|
34
|
+
sortOrder: GtSortOrder<R>;
|
|
35
|
+
search: string | null;
|
|
36
|
+
sort?: (event: MouseEvent) => void;
|
|
37
|
+
}
|
|
38
|
+
interface TableColumn<R = TableRow> {
|
|
39
|
+
header?: string | false;
|
|
40
|
+
headerTemplateRef?: TemplateRef<any>;
|
|
41
|
+
headerComponent?: Type<any>;
|
|
42
|
+
headerComponentInputs?: Record<string, unknown>;
|
|
43
|
+
headerReplaceFull?: boolean;
|
|
44
|
+
mobileHeader?: string | boolean;
|
|
45
|
+
hidden?: boolean;
|
|
46
|
+
sortable?: boolean;
|
|
47
|
+
order?: number;
|
|
48
|
+
search?: boolean | SearchFunction<R>;
|
|
49
|
+
templateRef?: TemplateRef<any>;
|
|
50
|
+
component?: Type<any>;
|
|
51
|
+
componentInputs?: Record<string, unknown>;
|
|
52
|
+
transform?: {
|
|
53
|
+
pipe: any;
|
|
54
|
+
args?: Array<any>;
|
|
55
|
+
};
|
|
56
|
+
class?: string;
|
|
57
|
+
mapTo?: {
|
|
58
|
+
path: string;
|
|
59
|
+
missingValue?: string | number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
type SearchFunction<R = TableRow> = (row: R, column: keyof R, value: typeof row[keyof R]) => string;
|
|
63
|
+
|
|
64
|
+
interface TableConfig<R = TableRow> {
|
|
65
|
+
/** Disable sorting of table data, useful when sorting is handled externally e.g. server-side pagination. Table will still use sortOrder to visually show how the data is sorted. <p>**Default:** `false`</p> */
|
|
66
|
+
disableTableSort?: boolean;
|
|
67
|
+
/** Allows for a more mobile friendly layout by displaying columns as rows instead. This is accomplished with css by adding `table-mobile` class to table element and adding column headers as data labels to each row. <p>**Default:** `false`</p>*/
|
|
68
|
+
mobileLayout?: boolean;
|
|
69
|
+
/** Make row and/or column headers sticky by adding `gt-sticky-row-header` and `gt-sticky-column-header` to table to alter table behaviour using css. Please note that in order for headers to be sticky, table can't be placed inside element with overflow set to auto. <p>**Default:** `{row:false, column:false}`</p>*/
|
|
70
|
+
stickyHeaders?: {
|
|
71
|
+
row?: boolean;
|
|
72
|
+
column?: boolean;
|
|
73
|
+
};
|
|
74
|
+
/** Add one or more CSS classes to the table element e.g. `table table-striped table-bordered`. <p>**Default:** `table`</p>*/
|
|
75
|
+
class?: string;
|
|
76
|
+
rows?: {
|
|
77
|
+
[Property in keyof R]: TableColumn<R>;
|
|
78
|
+
};
|
|
79
|
+
columns?: {
|
|
80
|
+
[Property in keyof R]: TableColumn<R>;
|
|
81
|
+
};
|
|
82
|
+
pagination?: {
|
|
83
|
+
length?: number;
|
|
84
|
+
};
|
|
85
|
+
rowClick?: boolean;
|
|
86
|
+
/** Toggle row active state on mouse enter/leave (hover) <p>**Default:** `false`</p>*/
|
|
87
|
+
activateRowOnHover?: boolean;
|
|
88
|
+
/** Toggle row active state on keyboard navigation <p>**Default:** `false`</p>*/
|
|
89
|
+
activateRowOnKeyboardNavigation?: boolean;
|
|
90
|
+
deactivateRowOnLostFocus?: boolean;
|
|
91
|
+
footer?: {
|
|
92
|
+
headers?: {
|
|
93
|
+
[key: FooterCalculation | string]: string | boolean;
|
|
94
|
+
};
|
|
95
|
+
columns?: {
|
|
96
|
+
[Property in keyof R]: Partial<TableFooterColumn<R>>;
|
|
97
|
+
};
|
|
98
|
+
rowOrder?: Array<keyof R | FooterCalculation>;
|
|
99
|
+
emptyContent?: string;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
interface TableFooterColumn<R> {
|
|
103
|
+
[key: FooterCalculation | string]: boolean | number | string | CalcFunc<R>;
|
|
104
|
+
}
|
|
105
|
+
interface CalcFunc<R> {
|
|
106
|
+
(data: Array<R>, key: keyof R): number | string;
|
|
107
|
+
}
|
|
108
|
+
type FooterCalculation = 'sum' | 'avg' | 'count' | 'max' | 'min';
|
|
109
|
+
|
|
110
|
+
interface GtRowClickEvent<R = TableRow> {
|
|
111
|
+
row: R;
|
|
112
|
+
index: number;
|
|
113
|
+
event: MouseEvent;
|
|
114
|
+
}
|
|
115
|
+
interface GtRowActiveEvent<R = TableRow> {
|
|
116
|
+
row: R | null;
|
|
117
|
+
index: number | null;
|
|
118
|
+
event?: MouseEvent | KeyboardEvent;
|
|
119
|
+
}
|
|
120
|
+
interface GtRowSelectEvent<R = TableRow> {
|
|
121
|
+
row: R | null;
|
|
122
|
+
index: number | null;
|
|
123
|
+
event?: KeyboardEvent;
|
|
124
|
+
}
|
|
125
|
+
interface GtSortEvent<R = TableRow> {
|
|
126
|
+
key: keyof R;
|
|
127
|
+
order: GtOrder;
|
|
128
|
+
currentSortOrder: GtSortOrder<R>;
|
|
129
|
+
event?: MouseEvent;
|
|
130
|
+
addSortKey: boolean /** Add additional key to sort on multiple properties? True if the user is holding shift while sorting */;
|
|
131
|
+
}
|
|
132
|
+
interface GtPageChangeEvent {
|
|
133
|
+
index: number;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
declare let dashed: (s: string) => string;
|
|
137
|
+
declare let capitalize: (s: string) => string;
|
|
138
|
+
declare let chunk: (array: Array<any>, chunkSize: number) => Array<Array<TableRow>>;
|
|
139
|
+
declare let search: (text: string, caseSensitive: boolean, data: Array<TableRow>, config: TableConfig) => TableRow[];
|
|
140
|
+
declare let calculate: (data: Array<TableRow>, config: TableConfig) => {
|
|
141
|
+
calculated: any;
|
|
142
|
+
calculations: string[];
|
|
143
|
+
calculatedColumnsCount: number;
|
|
144
|
+
};
|
|
145
|
+
/** sortOnMultipleKeys
|
|
146
|
+
* @description Sort data on multiple keys with locale-aware alphanumeric comparison
|
|
147
|
+
* @param {GtSortOrder} keys - array with sort config objects to sort on, data will be sorted according to array order
|
|
148
|
+
* @returns sort function
|
|
149
|
+
*/
|
|
150
|
+
declare const sortOnMultipleKeys: (keys: GtSortOrder) => ((a: TableRow, b: TableRow) => number);
|
|
151
|
+
/** parseSortOrderParams
|
|
152
|
+
* @description Convert sort order query param to array with sort config objects
|
|
153
|
+
* @param sortParams - Query param string where each sort config object is separated by comma and order is indicated by + (ascending) or - (descending), e.g. _'name,-age'_
|
|
154
|
+
* @returns GtSortOrder - Array with sort config objects
|
|
155
|
+
*/
|
|
156
|
+
declare const parseSortOrderParams: (sortParams: string) => GtSortOrder;
|
|
157
|
+
/** sortOrderConfigToParam
|
|
158
|
+
* @description Convert sort config object to string that can be used as query param when sorting is implemented server side
|
|
159
|
+
* @param sortConfig - Sort config object
|
|
160
|
+
* @returns string - Query param string where order is indicated by + (ascending) or - (descending), e.g. _'-name'_
|
|
161
|
+
*/
|
|
162
|
+
declare const sortOrderConfigToParam: (sortConfig: GtSortEvent | GtSortConfig) => string;
|
|
163
|
+
/** sortOrderToParams
|
|
164
|
+
* @description Convert sort order array to string that can be used as query param when sorting is implemented server side
|
|
165
|
+
* @param sortOrder - Array with sort config objects
|
|
166
|
+
* @returns string - Query param string where each sort config object is separated by comma and order is indicated by + (ascending) or - (descending), e.g. _'name,-age'_
|
|
167
|
+
*/
|
|
168
|
+
declare const sortOrderToParams: (sortOrder: GtSortOrder) => string;
|
|
169
|
+
|
|
170
|
+
interface GtPaginationClasses {
|
|
171
|
+
nav?: string;
|
|
172
|
+
ul?: string;
|
|
173
|
+
li?: string;
|
|
174
|
+
button?: string;
|
|
175
|
+
}
|
|
176
|
+
interface GtPaginationAriaLabels {
|
|
177
|
+
nav: string;
|
|
178
|
+
button: string;
|
|
179
|
+
}
|
|
180
|
+
interface GtPaginationInfo {
|
|
181
|
+
pageNext: number | null;
|
|
182
|
+
pageCurrent: number | null;
|
|
183
|
+
pagePrevious: number | null;
|
|
184
|
+
pageSize: number | null;
|
|
185
|
+
numberOfRecords: number | null;
|
|
186
|
+
pageTotal?: number | null;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
interface TableInfo {
|
|
190
|
+
numberOfRecords: number;
|
|
191
|
+
pageSize?: number;
|
|
192
|
+
pageTotal: number;
|
|
193
|
+
lazyLoaded?: boolean;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
interface TableMeta<R = TableRow> {
|
|
197
|
+
data: Array<Array<R>>;
|
|
198
|
+
config: TableConfig<R>;
|
|
199
|
+
info: TableInfo;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
declare class CoreComponent implements OnDestroy {
|
|
203
|
+
private _destroyRef;
|
|
204
|
+
private _unsubscribe$;
|
|
205
|
+
readonly navigationKeys: _angular_core.InputSignal<string[]>;
|
|
206
|
+
readonly selectKeys: _angular_core.InputSignal<string[]>;
|
|
207
|
+
readonly config: _angular_core.InputSignal<TableConfig<any>>;
|
|
208
|
+
readonly data: _angular_core.InputSignal<TableRow[]>;
|
|
209
|
+
readonly searchTerm: _angular_core.InputSignal<string | null>;
|
|
210
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
211
|
+
readonly sortOrderInput: _angular_core.InputSignal<GtSortOrder<any>>;
|
|
212
|
+
readonly paginationIndexInput: _angular_core.InputSignal<number>;
|
|
213
|
+
readonly pagingInfo: _angular_core.InputSignal<GtPaginationInfo | null>;
|
|
214
|
+
readonly selection: _angular_core.InputSignal<any>;
|
|
215
|
+
readonly rowIdKey: _angular_core.InputSignal<string | undefined>;
|
|
216
|
+
readonly generateRowId: _angular_core.InputSignal<boolean>;
|
|
217
|
+
readonly trackRowByFnInput: _angular_core.InputSignal<TrackByFunction<TableRow> | undefined>;
|
|
218
|
+
readonly isRowSelectedFn: _angular_core.InputSignal<((row: TableRow | any, selection?: any) => boolean) | undefined>;
|
|
219
|
+
readonly customClassesInput: _angular_core.InputSignal<Partial<{
|
|
220
|
+
selectedRow: string;
|
|
221
|
+
activeRow: string;
|
|
222
|
+
}>>;
|
|
223
|
+
readonly rowClick: _angular_core.OutputEmitterRef<GtRowClickEvent<TableRow>>;
|
|
224
|
+
readonly rowSelect: _angular_core.OutputEmitterRef<GtRowSelectEvent<TableRow>>;
|
|
225
|
+
readonly sortOrderChange: _angular_core.OutputEmitterRef<GtSortOrder<TableRow>>;
|
|
226
|
+
readonly rowActiveOutput: _angular_core.OutputEmitterRef<GtRowActiveEvent<TableRow>>;
|
|
227
|
+
readonly columnSort: _angular_core.OutputEmitterRef<GtSortEvent<TableRow>>;
|
|
228
|
+
readonly pageChange: _angular_core.OutputEmitterRef<GtPageChangeEvent>;
|
|
229
|
+
protected sortOrder: _angular_core.WritableSignal<GtSortOrder<any>>;
|
|
230
|
+
protected currentPaginationIndex: _angular_core.WritableSignal<number>;
|
|
231
|
+
protected customClasses: _angular_core.Signal<{
|
|
232
|
+
selectedRow: string;
|
|
233
|
+
activeRow: string;
|
|
234
|
+
}>;
|
|
235
|
+
trackRowByFn: TrackByFunction<TableRow>;
|
|
236
|
+
/** Data with mapTo expansions and row IDs applied */
|
|
237
|
+
private expandedData;
|
|
238
|
+
/** Filtered data (search applied, no sort) */
|
|
239
|
+
private searchedData;
|
|
240
|
+
/** Sorted (and already searched) data */
|
|
241
|
+
private processedData;
|
|
242
|
+
/** Table meta: chunked data + config + pagination info */
|
|
243
|
+
protected table: _angular_core.Signal<TableMeta<TableRow>>;
|
|
244
|
+
/** Current table info */
|
|
245
|
+
readonly tableInfoSignal: _angular_core.Signal<TableInfo>;
|
|
246
|
+
/** Get tableInfo synchronously */
|
|
247
|
+
get tableInfo(): TableInfo | undefined;
|
|
248
|
+
/** Calculations for footer */
|
|
249
|
+
protected calculations: _angular_core.Signal<{
|
|
250
|
+
calculated: any;
|
|
251
|
+
calculations: string[];
|
|
252
|
+
calculatedColumnsCount: number;
|
|
253
|
+
}>;
|
|
254
|
+
/** Bounded pagination index (clamped to valid range) */
|
|
255
|
+
readonly boundedPaginationIndex: _angular_core.Signal<number>;
|
|
256
|
+
/** Number of visible columns */
|
|
257
|
+
protected colspan: _angular_core.Signal<number>;
|
|
258
|
+
/** Number of footer columns */
|
|
259
|
+
protected footerColspan: _angular_core.Signal<number>;
|
|
260
|
+
protected rowActiveState: _angular_core.WritableSignal<GtRowActiveEvent<TableRow>>;
|
|
261
|
+
activeRowIndex: number | null;
|
|
262
|
+
private _rowActiveEffect;
|
|
263
|
+
private _sortOrder$?;
|
|
264
|
+
get sortOrder$(): Observable<GtSortOrder>;
|
|
265
|
+
private _loading$?;
|
|
266
|
+
get loading$(): Observable<boolean>;
|
|
267
|
+
private _searchBy$?;
|
|
268
|
+
get searchBy$(): Observable<string | null>;
|
|
269
|
+
private _tableConfig$?;
|
|
270
|
+
get tableConfig$(): Observable<TableConfig>;
|
|
271
|
+
private _data$?;
|
|
272
|
+
get data$(): Observable<Array<TableRow>>;
|
|
273
|
+
private _table$?;
|
|
274
|
+
get table$(): Observable<TableMeta>;
|
|
275
|
+
private _tableInfo$?;
|
|
276
|
+
get tableInfo$(): Observable<TableInfo>;
|
|
277
|
+
private _currentPaginationIndex$?;
|
|
278
|
+
get currentPaginationIndex$(): Observable<number>;
|
|
279
|
+
private _calculations$?;
|
|
280
|
+
get calculations$(): Observable<ReturnType<typeof calculate>>;
|
|
281
|
+
private _rowActive$?;
|
|
282
|
+
get rowActive$(): Observable<GtRowActiveEvent>;
|
|
283
|
+
private _colspan$?;
|
|
284
|
+
get colspan$(): Observable<number>;
|
|
285
|
+
get paginationIndex(): number;
|
|
286
|
+
set paginationIndex(value: number);
|
|
287
|
+
protected headerSortFn(key: string): (event: MouseEvent) => void;
|
|
288
|
+
_rowClick(row: TableRow, index: number, event: MouseEvent): void;
|
|
289
|
+
_rowSelect(row: TableRow, index: number, event: KeyboardEvent): void;
|
|
290
|
+
activateRow(id: string, event?: MouseEvent | KeyboardEvent): void;
|
|
291
|
+
activateRow(index: number, event?: MouseEvent | KeyboardEvent): void;
|
|
292
|
+
activateRow(none: null, event?: MouseEvent | KeyboardEvent): void;
|
|
293
|
+
protected _activateRow(row: TableRow | null, index: number | null, event?: MouseEvent | KeyboardEvent): void;
|
|
294
|
+
/** sortByKey - Sort by key in table row */
|
|
295
|
+
sortByKey(key: keyof TableRow, $event?: MouseEvent): void;
|
|
296
|
+
private _columnOrder;
|
|
297
|
+
protected orderedColumns: _angular_core.Signal<KeyValue<string, TableColumn<TableRow>>[]>;
|
|
298
|
+
protected orderedRows: _angular_core.Signal<KeyValue<string, TableColumn<TableRow>>[]>;
|
|
299
|
+
nestedValue(object: any, mapTo: string, missingValue?: string | number | null): unknown;
|
|
300
|
+
private _unsubscribeFromKeyboardEvents$;
|
|
301
|
+
private _keyboardArrowEvent$;
|
|
302
|
+
protected listenToKeyboardEvents(): void;
|
|
303
|
+
unsubscribeFromKeyboardEvents(tableRef: HTMLTableElement): void;
|
|
304
|
+
private _handleNavigationEvent;
|
|
305
|
+
ngOnDestroy(): void;
|
|
306
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CoreComponent, never>;
|
|
307
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CoreComponent, "angular-generic-table", never, { "navigationKeys": { "alias": "navigationKeys"; "required": false; "isSignal": true; }; "selectKeys": { "alias": "selectKeys"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "data": { "alias": "data"; "required": false; "isSignal": true; }; "searchTerm": { "alias": "search"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "sortOrderInput": { "alias": "sortOrder"; "required": false; "isSignal": true; }; "paginationIndexInput": { "alias": "paginationIndex"; "required": false; "isSignal": true; }; "pagingInfo": { "alias": "pagingInfo"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "rowIdKey": { "alias": "rowIdKey"; "required": false; "isSignal": true; }; "generateRowId": { "alias": "generateRowId"; "required": false; "isSignal": true; }; "trackRowByFnInput": { "alias": "trackRowByFn"; "required": false; "isSignal": true; }; "isRowSelectedFn": { "alias": "isRowSelectedFn"; "required": false; "isSignal": true; }; "customClassesInput": { "alias": "customClasses"; "required": false; "isSignal": true; }; }, { "rowClick": "rowClick"; "rowSelect": "rowSelect"; "sortOrderChange": "sortOrderChange"; "rowActiveOutput": "rowActive"; "columnSort": "columnSort"; "pageChange": "pageChange"; }, never, [".table-loading", ".table-no-data"], true, never>;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
interface GtDelta {
|
|
311
|
+
relative: number | string;
|
|
312
|
+
absolute: number;
|
|
313
|
+
}
|
|
314
|
+
declare class GtDeltaComponent {
|
|
315
|
+
readonly data: _angular_core.InputSignal<TableRow[]>;
|
|
316
|
+
readonly index: _angular_core.InputSignal<number>;
|
|
317
|
+
readonly baseIndex: _angular_core.InputSignal<number | undefined>;
|
|
318
|
+
readonly classes: _angular_core.InputSignal<{
|
|
319
|
+
span: string;
|
|
320
|
+
positive: string;
|
|
321
|
+
negative: string;
|
|
322
|
+
}>;
|
|
323
|
+
readonly key: _angular_core.InputSignal<string>;
|
|
324
|
+
readonly notApplicableValue: _angular_core.InputSignal<string | null>;
|
|
325
|
+
readonly initialValue: _angular_core.InputSignal<string | number | null>;
|
|
326
|
+
readonly deltaTemplate: _angular_core.InputSignal<TemplateRef<any> | undefined>;
|
|
327
|
+
readonly value: _angular_core.Signal<GtDelta | undefined>;
|
|
328
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GtDeltaComponent, never>;
|
|
329
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<GtDeltaComponent, "gt-delta", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; "index": { "alias": "index"; "required": false; "isSignal": true; }; "baseIndex": { "alias": "baseIndex"; "required": false; "isSignal": true; }; "classes": { "alias": "classes"; "required": false; "isSignal": true; }; "key": { "alias": "key"; "required": false; "isSignal": true; }; "notApplicableValue": { "alias": "notApplicableValue"; "required": false; "isSignal": true; }; "initialValue": { "alias": "initialValue"; "required": false; "isSignal": true; }; "deltaTemplate": { "alias": "deltaTemplate"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
declare class GenericTableCoreModule {
|
|
333
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GenericTableCoreModule, never>;
|
|
334
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<GenericTableCoreModule, never, [typeof CoreComponent, typeof GtDeltaComponent], [typeof CoreComponent, typeof GtDeltaComponent]>;
|
|
335
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<GenericTableCoreModule>;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
declare class PaginationComponent {
|
|
339
|
+
readonly table: _angular_core.InputSignal<CoreComponent>;
|
|
340
|
+
readonly pagingInfo: _angular_core.InputSignal<GtPaginationInfo | undefined>;
|
|
341
|
+
readonly paginationLength: _angular_core.InputSignal<number>;
|
|
342
|
+
readonly classes: _angular_core.InputSignal<GtPaginationClasses>;
|
|
343
|
+
readonly ariaLabels: _angular_core.InputSignal<GtPaginationAriaLabels>;
|
|
344
|
+
/** Page numbers to display in the pagination component */
|
|
345
|
+
protected paginationListItems: _angular_core.Signal<number[]>;
|
|
346
|
+
/** Current page from the table */
|
|
347
|
+
protected currentPosition: _angular_core.Signal<number>;
|
|
348
|
+
private _generateList;
|
|
349
|
+
goToPage(index: number): void;
|
|
350
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PaginationComponent, never>;
|
|
351
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PaginationComponent, "angular-generic-table-pagination", never, { "table": { "alias": "table"; "required": true; "isSignal": true; }; "pagingInfo": { "alias": "pagingInfo"; "required": false; "isSignal": true; }; "paginationLength": { "alias": "paginationLength"; "required": false; "isSignal": true; }; "classes": { "alias": "classes"; "required": false; "isSignal": true; }; "ariaLabels": { "alias": "ariaLabels"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
declare class GenericTablePaginationModule {
|
|
355
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<GenericTablePaginationModule, never>;
|
|
356
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<GenericTablePaginationModule, never, [typeof i1.CommonModule, typeof PaginationComponent], [typeof PaginationComponent]>;
|
|
357
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<GenericTablePaginationModule>;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
declare class CapitalCasePipe implements PipeTransform {
|
|
361
|
+
transform(s: string): any;
|
|
362
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CapitalCasePipe, never>;
|
|
363
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<CapitalCasePipe, "capitalCase", true>;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
declare class DashCasePipe implements PipeTransform {
|
|
367
|
+
transform(s: string): any;
|
|
368
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DashCasePipe, never>;
|
|
369
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<DashCasePipe, "dashCase", true>;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
declare class DynamicPipe implements PipeTransform {
|
|
373
|
+
private injector;
|
|
374
|
+
private _cache;
|
|
375
|
+
constructor(injector: Injector);
|
|
376
|
+
transform(value: any, requiredPipe: Type<any>, pipeArgs: any[]): any;
|
|
377
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicPipe, never>;
|
|
378
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<DynamicPipe, "dynamicPipe", true>;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
declare class HighlightPipe implements PipeTransform {
|
|
382
|
+
private _cachedTerm;
|
|
383
|
+
private _cachedRegex;
|
|
384
|
+
transform(text: any, searchTerm: string | null): string;
|
|
385
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightPipe, never>;
|
|
386
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<HighlightPipe, "highlight", true>;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
declare class SortClassPipe implements PipeTransform {
|
|
390
|
+
transform(sortOrder: GtSortOrder | null, key: string, context?: 'class' | 'aria' | 'order'): string | null;
|
|
391
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<SortClassPipe, never>;
|
|
392
|
+
static ɵpipe: _angular_core.ɵɵPipeDeclaration<SortClassPipe, "sortClass", true>;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
export { CapitalCasePipe, CoreComponent, DashCasePipe, DynamicPipe, GenericTableCoreModule, GenericTablePaginationModule, GtDeltaComponent, HighlightPipe, PaginationComponent, SortClassPipe, calculate, capitalize, chunk, dashed, parseSortOrderParams, search, sortOnMultipleKeys, sortOrderConfigToParam, sortOrderToParams };
|
|
396
|
+
export type { GtCellContext, GtDelta, GtHeaderContext, GtOrder, GtPageChangeEvent, GtPaginationAriaLabels, GtPaginationClasses, GtPaginationInfo, GtRowActiveEvent, GtRowClickEvent, GtRowSelectEvent, GtSortConfig, GtSortEvent, GtSortOrder, SearchFunction, TableColumn, TableConfig, TableInfo, TableMeta, TableRow };
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1nZW5lcmljLXRhYmxlLWNvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9hbmd1bGFyLWdlbmVyaWMtdGFibGUtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, combineLatest, EMPTY, isObservable, of, ReplaySubject, Subject } from 'rxjs';
|
|
3
|
-
import { map, shareReplay, startWith, switchMap, withLatestFrom } from 'rxjs/operators';
|
|
4
|
-
import { Order } from './enums/order.enum';
|
|
5
|
-
import { chunk, search } from './utilities/utilities';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/common";
|
|
8
|
-
import * as i2 from "./pipes/sort-class.pipe";
|
|
9
|
-
import * as i3 from "./pipes/dash-case.pipe";
|
|
10
|
-
import * as i4 from "./pipes/capital-case.pipe";
|
|
11
|
-
import * as i5 from "./pipes/highlight.pipe";
|
|
12
|
-
import * as i6 from "./pipes/dynamic.pipe";
|
|
13
|
-
export class CoreComponent {
|
|
14
|
-
constructor() {
|
|
15
|
-
this._loading$ = new ReplaySubject(1);
|
|
16
|
-
this.sortBy$ = new Subject();
|
|
17
|
-
// tslint:disable-next-line:variable-name
|
|
18
|
-
this._searchBy$ = new ReplaySubject(1);
|
|
19
|
-
this.searchBy$ = this._searchBy$.pipe(startWith(''), map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
|
|
20
|
-
// tslint:disable-next-line:variable-name
|
|
21
|
-
this._tableConfig$ = new ReplaySubject(1);
|
|
22
|
-
this.tableConfig$ = this._tableConfig$.pipe(map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
|
|
23
|
-
// tslint:disable-next-line:variable-name
|
|
24
|
-
this._data$ = new ReplaySubject(1);
|
|
25
|
-
this.data$ = this._data$.pipe(map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => combineLatest([obs, this.sortBy$.pipe(startWith(EMPTY)), this.searchBy$])), withLatestFrom(this.tableConfig$), map(([[data, sortBy, searchBy], config]) => {
|
|
26
|
-
// create a new array reference and sort new array (prevent mutating existing state)
|
|
27
|
-
data = [...data];
|
|
28
|
-
return !sortBy
|
|
29
|
-
? searchBy
|
|
30
|
-
? search(searchBy, false, data, config)
|
|
31
|
-
: data
|
|
32
|
-
: (searchBy ? search(searchBy, false, data, config) : data)?.sort((a, b) => {
|
|
33
|
-
// TODO: improve logic
|
|
34
|
-
const typed = sortBy;
|
|
35
|
-
return a[typed.sortBy] > b[typed.sortBy]
|
|
36
|
-
? typed.sortByOrder === Order.ASC
|
|
37
|
-
? 1
|
|
38
|
-
: -1
|
|
39
|
-
: b[typed.sortBy] > a[typed.sortBy]
|
|
40
|
-
? typed.sortByOrder === Order.ASC
|
|
41
|
-
? -1
|
|
42
|
-
: 1
|
|
43
|
-
: 0;
|
|
44
|
-
});
|
|
45
|
-
}), shareReplay(1));
|
|
46
|
-
this.table$ = combineLatest([this.data$, this.tableConfig$]).pipe(map(([sorted, config]) => {
|
|
47
|
-
// if pagination is disabled...
|
|
48
|
-
if (!config.pagination || config.pagination.length === 0) {
|
|
49
|
-
// ...return unaltered array
|
|
50
|
-
return { data: [sorted], config, info: { records: sorted.length, pageTotal: 1 } };
|
|
51
|
-
}
|
|
52
|
-
// return record set
|
|
53
|
-
return {
|
|
54
|
-
data: chunk(sorted, +(config.pagination.length || 0)),
|
|
55
|
-
config,
|
|
56
|
-
info: {
|
|
57
|
-
records: sorted.length,
|
|
58
|
-
pageTotal: Math.ceil(sorted.length / +(config.pagination.length || 0)),
|
|
59
|
-
},
|
|
60
|
-
};
|
|
61
|
-
}), shareReplay(1));
|
|
62
|
-
this._currentPage$ = new BehaviorSubject(0);
|
|
63
|
-
this.currentPage$ = combineLatest([this._currentPage$, this.table$]).pipe(map(([page, table]) => {
|
|
64
|
-
// determine last page
|
|
65
|
-
const lastPage = Math.ceil(table.info.records / (table.config?.pagination?.length || table.info.records)) - 1;
|
|
66
|
-
// determine max/min position
|
|
67
|
-
return +page < 0 ? 0 : +page > lastPage ? lastPage : +page;
|
|
68
|
-
}), shareReplay(1));
|
|
69
|
-
this.colspan$ = this.tableConfig$.pipe(switchMap((config) => config.columns
|
|
70
|
-
? of(Object.values(config.columns || config.rows || {}).filter((value) => value.hidden !== true).length)
|
|
71
|
-
: this.data$.pipe(map((data) => data.length + 1))));
|
|
72
|
-
this.columnOrder = (a, b) => {
|
|
73
|
-
return (a.value.order || 0) - (b.value.order || 0);
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
set loading(value) {
|
|
77
|
-
this._loading$.next(value);
|
|
78
|
-
}
|
|
79
|
-
set page(value) {
|
|
80
|
-
this._currentPage$.next(value);
|
|
81
|
-
}
|
|
82
|
-
set search(value) {
|
|
83
|
-
this._searchBy$.next(value);
|
|
84
|
-
}
|
|
85
|
-
set config(value) {
|
|
86
|
-
this._tableConfig$.next(value);
|
|
87
|
-
}
|
|
88
|
-
set data(value) {
|
|
89
|
-
this._data$.next(value);
|
|
90
|
-
}
|
|
91
|
-
get loading$() {
|
|
92
|
-
return this._loading$.pipe(startWith(false), map((value) => (isObservable(value) ? value : of(value))), switchMap((obs) => obs), shareReplay(1));
|
|
93
|
-
}
|
|
94
|
-
sort(property) {
|
|
95
|
-
const newSortOrder = this._sortBy?.sortBy !== property || this._sortBy?.sortByOrder === Order.DESC || !this._sortBy.sortByOrder
|
|
96
|
-
? Order.ASC
|
|
97
|
-
: Order.DESC;
|
|
98
|
-
const newSortBy = {
|
|
99
|
-
sortBy: property,
|
|
100
|
-
sortByOrder: newSortOrder,
|
|
101
|
-
};
|
|
102
|
-
this.sortBy$.next(newSortBy);
|
|
103
|
-
this._sortBy = newSortBy;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
CoreComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CoreComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
107
|
-
CoreComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CoreComponent, selector: "angular-generic-table", inputs: { loading: "loading", page: "page", search: "search", config: "config", data: "data" }, ngImport: i0, template: "<table [ngClass]=\"(tableConfig$ | async)?.class || 'table'\" [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\">\n <thead>\n <tr *ngIf=\"{\n config:(tableConfig$ | async)!,\n loading: loading$ | async\n } as table\">\n <ng-container *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\">\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ column.value?.sortable ? 'sort ' : '' }} {{ sortBy$ | async | sortClass: column.key }} {{\n (column.key | dashCase) + '-column'\n }} {{column.value.class}}\"\n [class.disabled]=\"table.loading\"\n (click)=\"table.loading || !column.value?.sortable || sort(column.key)\"\n >\n <span *ngIf=\"column.value?.header !== false\">{{ column.value?.header || column.key | capitalCase }}</span>\n </th>\n </ng-container>\n <ng-container *ngIf=\"((table?.config?.rows | keyvalue: columnOrder)||[])[0] as headerRow\">\n <th class=\"row-header\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{ sortBy$ | async | sortClass: headerRow.key }} {{\n (headerRow.key | dashCase) + '-column'\n }}\"\n (click)=\"table.loading || !headerRow.value?.sortable || sort(headerRow.key)\">\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{headerRow?.value?.header || headerRow.key | capitalCase }}</ng-container>\n </th>\n <th *ngFor=\"let column of ((table$ | async)?.data || [])[0]\" ngClass=\"{{headerRow.value?.class}}\">\n <ng-container [ngTemplateOutlet]=\"(table.config?.rows || {})[headerRow.key].templateRef ? templateRef : (table.config?.rows || {})[headerRow.key].transform ? transformData:\n rawData\" [ngTemplateOutletContext]=\"{row: column, column: headerRow, transform: (table.config?.rows || {})[headerRow.key].transform, templateRef: (table.config?.rows || {})[headerRow.key].templateRef, index: 0}\">\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container\n *ngIf=\"(table$ | async)! as table\"\n >\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr *ngFor=\"let row of table!.data![(currentPage$ | async) || 0]; let i = index\" [attr.id]=\"'tableRow_' + i\">\n <ng-container *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\">\n <td *ngIf=\"!column.value?.hidden\" ngClass=\"{{(column.key | dashCase) + '-column'}} {{column.value?.class}}\">\n <span *ngIf=\"column.value?.mobileHeader && table.config?.mobileLayout\" class=\"mobile-header\">{{ column.value?.mobileHeader !== true ? column.value?.mobileHeader : column.value?.header || column.key | capitalCase }}</span>\n <ng-container [ngTemplateOutlet]=\"(searchBy$ | async) && !(table.config?.columns || {})[column.key].templateRef ? highlighted:\n (table.config?.columns || {})[column.key].templateRef ? templateRef : (table.config?.columns || {})[column.key].transform ? transformData:\n rawData\" [ngTemplateOutletContext]=\"{row: row, column: column, search: (searchBy$ | async), transform: (table.config?.columns || {})[column.key].transform, templateRef: (table.config?.columns || {})[column.key].templateRef, index: i}\"></ng-container></td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container *ngFor=\"let row of table?.config?.rows | keyvalue: columnOrder | slice:1; let i = index\">\n <tr *ngIf=\"!row.value?.hidden\" [attr.id]=\"'tableRow_' + i\" ngClass=\"{{(row.key | dashCase) + '-row'}}\">\n <th class=\"row-header\">\n <span *ngIf=\"row.value.mobileHeader\" class=\"mobile-header\">{{ row.value?.mobileHeader !== true ? row.value?.mobileHeader : row.value?.header || row.key | capitalCase }}</span>\n {{row.value?.header || row.key | capitalCase}}\n </th>\n <td *ngFor=\"let column of (table?.data || [])[0]\" ngClass=\"{{row.value?.class}}\">\n <ng-container [ngTemplateOutlet]=\"(table.config?.rows || {})[row.key].templateRef ? templateRef : (table.config?.rows || {})[row.key].transform ? transformData:\n rawData\" [ngTemplateOutletContext]=\"{row: column, column: row, transform: (table.config?.rows || {})[row.key].transform, templateRef: (table.config?.rows || {})[row.key].templateRef, index: i}\">\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"(row[column.key] | highlight: search)\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{row[column.key]}}\n</ng-template>\n<ng-template #transformData let-row=\"row\" let-column=\"column\" let-transform=\"transform\">\n {{row[column.key] | dynamicPipe:transform.pipe:transform?.args}}\n</ng-template>\n<ng-template #templateRef let-row=\"row\" let-column=\"column\" let-index=\"index\" let-templateRef=\"templateRef\">\n <ng-container [ngTemplateOutlet]=\"templateRef\" [ngTemplateOutletContext]=\"{row: row, col: column, index: index}\"></ng-container>\n</ng-template>\n", directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i1.AsyncPipe, "keyvalue": i1.KeyValuePipe, "sortClass": i2.SortClassPipe, "dashCase": i3.DashCasePipe, "capitalCase": i4.CapitalCasePipe, "slice": i1.SlicePipe, "highlight": i5.HighlightPipe, "dynamicPipe": i6.DynamicPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
108
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CoreComponent, decorators: [{
|
|
109
|
-
type: Component,
|
|
110
|
-
args: [{ selector: 'angular-generic-table', styles: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<table [ngClass]=\"(tableConfig$ | async)?.class || 'table'\" [class.table-mobile]=\"(tableConfig$ | async)?.mobileLayout\">\n <thead>\n <tr *ngIf=\"{\n config:(tableConfig$ | async)!,\n loading: loading$ | async\n } as table\">\n <ng-container *ngFor=\"let column of table?.config?.columns | keyvalue: columnOrder\">\n <th\n *ngIf=\"!column.value?.hidden\"\n ngClass=\"{{ column.value?.sortable ? 'sort ' : '' }} {{ sortBy$ | async | sortClass: column.key }} {{\n (column.key | dashCase) + '-column'\n }} {{column.value.class}}\"\n [class.disabled]=\"table.loading\"\n (click)=\"table.loading || !column.value?.sortable || sort(column.key)\"\n >\n <span *ngIf=\"column.value?.header !== false\">{{ column.value?.header || column.key | capitalCase }}</span>\n </th>\n </ng-container>\n <ng-container *ngIf=\"((table?.config?.rows | keyvalue: columnOrder)||[])[0] as headerRow\">\n <th class=\"row-header\"\n ngClass=\"{{ headerRow.value?.sortable ? 'sort ' : '' }} {{ sortBy$ | async | sortClass: headerRow.key }} {{\n (headerRow.key | dashCase) + '-column'\n }}\"\n (click)=\"table.loading || !headerRow.value?.sortable || sort(headerRow.key)\">\n <ng-container *ngIf=\"headerRow?.value?.header !== false\">{{headerRow?.value?.header || headerRow.key | capitalCase }}</ng-container>\n </th>\n <th *ngFor=\"let column of ((table$ | async)?.data || [])[0]\" ngClass=\"{{headerRow.value?.class}}\">\n <ng-container [ngTemplateOutlet]=\"(table.config?.rows || {})[headerRow.key].templateRef ? templateRef : (table.config?.rows || {})[headerRow.key].transform ? transformData:\n rawData\" [ngTemplateOutletContext]=\"{row: column, column: headerRow, transform: (table.config?.rows || {})[headerRow.key].transform, templateRef: (table.config?.rows || {})[headerRow.key].templateRef, index: 0}\">\n </ng-container>\n </th>\n </ng-container>\n </tr>\n </thead>\n <tbody *ngIf=\"loading$ | async; else tableContent\">\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-loading\"></ng-content>\n </td>\n </tr>\n </tbody>\n</table>\n<ng-template #tableContent>\n <ng-container\n *ngIf=\"(table$ | async)! as table\"\n >\n <tbody *ngIf=\"(table!.data![0] || table!.data!).length > 0; else noData\">\n <ng-container *ngIf=\"table.config.columns\">\n <tr *ngFor=\"let row of table!.data![(currentPage$ | async) || 0]; let i = index\" [attr.id]=\"'tableRow_' + i\">\n <ng-container *ngFor=\"let column of table.config?.columns | keyvalue: columnOrder\">\n <td *ngIf=\"!column.value?.hidden\" ngClass=\"{{(column.key | dashCase) + '-column'}} {{column.value?.class}}\">\n <span *ngIf=\"column.value?.mobileHeader && table.config?.mobileLayout\" class=\"mobile-header\">{{ column.value?.mobileHeader !== true ? column.value?.mobileHeader : column.value?.header || column.key | capitalCase }}</span>\n <ng-container [ngTemplateOutlet]=\"(searchBy$ | async) && !(table.config?.columns || {})[column.key].templateRef ? highlighted:\n (table.config?.columns || {})[column.key].templateRef ? templateRef : (table.config?.columns || {})[column.key].transform ? transformData:\n rawData\" [ngTemplateOutletContext]=\"{row: row, column: column, search: (searchBy$ | async), transform: (table.config?.columns || {})[column.key].transform, templateRef: (table.config?.columns || {})[column.key].templateRef, index: i}\"></ng-container></td>\n </ng-container>\n </tr>\n </ng-container>\n <ng-container *ngIf=\"table.config.rows\">\n <ng-container *ngFor=\"let row of table?.config?.rows | keyvalue: columnOrder | slice:1; let i = index\">\n <tr *ngIf=\"!row.value?.hidden\" [attr.id]=\"'tableRow_' + i\" ngClass=\"{{(row.key | dashCase) + '-row'}}\">\n <th class=\"row-header\">\n <span *ngIf=\"row.value.mobileHeader\" class=\"mobile-header\">{{ row.value?.mobileHeader !== true ? row.value?.mobileHeader : row.value?.header || row.key | capitalCase }}</span>\n {{row.value?.header || row.key | capitalCase}}\n </th>\n <td *ngFor=\"let column of (table?.data || [])[0]\" ngClass=\"{{row.value?.class}}\">\n <ng-container [ngTemplateOutlet]=\"(table.config?.rows || {})[row.key].templateRef ? templateRef : (table.config?.rows || {})[row.key].transform ? transformData:\n rawData\" [ngTemplateOutletContext]=\"{row: column, column: row, transform: (table.config?.rows || {})[row.key].transform, templateRef: (table.config?.rows || {})[row.key].templateRef, index: i}\">\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </ng-container>\n </tbody>\n </ng-container>\n</ng-template>\n<ng-template #noData>\n <tbody>\n <tr>\n <td class=\"p-0\" [colSpan]=\"colspan$ | async\">\n <ng-content select=\".table-no-data\"></ng-content>\n </td>\n </tr>\n </tbody>\n</ng-template>\n<ng-template #highlighted let-row=\"row\" let-column=\"column\" let-search=\"search\">\n <div [innerHTML]=\"(row[column.key] | highlight: search)\"></div>\n</ng-template>\n<ng-template #rawData let-row=\"row\" let-column=\"column\">\n {{row[column.key]}}\n</ng-template>\n<ng-template #transformData let-row=\"row\" let-column=\"column\" let-transform=\"transform\">\n {{row[column.key] | dynamicPipe:transform.pipe:transform?.args}}\n</ng-template>\n<ng-template #templateRef let-row=\"row\" let-column=\"column\" let-index=\"index\" let-templateRef=\"templateRef\">\n <ng-container [ngTemplateOutlet]=\"templateRef\" [ngTemplateOutletContext]=\"{row: row, col: column, index: index}\"></ng-container>\n</ng-template>\n" }]
|
|
111
|
-
}], propDecorators: { loading: [{
|
|
112
|
-
type: Input
|
|
113
|
-
}], page: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], search: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}], config: [{
|
|
118
|
-
type: Input
|
|
119
|
-
}], data: [{
|
|
120
|
-
type: Input
|
|
121
|
-
}] } });
|
|
122
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFjLEVBQUUsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR25ILE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7O0FBV3RELE1BQU0sT0FBTyxhQUFhO0lBTjFCO1FBdUNVLGNBQVMsR0FBaUQsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkYsWUFBTyxHQUF1QixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBSTVDLHlDQUF5QztRQUNqQyxlQUFVLEdBQXNELElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdGLGNBQVMsR0FBOEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ3pELFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFDYixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxL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SUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ3hHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBQ2pCLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLE1BQU0sRUFBRSxRQUFRO1lBQ2hCLFdBQVcsRUFBRSxZQUFZO1NBQzFCLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDOzswR0F2SVUsYUFBYTs4RkFBYixhQUFhLDZKQ2xCMUIsdTBMQWlHQTsyRkQvRWEsYUFBYTtrQkFOekIsU0FBUzsrQkFDRSx1QkFBdUIsVUFFekIsRUFBRSxtQkFDTyx1QkFBdUIsQ0FBQyxNQUFNOzhCQUdsQyxPQUFPO3NCQUFuQixLQUFLO2dCQUlGLElBQUk7c0JBRFAsS0FBSztnQkFNRixNQUFNO3NCQURULEtBQUs7Z0JBTUYsTUFBTTtzQkFEVCxLQUFLO2dCQU1GLElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgS2V5VmFsdWUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgbWFwLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW4gfSBmcm9tICcuL21vZGVscy90YWJsZS1jb2x1bW4uaW50ZXJmYWNlJztcbmltcG9ydCB7IE9yZGVyIH0gZnJvbSAnLi9lbnVtcy9vcmRlci5lbnVtJztcbmltcG9ydCB7IGNodW5rLCBzZWFyY2ggfSBmcm9tICcuL3V0aWxpdGllcy91dGlsaXRpZXMnO1xuaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICcuL21vZGVscy90YWJsZS1yb3cuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlU29ydCB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLXNvcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlTWV0YSB9IGZyb20gJy4vbW9kZWxzL3RhYmxlLW1ldGEuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYW5ndWxhci1nZW5lcmljLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29yZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHNldCBsb2FkaW5nKHZhbHVlOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmckLm5leHQodmFsdWUpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwYWdlKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jdXJyZW50UGFnZSQubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBASW5wdXQoKVxuICBzZXQgc2VhcmNoKHZhbHVlOiBPYnNlcnZhYmxlPHN0cmluZz4gfCBzdHJpbmcgfCBudWxsKSB7XG4gICAgdGhpcy5fc2VhcmNoQnkkLm5leHQodmFsdWUpO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbmZpZyh2YWx1ZTogT2JzZXJ2YWJsZTxUYWJsZUNvbmZpZz4gfCBUYWJsZUNvbmZpZykge1xuICAgIHRoaXMuX3RhYmxlQ29uZmlnJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhKHZhbHVlOiBPYnNlcnZhYmxlPEFycmF5PFRhYmxlUm93Pj4gfCBBcnJheTxUYWJsZVJvdz4pIHtcbiAgICB0aGlzLl9kYXRhJC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIGdldCBsb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZyQucGlwZShcbiAgICAgIHN0YXJ0V2l0aChmYWxzZSksXG4gICAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRpbmckOiBSZXBsYXlTdWJqZWN0PE9ic2VydmFibGU8Ym9vbGVhbj4gfCBib29sZWFuPiA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xuICBzb3J0QnkkOiBTdWJqZWN0PFRhYmxlU29ydD4gPSBuZXcgU3ViamVjdCgpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zb3J0Qnk6IFRhYmxlU29ydCB8IHVuZGVmaW5lZDtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF9zZWFyY2hCeSQ6IFJlcGxheVN1YmplY3Q8T2JzZXJ2YWJsZTxzdHJpbmc+IHwgc3RyaW5nIHwgbnVsbD4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgc2VhcmNoQnkkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+ID0gdGhpcy5fc2VhcmNoQnkkLnBpcGUoXG4gICAgc3RhcnRXaXRoKCcnKSxcbiAgICBtYXAoKHZhbHVlKSA9PiAoaXNPYnNlcnZhYmxlKHZhbHVlKSA/IHZhbHVlIDogb2YodmFsdWUpKSksXG4gICAgc3dpdGNoTWFwKChvYnMpID0+IG9icyksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dmFyaWFibGUtbmFtZVxuICBwcml2YXRlIF90YWJsZUNvbmZpZyQ6IFJlcGxheVN1YmplY3Q8VGFibGVDb25maWcgfCBPYnNlcnZhYmxlPFRhYmxlQ29uZmlnPj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgdGFibGVDb25maWckOiBPYnNlcnZhYmxlPFRhYmxlQ29uZmlnPiA9IHRoaXMuX3RhYmxlQ29uZmlnJC5waXBlKFxuICAgIG1hcCgodmFsdWUpID0+IChpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiBvZih2YWx1ZSkpKSxcbiAgICBzd2l0Y2hNYXAoKG9icykgPT4gb2JzKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp2YXJpYWJsZS1uYW1lXG4gIHByaXZhdGUgX2RhdGEkOiBSZXBsYXlTdWJqZWN0PEFycmF5PFRhYmxlUm93PiB8IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+Pj4gPSBuZXcgUmVwbGF5U3ViamVjdCgxKTtcbiAgZGF0YSQ6IE9ic2VydmFibGU8QXJyYXk8VGFibGVSb3c+PiA9IHRoaXMuX2RhdGEkLnBpcGUoXG4gICAgbWFwKCh2YWx1ZSkgPT4gKGlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IG9mKHZhbHVlKSkpLFxuICAgIHN3aXRjaE1hcCgob2JzKSA9PiBjb21iaW5lTGF0ZXN0KFtvYnMsIHRoaXMuc29ydEJ5JC5waXBlKHN0YXJ0V2l0aChFTVBUWSkpLCB0aGlzLnNlYXJjaEJ5JF0pKSxcbiAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLnRhYmxlQ29uZmlnJCksXG4gICAgbWFwKChbW2RhdGEsIHNvcnRCeSwgc2VhcmNoQnldLCBjb25maWddKSA9PiB7XG4gICAgICAvLyBjcmVhdGUgYSBuZXcgYXJyYXkgcmVmZXJlbmNlIGFuZCBzb3J0IG5ldyBhcnJheSAocHJldmVudCBtdXRhdGluZyBleGlzdGluZyBzdGF0ZSlcbiAgICAgIGRhdGEgPSBbLi4uZGF0YV07XG4gICAgICByZXR1cm4gIXNvcnRCeVxuICAgICAgICA/IHNlYXJjaEJ5XG4gICAgICAgICAgPyBzZWFyY2goc2VhcmNoQnksIGZhbHNlLCBkYXRhLCBjb25maWcpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICAgIDogKHNlYXJjaEJ5ID8gc2VhcmNoKHNlYXJjaEJ5LCBmYWxzZSwgZGF0YSwgY29uZmlnKSA6IGRhdGEpPy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpbXByb3ZlIGxvZ2ljXG4gICAgICAgICAgICBjb25zdCB0eXBlZCA9IHNvcnRCeSBhcyBUYWJsZVNvcnQ7XG4gICAgICAgICAgICByZXR1cm4gYVt0eXBlZC5zb3J0QnldID4gYlt0eXBlZC5zb3J0QnldXG4gICAgICAgICAgICAgID8gdHlwZWQuc29ydEJ5T3JkZXIgPT09IE9yZGVyLkFTQ1xuICAgICAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgICAgIDogLTFcbiAgICAgICAgICAgICAgOiBiW3R5cGVkLnNvcnRCeV0gPiBhW3R5cGVkLnNvcnRCeV1cbiAgICAgICAgICAgICAgPyB0eXBlZC5zb3J0QnlPcmRlciA9PT0gT3JkZXIuQVNDXG4gICAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICAgIDogMVxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfSk7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICB0YWJsZSQ6IE9ic2VydmFibGU8VGFibGVNZXRhPiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF0YSQsIHRoaXMudGFibGVDb25maWckXSkucGlwZShcbiAgICBtYXAoKFtzb3J0ZWQsIGNvbmZpZ10pID0+IHtcbiAgICAgIC8vIGlmIHBhZ2luYXRpb24gaXMgZGlzYWJsZWQuLi5cbiAgICAgIGlmICghY29uZmlnLnBhZ2luYXRpb24gfHwgY29uZmlnLnBhZ2luYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIC4uLnJldHVybiB1bmFsdGVyZWQgYXJyYXlcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogW3NvcnRlZF0sIGNvbmZpZywgaW5mbzogeyByZWNvcmRzOiBzb3J0ZWQubGVuZ3RoLCBwYWdlVG90YWw6IDEgfSB9O1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHJlY29yZCBzZXRcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IGNodW5rKHNvcnRlZCwgKyhjb25maWcucGFnaW5hdGlvbi5sZW5ndGggfHwgMCkpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIGluZm86IHtcbiAgICAgICAgICByZWNvcmRzOiBzb3J0ZWQubGVuZ3RoLFxuICAgICAgICAgIHBhZ2VUb3RhbDogTWF0aC5jZWlsKHNvcnRlZC5sZW5ndGggLyArKGNvbmZpZy5wYWdpbmF0aW9uLmxlbmd0aCB8fCAwKSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcHJpdmF0ZSBfY3VycmVudFBhZ2UkOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG4gIGN1cnJlbnRQYWdlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX2N1cnJlbnRQYWdlJCwgdGhpcy50YWJsZSRdKS5waXBlKFxuICAgIG1hcCgoW3BhZ2UsIHRhYmxlXTogYW55KSA9PiB7XG4gICAgICAvLyBkZXRlcm1pbmUgbGFzdCBwYWdlXG4gICAgICBjb25zdCBsYXN0UGFnZSA9IE1hdGguY2VpbCh0YWJsZS5pbmZvLnJlY29yZHMgLyAodGFibGUuY29uZmlnPy5wYWdpbmF0aW9uPy5sZW5ndGggfHwgdGFibGUuaW5mby5yZWNvcmRzKSkgLSAxO1xuICAgICAgLy8gZGV0ZXJtaW5lIG1heC9taW4gcG9zaXRpb25cbiAgICAgIHJldHVybiArcGFnZSA8IDAgPyAwIDogK3BhZ2UgPiBsYXN0UGFnZSA/IGxhc3RQYWdlIDogK3BhZ2U7XG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoMSlcbiAgKTtcblxuICBjb2xzcGFuJCA9IHRoaXMudGFibGVDb25maWckLnBpcGUoXG4gICAgc3dpdGNoTWFwKChjb25maWcpID0+XG4gICAgICBjb25maWcuY29sdW1uc1xuICAgICAgICA/IG9mKE9iamVjdC52YWx1ZXMoY29uZmlnLmNvbHVtbnMgfHwgY29uZmlnLnJvd3MgfHwge30pLmZpbHRlcigodmFsdWUpID0+IHZhbHVlLmhpZGRlbiAhPT0gdHJ1ZSkubGVuZ3RoKVxuICAgICAgICA6IHRoaXMuZGF0YSQucGlwZShtYXAoKGRhdGEpID0+IGRhdGEubGVuZ3RoICsgMSkpXG4gICAgKVxuICApO1xuXG4gIHNvcnQocHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5ld1NvcnRPcmRlciA9XG4gICAgICB0aGlzLl9zb3J0Qnk/LnNvcnRCeSAhPT0gcHJvcGVydHkgfHwgdGhpcy5fc29ydEJ5Py5zb3J0QnlPcmRlciA9PT0gT3JkZXIuREVTQyB8fCAhdGhpcy5fc29ydEJ5LnNvcnRCeU9yZGVyXG4gICAgICAgID8gT3JkZXIuQVNDXG4gICAgICAgIDogT3JkZXIuREVTQztcbiAgICBjb25zdCBuZXdTb3J0QnkgPSB7XG4gICAgICBzb3J0Qnk6IHByb3BlcnR5LFxuICAgICAgc29ydEJ5T3JkZXI6IG5ld1NvcnRPcmRlcixcbiAgICB9O1xuICAgIHRoaXMuc29ydEJ5JC5uZXh0KG5ld1NvcnRCeSk7XG4gICAgdGhpcy5fc29ydEJ5ID0gbmV3U29ydEJ5O1xuICB9XG5cbiAgY29sdW1uT3JkZXIgPSAoYTogS2V5VmFsdWU8c3RyaW5nLCBUYWJsZUNvbHVtbj4sIGI6IEtleVZhbHVlPHN0cmluZywgVGFibGVDb2x1bW4+KTogbnVtYmVyID0+IHtcbiAgICByZXR1cm4gKGEudmFsdWUub3JkZXIgfHwgMCkgLSAoYi52YWx1ZS5vcmRlciB8fCAwKTtcbiAgfTtcbn1cbiIsIjx0YWJsZSBbbmdDbGFzc109XCIodGFibGVDb25maWckIHwgYXN5bmMpPy5jbGFzcyB8fCAndGFibGUnXCIgW2NsYXNzLnRhYmxlLW1vYmlsZV09XCIodGFibGVDb25maWckIHwgYXN5bmMpPy5tb2JpbGVMYXlvdXRcIj5cbiAgPHRoZWFkPlxuICAgIDx0ciAqbmdJZj1cIntcbiAgICBjb25maWc6KHRhYmxlQ29uZmlnJCB8IGFzeW5jKSEsXG4gICAgbG9hZGluZzogbG9hZGluZyQgfCBhc3luY1xuICAgIH0gYXMgdGFibGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0YWJsZT8uY29uZmlnPy5jb2x1bW5zIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyXCI+XG4gICAgICAgIDx0aFxuICAgICAgICAgICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uaGlkZGVuXCJcbiAgICAgICAgICBuZ0NsYXNzPVwie3sgY29sdW1uLnZhbHVlPy5zb3J0YWJsZSA/ICdzb3J0ICcgOiAnJyB9fSB7eyBzb3J0QnkkIHwgYXN5bmMgfCBzb3J0Q2xhc3M6IGNvbHVtbi5rZXkgfX0ge3tcbiAgICAgICAgICAgIChjb2x1bW4ua2V5IHwgZGFzaENhc2UpICsgJy1jb2x1bW4nXG4gICAgICAgICAgfX0ge3tjb2x1bW4udmFsdWUuY2xhc3N9fVwiXG4gICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInRhYmxlLmxvYWRpbmdcIlxuICAgICAgICAgIChjbGljayk9XCJ0YWJsZS5sb2FkaW5nIHx8ICFjb2x1bW4udmFsdWU/LnNvcnRhYmxlIHx8IHNvcnQoY29sdW1uLmtleSlcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJjb2x1bW4udmFsdWU/LmhlYWRlciAhPT0gZmFsc2VcIj57eyBjb2x1bW4udmFsdWU/LmhlYWRlciB8fCBjb2x1bW4ua2V5IHwgY2FwaXRhbENhc2UgfX08L3NwYW4+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoKHRhYmxlPy5jb25maWc/LnJvd3MgfCBrZXl2YWx1ZTogY29sdW1uT3JkZXIpfHxbXSlbMF0gYXMgaGVhZGVyUm93XCI+XG4gICAgICAgIDx0aCBjbGFzcz1cInJvdy1oZWFkZXJcIlxuICAgICAgICAgICAgbmdDbGFzcz1cInt7IGhlYWRlclJvdy52YWx1ZT8uc29ydGFibGUgPyAnc29ydCAnIDogJycgfX0ge3sgc29ydEJ5JCB8IGFzeW5jIHwgc29ydENsYXNzOiBoZWFkZXJSb3cua2V5IH19IHt7XG4gICAgICAgICAgICAoaGVhZGVyUm93LmtleSB8IGRhc2hDYXNlKSArICctY29sdW1uJ1xuICAgICAgICAgIH19XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0YWJsZS5sb2FkaW5nIHx8ICFoZWFkZXJSb3cudmFsdWU/LnNvcnRhYmxlIHx8IHNvcnQoaGVhZGVyUm93LmtleSlcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyICE9PSBmYWxzZVwiPnt7aGVhZGVyUm93Py52YWx1ZT8uaGVhZGVyIHx8IGhlYWRlclJvdy5rZXkgfCBjYXBpdGFsQ2FzZSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAoKHRhYmxlJCB8IGFzeW5jKT8uZGF0YSB8fCBbXSlbMF1cIiAgbmdDbGFzcz1cInt7aGVhZGVyUm93LnZhbHVlPy5jbGFzc319XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCIodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50ZW1wbGF0ZVJlZiA/IHRlbXBsYXRlUmVmIDogKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbaGVhZGVyUm93LmtleV0udHJhbnNmb3JtID8gdHJhbnNmb3JtRGF0YTpcbiAgICAgICAgICAgIHJhd0RhdGFcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3JvdzogY29sdW1uLCBjb2x1bW46IGhlYWRlclJvdywgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50cmFuc2Zvcm0sIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtoZWFkZXJSb3cua2V5XS50ZW1wbGF0ZVJlZiwgaW5kZXg6IDB9XCI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGg+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L3RyPlxuICA8L3RoZWFkPlxuICA8dGJvZHkgKm5nSWY9XCJsb2FkaW5nJCB8IGFzeW5jOyBlbHNlIHRhYmxlQ29udGVudFwiPlxuICAgIDx0cj5cbiAgICAgIDx0ZCBjbGFzcz1cInAtMFwiIFtjb2xTcGFuXT1cImNvbHNwYW4kIHwgYXN5bmNcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiLnRhYmxlLWxvYWRpbmdcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gIDwvdGJvZHk+XG48L3RhYmxlPlxuPG5nLXRlbXBsYXRlICN0YWJsZUNvbnRlbnQ+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIih0YWJsZSQgfCBhc3luYykhIGFzIHRhYmxlXCJcbiAgPlxuICAgIDx0Ym9keSAqbmdJZj1cIih0YWJsZSEuZGF0YSFbMF0gfHwgdGFibGUhLmRhdGEhKS5sZW5ndGggPiAwOyBlbHNlIG5vRGF0YVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmNvbmZpZy5jb2x1bW5zXCI+XG4gICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHRhYmxlIS5kYXRhIVsoY3VycmVudFBhZ2UkIHwgYXN5bmMpIHx8IDBdOyBsZXQgaSA9IGluZGV4XCIgW2F0dHIuaWRdPVwiJ3RhYmxlUm93XycgKyBpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8IGtleXZhbHVlOiBjb2x1bW5PcmRlclwiPlxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWNvbHVtbi52YWx1ZT8uaGlkZGVuXCIgbmdDbGFzcz1cInt7KGNvbHVtbi5rZXkgfCBkYXNoQ2FzZSkgKyAnLWNvbHVtbid9fSB7e2NvbHVtbi52YWx1ZT8uY2xhc3N9fVwiPlxuICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNvbHVtbi52YWx1ZT8ubW9iaWxlSGVhZGVyICYmIHRhYmxlLmNvbmZpZz8ubW9iaWxlTGF5b3V0XCIgY2xhc3M9XCJtb2JpbGUtaGVhZGVyXCI+e3sgY29sdW1uLnZhbHVlPy5tb2JpbGVIZWFkZXIgIT09IHRydWUgPyBjb2x1bW4udmFsdWU/Lm1vYmlsZUhlYWRlciA6IGNvbHVtbi52YWx1ZT8uaGVhZGVyIHx8IGNvbHVtbi5rZXkgIHwgY2FwaXRhbENhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiKHNlYXJjaEJ5JCB8IGFzeW5jKSAmJiAhKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udGVtcGxhdGVSZWYgPyBoaWdobGlnaHRlZDpcbiAgICAgICAgICAgICAgICAodGFibGUuY29uZmlnPy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50ZW1wbGF0ZVJlZiA/IHRlbXBsYXRlUmVmIDogKHRhYmxlLmNvbmZpZz8uY29sdW1ucyB8fCB7fSlbY29sdW1uLmtleV0udHJhbnNmb3JtID8gdHJhbnNmb3JtRGF0YTpcbiAgICAgICAgICAgICAgICByYXdEYXRhXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntyb3c6IHJvdywgY29sdW1uOiBjb2x1bW4sIHNlYXJjaDogKHNlYXJjaEJ5JCB8IGFzeW5jKSwgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnPy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50cmFuc2Zvcm0sIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnPy5jb2x1bW5zIHx8IHt9KVtjb2x1bW4ua2V5XS50ZW1wbGF0ZVJlZiwgaW5kZXg6IGl9XCI+PC9uZy1jb250YWluZXI+PC90ZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlLmNvbmZpZy5yb3dzXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiB0YWJsZT8uY29uZmlnPy5yb3dzIHwga2V5dmFsdWU6IGNvbHVtbk9yZGVyIHwgc2xpY2U6MTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDx0ciAqbmdJZj1cIiFyb3cudmFsdWU/LmhpZGRlblwiIFthdHRyLmlkXT1cIid0YWJsZVJvd18nICsgaVwiIG5nQ2xhc3M9XCJ7eyhyb3cua2V5IHwgZGFzaENhc2UpICsgJy1yb3cnfX1cIj5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cInJvdy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cudmFsdWUubW9iaWxlSGVhZGVyXCIgY2xhc3M9XCJtb2JpbGUtaGVhZGVyXCI+e3sgcm93LnZhbHVlPy5tb2JpbGVIZWFkZXIgIT09IHRydWUgPyByb3cudmFsdWU/Lm1vYmlsZUhlYWRlciA6IHJvdy52YWx1ZT8uaGVhZGVyIHx8IHJvdy5rZXkgIHwgY2FwaXRhbENhc2UgfX08L3NwYW4+XG4gICAgICAgICAgICAgIHt7cm93LnZhbHVlPy5oZWFkZXIgfHwgcm93LmtleSB8IGNhcGl0YWxDYXNlfX1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiAodGFibGU/LmRhdGEgfHwgW10pWzBdXCIgbmdDbGFzcz1cInt7cm93LnZhbHVlPy5jbGFzc319XCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiKHRhYmxlLmNvbmZpZz8ucm93cyB8fCB7fSlbcm93LmtleV0udGVtcGxhdGVSZWYgPyB0ZW1wbGF0ZVJlZiA6ICh0YWJsZS5jb25maWc/LnJvd3MgfHwge30pW3Jvdy5rZXldLnRyYW5zZm9ybSA/IHRyYW5zZm9ybURhdGE6XG4gICAgICAgICAgICAgIHJhd0RhdGFcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie3JvdzogY29sdW1uLCBjb2x1bW46IHJvdywgdHJhbnNmb3JtOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50cmFuc2Zvcm0sIHRlbXBsYXRlUmVmOiAodGFibGUuY29uZmlnPy5yb3dzIHx8IHt9KVtyb3cua2V5XS50ZW1wbGF0ZVJlZiwgaW5kZXg6IGl9XCI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGJvZHk+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICA8dGJvZHk+XG4gIDx0cj5cbiAgICA8dGQgY2xhc3M9XCJwLTBcIiBbY29sU3Bhbl09XCJjb2xzcGFuJCB8IGFzeW5jXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCIudGFibGUtbm8tZGF0YVwiPjwvbmctY29udGVudD5cbiAgICA8L3RkPlxuICA8L3RyPlxuICA8L3Rib2R5PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjaGlnaGxpZ2h0ZWQgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtc2VhcmNoPVwic2VhcmNoXCI+XG4gIDxkaXYgW2lubmVySFRNTF09XCIocm93W2NvbHVtbi5rZXldIHwgaGlnaGxpZ2h0OiBzZWFyY2gpXCI+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyYXdEYXRhIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIHt7cm93W2NvbHVtbi5rZXldfX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RyYW5zZm9ybURhdGEgbGV0LXJvdz1cInJvd1wiIGxldC1jb2x1bW49XCJjb2x1bW5cIiBsZXQtdHJhbnNmb3JtPVwidHJhbnNmb3JtXCI+XG4gIHt7cm93W2NvbHVtbi5rZXldIHwgZHluYW1pY1BpcGU6dHJhbnNmb3JtLnBpcGU6dHJhbnNmb3JtPy5hcmdzfX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtdGVtcGxhdGVSZWY9XCJ0ZW1wbGF0ZVJlZlwiPlxuICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlUmVmXCIgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7cm93OiByb3csIGNvbDogY29sdW1uLCBpbmRleDogaW5kZXh9XCI+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import { CoreComponent } from './core.component';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { SortClassPipe } from './pipes/sort-class.pipe';
|
|
5
|
-
import { DashCasePipe } from './pipes/dash-case.pipe';
|
|
6
|
-
import { HighlightPipe } from './pipes/highlight.pipe';
|
|
7
|
-
import { CapitalCasePipe } from './pipes/capital-case.pipe';
|
|
8
|
-
import { DynamicPipe } from './pipes/dynamic.pipe';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export class GenericTableCoreModule {
|
|
11
|
-
}
|
|
12
|
-
GenericTableCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: GenericTableCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
13
|
-
GenericTableCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: GenericTableCoreModule, declarations: [CoreComponent, SortClassPipe, DashCasePipe, HighlightPipe, CapitalCasePipe, CapitalCasePipe, DynamicPipe], imports: [CommonModule], exports: [CoreComponent] });
|
|
14
|
-
GenericTableCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: GenericTableCoreModule, imports: [[CommonModule]] });
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: GenericTableCoreModule, decorators: [{
|
|
16
|
-
type: NgModule,
|
|
17
|
-
args: [{
|
|
18
|
-
declarations: [CoreComponent, SortClassPipe, DashCasePipe, HighlightPipe, CapitalCasePipe, CapitalCasePipe, DynamicPipe],
|
|
19
|
-
imports: [CommonModule],
|
|
20
|
-
exports: [CoreComponent],
|
|
21
|
-
}]
|
|
22
|
-
}] });
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvY29yZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBT25ELE1BQU0sT0FBTyxzQkFBc0I7O21IQUF0QixzQkFBc0I7b0hBQXRCLHNCQUFzQixpQkFKbEIsYUFBYSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsV0FBVyxhQUM3RyxZQUFZLGFBQ1osYUFBYTtvSEFFWixzQkFBc0IsWUFIeEIsQ0FBQyxZQUFZLENBQUM7MkZBR1osc0JBQXNCO2tCQUxsQyxRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQztvQkFDeEgsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7aUJBQ3pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvcmVDb21wb25lbnQgfSBmcm9tICcuL2NvcmUuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBTb3J0Q2xhc3NQaXBlIH0gZnJvbSAnLi9waXBlcy9zb3J0LWNsYXNzLnBpcGUnO1xuaW1wb3J0IHsgRGFzaENhc2VQaXBlIH0gZnJvbSAnLi9waXBlcy9kYXNoLWNhc2UucGlwZSc7XG5pbXBvcnQgeyBIaWdobGlnaHRQaXBlIH0gZnJvbSAnLi9waXBlcy9oaWdobGlnaHQucGlwZSc7XG5pbXBvcnQgeyBDYXBpdGFsQ2FzZVBpcGUgfSBmcm9tICcuL3BpcGVzL2NhcGl0YWwtY2FzZS5waXBlJztcbmltcG9ydCB7IER5bmFtaWNQaXBlIH0gZnJvbSAnLi9waXBlcy9keW5hbWljLnBpcGUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtDb3JlQ29tcG9uZW50LCBTb3J0Q2xhc3NQaXBlLCBEYXNoQ2FzZVBpcGUsIEhpZ2hsaWdodFBpcGUsIENhcGl0YWxDYXNlUGlwZSwgQ2FwaXRhbENhc2VQaXBlLCBEeW5hbWljUGlwZV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQ29yZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEdlbmVyaWNUYWJsZUNvcmVNb2R1bGUge31cbiJdfQ==
|