@swimlane/ngx-datatable 20.1.0 → 21.0.0-alpha.1
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 +720 -0
- package/README.md +25 -4
- package/assets/app.css +4 -3
- package/assets/icons-reference.html +5 -1
- package/assets/icons.css +3 -2
- package/{fesm2020 → fesm2022}/swimlane-ngx-datatable.mjs +3404 -2536
- package/fesm2022/swimlane-ngx-datatable.mjs.map +1 -0
- package/index.css +224 -169
- package/index.scss +13 -3
- package/lib/components/body/body-cell.component.d.ts +28 -23
- package/lib/components/body/body-group-header-template.directive.d.ts +3 -4
- package/lib/components/body/body-group-header.directive.d.ts +14 -9
- package/lib/components/body/body-row-def.component.d.ts +34 -0
- package/lib/components/body/body-row-wrapper.component.d.ts +34 -22
- package/lib/components/body/body-row.component.d.ts +28 -34
- package/lib/components/body/body.component.d.ts +88 -69
- package/lib/components/body/ghost-loader/ghost-loader.component.d.ts +12 -0
- package/lib/components/body/progress-bar.component.d.ts +1 -1
- package/lib/components/body/scroller.component.d.ts +4 -7
- package/lib/components/body/selection.component.d.ts +21 -25
- package/lib/components/body/summary/summary-row.component.d.ts +4 -3
- package/lib/components/columns/column-cell.directive.d.ts +4 -3
- package/lib/components/columns/column-ghost-cell.directive.d.ts +6 -0
- package/lib/components/columns/column-header.directive.d.ts +3 -4
- package/lib/components/columns/column.directive.d.ts +43 -18
- package/lib/components/columns/tree.directive.d.ts +1 -2
- package/lib/components/datatable.component.d.ts +142 -76
- package/lib/components/footer/footer-template.directive.d.ts +3 -4
- package/lib/components/footer/footer.component.d.ts +3 -2
- package/lib/components/footer/footer.directive.d.ts +6 -4
- package/lib/components/footer/pager.component.d.ts +6 -4
- package/lib/components/header/header-cell.component.d.ts +18 -18
- package/lib/components/header/header.component.d.ts +41 -36
- package/lib/components/row-detail/row-detail-template.directive.d.ts +3 -4
- package/lib/components/row-detail/row-detail.directive.d.ts +9 -8
- package/lib/directives/disable-row.directive.d.ts +22 -0
- package/lib/directives/draggable.directive.d.ts +11 -8
- package/lib/directives/long-press.directive.d.ts +16 -5
- package/lib/directives/orderable.directive.d.ts +21 -10
- package/lib/directives/resizeable.directive.d.ts +7 -5
- package/lib/directives/visibility.directive.d.ts +2 -3
- package/lib/ngx-datatable.module.d.ts +29 -30
- package/lib/services/scrollbar-helper.service.d.ts +0 -1
- package/lib/types/internal.types.d.ts +31 -0
- package/lib/types/public.types.d.ts +142 -0
- package/lib/types/table-column.type.d.ts +39 -66
- package/lib/utils/column-helper.d.ts +2 -2
- package/lib/utils/column-prop-getters.d.ts +1 -1
- package/lib/utils/column.d.ts +7 -14
- package/lib/utils/keys.d.ts +6 -6
- package/lib/utils/math.d.ts +4 -3
- package/lib/utils/selection.d.ts +2 -2
- package/lib/utils/sort.d.ts +5 -5
- package/lib/utils/table-token.d.ts +7 -0
- package/lib/utils/tree.d.ts +2 -2
- package/package.json +9 -17
- package/public-api.d.ts +4 -11
- package/themes/_ghost.scss +22 -0
- package/themes/_rows.scss +22 -0
- package/themes/bootstrap.css +117 -65
- package/themes/bootstrap.scss +27 -3
- package/themes/dark.css +101 -70
- package/themes/dark.scss +12 -0
- package/themes/material.css +344 -260
- package/themes/material.scss +52 -11
- package/esm2020/lib/components/body/body-cell.component.mjs +0 -432
- package/esm2020/lib/components/body/body-group-header-template.directive.mjs +0 -16
- package/esm2020/lib/components/body/body-group-header.directive.mjs +0 -62
- package/esm2020/lib/components/body/body-row-wrapper.component.mjs +0 -140
- package/esm2020/lib/components/body/body-row.component.mjs +0 -262
- package/esm2020/lib/components/body/body.component.mjs +0 -863
- package/esm2020/lib/components/body/progress-bar.component.mjs +0 -27
- package/esm2020/lib/components/body/scroller.component.mjs +0 -91
- package/esm2020/lib/components/body/selection.component.mjs +0 -150
- package/esm2020/lib/components/body/summary/summary-row.component.mjs +0 -105
- package/esm2020/lib/components/columns/column-cell.directive.mjs +0 -14
- package/esm2020/lib/components/columns/column-header.directive.mjs +0 -14
- package/esm2020/lib/components/columns/column.directive.mjs +0 -98
- package/esm2020/lib/components/columns/tree.directive.mjs +0 -14
- package/esm2020/lib/components/datatable.component.mjs +0 -1008
- package/esm2020/lib/components/footer/footer-template.directive.mjs +0 -14
- package/esm2020/lib/components/footer/footer.component.mjs +0 -128
- package/esm2020/lib/components/footer/footer.directive.mjs +0 -35
- package/esm2020/lib/components/footer/pager.component.mjs +0 -181
- package/esm2020/lib/components/header/header-cell.component.mjs +0 -243
- package/esm2020/lib/components/header/header.component.mjs +0 -376
- package/esm2020/lib/components/row-detail/row-detail-template.directive.mjs +0 -16
- package/esm2020/lib/components/row-detail/row-detail.directive.mjs +0 -63
- package/esm2020/lib/directives/draggable.directive.mjs +0 -108
- package/esm2020/lib/directives/long-press.directive.mjs +0 -117
- package/esm2020/lib/directives/orderable.directive.mjs +0 -136
- package/esm2020/lib/directives/resizeable.directive.mjs +0 -93
- package/esm2020/lib/directives/visibility.directive.mjs +0 -63
- package/esm2020/lib/events.mjs +0 -7
- package/esm2020/lib/ngx-datatable.module.mjs +0 -139
- package/esm2020/lib/services/column-changes.service.mjs +0 -24
- package/esm2020/lib/services/dimensions-helper.service.mjs +0 -17
- package/esm2020/lib/services/scrollbar-helper.service.mjs +0 -37
- package/esm2020/lib/types/click.type.mjs +0 -6
- package/esm2020/lib/types/column-mode.type.mjs +0 -7
- package/esm2020/lib/types/contextmenu.type.mjs +0 -6
- package/esm2020/lib/types/selection.type.mjs +0 -9
- package/esm2020/lib/types/sort-direction.type.mjs +0 -6
- package/esm2020/lib/types/sort-prop-dir.type.mjs +0 -2
- package/esm2020/lib/types/sort.type.mjs +0 -6
- package/esm2020/lib/types/table-column.type.mjs +0 -2
- package/esm2020/lib/utils/camel-case.mjs +0 -28
- package/esm2020/lib/utils/column-helper.mjs +0 -95
- package/esm2020/lib/utils/column-prop-getters.mjs +0 -96
- package/esm2020/lib/utils/column.mjs +0 -69
- package/esm2020/lib/utils/elm-from-point.mjs +0 -38
- package/esm2020/lib/utils/id.mjs +0 -8
- package/esm2020/lib/utils/keys.mjs +0 -10
- package/esm2020/lib/utils/math.mjs +0 -146
- package/esm2020/lib/utils/prefixes.mjs +0 -38
- package/esm2020/lib/utils/row-height-cache.mjs +0 -138
- package/esm2020/lib/utils/selection.mjs +0 -40
- package/esm2020/lib/utils/sort.mjs +0 -127
- package/esm2020/lib/utils/throttle.mjs +0 -60
- package/esm2020/lib/utils/translate.mjs +0 -25
- package/esm2020/lib/utils/tree.mjs +0 -103
- package/esm2020/public-api.mjs +0 -64
- package/esm2020/swimlane-ngx-datatable.mjs +0 -5
- package/fesm2015/swimlane-ngx-datatable.mjs +0 -5979
- package/fesm2015/swimlane-ngx-datatable.mjs.map +0 -1
- package/fesm2020/swimlane-ngx-datatable.mjs.map +0 -1
- package/lib/events.d.ts +0 -3
- package/lib/services/dimensions-helper.service.d.ts +0 -10
- package/lib/types/click.type.d.ts +0 -4
- package/lib/types/column-mode.type.d.ts +0 -5
- package/lib/types/contextmenu.type.d.ts +0 -4
- package/lib/types/selection.type.d.ts +0 -7
- package/lib/types/sort-direction.type.d.ts +0 -4
- package/lib/types/sort-prop-dir.type.d.ts +0 -6
- package/lib/types/sort.type.d.ts +0 -4
- package/lib/utils/elm-from-point.d.ts +0 -8
- package/lib/utils/prefixes.d.ts +0 -1
- package/lib/utils/translate.d.ts +0 -1
- /package/{swimlane-ngx-datatable.d.ts → index.d.ts} +0 -0
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { Input, Output, EventEmitter, Directive, TemplateRef, ContentChild } from '@angular/core';
|
|
2
|
-
import { DatatableGroupHeaderTemplateDirective } from './body-group-header-template.directive';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export class DatatableGroupHeaderDirective {
|
|
5
|
-
constructor() {
|
|
6
|
-
/**
|
|
7
|
-
* Row height is required when virtual scroll is enabled.
|
|
8
|
-
*/
|
|
9
|
-
this.rowHeight = 0;
|
|
10
|
-
/**
|
|
11
|
-
* Track toggling of group visibility
|
|
12
|
-
*/
|
|
13
|
-
this.toggle = new EventEmitter();
|
|
14
|
-
}
|
|
15
|
-
get template() {
|
|
16
|
-
return this._templateInput || this._templateQuery;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Toggle the expansion of a group
|
|
20
|
-
*/
|
|
21
|
-
toggleExpandGroup(group) {
|
|
22
|
-
this.toggle.emit({
|
|
23
|
-
type: 'group',
|
|
24
|
-
value: group
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Expand all groups
|
|
29
|
-
*/
|
|
30
|
-
expandAllGroups() {
|
|
31
|
-
this.toggle.emit({
|
|
32
|
-
type: 'all',
|
|
33
|
-
value: true
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Collapse all groups
|
|
38
|
-
*/
|
|
39
|
-
collapseAllGroups() {
|
|
40
|
-
this.toggle.emit({
|
|
41
|
-
type: 'all',
|
|
42
|
-
value: false
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
DatatableGroupHeaderDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableGroupHeaderDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
47
|
-
DatatableGroupHeaderDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: DatatableGroupHeaderDirective, selector: "ngx-datatable-group-header", inputs: { rowHeight: "rowHeight", _templateInput: ["template", "_templateInput"] }, outputs: { toggle: "toggle" }, queries: [{ propertyName: "_templateQuery", first: true, predicate: DatatableGroupHeaderTemplateDirective, descendants: true, read: TemplateRef, static: true }], ngImport: i0 });
|
|
48
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DatatableGroupHeaderDirective, decorators: [{
|
|
49
|
-
type: Directive,
|
|
50
|
-
args: [{ selector: 'ngx-datatable-group-header' }]
|
|
51
|
-
}], propDecorators: { rowHeight: [{
|
|
52
|
-
type: Input
|
|
53
|
-
}], _templateInput: [{
|
|
54
|
-
type: Input,
|
|
55
|
-
args: ['template']
|
|
56
|
-
}], _templateQuery: [{
|
|
57
|
-
type: ContentChild,
|
|
58
|
-
args: [DatatableGroupHeaderTemplateDirective, { read: TemplateRef, static: true }]
|
|
59
|
-
}], toggle: [{
|
|
60
|
-
type: Output
|
|
61
|
-
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1ncm91cC1oZWFkZXIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3dpbWxhbmUvbmd4LWRhdGF0YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvYm9keS9ib2R5LWdyb3VwLWhlYWRlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDOztBQUcvRixNQUFNLE9BQU8sNkJBQTZCO0lBRDFDO1FBRUU7O1dBRUc7UUFDTSxjQUFTLEdBQXVELENBQUMsQ0FBQztRQVkzRTs7V0FFRztRQUNPLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztLQStCMUQ7SUF0Q0MsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDcEQsQ0FBQztJQU9EOztPQUVHO0lBQ0gsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNmLElBQUksRUFBRSxPQUFPO1lBQ2IsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsS0FBSztZQUNYLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7MEhBakRVLDZCQUE2Qjs4R0FBN0IsNkJBQTZCLGlPQVMxQixxQ0FBcUMsMkJBQVUsV0FBVzsyRkFUN0QsNkJBQTZCO2tCQUR6QyxTQUFTO21CQUFDLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixFQUFFOzhCQUsxQyxTQUFTO3NCQUFqQixLQUFLO2dCQUdOLGNBQWM7c0JBRGIsS0FBSzt1QkFBQyxVQUFVO2dCQUlqQixjQUFjO3NCQURiLFlBQVk7dUJBQUMscUNBQXFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBVTlFLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgRGlyZWN0aXZlLCBUZW1wbGF0ZVJlZiwgQ29udGVudENoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhdGFibGVHcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9ib2R5LWdyb3VwLWhlYWRlci10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3gtZGF0YXRhYmxlLWdyb3VwLWhlYWRlcicgfSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVHcm91cEhlYWRlckRpcmVjdGl2ZSB7XG4gIC8qKlxuICAgKiBSb3cgaGVpZ2h0IGlzIHJlcXVpcmVkIHdoZW4gdmlydHVhbCBzY3JvbGwgaXMgZW5hYmxlZC5cbiAgICovXG4gIEBJbnB1dCgpIHJvd0hlaWdodDogbnVtYmVyIHwgKChncm91cD86IGFueSwgaW5kZXg/OiBudW1iZXIpID0+IG51bWJlcikgPSAwO1xuXG4gIEBJbnB1dCgndGVtcGxhdGUnKVxuICBfdGVtcGxhdGVJbnB1dDogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZUdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICBfdGVtcGxhdGVRdWVyeTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBnZXQgdGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlSW5wdXQgfHwgdGhpcy5fdGVtcGxhdGVRdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFjayB0b2dnbGluZyBvZiBncm91cCB2aXNpYmlsaXR5XG4gICAqL1xuICBAT3V0cHV0KCkgdG9nZ2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBleHBhbnNpb24gb2YgYSBncm91cFxuICAgKi9cbiAgdG9nZ2xlRXhwYW5kR3JvdXAoZ3JvdXA6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlLmVtaXQoe1xuICAgICAgdHlwZTogJ2dyb3VwJyxcbiAgICAgIHZhbHVlOiBncm91cFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZCBhbGwgZ3JvdXBzXG4gICAqL1xuICBleHBhbmRBbGxHcm91cHMoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGUuZW1pdCh7XG4gICAgICB0eXBlOiAnYWxsJyxcbiAgICAgIHZhbHVlOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29sbGFwc2UgYWxsIGdyb3Vwc1xuICAgKi9cbiAgY29sbGFwc2VBbGxHcm91cHMoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGUuZW1pdCh7XG4gICAgICB0eXBlOiAnYWxsJyxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, HostListener, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
export class DataTableRowWrapperComponent {
|
|
5
|
-
constructor(cd, differs) {
|
|
6
|
-
this.cd = cd;
|
|
7
|
-
this.differs = differs;
|
|
8
|
-
this.rowContextmenu = new EventEmitter(false);
|
|
9
|
-
this._expanded = false;
|
|
10
|
-
this.groupContext = {
|
|
11
|
-
group: this.row,
|
|
12
|
-
expanded: this.expanded,
|
|
13
|
-
rowIndex: this.rowIndex
|
|
14
|
-
};
|
|
15
|
-
this.rowContext = {
|
|
16
|
-
row: this.row,
|
|
17
|
-
expanded: this.expanded,
|
|
18
|
-
rowIndex: this.rowIndex
|
|
19
|
-
};
|
|
20
|
-
this.rowDiffer = differs.find({}).create();
|
|
21
|
-
}
|
|
22
|
-
set rowIndex(val) {
|
|
23
|
-
this._rowIndex = val;
|
|
24
|
-
this.rowContext.rowIndex = val;
|
|
25
|
-
this.groupContext.rowIndex = val;
|
|
26
|
-
this.cd.markForCheck();
|
|
27
|
-
}
|
|
28
|
-
get rowIndex() {
|
|
29
|
-
return this._rowIndex;
|
|
30
|
-
}
|
|
31
|
-
set expanded(val) {
|
|
32
|
-
this._expanded = val;
|
|
33
|
-
this.groupContext.expanded = val;
|
|
34
|
-
this.rowContext.expanded = val;
|
|
35
|
-
this.cd.markForCheck();
|
|
36
|
-
}
|
|
37
|
-
get expanded() {
|
|
38
|
-
return this._expanded;
|
|
39
|
-
}
|
|
40
|
-
ngDoCheck() {
|
|
41
|
-
if (this.rowDiffer.diff(this.row)) {
|
|
42
|
-
this.rowContext.row = this.row;
|
|
43
|
-
this.groupContext.group = this.row;
|
|
44
|
-
this.cd.markForCheck();
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
onContextmenu($event) {
|
|
48
|
-
this.rowContextmenu.emit({ event: $event, row: this.row });
|
|
49
|
-
}
|
|
50
|
-
getGroupHeaderStyle() {
|
|
51
|
-
const styles = {};
|
|
52
|
-
styles['transform'] = 'translate3d(' + this.offsetX + 'px, 0px, 0px)';
|
|
53
|
-
styles['backface-visibility'] = 'hidden';
|
|
54
|
-
styles['width'] = this.innerWidth;
|
|
55
|
-
return styles;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
DataTableRowWrapperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableRowWrapperComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.KeyValueDiffers }], target: i0.ɵɵFactoryTarget.Component });
|
|
59
|
-
DataTableRowWrapperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: DataTableRowWrapperComponent, selector: "datatable-row-wrapper", inputs: { innerWidth: "innerWidth", rowDetail: "rowDetail", groupHeader: "groupHeader", offsetX: "offsetX", detailRowHeight: "detailRowHeight", row: "row", groupedRows: "groupedRows", rowIndex: "rowIndex", expanded: "expanded" }, outputs: { rowContextmenu: "rowContextmenu" }, host: { listeners: { "contextmenu": "onContextmenu($event)" }, classAttribute: "datatable-row-wrapper" }, ngImport: i0, template: `
|
|
60
|
-
<div *ngIf="groupHeader && groupHeader.template" class="datatable-group-header" [ngStyle]="getGroupHeaderStyle()">
|
|
61
|
-
<ng-template
|
|
62
|
-
*ngIf="groupHeader && groupHeader.template"
|
|
63
|
-
[ngTemplateOutlet]="groupHeader.template"
|
|
64
|
-
[ngTemplateOutletContext]="groupContext"
|
|
65
|
-
>
|
|
66
|
-
</ng-template>
|
|
67
|
-
</div>
|
|
68
|
-
<ng-content *ngIf="(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template">
|
|
69
|
-
</ng-content>
|
|
70
|
-
<div
|
|
71
|
-
*ngIf="rowDetail && rowDetail.template && expanded"
|
|
72
|
-
[style.height.px]="detailRowHeight"
|
|
73
|
-
class="datatable-row-detail"
|
|
74
|
-
>
|
|
75
|
-
<ng-template
|
|
76
|
-
*ngIf="rowDetail && rowDetail.template"
|
|
77
|
-
[ngTemplateOutlet]="rowDetail.template"
|
|
78
|
-
[ngTemplateOutletContext]="rowContext"
|
|
79
|
-
>
|
|
80
|
-
</ng-template>
|
|
81
|
-
</div>
|
|
82
|
-
`, isInline: true, directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
83
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableRowWrapperComponent, decorators: [{
|
|
84
|
-
type: Component,
|
|
85
|
-
args: [{
|
|
86
|
-
selector: 'datatable-row-wrapper',
|
|
87
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
88
|
-
template: `
|
|
89
|
-
<div *ngIf="groupHeader && groupHeader.template" class="datatable-group-header" [ngStyle]="getGroupHeaderStyle()">
|
|
90
|
-
<ng-template
|
|
91
|
-
*ngIf="groupHeader && groupHeader.template"
|
|
92
|
-
[ngTemplateOutlet]="groupHeader.template"
|
|
93
|
-
[ngTemplateOutletContext]="groupContext"
|
|
94
|
-
>
|
|
95
|
-
</ng-template>
|
|
96
|
-
</div>
|
|
97
|
-
<ng-content *ngIf="(groupHeader && groupHeader.template && expanded) || !groupHeader || !groupHeader.template">
|
|
98
|
-
</ng-content>
|
|
99
|
-
<div
|
|
100
|
-
*ngIf="rowDetail && rowDetail.template && expanded"
|
|
101
|
-
[style.height.px]="detailRowHeight"
|
|
102
|
-
class="datatable-row-detail"
|
|
103
|
-
>
|
|
104
|
-
<ng-template
|
|
105
|
-
*ngIf="rowDetail && rowDetail.template"
|
|
106
|
-
[ngTemplateOutlet]="rowDetail.template"
|
|
107
|
-
[ngTemplateOutletContext]="rowContext"
|
|
108
|
-
>
|
|
109
|
-
</ng-template>
|
|
110
|
-
</div>
|
|
111
|
-
`,
|
|
112
|
-
host: {
|
|
113
|
-
class: 'datatable-row-wrapper'
|
|
114
|
-
}
|
|
115
|
-
}]
|
|
116
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.KeyValueDiffers }]; }, propDecorators: { innerWidth: [{
|
|
117
|
-
type: Input
|
|
118
|
-
}], rowDetail: [{
|
|
119
|
-
type: Input
|
|
120
|
-
}], groupHeader: [{
|
|
121
|
-
type: Input
|
|
122
|
-
}], offsetX: [{
|
|
123
|
-
type: Input
|
|
124
|
-
}], detailRowHeight: [{
|
|
125
|
-
type: Input
|
|
126
|
-
}], row: [{
|
|
127
|
-
type: Input
|
|
128
|
-
}], groupedRows: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], rowContextmenu: [{
|
|
131
|
-
type: Output
|
|
132
|
-
}], rowIndex: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], expanded: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], onContextmenu: [{
|
|
137
|
-
type: HostListener,
|
|
138
|
-
args: ['contextmenu', ['$event']]
|
|
139
|
-
}] } });
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1yb3ctd3JhcHBlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zd2ltbGFuZS9uZ3gtZGF0YXRhYmxlL3NyYy9saWIvY29tcG9uZW50cy9ib2R5L2JvZHktcm93LXdyYXBwZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osWUFBWSxFQUVaLHVCQUF1QixFQUl4QixNQUFNLGVBQWUsQ0FBQzs7O0FBaUN2QixNQUFNLE9BQU8sNEJBQTRCO0lBdUN2QyxZQUFvQixFQUFxQixFQUFVLE9BQXdCO1FBQXZELE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUEvQmpFLG1CQUFjLEdBQUcsSUFBSSxZQUFZLENBQWtDLEtBQUssQ0FBQyxDQUFDO1FBNEI1RSxjQUFTLEdBQVksS0FBSyxDQUFDO1FBSWpDLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtTQUN4QixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQTNDRCxJQUFhLFFBQVEsQ0FBQyxHQUFXO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDakMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFhLFFBQVEsQ0FBQyxHQUFZO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDL0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUF5QkQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUdELGFBQWEsQ0FBQyxNQUFrQjtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxtQkFBbUI7UUFDakIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUM7UUFDdEUsTUFBTSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRWxDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O3lIQTVFVSw0QkFBNEI7NkdBQTVCLDRCQUE0Qiw0YkE1QjdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCVDsyRkFLVSw0QkFBNEI7a0JBL0J4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx1QkFBdUI7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJUO29CQUNELElBQUksRUFBRTt3QkFDSixLQUFLLEVBQUUsdUJBQXVCO3FCQUMvQjtpQkFDRjtzSUFFVSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNO2dCQUVNLFFBQVE7c0JBQXBCLEtBQUs7Z0JBV08sUUFBUTtzQkFBcEIsS0FBSztnQkEyQ04sYUFBYTtzQkFEWixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIERvQ2hlY2ssXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBLZXlWYWx1ZURpZmZlcixcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIEtleVZhbHVlRGlmZmVyc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF0YXRhYmxlLXJvdy13cmFwcGVyJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAqbmdJZj1cImdyb3VwSGVhZGVyICYmIGdyb3VwSGVhZGVyLnRlbXBsYXRlXCIgY2xhc3M9XCJkYXRhdGFibGUtZ3JvdXAtaGVhZGVyXCIgW25nU3R5bGVdPVwiZ2V0R3JvdXBIZWFkZXJTdHlsZSgpXCI+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nSWY9XCJncm91cEhlYWRlciAmJiBncm91cEhlYWRlci50ZW1wbGF0ZVwiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImdyb3VwSGVhZGVyLnRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdyb3VwQ29udGV4dFwiXG4gICAgICA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiKGdyb3VwSGVhZGVyICYmIGdyb3VwSGVhZGVyLnRlbXBsYXRlICYmIGV4cGFuZGVkKSB8fCAhZ3JvdXBIZWFkZXIgfHwgIWdyb3VwSGVhZGVyLnRlbXBsYXRlXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwicm93RGV0YWlsICYmIHJvd0RldGFpbC50ZW1wbGF0ZSAmJiBleHBhbmRlZFwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImRldGFpbFJvd0hlaWdodFwiXG4gICAgICBjbGFzcz1cImRhdGF0YWJsZS1yb3ctZGV0YWlsXCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgKm5nSWY9XCJyb3dEZXRhaWwgJiYgcm93RGV0YWlsLnRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwicm93RGV0YWlsLnRlbXBsYXRlXCJcbiAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInJvd0NvbnRleHRcIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnZGF0YXRhYmxlLXJvdy13cmFwcGVyJ1xuICB9XG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZVJvd1dyYXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgQElucHV0KCkgaW5uZXJXaWR0aDogbnVtYmVyO1xuICBASW5wdXQoKSByb3dEZXRhaWw6IGFueTtcbiAgQElucHV0KCkgZ3JvdXBIZWFkZXI6IGFueTtcbiAgQElucHV0KCkgb2Zmc2V0WDogbnVtYmVyO1xuICBASW5wdXQoKSBkZXRhaWxSb3dIZWlnaHQ6IGFueTtcbiAgQElucHV0KCkgcm93OiBhbnk7XG4gIEBJbnB1dCgpIGdyb3VwZWRSb3dzOiBhbnk7XG4gIEBPdXRwdXQoKSByb3dDb250ZXh0bWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogTW91c2VFdmVudDsgcm93OiBhbnkgfT4oZmFsc2UpO1xuXG4gIEBJbnB1dCgpIHNldCByb3dJbmRleCh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX3Jvd0luZGV4ID0gdmFsO1xuICAgIHRoaXMucm93Q29udGV4dC5yb3dJbmRleCA9IHZhbDtcbiAgICB0aGlzLmdyb3VwQ29udGV4dC5yb3dJbmRleCA9IHZhbDtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHJvd0luZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd0luZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGV4cGFuZGVkKHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2V4cGFuZGVkID0gdmFsO1xuICAgIHRoaXMuZ3JvdXBDb250ZXh0LmV4cGFuZGVkID0gdmFsO1xuICAgIHRoaXMucm93Q29udGV4dC5leHBhbmRlZCA9IHZhbDtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9leHBhbmRlZDtcbiAgfVxuXG4gIGdyb3VwQ29udGV4dDogYW55O1xuICByb3dDb250ZXh0OiBhbnk7XG5cbiAgcHJpdmF0ZSByb3dEaWZmZXI6IEtleVZhbHVlRGlmZmVyPHt9LCB7fT47XG4gIHByaXZhdGUgX2V4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Jvd0luZGV4OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzKSB7XG4gICAgdGhpcy5ncm91cENvbnRleHQgPSB7XG4gICAgICBncm91cDogdGhpcy5yb3csXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICAgIHJvd0luZGV4OiB0aGlzLnJvd0luZGV4XG4gICAgfTtcblxuICAgIHRoaXMucm93Q29udGV4dCA9IHtcbiAgICAgIHJvdzogdGhpcy5yb3csXG4gICAgICBleHBhbmRlZDogdGhpcy5leHBhbmRlZCxcbiAgICAgIHJvd0luZGV4OiB0aGlzLnJvd0luZGV4XG4gICAgfTtcblxuICAgIHRoaXMucm93RGlmZmVyID0gZGlmZmVycy5maW5kKHt9KS5jcmVhdGUoKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yb3dEaWZmZXIuZGlmZih0aGlzLnJvdykpIHtcbiAgICAgIHRoaXMucm93Q29udGV4dC5yb3cgPSB0aGlzLnJvdztcbiAgICAgIHRoaXMuZ3JvdXBDb250ZXh0Lmdyb3VwID0gdGhpcy5yb3c7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSlcbiAgb25Db250ZXh0bWVudSgkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnJvd0NvbnRleHRtZW51LmVtaXQoeyBldmVudDogJGV2ZW50LCByb3c6IHRoaXMucm93IH0pO1xuICB9XG5cbiAgZ2V0R3JvdXBIZWFkZXJTdHlsZSgpOiBhbnkge1xuICAgIGNvbnN0IHN0eWxlcyA9IHt9O1xuXG4gICAgc3R5bGVzWyd0cmFuc2Zvcm0nXSA9ICd0cmFuc2xhdGUzZCgnICsgdGhpcy5vZmZzZXRYICsgJ3B4LCAwcHgsIDBweCknO1xuICAgIHN0eWxlc1snYmFja2ZhY2UtdmlzaWJpbGl0eSddID0gJ2hpZGRlbic7XG4gICAgc3R5bGVzWyd3aWR0aCddID0gdGhpcy5pbm5lcldpZHRoO1xuXG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxufVxuIl19
|
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
import { Component, Input, HostBinding, Output, EventEmitter, HostListener, ChangeDetectionStrategy, SkipSelf } from '@angular/core';
|
|
2
|
-
import { columnsByPin, columnGroupWidths, columnsByPinArr } from '../../utils/column';
|
|
3
|
-
import { Keys } from '../../utils/keys';
|
|
4
|
-
import { translateXY } from '../../utils/translate';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../../services/scrollbar-helper.service";
|
|
7
|
-
import * as i2 from "./body-cell.component";
|
|
8
|
-
import * as i3 from "@angular/common";
|
|
9
|
-
export class DataTableBodyRowComponent {
|
|
10
|
-
constructor(differs, scrollbarHelper, cd, element) {
|
|
11
|
-
this.differs = differs;
|
|
12
|
-
this.scrollbarHelper = scrollbarHelper;
|
|
13
|
-
this.cd = cd;
|
|
14
|
-
this.treeStatus = 'collapsed';
|
|
15
|
-
this.activate = new EventEmitter();
|
|
16
|
-
this.treeAction = new EventEmitter();
|
|
17
|
-
this._groupStyles = {
|
|
18
|
-
left: {},
|
|
19
|
-
center: {},
|
|
20
|
-
right: {}
|
|
21
|
-
};
|
|
22
|
-
this._element = element.nativeElement;
|
|
23
|
-
this._rowDiffer = differs.find({}).create();
|
|
24
|
-
}
|
|
25
|
-
set columns(val) {
|
|
26
|
-
this._columns = val;
|
|
27
|
-
this.recalculateColumns(val);
|
|
28
|
-
this.buildStylesByGroup();
|
|
29
|
-
}
|
|
30
|
-
get columns() {
|
|
31
|
-
return this._columns;
|
|
32
|
-
}
|
|
33
|
-
set innerWidth(val) {
|
|
34
|
-
if (this._columns) {
|
|
35
|
-
const colByPin = columnsByPin(this._columns);
|
|
36
|
-
this._columnGroupWidths = columnGroupWidths(colByPin, this._columns);
|
|
37
|
-
}
|
|
38
|
-
this._innerWidth = val;
|
|
39
|
-
this.recalculateColumns();
|
|
40
|
-
this.buildStylesByGroup();
|
|
41
|
-
}
|
|
42
|
-
get innerWidth() {
|
|
43
|
-
return this._innerWidth;
|
|
44
|
-
}
|
|
45
|
-
set offsetX(val) {
|
|
46
|
-
this._offsetX = val;
|
|
47
|
-
this.buildStylesByGroup();
|
|
48
|
-
}
|
|
49
|
-
get offsetX() {
|
|
50
|
-
return this._offsetX;
|
|
51
|
-
}
|
|
52
|
-
get cssClass() {
|
|
53
|
-
let cls = 'datatable-body-row';
|
|
54
|
-
if (this.isSelected) {
|
|
55
|
-
cls += ' active';
|
|
56
|
-
}
|
|
57
|
-
if (this.rowIndex % 2 !== 0) {
|
|
58
|
-
cls += ' datatable-row-odd';
|
|
59
|
-
}
|
|
60
|
-
if (this.rowIndex % 2 === 0) {
|
|
61
|
-
cls += ' datatable-row-even';
|
|
62
|
-
}
|
|
63
|
-
if (this.rowClass) {
|
|
64
|
-
const res = this.rowClass(this.row);
|
|
65
|
-
if (typeof res === 'string') {
|
|
66
|
-
cls += ` ${res}`;
|
|
67
|
-
}
|
|
68
|
-
else if (typeof res === 'object') {
|
|
69
|
-
const keys = Object.keys(res);
|
|
70
|
-
for (const k of keys) {
|
|
71
|
-
if (res[k] === true) {
|
|
72
|
-
cls += ` ${k}`;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return cls;
|
|
78
|
-
}
|
|
79
|
-
get columnsTotalWidths() {
|
|
80
|
-
return this._columnGroupWidths.total;
|
|
81
|
-
}
|
|
82
|
-
ngDoCheck() {
|
|
83
|
-
if (this._rowDiffer.diff(this.row)) {
|
|
84
|
-
this.cd.markForCheck();
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
trackByGroups(index, colGroup) {
|
|
88
|
-
return colGroup.type;
|
|
89
|
-
}
|
|
90
|
-
columnTrackingFn(index, column) {
|
|
91
|
-
return column.$$id;
|
|
92
|
-
}
|
|
93
|
-
buildStylesByGroup() {
|
|
94
|
-
this._groupStyles.left = this.calcStylesByGroup('left');
|
|
95
|
-
this._groupStyles.center = this.calcStylesByGroup('center');
|
|
96
|
-
this._groupStyles.right = this.calcStylesByGroup('right');
|
|
97
|
-
this.cd.markForCheck();
|
|
98
|
-
}
|
|
99
|
-
calcStylesByGroup(group) {
|
|
100
|
-
const widths = this._columnGroupWidths;
|
|
101
|
-
const offsetX = this.offsetX;
|
|
102
|
-
const styles = {
|
|
103
|
-
width: `${widths[group]}px`
|
|
104
|
-
};
|
|
105
|
-
if (group === 'left') {
|
|
106
|
-
translateXY(styles, offsetX, 0);
|
|
107
|
-
}
|
|
108
|
-
else if (group === 'right') {
|
|
109
|
-
const bodyWidth = parseInt(this.innerWidth + '', 0);
|
|
110
|
-
const totalDiff = widths.total - bodyWidth;
|
|
111
|
-
const offsetDiff = totalDiff - offsetX;
|
|
112
|
-
const offset = (offsetDiff + this.scrollbarHelper.width) * -1;
|
|
113
|
-
translateXY(styles, offset, 0);
|
|
114
|
-
}
|
|
115
|
-
return styles;
|
|
116
|
-
}
|
|
117
|
-
onActivate(event, index) {
|
|
118
|
-
event.cellIndex = index;
|
|
119
|
-
event.rowElement = this._element;
|
|
120
|
-
this.activate.emit(event);
|
|
121
|
-
}
|
|
122
|
-
onKeyDown(event) {
|
|
123
|
-
const keyCode = event.keyCode;
|
|
124
|
-
const isTargetRow = event.target === this._element;
|
|
125
|
-
const isAction = keyCode === Keys.return ||
|
|
126
|
-
keyCode === Keys.down ||
|
|
127
|
-
keyCode === Keys.up ||
|
|
128
|
-
keyCode === Keys.left ||
|
|
129
|
-
keyCode === Keys.right;
|
|
130
|
-
if (isAction && isTargetRow) {
|
|
131
|
-
event.preventDefault();
|
|
132
|
-
event.stopPropagation();
|
|
133
|
-
this.activate.emit({
|
|
134
|
-
type: 'keydown',
|
|
135
|
-
event,
|
|
136
|
-
row: this.row,
|
|
137
|
-
rowElement: this._element
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
onMouseenter(event) {
|
|
142
|
-
this.activate.emit({
|
|
143
|
-
type: 'mouseenter',
|
|
144
|
-
event,
|
|
145
|
-
row: this.row,
|
|
146
|
-
rowElement: this._element
|
|
147
|
-
});
|
|
148
|
-
}
|
|
149
|
-
recalculateColumns(val = this.columns) {
|
|
150
|
-
this._columns = val;
|
|
151
|
-
const colsByPin = columnsByPin(this._columns);
|
|
152
|
-
this._columnsByPin = columnsByPinArr(this._columns);
|
|
153
|
-
this._columnGroupWidths = columnGroupWidths(colsByPin, this._columns);
|
|
154
|
-
}
|
|
155
|
-
onTreeAction() {
|
|
156
|
-
this.treeAction.emit();
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
DataTableBodyRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableBodyRowComponent, deps: [{ token: i0.KeyValueDiffers }, { token: i1.ScrollbarHelper, skipSelf: true }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
160
|
-
DataTableBodyRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: DataTableBodyRowComponent, selector: "datatable-body-row", inputs: { columns: "columns", innerWidth: "innerWidth", expanded: "expanded", rowClass: "rowClass", row: "row", group: "group", isSelected: "isSelected", rowIndex: "rowIndex", displayCheck: "displayCheck", treeStatus: "treeStatus", offsetX: "offsetX", rowHeight: "rowHeight" }, outputs: { activate: "activate", treeAction: "treeAction" }, host: { listeners: { "keydown": "onKeyDown($event)", "mouseenter": "onMouseenter($event)" }, properties: { "class": "this.cssClass", "style.height.px": "this.rowHeight", "style.width.px": "this.columnsTotalWidths" } }, ngImport: i0, template: `
|
|
161
|
-
<div
|
|
162
|
-
*ngFor="let colGroup of _columnsByPin; let i = index; trackBy: trackByGroups"
|
|
163
|
-
class="datatable-row-{{ colGroup.type }} datatable-row-group"
|
|
164
|
-
[ngStyle]="_groupStyles[colGroup.type]"
|
|
165
|
-
>
|
|
166
|
-
<datatable-body-cell
|
|
167
|
-
role="cell"
|
|
168
|
-
*ngFor="let column of colGroup.columns; let ii = index; trackBy: columnTrackingFn"
|
|
169
|
-
tabindex="-1"
|
|
170
|
-
[row]="row"
|
|
171
|
-
[group]="group"
|
|
172
|
-
[expanded]="expanded"
|
|
173
|
-
[isSelected]="isSelected"
|
|
174
|
-
[rowIndex]="rowIndex"
|
|
175
|
-
[column]="column"
|
|
176
|
-
[rowHeight]="rowHeight"
|
|
177
|
-
[displayCheck]="displayCheck"
|
|
178
|
-
[treeStatus]="treeStatus"
|
|
179
|
-
(activate)="onActivate($event, ii)"
|
|
180
|
-
(treeAction)="onTreeAction()"
|
|
181
|
-
>
|
|
182
|
-
</datatable-body-cell>
|
|
183
|
-
</div>
|
|
184
|
-
`, isInline: true, components: [{ type: i2.DataTableBodyCellComponent, selector: "datatable-body-cell", inputs: ["displayCheck", "group", "rowHeight", "isSelected", "expanded", "rowIndex", "column", "row", "sorts", "treeStatus"], outputs: ["activate", "treeAction"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
185
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: DataTableBodyRowComponent, decorators: [{
|
|
186
|
-
type: Component,
|
|
187
|
-
args: [{
|
|
188
|
-
selector: 'datatable-body-row',
|
|
189
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
190
|
-
template: `
|
|
191
|
-
<div
|
|
192
|
-
*ngFor="let colGroup of _columnsByPin; let i = index; trackBy: trackByGroups"
|
|
193
|
-
class="datatable-row-{{ colGroup.type }} datatable-row-group"
|
|
194
|
-
[ngStyle]="_groupStyles[colGroup.type]"
|
|
195
|
-
>
|
|
196
|
-
<datatable-body-cell
|
|
197
|
-
role="cell"
|
|
198
|
-
*ngFor="let column of colGroup.columns; let ii = index; trackBy: columnTrackingFn"
|
|
199
|
-
tabindex="-1"
|
|
200
|
-
[row]="row"
|
|
201
|
-
[group]="group"
|
|
202
|
-
[expanded]="expanded"
|
|
203
|
-
[isSelected]="isSelected"
|
|
204
|
-
[rowIndex]="rowIndex"
|
|
205
|
-
[column]="column"
|
|
206
|
-
[rowHeight]="rowHeight"
|
|
207
|
-
[displayCheck]="displayCheck"
|
|
208
|
-
[treeStatus]="treeStatus"
|
|
209
|
-
(activate)="onActivate($event, ii)"
|
|
210
|
-
(treeAction)="onTreeAction()"
|
|
211
|
-
>
|
|
212
|
-
</datatable-body-cell>
|
|
213
|
-
</div>
|
|
214
|
-
`
|
|
215
|
-
}]
|
|
216
|
-
}], ctorParameters: function () { return [{ type: i0.KeyValueDiffers }, { type: i1.ScrollbarHelper, decorators: [{
|
|
217
|
-
type: SkipSelf
|
|
218
|
-
}] }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { columns: [{
|
|
219
|
-
type: Input
|
|
220
|
-
}], innerWidth: [{
|
|
221
|
-
type: Input
|
|
222
|
-
}], expanded: [{
|
|
223
|
-
type: Input
|
|
224
|
-
}], rowClass: [{
|
|
225
|
-
type: Input
|
|
226
|
-
}], row: [{
|
|
227
|
-
type: Input
|
|
228
|
-
}], group: [{
|
|
229
|
-
type: Input
|
|
230
|
-
}], isSelected: [{
|
|
231
|
-
type: Input
|
|
232
|
-
}], rowIndex: [{
|
|
233
|
-
type: Input
|
|
234
|
-
}], displayCheck: [{
|
|
235
|
-
type: Input
|
|
236
|
-
}], treeStatus: [{
|
|
237
|
-
type: Input
|
|
238
|
-
}], offsetX: [{
|
|
239
|
-
type: Input
|
|
240
|
-
}], cssClass: [{
|
|
241
|
-
type: HostBinding,
|
|
242
|
-
args: ['class']
|
|
243
|
-
}], rowHeight: [{
|
|
244
|
-
type: HostBinding,
|
|
245
|
-
args: ['style.height.px']
|
|
246
|
-
}, {
|
|
247
|
-
type: Input
|
|
248
|
-
}], columnsTotalWidths: [{
|
|
249
|
-
type: HostBinding,
|
|
250
|
-
args: ['style.width.px']
|
|
251
|
-
}], activate: [{
|
|
252
|
-
type: Output
|
|
253
|
-
}], treeAction: [{
|
|
254
|
-
type: Output
|
|
255
|
-
}], onKeyDown: [{
|
|
256
|
-
type: HostListener,
|
|
257
|
-
args: ['keydown', ['$event']]
|
|
258
|
-
}], onMouseenter: [{
|
|
259
|
-
type: HostListener,
|
|
260
|
-
args: ['mouseenter', ['$event']]
|
|
261
|
-
}] } });
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS1yb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3dpbWxhbmUvbmd4LWRhdGF0YWJsZS9zcmMvbGliL2NvbXBvbmVudHMvYm9keS9ib2R5LXJvdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsV0FBVyxFQUVYLE1BQU0sRUFHTixZQUFZLEVBQ1osWUFBWSxFQUNaLHVCQUF1QixFQUd2QixRQUFRLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQStCcEQsTUFBTSxPQUFPLHlCQUF5QjtJQW9HcEMsWUFDVSxPQUF3QixFQUNaLGVBQWdDLEVBQzVDLEVBQXFCLEVBQzdCLE9BQW1CO1FBSFgsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFDWixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDNUMsT0FBRSxHQUFGLEVBQUUsQ0FBbUI7UUF0RXRCLGVBQVUsR0FBZSxXQUFXLENBQUM7UUFrRHBDLGFBQVEsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxlQUFVLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFRN0QsaUJBQVksR0FBMkI7WUFDckMsSUFBSSxFQUFFLEVBQUU7WUFDUixNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxFQUFFO1NBQ1YsQ0FBQztRQVVBLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENB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QUFDLE9BQU87Z0JBZ0NwQixTQUFTO3NCQUZSLFdBQVc7dUJBQUMsaUJBQWlCOztzQkFDN0IsS0FBSztnQkFJRixrQkFBa0I7c0JBRHJCLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQUtuQixRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBMkVQLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBMEJuQyxZQUFZO3NCQURYLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgSG9zdEJpbmRpbmcsXG4gIEVsZW1lbnRSZWYsXG4gIE91dHB1dCxcbiAgS2V5VmFsdWVEaWZmZXJzLFxuICBLZXlWYWx1ZURpZmZlcixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRG9DaGVjayxcbiAgU2tpcFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRyZWVTdGF0dXMgfSBmcm9tICcuL2JvZHktY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgY29sdW1uc0J5UGluLCBjb2x1bW5Hcm91cFdpZHRocywgY29sdW1uc0J5UGluQXJyIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29sdW1uJztcbmltcG9ydCB7IEtleXMgfSBmcm9tICcuLi8uLi91dGlscy9rZXlzJztcbmltcG9ydCB7IFNjcm9sbGJhckhlbHBlciB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Njcm9sbGJhci1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyB0cmFuc2xhdGVYWSB9IGZyb20gJy4uLy4uL3V0aWxzL3RyYW5zbGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2RhdGF0YWJsZS1ib2R5LXJvdycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBjb2xHcm91cCBvZiBfY29sdW1uc0J5UGluOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5R3JvdXBzXCJcbiAgICAgIGNsYXNzPVwiZGF0YXRhYmxlLXJvdy17eyBjb2xHcm91cC50eXBlIH19IGRhdGF0YWJsZS1yb3ctZ3JvdXBcIlxuICAgICAgW25nU3R5bGVdPVwiX2dyb3VwU3R5bGVzW2NvbEdyb3VwLnR5cGVdXCJcbiAgICA+XG4gICAgICA8ZGF0YXRhYmxlLWJvZHktY2VsbFxuICAgICAgICByb2xlPVwiY2VsbFwiXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sR3JvdXAuY29sdW1uczsgbGV0IGlpID0gaW5kZXg7IHRyYWNrQnk6IGNvbHVtblRyYWNraW5nRm5cIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICBbZ3JvdXBdPVwiZ3JvdXBcIlxuICAgICAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICAgICAgICBbaXNTZWxlY3RlZF09XCJpc1NlbGVjdGVkXCJcbiAgICAgICAgW3Jvd0luZGV4XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICBbcm93SGVpZ2h0XT1cInJvd0hlaWdodFwiXG4gICAgICAgIFtkaXNwbGF5Q2hlY2tdPVwiZGlzcGxheUNoZWNrXCJcbiAgICAgICAgW3RyZWVTdGF0dXNdPVwidHJlZVN0YXR1c1wiXG4gICAgICAgIChhY3RpdmF0ZSk9XCJvbkFjdGl2YXRlKCRldmVudCwgaWkpXCJcbiAgICAgICAgKHRyZWVBY3Rpb24pPVwib25UcmVlQWN0aW9uKClcIlxuICAgICAgPlxuICAgICAgPC9kYXRhdGFibGUtYm9keS1jZWxsPlxuICAgIDwvZGl2PlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIERhdGFUYWJsZUJvZHlSb3dDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgQElucHV0KCkgc2V0IGNvbHVtbnModmFsOiBhbnlbXSkge1xuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWw7XG4gICAgdGhpcy5yZWNhbGN1bGF0ZUNvbHVtbnModmFsKTtcbiAgICB0aGlzLmJ1aWxkU3R5bGVzQnlHcm91cCgpO1xuICB9XG5cbiAgZ2V0IGNvbHVtbnMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGlubmVyV2lkdGgodmFsOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fY29sdW1ucykge1xuICAgICAgY29uc3QgY29sQnlQaW4gPSBjb2x1bW5zQnlQaW4odGhpcy5fY29sdW1ucyk7XG4gICAgICB0aGlzLl9jb2x1bW5Hcm91cFdpZHRocyA9IGNvbHVtbkdyb3VwV2lkdGhzKGNvbEJ5UGluLCB0aGlzLl9jb2x1bW5zKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbm5lcldpZHRoID0gdmFsO1xuICAgIHRoaXMucmVjYWxjdWxhdGVDb2x1bW5zKCk7XG4gICAgdGhpcy5idWlsZFN0eWxlc0J5R3JvdXAoKTtcbiAgfVxuXG4gIGdldCBpbm5lcldpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2lubmVyV2lkdGg7XG4gIH1cblxuICBASW5wdXQoKSBleHBhbmRlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueTtcbiAgQElucHV0KCkgcm93OiBhbnk7XG4gIEBJbnB1dCgpIGdyb3VwOiBhbnk7XG4gIEBJbnB1dCgpIGlzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHJvd0luZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIGRpc3BsYXlDaGVjazogYW55O1xuICBASW5wdXQoKSB0cmVlU3RhdHVzOiBUcmVlU3RhdHVzID0gJ2NvbGxhcHNlZCc7XG5cbiAgQElucHV0KClcbiAgc2V0IG9mZnNldFgodmFsOiBudW1iZXIpIHtcbiAgICB0aGlzLl9vZmZzZXRYID0gdmFsO1xuICAgIHRoaXMuYnVpbGRTdHlsZXNCeUdyb3VwKCk7XG4gIH1cbiAgZ2V0IG9mZnNldFgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29mZnNldFg7XG4gIH1cblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGNzc0NsYXNzKCkge1xuICAgIGxldCBjbHMgPSAnZGF0YXRhYmxlLWJvZHktcm93JztcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICBjbHMgKz0gJyBhY3RpdmUnO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb3dJbmRleCAlIDIgIT09IDApIHtcbiAgICAgIGNscyArPSAnIGRhdGF0YWJsZS1yb3ctb2RkJztcbiAgICB9XG4gICAgaWYgKHRoaXMucm93SW5kZXggJSAyID09PSAwKSB7XG4gICAgICBjbHMgKz0gJyBkYXRhdGFibGUtcm93LWV2ZW4nO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJvd0NsYXNzKSB7XG4gICAgICBjb25zdCByZXMgPSB0aGlzLnJvd0NsYXNzKHRoaXMucm93KTtcbiAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnc3RyaW5nJykge1xuICAgICAgICBjbHMgKz0gYCAke3Jlc31gO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocmVzKTtcbiAgICAgICAgZm9yIChjb25zdCBrIG9mIGtleXMpIHtcbiAgICAgICAgICBpZiAocmVzW2tdID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjbHMgKz0gYCAke2t9YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xzO1xuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdzdHlsZS5oZWlnaHQucHgnKVxuICBASW5wdXQoKVxuICByb3dIZWlnaHQ6IG51bWJlcjtcblxuICBASG9zdEJpbmRpbmcoJ3N0eWxlLndpZHRoLnB4JylcbiAgZ2V0IGNvbHVtbnNUb3RhbFdpZHRocygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5Hcm91cFdpZHRocy50b3RhbDtcbiAgfVxuXG4gIEBPdXRwdXQoKSBhY3RpdmF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB0cmVlQWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBfZWxlbWVudDogYW55O1xuICBfY29sdW1uR3JvdXBXaWR0aHM6IGFueTtcbiAgX2NvbHVtbnNCeVBpbjogYW55O1xuICBfb2Zmc2V0WDogbnVtYmVyO1xuICBfY29sdW1uczogYW55W107XG4gIF9pbm5lcldpZHRoOiBudW1iZXI7XG4gIF9ncm91cFN0eWxlczogeyBbcHJvcDogc3RyaW5nXToge30gfSA9IHtcbiAgICBsZWZ0OiB7fSxcbiAgICBjZW50ZXI6IHt9LFxuICAgIHJpZ2h0OiB7fVxuICB9O1xuXG4gIHByaXZhdGUgX3Jvd0RpZmZlcjogS2V5VmFsdWVEaWZmZXI8e30sIHt9PjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcbiAgICBAU2tpcFNlbGYoKSBwcml2YXRlIHNjcm9sbGJhckhlbHBlcjogU2Nyb2xsYmFySGVscGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIGVsZW1lbnQ6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLl9yb3dEaWZmZXIgPSBkaWZmZXJzLmZpbmQoe30pLmNyZWF0ZSgpO1xuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yb3dEaWZmZXIuZGlmZih0aGlzLnJvdykpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeUdyb3VwcyhpbmRleDogbnVtYmVyLCBjb2xHcm91cDogYW55KTogYW55IHtcbiAgICByZXR1cm4gY29sR3JvdXAudHlwZTtcbiAgfVxuXG4gIGNvbHVtblRyYWNraW5nRm4oaW5kZXg6IG51bWJlciwgY29sdW1uOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBjb2x1bW4uJCRpZDtcbiAgfVxuXG4gIGJ1aWxkU3R5bGVzQnlHcm91cCgpIHtcbiAgICB0aGlzLl9ncm91cFN0eWxlcy5sZWZ0ID0gdGhpcy5jYWxjU3R5bGVzQnlHcm91cCgnbGVmdCcpO1xuICAgIHRoaXMuX2dyb3VwU3R5bGVzLmNlbnRlciA9IHRoaXMuY2FsY1N0eWxlc0J5R3JvdXAoJ2NlbnRlcicpO1xuICAgIHRoaXMuX2dyb3VwU3R5bGVzLnJpZ2h0ID0gdGhpcy5jYWxjU3R5bGVzQnlHcm91cCgncmlnaHQnKTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2FsY1N0eWxlc0J5R3JvdXAoZ3JvdXA6IHN0cmluZykge1xuICAgIGNvbnN0IHdpZHRocyA9IHRoaXMuX2NvbHVtbkdyb3VwV2lkdGhzO1xuICAgIGNvbnN0IG9mZnNldFggPSB0aGlzLm9mZnNldFg7XG5cbiAgICBjb25zdCBzdHlsZXMgPSB7XG4gICAgICB3aWR0aDogYCR7d2lkdGhzW2dyb3VwXX1weGBcbiAgICB9O1xuXG4gICAgaWYgKGdyb3VwID09PSAnbGVmdCcpIHtcbiAgICAgIHRyYW5zbGF0ZVhZKHN0eWxlcywgb2Zmc2V0WCwgMCk7XG4gICAgfSBlbHNlIGlmIChncm91cCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgY29uc3QgYm9keVdpZHRoID0gcGFyc2VJbnQodGhpcy5pbm5lcldpZHRoICsgJycsIDApO1xuICAgICAgY29uc3QgdG90YWxEaWZmID0gd2lkdGhzLnRvdGFsIC0gYm9keVdpZHRoO1xuICAgICAgY29uc3Qgb2Zmc2V0RGlmZiA9IHRvdGFsRGlmZiAtIG9mZnNldFg7XG4gICAgICBjb25zdCBvZmZzZXQgPSAob2Zmc2V0RGlmZiArIHRoaXMuc2Nyb2xsYmFySGVscGVyLndpZHRoKSAqIC0xO1xuICAgICAgdHJhbnNsYXRlWFkoc3R5bGVzLCBvZmZzZXQsIDApO1xuICAgIH1cblxuICAgIHJldHVybiBzdHlsZXM7XG4gIH1cblxuICBvbkFjdGl2YXRlKGV2ZW50OiBhbnksIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBldmVudC5jZWxsSW5kZXggPSBpbmRleDtcbiAgICBldmVudC5yb3dFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcbiAgICB0aGlzLmFjdGl2YXRlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGlzVGFyZ2V0Um93ID0gZXZlbnQudGFyZ2V0ID09PSB0aGlzLl9lbGVtZW50O1xuXG4gICAgY29uc3QgaXNBY3Rpb24gPVxuICAgICAga2V5Q29kZSA9PT0gS2V5cy5yZXR1cm4gfHxcbiAgICAgIGtleUNvZGUgPT09IEtleXMuZG93biB8fFxuICAgICAga2V5Q29kZSA9PT0gS2V5cy51cCB8fFxuICAgICAga2V5Q29kZSA9PT0gS2V5cy5sZWZ0IHx8XG4gICAgICBrZXlDb2RlID09PSBLZXlzLnJpZ2h0O1xuXG4gICAgaWYgKGlzQWN0aW9uICYmIGlzVGFyZ2V0Um93KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgIHRoaXMuYWN0aXZhdGUuZW1pdCh7XG4gICAgICAgIHR5cGU6ICdrZXlkb3duJyxcbiAgICAgICAgZXZlbnQsXG4gICAgICAgIHJvdzogdGhpcy5yb3csXG4gICAgICAgIHJvd0VsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBbJyRldmVudCddKVxuICBvbk1vdXNlZW50ZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGUuZW1pdCh7XG4gICAgICB0eXBlOiAnbW91c2VlbnRlcicsXG4gICAgICBldmVudCxcbiAgICAgIHJvdzogdGhpcy5yb3csXG4gICAgICByb3dFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgfSk7XG4gIH1cblxuICByZWNhbGN1bGF0ZUNvbHVtbnModmFsOiBhbnlbXSA9IHRoaXMuY29sdW1ucyk6IHZvaWQge1xuICAgIHRoaXMuX2NvbHVtbnMgPSB2YWw7XG4gICAgY29uc3QgY29sc0J5UGluID0gY29sdW1uc0J5UGluKHRoaXMuX2NvbHVtbnMpO1xuICAgIHRoaXMuX2NvbHVtbnNCeVBpbiA9IGNvbHVtbnNCeVBpbkFycih0aGlzLl9jb2x1bW5zKTtcbiAgICB0aGlzLl9jb2x1bW5Hcm91cFdpZHRocyA9IGNvbHVtbkdyb3VwV2lkdGhzKGNvbHNCeVBpbiwgdGhpcy5fY29sdW1ucyk7XG4gIH1cblxuICBvblRyZWVBY3Rpb24oKSB7XG4gICAgdGhpcy50cmVlQWN0aW9uLmVtaXQoKTtcbiAgfVxufVxuIl19
|