@odx/angular 12.6.0 → 12.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/components/table/lib/components/header-title/header-title.component.d.ts +2 -1
- package/components/table/lib/models/column-width.d.ts +5 -0
- package/components/table/lib/models/header-cell.d.ts +2 -0
- package/components/table/lib/models/index.d.ts +1 -0
- package/components/table/lib/table.component.d.ts +12 -8
- package/esm2022/components/table/lib/components/header-title/header-title.component.mjs +15 -9
- package/esm2022/components/table/lib/models/column-width.mjs +2 -0
- package/esm2022/components/table/lib/models/header-cell.mjs +1 -1
- package/esm2022/components/table/lib/models/index.mjs +2 -1
- package/esm2022/components/table/lib/table.component.mjs +29 -25
- package/fesm2022/odx-angular-components-table.mjs +40 -31
- package/fesm2022/odx-angular-components-table.mjs.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
2
|
import { FormControl, FormGroup } from '@angular/forms';
|
|
3
|
-
import { SortStatus, TableHeaderCell } from '../../models';
|
|
3
|
+
import { ColumnWidth, SortStatus, TableHeaderCell } from '../../models';
|
|
4
4
|
import { TableSortVariant } from '../../models/sort-variant';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
/**
|
|
@@ -66,6 +66,7 @@ export declare class HeaderTitleComponent implements OnInit {
|
|
|
66
66
|
ngOnInit(): void;
|
|
67
67
|
private checkBoxListener;
|
|
68
68
|
get indeterminate(): boolean;
|
|
69
|
+
protected get columnWidth(): ColumnWidth;
|
|
69
70
|
static ɵfac: i0.ɵɵFactoryDeclaration<HeaderTitleComponent, never>;
|
|
70
71
|
static ɵcmp: i0.ɵɵComponentDeclaration<HeaderTitleComponent, "th[odxHeaderTitle]", never, { "item": { "alias": "item"; "required": false; }; }, {}, never, ["odx-form-field"], true, never>;
|
|
71
72
|
}
|
|
@@ -15,6 +15,7 @@ import * as i0 from "@angular/core";
|
|
|
15
15
|
*/
|
|
16
16
|
export declare class TableComponent<T> implements OnInit {
|
|
17
17
|
private readonly takeUntilDestroyed;
|
|
18
|
+
protected headerColumns: import("@angular/core").Signal<TableHeaderCell[]>;
|
|
18
19
|
readonly element: import("@angular/core").ElementRef<HTMLElement>;
|
|
19
20
|
/**
|
|
20
21
|
* Specifies the table variant for CSS styling.
|
|
@@ -25,17 +26,21 @@ export declare class TableComponent<T> implements OnInit {
|
|
|
25
26
|
/**
|
|
26
27
|
* Data array of type T that the table displays.
|
|
27
28
|
*
|
|
28
|
-
* @type {T[]}
|
|
29
|
-
* @default []
|
|
29
|
+
* @type {Signal<T[]>}
|
|
30
30
|
*/
|
|
31
|
-
data: T[]
|
|
31
|
+
data: import("@angular/core").InputSignal<T[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Message to display when no data is available.
|
|
34
|
+
*
|
|
35
|
+
* @type {Signal<string>}
|
|
36
|
+
*/
|
|
37
|
+
noDataMessage: import("@angular/core").InputSignal<string>;
|
|
32
38
|
/**
|
|
33
39
|
* Configuration for table header data which controls sorting, filtering, and additional metadata.
|
|
34
40
|
*
|
|
35
|
-
* @type {TableHeaderCell[]}
|
|
36
|
-
* @default []
|
|
41
|
+
* @type {Signal<TableHeaderCell[]>}
|
|
37
42
|
*/
|
|
38
|
-
headerData: TableHeaderCell[]
|
|
43
|
+
headerData: import("@angular/core").InputSignal<TableHeaderCell[]>;
|
|
39
44
|
/**
|
|
40
45
|
* FormGroup to handle the dynamic filtering controls, each tied to a header cell that has filtering enabled.
|
|
41
46
|
*/
|
|
@@ -75,7 +80,6 @@ export declare class TableComponent<T> implements OnInit {
|
|
|
75
80
|
*/
|
|
76
81
|
clearSort(): void;
|
|
77
82
|
private formListener;
|
|
78
|
-
private setHeaderData;
|
|
79
83
|
static ɵfac: i0.ɵɵFactoryDeclaration<TableComponent<any>, never>;
|
|
80
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "table[odxTable]", never, { "variant": { "alias": "variant"; "required": false; }; "data": { "alias": "data"; "required": false; }; "headerData": { "alias": "headerData"; "required": false; }; }, { "sorted": "sorted"; "filtered": "filtered"; "checked": "checked"; }, never, ["tr"], true, never>;
|
|
84
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<TableComponent<any>, "table[odxTable]", never, { "variant": { "alias": "variant"; "required": false; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "noDataMessage": { "alias": "noDataMessage"; "required": false; "isSignal": true; }; "headerData": { "alias": "headerData"; "required": false; "isSignal": true; }; }, { "sorted": "sorted"; "filtered": "filtered"; "checked": "checked"; }, never, ["tr"], true, never>;
|
|
81
85
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, inject, Input, ViewEncapsulation } from '@angular/core';
|
|
3
3
|
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
4
4
|
import { CheckboxComponent } from '@odx/angular/components/checkbox';
|
|
5
5
|
import { untilDestroyed } from '@odx/angular/utils';
|
|
@@ -74,7 +74,7 @@ export class HeaderTitleComponent {
|
|
|
74
74
|
* @returns {number}
|
|
75
75
|
*/
|
|
76
76
|
get selected() {
|
|
77
|
-
return this.table.data.filter((d) => d[this.item.name]).length;
|
|
77
|
+
return this.table.data().filter((d) => d[this.item.name]).length;
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
80
|
* Updates the component view, usually after a state change.
|
|
@@ -88,8 +88,8 @@ export class HeaderTitleComponent {
|
|
|
88
88
|
* @returns {boolean}
|
|
89
89
|
*/
|
|
90
90
|
get checked() {
|
|
91
|
-
const column = this.
|
|
92
|
-
return this.table.data.every((item) => column && item[column]);
|
|
91
|
+
const column = this.item.check && this.item.name;
|
|
92
|
+
return this.table.data().every((item) => column && item[column]);
|
|
93
93
|
}
|
|
94
94
|
ngOnInit() {
|
|
95
95
|
this.checkBoxListener();
|
|
@@ -103,18 +103,24 @@ export class HeaderTitleComponent {
|
|
|
103
103
|
.subscribe();
|
|
104
104
|
}
|
|
105
105
|
get indeterminate() {
|
|
106
|
-
const column = this.
|
|
107
|
-
const { length } = this.table.data;
|
|
108
|
-
const unchecked = length - this.table.data.filter((item) => column && item[column]).length;
|
|
106
|
+
const column = this.item.check && this.item.name;
|
|
107
|
+
const { length } = this.table.data();
|
|
108
|
+
const unchecked = length - this.table.data().filter((item) => column && item[column]).length;
|
|
109
109
|
return unchecked > 0 && unchecked < length;
|
|
110
110
|
}
|
|
111
|
+
get columnWidth() {
|
|
112
|
+
return this.item.width ?? 'auto';
|
|
113
|
+
}
|
|
111
114
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
112
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HeaderTitleComponent, isStandalone: true, selector: "th[odxHeaderTitle]", inputs: { item: "item" }, ngImport: i0, template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CheckboxComponent, selector: "odx-checkbox", inputs: ["indeterminate"], outputs: ["indeterminateChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
115
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HeaderTitleComponent, isStandalone: true, selector: "th[odxHeaderTitle]", inputs: { item: "item" }, host: { properties: { "style.width": "this.columnWidth" } }, ngImport: i0, template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CheckboxComponent, selector: "odx-checkbox", inputs: ["indeterminate"], outputs: ["indeterminateChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
113
116
|
}
|
|
114
117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderTitleComponent, decorators: [{
|
|
115
118
|
type: Component,
|
|
116
119
|
args: [{ selector: 'th[odxHeaderTitle]', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, CheckboxComponent, ReactiveFormsModule], template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n" }]
|
|
117
120
|
}], propDecorators: { item: [{
|
|
118
121
|
type: Input
|
|
122
|
+
}], columnWidth: [{
|
|
123
|
+
type: HostBinding,
|
|
124
|
+
args: ['style.width']
|
|
119
125
|
}] } });
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEksT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUzQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQUUzQzs7OztHQUlHO0FBVUgsTUFBTSxPQUFPLG9CQUFvQjtJQVRqQztRQVVtQixVQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyx1QkFBa0IsR0FB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QW1CLENBQUM7OEJBY3hELElBQUk7c0JBRFYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvY2hlY2tib3gnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAb2R4L2FuZ3VsYXIvdXRpbHMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTb3J0U3RhdHVzLCBUYWJsZUJvZHlDZWxsLCBUYWJsZUhlYWRlckNlbGwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgVGFibGVTb3J0VmFyaWFudCB9IGZyb20gJy4uLy4uL21vZGVscy9zb3J0LXZhcmlhbnQnO1xuaW1wb3J0IHsgVEFCTEUgfSBmcm9tICcuLi8uLi90YWJsZS5jb25maWcnO1xuXG4vKipcbiAqIEhlYWRlclRpdGxlQ29tcG9uZW50IHByb3ZpZGVzIHRoZSBmdW5jdGlvbmFsaXR5IGZvciBhIHRhYmxlIGhlYWRlciBjZWxsLCBpbmNsdWRpbmcgc29ydGluZyBhbmQgY2hlY2tib3hcbiAqIG9wZXJhdGlvbnMgaWYgYXBwbGljYWJsZS4gSXQgaGFuZGxlcyBjaGFuZ2VzIGluIHNvcnQgc3RhdGUgYW5kIGVtaXRzIHJlbGV2YW50IGV2ZW50cyB0byB0aGUgdGFibGUgY29tcG9uZW50XG4gKiB0byBtYW5hZ2Ugc29ydGluZyBhbmQgc2VsZWN0aW9uIHN0YXRlIGFjcm9zcyB0aGUgdGFibGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ3RoW29keEhlYWRlclRpdGxlXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXItdGl0bGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2hlY2tib3hDb21wb25lbnQsIFJlYWN0aXZlRm9ybXNNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBIZWFkZXJUaXRsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFibGUgPSBpbmplY3QoVEFCTEUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHJpdmF0ZSBzb3J0U3RhdHVzOiBTb3J0U3RhdHVzID0gdGhpcy5nZXRTb3J0U3RhdHVzO1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhZGVyIGNlbGwgaXRlbSBjb250YWluaW5nIG1ldGFkYXRhIGxpa2UgY29sdW1uIG5hbWUsIHNvcnRhYmlsaXR5LCBhbmQgd2hldGhlciBpdCBzaG91bGQgaW5jbHVkZSBhIGNoZWNrYm94LlxuICAgKlxuICAgKiBAdHlwZSB7VGFibGVIZWFkZXJDZWxsfVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGl0ZW0hOiBUYWJsZUhlYWRlckNlbGw7XG5cbiAgLyoqXG4gICAqIEZvcm1Hcm91cCB0byBtYW5hZ2UgdGhlIGNoZWNrYm94IHN0YXRlIHdpdGhpbiB0aGUgaGVhZGVyLlxuICAgKlxuICAgKiBAdHlwZSB7Rm9ybUdyb3VwfVxuICAgKi9cbiAgcHVibGljIGNoZWNrRm9ybSA9IG5ldyBGb3JtR3JvdXAoeyBjaGVjazogbmV3IEZvcm1Db250cm9sKGZhbHNlKSB9KTtcblxuICAvKipcbiAgICogQ29tcHV0ZXMgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQgc29ydCBzdGF0dXMgb2YgdGhlIGNvbHVtbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBoZWFkZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTb3J0U3RhdHVzfVxuICAgKi9cbiAgcHVibGljIGdldCBnZXRTb3J0U3RhdHVzKCk6IFNvcnRTdGF0dXMge1xuICAgIHJldHVybiB7IGNvbHVtbjogdGhpcy5pdGVtPy5uYW1lLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5VTlNPUlRFRCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGljb24gb3IgaW5kaWNhdG9yIGZvciB0aGUgY3VycmVudCBzb3J0aW5nIHN0YXR1cyAoYXNjZW5kaW5nLCBkZXNjZW5kaW5nLCB1bnNvcnRlZCkuXG4gICAqXG4gICAqIEByZXR1cm5zIHtUYWJsZVNvcnRWYXJpYW50fVxuICAgKi9cbiAgcHVibGljIGdldCBzb3J0SWNvbigpOiBUYWJsZVNvcnRWYXJpYW50IHtcbiAgICByZXR1cm4gdGhpcy5zb3J0U3RhdHVzLnNvcnRWYXJpYW50O1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIHNvcnRpbmcgc3RhdHVzIG9mIHRoZSBjb2x1bW4gYW5kIGluZm9ybXMgdGhlIHRhYmxlIGNvbXBvbmVudCBvZiB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIHNvcnRDb2x1bW4oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW0/LnNvcnRhYmxlKSByZXR1cm47XG4gICAgc3dpdGNoICh0aGlzLnNvcnRTdGF0dXMuc29ydFZhcmlhbnQpIHtcbiAgICAgIGNhc2UgVGFibGVTb3J0VmFyaWFudC5ERVNDOlxuICAgICAgY2FzZSBUYWJsZVNvcnRWYXJpYW50LlVOU09SVEVEOlxuICAgICAgICB0aGlzLnRhYmxlLmNsZWFyU29ydCgpO1xuICAgICAgICB0aGlzLnNvcnRTdGF0dXMgPSB7IC4uLnRoaXMuc29ydFN0YXR1cywgc29ydFZhcmlhbnQ6IFRhYmxlU29ydFZhcmlhbnQuQVNDIH07XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBUYWJsZVNvcnRWYXJpYW50LkFTQzpcbiAgICAgICAgdGhpcy50YWJsZS5jbGVhclNvcnQoKTtcblxuICAgICAgICB0aGlzLnNvcnRTdGF0dXMgPSB7IC4uLnRoaXMuc29ydFN0YXR1cywgc29ydFZhcmlhbnQ6IFRhYmxlU29ydFZhcmlhbnQuREVTQyB9O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnRhYmxlLnNvcnRlZC5lbWl0KHRoaXMuc29ydFN0YXR1cyk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzb3J0IHN0YXR1cyB0byB1bnNvcnRlZC5cbiAgICovXG4gIHB1YmxpYyBjbGVhclNvcnRTdGF0dXMoKTogdm9pZCB7XG4gICAgdGhpcy5zb3J0U3RhdHVzID0geyBjb2x1bW46IHRoaXMuaXRlbT8ubmFtZSwgc29ydFZhcmlhbnQ6IFRhYmxlU29ydFZhcmlhbnQuVU5TT1JURUQgfTtcbiAgICB0aGlzLmNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGl0ZW1zIGluIHRoZSBjb2x1bW4sIHVzZWQgdG8gZGV0ZXJtaW5lIGNoZWNrYm94IHN0YXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmRhdGEuZmlsdGVyKChkOiBUYWJsZUJvZHlDZWxsKSA9PiBkW3RoaXMuaXRlbS5uYW1lXSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCB2aWV3LCB1c3VhbGx5IGFmdGVyIGEgc3RhdGUgY2hhbmdlLlxuICAgKi9cbiAgcHVibGljIGNoZWNrKCk6IHZvaWQge1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgd2hldGhlciB0aGUgY2hlY2tib3ggc2hvdWxkIGJlIG1hcmtlZCBhcyBjaGVja2VkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBnZXQgY2hlY2tlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlLmhlYWRlckRhdGEuZmluZCgoaDogVGFibGVIZWFkZXJDZWxsKSA9PiBoLmNoZWNrKT8ubmFtZTtcbiAgICByZXR1cm4gdGhpcy50YWJsZS5kYXRhLmV2ZXJ5KChpdGVtOiBUYWJsZUJvZHlDZWxsKSA9PiBjb2x1bW4gJiYgaXRlbVtjb2x1bW5dKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrQm94TGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tCb3hMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbS5jaGVjaykgcmV0dXJuO1xuICAgIHRoaXMuY2hlY2tGb3JtXG4gICAgICAuZ2V0KCdjaGVjaycpXG4gICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICB0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICB0YXAoKGNoZWNrKSA9PiB0aGlzLnRhYmxlLmNoZWNrZWQuZW1pdCh7IGNvbHVtbjogdGhpcy5pdGVtLm5hbWUsIGNoZWNrOiAhIWNoZWNrIH0pKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaW5kZXRlcm1pbmF0ZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRhYmxlLmhlYWRlckRhdGEuZmluZCgoaDogVGFibGVIZWFkZXJDZWxsKSA9PiBoLmNoZWNrKT8ubmFtZTtcbiAgICBjb25zdCB7IGxlbmd0aCB9ID0gdGhpcy50YWJsZS5kYXRhO1xuICAgIGNvbnN0IHVuY2hlY2tlZCA9IGxlbmd0aCAtIHRoaXMudGFibGUuZGF0YS5maWx0ZXIoKGl0ZW06IFRhYmxlQm9keUNlbGwpID0+IGNvbHVtbiAmJiBpdGVtW2NvbHVtbl0pLmxlbmd0aDtcbiAgICByZXR1cm4gdW5jaGVja2VkID4gMCAmJiB1bmNoZWNrZWQgPCBsZW5ndGg7XG4gIH1cbn1cbiIsIkBpZiAoaXRlbS5jaGVjaykge1xuICA8ZGl2IGNsYXNzPVwib2R4LXRhYmxlX19jaGVja1wiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJjaGVja0Zvcm1cIj5cbiAgICAgIDxvZHgtY2hlY2tib3ggW2NoZWNrZWRdPVwiY2hlY2tlZFwiIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXYgY2xhc3M9XCJvZHgtdGFibGVfX2hlYWRlci1jZWxsLXRpdGxlXCIgKGNsaWNrKT1cInNvcnRDb2x1bW4oKVwiIFtjbGFzcy5zb3J0YWJsZV09XCJpdGVtLnNvcnRhYmxlXCI+XG4gICAge3sgaXRlbS50aXRsZSB9fVxuICAgIEBpZiAoaXRlbS5zb3J0YWJsZSkge1xuICAgICAgQHN3aXRjaCAoc29ydEljb24pIHtcbiAgICAgICAgQGNhc2UgKCd1bnNvcnRlZCcpIHtcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwibTE0LDVIMnYtMmgxMnYyWm0tNCwySDJ2Mmg4di0yWm0tNCw0SDJ2Mmg0di0yWlwiIHN0eWxlPVwiZmlsbDogdmFyKC0tYmx1ZS03MDApXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2Rlc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMTEgNiA4IDMgNSA2IDcgNiA3IDEzIDkgMTMgOSA2IDExIDZcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdhc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiNSAxMCA4IDEzIDExIDEwIDkgMTAgOSAzIDcgMyA3IDEwIDUgMTBcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJvZHgtZm9ybS1maWVsZFwiIC8+XG59XG4iXX0=
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9jb21wb25lbnRzL3RhYmxlL3NyYy9saWIvY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFVLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdJLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDckUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFFM0M7Ozs7R0FJRztBQVVILE1BQU0sT0FBTyxvQkFBb0I7SUFUakM7UUFVbUIsVUFBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QixRQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMs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WUFBWSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDOzhCQWN4RCxJQUFJO3NCQURWLEtBQUs7Z0JBMEdRLFdBQVc7c0JBRHhCLFdBQVc7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSG9zdEJpbmRpbmcsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDaGVja2JveENvbXBvbmVudCB9IGZyb20gJ0BvZHgvYW5ndWxhci9jb21wb25lbnRzL2NoZWNrYm94JztcbmltcG9ydCB7IHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29sdW1uV2lkdGgsIFNvcnRTdGF0dXMsIFRhYmxlQm9keUNlbGwsIFRhYmxlSGVhZGVyQ2VsbCB9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQgeyBUYWJsZVNvcnRWYXJpYW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NvcnQtdmFyaWFudCc7XG5pbXBvcnQgeyBUQUJMRSB9IGZyb20gJy4uLy4uL3RhYmxlLmNvbmZpZyc7XG5cbi8qKlxuICogSGVhZGVyVGl0bGVDb21wb25lbnQgcHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgZm9yIGEgdGFibGUgaGVhZGVyIGNlbGwsIGluY2x1ZGluZyBzb3J0aW5nIGFuZCBjaGVja2JveFxuICogb3BlcmF0aW9ucyBpZiBhcHBsaWNhYmxlLiBJdCBoYW5kbGVzIGNoYW5nZXMgaW4gc29ydCBzdGF0ZSBhbmQgZW1pdHMgcmVsZXZhbnQgZXZlbnRzIHRvIHRoZSB0YWJsZSBjb21wb25lbnRcbiAqIHRvIG1hbmFnZSBzb3J0aW5nIGFuZCBzZWxlY3Rpb24gc3RhdGUgYWNyb3NzIHRoZSB0YWJsZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAndGhbb2R4SGVhZGVyVGl0bGVdJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci10aXRsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDaGVja2JveENvbXBvbmVudCwgUmVhY3RpdmVGb3Jtc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlclRpdGxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZSA9IGluamVjdChUQUJMRSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuICBwcml2YXRlIHNvcnRTdGF0dXM6IFNvcnRTdGF0dXMgPSB0aGlzLmdldFNvcnRTdGF0dXM7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFkZXIgY2VsbCBpdGVtIGNvbnRhaW5pbmcgbWV0YWRhdGEgbGlrZSBjb2x1bW4gbmFtZSwgc29ydGFiaWxpdHksIGFuZCB3aGV0aGVyIGl0IHNob3VsZCBpbmNsdWRlIGEgY2hlY2tib3guXG4gICAqXG4gICAqIEB0eXBlIHtUYWJsZUhlYWRlckNlbGx9XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXRlbSE6IFRhYmxlSGVhZGVyQ2VsbDtcblxuICAvKipcbiAgICogRm9ybUdyb3VwIHRvIG1hbmFnZSB0aGUgY2hlY2tib3ggc3RhdGUgd2l0aGluIHRoZSBoZWFkZXIuXG4gICAqXG4gICAqIEB0eXBlIHtGb3JtR3JvdXB9XG4gICAqL1xuICBwdWJsaWMgY2hlY2tGb3JtID0gbmV3IEZvcm1Hcm91cCh7IGNoZWNrOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpIH0pO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyBhbmQgcmV0dXJucyB0aGUgY3VycmVudCBzb3J0IHN0YXR1cyBvZiB0aGUgY29sdW1uIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGhlYWRlci5cbiAgICpcbiAgICogQHJldHVybnMge1NvcnRTdGF0dXN9XG4gICAqL1xuICBwdWJsaWMgZ2V0IGdldFNvcnRTdGF0dXMoKTogU29ydFN0YXR1cyB7XG4gICAgcmV0dXJuIHsgY29sdW1uOiB0aGlzLml0ZW0/Lm5hbWUsIHNvcnRWYXJpYW50OiBUYWJsZVNvcnRWYXJpYW50LlVOU09SVEVEIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgaWNvbiBvciBpbmRpY2F0b3IgZm9yIHRoZSBjdXJyZW50IHNvcnRpbmcgc3RhdHVzIChhc2NlbmRpbmcsIGRlc2NlbmRpbmcsIHVuc29ydGVkKS5cbiAgICpcbiAgICogQHJldHVybnMge1RhYmxlU29ydFZhcmlhbnR9XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNvcnRJY29uKCk6IFRhYmxlU29ydFZhcmlhbnQge1xuICAgIHJldHVybiB0aGlzLnNvcnRTdGF0dXMuc29ydFZhcmlhbnQ7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgc29ydGluZyBzdGF0dXMgb2YgdGhlIGNvbHVtbiBhbmQgaW5mb3JtcyB0aGUgdGFibGUgY29tcG9uZW50IG9mIHRoZSBjaGFuZ2UuXG4gICAqL1xuICBwdWJsaWMgc29ydENvbHVtbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXRlbT8uc29ydGFibGUpIHJldHVybjtcbiAgICBzd2l0Y2ggKHRoaXMuc29ydFN0YXR1cy5zb3J0VmFyaWFudCkge1xuICAgICAgY2FzZSBUYWJsZVNvcnRWYXJpYW50LkRFU0M6XG4gICAgICBjYXNlIFRhYmxlU29ydFZhcmlhbnQuVU5TT1JURUQ6XG4gICAgICAgIHRoaXMudGFibGUuY2xlYXJTb3J0KCk7XG4gICAgICAgIHRoaXMuc29ydFN0YXR1cyA9IHsgLi4udGhpcy5zb3J0U3RhdHVzLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5BU0MgfTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFRhYmxlU29ydFZhcmlhbnQuQVNDOlxuICAgICAgICB0aGlzLnRhYmxlLmNsZWFyU29ydCgpO1xuXG4gICAgICAgIHRoaXMuc29ydFN0YXR1cyA9IHsgLi4udGhpcy5zb3J0U3RhdHVzLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5ERVNDIH07XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMudGFibGUuc29ydGVkLmVtaXQodGhpcy5zb3J0U3RhdHVzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHNvcnQgc3RhdHVzIHRvIHVuc29ydGVkLlxuICAgKi9cbiAgcHVibGljIGNsZWFyU29ydFN0YXR1cygpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnRTdGF0dXMgPSB7IGNvbHVtbjogdGhpcy5pdGVtPy5uYW1lLCBzb3J0VmFyaWFudDogVGFibGVTb3J0VmFyaWFudC5VTlNPUlRFRCB9O1xuICAgIHRoaXMuY2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIGNvbHVtbiwgdXNlZCB0byBkZXRlcm1pbmUgY2hlY2tib3ggc3RhdGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGFibGUuZGF0YSgpLmZpbHRlcigoZDogVGFibGVCb2R5Q2VsbCkgPT4gZFt0aGlzLml0ZW0ubmFtZV0pLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb21wb25lbnQgdmlldywgdXN1YWxseSBhZnRlciBhIHN0YXRlIGNoYW5nZS5cbiAgICovXG4gIHB1YmxpYyBjaGVjaygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNoZWNrYm94IHNob3VsZCBiZSBtYXJrZWQgYXMgY2hlY2tlZC5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoZWNrZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5pdGVtLmNoZWNrICYmIHRoaXMuaXRlbS5uYW1lO1xuICAgIHJldHVybiB0aGlzLnRhYmxlLmRhdGEoKS5ldmVyeSgoaXRlbTogVGFibGVCb2R5Q2VsbCkgPT4gY29sdW1uICYmIGl0ZW1bY29sdW1uXSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja0JveExpc3RlbmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrQm94TGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLml0ZW0uY2hlY2spIHJldHVybjtcbiAgICB0aGlzLmNoZWNrRm9ybVxuICAgICAgLmdldCgnY2hlY2snKVxuICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgdGhpcy50YWtlVW50aWxEZXN0cm95ZWQoKSxcbiAgICAgICAgdGFwKChjaGVjaykgPT4gdGhpcy50YWJsZS5jaGVja2VkLmVtaXQoeyBjb2x1bW46IHRoaXMuaXRlbS5uYW1lLCBjaGVjazogISFjaGVjayB9KSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5pdGVtLmNoZWNrICYmIHRoaXMuaXRlbS5uYW1lO1xuICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSB0aGlzLnRhYmxlLmRhdGEoKTtcbiAgICBjb25zdCB1bmNoZWNrZWQgPSBsZW5ndGggLSB0aGlzLnRhYmxlLmRhdGEoKS5maWx0ZXIoKGl0ZW06IFRhYmxlQm9keUNlbGwpID0+IGNvbHVtbiAmJiBpdGVtW2NvbHVtbl0pLmxlbmd0aDtcbiAgICByZXR1cm4gdW5jaGVja2VkID4gMCAmJiB1bmNoZWNrZWQgPCBsZW5ndGg7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoJylcbiAgcHJvdGVjdGVkIGdldCBjb2x1bW5XaWR0aCgpOiBDb2x1bW5XaWR0aCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbS53aWR0aCA/PyAnYXV0byc7XG4gIH1cbn1cbiIsIkBpZiAoaXRlbS5jaGVjaykge1xuICA8ZGl2IGNsYXNzPVwib2R4LXRhYmxlX19jaGVja1wiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJjaGVja0Zvcm1cIj5cbiAgICAgIDxvZHgtY2hlY2tib3ggW2NoZWNrZWRdPVwiY2hlY2tlZFwiIFtpbmRldGVybWluYXRlXT1cImluZGV0ZXJtaW5hdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXYgY2xhc3M9XCJvZHgtdGFibGVfX2hlYWRlci1jZWxsLXRpdGxlXCIgKGNsaWNrKT1cInNvcnRDb2x1bW4oKVwiIFtjbGFzcy5zb3J0YWJsZV09XCJpdGVtLnNvcnRhYmxlXCI+XG4gICAge3sgaXRlbS50aXRsZSB9fVxuICAgIEBpZiAoaXRlbS5zb3J0YWJsZSkge1xuICAgICAgQHN3aXRjaCAoc29ydEljb24pIHtcbiAgICAgICAgQGNhc2UgKCd1bnNvcnRlZCcpIHtcbiAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwibTE0LDVIMnYtMmgxMnYyWm0tNCwySDJ2Mmg4di0yWm0tNCw0SDJ2Mmg0di0yWlwiIHN0eWxlPVwiZmlsbDogdmFyKC0tYmx1ZS03MDApXCIgLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoJ2Rlc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiMTEgNiA4IDMgNSA2IDcgNiA3IDEzIDkgMTMgOSA2IDExIDZcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKCdhc2MnKSB7XG4gICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNiAxNlwiPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPVwiNSAxMCA4IDEzIDExIDEwIDkgMTAgOSAzIDcgMyA3IDEwIDUgMTBcIiBzdHlsZT1cImZpbGw6IHZhcigtLWJsdWUtNzAwKVwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIDwvZGl2PlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJvZHgtZm9ybS1maWVsZFwiIC8+XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXdpZHRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFibGUvc3JjL2xpYi9tb2RlbHMvY29sdW1uLXdpZHRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbHVtbiB3aWR0aCB0eXBlIGZvciBodG1sIHRhYmxlIHRoIG9yIHRkIGVsZW1lbnRzLlxuICogQGV4YW1wbGUgJzEwMHB4JywgJzUwJScsICdhdXRvJ1xuICovXG5leHBvcnQgdHlwZSBDb2x1bW5XaWR0aCA9IGAke251bWJlcn1weGAgfCBgJHtudW1iZXJ9JWAgfCAnYXV0byc7XG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLWNlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL21vZGVscy9oZWFkZXItY2VsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29sdW1uV2lkdGggfSBmcm9tICcuL2NvbHVtbi13aWR0aCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVIZWFkZXJDZWxsIHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZmlsdGVyPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBjaGVjaz86IGJvb2xlYW47XG4gIHdpZHRoPzogQ29sdW1uV2lkdGg7XG59XG4iXX0=
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './body-cell';
|
|
2
|
+
export * from './column-width';
|
|
2
3
|
export * from './header-cell';
|
|
3
4
|
export * from './sort-status';
|
|
4
5
|
export * from './sort-variant';
|
|
5
6
|
export * from './table-variant';
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9keS1jZWxsJztcbmV4cG9ydCAqIGZyb20gJy4vY29sdW1uLXdpZHRoJztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVyLWNlbGwnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3J0LXN0YXR1cyc7XG5leHBvcnQgKiBmcm9tICcuL3NvcnQtdmFyaWFudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlLXZhcmlhbnQnO1xuIl19
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { CommonModule } from '@angular/common';
|
|
3
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, computed, EventEmitter, input, Input, Output, QueryList, ViewChildren, ViewEncapsulation, } from '@angular/core';
|
|
4
4
|
import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';
|
|
5
5
|
import { FormFieldModule } from '@odx/angular/components/form-field';
|
|
6
|
-
import { IconComponent } from '@odx/angular/components/icon';
|
|
7
6
|
import { CSSComponent, CSSModifier } from '@odx/angular/internal';
|
|
8
7
|
import { injectElement, untilDestroyed } from '@odx/angular/utils';
|
|
9
8
|
import { debounceTime, tap } from 'rxjs';
|
|
10
9
|
import { HeaderTitleComponent } from './components/header-title/header-title.component';
|
|
10
|
+
import { TableCellDirective, TableRowDirective } from './directives';
|
|
11
11
|
import { TABLE } from './table.config';
|
|
12
12
|
import * as i0 from "@angular/core";
|
|
13
13
|
import * as i1 from "@angular/forms";
|
|
@@ -25,21 +25,38 @@ import * as i2 from "@odx/angular/components/form-field";
|
|
|
25
25
|
let TableComponent = class TableComponent {
|
|
26
26
|
constructor() {
|
|
27
27
|
this.takeUntilDestroyed = untilDestroyed();
|
|
28
|
+
this.headerColumns = computed(() => {
|
|
29
|
+
const [firstRow] = this.data() ?? [];
|
|
30
|
+
const headerColumns = this.headerData();
|
|
31
|
+
if (!(headerColumns && firstRow))
|
|
32
|
+
return headerColumns;
|
|
33
|
+
return Object.keys(firstRow).map((key) => headerColumns.find((item) => item.name === key) ?? {
|
|
34
|
+
name: key,
|
|
35
|
+
title: key.charAt(0).toUpperCase() + key.slice(1),
|
|
36
|
+
sortable: false,
|
|
37
|
+
filter: false,
|
|
38
|
+
check: key === 'selected',
|
|
39
|
+
});
|
|
40
|
+
});
|
|
28
41
|
this.element = injectElement();
|
|
29
42
|
/**
|
|
30
43
|
* Data array of type T that the table displays.
|
|
31
44
|
*
|
|
32
|
-
* @type {T[]}
|
|
33
|
-
|
|
45
|
+
* @type {Signal<T[]>}
|
|
46
|
+
*/
|
|
47
|
+
this.data = input.required();
|
|
48
|
+
/**
|
|
49
|
+
* Message to display when no data is available.
|
|
50
|
+
*
|
|
51
|
+
* @type {Signal<string>}
|
|
34
52
|
*/
|
|
35
|
-
this.
|
|
53
|
+
this.noDataMessage = input('No data available');
|
|
36
54
|
/**
|
|
37
55
|
* Configuration for table header data which controls sorting, filtering, and additional metadata.
|
|
38
56
|
*
|
|
39
|
-
* @type {TableHeaderCell[]}
|
|
40
|
-
* @default []
|
|
57
|
+
* @type {Signal<TableHeaderCell[]>}
|
|
41
58
|
*/
|
|
42
|
-
this.headerData = [];
|
|
59
|
+
this.headerData = input([]);
|
|
43
60
|
/**
|
|
44
61
|
* FormGroup to handle the dynamic filtering controls, each tied to a header cell that has filtering enabled.
|
|
45
62
|
*/
|
|
@@ -64,8 +81,7 @@ let TableComponent = class TableComponent {
|
|
|
64
81
|
this.checked = new EventEmitter();
|
|
65
82
|
}
|
|
66
83
|
ngOnInit() {
|
|
67
|
-
this.
|
|
68
|
-
this.headerData.forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));
|
|
84
|
+
this.headerData().forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));
|
|
69
85
|
this.formListener();
|
|
70
86
|
}
|
|
71
87
|
/**
|
|
@@ -84,16 +100,8 @@ let TableComponent = class TableComponent {
|
|
|
84
100
|
}))
|
|
85
101
|
.subscribe();
|
|
86
102
|
}
|
|
87
|
-
setHeaderData() {
|
|
88
|
-
this.headerData = Object.keys(this.data[0]).map((key) => this.headerData.find((item) => item.name === key) || {
|
|
89
|
-
name: key,
|
|
90
|
-
title: `${key[0].toUpperCase()}${key.slice(1)}`,
|
|
91
|
-
sortable: false,
|
|
92
|
-
filter: false,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
103
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
96
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "table[odxTable]", inputs: { variant: "variant", data: "data", headerData: "headerData" }, outputs: { sorted: "sorted", filtered: "filtered", checked: "checked" }, host: { properties: { "attr.role": "\"table\"" } }, providers: [{ provide: TABLE, useExisting: TableComponent }], viewQueries: [{ propertyName: "headers", predicate: HeaderTitleComponent, descendants: true }], ngImport: i0, template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of
|
|
104
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "table[odxTable]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, noDataMessage: { classPropertyName: "noDataMessage", publicName: "noDataMessage", isSignal: true, isRequired: false, transformFunction: null }, headerData: { classPropertyName: "headerData", publicName: "headerData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sorted: "sorted", filtered: "filtered", checked: "checked" }, host: { properties: { "attr.role": "\"table\"" } }, providers: [{ provide: TABLE, useExisting: TableComponent }], viewQueries: [{ propertyName: "headers", predicate: HeaderTitleComponent, descendants: true }], ngImport: i0, template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerColumns(); track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n @if (data() && !!data().length) {\n <ng-content select=\"tr\" />\n } @else {\n <tr odx-table-row class=\"odx-table__no-data-row\">\n <td odx-table-cell [attr.colspan]=\"headerColumns().length\">{{ noDataMessage() }}</td>\n </tr>\n }\n</tbody>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormFieldModule }, { kind: "component", type: i2.FormFieldComponent, selector: "odx-form-field", inputs: ["label", "hasWarning", "variant"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "[odxFormFieldControl]", exportAs: ["odxFormFieldControl"] }, { kind: "component", type: HeaderTitleComponent, selector: "th[odxHeaderTitle]", inputs: ["item"] }, { kind: "directive", type: TableRowDirective, selector: "tr[odx-table-row]" }, { kind: "directive", type: TableCellDirective, selector: "td[odx-table-cell]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
97
105
|
};
|
|
98
106
|
__decorate([
|
|
99
107
|
CSSModifier(),
|
|
@@ -107,13 +115,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
107
115
|
type: Component,
|
|
108
116
|
args: [{ selector: 'table[odxTable]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
109
117
|
'[attr.role]': '"table"',
|
|
110
|
-
}, imports: [CommonModule,
|
|
118
|
+
}, imports: [CommonModule, ReactiveFormsModule, FormFieldModule, HeaderTitleComponent, TableRowDirective, TableCellDirective], providers: [{ provide: TABLE, useExisting: TableComponent }], template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerColumns(); track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n @if (data() && !!data().length) {\n <ng-content select=\"tr\" />\n } @else {\n <tr odx-table-row class=\"odx-table__no-data-row\">\n <td odx-table-cell [attr.colspan]=\"headerColumns().length\">{{ noDataMessage() }}</td>\n </tr>\n }\n</tbody>\n" }]
|
|
111
119
|
}], propDecorators: { variant: [{
|
|
112
120
|
type: Input
|
|
113
|
-
}], data: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], headerData: [{
|
|
116
|
-
type: Input
|
|
117
121
|
}], sorted: [{
|
|
118
122
|
type: Output
|
|
119
123
|
}], filtered: [{
|
|
@@ -124,4 +128,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
124
128
|
type: ViewChildren,
|
|
125
129
|
args: [HeaderTitleComponent]
|
|
126
130
|
}] } });
|
|
127
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BKLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFeEYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7O0FBRXZDOzs7Ozs7Ozs7R0FTRztBQWVJLElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWM7SUFBcEI7UUFDWSx1QkFBa0IsR0FBRyxjQUFjLEVBQUUsQ0FBQztR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QUFXLEVBQUU7OytDQUV1QjtBQVgxQixjQUFjO0lBZDFCLFlBQVksQ0FBQyxPQUFPLENBQUM7R0FjVCxjQUFjLENBMEcxQjs7NEZBMUdZLGNBQWM7a0JBYjFCLFNBQVM7K0JBRUUsaUJBQWlCLGNBQ2YsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLFFBQy9CO3dCQUNKLGFBQWEsRUFBRSxTQUFTO3FCQUN6QixXQUVRLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLENBQUMsYUFDdkYsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRSxDQUFDOzhCQWFyRCxPQUFPO3NCQURiLEtBQUs7Z0JBVUMsSUFBSTtzQkFEVixLQUFLO2dCQVVDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBY1UsTUFBTTtzQkFEckIsTUFBTTtnQkFTUyxRQUFRO3NCQUR2QixNQUFNO2dCQVNTLE9BQU87c0JBRHRCLE1BQU07Z0JBU0EsT0FBTztzQkFEYixZQUFZO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBJY29uQ29tcG9uZW50IH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvaWNvbic7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQsIENTU01vZGlmaWVyIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIZWFkZXJUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTb3J0U3RhdHVzLCBUYWJsZUJvZHlDZWxsLCBUYWJsZUhlYWRlckNlbGwsIFRhYmxlVmFyaWFudCB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFRBQkxFIH0gZnJvbSAnLi90YWJsZS5jb25maWcnO1xuXG4vKipcbiAqIFRhYmxlQ29tcG9uZW50IGlzIGEgZHluYW1pYyB0YWJsZSBzdHJ1Y3R1cmUgYnVpbHQgZm9yIGRpc3BsYXlpbmcgY29tcGxleCBkYXRhIHNldHMgd2l0aCBzb3J0aW5nLCBmaWx0ZXJpbmcsXG4gKiBhbmQgY2hlY2thYmxlIGZ1bmN0aW9uYWxpdHkuIEl0IHByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aHJvdWdoIHZhcmlvdXMgaW5wdXRzIHRoYXQgYWxsb3cgdGhlXG4gKiBjdXN0b21pemF0aW9uIG9mIHRhYmxlIGJlaGF2aW9yIGFuZCBwcmVzZW50YXRpb24uXG4gKlxuICogVGhpcyBjb21wb25lbnQgaXMgaGlnaGx5IG1vZHVsYXIsIGludGVncmF0aW5nIHdpdGggb3RoZXIgY29tcG9uZW50cyBzdWNoIGFzIGBIZWFkZXJUaXRsZUNvbXBvbmVudGAgZm9yIGhlYWRlclxuICogbWFuYWdlbWVudCwgYW5kIHVzaW5nIEFuZ3VsYXIgZm9ybXMgZm9yIGR5bmFtaWMgZGF0YSBmaWx0ZXJpbmcuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiBkYXRhIHRoYXQgdGhlIHRhYmxlIGRpc3BsYXlzLlxuICovXG5AQ1NTQ29tcG9uZW50KCd0YWJsZScpXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICd0YWJsZVtvZHhUYWJsZV0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgaG9zdDoge1xuICAgICdbYXR0ci5yb2xlXSc6ICdcInRhYmxlXCInLFxuICB9LFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBJY29uQ29tcG9uZW50LCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBGb3JtRmllbGRNb2R1bGUsIEhlYWRlclRpdGxlQ29tcG9uZW50XSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBUQUJMRSwgdXNlRXhpc3Rpbmc6IFRhYmxlQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdGFrZVVudGlsRGVzdHJveWVkID0gdW50aWxEZXN0cm95ZWQoKTtcbiAgcHVibGljIHJlYWRvbmx5IGVsZW1lbnQgPSBpbmplY3RFbGVtZW50KCk7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdGFibGUgdmFyaWFudCBmb3IgQ1NTIHN0eWxpbmcuXG4gICAqXG4gICAqIEB0eXBlIHtUYWJsZVZhcmlhbnQgfCBudWxsfVxuICAgKi9cbiAgQENTU01vZGlmaWVyKClcbiAgQElucHV0KClcbiAgcHVibGljIHZhcmlhbnQ/OiBUYWJsZVZhcmlhbnQgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBEYXRhIGFycmF5IG9mIHR5cGUgVCB0aGF0IHRoZSB0YWJsZSBkaXNwbGF5cy5cbiAgICpcbiAgICogQHR5cGUge1RbXX1cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkYXRhOiBUW10gPSBbXTtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3IgdGFibGUgaGVhZGVyIGRhdGEgd2hpY2ggY29udHJvbHMgc29ydGluZywgZmlsdGVyaW5nLCBhbmQgYWRkaXRpb25hbCBtZXRhZGF0YS5cbiAgICpcbiAgICogQHR5cGUge1RhYmxlSGVhZGVyQ2VsbFtdfVxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlYWRlckRhdGE6IFRhYmxlSGVhZGVyQ2VsbFtdID0gW107XG5cbiAgLyoqXG4gICAqIEZvcm1Hcm91cCB0byBoYW5kbGUgdGhlIGR5bmFtaWMgZmlsdGVyaW5nIGNvbnRyb2xzLCBlYWNoIHRpZWQgdG8gYSBoZWFkZXIgY2VsbCB0aGF0IGhhcyBmaWx0ZXJpbmcgZW5hYmxlZC5cbiAgICovXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciBmb3Igd2hlbiBhIGNvbHVtbidzIHNvcnRpbmcgc3RhdHVzIGNoYW5nZXMuXG4gICAqXG4gICAqIEBlbWl0cyB7U29ydFN0YXR1c31cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgc29ydGVkOiBFdmVudEVtaXR0ZXI8U29ydFN0YXR1cz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZXIgZm9yIHdoZW4gdGhlIHRhYmxlJ3MgZmlsdGVyaW5nIGNvbmRpdGlvbnMgY2hhbmdlLlxuICAgKlxuICAgKiBAZW1pdHMge3sgW2tleTogc3RyaW5nXTogc3RyaW5nIH19XG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcmVkOiBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZXIgZm9yIHdoZW4gYSBjaGVja2JveCBjb2x1bW4ncyBjaGVja2VkIHN0YXRlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBlbWl0cyB7eyBjb2x1bW46IHN0cmluZzsgY2hlY2s6IGJvb2xlYW4gfX1cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgY2hlY2tlZDogRXZlbnRFbWl0dGVyPHsgY29sdW1uOiBzdHJpbmc7IGNoZWNrOiBib29sZWFuIH0+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBBIFF1ZXJ5TGlzdCBvZiBIZWFkZXJUaXRsZUNvbXBvbmVudCBpbnN0YW5jZXMsIGVhY2ggY29ycmVzcG9uZGluZyB0byBhIGhlYWRlciBjZWxsIGluIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQHR5cGUge1F1ZXJ5TGlzdDxIZWFkZXJUaXRsZUNvbXBvbmVudD59XG4gICAqL1xuICBAVmlld0NoaWxkcmVuKEhlYWRlclRpdGxlQ29tcG9uZW50KVxuICBwdWJsaWMgaGVhZGVycyE6IFF1ZXJ5TGlzdDxIZWFkZXJUaXRsZUNvbXBvbmVudD47XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0SGVhZGVyRGF0YSgpO1xuICAgIHRoaXMuaGVhZGVyRGF0YS5mb3JFYWNoKChpdGVtKSA9PiBpdGVtLmZpbHRlciAmJiB0aGlzLmZvcm0uYWRkQ29udHJvbChpdGVtLm5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpKTtcbiAgICB0aGlzLmZvcm1MaXN0ZW5lcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyB0aGUgc29ydGluZyBzdGF0dXMgb2YgYWxsIGhlYWRlcnMuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJTb3J0KCk6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IGhlYWRlci5jbGVhclNvcnRTdGF0dXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1MaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDYwMCksXG4gICAgICAgIHRoaXMudGFrZVVudGlsRGVzdHJveWVkKCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5maWx0ZXJlZC5lbWl0KHRoaXMuZm9ybS52YWx1ZSk7XG4gICAgICAgICAgdGhpcy5oZWFkZXJzPy5maWx0ZXIoKGhlYWRlcikgPT4gISFoZWFkZXIuaXRlbS5jaGVjaykuZm9yRWFjaCgoaGVhZGVyKSA9PiBoZWFkZXIuY2hlY2soKSk7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIZWFkZXJEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuaGVhZGVyRGF0YSA9IE9iamVjdC5rZXlzKHRoaXMuZGF0YVswXSBhcyBUYWJsZUJvZHlDZWxsKS5tYXAoXG4gICAgICAoa2V5KSA9PlxuICAgICAgICB0aGlzLmhlYWRlckRhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5uYW1lID09PSBrZXkpIHx8IHtcbiAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgdGl0bGU6IGAke2tleVswXS50b1VwcGVyQ2FzZSgpfSR7a2V5LnNsaWNlKDEpfWAsXG4gICAgICAgICAgc29ydGFibGU6IGZhbHNlLFxuICAgICAgICAgIGZpbHRlcjogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgKTtcbiAgfVxufVxuIiwiPHRoZWFkIGNsYXNzPVwib2R4LXRhYmxlX19oZWFkXCIgcm9sZT1cInJvd2dyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDx0ciBjbGFzcz1cIm9keC10YWJsZV9faGVhZGVyLXJvd1wiIHJvbGU9XCJyb3dcIj5cbiAgICBAZm9yIChpdGVtIG9mIGhlYWRlckRhdGE7IHRyYWNrICRpbmRleCkge1xuICAgICAgPHRoIGNsYXNzPVwib2R4LXRhYmxlX19oZWFkZXItY2VsbFwiIHJvbGU9XCJjb2x1bW5oZWFkZXJcIiBvZHhIZWFkZXJUaXRsZSBbaXRlbV09XCJpdGVtXCI+XG4gICAgICAgIEBpZiAoaXRlbS5maWx0ZXIpIHtcbiAgICAgICAgICA8b2R4LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8aW5wdXQgcGxhY2Vob2xkZXI9XCJGaWx0ZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0ubmFtZVwiIHR5cGU9XCJ0ZXh0XCIgb2R4Rm9ybUZpZWxkQ29udHJvbCAvPlxuICAgICAgICAgIDwvb2R4LWZvcm0tZmllbGQ+XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG4gICAgfVxuICA8L3RyPlxuPC90aGVhZD5cbjx0Ym9keSBjbGFzcz1cIm9keC10YWJsZV9fYm9keVwiIHJvbGU9XCJyb3dncm91cFwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJ0clwiIC8+XG48L3Rib2R5PlxuIl19
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL2NvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvY29tcG9uZW50cy90YWJsZS9zcmMvbGliL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDeEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRXJFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUV2Qzs7Ozs7Ozs7O0dBU0c7QUFlSSxJQUFNLGNBQWMsR0FBcEIsTUFBTSxjQUFjO0lBQXBC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QyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDOytHQS9HVSxjQUFjO21HQUFkLGNBQWMsaXRCQUZkLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsQ0FBQyxzREFzRjlDLG9CQUFvQixnRENwSXBDLDAwQkFzQkEsMkNEdUJZLFlBQVksOEJBQUUsbUJBQW1CLG0yQkFBRSxlQUFlLDRSQUFFLG9CQUFvQixpRkFBRSxpQkFBaUIsOERBQUUsa0JBQWtCOztBQThCbEg7SUFGTixXQUFXLEVBQUU7OytDQUV1QjtBQTNCMUIsY0FBYztJQWQxQixZQUFZLENBQUMsT0FBTyxDQUFDO0dBY1QsY0FBYyxDQWdIMUI7OzRGQWhIWSxjQUFjO2tCQWIxQixTQUFTOytCQUVFLGlCQUFpQixjQUNmLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSSxRQUMvQjt3QkFDSixhQUFhLEVBQUUsU0FBUztxQkFDekIsV0FFUSxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLENBQUMsYUFDL0csQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxnQkFBZ0IsRUFBRSxDQUFDOzhCQTZCckQsT0FBTztzQkFEYixLQUFLO2dCQW1DVSxNQUFNO3NCQURyQixNQUFNO2dCQVNTLFFBQVE7c0JBRHZCLE1BQU07Z0JBU1MsT0FBTztzQkFEdEIsTUFBTTtnQkFTQSxPQUFPO3NCQURiLFlBQVk7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBFdmVudEVtaXR0ZXIsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQG9keC9hbmd1bGFyL2NvbXBvbmVudHMvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBDU1NDb21wb25lbnQsIENTU01vZGlmaWVyIH0gZnJvbSAnQG9keC9hbmd1bGFyL2ludGVybmFsJztcbmltcG9ydCB7IGluamVjdEVsZW1lbnQsIHVudGlsRGVzdHJveWVkIH0gZnJvbSAnQG9keC9hbmd1bGFyL3V0aWxzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBIZWFkZXJUaXRsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9oZWFkZXItdGl0bGUvaGVhZGVyLXRpdGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUNlbGxEaXJlY3RpdmUsIFRhYmxlUm93RGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFNvcnRTdGF0dXMsIFRhYmxlSGVhZGVyQ2VsbCwgVGFibGVWYXJpYW50IH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgVEFCTEUgfSBmcm9tICcuL3RhYmxlLmNvbmZpZyc7XG5cbi8qKlxuICogVGFibGVDb21wb25lbnQgaXMgYSBkeW5hbWljIHRhYmxlIHN0cnVjdHVyZSBidWlsdCBmb3IgZGlzcGxheWluZyBjb21wbGV4IGRhdGEgc2V0cyB3aXRoIHNvcnRpbmcsIGZpbHRlcmluZyxcbiAqIGFuZCBjaGVja2FibGUgZnVuY3Rpb25hbGl0eS4gSXQgcHJvdmlkZXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHRocm91Z2ggdmFyaW91cyBpbnB1dHMgdGhhdCBhbGxvdyB0aGVcbiAqIGN1c3RvbWl6YXRpb24gb2YgdGFibGUgYmVoYXZpb3IgYW5kIHByZXNlbnRhdGlvbi5cbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBpcyBoaWdobHkgbW9kdWxhciwgaW50ZWdyYXRpbmcgd2l0aCBvdGhlciBjb21wb25lbnRzIHN1Y2ggYXMgYEhlYWRlclRpdGxlQ29tcG9uZW50YCBmb3IgaGVhZGVyXG4gKiBtYW5hZ2VtZW50LCBhbmQgdXNpbmcgQW5ndWxhciBmb3JtcyBmb3IgZHluYW1pYyBkYXRhIGZpbHRlcmluZy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIGRhdGEgdGhhdCB0aGUgdGFibGUgZGlzcGxheXMuXG4gKi9cbkBDU1NDb21wb25lbnQoJ3RhYmxlJylcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ3RhYmxlW29keFRhYmxlXScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBob3N0OiB7XG4gICAgJ1thdHRyLnJvbGVdJzogJ1widGFibGVcIicsXG4gIH0sXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1GaWVsZE1vZHVsZSwgSGVhZGVyVGl0bGVDb21wb25lbnQsIFRhYmxlUm93RGlyZWN0aXZlLCBUYWJsZUNlbGxEaXJlY3RpdmVdLFxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFRBQkxFLCB1c2VFeGlzdGluZzogVGFibGVDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWtlVW50aWxEZXN0cm95ZWQgPSB1bnRpbERlc3Ryb3llZCgpO1xuICBwcm90ZWN0ZWQgaGVhZGVyQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBbZmlyc3RSb3ddID0gdGhpcy5kYXRhKCkgPz8gW107XG4gICAgY29uc3QgaGVhZGVyQ29sdW1ucyA9IHRoaXMuaGVhZGVyRGF0YSgpO1xuXG4gICAgaWYgKCEoaGVhZGVyQ29sdW1ucyAmJiBmaXJzdFJvdykpIHJldHVybiBoZWFkZXJDb2x1bW5zO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhmaXJzdFJvdykubWFwKFxuICAgICAgKGtleSkgPT5cbiAgICAgICAgaGVhZGVyQ29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLm5hbWUgPT09IGtleSkgPz8ge1xuICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICB0aXRsZToga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpLFxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBmaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgIGNoZWNrOiBrZXkgPT09ICdzZWxlY3RlZCcsXG4gICAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG4gIHB1YmxpYyByZWFkb25seSBlbGVtZW50ID0gaW5qZWN0RWxlbWVudCgpO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHRhYmxlIHZhcmlhbnQgZm9yIENTUyBzdHlsaW5nLlxuICAgKlxuICAgKiBAdHlwZSB7VGFibGVWYXJpYW50IHwgbnVsbH1cbiAgICovXG4gIEBDU1NNb2RpZmllcigpXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YXJpYW50PzogVGFibGVWYXJpYW50IHwgbnVsbDtcblxuICAvKipcbiAgICogRGF0YSBhcnJheSBvZiB0eXBlIFQgdGhhdCB0aGUgdGFibGUgZGlzcGxheXMuXG4gICAqXG4gICAqIEB0eXBlIHtTaWduYWw8VFtdPn1cbiAgICovXG4gIHB1YmxpYyBkYXRhID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuXG4gIC8qKlxuICAgKiBNZXNzYWdlIHRvIGRpc3BsYXkgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHR5cGUge1NpZ25hbDxzdHJpbmc+fVxuICAgKi9cbiAgcHVibGljIG5vRGF0YU1lc3NhZ2UgPSBpbnB1dDxzdHJpbmc+KCdObyBkYXRhIGF2YWlsYWJsZScpO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIGZvciB0YWJsZSBoZWFkZXIgZGF0YSB3aGljaCBjb250cm9scyBzb3J0aW5nLCBmaWx0ZXJpbmcsIGFuZCBhZGRpdGlvbmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAdHlwZSB7U2lnbmFsPFRhYmxlSGVhZGVyQ2VsbFtdPn1cbiAgICovXG4gIHB1YmxpYyBoZWFkZXJEYXRhID0gaW5wdXQ8VGFibGVIZWFkZXJDZWxsW10+KFtdKTtcblxuICAvKipcbiAgICogRm9ybUdyb3VwIHRvIGhhbmRsZSB0aGUgZHluYW1pYyBmaWx0ZXJpbmcgY29udHJvbHMsIGVhY2ggdGllZCB0byBhIGhlYWRlciBjZWxsIHRoYXQgaGFzIGZpbHRlcmluZyBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVyIGZvciB3aGVuIGEgY29sdW1uJ3Mgc29ydGluZyBzdGF0dXMgY2hhbmdlcy5cbiAgICpcbiAgICogQGVtaXRzIHtTb3J0U3RhdHVzfVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBzb3J0ZWQ6IEV2ZW50RW1pdHRlcjxTb3J0U3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciBmb3Igd2hlbiB0aGUgdGFibGUncyBmaWx0ZXJpbmcgY29uZGl0aW9ucyBjaGFuZ2UuXG4gICAqXG4gICAqIEBlbWl0cyB7eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfX1cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyZWQ6IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciBmb3Igd2hlbiBhIGNoZWNrYm94IGNvbHVtbidzIGNoZWNrZWQgc3RhdGUgY2hhbmdlcy5cbiAgICpcbiAgICogQGVtaXRzIHt7IGNvbHVtbjogc3RyaW5nOyBjaGVjazogYm9vbGVhbiB9fVxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZWFkb25seSBjaGVja2VkOiBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IHN0cmluZzsgY2hlY2s6IGJvb2xlYW4gfT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEEgUXVlcnlMaXN0IG9mIEhlYWRlclRpdGxlQ29tcG9uZW50IGluc3RhbmNlcywgZWFjaCBjb3JyZXNwb25kaW5nIHRvIGEgaGVhZGVyIGNlbGwgaW4gdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAdHlwZSB7UXVlcnlMaXN0PEhlYWRlclRpdGxlQ29tcG9uZW50Pn1cbiAgICovXG4gIEBWaWV3Q2hpbGRyZW4oSGVhZGVyVGl0bGVDb21wb25lbnQpXG4gIHB1YmxpYyBoZWFkZXJzITogUXVlcnlMaXN0PEhlYWRlclRpdGxlQ29tcG9uZW50PjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oZWFkZXJEYXRhKCkuZm9yRWFjaCgoaXRlbSkgPT4gaXRlbS5maWx0ZXIgJiYgdGhpcy5mb3JtLmFkZENvbnRyb2woaXRlbS5uYW1lLCBuZXcgRm9ybUNvbnRyb2woJycpKSk7XG4gICAgdGhpcy5mb3JtTGlzdGVuZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgdGhlIHNvcnRpbmcgc3RhdHVzIG9mIGFsbCBoZWFkZXJzLlxuICAgKi9cbiAgcHVibGljIGNsZWFyU29ydCgpOiB2b2lkIHtcbiAgICB0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiBoZWFkZXIuY2xlYXJTb3J0U3RhdHVzKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9scykubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSg2MDApLFxuICAgICAgICB0aGlzLnRha2VVbnRpbERlc3Ryb3llZCgpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsdGVyZWQuZW1pdCh0aGlzLmZvcm0udmFsdWUpO1xuICAgICAgICAgIHRoaXMuaGVhZGVycz8uZmlsdGVyKChoZWFkZXIpID0+ICEhaGVhZGVyLml0ZW0uY2hlY2spLmZvckVhY2goKGhlYWRlcikgPT4gaGVhZGVyLmNoZWNrKCkpO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPHRoZWFkIGNsYXNzPVwib2R4LXRhYmxlX19oZWFkXCIgcm9sZT1cInJvd2dyb3VwXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gIDx0ciBjbGFzcz1cIm9keC10YWJsZV9faGVhZGVyLXJvd1wiIHJvbGU9XCJyb3dcIj5cbiAgICBAZm9yIChpdGVtIG9mIGhlYWRlckNvbHVtbnMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICA8dGggY2xhc3M9XCJvZHgtdGFibGVfX2hlYWRlci1jZWxsXCIgcm9sZT1cImNvbHVtbmhlYWRlclwiIG9keEhlYWRlclRpdGxlIFtpdGVtXT1cIml0ZW1cIj5cbiAgICAgICAgQGlmIChpdGVtLmZpbHRlcikge1xuICAgICAgICAgIDxvZHgtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxpbnB1dCBwbGFjZWhvbGRlcj1cIkZpbHRlclwiIFtmb3JtQ29udHJvbE5hbWVdPVwiaXRlbS5uYW1lXCIgdHlwZT1cInRleHRcIiBvZHhGb3JtRmllbGRDb250cm9sIC8+XG4gICAgICAgICAgPC9vZHgtZm9ybS1maWVsZD5cbiAgICAgICAgfVxuICAgICAgPC90aD5cbiAgICB9XG4gIDwvdHI+XG48L3RoZWFkPlxuPHRib2R5IGNsYXNzPVwib2R4LXRhYmxlX19ib2R5XCIgcm9sZT1cInJvd2dyb3VwXCI+XG4gIEBpZiAoZGF0YSgpICYmICEhZGF0YSgpLmxlbmd0aCkge1xuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cInRyXCIgLz5cbiAgfSBAZWxzZSB7XG4gICAgPHRyIG9keC10YWJsZS1yb3cgY2xhc3M9XCJvZHgtdGFibGVfX25vLWRhdGEtcm93XCI+XG4gICAgICA8dGQgb2R4LXRhYmxlLWNlbGwgW2F0dHIuY29sc3Bhbl09XCJoZWFkZXJDb2x1bW5zKCkubGVuZ3RoXCI+e3sgbm9EYXRhTWVzc2FnZSgpIH19PC90ZD5cbiAgICA8L3RyPlxuICB9XG48L3Rib2R5PlxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, EventEmitter, booleanAttribute, Component, Input, Output, ChangeDetectorRef, ViewEncapsulation, ChangeDetectionStrategy, Directive, ViewChildren, NgModule } from '@angular/core';
|
|
2
|
+
import { InjectionToken, inject, EventEmitter, booleanAttribute, Component, Input, Output, ChangeDetectorRef, ViewEncapsulation, ChangeDetectionStrategy, HostBinding, Directive, computed, input, ViewChildren, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
4
|
import { FormsModule, FormGroup, FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
5
5
|
import { CheckboxComponent } from '@odx/angular/components/checkbox';
|
|
@@ -10,7 +10,6 @@ import { __decorate, __metadata } from 'tslib';
|
|
|
10
10
|
import { CSSComponent, CSSModifier } from '@odx/angular/internal';
|
|
11
11
|
import * as i2 from '@odx/angular/components/form-field';
|
|
12
12
|
import { FormFieldModule } from '@odx/angular/components/form-field';
|
|
13
|
-
import { IconComponent } from '@odx/angular/components/icon';
|
|
14
13
|
import { CoreModule } from '@odx/angular';
|
|
15
14
|
|
|
16
15
|
const TABLE = new InjectionToken('odx-table');
|
|
@@ -132,7 +131,7 @@ class HeaderTitleComponent {
|
|
|
132
131
|
* @returns {number}
|
|
133
132
|
*/
|
|
134
133
|
get selected() {
|
|
135
|
-
return this.table.data.filter((d) => d[this.item.name]).length;
|
|
134
|
+
return this.table.data().filter((d) => d[this.item.name]).length;
|
|
136
135
|
}
|
|
137
136
|
/**
|
|
138
137
|
* Updates the component view, usually after a state change.
|
|
@@ -146,8 +145,8 @@ class HeaderTitleComponent {
|
|
|
146
145
|
* @returns {boolean}
|
|
147
146
|
*/
|
|
148
147
|
get checked() {
|
|
149
|
-
const column = this.
|
|
150
|
-
return this.table.data.every((item) => column && item[column]);
|
|
148
|
+
const column = this.item.check && this.item.name;
|
|
149
|
+
return this.table.data().every((item) => column && item[column]);
|
|
151
150
|
}
|
|
152
151
|
ngOnInit() {
|
|
153
152
|
this.checkBoxListener();
|
|
@@ -161,19 +160,25 @@ class HeaderTitleComponent {
|
|
|
161
160
|
.subscribe();
|
|
162
161
|
}
|
|
163
162
|
get indeterminate() {
|
|
164
|
-
const column = this.
|
|
165
|
-
const { length } = this.table.data;
|
|
166
|
-
const unchecked = length - this.table.data.filter((item) => column && item[column]).length;
|
|
163
|
+
const column = this.item.check && this.item.name;
|
|
164
|
+
const { length } = this.table.data();
|
|
165
|
+
const unchecked = length - this.table.data().filter((item) => column && item[column]).length;
|
|
167
166
|
return unchecked > 0 && unchecked < length;
|
|
168
167
|
}
|
|
168
|
+
get columnWidth() {
|
|
169
|
+
return this.item.width ?? 'auto';
|
|
170
|
+
}
|
|
169
171
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderTitleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
170
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HeaderTitleComponent, isStandalone: true, selector: "th[odxHeaderTitle]", inputs: { item: "item" }, ngImport: i0, template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CheckboxComponent, selector: "odx-checkbox", inputs: ["indeterminate"], outputs: ["indeterminateChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
172
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: HeaderTitleComponent, isStandalone: true, selector: "th[odxHeaderTitle]", inputs: { item: "item" }, host: { properties: { "style.width": "this.columnWidth" } }, ngImport: i0, template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CheckboxComponent, selector: "odx-checkbox", inputs: ["indeterminate"], outputs: ["indeterminateChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
171
173
|
}
|
|
172
174
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderTitleComponent, decorators: [{
|
|
173
175
|
type: Component,
|
|
174
176
|
args: [{ selector: 'th[odxHeaderTitle]', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, CheckboxComponent, ReactiveFormsModule], template: "@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n" }]
|
|
175
177
|
}], propDecorators: { item: [{
|
|
176
178
|
type: Input
|
|
179
|
+
}], columnWidth: [{
|
|
180
|
+
type: HostBinding,
|
|
181
|
+
args: ['style.width']
|
|
177
182
|
}] } });
|
|
178
183
|
|
|
179
184
|
/**
|
|
@@ -245,21 +250,38 @@ const TableVariant = {
|
|
|
245
250
|
let TableComponent = class TableComponent {
|
|
246
251
|
constructor() {
|
|
247
252
|
this.takeUntilDestroyed = untilDestroyed();
|
|
253
|
+
this.headerColumns = computed(() => {
|
|
254
|
+
const [firstRow] = this.data() ?? [];
|
|
255
|
+
const headerColumns = this.headerData();
|
|
256
|
+
if (!(headerColumns && firstRow))
|
|
257
|
+
return headerColumns;
|
|
258
|
+
return Object.keys(firstRow).map((key) => headerColumns.find((item) => item.name === key) ?? {
|
|
259
|
+
name: key,
|
|
260
|
+
title: key.charAt(0).toUpperCase() + key.slice(1),
|
|
261
|
+
sortable: false,
|
|
262
|
+
filter: false,
|
|
263
|
+
check: key === 'selected',
|
|
264
|
+
});
|
|
265
|
+
});
|
|
248
266
|
this.element = injectElement();
|
|
249
267
|
/**
|
|
250
268
|
* Data array of type T that the table displays.
|
|
251
269
|
*
|
|
252
|
-
* @type {T[]}
|
|
253
|
-
|
|
270
|
+
* @type {Signal<T[]>}
|
|
271
|
+
*/
|
|
272
|
+
this.data = input.required();
|
|
273
|
+
/**
|
|
274
|
+
* Message to display when no data is available.
|
|
275
|
+
*
|
|
276
|
+
* @type {Signal<string>}
|
|
254
277
|
*/
|
|
255
|
-
this.
|
|
278
|
+
this.noDataMessage = input('No data available');
|
|
256
279
|
/**
|
|
257
280
|
* Configuration for table header data which controls sorting, filtering, and additional metadata.
|
|
258
281
|
*
|
|
259
|
-
* @type {TableHeaderCell[]}
|
|
260
|
-
* @default []
|
|
282
|
+
* @type {Signal<TableHeaderCell[]>}
|
|
261
283
|
*/
|
|
262
|
-
this.headerData = [];
|
|
284
|
+
this.headerData = input([]);
|
|
263
285
|
/**
|
|
264
286
|
* FormGroup to handle the dynamic filtering controls, each tied to a header cell that has filtering enabled.
|
|
265
287
|
*/
|
|
@@ -284,8 +306,7 @@ let TableComponent = class TableComponent {
|
|
|
284
306
|
this.checked = new EventEmitter();
|
|
285
307
|
}
|
|
286
308
|
ngOnInit() {
|
|
287
|
-
this.
|
|
288
|
-
this.headerData.forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));
|
|
309
|
+
this.headerData().forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));
|
|
289
310
|
this.formListener();
|
|
290
311
|
}
|
|
291
312
|
/**
|
|
@@ -304,16 +325,8 @@ let TableComponent = class TableComponent {
|
|
|
304
325
|
}))
|
|
305
326
|
.subscribe();
|
|
306
327
|
}
|
|
307
|
-
setHeaderData() {
|
|
308
|
-
this.headerData = Object.keys(this.data[0]).map((key) => this.headerData.find((item) => item.name === key) || {
|
|
309
|
-
name: key,
|
|
310
|
-
title: `${key[0].toUpperCase()}${key.slice(1)}`,
|
|
311
|
-
sortable: false,
|
|
312
|
-
filter: false,
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
328
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
316
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "table[odxTable]", inputs: { variant: "variant", data: "data", headerData: "headerData" }, outputs: { sorted: "sorted", filtered: "filtered", checked: "checked" }, host: { properties: { "attr.role": "\"table\"" } }, providers: [{ provide: TABLE, useExisting: TableComponent }], viewQueries: [{ propertyName: "headers", predicate: HeaderTitleComponent, descendants: true }], ngImport: i0, template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of
|
|
329
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TableComponent, isStandalone: true, selector: "table[odxTable]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: false, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, noDataMessage: { classPropertyName: "noDataMessage", publicName: "noDataMessage", isSignal: true, isRequired: false, transformFunction: null }, headerData: { classPropertyName: "headerData", publicName: "headerData", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { sorted: "sorted", filtered: "filtered", checked: "checked" }, host: { properties: { "attr.role": "\"table\"" } }, providers: [{ provide: TABLE, useExisting: TableComponent }], viewQueries: [{ propertyName: "headers", predicate: HeaderTitleComponent, descendants: true }], ngImport: i0, template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerColumns(); track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n @if (data() && !!data().length) {\n <ng-content select=\"tr\" />\n } @else {\n <tr odx-table-row class=\"odx-table__no-data-row\">\n <td odx-table-cell [attr.colspan]=\"headerColumns().length\">{{ noDataMessage() }}</td>\n </tr>\n }\n</tbody>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormFieldModule }, { kind: "component", type: i2.FormFieldComponent, selector: "odx-form-field", inputs: ["label", "hasWarning", "variant"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "[odxFormFieldControl]", exportAs: ["odxFormFieldControl"] }, { kind: "component", type: HeaderTitleComponent, selector: "th[odxHeaderTitle]", inputs: ["item"] }, { kind: "directive", type: TableRowDirective, selector: "tr[odx-table-row]" }, { kind: "directive", type: TableCellDirective, selector: "td[odx-table-cell]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
317
330
|
};
|
|
318
331
|
__decorate([
|
|
319
332
|
CSSModifier(),
|
|
@@ -326,13 +339,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
326
339
|
type: Component,
|
|
327
340
|
args: [{ selector: 'table[odxTable]', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
328
341
|
'[attr.role]': '"table"',
|
|
329
|
-
}, imports: [CommonModule,
|
|
342
|
+
}, imports: [CommonModule, ReactiveFormsModule, FormFieldModule, HeaderTitleComponent, TableRowDirective, TableCellDirective], providers: [{ provide: TABLE, useExisting: TableComponent }], template: "<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerColumns(); track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n @if (data() && !!data().length) {\n <ng-content select=\"tr\" />\n } @else {\n <tr odx-table-row class=\"odx-table__no-data-row\">\n <td odx-table-cell [attr.colspan]=\"headerColumns().length\">{{ noDataMessage() }}</td>\n </tr>\n }\n</tbody>\n" }]
|
|
330
343
|
}], propDecorators: { variant: [{
|
|
331
344
|
type: Input
|
|
332
|
-
}], data: [{
|
|
333
|
-
type: Input
|
|
334
|
-
}], headerData: [{
|
|
335
|
-
type: Input
|
|
336
345
|
}], sorted: [{
|
|
337
346
|
type: Output
|
|
338
347
|
}], filtered: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"odx-angular-components-table.mjs","sources":["../../../../libs/angular/components/table/src/lib/table.config.ts","../../../../libs/angular/components/table/src/lib/components/check-cell/check-cell.component.ts","../../../../libs/angular/components/table/src/lib/components/check-cell/check-cell.component.html","../../../../libs/angular/components/table/src/lib/models/sort-variant.ts","../../../../libs/angular/components/table/src/lib/components/header-title/header-title.component.ts","../../../../libs/angular/components/table/src/lib/components/header-title/header-title.component.html","../../../../libs/angular/components/table/src/lib/directives/table-cell.directive.ts","../../../../libs/angular/components/table/src/lib/directives/table-row.directive.ts","../../../../libs/angular/components/table/src/lib/models/table-variant.ts","../../../../libs/angular/components/table/src/lib/table.component.ts","../../../../libs/angular/components/table/src/lib/table.component.html","../../../../libs/angular/components/table/src/lib/table.module.ts","../../../../libs/angular/components/table/src/odx-angular-components-table.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TableBodyCell } from './models';\nimport { TableComponent } from './table.component';\n\nexport const TABLE = new InjectionToken<TableComponent<TableBodyCell>>('odx-table');\n","import { booleanAttribute, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { injectElement } from '@odx/angular/utils';\nimport { TABLE } from '../../table.config';\n\n/**\n * CheckCellComponent provides a checkbox input within a table cell, allowing rows to be selected.\n * It is designed to be used in conjunction with a table component that manages state and header interactions,\n * particularly for functionalities like bulk actions.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'td[odx-table-cell][checked]',\n standalone: true,\n templateUrl: './check-cell.component.html',\n imports: [CheckboxComponent, FormsModule],\n})\nexport class CheckCellComponent {\n private readonly table = inject(TABLE);\n public readonly element = injectElement();\n\n /**\n * Indicates whether the checkbox within the table cell is checked.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public checked = false;\n\n /**\n * Event emitter that triggers when the checked state changes. It emits the new state of the checkbox.\n *\n * @emits {boolean}\n */\n @Output() public checkedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Updates the checked state of the checkbox and notifies the parent table component, typically to update\n * the state of a header checkbox or other related components.\n * @param {boolean} e - The new checked state.\n */\n public update(e: boolean): void {\n this.checkedChange.emit(e);\n this.table.headers.forEach((header) => header.check && header.check());\n }\n}\n","<odx-checkbox [(ngModel)]=\"checked\" (ngModelChange)=\"update($event)\" />\n","export type TableSortVariant = typeof TableSortVariant[keyof typeof TableSortVariant];\n\nexport const TableSortVariant = {\n UNSORTED: 'unsorted',\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { tap } from 'rxjs';\nimport { SortStatus, TableBodyCell, TableHeaderCell } from '../../models';\nimport { TableSortVariant } from '../../models/sort-variant';\nimport { TABLE } from '../../table.config';\n\n/**\n * HeaderTitleComponent provides the functionality for a table header cell, including sorting and checkbox\n * operations if applicable. It handles changes in sort state and emits relevant events to the table component\n * to manage sorting and selection state across the table.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'th[odxHeaderTitle]',\n templateUrl: './header-title.component.html',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, CheckboxComponent, ReactiveFormsModule],\n})\nexport class HeaderTitleComponent implements OnInit {\n private readonly table = inject(TABLE);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly takeUntilDestroyed = untilDestroyed();\n private sortStatus: SortStatus = this.getSortStatus;\n\n /**\n * The header cell item containing metadata like column name, sortability, and whether it should include a checkbox.\n *\n * @type {TableHeaderCell}\n */\n @Input()\n public item!: TableHeaderCell;\n\n /**\n * FormGroup to manage the checkbox state within the header.\n *\n * @type {FormGroup}\n */\n public checkForm = new FormGroup({ check: new FormControl(false) });\n\n /**\n * Computes and returns the current sort status of the column associated with this header.\n *\n * @returns {SortStatus}\n */\n public get getSortStatus(): SortStatus {\n return { column: this.item?.name, sortVariant: TableSortVariant.UNSORTED };\n }\n\n /**\n * Returns the icon or indicator for the current sorting status (ascending, descending, unsorted).\n *\n * @returns {TableSortVariant}\n */\n public get sortIcon(): TableSortVariant {\n return this.sortStatus.sortVariant;\n }\n\n /**\n * Toggles the sorting status of the column and informs the table component of the change.\n */\n public sortColumn(): void {\n if (!this.item?.sortable) return;\n switch (this.sortStatus.sortVariant) {\n case TableSortVariant.DESC:\n case TableSortVariant.UNSORTED:\n this.table.clearSort();\n this.sortStatus = { ...this.sortStatus, sortVariant: TableSortVariant.ASC };\n break;\n case TableSortVariant.ASC:\n this.table.clearSort();\n\n this.sortStatus = { ...this.sortStatus, sortVariant: TableSortVariant.DESC };\n break;\n }\n\n this.table.sorted.emit(this.sortStatus);\n }\n\n /**\n * Resets the sort status to unsorted.\n */\n public clearSortStatus(): void {\n this.sortStatus = { column: this.item?.name, sortVariant: TableSortVariant.UNSORTED };\n this.check();\n }\n\n /**\n * Returns the number of selected items in the column, used to determine checkbox state.\n *\n * @returns {number}\n */\n public get selected(): number {\n return this.table.data.filter((d: TableBodyCell) => d[this.item.name]).length;\n }\n\n /**\n * Updates the component view, usually after a state change.\n */\n public check(): void {\n this.cdr.markForCheck();\n }\n\n /**\n * Determines whether the checkbox should be marked as checked.\n *\n * @returns {boolean}\n */\n public get checked(): boolean {\n const column = this.table.headerData.find((h: TableHeaderCell) => h.check)?.name;\n return this.table.data.every((item: TableBodyCell) => column && item[column]);\n }\n\n public ngOnInit(): void {\n this.checkBoxListener();\n }\n\n private checkBoxListener(): void {\n if (!this.item.check) return;\n this.checkForm\n .get('check')\n ?.valueChanges.pipe(\n this.takeUntilDestroyed(),\n tap((check) => this.table.checked.emit({ column: this.item.name, check: !!check })),\n )\n .subscribe();\n }\n\n public get indeterminate(): boolean {\n const column = this.table.headerData.find((h: TableHeaderCell) => h.check)?.name;\n const { length } = this.table.data;\n const unchecked = length - this.table.data.filter((item: TableBodyCell) => column && item[column]).length;\n return unchecked > 0 && unchecked < length;\n }\n}\n","@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n","import { Directive } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * TableCellDirective enhances an HTML td element by providing a role attribute with a value of \"cell\".\n * This directive is used to define a cell within a table.\n */\n@CSSComponent('table__cell')\n@Directive({\n selector: 'td[odx-table-cell]',\n standalone: true,\n host: {\n '[attr.role]': '\"cell\"',\n },\n})\nexport class TableCellDirective {\n public readonly element = injectElement();\n}\n","import { Directive } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * TableRowDirective enhances an HTML tr element by providing a role attribute with a value of \"row\".\n * This directive is used to define a row within a table.\n */\n@CSSComponent('table__row')\n@Directive({\n selector: 'tr[odx-table-row]',\n standalone: true,\n host: {\n '[attr.role]': '\"row\"',\n '[attr.tabindex]': '0',\n },\n})\nexport class TableRowDirective {\n public readonly element = injectElement();\n}\n","export type TableVariant = typeof TableVariant[keyof typeof TableVariant];\n\nexport const TableVariant = {\n DEFAULT: 'default',\n STRIPED: 'striped',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren, ViewEncapsulation } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FormFieldModule } from '@odx/angular/components/form-field';\nimport { IconComponent } from '@odx/angular/components/icon';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { debounceTime, tap } from 'rxjs';\nimport { HeaderTitleComponent } from './components/header-title/header-title.component';\nimport { SortStatus, TableBodyCell, TableHeaderCell, TableVariant } from './models';\nimport { TABLE } from './table.config';\n\n/**\n * TableComponent is a dynamic table structure built for displaying complex data sets with sorting, filtering,\n * and checkable functionality. It provides configuration options through various inputs that allow the\n * customization of table behavior and presentation.\n *\n * This component is highly modular, integrating with other components such as `HeaderTitleComponent` for header\n * management, and using Angular forms for dynamic data filtering.\n *\n * @template T - The type of data that the table displays.\n */\n@CSSComponent('table')\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'table[odxTable]',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.role]': '\"table\"',\n },\n templateUrl: './table.component.html',\n imports: [CommonModule, IconComponent, ReactiveFormsModule, FormFieldModule, HeaderTitleComponent],\n providers: [{ provide: TABLE, useExisting: TableComponent }],\n})\nexport class TableComponent<T> implements OnInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n public readonly element = injectElement();\n\n /**\n * Specifies the table variant for CSS styling.\n *\n * @type {TableVariant | null}\n */\n @CSSModifier()\n @Input()\n public variant?: TableVariant | null;\n\n /**\n * Data array of type T that the table displays.\n *\n * @type {T[]}\n * @default []\n */\n @Input()\n public data: T[] = [];\n\n /**\n * Configuration for table header data which controls sorting, filtering, and additional metadata.\n *\n * @type {TableHeaderCell[]}\n * @default []\n */\n @Input()\n public headerData: TableHeaderCell[] = [];\n\n /**\n * FormGroup to handle the dynamic filtering controls, each tied to a header cell that has filtering enabled.\n */\n public form: FormGroup = new FormGroup({});\n\n /**\n * Event emitter for when a column's sorting status changes.\n *\n * @emits {SortStatus}\n */\n @Output()\n public readonly sorted: EventEmitter<SortStatus> = new EventEmitter();\n\n /**\n * Event emitter for when the table's filtering conditions change.\n *\n * @emits {{ [key: string]: string }}\n */\n @Output()\n public readonly filtered: EventEmitter<{ [key: string]: string }> = new EventEmitter();\n\n /**\n * Event emitter for when a checkbox column's checked state changes.\n *\n * @emits {{ column: string; check: boolean }}\n */\n @Output()\n public readonly checked: EventEmitter<{ column: string; check: boolean }> = new EventEmitter();\n\n /**\n * A QueryList of HeaderTitleComponent instances, each corresponding to a header cell in the table.\n *\n * @type {QueryList<HeaderTitleComponent>}\n */\n @ViewChildren(HeaderTitleComponent)\n public headers!: QueryList<HeaderTitleComponent>;\n\n public ngOnInit(): void {\n this.setHeaderData();\n this.headerData.forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));\n this.formListener();\n }\n\n /**\n * Clears the sorting status of all headers.\n */\n public clearSort(): void {\n this.headers.forEach((header) => header.clearSortStatus());\n }\n\n private formListener(): void {\n if (Object.keys(this.form.controls).length === 0) return;\n this.form.valueChanges\n .pipe(\n debounceTime(600),\n this.takeUntilDestroyed(),\n tap(() => {\n this.filtered.emit(this.form.value);\n this.headers?.filter((header) => !!header.item.check).forEach((header) => header.check());\n }),\n )\n .subscribe();\n }\n\n private setHeaderData(): void {\n this.headerData = Object.keys(this.data[0] as TableBodyCell).map(\n (key) =>\n this.headerData.find((item) => item.name === key) || {\n name: key,\n title: `${key[0].toUpperCase()}${key.slice(1)}`,\n sortable: false,\n filter: false,\n },\n );\n }\n}\n","<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerData; track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n <ng-content select=\"tr\" />\n</tbody>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CheckCellComponent } from './components/check-cell/check-cell.component';\nimport { TableCellDirective } from './directives/table-cell.directive';\nimport { TableRowDirective } from './directives/table-row.directive';\nimport { TableComponent } from './table.component';\n\nconst modules = [TableComponent, TableRowDirective, TableCellDirective, CheckCellComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"odx-angular-components-table.mjs","sources":["../../../../libs/angular/components/table/src/lib/table.config.ts","../../../../libs/angular/components/table/src/lib/components/check-cell/check-cell.component.ts","../../../../libs/angular/components/table/src/lib/components/check-cell/check-cell.component.html","../../../../libs/angular/components/table/src/lib/models/sort-variant.ts","../../../../libs/angular/components/table/src/lib/components/header-title/header-title.component.ts","../../../../libs/angular/components/table/src/lib/components/header-title/header-title.component.html","../../../../libs/angular/components/table/src/lib/directives/table-cell.directive.ts","../../../../libs/angular/components/table/src/lib/directives/table-row.directive.ts","../../../../libs/angular/components/table/src/lib/models/table-variant.ts","../../../../libs/angular/components/table/src/lib/table.component.ts","../../../../libs/angular/components/table/src/lib/table.component.html","../../../../libs/angular/components/table/src/lib/table.module.ts","../../../../libs/angular/components/table/src/odx-angular-components-table.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { TableBodyCell } from './models';\nimport { TableComponent } from './table.component';\n\nexport const TABLE = new InjectionToken<TableComponent<TableBodyCell>>('odx-table');\n","import { booleanAttribute, Component, EventEmitter, inject, Input, Output } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { injectElement } from '@odx/angular/utils';\nimport { TABLE } from '../../table.config';\n\n/**\n * CheckCellComponent provides a checkbox input within a table cell, allowing rows to be selected.\n * It is designed to be used in conjunction with a table component that manages state and header interactions,\n * particularly for functionalities like bulk actions.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'td[odx-table-cell][checked]',\n standalone: true,\n templateUrl: './check-cell.component.html',\n imports: [CheckboxComponent, FormsModule],\n})\nexport class CheckCellComponent {\n private readonly table = inject(TABLE);\n public readonly element = injectElement();\n\n /**\n * Indicates whether the checkbox within the table cell is checked.\n *\n * @type {boolean}\n * @default false\n */\n @Input({ transform: booleanAttribute })\n public checked = false;\n\n /**\n * Event emitter that triggers when the checked state changes. It emits the new state of the checkbox.\n *\n * @emits {boolean}\n */\n @Output() public checkedChange: EventEmitter<boolean> = new EventEmitter<boolean>();\n\n /**\n * Updates the checked state of the checkbox and notifies the parent table component, typically to update\n * the state of a header checkbox or other related components.\n * @param {boolean} e - The new checked state.\n */\n public update(e: boolean): void {\n this.checkedChange.emit(e);\n this.table.headers.forEach((header) => header.check && header.check());\n }\n}\n","<odx-checkbox [(ngModel)]=\"checked\" (ngModelChange)=\"update($event)\" />\n","export type TableSortVariant = typeof TableSortVariant[keyof typeof TableSortVariant];\n\nexport const TableSortVariant = {\n UNSORTED: 'unsorted',\n ASC: 'asc',\n DESC: 'desc',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, inject, Input, OnInit, ViewEncapsulation } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CheckboxComponent } from '@odx/angular/components/checkbox';\nimport { untilDestroyed } from '@odx/angular/utils';\nimport { tap } from 'rxjs';\nimport { ColumnWidth, SortStatus, TableBodyCell, TableHeaderCell } from '../../models';\nimport { TableSortVariant } from '../../models/sort-variant';\nimport { TABLE } from '../../table.config';\n\n/**\n * HeaderTitleComponent provides the functionality for a table header cell, including sorting and checkbox\n * operations if applicable. It handles changes in sort state and emits relevant events to the table component\n * to manage sorting and selection state across the table.\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'th[odxHeaderTitle]',\n templateUrl: './header-title.component.html',\n standalone: true,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [CommonModule, CheckboxComponent, ReactiveFormsModule],\n})\nexport class HeaderTitleComponent implements OnInit {\n private readonly table = inject(TABLE);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly takeUntilDestroyed = untilDestroyed();\n private sortStatus: SortStatus = this.getSortStatus;\n\n /**\n * The header cell item containing metadata like column name, sortability, and whether it should include a checkbox.\n *\n * @type {TableHeaderCell}\n */\n @Input()\n public item!: TableHeaderCell;\n\n /**\n * FormGroup to manage the checkbox state within the header.\n *\n * @type {FormGroup}\n */\n public checkForm = new FormGroup({ check: new FormControl(false) });\n\n /**\n * Computes and returns the current sort status of the column associated with this header.\n *\n * @returns {SortStatus}\n */\n public get getSortStatus(): SortStatus {\n return { column: this.item?.name, sortVariant: TableSortVariant.UNSORTED };\n }\n\n /**\n * Returns the icon or indicator for the current sorting status (ascending, descending, unsorted).\n *\n * @returns {TableSortVariant}\n */\n public get sortIcon(): TableSortVariant {\n return this.sortStatus.sortVariant;\n }\n\n /**\n * Toggles the sorting status of the column and informs the table component of the change.\n */\n public sortColumn(): void {\n if (!this.item?.sortable) return;\n switch (this.sortStatus.sortVariant) {\n case TableSortVariant.DESC:\n case TableSortVariant.UNSORTED:\n this.table.clearSort();\n this.sortStatus = { ...this.sortStatus, sortVariant: TableSortVariant.ASC };\n break;\n case TableSortVariant.ASC:\n this.table.clearSort();\n\n this.sortStatus = { ...this.sortStatus, sortVariant: TableSortVariant.DESC };\n break;\n }\n\n this.table.sorted.emit(this.sortStatus);\n }\n\n /**\n * Resets the sort status to unsorted.\n */\n public clearSortStatus(): void {\n this.sortStatus = { column: this.item?.name, sortVariant: TableSortVariant.UNSORTED };\n this.check();\n }\n\n /**\n * Returns the number of selected items in the column, used to determine checkbox state.\n *\n * @returns {number}\n */\n public get selected(): number {\n return this.table.data().filter((d: TableBodyCell) => d[this.item.name]).length;\n }\n\n /**\n * Updates the component view, usually after a state change.\n */\n public check(): void {\n this.cdr.markForCheck();\n }\n\n /**\n * Determines whether the checkbox should be marked as checked.\n *\n * @returns {boolean}\n */\n public get checked(): boolean {\n const column = this.item.check && this.item.name;\n return this.table.data().every((item: TableBodyCell) => column && item[column]);\n }\n\n public ngOnInit(): void {\n this.checkBoxListener();\n }\n\n private checkBoxListener(): void {\n if (!this.item.check) return;\n this.checkForm\n .get('check')\n ?.valueChanges.pipe(\n this.takeUntilDestroyed(),\n tap((check) => this.table.checked.emit({ column: this.item.name, check: !!check })),\n )\n .subscribe();\n }\n\n public get indeterminate(): boolean {\n const column = this.item.check && this.item.name;\n const { length } = this.table.data();\n const unchecked = length - this.table.data().filter((item: TableBodyCell) => column && item[column]).length;\n return unchecked > 0 && unchecked < length;\n }\n\n @HostBinding('style.width')\n protected get columnWidth(): ColumnWidth {\n return this.item.width ?? 'auto';\n }\n}\n","@if (item.check) {\n <div class=\"odx-table__check\">\n <div [formGroup]=\"checkForm\">\n <odx-checkbox [checked]=\"checked\" [indeterminate]=\"indeterminate\" formControlName=\"check\" />\n </div>\n </div>\n} @else {\n <div class=\"odx-table__header-cell-title\" (click)=\"sortColumn()\" [class.sortable]=\"item.sortable\">\n {{ item.title }}\n @if (item.sortable) {\n @switch (sortIcon) {\n @case ('unsorted') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <path d=\"m14,5H2v-2h12v2Zm-4,2H2v2h8v-2Zm-4,4H2v2h4v-2Z\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('desc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"11 6 8 3 5 6 7 6 7 13 9 13 9 6 11 6\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n @case ('asc') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\">\n <polygon points=\"5 10 8 13 11 10 9 10 9 3 7 3 7 10 5 10\" style=\"fill: var(--blue-700)\" />\n </svg>\n }\n }\n }\n </div>\n <ng-content select=\"odx-form-field\" />\n}\n","import { Directive } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * TableCellDirective enhances an HTML td element by providing a role attribute with a value of \"cell\".\n * This directive is used to define a cell within a table.\n */\n@CSSComponent('table__cell')\n@Directive({\n selector: 'td[odx-table-cell]',\n standalone: true,\n host: {\n '[attr.role]': '\"cell\"',\n },\n})\nexport class TableCellDirective {\n public readonly element = injectElement();\n}\n","import { Directive } from '@angular/core';\nimport { CSSComponent } from '@odx/angular/internal';\nimport { injectElement } from '@odx/angular/utils';\n\n/**\n * TableRowDirective enhances an HTML tr element by providing a role attribute with a value of \"row\".\n * This directive is used to define a row within a table.\n */\n@CSSComponent('table__row')\n@Directive({\n selector: 'tr[odx-table-row]',\n standalone: true,\n host: {\n '[attr.role]': '\"row\"',\n '[attr.tabindex]': '0',\n },\n})\nexport class TableRowDirective {\n public readonly element = injectElement();\n}\n","export type TableVariant = typeof TableVariant[keyof typeof TableVariant];\n\nexport const TableVariant = {\n DEFAULT: 'default',\n STRIPED: 'striped',\n} as const;\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n input,\n Input,\n OnInit,\n Output,\n QueryList,\n ViewChildren,\n ViewEncapsulation,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { FormFieldModule } from '@odx/angular/components/form-field';\nimport { CSSComponent, CSSModifier } from '@odx/angular/internal';\nimport { injectElement, untilDestroyed } from '@odx/angular/utils';\nimport { debounceTime, tap } from 'rxjs';\nimport { HeaderTitleComponent } from './components/header-title/header-title.component';\nimport { TableCellDirective, TableRowDirective } from './directives';\nimport { SortStatus, TableHeaderCell, TableVariant } from './models';\nimport { TABLE } from './table.config';\n\n/**\n * TableComponent is a dynamic table structure built for displaying complex data sets with sorting, filtering,\n * and checkable functionality. It provides configuration options through various inputs that allow the\n * customization of table behavior and presentation.\n *\n * This component is highly modular, integrating with other components such as `HeaderTitleComponent` for header\n * management, and using Angular forms for dynamic data filtering.\n *\n * @template T - The type of data that the table displays.\n */\n@CSSComponent('table')\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'table[odxTable]',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.role]': '\"table\"',\n },\n templateUrl: './table.component.html',\n imports: [CommonModule, ReactiveFormsModule, FormFieldModule, HeaderTitleComponent, TableRowDirective, TableCellDirective],\n providers: [{ provide: TABLE, useExisting: TableComponent }],\n})\nexport class TableComponent<T> implements OnInit {\n private readonly takeUntilDestroyed = untilDestroyed();\n protected headerColumns = computed(() => {\n const [firstRow] = this.data() ?? [];\n const headerColumns = this.headerData();\n\n if (!(headerColumns && firstRow)) return headerColumns;\n return Object.keys(firstRow).map(\n (key) =>\n headerColumns.find((item) => item.name === key) ?? {\n name: key,\n title: key.charAt(0).toUpperCase() + key.slice(1),\n sortable: false,\n filter: false,\n check: key === 'selected',\n },\n );\n });\n public readonly element = injectElement();\n\n /**\n * Specifies the table variant for CSS styling.\n *\n * @type {TableVariant | null}\n */\n @CSSModifier()\n @Input()\n public variant?: TableVariant | null;\n\n /**\n * Data array of type T that the table displays.\n *\n * @type {Signal<T[]>}\n */\n public data = input.required<T[]>();\n\n /**\n * Message to display when no data is available.\n *\n * @type {Signal<string>}\n */\n public noDataMessage = input<string>('No data available');\n\n /**\n * Configuration for table header data which controls sorting, filtering, and additional metadata.\n *\n * @type {Signal<TableHeaderCell[]>}\n */\n public headerData = input<TableHeaderCell[]>([]);\n\n /**\n * FormGroup to handle the dynamic filtering controls, each tied to a header cell that has filtering enabled.\n */\n public form: FormGroup = new FormGroup({});\n\n /**\n * Event emitter for when a column's sorting status changes.\n *\n * @emits {SortStatus}\n */\n @Output()\n public readonly sorted: EventEmitter<SortStatus> = new EventEmitter();\n\n /**\n * Event emitter for when the table's filtering conditions change.\n *\n * @emits {{ [key: string]: string }}\n */\n @Output()\n public readonly filtered: EventEmitter<{ [key: string]: string }> = new EventEmitter();\n\n /**\n * Event emitter for when a checkbox column's checked state changes.\n *\n * @emits {{ column: string; check: boolean }}\n */\n @Output()\n public readonly checked: EventEmitter<{ column: string; check: boolean }> = new EventEmitter();\n\n /**\n * A QueryList of HeaderTitleComponent instances, each corresponding to a header cell in the table.\n *\n * @type {QueryList<HeaderTitleComponent>}\n */\n @ViewChildren(HeaderTitleComponent)\n public headers!: QueryList<HeaderTitleComponent>;\n\n public ngOnInit(): void {\n this.headerData().forEach((item) => item.filter && this.form.addControl(item.name, new FormControl('')));\n this.formListener();\n }\n\n /**\n * Clears the sorting status of all headers.\n */\n public clearSort(): void {\n this.headers.forEach((header) => header.clearSortStatus());\n }\n\n private formListener(): void {\n if (Object.keys(this.form.controls).length === 0) return;\n this.form.valueChanges\n .pipe(\n debounceTime(600),\n this.takeUntilDestroyed(),\n tap(() => {\n this.filtered.emit(this.form.value);\n this.headers?.filter((header) => !!header.item.check).forEach((header) => header.check());\n }),\n )\n .subscribe();\n }\n}\n","<thead class=\"odx-table__head\" role=\"rowgroup\" [formGroup]=\"form\">\n <tr class=\"odx-table__header-row\" role=\"row\">\n @for (item of headerColumns(); track $index) {\n <th class=\"odx-table__header-cell\" role=\"columnheader\" odxHeaderTitle [item]=\"item\">\n @if (item.filter) {\n <odx-form-field>\n <input placeholder=\"Filter\" [formControlName]=\"item.name\" type=\"text\" odxFormFieldControl />\n </odx-form-field>\n }\n </th>\n }\n </tr>\n</thead>\n<tbody class=\"odx-table__body\" role=\"rowgroup\">\n @if (data() && !!data().length) {\n <ng-content select=\"tr\" />\n } @else {\n <tr odx-table-row class=\"odx-table__no-data-row\">\n <td odx-table-cell [attr.colspan]=\"headerColumns().length\">{{ noDataMessage() }}</td>\n </tr>\n }\n</tbody>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@odx/angular';\nimport { CheckCellComponent } from './components/check-cell/check-cell.component';\nimport { TableCellDirective } from './directives/table-cell.directive';\nimport { TableRowDirective } from './directives/table-row.directive';\nimport { TableComponent } from './table.component';\n\nconst modules = [TableComponent, TableRowDirective, TableCellDirective, CheckCellComponent];\n\n@NgModule({\n imports: modules,\n exports: [CoreModule, ...modules],\n})\nexport class TableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|