@tetacom/ng-components 1.0.132 → 1.0.133
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/esm2020/common/util/position-util.mjs +16 -5
- package/esm2020/component/table/service/table.service.mjs +7 -1
- package/esm2020/component/table/table-body/table-body.component.mjs +3 -3
- package/fesm2015/tetacom-ng-components.mjs +23 -6
- package/fesm2015/tetacom-ng-components.mjs.map +1 -1
- package/fesm2020/tetacom-ng-components.mjs +23 -6
- package/fesm2020/tetacom-ng-components.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -163,10 +163,10 @@ export class TableBodyComponent {
|
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
TableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableBodyComponent, deps: [{ token: i1.TableService }, { token: i0.ElementRef }, { token: i2.TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
166
|
-
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass", trackRow: "trackRow", trackColumns: "trackColumns" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i6.CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: i7.SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.NumberPipe, name: "tetaNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
166
|
+
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass", trackRow: "trackRow", trackColumns: "trackColumns" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i5.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i5.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i5.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i6.CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: i7.SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.NumberPipe, name: "tetaNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
167
167
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableBodyComponent, decorators: [{
|
|
168
168
|
type: Component,
|
|
169
|
-
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n" }]
|
|
169
|
+
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n" }]
|
|
170
170
|
}], ctorParameters: function () { return [{ type: i1.TableService }, { type: i0.ElementRef }, { type: i2.TetaConfigService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { virtual: [{
|
|
171
171
|
type: Input
|
|
172
172
|
}], activeRow: [{
|
|
@@ -192,4 +192,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
|
|
|
192
192
|
type: HostBinding,
|
|
193
193
|
args: ['class.table-body']
|
|
194
194
|
}] } });
|
|
195
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8sa0JBQWtCO0lBc0Q3QixZQUFvQixJQUFxQixFQUNyQixXQUF1QixFQUN2QixPQUEwQixFQUMxQixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXREbEMsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFTa0IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFXeEUsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsbUJBQWMsR0FBRyxVQUFVLENBQUM7UUFNcEIsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsV0FBTSxHQUFHLElBQUksQ0FBQztRQUVkLG1CQUFjLEdBQWEsRUFBRSxDQUFDO0lBeUJ0QyxDQUFDO0lBN0NELElBQUksSUFBSSxDQUFDLElBQVM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBaUJELElBQUksT0FBTyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQztRQUNqRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFZLEVBQUUsSUFBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVksRUFBRSxJQUFpQixFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBWSxFQUFFLElBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFZLEVBQUUsSUFBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0csQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBV0QsWUFBWSxDQUFDLEdBQU0sRUFBRSxLQUFpQjtRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDbEMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUN4RCxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLENBQUMsTUFBaUMsRUFBRSxFQUFFO1lBQy9DLE1BQU0sQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDL0QsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQy9DLENBQUM7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUN4QixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDOUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDakUsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO2FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2xDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0wsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLHdCQUF3QixLQUFLLElBQUksQ0FBZ0IsQ0FBQztnQkFDM0csR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUzthQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsTUFBbUI7UUFDbkMsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztRQUNELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQzVDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDcEQ7UUFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUM1QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFtQjtRQUNsQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUM1QyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxlQUFlLENBQUMsR0FBRyxFQUFFO1lBQzVDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUM1QyxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsTUFBTTtJQUNOLGtCQUFrQjtJQUNsQixJQUFJO0lBQ0osRUFBRTtJQUNGLDBEQUEwRDtJQUMxRCx3QkFBd0I7SUFDeEIsSUFBSTtJQUVJLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRU8sTUFBTSxDQUFDLFVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUMxQyxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsT0FBTyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVPLE1BQU0sQ0FBQyxVQUFVO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQ3RCLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQ2pCLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDM0MsQ0FBQyxDQUFDLEtBQUs7WUFDUCxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUN6QixJQUFJLENBQ0wsQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsVUFBVTtRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUN0QixDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUNqQixLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQzNDLENBQUMsQ0FBQyxLQUFLO1lBQ1AsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDekIsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDOzsrR0F2TVUsa0JBQWtCO21HQUFsQixrQkFBa0Isb2FBVWxCLHdCQUF3QixnREN6Q3JDLGtzS0F3SEE7MkZEekZhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTs0TEFHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNnRCxRQUFRO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFRixjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7VGFibGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHtEZXRhaWxDb21wb25lbnRCYXNlfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7QWdncmVnYXRpb25UeXBlfSBmcm9tICcuLi9lbnVtL2FnZ3JlZ2F0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1RldGFMb2NhbGlzYXRpb259IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWxvY2FsaXNhdGlvbic7XG5pbXBvcnQge1RldGFDb25maWdTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtYm9keScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYm9keS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBhY3RpdmVSb3c6IFQ7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogVFtdID0gW107XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFQsIGluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnk7XG4gIEBJbnB1dCgpIHRyYWNrQ29sdW1uczogKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pID0+IGFueTtcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHtzdGF0aWM6IGZhbHNlfSkgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlLWJvZHknKSBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQm9keUNsYXNzID0gdHJ1ZTtcblxuICBzZXQgZGF0YShkYXRhOiBUW10pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBsb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgdW5sb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgc2VsZWN0VHlwZUVudW0gPSBTZWxlY3RUeXBlO1xuICBsb2NrZWRGbGV4OiBudW1iZXI7XG4gIGxvY2tlZFdpZHRoOiBudW1iZXI7XG4gIHRvdGFsRmxleDogbnVtYmVyO1xuICB0b3RhbFdpZHRoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2RhdGE6IFRbXTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfb2JzOiBSZXNpemVPYnNlcnZlcjtcblxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSB0cnVlKTtcbiAgICB0aGlzLnVubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKChfKSA9PiBfLmxvY2tlZCA9PT0gZmFsc2UpO1xuICAgIGNvbnN0IHN0YXJ0V2lkdGggPSB0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuY2hlY2tCb3ggPyAyOCA6IDA7XG4gICAgdGhpcy5sb2NrZWRGbGV4ID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICB0aGlzLmxvY2tlZFdpZHRoID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgc3RhcnRXaWR0aCk7XG4gICAgdGhpcy50b3RhbEZsZXggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIuZmxleCwgMCk7XG4gICAgdGhpcy50b3RhbFdpZHRoID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG5cbiAgfVxuXG4gIHNldEFjdGl2ZVJvdyhyb3c6IFQsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuY3RybEtleSkge1xuICAgICAgdGhpcy5fc3ZjLnNldEFjdGl2ZVJvdyhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fY29uZmlnLmxvY2FsZTtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zdmMuY29sdW1ucywgdGhpcy5fc3ZjLmhpZGRlbkNvbHVtbnNdKVxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZXM6IFtUYWJsZUNvbHVtbltdLCBzdHJpbmdbXV0pID0+IHtcbiAgICAgICAgY29uc3QgW2NvbHVtbnMsIGhpZGRlbkNvbHVtbnNdID0gdmFsdWVzO1xuICAgICAgICB0aGlzLl9oaWRkZW5Db2x1bW5zID0gaGlkZGVuQ29sdW1ucztcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gQXJyYXlVdGlsLmZsYXR0ZW4oY29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5maWx0ZXIoXG4gICAgICAgICAgKF8pID0+IHRoaXMuX2hpZGRlbkNvbHVtbnMuaW5kZXhPZihfLm5hbWUpIDwgMFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKFxuICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSlcbiAgICApLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5kYXRhID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMudmlld3BvcnQ/LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGljdC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXhcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgIHRoaXMudmlld3BvcnQuc2Nyb2xsVG9JbmRleChpbmRleCwgJ2F1dG8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLnRhYmxlLXJvd1tkYXRhLXJvdz1cIiR7aW5kZXh9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgcm93Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChfKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93ID0gXztcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5hZGRSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZU9ic2VydmVyKClcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbjogVGFibGVDb2x1bW4pOiBudW1iZXIge1xuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuc3VtKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VtKGNvbHVtbi5uYW1lKSAvIHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNaW4oY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWF4KGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuc3VtKSB7XG4gICAgICByZXR1cm4gJ3N1bSc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gJ2F2Zyc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWluKSB7XG4gICAgICByZXR1cm4gJ21pbic7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gJ21heCc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIHRyYWNrUm93KGluZGV4OiBudW1iZXIsIHJvdzogVCk6IGFueSB7XG4gIC8vICAgaWYgKHJvd1snaWQnXSkge1xuICAvLyAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGluZGV4O1xuICAvLyB9XG4gIC8vXG4gIC8vIHRyYWNrQ29sdW1ucyhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogYW55IHtcbiAgLy8gICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIC8vIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icyA9IG5ldyBSZXNpemVPYnNlcnZlcigoXykgPT4ge1xuICAgICAgdGhpcy52aWV3cG9ydD8uY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX29icy5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icy51bm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9vYnMuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdW0oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZSgoYWNjdW0sIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoY3VycmVudFtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXgoY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA+PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG59XG4iLCI8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICpuZ0lmPVwidmlydHVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiMjhcIj5cbiAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YTt0ZW1wbGF0ZUNhY2hlU2l6ZTogMDsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuPGRpdiAqbmdJZj1cIiF2aXJ0dWFsXCJcbiAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZ2dUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVSb3cocm93LCAkZXZlbnQpXCJcbiAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd19vZGRdPVwicm93SW5kZXggJSAyID09PSAxXCJcbiAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzcyA/IHJvd0NsYXNzKHJvdywgcm93SW5kZXgpIDogJydcIlxuICAgICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdykgPj0gMFwiXG4gICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cInRvdGFsV2lkdGhcIlxuICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidG90YWxXaWR0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICpuZ0lmPVwibG9ja2VkLmxlbmd0aCA+IDBcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJyb3cgPT09IGFjdGl2ZVJvdyA/IDIgOiAxXCI+XG4gICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbCAqbmdJZj1cInNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIlxuICAgICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgPjwvdGV0YS1jZWxsPlxuICAgIDwvZGl2PlxuICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICA8dGV0YS1jZWxsXG4gICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHVubG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0P2RpY3RbY29sdW1uLm5hbWVdOltdXCJcbiAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICA+PC90ZXRhLWNlbGw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZ2dUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvY2FsZSB8IGFzeW5jIGFzIGxvY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICAgKm5nSWY9XCJhZ2dyZWdhdGVcIlxuICAgICAgICAgW2NsYXNzLnRhYmxlLXJvd192aXJ0dWFsXT1cInZpcnR1YWxcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cInRvdGFsV2lkdGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICAgKm5nSWY9XCJsb2NrZWQubGVuZ3RoID4gMFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwibG9ja2VkRmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIlxuICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50XCJcbiAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgICAge3tsb2NbZ2V0QWdncmVnYXRlVGV4dChjb2x1bW4pXX19OlxuICAgICAgICAgIHt7Z2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiXG4gICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50XCJcbiAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB1bmxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgIHt7bG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV19fTpcbiAgICAgICAge3tnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlciA6IDJ9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
195
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYm9keS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50L3RhYmxlL3RhYmxlLWJvZHkvdGFibGUtYm9keS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUlMLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxhQUFhLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBRzFELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7Ozs7OztBQVVoRSxNQUFNLE9BQU8sa0JBQWtCO0lBc0Q3QixZQUFvQixJQUFxQixFQUNyQixXQUF1QixFQUN2QixPQUEwQixFQUMxQixJQUF1QjtRQUh2QixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixZQUFPLEdBQVAsT0FBTyxDQUFtQjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXREbEMsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFTa0IsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFXeEUsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsYUFBUSxHQUFrQixFQUFFLENBQUM7UUFDN0IsbUJBQWMs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RUFDekIsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDOzsrR0F2TVUsa0JBQWtCO21HQUFsQixrQkFBa0Isb2FBVWxCLHdCQUF3QixnREN6Q3JDLGd1S0F3SEE7MkZEekZhLGtCQUFrQjtrQkFOOUIsU0FBUzsrQkFDRSxpQkFBaUIsbUJBR1YsdUJBQXVCLENBQUMsTUFBTTs0TEFHdEMsT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNnRCxRQUFRO3NCQUE3RCxTQUFTO3VCQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkFFRixjQUFjO3NCQUEvRCxXQUFXO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LCBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUYWJsZUNvbHVtbn0gZnJvbSAnLi4vY29udHJhY3QvdGFibGUtY29sdW1uJztcbmltcG9ydCB7VGFibGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHtEZXRhaWxDb21wb25lbnRCYXNlfSBmcm9tICcuLi9iYXNlL2RldGFpbC1jb21wb25lbnQtYmFzZSc7XG5pbXBvcnQge3Rha2VXaGlsZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtTZWxlY3RUeXBlfSBmcm9tICcuLi9lbnVtL3NlbGVjdC10eXBlLmVudW0nO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7QXJyYXlVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbC9hcnJheS11dGlsJztcbmltcG9ydCB7SURpY3Rpb25hcnl9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9jb250cmFjdC9pLWRpY3Rpb25hcnknO1xuaW1wb3J0IHtJSWROYW1lfSBmcm9tICcuLi8uLi8uLi9jb21tb24vY29udHJhY3QvaS1pZC1uYW1lJztcbmltcG9ydCB7QWdncmVnYXRpb25UeXBlfSBmcm9tICcuLi9lbnVtL2FnZ3JlZ2F0aW9uLXR5cGUuZW51bSc7XG5pbXBvcnQge0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQge1RldGFMb2NhbGlzYXRpb259IGZyb20gJy4uLy4uLy4uL2xvY2FsZS90ZXRhLWxvY2FsaXNhdGlvbic7XG5pbXBvcnQge1RldGFDb25maWdTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2NhbGUvdGV0YS1jb25maWcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtdGFibGUtYm9keScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1ib2R5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtYm9keS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVCb2R5Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB2aXJ0dWFsOiBib29sZWFuO1xuICBASW5wdXQoKSBhY3RpdmVSb3c6IFQ7XG4gIEBJbnB1dCgpIHNlbGVjdGVkUm93czogVFtdID0gW107XG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb21wb25lbnQ6IFR5cGU8RGV0YWlsQ29tcG9uZW50QmFzZTxUPj47XG4gIEBJbnB1dCgpIGFnZ3JlZ2F0ZTogYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0VHlwZTogU2VsZWN0VHlwZTtcbiAgQElucHV0KCkgcm93Q2xhc3M6IChyb3c6IFQsIGluZGV4PzogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRyYWNrUm93OiAoaW5kZXg6IG51bWJlciwgcm93OiBUKSA9PiBhbnk7XG4gIEBJbnB1dCgpIHRyYWNrQ29sdW1uczogKGluZGV4OiBudW1iZXIsIGNvbHVtbjogVGFibGVDb2x1bW4pID0+IGFueTtcbiAgQFZpZXdDaGlsZChDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQsIHtzdGF0aWM6IGZhbHNlfSkgdmlld3BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnRhYmxlLWJvZHknKSBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQm9keUNsYXNzID0gdHJ1ZTtcblxuICBzZXQgZGF0YShkYXRhOiBUW10pIHtcbiAgICB0aGlzLl9kYXRhID0gZGF0YTtcbiAgfVxuXG4gIGdldCBkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICB9XG5cbiAgZGljdDogSURpY3Rpb25hcnk8SUlkTmFtZTxhbnk+W10+O1xuICBsb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgdW5sb2NrZWQ6IFRhYmxlQ29sdW1uW10gPSBbXTtcbiAgc2VsZWN0VHlwZUVudW0gPSBTZWxlY3RUeXBlO1xuICBsb2NrZWRGbGV4OiBudW1iZXI7XG4gIGxvY2tlZFdpZHRoOiBudW1iZXI7XG4gIHRvdGFsRmxleDogbnVtYmVyO1xuICB0b3RhbFdpZHRoOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogVGFibGVDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9hbGl2ZSA9IHRydWU7XG4gIHByaXZhdGUgX2RhdGE6IFRbXTtcbiAgcHJpdmF0ZSBfaGlkZGVuQ29sdW1uczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfb2JzOiBSZXNpemVPYnNlcnZlcjtcblxuICBzZXQgY29sdW1ucyhjb2x1bW5zOiBUYWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgdGhpcy5sb2NrZWQgPSB0aGlzLl9jb2x1bW5zPy5maWx0ZXIoKF8pID0+IF8ubG9ja2VkID09PSB0cnVlKTtcbiAgICB0aGlzLnVubG9ja2VkID0gdGhpcy5fY29sdW1ucz8uZmlsdGVyKChfKSA9PiBfLmxvY2tlZCA9PT0gZmFsc2UpO1xuICAgIGNvbnN0IHN0YXJ0V2lkdGggPSB0aGlzLnNlbGVjdFR5cGUgPT09IFNlbGVjdFR5cGUuY2hlY2tCb3ggPyAyOCA6IDA7XG4gICAgdGhpcy5sb2NrZWRGbGV4ID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci5mbGV4LCAwKTtcbiAgICB0aGlzLmxvY2tlZFdpZHRoID0gdGhpcy5sb2NrZWQucmVkdWNlKChwcmV2OiBudW1iZXIsIGN1cnI6IFRhYmxlQ29sdW1uKSA9PiBwcmV2ICsgY3Vyci53aWR0aCwgc3RhcnRXaWR0aCk7XG4gICAgdGhpcy50b3RhbEZsZXggPSB0aGlzLl9jb2x1bW5zLnJlZHVjZSgocHJldjogbnVtYmVyLCBjdXJyOiBUYWJsZUNvbHVtbikgPT4gcHJldiArIGN1cnIuZmxleCwgMCk7XG4gICAgdGhpcy50b3RhbFdpZHRoID0gdGhpcy5fY29sdW1ucy5yZWR1Y2UoKHByZXY6IG51bWJlciwgY3VycjogVGFibGVDb2x1bW4pID0+IHByZXYgKyBjdXJyLndpZHRoLCBzdGFydFdpZHRoKTtcbiAgfVxuXG4gIGdldCBjb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgbG9jYWxlOiBPYnNlcnZhYmxlPFRldGFMb2NhbGlzYXRpb24+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3N2YzogVGFibGVTZXJ2aWNlPFQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jb25maWc6IFRldGFDb25maWdTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmKSB7XG5cbiAgfVxuXG4gIHNldEFjdGl2ZVJvdyhyb3c6IFQsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKCFldmVudC5zaGlmdEtleSAmJiAhZXZlbnQuY3RybEtleSkge1xuICAgICAgdGhpcy5fc3ZjLnNldEFjdGl2ZVJvdyhyb3cpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMubG9jYWxlID0gdGhpcy5fY29uZmlnLmxvY2FsZTtcbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9zdmMuY29sdW1ucywgdGhpcy5fc3ZjLmhpZGRlbkNvbHVtbnNdKVxuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZXM6IFtUYWJsZUNvbHVtbltdLCBzdHJpbmdbXV0pID0+IHtcbiAgICAgICAgY29uc3QgW2NvbHVtbnMsIGhpZGRlbkNvbHVtbnNdID0gdmFsdWVzO1xuICAgICAgICB0aGlzLl9oaWRkZW5Db2x1bW5zID0gaGlkZGVuQ29sdW1ucztcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gQXJyYXlVdGlsLmZsYXR0ZW4oY29sdW1ucywgJ2NvbHVtbnMnLCB0cnVlKS5maWx0ZXIoXG4gICAgICAgICAgKF8pID0+IHRoaXMuX2hpZGRlbkNvbHVtbnMuaW5kZXhPZihfLm5hbWUpIDwgMFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3N2Yy5kaXNwbGF5RGF0YS5waXBlKFxuICAgICAgdGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSlcbiAgICApLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5kYXRhID0gXztcbiAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMudmlld3BvcnQ/LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuZGljdC5waXBlKHRha2VXaGlsZSgoXykgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMuZGljdCA9IF87XG4gICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9zdmMuc2Nyb2xsSW5kZXhcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgIHRoaXMudmlld3BvcnQuc2Nyb2xsVG9JbmRleChpbmRleCwgJ2F1dG8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgLnRhYmxlLXJvd1tkYXRhLXJvdz1cIiR7aW5kZXh9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgcm93Py5zY3JvbGxJbnRvVmlldygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fc3ZjLmFjdGl2ZVJvd1xuICAgICAgLnBpcGUodGFrZVdoaWxlKChfKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChfKSA9PiB7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93ID0gXztcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gICAgdGhpcy5hZGRSZXNpemVPYnNlcnZlcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWxpdmUgPSBmYWxzZTtcbiAgICB0aGlzLnJlbW92ZVJlc2l6ZU9ic2VydmVyKClcbiAgfVxuXG4gIGdldEFnZ3JlZ2F0ZVZhbHVlKGNvbHVtbjogVGFibGVDb2x1bW4pOiBudW1iZXIge1xuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuc3VtKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTdW0oY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLmF2Zykge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U3VtKGNvbHVtbi5uYW1lKSAvIHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWluKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRNaW4oY29sdW1uLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoY29sdW1uLmFnZ3JlZ2F0ZSA9PT0gQWdncmVnYXRpb25UeXBlLm1heCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TWF4KGNvbHVtbi5uYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXRBZ2dyZWdhdGVUZXh0KGNvbHVtbjogVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuc3VtKSB7XG4gICAgICByZXR1cm4gJ3N1bSc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUuYXZnKSB7XG4gICAgICByZXR1cm4gJ2F2Zyc7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWluKSB7XG4gICAgICByZXR1cm4gJ21pbic7XG4gICAgfVxuICAgIGlmIChjb2x1bW4uYWdncmVnYXRlID09PSBBZ2dyZWdhdGlvblR5cGUubWF4KSB7XG4gICAgICByZXR1cm4gJ21heCc7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8vIHRyYWNrUm93KGluZGV4OiBudW1iZXIsIHJvdzogVCk6IGFueSB7XG4gIC8vICAgaWYgKHJvd1snaWQnXSkge1xuICAvLyAgICAgcmV0dXJuIHJvd1snaWQnXTtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGluZGV4O1xuICAvLyB9XG4gIC8vXG4gIC8vIHRyYWNrQ29sdW1ucyhpbmRleDogbnVtYmVyLCBjb2x1bW46IFRhYmxlQ29sdW1uKTogYW55IHtcbiAgLy8gICByZXR1cm4gY29sdW1uLm5hbWU7XG4gIC8vIH1cblxuICBwcml2YXRlIGFkZFJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icyA9IG5ldyBSZXNpemVPYnNlcnZlcigoXykgPT4ge1xuICAgICAgdGhpcy52aWV3cG9ydD8uY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX29icy5vYnNlcnZlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVJlc2l6ZU9ic2VydmVyKCkge1xuICAgIHRoaXMuX29icy51bm9ic2VydmUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl9vYnMuZGlzY29ubmVjdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdW0oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZSgoYWNjdW0sIGN1cnJlbnQpID0+IHtcbiAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQoY3VycmVudFtjb2x1bW5OYW1lXSk7XG4gICAgICByZXR1cm4gYWNjdW0gKyAoaXNOYU4odmFsKSA/IDAgOiB2YWwpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNaW4oY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA8PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXgoY29sdW1uTmFtZSkge1xuICAgIHJldHVybiB0aGlzLmRhdGE/LnJlZHVjZShcbiAgICAgIChhY2N1bSwgY3VycmVudCkgPT5cbiAgICAgICAgYWNjdW0gIT0gbnVsbCAmJiBhY2N1bSA+PSBjdXJyZW50W2NvbHVtbk5hbWVdXG4gICAgICAgICAgPyBhY2N1bVxuICAgICAgICAgIDogY3VycmVudFtjb2x1bW5OYW1lXSxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG59XG4iLCI8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICpuZ0lmPVwidmlydHVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFibGUtYm9keS1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwiMjhcIj5cbiAgPG5nLWNvbnRhaW5lciAqY2RrVmlydHVhbEZvcj1cImxldCByb3cgb2YgZGF0YTt0ZW1wbGF0ZUNhY2hlU2l6ZTogMDsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuPGRpdiAqbmdJZj1cIiF2aXJ0dWFsXCJcbiAgICAgY2xhc3M9XCJ0YWJsZS1ib2R5LWNvbnRhaW5lclwiPlxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrUm93O1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5VGVtcGxhdGU7IGNvbnRleHQ6IHtyb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4fVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFnZ3JlZ2F0ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZ2dUZW1wbGF0ZTtcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNib2R5VGVtcGxhdGUgbGV0LXJvdz1cInJvd1wiIGxldC1yb3dJbmRleD1cInJvd0luZGV4XCI+XG4gIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgIChjbGljayk9XCJzZXRBY3RpdmVSb3cocm93LCAkZXZlbnQpXCJcbiAgICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICAgW2NsYXNzLnRhYmxlLXJvd19vZGRdPVwicm93SW5kZXggJSAyID09PSAxXCJcbiAgICAgICBbbmdDbGFzc109XCJyb3dDbGFzcyA/IHJvd0NsYXNzKHJvdywgcm93SW5kZXgpIDogJydcIlxuICAgICAgIFtjbGFzcy50YWJsZS1yb3dfc2VsZWN0ZWRdPVwic2VsZWN0ZWRSb3dzICYmIHNlbGVjdGVkUm93cy5pbmRleE9mKHJvdykgPj0gMFwiXG4gICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cInRvdGFsV2lkdGhcIlxuICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwidG90YWxXaWR0aFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICpuZ0lmPVwibG9ja2VkLmxlbmd0aCA+IDBcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJsb2NrZWRGbGV4XCJcbiAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwibG9ja2VkV2lkdGhcIlxuICAgICAgICAgW3N0eWxlLnpJbmRleF09XCJyb3cgPT09IGFjdGl2ZVJvdyA/IDIgOiAxXCI+XG4gICAgICA8dGV0YS1zZWxlY3Rpb24tY2VsbCAqbmdJZj1cInNlbGVjdFR5cGUgPT09IHNlbGVjdFR5cGVFbnVtLmNoZWNrQm94ICYmIGxvY2tlZC5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIj48L3RldGEtc2VsZWN0aW9uLWNlbGw+XG4gICAgICA8dGV0YS1jZWxsXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgbG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICAgIFthdHRyLmRhdGEtcm93XT1cInJvd0luZGV4XCJcbiAgICAgICAgW2F0dHIuZGF0YS1jb2x1bW5dPVwiY29sdW1uLm5hbWVcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtmaWx0ZXJPcHRpb25zXT1cImRpY3Q/ZGljdFtjb2x1bW4ubmFtZV06W11cIlxuICAgICAgICBbZGljdF09XCJkaWN0XCJcbiAgICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgPjwvdGV0YS1jZWxsPlxuICAgIDwvZGl2PlxuICAgIDx0ZXRhLXNlbGVjdGlvbi1jZWxsICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3ddPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiPjwvdGV0YS1zZWxlY3Rpb24tY2VsbD5cbiAgICA8dGV0YS1jZWxsXG4gICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHVubG9ja2VkOyBsZXQgY29sSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tDb2x1bW5zO1wiXG4gICAgICBbYXR0ci5kYXRhLXJvd109XCJyb3dJbmRleFwiXG4gICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICBbZmlsdGVyT3B0aW9uc109XCJkaWN0P2RpY3RbY29sdW1uLm5hbWVdOltdXCJcbiAgICAgIFtkaWN0XT1cImRpY3RcIlxuICAgICAgW3Jvd109XCJyb3dcIlxuICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmNlbGxDbGFzc1wiXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwiY29sdW1uLmZsZXhcIlxuICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICA+PC90ZXRhLWNlbGw+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhZ2dUZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvY2FsZSB8IGFzeW5jIGFzIGxvY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dcIlxuICAgICAgICAgKm5nSWY9XCJhZ2dyZWdhdGVcIlxuICAgICAgICAgW2NsYXNzLnRhYmxlLXJvd192aXJ0dWFsXT1cInZpcnR1YWxcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJ0b3RhbEZsZXhcIlxuICAgICAgICAgW3N0eWxlLmZsZXgtYmFzaXMucHhdPVwidG90YWxXaWR0aFwiXG4gICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cInRvdGFsV2lkdGhcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yb3dfbG9ja2VkXCJcbiAgICAgICAgICAgKm5nSWY9XCJsb2NrZWQubGVuZ3RoID4gMFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWdyb3ddPVwibG9ja2VkRmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImxvY2tlZFdpZHRoXCJcbiAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2VsbCBhbGlnbi1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXG4gICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogMjhweDtcIlxuICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgICA8dGV0YS1pY29uIFtuYW1lXT1cIidzdW1Db2xvcidcIj48L3RldGEtaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50IGFnZ3JlZ2F0ZS1jZWxsXCJcbiAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICAgIFthdHRyLmRhdGEtY29sdW1uXT1cImNvbHVtbi5uYW1lXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY2VsbENsYXNzXCJcbiAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1ncm93XT1cImNvbHVtbi5mbGV4XCJcbiAgICAgICAgICAgICBbc3R5bGUuZmxleC1iYXNpcy5weF09XCJjb2x1bW4ud2lkdGhcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgICAge3tsb2NbZ2V0QWdncmVnYXRlVGV4dChjb2x1bW4pXX19OlxuICAgICAgICAgIHt7Z2V0QWdncmVnYXRlVmFsdWUoY29sdW1uKSB8IHRldGFOdW1iZXIgOiAyfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNlbGwgYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxuICAgICAgICAgICBzdHlsZT1cIndpZHRoOiAyOHB4O1wiXG4gICAgICAgICAgICpuZ0lmPVwic2VsZWN0VHlwZSA9PT0gc2VsZWN0VHlwZUVudW0uY2hlY2tCb3ggJiYgbG9ja2VkLmxlbmd0aCA8IDFcIj5cbiAgICAgICAgPHRldGEtaWNvbiBbbmFtZV09XCInc3VtQ29sb3InXCI+PC90ZXRhLWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjZWxsIGNlbGwtY29tcG9uZW50IGFnZ3JlZ2F0ZS1jZWxsXCJcbiAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB1bmxvY2tlZDsgbGV0IGNvbEluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQ29sdW1ucztcIlxuICAgICAgICAgICBbYXR0ci5kYXRhLWNvbHVtbl09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jZWxsQ2xhc3NcIlxuICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcbiAgICAgICAgICAgW3N0eWxlLmZsZXgtZ3Jvd109XCJjb2x1bW4uZmxleFwiXG4gICAgICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzLnB4XT1cImNvbHVtbi53aWR0aFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjZWxsLXRleHQgY2VsbC10ZXh0X251bWVyaWMgZm9udC10aXRsZS0zXCI+XG4gICAgICAgIHt7bG9jW2dldEFnZ3JlZ2F0ZVRleHQoY29sdW1uKV19fTpcbiAgICAgICAge3tnZXRBZ2dyZWdhdGVWYWx1ZShjb2x1bW4pIHwgdGV0YU51bWJlciA6IDJ9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
@@ -1155,6 +1155,9 @@ class PositionUtil {
|
|
|
1155
1155
|
if (rect.left < 0) {
|
|
1156
1156
|
rect.left = 0;
|
|
1157
1157
|
}
|
|
1158
|
+
if (rect.left + elementWidth > window.innerWidth) {
|
|
1159
|
+
rect.left = window.innerWidth - elementWidth;
|
|
1160
|
+
}
|
|
1158
1161
|
if (rect.top + elementHeight > window.innerHeight || rect.bottom < 0) {
|
|
1159
1162
|
rect.bottom = 0;
|
|
1160
1163
|
}
|
|
@@ -1167,10 +1170,18 @@ class PositionUtil {
|
|
|
1167
1170
|
if (verticalAlign === VerticalAlign.top || verticalAlign === VerticalAlign.innerTop) {
|
|
1168
1171
|
rect.maxHeight = containerPosition.top;
|
|
1169
1172
|
}
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1173
|
+
if (!isNaN(rect.left)) {
|
|
1174
|
+
rect.left = rect.left - transformedParentRect.left;
|
|
1175
|
+
}
|
|
1176
|
+
if (!isNaN(rect.right)) {
|
|
1177
|
+
rect.right = rect.right - transformedParentRect.left;
|
|
1178
|
+
}
|
|
1179
|
+
if (!isNaN(rect.top)) {
|
|
1180
|
+
rect.top = rect.top - transformedParentRect.top;
|
|
1181
|
+
}
|
|
1182
|
+
if (!isNaN(rect.bottom)) {
|
|
1183
|
+
rect.bottom = rect.bottom ? rect.bottom - transformedParentRect.bottom : rect.bottom;
|
|
1184
|
+
}
|
|
1174
1185
|
return rect;
|
|
1175
1186
|
}
|
|
1176
1187
|
static setElementPosition(element, rect) {
|
|
@@ -8085,6 +8096,12 @@ class TableService {
|
|
|
8085
8096
|
maxWidth = cell.scrollWidth;
|
|
8086
8097
|
}
|
|
8087
8098
|
});
|
|
8099
|
+
const aggCells = table.querySelectorAll(`.aggregate-cell[data-column="${column.name}"] .cell-text`);
|
|
8100
|
+
aggCells === null || aggCells === void 0 ? void 0 : aggCells.forEach((cell) => {
|
|
8101
|
+
if (cell.scrollWidth > maxWidth) {
|
|
8102
|
+
maxWidth = cell.scrollWidth;
|
|
8103
|
+
}
|
|
8104
|
+
});
|
|
8088
8105
|
column.flex = 0;
|
|
8089
8106
|
column.width = maxWidth + 20;
|
|
8090
8107
|
}
|
|
@@ -10232,10 +10249,10 @@ class TableBodyComponent {
|
|
|
10232
10249
|
}
|
|
10233
10250
|
}
|
|
10234
10251
|
TableBodyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableBodyComponent, deps: [{ token: TableService }, { token: i0.ElementRef }, { token: TetaConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
10235
|
-
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass", trackRow: "trackRow", trackColumns: "trackColumns" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i6.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: NumberPipe, name: "tetaNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10252
|
+
TableBodyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: TableBodyComponent, selector: "teta-table-body", inputs: { virtual: "virtual", activeRow: "activeRow", selectedRows: "selectedRows", additionalComponent: "additionalComponent", aggregate: "aggregate", selectType: "selectType", rowClass: "rowClass", trackRow: "trackRow", trackColumns: "trackColumns" }, host: { properties: { "class.table-body": "this.tableBodyClass" } }, viewQueries: [{ propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "teta-icon", inputs: ["name", "size", "palette", "class"] }, { kind: "directive", type: i6.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i6.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i6.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: CellComponent, selector: "teta-cell", inputs: ["column", "filterOptions", "dict", "row"] }, { kind: "component", type: SelectionCellComponent, selector: "teta-selection-cell", inputs: ["row"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: NumberPipe, name: "tetaNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10236
10253
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: TableBodyComponent, decorators: [{
|
|
10237
10254
|
type: Component,
|
|
10238
|
-
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n" }]
|
|
10255
|
+
args: [{ selector: 'teta-table-body', changeDetection: ChangeDetectionStrategy.OnPush, template: "<cdk-virtual-scroll-viewport *ngIf=\"virtual\"\n class=\"table-body-container\"\n [itemSize]=\"28\">\n <ng-container *cdkVirtualFor=\"let row of data;templateCacheSize: 0; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n</cdk-virtual-scroll-viewport>\n<div *ngIf=\"!virtual\"\n class=\"table-body-container\">\n <ng-container *ngFor=\"let row of data; let rowIndex = index; trackBy: trackRow;\">\n <ng-container *ngTemplateOutlet=\"bodyTemplate; context: {row: row, rowIndex: rowIndex}\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"aggregate\">\n <ng-container *ngTemplateOutlet=\"aggTemplate;\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #bodyTemplate let-row=\"row\" let-rowIndex=\"rowIndex\">\n <div class=\"table-row\"\n (click)=\"setActiveRow(row, $event)\"\n [attr.data-row]=\"rowIndex\"\n [class.table-row_odd]=\"rowIndex % 2 === 1\"\n [ngClass]=\"rowClass ? rowClass(row, rowIndex) : ''\"\n [class.table-row_selected]=\"selectedRows && selectedRows.indexOf(row) >= 0\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\"\n [style.zIndex]=\"row === activeRow ? 2 : 1\">\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n <teta-selection-cell *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\"\n [row]=\"row\"\n style=\"width: 28px;\"></teta-selection-cell>\n <teta-cell\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-row]=\"rowIndex\"\n [attr.data-column]=\"column.name\"\n [column]=\"column\"\n [filterOptions]=\"dict?dict[column.name]:[]\"\n [dict]=\"dict\"\n [row]=\"row\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\"\n ></teta-cell>\n </div>\n</ng-template>\n\n<ng-template #aggTemplate>\n <ng-container *ngIf=\"locale | async as loc\">\n <div class=\"table-row\"\n *ngIf=\"aggregate\"\n [class.table-row_virtual]=\"virtual\"\n [style.flex-grow]=\"totalFlex\"\n [style.flex-basis.px]=\"totalWidth\"\n [style.min-width.px]=\"totalWidth\">\n <div class=\"table-row_locked\"\n *ngIf=\"locked.length > 0\"\n [style.flex-grow]=\"lockedFlex\"\n [style.flex-basis.px]=\"lockedWidth\"\n [style.min-width.px]=\"lockedWidth\">\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of locked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n <div class=\"cell align-center justify-content-center\"\n style=\"width: 28px;\"\n *ngIf=\"selectType === selectTypeEnum.checkBox && locked.length < 1\">\n <teta-icon [name]=\"'sumColor'\"></teta-icon>\n </div>\n <div class=\"cell cell-component aggregate-cell\"\n *ngFor=\"let column of unlocked; let colIndex = index; trackBy: trackColumns;\"\n [attr.data-column]=\"column.name\"\n [ngClass]=\"column.cellClass\"\n [attr.tabindex]=\"0\"\n [style.flex-grow]=\"column.flex\"\n [style.flex-basis.px]=\"column.width\">\n <span class=\"cell-text cell-text_numeric font-title-3\">\n {{loc[getAggregateText(column)]}}:\n {{getAggregateValue(column) | tetaNumber : 2}}\n </span>\n </div>\n </div>\n </ng-container>\n</ng-template>\n" }]
|
|
10239
10256
|
}], ctorParameters: function () { return [{ type: TableService }, { type: i0.ElementRef }, { type: TetaConfigService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { virtual: [{
|
|
10240
10257
|
type: Input
|
|
10241
10258
|
}], activeRow: [{
|