@bootkit/ng0 0.0.0-alpha.15 → 0.0.0-alpha.16
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/common/index.d.ts +2 -2
- package/components/table/index.d.ts +23 -17
- package/data/index.d.ts +5 -44
- package/fesm2022/bootkit-ng0-components-table.mjs +63 -36
- package/fesm2022/bootkit-ng0-components-table.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-data.mjs +71 -101
- package/fesm2022/bootkit-ng0-data.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization-locales.mjs +13 -0
- package/fesm2022/bootkit-ng0-localization-locales.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization.mjs.map +1 -1
- package/localization/index.d.ts +5 -0
- package/package.json +5 -5
package/common/index.d.ts
CHANGED
|
@@ -38,9 +38,9 @@ declare function flipPlacement(placement: Placement): "start" | "end" | "top" |
|
|
|
38
38
|
*/
|
|
39
39
|
declare function formatString(str: string, ...args: any[]): string;
|
|
40
40
|
|
|
41
|
-
/**
|
|
41
|
+
/** Menu item */
|
|
42
42
|
interface MenuItem {
|
|
43
|
-
type
|
|
43
|
+
type?: string;
|
|
44
44
|
id?: any;
|
|
45
45
|
disabled?: boolean;
|
|
46
46
|
active?: boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { OnInit, TemplateRef, AfterContentInit, OnDestroy, QueryList, DestroyRef } from '@angular/core';
|
|
3
3
|
import { formatString } from '@bootkit/ng0/common';
|
|
4
4
|
import { LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';
|
|
5
5
|
import { DataSourceLike, DataResult, DataRequest, DataSource } from '@bootkit/ng0/data';
|
|
@@ -50,7 +50,7 @@ interface TablePagingOptions {
|
|
|
50
50
|
* This can be a primitive type like 'number', 'currency', 'date', 'time',
|
|
51
51
|
* or an object with specific formatting options.
|
|
52
52
|
*/
|
|
53
|
-
type TableCellType = 'number' | 'currency' | 'date' | 'time' | {
|
|
53
|
+
type TableCellType = 'text' | 'number' | 'currency' | 'date' | 'time' | {
|
|
54
54
|
/** Enum formatting options */
|
|
55
55
|
enum?: {
|
|
56
56
|
/** The name of the enum to use for translation */
|
|
@@ -65,27 +65,32 @@ type TableCellType = 'number' | 'currency' | 'date' | 'time' | {
|
|
|
65
65
|
currency?: {};
|
|
66
66
|
};
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
title?: string;
|
|
68
|
+
declare class TableColumnDirective implements OnInit {
|
|
69
|
+
field: _angular_core.InputSignal<string | undefined>;
|
|
70
|
+
title: _angular_core.InputSignal<string | undefined>;
|
|
72
71
|
emptyCellText: _angular_core.InputSignal<string | undefined>;
|
|
73
72
|
/**
|
|
74
73
|
* Type of the table cell.
|
|
75
74
|
*/
|
|
76
|
-
type: _angular_core.InputSignal<TableCellType
|
|
77
|
-
|
|
78
|
-
cellClass?: string | string[] | {
|
|
75
|
+
type: _angular_core.InputSignal<TableCellType>;
|
|
76
|
+
cellClass: _angular_core.InputSignal<string | string[] | {
|
|
79
77
|
[klass: string]: any;
|
|
80
|
-
} | null | undefined
|
|
81
|
-
|
|
82
|
-
bold: boolean
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
} | null | undefined>;
|
|
79
|
+
/** Deprecated */
|
|
80
|
+
bold: _angular_core.InputSignal<boolean>;
|
|
81
|
+
shrink: _angular_core.InputSignal<boolean>;
|
|
82
|
+
filterable: _angular_core.InputSignal<boolean>;
|
|
83
|
+
filterValue: _angular_core.ModelSignal<any>;
|
|
84
|
+
filterField: _angular_core.InputSignal<string | undefined>;
|
|
85
|
+
filterOperator: _angular_core.ModelSignal<string | undefined>;
|
|
86
|
+
filterOperators: _angular_core.InputSignal<string[] | undefined>;
|
|
87
|
+
showFilterOperators: _angular_core.WritableSignal<boolean>;
|
|
88
|
+
template?: TemplateRef<any>;
|
|
86
89
|
constructor();
|
|
90
|
+
ngOnInit(): void;
|
|
91
|
+
getFilterOperators(): string[];
|
|
87
92
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableColumnDirective, never>;
|
|
88
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableColumnDirective, "ng0-table-col", never, { "field": { "alias": "field"; "required": false; }; "title": { "alias": "title"; "required": false; }; "emptyCellText": { "alias": "emptyCellText"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "cellClass": { "alias": "cellClass"; "required": false; }; "
|
|
93
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableColumnDirective, "ng0-table-col", never, { "field": { "alias": "field"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "emptyCellText": { "alias": "emptyCellText"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "cellClass": { "alias": "cellClass"; "required": false; "isSignal": true; }; "bold": { "alias": "bold"; "required": false; "isSignal": true; }; "shrink": { "alias": "shrink"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "filterValue": { "alias": "filterValue"; "required": false; "isSignal": true; }; "filterField": { "alias": "filterField"; "required": false; "isSignal": true; }; "filterOperator": { "alias": "filterOperator"; "required": false; "isSignal": true; }; "filterOperators": { "alias": "filterOperators"; "required": false; "isSignal": true; }; }, { "filterValue": "filterValueChange"; "filterOperator": "filterOperatorChange"; }, ["template"], never, true, never>;
|
|
89
94
|
}
|
|
90
95
|
|
|
91
96
|
declare class TableDetailRowDirective {
|
|
@@ -196,6 +201,8 @@ declare class TableComponent implements OnInit, AfterContentInit, OnDestroy {
|
|
|
196
201
|
protected _onPageChange(pageIndex: number): void;
|
|
197
202
|
protected _onToggleRowDetailClick(row: any): void;
|
|
198
203
|
protected isRowExpanded(row: any): boolean;
|
|
204
|
+
protected _onToggleFilterOperator(col: TableColumnDirective): void;
|
|
205
|
+
protected _onSelectFilterOperator(col: TableColumnDirective, filterOperator: string): void;
|
|
199
206
|
ngOnDestroy(): void;
|
|
200
207
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableComponent, never>;
|
|
201
208
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableComponent, "ng0-table", ["ng0Table"], { "source": { "alias": "source"; "required": true; "isSignal": true; }; "autoLoad": { "alias": "autoLoad"; "required": false; "isSignal": true; }; "showRowNumbers": { "alias": "showRowNumbers"; "required": false; "isSignal": true; }; "showHeader": { "alias": "showHeader"; "required": false; "isSignal": true; }; "pageable": { "alias": "pageable"; "required": false; "isSignal": true; }; "sortable": { "alias": "sortable"; "required": false; "isSignal": true; }; "tableClass": { "alias": "tableClass"; "required": false; "isSignal": true; }; "headerClass": { "alias": "headerClass"; "required": false; "isSignal": true; }; "caption": { "alias": "caption"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "filterable": { "alias": "filterable"; "required": false; "isSignal": true; }; "loadingIndicator": { "alias": "loadingIndicator"; "required": false; "isSignal": true; }; "loadingCover": { "alias": "loadingCover"; "required": false; "isSignal": true; }; }, {}, ["_detailRow", "_columns"], ["paging-first", "paging-last", "paging-next", "paging-previous", "paging-info"], true, never>;
|
|
@@ -208,4 +215,3 @@ declare class TableModule {
|
|
|
208
215
|
}
|
|
209
216
|
|
|
210
217
|
export { TableColumnDirective, TableComponent, TableDetailRowDirective, TableModule };
|
|
211
|
-
export type { DataTableColumnBadgeValueType };
|
package/data/index.d.ts
CHANGED
|
@@ -69,7 +69,7 @@ interface DataRequestFilter {
|
|
|
69
69
|
*/
|
|
70
70
|
operator?: string;
|
|
71
71
|
/**
|
|
72
|
-
* Indicates if the filter is case-sensitive.
|
|
72
|
+
* Indicates if the filter is case-sensitive. only for text columns.
|
|
73
73
|
* Default is false.
|
|
74
74
|
*/
|
|
75
75
|
caseSensitive?: boolean;
|
|
@@ -156,48 +156,9 @@ type DataSourceLike<T = any> = Array<any> | DataLoader<T> | DataSource<T> | unde
|
|
|
156
156
|
*/
|
|
157
157
|
declare function convertToDataSource<T>(source: DataSourceLike): DataSource<T>;
|
|
158
158
|
/**
|
|
159
|
-
*
|
|
160
|
-
* that can be used in data requests to filter data.
|
|
161
|
-
* It includes operators like Contains, StartsWith, EndsWith, and Equals.
|
|
159
|
+
* LogicalOperator is a list of predefined logical operators that can be used in data requests to filter data.
|
|
162
160
|
*/
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* A filter that matches items that contain the specified value.
|
|
166
|
-
*/
|
|
167
|
-
Contains = "contains",
|
|
168
|
-
/**
|
|
169
|
-
* A filter that matches items that start with the specified value.
|
|
170
|
-
*/
|
|
171
|
-
StartsWith = "startsWith",
|
|
172
|
-
/**
|
|
173
|
-
* A filter that matches items that end with the specified value.
|
|
174
|
-
*/
|
|
175
|
-
EndsWith = "endsWith",
|
|
176
|
-
/**
|
|
177
|
-
* A filter that matches items that are equal to the specified value.
|
|
178
|
-
*/
|
|
179
|
-
Equals = "equals",
|
|
180
|
-
/**
|
|
181
|
-
* A filter that matches items that are not equal to the specified value.
|
|
182
|
-
*/
|
|
183
|
-
NotEquals = "notEquals",
|
|
184
|
-
/**
|
|
185
|
-
* A filter that matches items that are greater than the specified value.
|
|
186
|
-
*/
|
|
187
|
-
GreaterThan = "greaterThan",
|
|
188
|
-
/**
|
|
189
|
-
* A filter that matches items that are greater than or equal to the specified value.
|
|
190
|
-
*/
|
|
191
|
-
GreaterThanOrEqual = "greaterThanOrEqual",
|
|
192
|
-
/**
|
|
193
|
-
* A filter that matches items that are less than the specified value.
|
|
194
|
-
*/
|
|
195
|
-
LessThan = "lessThan",
|
|
196
|
-
/**
|
|
197
|
-
* A filter that matches items that are less than or equal to the specified value.
|
|
198
|
-
*/
|
|
199
|
-
LessThanOrEqual = "lessThanOrEqual"
|
|
200
|
-
}
|
|
161
|
+
type LogicalOperator = 'contains' | 'endsWith' | 'startsWith' | 'like' | 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';
|
|
201
162
|
|
|
202
|
-
export { ArrayDataSource, AsyncDataSource, DataRequest, DataResult, DataSource,
|
|
203
|
-
export type { DataLoader, DataRequestFilter, DataRequestPage, DataRequestSort, DataSourceLike };
|
|
163
|
+
export { ArrayDataSource, AsyncDataSource, DataRequest, DataResult, DataSource, convertToDataSource, toDataResult };
|
|
164
|
+
export type { DataLoader, DataRequestFilter, DataRequestPage, DataRequestSort, DataSourceLike, LogicalOperator };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input,
|
|
2
|
+
import { input, model, signal, TemplateRef, ContentChild, Directive, Input, HostBinding, ContentChildren, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
3
|
import * as i2 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
import * as i3 from '@angular/forms';
|
|
@@ -10,26 +10,53 @@ import * as i1 from '@bootkit/ng0/localization';
|
|
|
10
10
|
import { LocalizationModule } from '@bootkit/ng0/localization';
|
|
11
11
|
import { convertToDataSource, DataRequest } from '@bootkit/ng0/data';
|
|
12
12
|
import { PaginationComponent } from '@bootkit/ng0/components/pagination';
|
|
13
|
+
import * as i4 from '@angular/cdk/overlay';
|
|
14
|
+
import { OverlayModule } from '@angular/cdk/overlay';
|
|
15
|
+
import { NumberDirective } from '@bootkit/ng0/form';
|
|
13
16
|
|
|
14
17
|
class TableColumnDirective {
|
|
15
|
-
field;
|
|
16
|
-
title;
|
|
18
|
+
field = input();
|
|
19
|
+
title = input();
|
|
17
20
|
emptyCellText = input();
|
|
18
21
|
/**
|
|
19
22
|
* Type of the table cell.
|
|
20
23
|
*/
|
|
21
|
-
type = input();
|
|
24
|
+
type = input('text');
|
|
25
|
+
cellClass = input();
|
|
26
|
+
/** Deprecated */
|
|
27
|
+
bold = input(false);
|
|
28
|
+
shrink = input(false);
|
|
29
|
+
filterable = input(false);
|
|
30
|
+
filterValue = model();
|
|
31
|
+
filterField = input();
|
|
32
|
+
filterOperator = model();
|
|
33
|
+
filterOperators = input();
|
|
34
|
+
showFilterOperators = signal(false);
|
|
22
35
|
template;
|
|
23
|
-
cellClass;
|
|
24
|
-
shrink = false;
|
|
25
|
-
bold = false;
|
|
26
|
-
filterable = false;
|
|
27
|
-
filterValue;
|
|
28
|
-
filterField;
|
|
29
36
|
constructor() {
|
|
30
37
|
}
|
|
38
|
+
ngOnInit() {
|
|
39
|
+
if (this.filterOperator() == undefined) {
|
|
40
|
+
this.filterOperator.set(this.type() == 'text' ? 'contains' : 'eq');
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
getFilterOperators() {
|
|
44
|
+
let op = this.filterOperators();
|
|
45
|
+
if (op && op.length > 0)
|
|
46
|
+
return op;
|
|
47
|
+
let type = this.type();
|
|
48
|
+
if (type == 'number' || type == 'currency' || type == 'date' || type == 'time') {
|
|
49
|
+
return ['eq', 'ne', 'gt', 'gte', 'lt', 'lte',];
|
|
50
|
+
}
|
|
51
|
+
else if (type == 'text') {
|
|
52
|
+
return ['contains', 'startsWith', 'endsWith', 'eq', 'ne'];
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
31
58
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableColumnDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
32
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: TableColumnDirective, isStandalone: true, selector: "ng0-table-col", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal:
|
|
59
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.6", type: TableColumnDirective, isStandalone: true, selector: "ng0-table-col", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, emptyCellText: { classPropertyName: "emptyCellText", publicName: "emptyCellText", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, cellClass: { classPropertyName: "cellClass", publicName: "cellClass", isSignal: true, isRequired: false, transformFunction: null }, bold: { classPropertyName: "bold", publicName: "bold", isSignal: true, isRequired: false, transformFunction: null }, shrink: { classPropertyName: "shrink", publicName: "shrink", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, filterValue: { classPropertyName: "filterValue", publicName: "filterValue", isSignal: true, isRequired: false, transformFunction: null }, filterField: { classPropertyName: "filterField", publicName: "filterField", isSignal: true, isRequired: false, transformFunction: null }, filterOperator: { classPropertyName: "filterOperator", publicName: "filterOperator", isSignal: true, isRequired: false, transformFunction: null }, filterOperators: { classPropertyName: "filterOperators", publicName: "filterOperators", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filterValue: "filterValueChange", filterOperator: "filterOperatorChange" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
|
|
33
60
|
}
|
|
34
61
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableColumnDirective, decorators: [{
|
|
35
62
|
type: Directive,
|
|
@@ -37,25 +64,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
37
64
|
selector: 'ng0-table-col',
|
|
38
65
|
standalone: true,
|
|
39
66
|
}]
|
|
40
|
-
}], ctorParameters: () => [], propDecorators: {
|
|
41
|
-
type: Input
|
|
42
|
-
}], title: [{
|
|
43
|
-
type: Input
|
|
44
|
-
}], template: [{
|
|
67
|
+
}], ctorParameters: () => [], propDecorators: { template: [{
|
|
45
68
|
type: ContentChild,
|
|
46
69
|
args: [TemplateRef]
|
|
47
|
-
}], cellClass: [{
|
|
48
|
-
type: Input
|
|
49
|
-
}], shrink: [{
|
|
50
|
-
type: Input
|
|
51
|
-
}], bold: [{
|
|
52
|
-
type: Input
|
|
53
|
-
}], filterable: [{
|
|
54
|
-
type: Input
|
|
55
|
-
}], filterValue: [{
|
|
56
|
-
type: Input
|
|
57
|
-
}], filterField: [{
|
|
58
|
-
type: Input
|
|
59
70
|
}] } });
|
|
60
71
|
|
|
61
72
|
class TableDetailRowDirective {
|
|
@@ -193,6 +204,8 @@ class TableComponent {
|
|
|
193
204
|
this._destroyRef = _destroyRef;
|
|
194
205
|
}
|
|
195
206
|
ngOnInit() {
|
|
207
|
+
}
|
|
208
|
+
ngAfterContentInit() {
|
|
196
209
|
this._dataSource = convertToDataSource(this.source());
|
|
197
210
|
const locale = this._ls.get();
|
|
198
211
|
this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??
|
|
@@ -204,8 +217,6 @@ class TableComponent {
|
|
|
204
217
|
this.load(this.pageable()?.pageIndex);
|
|
205
218
|
}
|
|
206
219
|
}
|
|
207
|
-
ngAfterContentInit() {
|
|
208
|
-
}
|
|
209
220
|
/**
|
|
210
221
|
* Load data for the specified page index (optional).
|
|
211
222
|
* @param pageIndex The page index to load.
|
|
@@ -216,8 +227,8 @@ class TableComponent {
|
|
|
216
227
|
let sort;
|
|
217
228
|
if (this.filterable()) {
|
|
218
229
|
this._columns.forEach(col => {
|
|
219
|
-
if (col.filterable && col.filterValue != '' && col.filterValue != undefined) {
|
|
220
|
-
filters.push({ field: col.filterField ?? col.field, value: col.filterValue, operator:
|
|
230
|
+
if (col.filterable() && col.filterValue() != '' && col.filterValue() != undefined) {
|
|
231
|
+
filters.push({ field: col.filterField() ?? col.field(), value: col.filterValue(), operator: col.filterOperator() });
|
|
221
232
|
}
|
|
222
233
|
});
|
|
223
234
|
}
|
|
@@ -253,7 +264,7 @@ class TableComponent {
|
|
|
253
264
|
return this._dataSource.isLoading;
|
|
254
265
|
}
|
|
255
266
|
_getCellValue(row, col) {
|
|
256
|
-
var subFields = col.field.split('.');
|
|
267
|
+
var subFields = col.field().split('.');
|
|
257
268
|
let value = row[subFields[0]];
|
|
258
269
|
for (let i = 1; i < subFields.length; i++) {
|
|
259
270
|
if (value == null)
|
|
@@ -278,11 +289,25 @@ class TableComponent {
|
|
|
278
289
|
var state = this._rowStates.get(row);
|
|
279
290
|
return state == undefined ? false : state.expanded;
|
|
280
291
|
}
|
|
292
|
+
_onToggleFilterOperator(col) {
|
|
293
|
+
if (col.showFilterOperators()) {
|
|
294
|
+
col.showFilterOperators.set(false);
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
this._columns.forEach(x => x.showFilterOperators.set(false));
|
|
298
|
+
col.showFilterOperators.set(true);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
_onSelectFilterOperator(col, filterOperator) {
|
|
302
|
+
col.filterOperator.set(filterOperator);
|
|
303
|
+
this._columns.forEach(x => x.showFilterOperators.set(false));
|
|
304
|
+
this.load(0);
|
|
305
|
+
}
|
|
281
306
|
ngOnDestroy() {
|
|
282
307
|
this._changeSubscription?.unsubscribe();
|
|
283
308
|
}
|
|
284
309
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableComponent, deps: [{ token: i1.LocalizationService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
285
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: TableComponent, isStandalone: true, selector: "ng0-table", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, autoLoad: { classPropertyName: "autoLoad", publicName: "autoLoad", isSignal: true, isRequired: false, transformFunction: null }, showRowNumbers: { classPropertyName: "showRowNumbers", publicName: "showRowNumbers", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, pageable: { classPropertyName: "pageable", publicName: "pageable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null }, headerClass: { classPropertyName: "headerClass", publicName: "headerClass", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, loadingIndicator: { classPropertyName: "loadingIndicator", publicName: "loadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, loadingCover: { classPropertyName: "loadingCover", publicName: "loadingCover", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ng0-loading": "this.isLoading" } }, queries: [{ propertyName: "_detailRow", first: true, predicate: TableDetailRowDirective, descendants: true }, { propertyName: "_columns", predicate: TableColumnDirective }], exportAs: ["ng0Table"], ngImport: i0, template: "@let $dataResult = _dataResult();\n@let $pageable = pageable();\n\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <!-- <caption>{{caption()}}</caption> -->\n }\n\n @if (showHeader()) {\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th>{{ col.title }}</th>\n }\n </tr>\n </thead>\n }\n\n @if (filterable()) {\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <!-- <th>\n @if(col.filterable) {\n @if(col.type == 'text') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"text\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load()\">\n }@else if(col.type == 'number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"number\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load()\">\n }\n }\n </th> -->\n }\n </tr>\n </thead>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n <!-- @case ('placeholder') {\n <p class=\"text-secondary placeholder-glow mb-0\">\n <span class=\"placeholder col-3\"></span>\n <span class=\"placeholder col-4\"></span>\n <span class=\"placeholder col-4\"></span>\n <span class=\"placeholder col-6\"></span>\n <span class=\"placeholder col-8\"></span>\n </p>\n } -->\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass\"\n [class.shrinked]=\"col.shrink\"\n [class.fw-bold]=\"col.bold\"\n >\n @if (col.template) {\n <ng-container\n *ngTemplateOutlet=\"col.template; context: { $implicit: row }\"\n ></ng-container>\n } @else if (col.field) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\" || type.date) {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\" || type.number) {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }\n } @else {\n {{ cellValue }}\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\"\n >\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"\n ></ng-container>\n </td>\n </tr>\n }\n }\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\"\n >\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!, currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n <div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column;position:relative}@starting-style{.ng0-table-loading-cover{background-color:#0000}}table{margin-bottom:0}tbody{position:relative}td.row-number{width:0}td.shrinked{width:0;white-space:nowrap}.ng0-table-loading-cover{position:absolute;inset:0;background-color:#0000000d;transition:background-color .2s;z-index:1000;display:flex;align-items:center;justify-content:center}.table-scrollable{overflow-y:auto;direction:ltr;scroll-padding:20px}.table-scrollable::-webkit-scrollbar{width:8px}.table-scrollable::-webkit-scrollbar-track{background-color:#00000008}.table-scrollable::-webkit-scrollbar-thumb{background-color:var(--bs-secondary)}.table-scrollable thead th{position:sticky;top:0}.ng0-table-footer{margin-top:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1.TranslatePipe, name: "ng0Translate" }, { kind: "pipe", type: i1.TranslateEnumPipe, name: "ng0TranslateEnum" }, { kind: "pipe", type: i1.DatePipe, name: "ng0Date" }, { kind: "pipe", type: i1.LocalizeBooleanPipe, name: "ng0LocalizeBool" }, { kind: "component", type: PaginationComponent, selector: "ng0-pagination", inputs: ["totalRecords", "pageSize", "selectedPage", "maxVisiblePages", "showNextPreviousButtons", "showFirstLastButtons"], outputs: ["itemClick"], exportAs: ["ng0Pagination"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
310
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: TableComponent, isStandalone: true, selector: "ng0-table", inputs: { source: { classPropertyName: "source", publicName: "source", isSignal: true, isRequired: true, transformFunction: null }, autoLoad: { classPropertyName: "autoLoad", publicName: "autoLoad", isSignal: true, isRequired: false, transformFunction: null }, showRowNumbers: { classPropertyName: "showRowNumbers", publicName: "showRowNumbers", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, pageable: { classPropertyName: "pageable", publicName: "pageable", isSignal: true, isRequired: false, transformFunction: null }, sortable: { classPropertyName: "sortable", publicName: "sortable", isSignal: true, isRequired: false, transformFunction: null }, tableClass: { classPropertyName: "tableClass", publicName: "tableClass", isSignal: true, isRequired: false, transformFunction: null }, headerClass: { classPropertyName: "headerClass", publicName: "headerClass", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, filterable: { classPropertyName: "filterable", publicName: "filterable", isSignal: true, isRequired: false, transformFunction: null }, loadingIndicator: { classPropertyName: "loadingIndicator", publicName: "loadingIndicator", isSignal: true, isRequired: false, transformFunction: null }, loadingCover: { classPropertyName: "loadingCover", publicName: "loadingCover", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.ng0-loading": "this.isLoading" } }, queries: [{ propertyName: "_detailRow", first: true, predicate: TableDetailRowDirective, descendants: true }, { propertyName: "_columns", predicate: TableColumnDirective }], exportAs: ["ng0Table"], ngImport: i0, template: "@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <caption>{{caption()}}</caption>\n }\n\n @if (showHeader()) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n\n @if (filterable()) {\n <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n <ng-container *ngTemplateOutlet=\"dataRowsTemplate\"></ng-container>\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n<div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n</div>\n}\n\n<ng-template #filtersTemplate>\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <th>\n @if(col.filterable() && (col.field() || col.filterValue())) {\n\n <div class=\"input-group\">\n @switch (col.type()) {\n @case ('text') {\n <input [name]=\"'filter-' + col.field\"\n type=\"search\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n @case ('number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"search\"\n ng0Number\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n }\n\n <button class=\"btn btn-outline-light\"\n style=\"border-color: var(--bs-border-color);\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"_onToggleFilterOperator(col)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19 3H5C3.58579 3 2.87868 3 2.43934 3.4122C2 3.8244 2 4.48782 2 5.81466V6.50448C2 7.54232 2 8.06124 2.2596 8.49142C2.5192 8.9216 2.99347 9.18858 3.94202 9.72255L6.85504 11.3624C7.49146 11.7206 7.80967 11.8998 8.03751 12.0976C8.51199 12.5095 8.80408 12.9935 8.93644 13.5872C9 13.8722 9 14.2058 9 14.8729L9 17.5424C9 18.452 9 18.9067 9.25192 19.2613C9.50385 19.6158 9.95128 19.7907 10.8462 20.1406C12.7248 20.875 13.6641 21.2422 14.3321 20.8244C15 20.4066 15 19.4519 15 17.5424V14.8729C15 14.2058 15 13.8722 15.0636 13.5872C15.1959 12.9935 15.488 12.5095 15.9625 12.0976C16.1903 11.8998 16.5085 11.7206 17.145 11.3624L20.058 9.72255C21.0065 9.18858 21.4808 8.9216 21.7404 8.49142C22 8.06124 22 7.54232 22 6.50448V5.81466C22 4.48782 22 3.8244 21.5607 3.4122C21.1213 3 20.4142 3 19 3Z\"\n stroke=\"#1C274C\" stroke-width=\"1.5\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n (detach)=\"col.showFilterOperators.set(false)\">\n <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n @for (item of col.getFilterOperators(); track $index) {\n <li>\n <button class=\"dropdown-item\" [class.active]=\"item == col.filterOperator()\"\n (click)=\"_onSelectFilterOperator(col, item)\">\n {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n </button>\n </li>\n }\n </ul>\n </ng-template>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th>{{ col.title() }}</th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass()\"\n [class.shrinked]=\"col.shrink()\"\n [class.fw-bold]=\"col.bold()\">\n @if (col.template) {\n <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n </ng-container>\n } @else if (col.field()) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\") {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\") {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }@else {\n {{ cellValue }}\n }\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\">\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n }\n</ng-template>\n\n<ng-template #footerTemplate>\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\">\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!,\n currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n</ng-template>", styles: [":host{display:flex;flex-direction:column;position:relative}@starting-style{.ng0-table-loading-cover{background-color:#0000}}table{margin-bottom:0}tbody{position:relative}td.row-number{width:0}td.shrinked{width:0;white-space:nowrap}.ng0-table-loading-cover{position:absolute;inset:0;background-color:#0000000d;transition:background-color .2s;z-index:1000;display:flex;align-items:center;justify-content:center}.table-scrollable{overflow-y:auto;direction:ltr;scroll-padding:20px}.table-scrollable::-webkit-scrollbar{width:8px}.table-scrollable::-webkit-scrollbar-track{background-color:#00000008}.table-scrollable::-webkit-scrollbar-thumb{background-color:var(--bs-secondary)}.table-scrollable thead th{position:sticky;top:0}.ng0-table-footer{margin-top:.5rem}.fade-in{animation:fade-in .5s}@keyframes fade-in{0%{opacity:0}to{opacity:1}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1.TranslatePipe, name: "ng0Translate" }, { kind: "pipe", type: i1.TranslateEnumPipe, name: "ng0TranslateEnum" }, { kind: "pipe", type: i1.DatePipe, name: "ng0Date" }, { kind: "pipe", type: i1.LocalizeBooleanPipe, name: "ng0LocalizeBool" }, { kind: "component", type: PaginationComponent, selector: "ng0-pagination", inputs: ["totalRecords", "pageSize", "selectedPage", "maxVisiblePages", "showNextPreviousButtons", "showFirstLastButtons"], outputs: ["itemClick"], exportAs: ["ng0Pagination"] }, { kind: "directive", type: NumberDirective, selector: "[ng0Number]", inputs: ["minFractionDigits", "maxFractionDigits", "useGrouping", "numberType"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i4.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i4.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
286
311
|
}
|
|
287
312
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: TableComponent, decorators: [{
|
|
288
313
|
type: Component,
|
|
@@ -290,8 +315,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
290
315
|
CommonModule,
|
|
291
316
|
FormsModule,
|
|
292
317
|
LocalizationModule,
|
|
293
|
-
PaginationComponent
|
|
294
|
-
], template: "@let $dataResult = _dataResult();\n@let $pageable = pageable();\n\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <!-- <caption>{{caption()}}</caption> -->\n }\n\n @if (showHeader()) {\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th>{{ col.title }}</th>\n }\n </tr>\n </thead>\n }\n\n @if (filterable()) {\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <!-- <th>\n @if(col.filterable) {\n @if(col.type == 'text') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"text\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load()\">\n }@else if(col.type == 'number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"number\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load()\">\n }\n }\n </th> -->\n }\n </tr>\n </thead>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n <!-- @case ('placeholder') {\n <p class=\"text-secondary placeholder-glow mb-0\">\n <span class=\"placeholder col-3\"></span>\n <span class=\"placeholder col-4\"></span>\n <span class=\"placeholder col-4\"></span>\n <span class=\"placeholder col-6\"></span>\n <span class=\"placeholder col-8\"></span>\n </p>\n } -->\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass\"\n [class.shrinked]=\"col.shrink\"\n [class.fw-bold]=\"col.bold\"\n >\n @if (col.template) {\n <ng-container\n *ngTemplateOutlet=\"col.template; context: { $implicit: row }\"\n ></ng-container>\n } @else if (col.field) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\" || type.date) {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\" || type.number) {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }\n } @else {\n {{ cellValue }}\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\"\n >\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"\n ></ng-container>\n </td>\n </tr>\n }\n }\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\"\n >\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!, currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n <div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n </div>\n}\n", styles: [":host{display:flex;flex-direction:column;position:relative}@starting-style{.ng0-table-loading-cover{background-color:#0000}}table{margin-bottom:0}tbody{position:relative}td.row-number{width:0}td.shrinked{width:0;white-space:nowrap}.ng0-table-loading-cover{position:absolute;inset:0;background-color:#0000000d;transition:background-color .2s;z-index:1000;display:flex;align-items:center;justify-content:center}.table-scrollable{overflow-y:auto;direction:ltr;scroll-padding:20px}.table-scrollable::-webkit-scrollbar{width:8px}.table-scrollable::-webkit-scrollbar-track{background-color:#00000008}.table-scrollable::-webkit-scrollbar-thumb{background-color:var(--bs-secondary)}.table-scrollable thead th{position:sticky;top:0}.ng0-table-footer{margin-top:.5rem}\n"] }]
|
|
318
|
+
PaginationComponent,
|
|
319
|
+
NumberDirective,
|
|
320
|
+
OverlayModule
|
|
321
|
+
], template: "@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <caption>{{caption()}}</caption>\n }\n\n @if (showHeader()) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n\n @if (filterable()) {\n <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n <ng-container *ngTemplateOutlet=\"dataRowsTemplate\"></ng-container>\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n<div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n</div>\n}\n\n<ng-template #filtersTemplate>\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <th>\n @if(col.filterable() && (col.field() || col.filterValue())) {\n\n <div class=\"input-group\">\n @switch (col.type()) {\n @case ('text') {\n <input [name]=\"'filter-' + col.field\"\n type=\"search\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n @case ('number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"search\"\n ng0Number\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n }\n\n <button class=\"btn btn-outline-light\"\n style=\"border-color: var(--bs-border-color);\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"_onToggleFilterOperator(col)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19 3H5C3.58579 3 2.87868 3 2.43934 3.4122C2 3.8244 2 4.48782 2 5.81466V6.50448C2 7.54232 2 8.06124 2.2596 8.49142C2.5192 8.9216 2.99347 9.18858 3.94202 9.72255L6.85504 11.3624C7.49146 11.7206 7.80967 11.8998 8.03751 12.0976C8.51199 12.5095 8.80408 12.9935 8.93644 13.5872C9 13.8722 9 14.2058 9 14.8729L9 17.5424C9 18.452 9 18.9067 9.25192 19.2613C9.50385 19.6158 9.95128 19.7907 10.8462 20.1406C12.7248 20.875 13.6641 21.2422 14.3321 20.8244C15 20.4066 15 19.4519 15 17.5424V14.8729C15 14.2058 15 13.8722 15.0636 13.5872C15.1959 12.9935 15.488 12.5095 15.9625 12.0976C16.1903 11.8998 16.5085 11.7206 17.145 11.3624L20.058 9.72255C21.0065 9.18858 21.4808 8.9216 21.7404 8.49142C22 8.06124 22 7.54232 22 6.50448V5.81466C22 4.48782 22 3.8244 21.5607 3.4122C21.1213 3 20.4142 3 19 3Z\"\n stroke=\"#1C274C\" stroke-width=\"1.5\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n (detach)=\"col.showFilterOperators.set(false)\">\n <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n @for (item of col.getFilterOperators(); track $index) {\n <li>\n <button class=\"dropdown-item\" [class.active]=\"item == col.filterOperator()\"\n (click)=\"_onSelectFilterOperator(col, item)\">\n {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n </button>\n </li>\n }\n </ul>\n </ng-template>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th>{{ col.title() }}</th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass()\"\n [class.shrinked]=\"col.shrink()\"\n [class.fw-bold]=\"col.bold()\">\n @if (col.template) {\n <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n </ng-container>\n } @else if (col.field()) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\") {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\") {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }@else {\n {{ cellValue }}\n }\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\">\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n }\n</ng-template>\n\n<ng-template #footerTemplate>\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\">\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!,\n currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n</ng-template>", styles: [":host{display:flex;flex-direction:column;position:relative}@starting-style{.ng0-table-loading-cover{background-color:#0000}}table{margin-bottom:0}tbody{position:relative}td.row-number{width:0}td.shrinked{width:0;white-space:nowrap}.ng0-table-loading-cover{position:absolute;inset:0;background-color:#0000000d;transition:background-color .2s;z-index:1000;display:flex;align-items:center;justify-content:center}.table-scrollable{overflow-y:auto;direction:ltr;scroll-padding:20px}.table-scrollable::-webkit-scrollbar{width:8px}.table-scrollable::-webkit-scrollbar-track{background-color:#00000008}.table-scrollable::-webkit-scrollbar-thumb{background-color:var(--bs-secondary)}.table-scrollable thead th{position:sticky;top:0}.ng0-table-footer{margin-top:.5rem}.fade-in{animation:fade-in .5s}@keyframes fade-in{0%{opacity:0}to{opacity:1}}\n"] }]
|
|
295
322
|
}], ctorParameters: () => [{ type: i1.LocalizationService }, { type: i0.DestroyRef }], propDecorators: { _columns: [{
|
|
296
323
|
type: ContentChildren,
|
|
297
324
|
args: [TableColumnDirective]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-table.mjs","sources":["../../../projects/ng0/components/table/table-column.directive.ts","../../../projects/ng0/components/table/table-detail-row.directive.ts","../../../projects/ng0/components/table/table.component.ts","../../../projects/ng0/components/table/table.component.html","../../../projects/ng0/components/table/table.module.ts","../../../projects/ng0/components/table/bootkit-ng0-components-table.ts"],"sourcesContent":["import { ContentChild, Directive, input, Input, TemplateRef } from '@angular/core';\nimport { TableCellType } from './types';\n\nexport type DataTableColumnBadgeValueType = string | number | boolean;\n\n@Directive({\n selector: 'ng0-table-col',\n standalone: true,\n})\nexport class TableColumnDirective {\n @Input() field?: string;\n @Input() title?: string;\n emptyCellText = input<string>();\n\n /**\n * Type of the table cell.\n */\n type = input<TableCellType>();\n @ContentChild(TemplateRef) template?: TemplateRef<any>;\n @Input() cellClass?: string | string[] | { [klass: string]: any; } | null | undefined;\n @Input() shrink = false;\n @Input() bold = false;\n @Input() filterable = false;\n @Input() filterValue?: string;\n @Input() filterField?: string;\n\n constructor() {\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n\n@Directive({\n selector: '[ng0-table-detail-row]',\n standalone: true,\n})\nexport class TableDetailRowDirective {\n @Input() showCallback?: (row: any) => boolean;\n\n constructor(public readonly templateRef: TemplateRef<any>) {\n }\n}\n","import { AfterContentInit, ChangeDetectionStrategy, Component, computed, ContentChild, ContentChildren, DestroyRef, HostBinding, input, OnDestroy, OnInit, QueryList, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formatString } from '@bootkit/ng0/common';\nimport { LocalizationModule, LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';\nimport { DataRequest, DataRequestFilter, DataRequestPage, DataRequestSort, DataResult, DataSource, convertToDataSource, DataSourceLike } from '@bootkit/ng0/data';\nimport { PaginationComponent } from '@bootkit/ng0/components/pagination';\nimport { TablePagingOptions } from './types';\n\n/**\n * A generic table component that can display data in a tabular format.\n * It supports features like pagination, sorting, filtering, and row details.\n * It can be used with any data source that implements the DataSource interface.\n */\n@Component({\n selector: 'ng0-table',\n exportAs: 'ng0Table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n LocalizationModule,\n PaginationComponent\n ]\n})\nexport class TableComponent implements OnInit, AfterContentInit, OnDestroy {\n\n /**\n * The data source for the table.\n * This can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\n public source = input.required<DataSourceLike<any>>();\n\n /**\n * If true, the table will automatically load data when initialized.\n * This is useful for tables that need to display data immediately without user interaction.\n */\n public autoLoad = input(true);\n\n /**\n * If true, the table will show row numbers.\n * This will add a column to the left of the table with the row numbers.\n */\n public showRowNumbers = input(false);\n\n /** \n * If true, the table will show the header row.\n */\n public showHeader = input(true);\n\n /**\n * If true, the table will support pagination.\n * If false, the table will load all records at once.\n */\n public pageable = input<TablePagingOptions | undefined, TablePagingOptions | boolean>(undefined, {\n transform: v => {\n if (v === undefined || v === null || v === false) {\n return undefined;\n }\n\n if (v === true) {\n v = {};\n }\n\n v.pageIndex = v.pageIndex ?? 1;\n v.pageSize = v.pageSize ?? 10;\n v.maxVisiblePages = v.maxVisiblePages ?? 10;\n v.showPagingControls = v.showPagingControls ?? true;\n return v;\n }\n });\n\n /**\n * If true, the table will support sorting.\n * This will add a sort icon to each column header.\n */\n public sortable = input(true);\n\n /**\n * The CSS class to apply to the table element.\n * This can be used to apply custom styles to the table.\n */\n public tableClass = input<string | string[]>();\n\n /**\n * The CSS class to apply to the header element.\n */\n public headerClass = input<string>();\n\n /**\n * The caption of the table.\n */\n public caption = input<string>();\n\n /**\n * The height of the table in pixels.\n * This can be used to set a fixed height for the table.\n */\n public height = input<number>();\n\n /**\n * If true, the table will support filtering.\n * This will add a filter input to each column header.\n */\n public filterable = input(false);\n\n /**\n * The indicator to show while the table is loading data for the first time.\n */\n public loadingIndicator = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n /** If true, the table will show a loading cover while data is being loaded.\n * This can be used to prevent user interaction with the table while loading.\n * This cover is not displayed when the table is loading for the first time.\n * Instead, the table will show a loading based on loadingIndicator settings.\n */\n public loadingCover = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n // @Input() rowColor?: (row: any) => BootstrapColor;\n\n @ContentChildren(TableColumnDirective)\n protected _columns!: QueryList<TableColumnDirective>;\n\n @ContentChild(TableDetailRowDirective)\n protected _detailRow?: TableDetailRowDirective;\n\n protected _dataResult = signal<DataResult | undefined>(undefined);\n protected _lastRequest?: DataRequest; // The last data request made to the data source\n protected _loadingRequest?: DataRequest; // The current data request being processed\n protected _rowStates = new Map<any, { expanded: boolean }>();\n protected _formatString = formatString;\n private _changeSubscription?: Subscription;\n protected _dataSource!: DataSource;\n protected _pagingFormatter!: TableComponentPagingFormatter;\n protected _lastError?: any;\n\n constructor(protected _ls: LocalizationService, private _destroyRef: DestroyRef) {\n }\n\n ngOnInit(): void {\n this._dataSource = convertToDataSource(this.source());\n const locale = this._ls.get();\n this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??\n ((o) => `Showing ${o.firstRecord}-${o.lastRecord} of ${o.totalRecords} records`);\n\n // this._changeSubscription = this.dataSource().change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(result => {\n // this.reload();\n // });\n\n if (this.autoLoad()) {\n this.load(this.pageable()?.pageIndex);\n }\n }\n\n ngAfterContentInit(): void {\n\n }\n\n /**\n * Load data for the specified page index (optional).\n * @param pageIndex The page index to load.\n */\n public load(pageIndex?: number) {\n let page: DataRequestPage | undefined;\n let filters: DataRequestFilter[] = [];\n let sort: DataRequestSort | undefined;\n\n if (this.filterable()) {\n this._columns.forEach(col => {\n if (col.filterable && col.filterValue != '' && col.filterValue != undefined) {\n filters.push({ field: col.filterField ?? col.field!, value: col.filterValue, operator: 'EQ' });\n }\n });\n }\n\n if (this.pageable()) {\n page = {\n index: pageIndex || this._lastRequest?.page?.index || 1,\n size: this._lastRequest?.page?.size || 10,\n zeroBased: false\n };\n }\n\n if (this.sortable()) {\n // sort = ...\n }\n\n this._loadingRequest = new DataRequest({ page, filters, sort, select: [], computeTotal: true });\n\n this._dataSource.load(this._loadingRequest)\n .pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n next: result => {\n this._dataResult.set(result);\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n this._lastError = undefined;\n }, error: err => {\n this._lastError = err;\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n }\n });\n }\n\n /**\n * Determines if the table is currently loading data.\n */\n @HostBinding('class.ng0-loading')\n public get isLoading() {\n return this._dataSource.isLoading;\n }\n\n protected _getCellValue(row: any, col: TableColumnDirective) {\n var subFields = col.field!.split('.');\n let value = row[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value[subFields[i]];\n }\n\n return value;\n }\n\n\n protected _onPageChange(pageIndex: number) {\n this.load(pageIndex);\n }\n\n protected _onToggleRowDetailClick(row: any) {\n var state = this._rowStates.get(row)\n if (!state) {\n this._rowStates.set(row, { expanded: true });\n } else {\n state.expanded = !state.expanded;\n }\n }\n\n protected isRowExpanded(row: any) {\n var state = this._rowStates.get(row)\n return state == undefined ? false : state.expanded;\n }\n\n ngOnDestroy(): void {\n this._changeSubscription?.unsubscribe();\n }\n}\n","@let $dataResult = _dataResult();\n@let $pageable = pageable();\n\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <!-- <caption>{{caption()}}</caption> -->\n }\n\n @if (showHeader()) {\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th>{{ col.title }}</th>\n }\n </tr>\n </thead>\n }\n\n @if (filterable()) {\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <!-- <th>\n @if(col.filterable) {\n @if(col.type == 'text') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"text\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load()\">\n }@else if(col.type == 'number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"number\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load()\">\n }\n }\n </th> -->\n }\n </tr>\n </thead>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n <!-- @case ('placeholder') {\n <p class=\"text-secondary placeholder-glow mb-0\">\n <span class=\"placeholder col-3\"></span>\n <span class=\"placeholder col-4\"></span>\n <span class=\"placeholder col-4\"></span>\n <span class=\"placeholder col-6\"></span>\n <span class=\"placeholder col-8\"></span>\n </p>\n } -->\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass\"\n [class.shrinked]=\"col.shrink\"\n [class.fw-bold]=\"col.bold\"\n >\n @if (col.template) {\n <ng-container\n *ngTemplateOutlet=\"col.template; context: { $implicit: row }\"\n ></ng-container>\n } @else if (col.field) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\" || type.date) {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\" || type.number) {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }\n } @else {\n {{ cellValue }}\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\"\n >\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"\n ></ng-container>\n </td>\n </tr>\n }\n }\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\"\n >\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!, currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n <div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n </div>\n}\n","import { NgModule } from '@angular/core';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableComponent } from './table.component';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\n\n@NgModule({\n imports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective,\n ],\n exports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective\n ],\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-table.mjs","sources":["../../../projects/ng0/components/table/table-column.directive.ts","../../../projects/ng0/components/table/table-detail-row.directive.ts","../../../projects/ng0/components/table/table.component.ts","../../../projects/ng0/components/table/table.component.html","../../../projects/ng0/components/table/table.module.ts","../../../projects/ng0/components/table/bootkit-ng0-components-table.ts"],"sourcesContent":["import { ContentChild, Directive, input, Input, model, OnInit, signal, TemplateRef } from '@angular/core';\nimport { TableCellType } from './types';\n\n@Directive({\n selector: 'ng0-table-col',\n standalone: true,\n})\nexport class TableColumnDirective implements OnInit {\n field = input<string>();\n title = input<string>();\n emptyCellText = input<string>();\n\n /**\n * Type of the table cell.\n */\n type = input<TableCellType>('text');\n cellClass = input<string | string[] | { [klass: string]: any; } | null>();\n\n /** Deprecated */\n bold = input(false);\n shrink = input(false);\n filterable = input(false);\n filterValue = model<any>();\n filterField = input<string>();\n filterOperator = model<string>();\n filterOperators = input<string[]>();\n showFilterOperators = signal<boolean>(false);\n\n @ContentChild(TemplateRef) template?: TemplateRef<any>;\n\n constructor() {\n }\n\n ngOnInit(): void {\n if (this.filterOperator() == undefined) {\n this.filterOperator.set(this.type() == 'text' ? 'contains' : 'eq');\n }\n }\n\n public getFilterOperators(): string[] {\n let op = this.filterOperators();\n if (op && op.length > 0)\n return op;\n\n let type = this.type();\n if (type == 'number' || type == 'currency' || type == 'date' || type == 'time') {\n return ['eq', 'ne', 'gt', 'gte', 'lt', 'lte',]\n } else if (type == 'text') {\n return ['contains', 'startsWith', 'endsWith', 'eq', 'ne']\n } else {\n return []\n }\n }\n}\n","import { Directive, Input, TemplateRef } from '@angular/core';\n\n\n@Directive({\n selector: '[ng0-table-detail-row]',\n standalone: true,\n})\nexport class TableDetailRowDirective {\n @Input() showCallback?: (row: any) => boolean;\n\n constructor(public readonly templateRef: TemplateRef<any>) {\n }\n}\n","import { AfterContentInit, ChangeDetectionStrategy, Component, computed, ContentChild, ContentChildren, DestroyRef, HostBinding, input, OnDestroy, OnInit, QueryList, signal } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { formatString } from '@bootkit/ng0/common';\nimport { LocalizationModule, LocalizationService, TableComponentPagingFormatter } from '@bootkit/ng0/localization';\nimport { DataRequest, DataRequestFilter, DataRequestPage, DataRequestSort, DataResult, DataSource, convertToDataSource, DataSourceLike, LogicalOperator } from '@bootkit/ng0/data';\nimport { PaginationComponent } from '@bootkit/ng0/components/pagination';\nimport { TablePagingOptions } from './types';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { NumberDirective } from '@bootkit/ng0/form';\n\n/**\n * A generic table component that can display data in a tabular format.\n * It supports features like pagination, sorting, filtering, and row details.\n * It can be used with any data source that implements the DataSource interface.\n */\n@Component({\n selector: 'ng0-table',\n exportAs: 'ng0Table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n LocalizationModule,\n PaginationComponent,\n NumberDirective,\n OverlayModule\n ]\n})\nexport class TableComponent implements OnInit, AfterContentInit, OnDestroy {\n /**\n * The data source for the table.\n * This can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\n public source = input.required<DataSourceLike<any>>();\n\n /**\n * If true, the table will automatically load data when initialized.\n * This is useful for tables that need to display data immediately without user interaction.\n */\n public autoLoad = input(true);\n\n /**\n * If true, the table will show row numbers.\n * This will add a column to the left of the table with the row numbers.\n */\n public showRowNumbers = input(false);\n\n /** \n * If true, the table will show the header row.\n */\n public showHeader = input(true);\n\n /**\n * If true, the table will support pagination.\n * If false, the table will load all records at once.\n */\n public pageable = input<TablePagingOptions | undefined, TablePagingOptions | boolean>(undefined, {\n transform: v => {\n if (v === undefined || v === null || v === false) {\n return undefined;\n }\n\n if (v === true) {\n v = {};\n }\n\n v.pageIndex = v.pageIndex ?? 1;\n v.pageSize = v.pageSize ?? 10;\n v.maxVisiblePages = v.maxVisiblePages ?? 10;\n v.showPagingControls = v.showPagingControls ?? true;\n return v;\n }\n });\n\n /**\n * If true, the table will support sorting.\n * This will add a sort icon to each column header.\n */\n public sortable = input(true);\n\n /**\n * The CSS class to apply to the table element.\n * This can be used to apply custom styles to the table.\n */\n public tableClass = input<string | string[]>();\n\n /**\n * The CSS class to apply to the header element.\n */\n public headerClass = input<string>();\n\n /**\n * The caption of the table.\n */\n public caption = input<string>();\n\n /**\n * The height of the table in pixels.\n * This can be used to set a fixed height for the table.\n */\n public height = input<number>();\n\n /**\n * If true, the table will support filtering.\n * This will add a filter input to each column header.\n */\n public filterable = input(false);\n\n /**\n * The indicator to show while the table is loading data for the first time.\n */\n public loadingIndicator = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n /** If true, the table will show a loading cover while data is being loaded.\n * This can be used to prevent user interaction with the table while loading.\n * This cover is not displayed when the table is loading for the first time.\n * Instead, the table will show a loading based on loadingIndicator settings.\n */\n public loadingCover = input<'none' | 'simple' | 'spinner', boolean | 'none' | 'simple' | 'spinner'>('spinner', {\n transform: v => {\n if (typeof v === 'boolean') {\n return v ? 'spinner' : 'none';\n }\n return v;\n }\n });\n\n // @Input() rowColor?: (row: any) => BootstrapColor;\n\n @ContentChildren(TableColumnDirective)\n protected _columns!: QueryList<TableColumnDirective>;\n\n @ContentChild(TableDetailRowDirective)\n protected _detailRow?: TableDetailRowDirective;\n\n protected _dataResult = signal<DataResult | undefined>(undefined);\n protected _lastRequest?: DataRequest; // The last data request made to the data source\n protected _loadingRequest?: DataRequest; // The current data request being processed\n protected _rowStates = new Map<any, { expanded: boolean }>();\n protected _formatString = formatString;\n private _changeSubscription?: Subscription;\n protected _dataSource!: DataSource;\n protected _pagingFormatter!: TableComponentPagingFormatter;\n protected _lastError?: any;\n\n\n constructor(protected _ls: LocalizationService, private _destroyRef: DestroyRef) {\n }\n\n ngOnInit(): void {\n\n }\n\n ngAfterContentInit(): void {\n this._dataSource = convertToDataSource(this.source());\n const locale = this._ls.get();\n this._pagingFormatter = locale?.definition.components?.table?.pagingInfo ??\n ((o) => `Showing ${o.firstRecord}-${o.lastRecord} of ${o.totalRecords} records`);\n\n // this._changeSubscription = this.dataSource().change.pipe(takeUntilDestroyed(this._destroyRef)).subscribe(result => {\n // this.reload();\n // });\n\n if (this.autoLoad()) {\n this.load(this.pageable()?.pageIndex);\n }\n }\n\n /**\n * Load data for the specified page index (optional).\n * @param pageIndex The page index to load.\n */\n public load(pageIndex?: number) {\n let page: DataRequestPage | undefined;\n let filters: DataRequestFilter[] = [];\n let sort: DataRequestSort | undefined;\n\n if (this.filterable()) {\n this._columns.forEach(col => {\n if (col.filterable() && col.filterValue() != '' && col.filterValue() != undefined) {\n filters.push({ field: col.filterField() ?? col.field(), value: col.filterValue(), operator: col.filterOperator() });\n }\n });\n }\n\n if (this.pageable()) {\n page = {\n index: pageIndex || this._lastRequest?.page?.index || 1,\n size: this._lastRequest?.page?.size || 10,\n zeroBased: false\n };\n }\n\n if (this.sortable()) {\n // sort = ...\n }\n\n this._loadingRequest = new DataRequest({ page, filters, sort, select: [], computeTotal: true });\n\n this._dataSource.load(this._loadingRequest)\n .pipe(takeUntilDestroyed(this._destroyRef)).subscribe({\n next: result => {\n this._dataResult.set(result);\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n this._lastError = undefined;\n }, error: err => {\n this._lastError = err;\n this._lastRequest = this._loadingRequest;\n this._loadingRequest = undefined;\n }\n });\n }\n\n /**\n * Determines if the table is currently loading data.\n */\n @HostBinding('class.ng0-loading')\n public get isLoading() {\n return this._dataSource.isLoading;\n }\n\n protected _getCellValue(row: any, col: TableColumnDirective) {\n var subFields = col.field()!.split('.');\n let value = row[subFields[0]];\n for (let i = 1; i < subFields.length; i++) {\n if (value == null) break;\n value = value[subFields[i]];\n }\n\n return value;\n }\n\n\n protected _onPageChange(pageIndex: number) {\n this.load(pageIndex);\n }\n\n protected _onToggleRowDetailClick(row: any) {\n var state = this._rowStates.get(row)\n if (!state) {\n this._rowStates.set(row, { expanded: true });\n } else {\n state.expanded = !state.expanded;\n }\n }\n\n protected isRowExpanded(row: any) {\n var state = this._rowStates.get(row)\n return state == undefined ? false : state.expanded;\n }\n\n protected _onToggleFilterOperator(col: TableColumnDirective) {\n if (col.showFilterOperators()) {\n col.showFilterOperators.set(false)\n } else {\n this._columns.forEach(x => x.showFilterOperators.set(false));\n col.showFilterOperators.set(true)\n }\n }\n\n protected _onSelectFilterOperator(col: TableColumnDirective, filterOperator: string) {\n col.filterOperator.set(filterOperator);\n this._columns.forEach(x => x.showFilterOperators.set(false));\n this.load(0);\n }\n\n ngOnDestroy(): void {\n this._changeSubscription?.unsubscribe();\n }\n}\n","@let $dataResult = _dataResult();\n@let $pageable = pageable();\n@let $pageIndex = _lastRequest?.page?.index ?? 1;\n@let $data = $dataResult?.data;\n@let $anyRecords = $data && $data.length > 0;\n@let $totalRecordsCount = $dataResult?.total;\n@let $firstRecord = $pageable ? ($pageable.pageSize! * ($pageIndex - 1) + 1) : 1;\n@let $lastRecord = $data ? $firstRecord + $data.length - 1 : 1;\n@let $isLoading = _dataSource.isLoading();\n@let $isFirstLoad = $dataResult == undefined;\n@let $columnsCount = _columns.length + (showRowNumbers() ? 1 : 0);\n@let $tableLocale = _ls.get()?.definition?.components?.table;\n\n<div class=\"table-responsive\" [style.height]=\"height()\" [class.table-scrollable]=\"height()! > 0\">\n <table class=\"table\" [ngClass]=\"tableClass()\">\n @if (caption()) {\n <caption>{{caption()}}</caption>\n }\n\n @if (showHeader()) {\n <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n }\n\n @if (filterable()) {\n <ng-container *ngTemplateOutlet=\"filtersTemplate\"></ng-container>\n }\n\n <tbody>\n @if ($isLoading && $isFirstLoad && loadingIndicator()) {\n <tr class=\"ng0-table-loading-row\">\n <td [attr.colspan]=\"$columnsCount\">\n @switch (loadingIndicator()) {\n @case ('spinner') {\n <div class=\"text-center\">\n <div class=\"spinner-border\" role=\"status\"></div>\n </div>\n }\n }\n </td>\n </tr>\n } @else {\n @if ($data) {\n @if ($data.length > 0) {\n <ng-container *ngTemplateOutlet=\"dataRowsTemplate\"></ng-container>\n } @else {\n <tr class=\"ng0-table-no-records-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"text-center p-2\">\n {{ $tableLocale?.noRecords ?? 'No Records.' }}\n </td>\n </tr>\n }\n } @else if (_lastError) {\n <ng-container *ngTemplateOutlet=\"nowDataTemplate\"></ng-container>\n }\n }\n </tbody>\n </table>\n</div>\n\n<div class=\"ng0-table-footer d-flex align-items-baseline\">\n <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n</div>\n\n@if ($isLoading && !$isFirstLoad && loadingCover()) {\n<div class=\"ng0-table-loading-cover text-center\">\n @if (loadingCover() == 'spinner') {\n <div class=\"spinner-border\" role=\"status\"></div>\n }\n</div>\n}\n\n<ng-template #filtersTemplate>\n <thead>\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th></th>\n }\n\n @for (col of _columns; track $index) {\n <th>\n @if(col.filterable() && (col.field() || col.filterValue())) {\n\n <div class=\"input-group\">\n @switch (col.type()) {\n @case ('text') {\n <input [name]=\"'filter-' + col.field\"\n type=\"search\"\n [maxlength]=\"50\"\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n @case ('number') {\n <input [name]=\"'datatablecol-' + col.field\"\n type=\"search\"\n ng0Number\n class=\"form-control form-control-sm\"\n [(ngModel)]=\"col.filterValue\"\n (keydown.enter)=\"load(0)\">\n }\n }\n\n <button class=\"btn btn-outline-light\"\n style=\"border-color: var(--bs-border-color);\"\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"_onToggleFilterOperator(col)\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M19 3H5C3.58579 3 2.87868 3 2.43934 3.4122C2 3.8244 2 4.48782 2 5.81466V6.50448C2 7.54232 2 8.06124 2.2596 8.49142C2.5192 8.9216 2.99347 9.18858 3.94202 9.72255L6.85504 11.3624C7.49146 11.7206 7.80967 11.8998 8.03751 12.0976C8.51199 12.5095 8.80408 12.9935 8.93644 13.5872C9 13.8722 9 14.2058 9 14.8729L9 17.5424C9 18.452 9 18.9067 9.25192 19.2613C9.50385 19.6158 9.95128 19.7907 10.8462 20.1406C12.7248 20.875 13.6641 21.2422 14.3321 20.8244C15 20.4066 15 19.4519 15 17.5424V14.8729C15 14.2058 15 13.8722 15.0636 13.5872C15.1959 12.9935 15.488 12.5095 15.9625 12.0976C16.1903 11.8998 16.5085 11.7206 17.145 11.3624L20.058 9.72255C21.0065 9.18858 21.4808 8.9216 21.7404 8.49142C22 8.06124 22 7.54232 22 6.50448V5.81466C22 4.48782 22 3.8244 21.5607 3.4122C21.1213 3 20.4142 3 19 3Z\"\n stroke=\"#1C274C\" stroke-width=\"1.5\" />\n </svg>\n </button>\n </div>\n\n <ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"col.showFilterOperators()\"\n (overlayOutsideClick)=\"col.showFilterOperators.set(false)\"\n (detach)=\"col.showFilterOperators.set(false)\">\n <ul class=\"dropdown-menu show\" animate.enter=\"fade-in\">\n @for (item of col.getFilterOperators(); track $index) {\n <li>\n <button class=\"dropdown-item\" [class.active]=\"item == col.filterOperator()\"\n (click)=\"_onSelectFilterOperator(col, item)\">\n {{_ls.get()?.definition?.data?.logicalOperators?.[item] ?? item }}\n </button>\n </li>\n }\n </ul>\n </ng-template>\n }\n </th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #headerTemplate>\n <thead [ngClass]=\"headerClass()\">\n <tr>\n @if (_detailRow) {\n <th></th>\n }\n\n @if (showRowNumbers()) {\n <th class=\"row-number text-muted\">#</th>\n }\n\n @for (col of _columns; track $index) {\n <th>{{ col.title() }}</th>\n }\n </tr>\n </thead>\n</ng-template>\n\n<ng-template #dataRowsTemplate>\n @for (row of $data; track $index) {\n <tr [class.table-active]=\"isRowExpanded(row)\">\n @if (_detailRow) {\n <td class=\"detail-row-expander\">\n @if (_detailRow.showCallback == null || _detailRow.showCallback(row)) {\n <button class=\"btn\" (click)=\"_onToggleRowDetailClick(row)\">\n @if (isRowExpanded(row)) {\n <i class=\"far fa-minus\"></i>\n } @else {\n <i class=\"far fa-plus\"></i>\n }\n </button>\n }\n </td>\n }\n\n @if (showRowNumbers()) {\n <td class=\"ng0-table-row-number\">\n {{ $firstRecord + $index }}\n </td>\n }\n\n @for (col of _columns; track $index) {\n <td\n [ngClass]=\"col.cellClass()\"\n [class.shrinked]=\"col.shrink()\"\n [class.fw-bold]=\"col.bold()\">\n @if (col.template) {\n <ng-container *ngTemplateOutlet=\"col.template; context: { $implicit: row }\">\n </ng-container>\n } @else if (col.field()) {\n @let cellValue = _getCellValue(row, col);\n\n @if ((cellValue === null || cellValue === undefined) && col.emptyCellText()) {\n {{ col.emptyCellText() }}\n } @else {\n @if (col.type()) {\n @let type = $any(col.type());\n\n @if (type == \"date\") {\n {{ cellValue | ng0Date }}\n } @else if (type == \"number\") {\n {{ cellValue | number }}\n } @else if (type == \"currency\") {\n {{ cellValue | currency }}\n } @else if (type.enum) {\n {{ cellValue | ng0TranslateEnum: type.enum.name : type.enum.fallback }}\n } @else if (type.boolean || type == \"boolean\") {\n {{ cellValue | ng0LocalizeBool: type.boolean.false ?? \"false\" : type.boolean.false ?? \"true\" }}\n }@else {\n {{ cellValue }}\n }\n }\n }\n }\n </td>\n }\n </tr>\n\n @if (_detailRow && isRowExpanded(row)) {\n <tr class=\"detail-row\">\n <td\n [attr.colspan]=\"_columns.length + (showRowNumbers() ? 1 : 0) + 1\"\n class=\"ps-2 pb-4\">\n <ng-container\n *ngTemplateOutlet=\"_detailRow.templateRef; context: { $implicit: row }\"></ng-container>\n </td>\n </tr>\n }\n }\n</ng-template>\n\n<ng-template #footerTemplate>\n @if ($pageable && $pageable.showPagingControls && $anyRecords && $totalRecordsCount! > 0) {\n <div class=\"ng0-table-pagination me-2\">\n <ng0-pagination\n class=\"mb-0 d-inline-block\"\n [showFirstLastButtons]=\"$pageable.showFirstLastButtons == true\"\n [showNextPreviousButtons]=\"$pageable.showNextPreviousButtons == true\"\n [totalRecords]=\"$totalRecordsCount!\"\n [pageSize]=\"$pageable.pageSize!\"\n [selectedPage]=\"$pageIndex\"\n (itemClick)=\"_onPageChange($event)\"\n [maxVisiblePages]=\"$pageable.maxVisiblePages!\">\n <ng-container ngProjectAs=\"first\">\n <ng-content select=\"paging-first\">\n {{ \"first\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"last\">\n <ng-content select=\"paging-last\">\n {{ \"last\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"next\">\n <ng-content select=\"paging-next\">\n {{ \"next\" | ng0Translate }}\n </ng-content>\n </ng-container>\n\n <ng-container ngProjectAs=\"previous\">\n <ng-content select=\"paging-previous\">\n {{ \"previous\" | ng0Translate }}\n </ng-content>\n </ng-container>\n </ng0-pagination>\n </div>\n\n @if ($pageable.showPageSizeOptions || $pageable.showPageSizeOptions == undefined) {\n <div class=\"ng0-table-paging-options\">\n <select name=\"pageSizeOptions\" class=\"form-select w-auto d-inline-block\">\n <option [ngValue]=\"10\" selected>10</option>\n </select>\n </div>\n }\n\n @if ($pageable.showPagingInfo == undefined || $pageable.showPagingInfo) {\n <div class=\"ng0-table-paging-info ms-auto\">\n <ng-content select=\"paging-info\">\n {{\n _pagingFormatter({firstRecord: $firstRecord, lastRecord: $lastRecord, totalRecords: $totalRecordsCount!,\n currentPage: $pageIndex!})\n }}\n </ng-content>\n </div>\n }\n }\n</ng-template>\n\n<ng-template #nowDataTemplate>\n <tr class=\"ng0-table-error-row\">\n <td [attr.colSpan]=\"$columnsCount\" class=\"p-2\">\n <div class=\"d-flex align-items-baseline\">\n <span>{{ $tableLocale?.loadError ?? 'Error loading data.' }} </span>\n <button (click)=\"load()\" class=\"btn btn-warning ms-auto\">\n {{ \"retry\" | ng0Translate }}\n </button>\n </div>\n </td>\n </tr>\n</ng-template>","import { NgModule } from '@angular/core';\nimport { TableColumnDirective } from './table-column.directive';\nimport { TableComponent } from './table.component';\nimport { TableDetailRowDirective } from './table-detail-row.directive';\n\n@NgModule({\n imports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective,\n ],\n exports: [\n TableComponent,\n TableColumnDirective,\n TableDetailRowDirective\n ],\n})\nexport class TableModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -79,73 +79,6 @@ class AsyncDataSource extends DataSource {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
/**
|
|
83
|
-
* Converts a data source like an array, function, or DataSource into a DataSource instance.
|
|
84
|
-
* @param source The data source to convert.
|
|
85
|
-
* @returns A DataSource instance.
|
|
86
|
-
*/
|
|
87
|
-
function convertToDataSource(source) {
|
|
88
|
-
if (Array.isArray(source)) {
|
|
89
|
-
return new ArrayDataSource(source);
|
|
90
|
-
}
|
|
91
|
-
else if (typeof source == 'function') {
|
|
92
|
-
return new AsyncDataSource(source);
|
|
93
|
-
}
|
|
94
|
-
else if (source instanceof DataSource) {
|
|
95
|
-
return source;
|
|
96
|
-
}
|
|
97
|
-
else if (source === undefined || source === null) {
|
|
98
|
-
return new ArrayDataSource([]);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
throw new Error('Invalid source parameter.');
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* StandardFilterOperators is an enumeration of standard filter operators
|
|
106
|
-
* that can be used in data requests to filter data.
|
|
107
|
-
* It includes operators like Contains, StartsWith, EndsWith, and Equals.
|
|
108
|
-
*/
|
|
109
|
-
var StandardFilterOperators;
|
|
110
|
-
(function (StandardFilterOperators) {
|
|
111
|
-
/**
|
|
112
|
-
* A filter that matches items that contain the specified value.
|
|
113
|
-
*/
|
|
114
|
-
StandardFilterOperators["Contains"] = "contains";
|
|
115
|
-
/**
|
|
116
|
-
* A filter that matches items that start with the specified value.
|
|
117
|
-
*/
|
|
118
|
-
StandardFilterOperators["StartsWith"] = "startsWith";
|
|
119
|
-
/**
|
|
120
|
-
* A filter that matches items that end with the specified value.
|
|
121
|
-
*/
|
|
122
|
-
StandardFilterOperators["EndsWith"] = "endsWith";
|
|
123
|
-
/**
|
|
124
|
-
* A filter that matches items that are equal to the specified value.
|
|
125
|
-
*/
|
|
126
|
-
StandardFilterOperators["Equals"] = "equals";
|
|
127
|
-
/**
|
|
128
|
-
* A filter that matches items that are not equal to the specified value.
|
|
129
|
-
*/
|
|
130
|
-
StandardFilterOperators["NotEquals"] = "notEquals";
|
|
131
|
-
/**
|
|
132
|
-
* A filter that matches items that are greater than the specified value.
|
|
133
|
-
*/
|
|
134
|
-
StandardFilterOperators["GreaterThan"] = "greaterThan";
|
|
135
|
-
/**
|
|
136
|
-
* A filter that matches items that are greater than or equal to the specified value.
|
|
137
|
-
*/
|
|
138
|
-
StandardFilterOperators["GreaterThanOrEqual"] = "greaterThanOrEqual";
|
|
139
|
-
/**
|
|
140
|
-
* A filter that matches items that are less than the specified value.
|
|
141
|
-
*/
|
|
142
|
-
StandardFilterOperators["LessThan"] = "lessThan";
|
|
143
|
-
/**
|
|
144
|
-
* A filter that matches items that are less than or equal to the specified value.
|
|
145
|
-
*/
|
|
146
|
-
StandardFilterOperators["LessThanOrEqual"] = "lessThanOrEqual";
|
|
147
|
-
})(StandardFilterOperators || (StandardFilterOperators = {}));
|
|
148
|
-
|
|
149
82
|
/**
|
|
150
83
|
* An implementation of DataSource that uses an array as the data source.
|
|
151
84
|
* This is useful for static data or when you want to manage the data manually.
|
|
@@ -163,38 +96,42 @@ class ArrayDataSource extends DataSource {
|
|
|
163
96
|
this.items = items;
|
|
164
97
|
}
|
|
165
98
|
load(request) {
|
|
166
|
-
let items;
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
items = this.items.slice(startItemIndex, startItemIndex + request.page.size);
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
items = [...this.items];
|
|
173
|
-
}
|
|
99
|
+
let filteredValues = [...this.items];
|
|
100
|
+
let result;
|
|
101
|
+
// Filtering
|
|
174
102
|
if (Array.isArray(request.filters) && request.filters.length > 0) {
|
|
175
|
-
// Apply filters
|
|
176
103
|
request.filters.forEach(filter => {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
104
|
+
if (!filter.field) {
|
|
105
|
+
throw Error('DataRequestFilter "field" cannot be null.');
|
|
106
|
+
}
|
|
107
|
+
let isPassedByFilter = getFilterFunction(filter);
|
|
108
|
+
for (let i = 0; i < filteredValues.length; i++) {
|
|
109
|
+
let row = filteredValues[i];
|
|
110
|
+
if (!isPassedByFilter(row[filter.field], filter.value)) {
|
|
111
|
+
filteredValues.splice(i, 1);
|
|
183
112
|
i--; // Adjust index after removal
|
|
184
113
|
}
|
|
185
114
|
}
|
|
186
115
|
});
|
|
187
116
|
}
|
|
117
|
+
// Pagination
|
|
118
|
+
if (request.page) {
|
|
119
|
+
let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;
|
|
120
|
+
result = filteredValues.slice(startItemIndex, startItemIndex + request.page.size);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
result = filteredValues;
|
|
124
|
+
}
|
|
125
|
+
// Sorting
|
|
188
126
|
if (request.sort) {
|
|
189
|
-
// Apply sorting
|
|
190
127
|
}
|
|
191
|
-
let
|
|
128
|
+
let dataResult = new DataResult(result, filteredValues.length);
|
|
192
129
|
// this._loading = true;
|
|
193
130
|
// return of(result).pipe(
|
|
194
131
|
// delay(5000),
|
|
195
132
|
// tap(x => this._loading = false)
|
|
196
133
|
// );
|
|
197
|
-
return of(
|
|
134
|
+
return of(dataResult);
|
|
198
135
|
}
|
|
199
136
|
remove(item) {
|
|
200
137
|
let index = this.items.findIndex(x => x === item);
|
|
@@ -208,34 +145,44 @@ class ArrayDataSource extends DataSource {
|
|
|
208
145
|
this._insertSubject.next({ items });
|
|
209
146
|
}
|
|
210
147
|
}
|
|
211
|
-
function getFilterFunction(
|
|
212
|
-
let operator =
|
|
213
|
-
let caseSensitive =
|
|
214
|
-
if (
|
|
215
|
-
|
|
216
|
-
}
|
|
217
|
-
switch (
|
|
218
|
-
case
|
|
148
|
+
function getFilterFunction(requestfilter) {
|
|
149
|
+
let operator = requestfilter.operator || 'contains';
|
|
150
|
+
let caseSensitive = requestfilter.caseSensitive || false;
|
|
151
|
+
// if (requestfilter.value === undefined || requestfilter.value === null) {
|
|
152
|
+
// return (item: any) => true; // No filter applied
|
|
153
|
+
// }
|
|
154
|
+
switch (requestfilter.operator) {
|
|
155
|
+
case 'contains':
|
|
219
156
|
return caseSensitive ?
|
|
220
157
|
(item, filter) => item.includes(filter) :
|
|
221
158
|
(item, filter) => item.toLowerCase().includes(filter.toLowerCase());
|
|
222
|
-
case
|
|
159
|
+
case 'startsWith':
|
|
223
160
|
return caseSensitive ?
|
|
224
161
|
(item, filter) => item.startsWith(filter) :
|
|
225
162
|
(item, filter) => item.toLowerCase().startsWith(filter.toLowerCase());
|
|
226
|
-
case
|
|
163
|
+
case 'endsWith':
|
|
227
164
|
return caseSensitive ?
|
|
228
165
|
(item, filter) => item.endsWith(filter) :
|
|
229
166
|
(item, filter) => item.toLowerCase().endsWith(filter.toLowerCase());
|
|
230
|
-
case
|
|
231
|
-
if (typeof
|
|
167
|
+
case 'eq':
|
|
168
|
+
if (typeof requestfilter.value === 'string') {
|
|
232
169
|
return caseSensitive ?
|
|
233
|
-
(item, filter) => item
|
|
234
|
-
(item, filter) => item.toLowerCase() === filter.toLowerCase();
|
|
170
|
+
(item, filter) => item == filter :
|
|
171
|
+
(item, filter) => item.toString().toLowerCase() === filter.toLowerCase();
|
|
235
172
|
}
|
|
236
173
|
else {
|
|
237
|
-
return (item, filter) => item === filter
|
|
174
|
+
return (item, filter) => item === filter;
|
|
238
175
|
}
|
|
176
|
+
case 'lt':
|
|
177
|
+
return (item, filter) => item < filter;
|
|
178
|
+
case 'lte':
|
|
179
|
+
return (item, filter) => item <= filter;
|
|
180
|
+
case 'gt':
|
|
181
|
+
return (item, filter) => item > filter;
|
|
182
|
+
case 'gte':
|
|
183
|
+
return (item, filter) => item >= filter;
|
|
184
|
+
case 'ne':
|
|
185
|
+
return (item, filter) => item !== filter;
|
|
239
186
|
default:
|
|
240
187
|
throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);
|
|
241
188
|
}
|
|
@@ -259,9 +206,32 @@ function toDataResult(dr) {
|
|
|
259
206
|
};
|
|
260
207
|
}
|
|
261
208
|
|
|
209
|
+
/**
|
|
210
|
+
* Converts a data source like an array, function, or DataSource into a DataSource instance.
|
|
211
|
+
* @param source The data source to convert.
|
|
212
|
+
* @returns A DataSource instance.
|
|
213
|
+
*/
|
|
214
|
+
function convertToDataSource(source) {
|
|
215
|
+
if (Array.isArray(source)) {
|
|
216
|
+
return new ArrayDataSource(source);
|
|
217
|
+
}
|
|
218
|
+
else if (typeof source == 'function') {
|
|
219
|
+
return new AsyncDataSource(source);
|
|
220
|
+
}
|
|
221
|
+
else if (source instanceof DataSource) {
|
|
222
|
+
return source;
|
|
223
|
+
}
|
|
224
|
+
else if (source === undefined || source === null) {
|
|
225
|
+
return new ArrayDataSource([]);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
throw new Error('Invalid source parameter.');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
262
232
|
/**
|
|
263
233
|
* Generated bundle index. Do not edit.
|
|
264
234
|
*/
|
|
265
235
|
|
|
266
|
-
export { ArrayDataSource, AsyncDataSource, DataRequest, DataResult, DataSource,
|
|
236
|
+
export { ArrayDataSource, AsyncDataSource, DataRequest, DataResult, DataSource, convertToDataSource, toDataResult };
|
|
267
237
|
//# sourceMappingURL=bootkit-ng0-data.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-data.mjs","sources":["../../../projects/ng0/data/data-request.ts","../../../projects/ng0/data/data-result.ts","../../../projects/ng0/data/data-source.ts","../../../projects/ng0/data/async-data-source.ts","../../../projects/ng0/data/types.ts","../../../projects/ng0/data/array-data-source.ts","../../../projects/ng0/data/data-result-operator.ts","../../../projects/ng0/data/bootkit-ng0-data.ts"],"sourcesContent":["/**\n * DataRequest class represents a request for data with pagination, filtering, sorting, and field selection.\n * It is used to encapsulate the parameters needed to fetch data from a data source.\n * It can be used with various data sources such as HTTP services, in-memory arrays, etc.\n * \n */\nexport class DataRequest {\n public page?: DataRequestPage;\n public filters?: DataRequestFilter[];\n public sort?: DataRequestSort;\n public select?: string[];\n public computeTotal?: boolean;\n\n constructor(options?: {\n page?: DataRequestPage,\n filters?: DataRequestFilter[],\n sort?: DataRequestSort,\n select?: string[],\n computeTotal?: boolean,\n }) {\n this.page = options?.page;\n this.filters = options?.filters;\n this.sort = options?.sort;\n this.select = options?.select;\n this.computeTotal = options?.computeTotal;\n }\n}\n\n/**\n * Represents a data request page.\n */\nexport interface DataRequestPage {\n /**\n * Index of the page.\n * If zeroBased is true, the index starts from 0.\n */\n index: number;\n\n /**\n * Size of the page, i.e., number of items in each page.\n */\n size: number;\n\n /**\n * Indicates if the index is zero-based.\n */\n zeroBased: boolean;\n}\n\n/**\n * Represents a sorting option in a DataRequest.\n * @property field The field to sort by.\n * @property asc Whether to sort in ascending order.\n */\nexport interface DataRequestSort {\n field: string;\n asc?: boolean\n}\n\n/**\n * Represents a filter in a DataRequest.\n */\nexport interface DataRequestFilter {\n /**\n * The field to filter by.\n * It can be a string representing the property name of the data items.\n */\n field?: string;\n\n /**\n * The value to filter by.\n * It can be a string, number, or any other type depending on the field.\n */\n value?: string;\n\n /**\n * The operator to use for filtering.\n * It can be one of the standard filter operators like Contains, StartsWith, EndsWith, Equals, etc.\n */\n operator?: string;\n\n /**\n * Indicates if the filter is case-sensitive.\n * Default is false.\n */\n caseSensitive?: boolean;\n}\n\n// export enum DataRequestFilterOperator {\n// EQ = 0,\n// NEQ = 1,\n// LT = 2,\n// LTE = 3,\n// GT = 4,\n// GTE = 5,\n// LI = 6,\n// SW = 7,\n// }\n","export class DataResult<T = any> {\n constructor(\n public readonly data: T[],\n public readonly total?: number) {\n }\n}\n","import { Observable, Subject } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { signal } from \"@angular/core\";\n\n/**\n * Abstract base class for data sources.\n * This class provides a common interface for loading data from various sources.\n */\nexport abstract class DataSource<T=any> {\n protected loading = signal(false);\n\n constructor() {\n }\n\n /**\n * Indicates whether the data source is currently loading data.\n */\n public isLoading = this.loading.asReadonly();\n\n /**\n * Loads data from the data source.\n * @param request The data request object containing pagination, sorting, and filtering information.\n */\n abstract load(request: DataRequest): Observable<DataResult>;\n}\n\n","import { catchError, Observable, tap } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\n\n/**\n * DataLoader is a function that takes a DataRequest and returns an Observable of DataResult.\n * It is used by AsyncDataSource to load data asynchronously.\n */\nexport type DataLoader<T=any> = (request: DataRequest) => Observable<DataResult<T>>;\n\n\n/**\n * AsyncDataSource is a DataSource that loads data asynchronously using a DataLoader function.\n * It is used to fetch data from a remote source, such as an API.\n */\nexport class AsyncDataSource extends DataSource {\n constructor(private readonly loader: DataLoader) {\n super();\n\n if (typeof loader !== 'function') {\n throw 'Invalid data loader';\n }\n }\n\n load(request: DataRequest) {\n this.loading.set(true);\n\n return this.loader(request).pipe(\n catchError(err => {\n this.loading.set(false);\n throw err;\n }),\n tap(res => {\n this.loading.set(false);\n })\n )\n }\n}\n","import { ArrayDataSource } from \"./array-data-source\";\nimport { AsyncDataSource, DataLoader } from \"./async-data-source\";\nimport { DataSource } from \"./data-source\";\n\n/**\n * DataSourceLike is a type that can be used to represent any data source\n * that can be used with the table, autocomplete, dropdown and any component that requires data.\n * It can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\nexport type DataSourceLike<T = any> = Array<any> | DataLoader<T> | DataSource<T> | undefined | null;\n\n\n/**\n * Converts a data source like an array, function, or DataSource into a DataSource instance.\n * @param source The data source to convert.\n * @returns A DataSource instance.\n */\nexport function convertToDataSource<T>(source: DataSourceLike): DataSource<T> {\n if (Array.isArray(source)) {\n return new ArrayDataSource(source);\n } else if (typeof source == 'function') {\n return new AsyncDataSource(source);\n } else if (source instanceof DataSource) {\n return source;\n } else if (source === undefined || source === null) {\n return new ArrayDataSource([]);\n } else {\n throw new Error('Invalid source parameter.');\n }\n}\n\n/**\n * StandardFilterOperators is an enumeration of standard filter operators\n * that can be used in data requests to filter data.\n * It includes operators like Contains, StartsWith, EndsWith, and Equals.\n */\nexport enum StandardFilterOperators {\n /**\n * A filter that matches items that contain the specified value.\n */\n Contains = 'contains',\n\n /**\n * A filter that matches items that start with the specified value.\n */\n StartsWith = 'startsWith',\n\n /**\n * A filter that matches items that end with the specified value.\n */\n EndsWith = 'endsWith',\n\n /**\n * A filter that matches items that are equal to the specified value.\n */\n Equals = 'equals',\n\n /**\n * A filter that matches items that are not equal to the specified value.\n */\n NotEquals = 'notEquals',\n\n /**\n * A filter that matches items that are greater than the specified value.\n */\n GreaterThan = 'greaterThan',\n\n /**\n * A filter that matches items that are greater than or equal to the specified value.\n */\n GreaterThanOrEqual = 'greaterThanOrEqual',\n\n /**\n * A filter that matches items that are less than the specified value.\n */\n LessThan = 'lessThan',\n\n /**\n * A filter that matches items that are less than or equal to the specified value.\n */\n LessThanOrEqual = 'lessThanOrEqual',\n\n \n}","import { delay, of, Subject, tap } from \"rxjs\";\nimport { DataRequest, DataRequestFilter } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\nimport { StandardFilterOperators } from \"./types\";\n\n/**\n * An implementation of DataSource that uses an array as the data source.\n * This is useful for static data or when you want to manage the data manually.\n */\nexport class ArrayDataSource extends DataSource {\n private _insertSubject = new Subject<{ items: any[] }>();\n private _updateSubject = new Subject<{ item: any, index: number }>();\n private _removeSubject = new Subject<{ item: any, index: number }>();\n\n public readonly inserted = this._insertSubject.asObservable();\n public readonly removed = this._removeSubject.asObservable();\n public readonly updated = this._updateSubject.asObservable();\n\n constructor(private items: any[]) {\n super();\n }\n\n load(request: DataRequest) {\n let items: Array<any>;\n\n if (request.page) {\n let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;\n items = this.items.slice(startItemIndex, startItemIndex + request.page.size);\n } else {\n items = [...this.items];\n }\n\n if (Array.isArray(request.filters) && request.filters.length > 0) {\n // Apply filters\n\n request.filters.forEach(filter => {\n let filterFunction = getFilterFunction(filter);\n\n for (let i = 0; i < items.length; i++) {\n let item = items[i];\n let value = filter.field ? item[filter.field] : item;\n if (!filterFunction(value, filter.value)) {\n items.splice(i, 1);\n i--; // Adjust index after removal\n }\n }\n });\n }\n\n if (request.sort) {\n // Apply sorting\n }\n\n let result = new DataResult(items, this.items.length);\n\n // this._loading = true;\n // return of(result).pipe(\n // delay(5000),\n // tap(x => this._loading = false)\n // );\n return of(result);\n }\n\n public remove(item: any) {\n let index = this.items!.findIndex(x => x === item);\n if (index > -1) {\n this.items.splice(index, 1);\n this._removeSubject.next({ item, index });\n }\n }\n\n public insert(...items: any[]) {\n this.items.push(items);\n this._insertSubject.next({ items });\n }\n\n // public set(items: any[]) {\n // this.items = items;\n // // this._removeSubject.next(0);\n // }\n}\n\nfunction getFilterFunction(filter: DataRequestFilter): (item: any, filter: any) => boolean {\n let operator = filter.operator || StandardFilterOperators.Contains;\n let caseSensitive = filter.caseSensitive || false;\n\n if(filter.value === undefined || filter.value === null) {\n return (item: any) => true; // No filter applied\n }\n\n switch (filter.operator) {\n case StandardFilterOperators.Contains:\n return caseSensitive ?\n (item: string, filter: string) => item.includes(filter) :\n (item: string, filter: string) => item.toLowerCase().includes(filter.toLowerCase());\n\n case StandardFilterOperators.StartsWith:\n return caseSensitive ?\n (item: string, filter: string) => item.startsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().startsWith(filter.toLowerCase());\n\n case StandardFilterOperators.EndsWith:\n return caseSensitive ?\n (item: string, filter: string) => item.endsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().endsWith(filter.toLowerCase());\n\n case StandardFilterOperators.Equals:\n if (typeof filter.value === 'string') {\n return caseSensitive ?\n (item: string, filter: string) => item === filter :\n (item: string, filter: string) => item.toLowerCase() === filter.toLowerCase();\n } else {\n return (item: any, filter: any) => item === filter.value;\n }\n\n default:\n throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);\n }\n}","import { Observable } from \"rxjs\";\nimport { DataResult } from \"./data-result\";\nimport { DataRequest } from \"./data-request\";\n\nexport function toDataResult<T=any>(dr: DataRequest) {\n return function (source: Observable<any>): Observable<DataResult<T>> {\n return new Observable(subscriber => {\n source.subscribe({\n next(event) {\n subscriber.next(new DataResult(event));\n },\n error(error) {\n subscriber.error(error);\n },\n complete() {\n subscriber.complete();\n }\n });\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-data.mjs","sources":["../../../projects/ng0/data/data-request.ts","../../../projects/ng0/data/data-result.ts","../../../projects/ng0/data/data-source.ts","../../../projects/ng0/data/async-data-source.ts","../../../projects/ng0/data/array-data-source.ts","../../../projects/ng0/data/data-result-operator.ts","../../../projects/ng0/data/types.ts","../../../projects/ng0/data/bootkit-ng0-data.ts"],"sourcesContent":["/**\n * DataRequest class represents a request for data with pagination, filtering, sorting, and field selection.\n * It is used to encapsulate the parameters needed to fetch data from a data source.\n * It can be used with various data sources such as HTTP services, in-memory arrays, etc.\n * \n */\nexport class DataRequest {\n public page?: DataRequestPage;\n public filters?: DataRequestFilter[];\n public sort?: DataRequestSort;\n public select?: string[];\n public computeTotal?: boolean;\n\n constructor(options?: {\n page?: DataRequestPage,\n filters?: DataRequestFilter[],\n sort?: DataRequestSort,\n select?: string[],\n computeTotal?: boolean,\n }) {\n this.page = options?.page;\n this.filters = options?.filters;\n this.sort = options?.sort;\n this.select = options?.select;\n this.computeTotal = options?.computeTotal;\n }\n}\n\n/**\n * Represents a data request page.\n */\nexport interface DataRequestPage {\n /**\n * Index of the page.\n * If zeroBased is true, the index starts from 0.\n */\n index: number;\n\n /**\n * Size of the page, i.e., number of items in each page.\n */\n size: number;\n\n /**\n * Indicates if the index is zero-based.\n */\n zeroBased: boolean;\n}\n\n/**\n * Represents a sorting option in a DataRequest.\n * @property field The field to sort by.\n * @property asc Whether to sort in ascending order.\n */\nexport interface DataRequestSort {\n field: string;\n asc?: boolean\n}\n\n/**\n * Represents a filter in a DataRequest.\n */\nexport interface DataRequestFilter {\n /**\n * The field to filter by.\n * It can be a string representing the property name of the data items.\n */\n field?: string;\n\n /**\n * The value to filter by.\n * It can be a string, number, or any other type depending on the field.\n */\n value?: string;\n\n /**\n * The operator to use for filtering.\n * It can be one of the standard filter operators like Contains, StartsWith, EndsWith, Equals, etc.\n */\n operator?: string;\n\n /**\n * Indicates if the filter is case-sensitive. only for text columns.\n * Default is false.\n */\n caseSensitive?: boolean;\n}\n\n// export enum DataRequestFilterOperator {\n// EQ = 0,\n// NEQ = 1,\n// LT = 2,\n// LTE = 3,\n// GT = 4,\n// GTE = 5,\n// LI = 6,\n// SW = 7,\n// }\n","export class DataResult<T = any> {\n constructor(\n public readonly data: T[],\n public readonly total?: number) {\n }\n}\n","import { Observable, Subject } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { signal } from \"@angular/core\";\n\n/**\n * Abstract base class for data sources.\n * This class provides a common interface for loading data from various sources.\n */\nexport abstract class DataSource<T=any> {\n protected loading = signal(false);\n\n constructor() {\n }\n\n /**\n * Indicates whether the data source is currently loading data.\n */\n public isLoading = this.loading.asReadonly();\n\n /**\n * Loads data from the data source.\n * @param request The data request object containing pagination, sorting, and filtering information.\n */\n abstract load(request: DataRequest): Observable<DataResult>;\n}\n\n","import { catchError, Observable, tap } from \"rxjs\";\nimport { DataRequest } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\n\n/**\n * DataLoader is a function that takes a DataRequest and returns an Observable of DataResult.\n * It is used by AsyncDataSource to load data asynchronously.\n */\nexport type DataLoader<T=any> = (request: DataRequest) => Observable<DataResult<T>>;\n\n\n/**\n * AsyncDataSource is a DataSource that loads data asynchronously using a DataLoader function.\n * It is used to fetch data from a remote source, such as an API.\n */\nexport class AsyncDataSource extends DataSource {\n constructor(private readonly loader: DataLoader) {\n super();\n\n if (typeof loader !== 'function') {\n throw 'Invalid data loader';\n }\n }\n\n load(request: DataRequest) {\n this.loading.set(true);\n\n return this.loader(request).pipe(\n catchError(err => {\n this.loading.set(false);\n throw err;\n }),\n tap(res => {\n this.loading.set(false);\n })\n )\n }\n}\n","import { delay, of, Subject, tap } from \"rxjs\";\nimport { DataRequest, DataRequestFilter } from \"./data-request\";\nimport { DataResult } from \"./data-result\";\nimport { DataSource } from \"./data-source\";\n\n/**\n * An implementation of DataSource that uses an array as the data source.\n * This is useful for static data or when you want to manage the data manually.\n */\nexport class ArrayDataSource extends DataSource {\n private _insertSubject = new Subject<{ items: any[] }>();\n private _updateSubject = new Subject<{ item: any, index: number }>();\n private _removeSubject = new Subject<{ item: any, index: number }>();\n\n public readonly inserted = this._insertSubject.asObservable();\n public readonly removed = this._removeSubject.asObservable();\n public readonly updated = this._updateSubject.asObservable();\n\n constructor(private items: any[]) {\n super();\n }\n\n load(request: DataRequest) {\n let filteredValues = [...this.items];\n let result: any[];\n\n // Filtering\n if (Array.isArray(request.filters) && request.filters.length > 0) {\n request.filters.forEach(filter => {\n if (!filter.field) {\n throw Error('DataRequestFilter \"field\" cannot be null.');\n }\n\n let isPassedByFilter = getFilterFunction(filter);\n\n for (let i = 0; i < filteredValues.length; i++) {\n let row = filteredValues[i];\n if (!isPassedByFilter(row[filter.field], filter.value)) {\n filteredValues.splice(i, 1);\n i--; // Adjust index after removal\n }\n }\n });\n }\n\n // Pagination\n if (request.page) {\n let startItemIndex = (request.page.zeroBased ? request.page.index : request.page.index - 1) * request.page.size;\n result = filteredValues.slice(startItemIndex, startItemIndex + request.page.size);\n } else {\n result = filteredValues;\n }\n\n // Sorting\n if (request.sort) {\n\n }\n\n let dataResult = new DataResult(result, filteredValues.length);\n\n // this._loading = true;\n // return of(result).pipe(\n // delay(5000),\n // tap(x => this._loading = false)\n // );\n return of(dataResult);\n }\n\n public remove(item: any) {\n let index = this.items!.findIndex(x => x === item);\n if (index > -1) {\n this.items.splice(index, 1);\n this._removeSubject.next({ item, index });\n }\n }\n\n public insert(...items: any[]) {\n this.items.push(items);\n this._insertSubject.next({ items });\n }\n\n // public set(items: any[]) {\n // this.items = items;\n // // this._removeSubject.next(0);\n // }\n}\n\nfunction getFilterFunction(requestfilter: DataRequestFilter): (cellValue: any, filterValue: any) => boolean {\n let operator = requestfilter.operator || 'contains';\n let caseSensitive = requestfilter.caseSensitive || false;\n\n // if (requestfilter.value === undefined || requestfilter.value === null) {\n // return (item: any) => true; // No filter applied\n // }\n\n switch (requestfilter.operator) {\n case 'contains':\n return caseSensitive ?\n (item: string, filter: string) => item.includes(filter) :\n (item: string, filter: string) => item.toLowerCase().includes(filter.toLowerCase());\n\n case 'startsWith':\n return caseSensitive ?\n (item: string, filter: string) => item.startsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().startsWith(filter.toLowerCase());\n\n case 'endsWith':\n return caseSensitive ?\n (item: string, filter: string) => item.endsWith(filter) :\n (item: string, filter: string) => item.toLowerCase().endsWith(filter.toLowerCase());\n\n case 'eq':\n if (typeof requestfilter.value === 'string') {\n return caseSensitive ?\n (item: string, filter: string) => item == filter :\n (item: string, filter: string) => item.toString().toLowerCase() === filter.toLowerCase();\n } else {\n return (item: any, filter: any) => item === filter;\n }\n\n case 'lt':\n return (item: any, filter: any) => item < filter;\n\n case 'lte':\n return (item: any, filter: any) => item <= filter;\n\n case 'gt':\n return (item: any, filter: any) => item > filter;\n\n case 'gte':\n return (item: any, filter: any) => item >= filter;\n\n case 'ne':\n return (item: any, filter: any) => item !== filter;\n\n default:\n throw new Error(`filter operator: ${operator} is not implemented in ArrayDataSource.`);\n }\n}","import { Observable } from \"rxjs\";\nimport { DataResult } from \"./data-result\";\nimport { DataRequest } from \"./data-request\";\n\nexport function toDataResult<T=any>(dr: DataRequest) {\n return function (source: Observable<any>): Observable<DataResult<T>> {\n return new Observable(subscriber => {\n source.subscribe({\n next(event) {\n subscriber.next(new DataResult(event));\n },\n error(error) {\n subscriber.error(error);\n },\n complete() {\n subscriber.complete();\n }\n });\n });\n }\n}\n","import { ArrayDataSource } from \"./array-data-source\";\nimport { AsyncDataSource, DataLoader } from \"./async-data-source\";\nimport { DataSource } from \"./data-source\";\n\n/**\n * DataSourceLike is a type that can be used to represent any data source\n * that can be used with the table, autocomplete, dropdown and any component that requires data.\n * It can be an array of data, a function that returns an observable of data,\n * or an instance of DataSource.\n */\nexport type DataSourceLike<T = any> = Array<any> | DataLoader<T> | DataSource<T> | undefined | null;\n\n\n/**\n * Converts a data source like an array, function, or DataSource into a DataSource instance.\n * @param source The data source to convert.\n * @returns A DataSource instance.\n */\nexport function convertToDataSource<T>(source: DataSourceLike): DataSource<T> {\n if (Array.isArray(source)) {\n return new ArrayDataSource(source);\n } else if (typeof source == 'function') {\n return new AsyncDataSource(source);\n } else if (source instanceof DataSource) {\n return source;\n } else if (source === undefined || source === null) {\n return new ArrayDataSource([]);\n } else {\n throw new Error('Invalid source parameter.');\n }\n}\n\n/**\n * LogicalOperator is a list of predefined logical operators that can be used in data requests to filter data.\n */\nexport type LogicalOperator =\n | 'contains'\n | 'endsWith'\n | 'startsWith'\n | 'like'\n | 'eq'\n | 'ne'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;AAAA;;;;;AAKG;MACU,WAAW,CAAA;AACb,IAAA,IAAI;AACJ,IAAA,OAAO;AACP,IAAA,IAAI;AACJ,IAAA,MAAM;AACN,IAAA,YAAY;AAEnB,IAAA,WAAA,CAAY,OAMX,EAAA;AACG,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO;AAC/B,QAAA,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI;AACzB,QAAA,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM;AAC7B,QAAA,IAAI,CAAC,YAAY,GAAG,OAAO,EAAE,YAAY;;AAEhD;AA8DD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;MCjGa,UAAU,CAAA;AAEH,IAAA,IAAA;AACA,IAAA,KAAA;IAFlB,WACkB,CAAA,IAAS,EACT,KAAc,EAAA;QADd,IAAI,CAAA,IAAA,GAAJ,IAAI;QACJ,IAAK,CAAA,KAAA,GAAL,KAAK;;AAExB;;ACAD;;;AAGG;MACmB,UAAU,CAAA;AACpB,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AAEjC,IAAA,WAAA,GAAA;;AAGA;;AAEG;AACI,IAAA,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAO7C;;ACbD;;;AAGG;AACG,MAAO,eAAgB,SAAQ,UAAU,CAAA;AAChB,IAAA,MAAA;AAA7B,IAAA,WAAA,CAA6B,MAAkB,EAAA;AAC7C,QAAA,KAAK,EAAE;QADoB,IAAM,CAAA,MAAA,GAAN,MAAM;AAGjC,QAAA,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE;AAChC,YAAA,MAAM,qBAAqB;;;AAI/B,IAAA,IAAI,CAAC,OAAoB,EAAA;AACvB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAEtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAC9B,UAAU,CAAC,GAAG,IAAG;AACf,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,YAAA,MAAM,GAAG;AACX,SAAC,CAAC,EACF,GAAG,CAAC,GAAG,IAAG;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;SACxB,CAAC,CACH;;AAEJ;;ACjCD;;;AAGG;AACG,MAAO,eAAgB,SAAQ,UAAU,CAAA;AASzB,IAAA,KAAA;AARZ,IAAA,cAAc,GAAG,IAAI,OAAO,EAAoB;AAChD,IAAA,cAAc,GAAG,IAAI,OAAO,EAAgC;AAC5D,IAAA,cAAc,GAAG,IAAI,OAAO,EAAgC;AAEpD,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAC7C,IAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAC5C,IAAA,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAE5D,IAAA,WAAA,CAAoB,KAAY,EAAA;AAC9B,QAAA,KAAK,EAAE;QADW,IAAK,CAAA,KAAA,GAAL,KAAK;;AAIzB,IAAA,IAAI,CAAC,OAAoB,EAAA;QACvB,IAAI,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACpC,QAAA,IAAI,MAAa;;AAGjB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAChE,YAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AAC/B,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,oBAAA,MAAM,KAAK,CAAC,2CAA2C,CAAC;;AAG1D,gBAAA,IAAI,gBAAgB,GAAG,iBAAiB,CAAC,MAAM,CAAC;AAEhD,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC9C,oBAAA,IAAI,GAAG,GAAG,cAAc,CAAC,CAAC,CAAC;AAC3B,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE;AACtD,wBAAA,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;wBAC3B,CAAC,EAAE,CAAC;;;AAGV,aAAC,CAAC;;;AAIJ,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;AAChB,YAAA,IAAI,cAAc,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI;AAC/G,YAAA,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;;aAC5E;YACL,MAAM,GAAG,cAAc;;;AAIzB,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE;;QAIlB,IAAI,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;;;;;;AAO9D,QAAA,OAAO,EAAE,CAAC,UAAU,CAAC;;AAGhB,IAAA,MAAM,CAAC,IAAS,EAAA;AACrB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAClD,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;;;IAItC,MAAM,CAAC,GAAG,KAAY,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC;;AAOtC;AAED,SAAS,iBAAiB,CAAC,aAAgC,EAAA;AACzD,IAAA,IAAI,QAAQ,GAAG,aAAa,CAAC,QAAQ,IAAI,UAAU;AACnD,IAAA,IAAI,aAAa,GAAG,aAAa,CAAC,aAAa,IAAI,KAAK;;;;AAMxD,IAAA,QAAQ,aAAa,CAAC,QAAQ;AAC5B,QAAA,KAAK,UAAU;YACb,OAAO,aAAa;AAClB,gBAAA,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACvD,gBAAA,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAEvF,QAAA,KAAK,YAAY;YACf,OAAO,aAAa;AAClB,gBAAA,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;AACzD,gBAAA,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAEzF,QAAA,KAAK,UAAU;YACb,OAAO,aAAa;AAClB,gBAAA,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACvD,gBAAA,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAEvF,QAAA,KAAK,IAAI;AACP,YAAA,IAAI,OAAO,aAAa,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3C,OAAO,aAAa;oBAClB,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,IAAI,MAAM;AAChD,oBAAA,CAAC,IAAY,EAAE,MAAc,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE;;iBACrF;gBACL,OAAO,CAAC,IAAS,EAAE,MAAW,KAAK,IAAI,KAAK,MAAM;;AAGtD,QAAA,KAAK,IAAI;YACP,OAAO,CAAC,IAAS,EAAE,MAAW,KAAK,IAAI,GAAG,MAAM;AAElD,QAAA,KAAK,KAAK;YACR,OAAO,CAAC,IAAS,EAAE,MAAW,KAAK,IAAI,IAAI,MAAM;AAEnD,QAAA,KAAK,IAAI;YACP,OAAO,CAAC,IAAS,EAAE,MAAW,KAAK,IAAI,GAAG,MAAM;AAElD,QAAA,KAAK,KAAK;YACR,OAAO,CAAC,IAAS,EAAE,MAAW,KAAK,IAAI,IAAI,MAAM;AAEnD,QAAA,KAAK,IAAI;YACP,OAAO,CAAC,IAAS,EAAE,MAAW,KAAK,IAAI,KAAK,MAAM;AAEpD,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAA,uCAAA,CAAyC,CAAC;;AAE5F;;ACtIM,SAAU,YAAY,CAAQ,EAAe,EAAA;AACjD,IAAA,OAAO,UAAU,MAAuB,EAAA;AACtC,QAAA,OAAO,IAAI,UAAU,CAAC,UAAU,IAAG;YACjC,MAAM,CAAC,SAAS,CAAC;AACf,gBAAA,IAAI,CAAC,KAAK,EAAA;oBACR,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;iBACvC;AACD,gBAAA,KAAK,CAAC,KAAK,EAAA;AACT,oBAAA,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;iBACxB;gBACD,QAAQ,GAAA;oBACN,UAAU,CAAC,QAAQ,EAAE;;AAExB,aAAA,CAAC;AACJ,SAAC,CAAC;AACJ,KAAC;AACH;;ACPA;;;;AAIG;AACG,SAAU,mBAAmB,CAAI,MAAsB,EAAA;AAC3D,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACzB,QAAA,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC;;AAC7B,SAAA,IAAI,OAAO,MAAM,IAAI,UAAU,EAAE;AACtC,QAAA,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC;;AAC7B,SAAA,IAAI,MAAM,YAAY,UAAU,EAAE;AACvC,QAAA,OAAO,MAAM;;SACR,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE;AAClD,QAAA,OAAO,IAAI,eAAe,CAAC,EAAE,CAAC;;SACzB;AACL,QAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;;AAEhD;;AC9BA;;AAEG;;;;"}
|
|
@@ -71,6 +71,19 @@ const FA_IR_LOCALE = new Locale({
|
|
|
71
71
|
noRecords: 'رکوردی وجود ندارد',
|
|
72
72
|
pagingInfo: (info) => `نمایش ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} از ${formatNumber(info.totalRecords)} رکورد`
|
|
73
73
|
}
|
|
74
|
+
},
|
|
75
|
+
data: {
|
|
76
|
+
logicalOperators: {
|
|
77
|
+
contains: 'شامل',
|
|
78
|
+
startsWith: 'شروع',
|
|
79
|
+
endsWith: 'پایان',
|
|
80
|
+
eq: 'مساوی',
|
|
81
|
+
gt: 'بزرگتر',
|
|
82
|
+
gte: 'بزرگتر یا مساوی',
|
|
83
|
+
lt: 'کوچکتر',
|
|
84
|
+
lte: 'کوچکتر یا مساوی',
|
|
85
|
+
ne: 'مخالف',
|
|
86
|
+
}
|
|
74
87
|
}
|
|
75
88
|
});
|
|
76
89
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-localization-locales.mjs","sources":["../../../projects/ng0/localization/locales/en-us.ts","../../../projects/ng0/localization/locales/fa-ir.ts","../../../projects/ng0/localization/locales/bootkit-ng0-localization-locales.ts"],"sourcesContent":["import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const EN_US_LOCALE = new Locale({\n name: 'en-US',\n rtl: false,\n dictionary: {\n ok: 'Ok',\n cancel: 'Cancel',\n warning: 'Warning',\n areYouSure: 'Are you sure?',\n noRecords: 'No records.',\n first: 'First',\n last: 'Last',\n next: 'Next',\n previous: 'Previous',\n pageXofY: 'Page {0} of {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'Invalid',\n required: (e) => `Required`,\n min: (e) => `Minimum: ${formatNumber(e.min)}`,\n max: (e) => `Maximum: ${formatNumber(e.max)}`,\n minlength: (e) => `Minimum length: ${e.requiredLength}`,\n maxlength: (e) => `Maximum length: ${e.requiredLength}`,\n email: (e) => `Invalid email`,\n }\n }\n },\n components: {\n table: {\n noRecords: 'No records found.',\n pagingInfo: (info) => `Showingsdsd ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} of ${formatNumber(info.totalRecords!)} records`\n }\n }\n});\n","import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const FA_IR_LOCALE = new Locale({\n name: 'fa-IR',\n rtl: true,\n dictionary: {\n ok: 'تایید',\n cancel: 'لغو',\n warning: 'هشدار',\n areYouSure: 'آیا مطمئن هستید?',\n noRecords: 'بدون رکورد',\n first: 'اولین',\n last: 'آخرین',\n next: 'بعدی',\n previous: 'قبلی',\n pageXofY: 'صفحه {0} از {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'نامعتبر',\n required: (e) => `الزامی`,\n min: (e) => `حداقل: ${formatNumber(e.min)}`,\n max: (e) => `حداکثر: ${formatNumber(e.max)}`,\n minlength: (e) => `حداقل ${e.requiredLength} کاراکتر`,\n maxlength: (e) => `حداکثر ${e.requiredLength} کاراکتر`,\n email: (e) => `ایمیل نامعتبر است`,\n }\n }\n },\n components: {\n table: {\n noRecords: 'رکوردی وجود ندارد',\n pagingInfo: (info) => `نمایش ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} از ${formatNumber(info.totalRecords!)} رکورد`\n }\n }\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["formatNumber"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-localization-locales.mjs","sources":["../../../projects/ng0/localization/locales/en-us.ts","../../../projects/ng0/localization/locales/fa-ir.ts","../../../projects/ng0/localization/locales/bootkit-ng0-localization-locales.ts"],"sourcesContent":["import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const EN_US_LOCALE = new Locale({\n name: 'en-US',\n rtl: false,\n dictionary: {\n ok: 'Ok',\n cancel: 'Cancel',\n warning: 'Warning',\n areYouSure: 'Are you sure?',\n noRecords: 'No records.',\n first: 'First',\n last: 'Last',\n next: 'Next',\n previous: 'Previous',\n pageXofY: 'Page {0} of {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'Invalid',\n required: (e) => `Required`,\n min: (e) => `Minimum: ${formatNumber(e.min)}`,\n max: (e) => `Maximum: ${formatNumber(e.max)}`,\n minlength: (e) => `Minimum length: ${e.requiredLength}`,\n maxlength: (e) => `Maximum length: ${e.requiredLength}`,\n email: (e) => `Invalid email`,\n }\n }\n },\n components: {\n table: {\n noRecords: 'No records found.',\n pagingInfo: (info) => `Showingsdsd ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} of ${formatNumber(info.totalRecords!)} records`\n }\n }\n});\n","import { Locale } from '@bootkit/ng0/localization';\n\nconst formatNumber = (n: number) => n.toLocaleString();\n\nexport const FA_IR_LOCALE = new Locale({\n name: 'fa-IR',\n rtl: true,\n dictionary: {\n ok: 'تایید',\n cancel: 'لغو',\n warning: 'هشدار',\n areYouSure: 'آیا مطمئن هستید?',\n noRecords: 'بدون رکورد',\n first: 'اولین',\n last: 'آخرین',\n next: 'بعدی',\n previous: 'قبلی',\n pageXofY: 'صفحه {0} از {1}',\n },\n form: {\n validation: {\n errors: {\n '*': (e) => 'نامعتبر',\n required: (e) => `الزامی`,\n min: (e) => `حداقل: ${formatNumber(e.min)}`,\n max: (e) => `حداکثر: ${formatNumber(e.max)}`,\n minlength: (e) => `حداقل ${e.requiredLength} کاراکتر`,\n maxlength: (e) => `حداکثر ${e.requiredLength} کاراکتر`,\n email: (e) => `ایمیل نامعتبر است`,\n }\n }\n },\n components: {\n table: {\n noRecords: 'رکوردی وجود ندارد',\n pagingInfo: (info) => `نمایش ${formatNumber(info.firstRecord)}-${formatNumber(info.lastRecord)} از ${formatNumber(info.totalRecords!)} رکورد`\n }\n },\n data: {\n logicalOperators: {\n contains: 'شامل',\n startsWith: 'شروع',\n endsWith: 'پایان',\n eq: 'مساوی',\n gt: 'بزرگتر',\n gte: 'بزرگتر یا مساوی',\n lt: 'کوچکتر',\n lte: 'کوچکتر یا مساوی',\n ne: 'مخالف',\n \n }\n }\n});\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["formatNumber"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-localization.mjs","sources":["../../../projects/ng0/localization/locale.ts","../../../projects/ng0/localization/locale-definition.ts","../../../projects/ng0/localization/localization.service.ts","../../../projects/ng0/localization/translate.pipe.ts","../../../projects/ng0/localization/translate-enum.pipe.ts","../../../projects/ng0/localization/translate-boolean-pipe.ts","../../../projects/ng0/localization/date.pipe.ts","../../../projects/ng0/localization/localize.pipe.ts","../../../projects/ng0/localization/localize-enum.pipe.ts","../../../projects/ng0/localization/localize-boolean-pipe.ts","../../../projects/ng0/localization/localize-date.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinition } from \"./locale-definition\";\nimport { TranslatedValidationError } from \"./types\";\n\n/** Locale */\nexport class Locale {\n\n constructor(public readonly definition: LocaleDefinition) {\n }\n\n /** \n * Returns the name of the locale\n * @returns The name of the locale\n */\n get name(): string {\n return this.definition.name;\n }\n\n /** \n * Translates a key in the dictionary\n * @param key The key to look up\n * @param fallback Optional fallback value if the key is not found\n * @returns The translated string or the fallbackValue if not found\n */\n translate(key: string, fallback?: string): string | undefined {\n return this.definition.dictionary?.[key] ?? fallback;\n }\n\n /**\n * Translates an enum value \n * @param enumName The name of the enum \n * @param enumValue The value of the enum to translate \n * @param nullValueKey\n * @param returnEnumAsFallback\n * @param fallbackKey\n * @returns The translated string or the enum value itself if not found \n */\n\n translateEnum(enumName: string, enumValue: string | number | null | undefined, fallback?: string): string | undefined {\n let e = this.definition.enums?.[enumName];\n\n if (!e) {\n return fallback || enumValue?.toString();\n }\n\n if (enumValue === null) {\n return e['[null]'] || e['[empty]'];\n } else if (enumValue === undefined) {\n return e['[undefined]'] || e['[empty]'];\n } else if (enumValue === '') {\n return e['empty'];\n } else {\n return e[enumValue] || e['[?]'] || fallback || enumValue?.toString();\n }\n }\n\n /** \n * Translates a form validation error\n * @param errorKey The key of the error to translate\n * @param error The error object\n */\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\n const errors = this.definition?.form?.validation?.errors;\n\n if (!errors) {\n return fallbackMessage;\n }\n\n const translatorFunc = errors[errorKey] ?? errors['*'];\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\n }\n\n /** \n * Translates validation errors \n * @param errors Validation errors object\n * @returns Array of translated validation errors\n */\n translateErrors(errors: any): TranslatedValidationError[] {\n const result: TranslatedValidationError[] = [];\n for (const key in errors) {\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\n result.push({\n key: key,\n value: errors[key],\n text: this.translateError(key, errors[key])\n });\n }\n }\n\n return result;\n }\n\n /** \n * Translates the first error in the validation errors object \n * @param errors Validation errors object\n * @returns TranslatedValidationError or undefined if no errors\n */\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\n const keys = Object.keys(errors);\n if (keys.length === 0) {\n return undefined;\n }\n\n const key = keys[0];\n const value = errors[key];\n return {\n key,\n value,\n text: this.translateError(key, value, fallbackMessage)\n };\n }\n\n /**\n * Clones and extends this object and returns a new Locale (without modifying this object).\n */\n extend(definition?: Omit<LocaleDefinition, 'name'>): Locale {\n return new Locale({ ...this.definition, ...definition });\n }\n\n /**\n * \n * @param date Date string or timestamp\n * @returns Formatted date string based on the locale \n */\n formatDate(date: Date | string | number, format?: string): string {\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\n }\n}\n","/** Locale dictionary */\nexport type LocaleDictionary = { [key: string]: string; };\nexport type LocaleEnums = { [enumName: string]: { [enumValue: string]: string } };\n\n/** Locale Error Translator */\nexport type LocaleValidationErrorTranslator = (error: any) => string;\n\n\n/** Locale validation error translator functions */\nexport type LocaleValidationErrorTranslators = {\n [key: string]: LocaleValidationErrorTranslator;\n};\n\n\n/** \n * Locale definition\n */\nexport interface LocaleDefinition {\n /** Locale name */\n readonly name: string;\n\n /** Does this locale belongs to a RTL language */\n readonly rtl?: boolean;\n\n /** Locale dictionary */\n dictionary?: LocaleDictionary;\n enums?: LocaleEnums,\n form?: {\n validation?: {\n /** Form validation error translators. */\n errors?: LocaleValidationErrorTranslators\n }\n }\n components?: {\n table?: {\n /**\n * No records found message.\n */\n noRecords?: string;\n\n /** \n * Error message displayed when loading data fails. \n */\n loadError?: string;\n\n /**\n * A format function to format the paging info.\n */\n pagingInfo?: TableComponentPagingFormatter;\n }\n }\n\n // date?: {\n // calendars?: {\n // [calendar: string]: {\n // days: string[],\n // daysShort: string[],\n // months: string[],\n // monthsShort: string[],\n // }\n // }\n // };\n // }\n};\n\n/**\n * A function to format the paging info of a table.\n * \n */\nexport type TableComponentPagingFormatter = (info: {\n /**\n * The first record in the current page.\n */\n firstRecord: number,\n\n /**\n * The last record in the current page.\n */\n lastRecord: number,\n\n /**\n * The total number of records.\n */\n totalRecords?: number,\n\n /**\n * The current page index.\n */\n currentPage: number\n}) => string;","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Locale } from './locale';\nimport { LocaleChangeEvent } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizationService {\n private _locales: Locale[] = [];\n private _activeLocale?: Locale;\n private _changeSubject = new Subject<LocaleChangeEvent>();\n readonly change = this._changeSubject.asObservable();\n\n constructor() {\n }\n\n /** \n * Adds a Locale \n */\n add(locale: Locale): void;\n /** Adds an array of Locales to this LocaleProvider */\n add(locales: Locale[]): void;\n add(l: any): void {\n if (l instanceof Locale) {\n this._locales.push(l);\n } else if (Array.isArray(l)) {\n l.forEach(x => this.add(x));\n } else {\n throw Error('Invalid locale');\n }\n\n if (this._locales.length == 1) {\n this._activeLocale = this._locales[0];\n }\n }\n\n /** Changes the active locale */\n set(localeName: string): void {\n const locale = this._locales.find(x => x.name === localeName);\n if (locale) {\n this._changeSubject.next({ old: this._activeLocale, new: locale });\n this._activeLocale = locale;\n return;\n }\n\n throw Error('Locale not found.');\n }\n\n /** Gets the active locale */\n get(): Locale | undefined {\n return this._activeLocale;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n\n/**\n * Pipe to translate a dictionary key into a localized string.\n * It uses the LocalizationService to fetch the translation.\n * If the translation is not found, it returns the fallback string if provided.\n */\n@Pipe({\n name: 'ng0Translate',\n standalone: true,\n pure: true\n})\nexport class TranslatePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string, fallback?: string) {\n return this._ls.get()?.translate(dictionaryKey, fallback) || dictionaryKey;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateEnum',\n standalone: true,\n pure: true\n})\nexport class TranslateEnumPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n return this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateBool',\n standalone: true,\n pure: true\n})\nexport class TranslateBooleanPipe implements PipeTransform {\n\n constructor(private localeProvider: LocalizationService) {\n }\n\n transform(value: any, falseKey: string = 'true', trueKey: string = 'false'): any {\n return this.localeProvider.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0Date',\n standalone: true,\n pure: true\n})\nexport class DatePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(value: Date | string | number, format?: string) {\n return this._ls.get()?.formatDate(value, format);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0Localize',\n standalone: true,\n pure: false\n})\nexport class LocalizePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string) {\n return this._ls.get()?.translate(dictionaryKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeEnum',\n standalone: true,\n pure: false\n})\nexport class LocalizeEnumPipe implements PipeTransform {\n private _recompute = true;\n private _value?: string;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n if (this._recompute) {\n this._value = this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0LocalizeBool',\n standalone: true,\n pure: false\n})\nexport class LocalizeBooleanPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(value: any, falseKey = 'true', trueKey: 'false') {\n return this._ls.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Locale } from './locale';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeDate',\n standalone: true,\n pure: false\n})\nexport class LocalizeDatePipe implements PipeTransform {\n private _value?: string;\n private _recompute = true;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n transform(value: number | string, format?: string) {\n if (this._recompute) {\n this._value = this._ls.get()?.formatDate(value, format);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TranslateEnumPipe } from './translate-enum.pipe';\nimport { TranslateBooleanPipe } from './translate-boolean-pipe';\nimport { DatePipe } from './date.pipe';\nimport { LocalizePipe } from './localize.pipe';\nimport { LocalizeEnumPipe } from './localize-enum.pipe';\nimport { LocalizeBooleanPipe } from './localize-boolean-pipe';\nimport { LocalizeDatePipe } from './localize-date.pipe';\n\nconst Declares = [\n // Pure pipes\n TranslatePipe,\n TranslateEnumPipe,\n TranslateBooleanPipe,\n DatePipe,\n\n // Impure pipes\n LocalizePipe,\n LocalizeEnumPipe,\n LocalizeBooleanPipe,\n LocalizeDatePipe\n];\n\n@NgModule({\n imports: Declares,\n exports: Declares\n})\nexport class LocalizationModule {\n}\n\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { Locale } from './locale';\n\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\n\nexport interface TranslatedValidationError {\n /** Error key */\n key: string;\n \n /** Error object */\n value: any;\n \n /** localized error text */\n text?: string;\n }\n \n export interface LocaleChangeEvent {\n old?: Locale;\n new: Locale;\n }\n ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-localization.mjs","sources":["../../../projects/ng0/localization/locale.ts","../../../projects/ng0/localization/locale-definition.ts","../../../projects/ng0/localization/localization.service.ts","../../../projects/ng0/localization/translate.pipe.ts","../../../projects/ng0/localization/translate-enum.pipe.ts","../../../projects/ng0/localization/translate-boolean-pipe.ts","../../../projects/ng0/localization/date.pipe.ts","../../../projects/ng0/localization/localize.pipe.ts","../../../projects/ng0/localization/localize-enum.pipe.ts","../../../projects/ng0/localization/localize-boolean-pipe.ts","../../../projects/ng0/localization/localize-date.pipe.ts","../../../projects/ng0/localization/localization.module.ts","../../../projects/ng0/localization/types.ts","../../../projects/ng0/localization/bootkit-ng0-localization.ts"],"sourcesContent":["import { LocaleDefinition } from \"./locale-definition\";\nimport { TranslatedValidationError } from \"./types\";\n\n/** Locale */\nexport class Locale {\n\n constructor(public readonly definition: LocaleDefinition) {\n }\n\n /** \n * Returns the name of the locale\n * @returns The name of the locale\n */\n get name(): string {\n return this.definition.name;\n }\n\n /** \n * Translates a key in the dictionary\n * @param key The key to look up\n * @param fallback Optional fallback value if the key is not found\n * @returns The translated string or the fallbackValue if not found\n */\n translate(key: string, fallback?: string): string | undefined {\n return this.definition.dictionary?.[key] ?? fallback;\n }\n\n /**\n * Translates an enum value \n * @param enumName The name of the enum \n * @param enumValue The value of the enum to translate \n * @param nullValueKey\n * @param returnEnumAsFallback\n * @param fallbackKey\n * @returns The translated string or the enum value itself if not found \n */\n\n translateEnum(enumName: string, enumValue: string | number | null | undefined, fallback?: string): string | undefined {\n let e = this.definition.enums?.[enumName];\n\n if (!e) {\n return fallback || enumValue?.toString();\n }\n\n if (enumValue === null) {\n return e['[null]'] || e['[empty]'];\n } else if (enumValue === undefined) {\n return e['[undefined]'] || e['[empty]'];\n } else if (enumValue === '') {\n return e['empty'];\n } else {\n return e[enumValue] || e['[?]'] || fallback || enumValue?.toString();\n }\n }\n\n /** \n * Translates a form validation error\n * @param errorKey The key of the error to translate\n * @param error The error object\n */\n translateError(errorKey: string, error: any, fallbackMessage: string | undefined = undefined): string | undefined {\n const errors = this.definition?.form?.validation?.errors;\n\n if (!errors) {\n return fallbackMessage;\n }\n\n const translatorFunc = errors[errorKey] ?? errors['*'];\n return typeof translatorFunc === 'function' ? translatorFunc(error) : fallbackMessage;\n }\n\n /** \n * Translates validation errors \n * @param errors Validation errors object\n * @returns Array of translated validation errors\n */\n translateErrors(errors: any): TranslatedValidationError[] {\n const result: TranslatedValidationError[] = [];\n for (const key in errors) {\n if (Object.prototype.hasOwnProperty.call(errors, key)) {\n result.push({\n key: key,\n value: errors[key],\n text: this.translateError(key, errors[key])\n });\n }\n }\n\n return result;\n }\n\n /** \n * Translates the first error in the validation errors object \n * @param errors Validation errors object\n * @returns TranslatedValidationError or undefined if no errors\n */\n translateFirstError(errors: any, fallbackMessage: string | undefined = undefined): TranslatedValidationError | undefined {\n const keys = Object.keys(errors);\n if (keys.length === 0) {\n return undefined;\n }\n\n const key = keys[0];\n const value = errors[key];\n return {\n key,\n value,\n text: this.translateError(key, value, fallbackMessage)\n };\n }\n\n /**\n * Clones and extends this object and returns a new Locale (without modifying this object).\n */\n extend(definition?: Omit<LocaleDefinition, 'name'>): Locale {\n return new Locale({ ...this.definition, ...definition });\n }\n\n /**\n * \n * @param date Date string or timestamp\n * @returns Formatted date string based on the locale \n */\n formatDate(date: Date | string | number, format?: string): string {\n return date ? new Date(date).toLocaleDateString(this.definition.name, { hour: '2-digit', minute: '2-digit' }) : '';\n }\n}\n","/** Locale dictionary */\nexport type LocaleDictionary = { [key: string]: string; };\nexport type LocaleEnums = { [enumName: string]: { [enumValue: string]: string } };\n\n/** Locale Error Translator */\nexport type LocaleValidationErrorTranslator = (error: any) => string;\n\n\n/** Locale validation error translator functions */\nexport type LocaleValidationErrorTranslators = {\n [key: string]: LocaleValidationErrorTranslator;\n};\n\n\n/** \n * Locale definition\n */\nexport interface LocaleDefinition {\n /** Locale name */\n readonly name: string;\n\n /** Does this locale belongs to a RTL language */\n readonly rtl?: boolean;\n\n /** Locale dictionary */\n dictionary?: LocaleDictionary;\n enums?: LocaleEnums,\n form?: {\n validation?: {\n /** Form validation error translators. */\n errors?: LocaleValidationErrorTranslators\n }\n },\n data?: {\n logicalOperators?: {\n [operator: string]: string\n }\n },\n components?: {\n table?: {\n /**\n * No records found message.\n */\n noRecords?: string;\n\n /** \n * Error message displayed when loading data fails. \n */\n loadError?: string;\n\n /**\n * A format function to format the paging info.\n */\n pagingInfo?: TableComponentPagingFormatter;\n }\n }\n\n // date?: {\n // calendars?: {\n // [calendar: string]: {\n // days: string[],\n // daysShort: string[],\n // months: string[],\n // monthsShort: string[],\n // }\n // }\n // };\n // }\n};\n\n/**\n * A function to format the paging info of a table.\n * \n */\nexport type TableComponentPagingFormatter = (info: {\n /**\n * The first record in the current page.\n */\n firstRecord: number,\n\n /**\n * The last record in the current page.\n */\n lastRecord: number,\n\n /**\n * The total number of records.\n */\n totalRecords?: number,\n\n /**\n * The current page index.\n */\n currentPage: number\n}) => string;","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Locale } from './locale';\nimport { LocaleChangeEvent } from './types';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalizationService {\n private _locales: Locale[] = [];\n private _activeLocale?: Locale;\n private _changeSubject = new Subject<LocaleChangeEvent>();\n readonly change = this._changeSubject.asObservable();\n\n constructor() {\n }\n\n /** \n * Adds a Locale \n */\n add(locale: Locale): void;\n /** Adds an array of Locales to this LocaleProvider */\n add(locales: Locale[]): void;\n add(l: any): void {\n if (l instanceof Locale) {\n this._locales.push(l);\n } else if (Array.isArray(l)) {\n l.forEach(x => this.add(x));\n } else {\n throw Error('Invalid locale');\n }\n\n if (this._locales.length == 1) {\n this._activeLocale = this._locales[0];\n }\n }\n\n /** Changes the active locale */\n set(localeName: string): void {\n const locale = this._locales.find(x => x.name === localeName);\n if (locale) {\n this._changeSubject.next({ old: this._activeLocale, new: locale });\n this._activeLocale = locale;\n return;\n }\n\n throw Error('Locale not found.');\n }\n\n /** Gets the active locale */\n get(): Locale | undefined {\n return this._activeLocale;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n\n/**\n * Pipe to translate a dictionary key into a localized string.\n * It uses the LocalizationService to fetch the translation.\n * If the translation is not found, it returns the fallback string if provided.\n */\n@Pipe({\n name: 'ng0Translate',\n standalone: true,\n pure: true\n})\nexport class TranslatePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string, fallback?: string) {\n return this._ls.get()?.translate(dictionaryKey, fallback) || dictionaryKey;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateEnum',\n standalone: true,\n pure: true\n})\nexport class TranslateEnumPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n return this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0TranslateBool',\n standalone: true,\n pure: true\n})\nexport class TranslateBooleanPipe implements PipeTransform {\n\n constructor(private localeProvider: LocalizationService) {\n }\n\n transform(value: any, falseKey: string = 'true', trueKey: string = 'false'): any {\n return this.localeProvider.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0Date',\n standalone: true,\n pure: true\n})\nexport class DatePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(value: Date | string | number, format?: string) {\n return this._ls.get()?.formatDate(value, format);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0Localize',\n standalone: true,\n pure: false\n})\nexport class LocalizePipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(dictionaryKey: string) {\n return this._ls.get()?.translate(dictionaryKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeEnum',\n standalone: true,\n pure: false\n})\nexport class LocalizeEnumPipe implements PipeTransform {\n private _recompute = true;\n private _value?: string;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n /**\n * \n * @param enumValue \n * @param enumName \n * @param nullValueKey \n * @param returnEnumAsFallback\n * @param fallbackKey \n * @returns \n */\n transform(enumValue: string | number | null | undefined, enumName: string, fallback?: string): any {\n if (this._recompute) {\n this._value = this._ls.get()?.translateEnum(enumName, enumValue, fallback);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { LocalizationService } from './localization.service';\n\n@Pipe({\n name: 'ng0LocalizeBool',\n standalone: true,\n pure: false\n})\nexport class LocalizeBooleanPipe implements PipeTransform {\n constructor(private _ls: LocalizationService) {\n }\n\n transform(value: any, falseKey = 'true', trueKey: 'false') {\n return this._ls.get()?.translate(value ? trueKey : falseKey);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Locale } from './locale';\nimport { LocalizationService } from './localization.service';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Pipe({\n name: 'ng0LocalizeDate',\n standalone: true,\n pure: false\n})\nexport class LocalizeDatePipe implements PipeTransform {\n private _value?: string;\n private _recompute = true;\n\n constructor(private _ls: LocalizationService) {\n _ls.change.pipe(takeUntilDestroyed()).subscribe(x => this._recompute = true);\n }\n\n transform(value: number | string, format?: string) {\n if (this._recompute) {\n this._value = this._ls.get()?.formatDate(value, format);\n this._recompute = false;\n }\n\n return this._value;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TranslatePipe } from './translate.pipe';\nimport { TranslateEnumPipe } from './translate-enum.pipe';\nimport { TranslateBooleanPipe } from './translate-boolean-pipe';\nimport { DatePipe } from './date.pipe';\nimport { LocalizePipe } from './localize.pipe';\nimport { LocalizeEnumPipe } from './localize-enum.pipe';\nimport { LocalizeBooleanPipe } from './localize-boolean-pipe';\nimport { LocalizeDatePipe } from './localize-date.pipe';\n\nconst Declares = [\n // Pure pipes\n TranslatePipe,\n TranslateEnumPipe,\n TranslateBooleanPipe,\n DatePipe,\n\n // Impure pipes\n LocalizePipe,\n LocalizeEnumPipe,\n LocalizeBooleanPipe,\n LocalizeDatePipe\n];\n\n@NgModule({\n imports: Declares,\n exports: Declares\n})\nexport class LocalizationModule {\n}\n\n","import { InjectionToken } from '@angular/core';\nimport { LocalizationService } from './localization.service';\nimport { Locale } from './locale';\n\nexport const LOCALE = new InjectionToken<Locale | LocalizationService>('LOCALE');\n\nexport interface TranslatedValidationError {\n /** Error key */\n key: string;\n \n /** Error object */\n value: any;\n \n /** localized error text */\n text?: string;\n }\n \n export interface LocaleChangeEvent {\n old?: Locale;\n new: Locale;\n }\n ","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LocalizationService"],"mappings":";;;;;AAGA;MACa,MAAM,CAAA;AAEW,IAAA,UAAA;AAA5B,IAAA,WAAA,CAA4B,UAA4B,EAAA;QAA5B,IAAU,CAAA,UAAA,GAAV,UAAU;;AAGtC;;;AAGG;AACH,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI;;AAG7B;;;;;AAKG;IACH,SAAS,CAAC,GAAW,EAAE,QAAiB,EAAA;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,QAAQ;;AAGtD;;;;;;;;AAQG;AAEH,IAAA,aAAa,CAAC,QAAgB,EAAE,SAA6C,EAAE,QAAiB,EAAA;QAC9F,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;QAEzC,IAAI,CAAC,CAAC,EAAE;AACN,YAAA,OAAO,QAAQ,IAAI,SAAS,EAAE,QAAQ,EAAE;;AAG1C,QAAA,IAAI,SAAS,KAAK,IAAI,EAAE;YACtB,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;;AAC7B,aAAA,IAAI,SAAS,KAAK,SAAS,EAAE;YAClC,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;;AAClC,aAAA,IAAI,SAAS,KAAK,EAAE,EAAE;AAC3B,YAAA,OAAO,CAAC,CAAC,OAAO,CAAC;;aACZ;AACL,YAAA,OAAO,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,QAAQ,IAAI,SAAS,EAAE,QAAQ,EAAE;;;AAIxE;;;;AAIC;AACD,IAAA,cAAc,CAAC,QAAgB,EAAE,KAAU,EAAE,kBAAsC,SAAS,EAAA;QAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM;QAExD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,eAAe;;QAGxB,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AACtD,QAAA,OAAO,OAAO,cAAc,KAAK,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,eAAe;;AAGvF;;;;AAIG;AACH,IAAA,eAAe,CAAC,MAAW,EAAA;QACzB,MAAM,MAAM,GAAgC,EAAE;AAC9C,QAAA,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE;AACxB,YAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE;gBACrD,MAAM,CAAC,IAAI,CAAC;AACV,oBAAA,GAAG,EAAE,GAAG;AACR,oBAAA,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC;oBAClB,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;AAC3C,iBAAA,CAAC;;;AAIN,QAAA,OAAO,MAAM;;AAGf;;;;AAIG;AACH,IAAA,mBAAmB,CAAC,MAAW,EAAE,eAAA,GAAsC,SAAS,EAAA;QAC9E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,SAAS;;AAGlB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AACnB,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;QACzB,OAAO;YACL,GAAG;YACH,KAAK;YACL,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe;SACtD;;AAGH;;AAEG;AACH,IAAA,MAAM,CAAC,UAA2C,EAAA;AAChD,QAAA,OAAO,IAAI,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,EAAE,CAAC;;AAG1D;;;;AAIC;IACD,UAAU,CAAC,IAA4B,EAAE,MAAe,EAAA;AACtD,QAAA,OAAO,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,EAAE;;AAErH;;AC1DA;;MC5DY,mBAAmB,CAAA;IACtB,QAAQ,GAAa,EAAE;AACvB,IAAA,aAAa;AACb,IAAA,cAAc,GAAG,IAAI,OAAO,EAAqB;AAChD,IAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AAEpD,IAAA,WAAA,GAAA;;AASA,IAAA,GAAG,CAAC,CAAM,EAAA;AACR,QAAA,IAAI,CAAC,YAAY,MAAM,EAAE;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;;AAChB,aAAA,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AAC3B,YAAA,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;aACtB;AACL,YAAA,MAAM,KAAK,CAAC,gBAAgB,CAAC;;QAG/B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;YAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;;;;AAKzC,IAAA,GAAG,CAAC,UAAkB,EAAA;AACpB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC;QAC7D,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;AAClE,YAAA,IAAI,CAAC,aAAa,GAAG,MAAM;YAC3B;;AAGF,QAAA,MAAM,KAAK,CAAC,mBAAmB,CAAC;;;IAIlC,GAAG,GAAA;QACC,OAAO,IAAI,CAAC,aAAa;;uGA3ClB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFlB,MAAM,EAAA,CAAA;;2FAEP,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACHD;;;;AAIG;MAMU,aAAa,CAAA;AACJ,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAG,CAAA,GAAA,GAAH,GAAG;;IAGvB,SAAS,CAAC,aAAqB,EAAE,QAAiB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,aAAa;;uGALjE,aAAa,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAb,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCLY,iBAAiB,CAAA;AACR,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAG,CAAA,GAAA,GAAH,GAAG;;AAGvB;;;;;;;;AAQG;AACH,IAAA,SAAS,CAAC,SAA6C,EAAE,QAAgB,EAAE,QAAiB,EAAA;AAC1F,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;;uGAd1D,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,kBAAkB;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCCY,oBAAoB,CAAA;AAEX,IAAA,cAAA;AAApB,IAAA,WAAA,CAAoB,cAAmC,EAAA;QAAnC,IAAc,CAAA,cAAA,GAAd,cAAc;;AAGlC,IAAA,SAAS,CAAC,KAAU,EAAE,WAAmB,MAAM,EAAE,UAAkB,OAAO,EAAA;AACxE,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;;uGAN9D,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,kBAAA,EAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,kBAAkB;AACxB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCCY,QAAQ,CAAA;AACC,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAG,CAAA,GAAA,GAAH,GAAG;;IAGvB,SAAS,CAAC,KAA6B,EAAE,MAAe,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;;uGALvC,QAAQ,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAR,QAAQ,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA;;2FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBALpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCCY,YAAY,CAAA;AACH,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAG,CAAA,GAAA,GAAH,GAAG;;AAGvB,IAAA,SAAS,CAAC,aAAqB,EAAA;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC;;uGALtC,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,aAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBALxB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCEY,gBAAgB,CAAA;AAIP,IAAA,GAAA;IAHZ,UAAU,GAAG,IAAI;AACjB,IAAA,MAAM;AAEd,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAG,CAAA,GAAA,GAAH,GAAG;QACrB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;;AAG9E;;;;;;;;AAQG;AACH,IAAA,SAAS,CAAC,SAA6C,EAAE,QAAgB,EAAE,QAAiB,EAAA;AAC1F,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;AAC1E,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;QAGzB,OAAO,IAAI,CAAC,MAAM;;uGAvBT,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCAY,mBAAmB,CAAA;AACV,IAAA,GAAA;AAApB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAG,CAAA,GAAA,GAAH,GAAG;;AAGvB,IAAA,SAAS,CAAC,KAAU,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAgB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;;uGALnD,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;MCGY,gBAAgB,CAAA;AAIP,IAAA,GAAA;AAHZ,IAAA,MAAM;IACN,UAAU,GAAG,IAAI;AAEzB,IAAA,WAAA,CAAoB,GAAwB,EAAA;QAAxB,IAAG,CAAA,GAAA,GAAH,GAAG;QACrB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;;IAG9E,SAAS,CAAC,KAAsB,EAAE,MAAe,EAAA;AAC/C,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC;AACvD,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK;;QAGzB,OAAO,IAAI,CAAC,MAAM;;uGAdT,gBAAgB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA;qGAAhB,gBAAgB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,iBAAiB;AACvB,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACP,iBAAA;;;ACED,MAAM,QAAQ,GAAG;;IAEf,aAAa;IACb,iBAAiB;IACjB,oBAAoB;IACpB,QAAQ;;IAGR,YAAY;IACZ,gBAAgB;IAChB,mBAAmB;IACnB;CACD;MAMY,kBAAkB,CAAA;uGAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAlB,kBAAkB,EAAA,OAAA,EAAA;;YAhB7B,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,QAAQ;;YAGR,YAAY;YACZ,gBAAgB;YAChB,mBAAmB;YACnB,gBAAgB,CAAA,EAAA,OAAA,EAAA;;YAThB,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,QAAQ;;YAGR,YAAY;YACZ,gBAAgB;YAChB,mBAAmB;YACnB,gBAAgB,CAAA,EAAA,CAAA;wGAOL,kBAAkB,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,QAAQ;AACjB,oBAAA,OAAO,EAAE;AACV,iBAAA;;;MCxBY,MAAM,GAAG,IAAI,cAAc,CAA+B,QAAQ;;ACJ/E;;AAEG;;;;"}
|
package/localization/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bootkit/ng0",
|
|
3
|
-
"version": "0.0.0-alpha.
|
|
3
|
+
"version": "0.0.0-alpha.16",
|
|
4
4
|
"description": "Angular+Bootstrap Component Library",
|
|
5
5
|
"homepage": "https://bootkitlib.github.io/",
|
|
6
6
|
"author": "BootKit",
|
|
@@ -43,14 +43,14 @@
|
|
|
43
43
|
"types": "./date/index.d.ts",
|
|
44
44
|
"default": "./fesm2022/bootkit-ng0-date.mjs"
|
|
45
45
|
},
|
|
46
|
-
"./common": {
|
|
47
|
-
"types": "./common/index.d.ts",
|
|
48
|
-
"default": "./fesm2022/bootkit-ng0-common.mjs"
|
|
49
|
-
},
|
|
50
46
|
"./file": {
|
|
51
47
|
"types": "./file/index.d.ts",
|
|
52
48
|
"default": "./fesm2022/bootkit-ng0-file.mjs"
|
|
53
49
|
},
|
|
50
|
+
"./common": {
|
|
51
|
+
"types": "./common/index.d.ts",
|
|
52
|
+
"default": "./fesm2022/bootkit-ng0-common.mjs"
|
|
53
|
+
},
|
|
54
54
|
"./form": {
|
|
55
55
|
"types": "./form/index.d.ts",
|
|
56
56
|
"default": "./fesm2022/bootkit-ng0-form.mjs"
|