igniteui-angular 13.1.0-alpha.0 → 13.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -155,10 +155,10 @@ export class IgxPivotRowComponent extends IgxRowDirective {
155
155
  }
156
156
  }
157
157
  IgxPivotRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxPivotRowComponent, deps: [{ token: IGX_GRID_BASE }, { token: i1.IgxGridSelectionService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
158
- IgxPivotRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: IgxPivotRowComponent, selector: "igx-pivot-row", inputs: { pivotRowWidths: "pivotRowWidths", selected: "selected" }, host: { properties: { "attr.aria-selected": "this.selected" } }, providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], viewQueries: [{ propertyName: "headerTemplate", first: true, predicate: ["headerTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headerTemplateDefault", first: true, predicate: ["headerDefaultTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>", components: [{ type: i2.IgxPivotRowDimensionContentComponent, selector: "igx-pivot-row-dimension-content", inputs: ["intRow"] }, { type: i3.IgxGridCellComponent, selector: "igx-grid-cell", inputs: ["column", "intRow", "row", "rowData", "cellTemplate", "pinnedIndicator", "value", "formatter", "visibleColumnIndex", "cellSelectionMode", "lastSearchInfo", "lastPinned", "firstPinned", "editMode", "width", "active", "displayPinnedChip"] }, { type: i4.IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { type: i5.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "igxNotGrouped": i8.IgxGridNotGroupedPipe, "transactionState": i8.IgxGridTransactionStatePipe, "igxStringReplace": i8.IgxStringReplacePipe, "igxCellStyleClasses": i8.IgxGridCellStyleClassesPipe, "igxCellStyles": i8.IgxGridCellStylesPipe, "dataMapper": i8.IgxGridDataMapperPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
158
+ IgxPivotRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: IgxPivotRowComponent, selector: "igx-pivot-row", inputs: { pivotRowWidths: "pivotRowWidths", selected: "selected" }, host: { properties: { "attr.aria-selected": "this.selected" } }, providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], viewQueries: [{ propertyName: "headerTemplate", first: true, predicate: ["headerTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headerTemplateDefault", first: true, predicate: ["headerDefaultTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>", components: [{ type: i2.IgxPivotRowDimensionContentComponent, selector: "igx-pivot-row-dimension-content", inputs: ["intRow"] }, { type: i3.IgxGridCellComponent, selector: "igx-grid-cell", inputs: ["column", "intRow", "row", "rowData", "cellTemplate", "pinnedIndicator", "value", "formatter", "visibleColumnIndex", "cellSelectionMode", "lastSearchInfo", "lastPinned", "firstPinned", "editMode", "width", "active", "displayPinnedChip"] }, { type: i4.IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { type: i5.IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "igxNotGrouped": i8.IgxGridNotGroupedPipe, "transactionState": i8.IgxGridTransactionStatePipe, "igxStringReplace": i8.IgxStringReplacePipe, "igxCellStyleClasses": i8.IgxGridCellStyleClassesPipe, "igxCellStyles": i8.IgxGridCellStylesPipe, "dataMapper": i8.IgxGridDataMapperPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
159
159
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxPivotRowComponent, decorators: [{
160
160
  type: Component,
161
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-pivot-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>" }]
161
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-pivot-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>" }]
162
162
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
163
163
  type: Inject,
164
164
  args: [IGX_GRID_BASE]
@@ -176,4 +176,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
176
176
  type: HostBinding,
177
177
  args: ['attr.aria-selected']
178
178
  }] } });
179
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3Qtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBR1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQUd4RSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQU9qQyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQXVDckQsWUFDa0MsSUFBbUIsRUFDMUMsZ0JBQXlDLEVBQ3pDLE9BQWdDLEVBQ2hDLEdBQXNCLEVBQ25CLFFBQWtDLEVBQ2xDLE9BQXlCO1FBRW5DLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBUGQsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUMxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQW1C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Z0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPekQscUJBQXFCO3NCQUQzQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWM1RCxRQUFRO3NCQUZsQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgSW5qZWN0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlIH0gZnJvbSAnLi4vcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJUGl2b3REaW1lbnNpb24sIElQaXZvdERpbWVuc2lvbkRhdGEgfSBmcm9tICcuL3Bpdm90LWdyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBpdm90VXRpbCB9IGZyb20gJy4vcGl2b3QtdXRpbCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUdYX0dSSURfQkFTRSwgUGl2b3RHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cblxuY29uc3QgTUlOSU1VTV9DT0xVTU5fV0lEVEggPSAyMDA7XG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1waXZvdC1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9waXZvdC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Um93RGlyZWN0aXZlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hQaXZvdFJvd0NvbXBvbmVudCkgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RSb3dDb21wb25lbnQgZXh0ZW5kcyBJZ3hSb3dEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGl2b3RSb3dXaWR0aHM6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaGVhZGVyVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckRlZmF1bHRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZURlZmF1bHQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uRGF0YTogSVBpdm90RGltZW5zaW9uRGF0YVtdID0gW107XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0RpbWVuc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93RGltZW5zaW9uRGF0YT8ubWFwKHggPT4geC5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbkRhdGEuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Um93RGltZW5zaW9uS2V5KHguY29sdW1uIGFzIElneENvbHVtbkNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzUGl2b3RSb3dTZWxlY3RlZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNTZWxlY3RlZDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogUGl2b3RHcmlkVHlwZSxcbiAgICAgICAgcHVibGljIHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJvdGVjdGVkIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgICApe1xuICAgICAgICBzdXBlcihncmlkLCBzZWxlY3Rpb25TZXJ2aWNlLCBlbGVtZW50LCBjZHIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSb3dEaW1lbnNpb25LZXkoY29sOiBJZ3hDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpbURhdGEgPSB0aGlzLnJvd0RpbWVuc2lvbkRhdGEuZmluZCh4ID0+IHguY29sdW1uLmZpZWxkID09PSBjb2wuZmllbGQpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gIFBpdm90VXRpbC5nZXRSZWNvcmRLZXkodGhpcy5kYXRhLCBkaW1EYXRhLmRpbWVuc2lvbiwgZGltRGF0YS5wcmV2RGltZW5zaW9ucywgdGhpcy5ncmlkLnBpdm90S2V5cyk7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBhbmRTdGF0ZShjb2w6IElneENvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5nZXRSb3dEaW1lbnNpb25LZXkoY29sKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExldmVsKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFbY29sLmZpZWxkICsgdGhpcy5ncmlkLnBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyB0aGlzLmdyaWQucGl2b3RLZXlzLmxldmVsXTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCByb3dEaW1Db25maWcgPSB0aGlzLmdyaWQucm93RGltZW5zaW9ucztcbiAgICAgICAgaWYgKGNoYW5nZXMuZGF0YSB8fCByb3dEaW1Db25maWcubGVuZ3RoICE9PSB0aGlzLnJvd0RpbWVuc2lvbkRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBuZXcgcm93RGltZW5zaW9uIG9uIHJvdyBkYXRhIGNoYW5nZVxuICAgICAgICAgICAgdGhpcy5yb3dEaW1lbnNpb25EYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLnZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdEZyb21EaW1lbnNpb25zKHJvd0RpbUNvbmZpZywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMucGl2b3RSb3dXaWR0aHMgJiYgdGhpcy5yb3dEaW1lbnNpb25EYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRpbSBvZiByb3dEaW1Db25maWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1EYXRhID0gUGl2b3RVdGlsLmdldERpbWVuc2lvbkxldmVsKGRpbSwgdGhpcy5kYXRhLCB0aGlzLmdyaWQucGl2b3RLZXlzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yb3dEaW1lbnNpb25EYXRhLmZpbmQoeCA9PiB4LmRpbWVuc2lvbi5tZW1iZXJOYW1lID09PSBkaW1EYXRhLmRpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgICAgICBkYXRhLmNvbHVtbi53aWR0aCA9IHRoaXMuZ3JpZC5yZXNvbHZlUm93RGltZW5zaW9uV2lkdGgoZGltKSArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2VsbENsYXNzKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbi52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbi52YWx1ZXNbMF0uc3R5bGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbE5hbWUgPSBjb2wuZmllbGQuc3BsaXQodGhpcy5ncmlkLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBtZWFzdXJlTmFtZSA9IGNvbE5hbWVbY29sTmFtZS5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzLmZpbmQodiA9PiB2Lm1lbWJlciA9PT0gbWVhc3VyZU5hbWUpPy5zdHlsZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ2VsbEFjdGl2ZSh2aXNpYmxlQ29sdW1uSW5kZXgpIHtcbiAgICAgICAgY29uc3QgbmF2ID0gdGhpcy5ncmlkLm5hdmlnYXRpb25cbiAgICAgICAgY29uc3Qgbm9kZSA9IG5hdi5hY3RpdmVOb2RlO1xuICAgICAgICByZXR1cm4gbm9kZSAmJiBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggIT09IDAgP1xuICAgICAgICAgICAgIW5hdi5pc1Jvd0hlYWRlckFjdGl2ZSAmJlxuICAgICAgICAgICAgc3VwZXIuaXNDZWxsQWN0aXZlKHZpc2libGVDb2x1bW5JbmRleCkgOlxuICAgICAgICAgICAgZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0UGl2b3RSb3coY29sOiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93U2VsZWN0aW9uID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Um93RGltZW5zaW9uS2V5KGNvbCk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KGtleSwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93QnlJZChrZXksIHRydWUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHRyYWN0RnJvbURpbWVuc2lvbnMocm93RGltQ29uZmlnOiBJUGl2b3REaW1lbnNpb25bXSwgbGV2ZWw6IG51bWJlcikge1xuICAgICAgICBsZXQgZGltSW5kZXggPSAwO1xuICAgICAgICBsZXQgY3VycmVudEx2bCA9IDA7XG4gICAgICAgIGN1cnJlbnRMdmwgKz0gbGV2ZWw7XG4gICAgICAgIGNvbnN0IHByZXYgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkaW0gb2Ygcm93RGltQ29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBkaW1EYXRhID0gUGl2b3RVdGlsLmdldERpbWVuc2lvbkxldmVsKGRpbSwgdGhpcy5kYXRhLCB0aGlzLmdyaWQucGl2b3RLZXlzKTtcbiAgICAgICAgICAgIGRpbUluZGV4ICs9IGRpbURhdGEubGV2ZWw7XG4gICAgICAgICAgICBjdXJyZW50THZsICs9IGRpbURhdGEubGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmV4dHJhY3RGcm9tRGltZW5zaW9uKGRpbURhdGEuZGltZW5zaW9uLCBkaW1JbmRleCwgY3VycmVudEx2bCwgZGltKTtcbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZGltZW5zaW9uOiBkaW1EYXRhLmRpbWVuc2lvbixcbiAgICAgICAgICAgICAgICBwcmV2RGltZW5zaW9uczogWy4uLnByZXZdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXYucHVzaChkaW1EYXRhLmRpbWVuc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZXh0cmFjdEZyb21EaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24sIGluZGV4OiBudW1iZXIgPSAwLCBsdmwgPSAwLCByb290RGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBkaW0ubWVtYmVyTmFtZTtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5kYXRhW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5fY3JlYXRlQ29sQ29tcG9uZW50KGZpZWxkLCBoZWFkZXIsIGluZGV4LCBkaW0sIGx2bCwgcm9vdERpbSk7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jcmVhdGVDb2xDb21wb25lbnQoZmllbGQ6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIgPSAwLFxuICAgICAgICAgZGltOiBJUGl2b3REaW1lbnNpb24sIGx2bCA9IDAsIHJvb3REaW06IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnZpZXdSZWYuY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IGZpZWxkO1xuICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgICByZWYuaW5zdGFuY2Uud2lkdGggPSB0aGlzLmdyaWQucmVzb2x2ZVJvd0RpbWVuc2lvbldpZHRoKHJvb3REaW0pICsgJ3B4JztcbiAgICAgICAgKHJlZiBhcyBhbnkpLmluc3RhbmNlLl92SW5kZXggPSB0aGlzLmdyaWQuY29sdW1ucy5sZW5ndGggKyBpbmRleCArIHRoaXMuaW5kZXggKiB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MubGVuZ3RoO1xuICAgICAgICBpZiAoZGltLmNoaWxkTGV2ZWwgJiYgbHZsID49IFBpdm90VXRpbC5nZXRUb3RhbEx2bCh0aGlzLmRhdGEsIHRoaXMuZ3JpZC5waXZvdEtleXMpKSB7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZURlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZi5pbnN0YW5jZTtcbiAgICB9XG59XG4iLCI8IS0tIFJvdyBEaW1lbnNpb24gLS0+XG48ZGl2ICNyb3dEaW1lbnNpb25Db250YWluZXI+XG4gICAgPGlneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZFwiIFtncmlkXT1cImdyaWRcIiBbaGFzTVJMXT1cImdyaWQuaGFzQ29sdW1uTGF5b3V0c1wiXG4gICAgICAgIFtkZW5zaXR5XT1cImdyaWQuZGlzcGxheURlbnNpdHlcIiBbYWN0aXZlRGVzY2VuZGFudF09XCJncmlkLmFjdGl2ZURlc2NlbmRhbnRcIiBbd2lkdGhdPVwiZ3JpZC5waXZvdFJvd1dpZHRoc1wiXG4gICAgICAgIFt1bnBpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwicm93RGltZW5zaW9uXCIgKHNjcm9sbCk9XCJncmlkLnByZXZlbnRIZWFkZXJTY3JvbGwoJGV2ZW50KVwiIFtpbnRSb3ddPVwidGhpc1wiPlxuICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbjwvZGl2PlxuXG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJwaW5uZWRDb2x1bW5zLmxlbmd0aCA+IDAgJiYgZ3JpZC5pc1Bpbm5pbmdUb1N0YXJ0XCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicGlubmVkQ2VsbHNUZW1wbGF0ZTsgY29udGV4dDogdGhpc1wiPjwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LWNvbCBbaWd4R3JpZEZvck9mXT1cInVucGlubmVkQ29sdW1ucyB8IGlneE5vdEdyb3VwZWRcIlxuICAgIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwiZ3JpZC5wYXJlbnRWaXJ0RGlyXCIgbGV0LWNvbEluZGV4PVwiaW5kZXhcIiBbaWd4Rm9yU2l6ZVByb3BOYW1lXT0nXCJjYWxjUGl4ZWxXaWR0aFwiJ1xuICAgIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCInaG9yaXpvbnRhbCdcIiBbaWd4Rm9yQ29udGFpbmVyU2l6ZV09J2dyaWQudW5waW5uZWRXaWR0aCdcbiAgICBbaWd4Rm9yVHJhY2tCeV09J2dyaWQudHJhY2tDb2x1bW5DaGFuZ2VzJyAjaWd4RGlyUmVmPlxuICAgIDxpZ3gtZ3JpZC1jZWxsICNjZWxsIGNsYXNzPVwiaWd4LWdyaWRfX3RkIGlneC1ncmlkX190ZC0tZndcIlxuICAgICAgICBbY2xhc3MuaWd4LWdyaWRfX3RkLS1lZGl0ZWRdPVwia2V5IHwgdHJhbnNhY3Rpb25TdGF0ZTpjb2wuZmllbGQ6Z3JpZC5yb3dFZGl0YWJsZTpncmlkLnRyYW5zYWN0aW9uczpncmlkLnBpcGVUcmlnZ2VyOmdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5jZWxsOmdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5yb3dcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdyaWRJRCArICdfJyArIGNvbC5maWVsZCB8IGlneFN0cmluZ1JlcGxhY2U6Jy4nOidfJ1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLW51bWJlcl09XCJjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLWJvb2xdPVwiY29sLmRhdGFUeXBlID09PSAnYm9vbGVhbidcIlxuICAgICAgICBbbmdDbGFzc109XCJ0aGlzLmdldENlbGxDbGFzcyhjb2wpIHwgaWd4Q2VsbFN0eWxlQ2xhc3NlczpkYXRhW2NvbC5maWVsZF06ZGF0YTpjb2wuZmllbGQ6dmlld0luZGV4OmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJjb2wuY2VsbFN0eWxlcyB8IGlneENlbGxTdHlsZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImNvbC5lZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudGFyZ2V0SW5FZGl0KGluZGV4LCBjb2wuaW5kZXgpXCIgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICBbZm9ybWF0dGVyXT1cImNvbC5mb3JtYXR0ZXJcIiBbaW50Um93XT1cInRoaXNcIiBbYWN0aXZlXT1cImlzQ2VsbEFjdGl2ZShjb2wudmlzaWJsZUluZGV4KVwiXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImNlbGxIZWlnaHRcIiBbZGF0YV09XCJkYXRhXCIgW3N0eWxlLm1pbi13aWR0aF09XCJjb2wud2lkdGhcIiBbc3R5bGUubWF4LXdpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzXT1cImNvbC53aWR0aFwiIFt3aWR0aF09XCJjb2wuZ2V0Q2VsbFdpZHRoKClcIiBbdmlzaWJsZUNvbHVtbkluZGV4XT1cImNvbC52aXNpYmxlSW5kZXhcIlxuICAgICAgICBbdmFsdWVdPVwiZGF0YSB8IGRhdGFNYXBwZXI6Y29sLmZpZWxkOmdyaWQucGlwZVRyaWdnZXI6ZGF0YVtjb2wuZmllbGRdOmNvbC5oYXNOZXN0ZWRQYXRoXCJcbiAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJjb2wuYm9keVRlbXBsYXRlXCIgW2xhc3RTZWFyY2hJbmZvXT1cImdyaWQubGFzdFNlYXJjaEluZm9cIlxuICAgICAgICBbY2VsbFNlbGVjdGlvbk1vZGVdPVwiZ3JpZC5jZWxsU2VsZWN0aW9uXCIgW2Rpc3BsYXlQaW5uZWRDaGlwXT1cInNob3VsZERpc3BsYXlQaW5uZWRDaGlwKGNvbC52aXNpYmxlSW5kZXgpXCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cImdyaWQubmF2aWdhdGlvbi5mb2N1c091dFJvd0hlYWRlcigkZXZlbnQpXCI+XG4gICAgPC9pZ3gtZ3JpZC1jZWxsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInBpbm5lZENvbHVtbnMubGVuZ3RoID4gMCAmJiAhZ3JpZC5pc1Bpbm5pbmdUb1N0YXJ0XCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicGlubmVkQ2VsbHNUZW1wbGF0ZTsgY29udGV4dDogdGhpc1wiPjwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNyb3dTZWxlY3RvckJhc2VUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2NieC1wYWRkaW5nXCI+XG4gICAgICAgIDxpZ3gtY2hlY2tib3ggW3RhYmluZGV4XT1cIi0xXCIgW3JlYWRvbmx5XT1cInRydWVcIiBbY2hlY2tlZF09XCJzZWxlY3RlZFwiIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiZGVsZXRlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZVRyYW5zaXRpb25zXT1cImdyaWQuZGlzYWJsZVRyYW5zaXRpb25zXCIgW2FyaWEtbGFiZWxdPVwicm93Q2hlY2tib3hBcmlhTGFiZWxcIj5cbiAgICAgICAgPC9pZ3gtY2hlY2tib3g+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Bpbm5lZENlbGxzVGVtcGxhdGUgbGV0LWNvbD5cbiAgICA8aWd4LWdyaWQtY2VsbCAqbmdGb3I9XCJsZXQgY29sIG9mIHBpbm5lZENvbHVtbnMgfCBpZ3hOb3RHcm91cGVkXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fdGQgaWd4LWdyaWRfX3RkLS1mdyBpZ3gtZ3JpZF9fdGQtLXBpbm5lZFwiXG4gICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLWVkaXRlZF09XCJrZXkgfCB0cmFuc2FjdGlvblN0YXRlOmNvbC5maWVsZDpncmlkLnJvd0VkaXRhYmxlOmdyaWQudHJhbnNhY3Rpb25zOmdyaWQucGlwZVRyaWdnZXI6Z3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmNlbGw6Z3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLnJvd1wiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ3JpZElEICsgJ18nICsgY29sLmZpZWxkIHwgaWd4U3RyaW5nUmVwbGFjZTonLic6J18nXCJcbiAgICAgICAgW2NsYXNzLmlneC1ncmlkX190ZC0tbnVtYmVyXT1cImNvbC5kYXRhVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmRhdGFUeXBlID09PSAncGVyY2VudCcgfHwgY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29sLmNlbGxDbGFzc2VzIHwgaWd4Q2VsbFN0eWxlQ2xhc3NlczpkYXRhW2NvbC5maWVsZF06ZGF0YTpjb2wuZmllbGQ6dmlld0luZGV4OmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJjb2wuY2VsbFN0eWxlcyB8IGlneENlbGxTdHlsZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImNvbC5lZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudGFyZ2V0SW5FZGl0KGluZGV4LCBjb2wuaW5kZXgpXCIgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICBbZm9ybWF0dGVyXT1cImNvbC5mb3JtYXR0ZXJcIiBbaW50Um93XT1cInRoaXNcIiBbYWN0aXZlXT1cImlzQ2VsbEFjdGl2ZShjb2wudmlzaWJsZUluZGV4KVwiXG4gICAgICAgIFtmaXJzdFBpbm5lZF09XCJjb2wuaXNGaXJzdFBpbm5lZFwiIFtsYXN0UGlubmVkXT1cImNvbC5pc0xhc3RQaW5uZWRcIiBbc3R5bGUubWluLWhlaWdodC5weF09XCJjZWxsSGVpZ2h0XCJcbiAgICAgICAgW2RhdGFdPVwiZGF0YVwiIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2wud2lkdGhcIiBbc3R5bGUuZmxleC1iYXNpc109XCJjb2wud2lkdGhcIlxuICAgICAgICBbc3R5bGUubGVmdF09XCJjb2wucmlnaHRQaW5uZWRPZmZzZXRcIiBbd2lkdGhdPVwiY29sLmdldENlbGxXaWR0aCgpXCIgW3Zpc2libGVDb2x1bW5JbmRleF09XCJjb2wudmlzaWJsZUluZGV4XCJcbiAgICAgICAgW3ZhbHVlXT1cImRhdGEgfCBkYXRhTWFwcGVyOmNvbC5maWVsZDpncmlkLnBpcGVUcmlnZ2VyOmRhdGFbY29sLmZpZWxkXTpjb2wuaGFzTmVzdGVkUGF0aFwiXG4gICAgICAgIFtjZWxsVGVtcGxhdGVdPVwiY29sLmJvZHlUZW1wbGF0ZVwiIFtsYXN0U2VhcmNoSW5mb109XCJncmlkLmxhc3RTZWFyY2hJbmZvXCJcbiAgICAgICAgW2NlbGxTZWxlY3Rpb25Nb2RlXT1cImdyaWQuY2VsbFNlbGVjdGlvblwiIFtkaXNwbGF5UGlubmVkQ2hpcF09XCJzaG91bGREaXNwbGF5UGlubmVkQ2hpcChjb2wudmlzaWJsZUluZGV4KVwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJncmlkLm5hdmlnYXRpb24uZm9jdXNPdXRSb3dIZWFkZXIoJGV2ZW50KVwiPlxuICAgIDwvaWd4LWdyaWQtY2VsbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgICA8ZGl2IGNsYXNzPSdpZ3gtZ3JpZF9fdHItLWhlYWRlciBpZ3gtZ3JpZF9fcm93LWluZGVudGF0aW9uLS1sZXZlbC17e2dldExldmVsKGNvbHVtbil9fSdcbiAgICAgICAgKGNsaWNrKT1cInRoaXMuc2VsZWN0UGl2b3RSb3coY29sdW1uLCAkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBbYXR0ci5kcmFnZ2FibGVdPVwiIGZhbHNlXCIgKGNsaWNrKT1cImdyaWQudG9nZ2xlUm93KGdldFJvd0RpbWVuc2lvbktleShjb2x1bW4pKVwiPlxuICAgICAgICAgICAge3sgZ2V0RXhwYW5kU3RhdGUoY29sdW1uKSA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCd9fTwvaWd4LWljb24+XG4gICAgICAgIHt7Y29sdW1uLmhlYWRlcn19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlckRlZmF1bHRUZW1wbGF0ZSBsZXQtY29sdW1uPlxuXG4gICAgPGRpdiBjbGFzcz0naWd4LWdyaWRfX3RyLS1oZWFkZXIgaWd4LWdyaWRfX3Jvdy1pbmRlbnRhdGlvbi0tbGV2ZWwte3tnZXRMZXZlbChjb2x1bW4pfX0nXG4gICAgICAgIChjbGljayk9XCJ0aGlzLnNlbGVjdFBpdm90Um93KGNvbHVtbiwgJGV2ZW50KVwiPlxuICAgICAgICA8aWd4LWljb24gc3R5bGU9J2ZsZXgtc2hyaW5rOiAwOycgW2F0dHIuZHJhZ2dhYmxlXT1cIiBmYWxzZVwiPlxuICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICB7e2NvbHVtbi5oZWFkZXJ9fVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGl2b3Qtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9ncmlkcy9waXZvdC1ncmlkL3Bpdm90LXJvdy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvcGl2b3QtZ3JpZC9waXZvdC1yb3cuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBR1QsVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsTUFBTSxFQUdOLFdBQVcsRUFDWCxTQUFTLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBaUIsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7OztBQUd4RSxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQU9qQyxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQXVDckQsWUFDa0MsSUFBbUIsRUFDMUMsZ0JBQXlDLEVBQ3pDLE9BQWdDLEVBQ2hDLEdBQXNCLEVBQ25CLFFBQWtDLEVBQ2xDLE9BQXlCO1FBRW5DLEtBQUssQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBUGQsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUMxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBQ3pDLFlBQU8sR0FBUCxPQUFPLENBQXlCO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQW1C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Z0IsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFPekQscUJBQXFCO3NCQUQzQixTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWM1RCxRQUFRO3NCQUZsQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5wdXQsXG4gICAgSW5qZWN0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSWd4Um93RGlyZWN0aXZlIH0gZnJvbSAnLi4vcm93LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlbGVjdGlvbi9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBJUGl2b3REaW1lbnNpb24sIElQaXZvdERpbWVuc2lvbkRhdGEgfSBmcm9tICcuL3Bpdm90LWdyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBpdm90VXRpbCB9IGZyb20gJy4vcGl2b3QtdXRpbCc7XG5pbXBvcnQgeyBJZ3hDb2x1bW5Db21wb25lbnQgfSBmcm9tICcuLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUdYX0dSSURfQkFTRSwgUGl2b3RHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5cblxuY29uc3QgTUlOSU1VTV9DT0xVTU5fV0lEVEggPSAyMDA7XG5AQ29tcG9uZW50KHtcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzZWxlY3RvcjogJ2lneC1waXZvdC1yb3cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9waXZvdC1yb3cuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogSWd4Um93RGlyZWN0aXZlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJZ3hQaXZvdFJvd0NvbXBvbmVudCkgfV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4UGl2b3RSb3dDb21wb25lbnQgZXh0ZW5kcyBJZ3hSb3dEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcGl2b3RSb3dXaWR0aHM6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgnaGVhZGVyVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgaGVhZGVyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ2hlYWRlckRlZmF1bHRUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYsIHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBoZWFkZXJUZW1wbGF0ZURlZmF1bHQ6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwdWJsaWMgcm93RGltZW5zaW9uRGF0YTogSVBpdm90RGltZW5zaW9uRGF0YVtdID0gW107XG5cbiAgICBwdWJsaWMgZ2V0IHJvd0RpbWVuc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93RGltZW5zaW9uRGF0YT8ubWFwKHggPT4geC5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJylcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvd0RpbWVuc2lvbkRhdGEuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Um93RGltZW5zaW9uS2V5KHguY29sdW1uIGFzIElneENvbHVtbkNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzUGl2b3RSb3dTZWxlY3RlZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaXNTZWxlY3RlZDtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogUGl2b3RHcmlkVHlwZSxcbiAgICAgICAgcHVibGljIHNlbGVjdGlvblNlcnZpY2U6IElneEdyaWRTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJvdGVjdGVkIHZpZXdSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgICApe1xuICAgICAgICBzdXBlcihncmlkLCBzZWxlY3Rpb25TZXJ2aWNlLCBlbGVtZW50LCBjZHIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIGdldCB2aWV3SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRSb3dEaW1lbnNpb25LZXkoY29sOiBJZ3hDb2x1bW5Db21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpbURhdGEgPSB0aGlzLnJvd0RpbWVuc2lvbkRhdGEuZmluZCh4ID0+IHguY29sdW1uLmZpZWxkID09PSBjb2wuZmllbGQpO1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gIFBpdm90VXRpbC5nZXRSZWNvcmRLZXkodGhpcy5kYXRhLCBkaW1EYXRhLmRpbWVuc2lvbiwgZGltRGF0YS5wcmV2RGltZW5zaW9ucywgdGhpcy5ncmlkLnBpdm90S2V5cyk7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBhbmRTdGF0ZShjb2w6IElneENvbHVtbkNvbXBvbmVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19leHBhbnNpb25fc3RhdGUodGhpcy5nZXRSb3dEaW1lbnNpb25LZXkoY29sKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExldmVsKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFbY29sLmZpZWxkICsgdGhpcy5ncmlkLnBpdm90S2V5cy5yb3dEaW1lbnNpb25TZXBhcmF0b3IgKyB0aGlzLmdyaWQucGl2b3RLZXlzLmxldmVsXTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCByb3dEaW1Db25maWcgPSB0aGlzLmdyaWQucm93RGltZW5zaW9ucztcbiAgICAgICAgaWYgKGNoYW5nZXMuZGF0YSB8fCByb3dEaW1Db25maWcubGVuZ3RoICE9PSB0aGlzLnJvd0RpbWVuc2lvbkRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBnZW5lcmF0ZSBuZXcgcm93RGltZW5zaW9uIG9uIHJvdyBkYXRhIGNoYW5nZVxuICAgICAgICAgICAgdGhpcy5yb3dEaW1lbnNpb25EYXRhID0gW107XG4gICAgICAgICAgICB0aGlzLnZpZXdSZWYuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdEZyb21EaW1lbnNpb25zKHJvd0RpbUNvbmZpZywgMCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMucGl2b3RSb3dXaWR0aHMgJiYgdGhpcy5yb3dEaW1lbnNpb25EYXRhKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRpbSBvZiByb3dEaW1Db25maWcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1EYXRhID0gUGl2b3RVdGlsLmdldERpbWVuc2lvbkxldmVsKGRpbSwgdGhpcy5kYXRhLCB0aGlzLmdyaWQucGl2b3RLZXlzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5yb3dEaW1lbnNpb25EYXRhLmZpbmQoeCA9PiB4LmRpbWVuc2lvbi5tZW1iZXJOYW1lID09PSBkaW1EYXRhLmRpbWVuc2lvbi5tZW1iZXJOYW1lKTtcbiAgICAgICAgICAgICAgICBkYXRhLmNvbHVtbi53aWR0aCA9IHRoaXMuZ3JpZC5yZXNvbHZlUm93RGltZW5zaW9uV2lkdGgoZGltKSArICdweCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2VsbENsYXNzKGNvbDogSWd4Q29sdW1uQ29tcG9uZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbi52YWx1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbi52YWx1ZXNbMF0uc3R5bGVzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbE5hbWUgPSBjb2wuZmllbGQuc3BsaXQodGhpcy5ncmlkLnBpdm90S2V5cy5jb2x1bW5EaW1lbnNpb25TZXBhcmF0b3IpO1xuICAgICAgICBjb25zdCBtZWFzdXJlTmFtZSA9IGNvbE5hbWVbY29sTmFtZS5sZW5ndGggLSAxXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waXZvdENvbmZpZ3VyYXRpb24udmFsdWVzLmZpbmQodiA9PiB2Lm1lbWJlciA9PT0gbWVhc3VyZU5hbWUpPy5zdHlsZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ2VsbEFjdGl2ZSh2aXNpYmxlQ29sdW1uSW5kZXgpIHtcbiAgICAgICAgY29uc3QgbmF2ID0gdGhpcy5ncmlkLm5hdmlnYXRpb25cbiAgICAgICAgY29uc3Qgbm9kZSA9IG5hdi5hY3RpdmVOb2RlO1xuICAgICAgICByZXR1cm4gbm9kZSAmJiBPYmplY3Qua2V5cyhub2RlKS5sZW5ndGggIT09IDAgP1xuICAgICAgICAgICAgIW5hdi5pc1Jvd0hlYWRlckFjdGl2ZSAmJlxuICAgICAgICAgICAgc3VwZXIuaXNDZWxsQWN0aXZlKHZpc2libGVDb2x1bW5JbmRleCkgOlxuICAgICAgICAgICAgZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlbiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0UGl2b3RSb3coY29sOiBhbnksIGV2ZW50PzogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93U2VsZWN0aW9uID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Um93RGltZW5zaW9uS2V5KGNvbCk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5pc1Jvd1NlbGVjdGVkKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KGtleSwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93QnlJZChrZXksIHRydWUsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBleHRyYWN0RnJvbURpbWVuc2lvbnMocm93RGltQ29uZmlnOiBJUGl2b3REaW1lbnNpb25bXSwgbGV2ZWw6IG51bWJlcikge1xuICAgICAgICBsZXQgZGltSW5kZXggPSAwO1xuICAgICAgICBsZXQgY3VycmVudEx2bCA9IDA7XG4gICAgICAgIGN1cnJlbnRMdmwgKz0gbGV2ZWw7XG4gICAgICAgIGNvbnN0IHByZXYgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkaW0gb2Ygcm93RGltQ29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBkaW1EYXRhID0gUGl2b3RVdGlsLmdldERpbWVuc2lvbkxldmVsKGRpbSwgdGhpcy5kYXRhLCB0aGlzLmdyaWQucGl2b3RLZXlzKTtcbiAgICAgICAgICAgIGRpbUluZGV4ICs9IGRpbURhdGEubGV2ZWw7XG4gICAgICAgICAgICBjdXJyZW50THZsICs9IGRpbURhdGEubGV2ZWw7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmV4dHJhY3RGcm9tRGltZW5zaW9uKGRpbURhdGEuZGltZW5zaW9uLCBkaW1JbmRleCwgY3VycmVudEx2bCwgZGltKTtcbiAgICAgICAgICAgIHRoaXMucm93RGltZW5zaW9uRGF0YS5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZGltZW5zaW9uOiBkaW1EYXRhLmRpbWVuc2lvbixcbiAgICAgICAgICAgICAgICBwcmV2RGltZW5zaW9uczogWy4uLnByZXZdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXYucHVzaChkaW1EYXRhLmRpbWVuc2lvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZXh0cmFjdEZyb21EaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24sIGluZGV4OiBudW1iZXIgPSAwLCBsdmwgPSAwLCByb290RGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBkaW0ubWVtYmVyTmFtZTtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gdGhpcy5kYXRhW2ZpZWxkXTtcbiAgICAgICAgY29uc3QgY29sID0gdGhpcy5fY3JlYXRlQ29sQ29tcG9uZW50KGZpZWxkLCBoZWFkZXIsIGluZGV4LCBkaW0sIGx2bCwgcm9vdERpbSk7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9jcmVhdGVDb2xDb21wb25lbnQoZmllbGQ6IHN0cmluZywgaGVhZGVyOiBzdHJpbmcsIGluZGV4OiBudW1iZXIgPSAwLFxuICAgICAgICAgZGltOiBJUGl2b3REaW1lbnNpb24sIGx2bCA9IDAsIHJvb3REaW06IElQaXZvdERpbWVuc2lvbikge1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLnZpZXdSZWYuY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkNvbXBvbmVudCk7XG4gICAgICAgIHJlZi5pbnN0YW5jZS5maWVsZCA9IGZpZWxkO1xuICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyID0gaGVhZGVyO1xuICAgICAgICByZWYuaW5zdGFuY2Uud2lkdGggPSB0aGlzLmdyaWQucmVzb2x2ZVJvd0RpbWVuc2lvbldpZHRoKHJvb3REaW0pICsgJ3B4JztcbiAgICAgICAgKHJlZiBhcyBhbnkpLmluc3RhbmNlLl92SW5kZXggPSB0aGlzLmdyaWQuY29sdW1ucy5sZW5ndGggKyBpbmRleCArIHRoaXMuaW5kZXggKiB0aGlzLmdyaWQucGl2b3RDb25maWd1cmF0aW9uLnJvd3MubGVuZ3RoO1xuICAgICAgICBpZiAoZGltLmNoaWxkTGV2ZWwgJiYgbHZsID49IFBpdm90VXRpbC5nZXRUb3RhbEx2bCh0aGlzLmRhdGEsIHRoaXMuZ3JpZC5waXZvdEtleXMpKSB7XG4gICAgICAgICAgICByZWYuaW5zdGFuY2UuaGVhZGVyVGVtcGxhdGUgPSB0aGlzLmhlYWRlclRlbXBsYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVmLmluc3RhbmNlLmhlYWRlclRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZURlZmF1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZi5pbnN0YW5jZTtcbiAgICB9XG59XG4iLCI8IS0tIFJvdyBEaW1lbnNpb24gLS0+XG48ZGl2ICNyb3dEaW1lbnNpb25Db250YWluZXI+XG4gICAgPGlneC1waXZvdC1yb3ctZGltZW5zaW9uLWNvbnRlbnQgY2xhc3M9XCJpZ3gtZ3JpZC10aGVhZFwiIFtncmlkXT1cImdyaWRcIiBbaGFzTVJMXT1cImdyaWQuaGFzQ29sdW1uTGF5b3V0c1wiXG4gICAgICAgIFtkZW5zaXR5XT1cImdyaWQuZGlzcGxheURlbnNpdHlcIiBbYWN0aXZlRGVzY2VuZGFudF09XCJncmlkLmFjdGl2ZURlc2NlbmRhbnRcIiBbd2lkdGhdPVwiZ3JpZC5waXZvdFJvd1dpZHRoc1wiXG4gICAgICAgIFt1bnBpbm5lZENvbHVtbkNvbGxlY3Rpb25dPVwicm93RGltZW5zaW9uXCIgKHNjcm9sbCk9XCJncmlkLnByZXZlbnRIZWFkZXJTY3JvbGwoJGV2ZW50KVwiIFtpbnRSb3ddPVwidGhpc1wiPlxuICAgIDwvaWd4LXBpdm90LXJvdy1kaW1lbnNpb24tY29udGVudD5cbjwvZGl2PlxuXG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJwaW5uZWRDb2x1bW5zLmxlbmd0aCA+IDAgJiYgZ3JpZC5pc1Bpbm5pbmdUb1N0YXJ0XCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicGlubmVkQ2VsbHNUZW1wbGF0ZTsgY29udGV4dDogdGhpc1wiPjwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlIGlneEdyaWRGb3IgbGV0LWNvbCBbaWd4R3JpZEZvck9mXT1cInVucGlubmVkQ29sdW1ucyB8IGlneE5vdEdyb3VwZWRcIlxuICAgIFtpZ3hGb3JTY3JvbGxDb250YWluZXJdPVwiZ3JpZC5wYXJlbnRWaXJ0RGlyXCIgbGV0LWNvbEluZGV4PVwiaW5kZXhcIiBbaWd4Rm9yU2l6ZVByb3BOYW1lXT0nXCJjYWxjUGl4ZWxXaWR0aFwiJ1xuICAgIFtpZ3hGb3JTY3JvbGxPcmllbnRhdGlvbl09XCInaG9yaXpvbnRhbCdcIiBbaWd4Rm9yQ29udGFpbmVyU2l6ZV09J2dyaWQudW5waW5uZWRXaWR0aCdcbiAgICBbaWd4Rm9yVHJhY2tCeV09J2dyaWQudHJhY2tDb2x1bW5DaGFuZ2VzJyAjaWd4RGlyUmVmPlxuICAgIDxpZ3gtZ3JpZC1jZWxsICNjZWxsIGNsYXNzPVwiaWd4LWdyaWRfX3RkIGlneC1ncmlkX190ZC0tZndcIlxuICAgICAgICBbY2xhc3MuaWd4LWdyaWRfX3RkLS1lZGl0ZWRdPVwia2V5IHwgdHJhbnNhY3Rpb25TdGF0ZTpjb2wuZmllbGQ6Z3JpZC5yb3dFZGl0YWJsZTpncmlkLnRyYW5zYWN0aW9uczpncmlkLnBpcGVUcmlnZ2VyOmdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5jZWxsOmdyaWQuZ3JpZEFQSS5jcnVkU2VydmljZS5yb3dcIlxuICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImdyaWRJRCArICdfJyArIGNvbC5maWVsZCB8IGlneFN0cmluZ1JlcGxhY2U6Jy4nOidfJ1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLW51bWJlcl09XCJjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ3BlcmNlbnQnIHx8IGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5J1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLWJvb2xdPVwiY29sLmRhdGFUeXBlID09PSAnYm9vbGVhbidcIlxuICAgICAgICBbbmdDbGFzc109XCJ0aGlzLmdldENlbGxDbGFzcyhjb2wpIHwgaWd4Q2VsbFN0eWxlQ2xhc3NlczpkYXRhW2NvbC5maWVsZF06ZGF0YTpjb2wuZmllbGQ6dmlld0luZGV4OmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJjb2wuY2VsbFN0eWxlcyB8IGlneENlbGxTdHlsZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImNvbC5lZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudGFyZ2V0SW5FZGl0KGluZGV4LCBjb2wuaW5kZXgpXCIgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICBbZm9ybWF0dGVyXT1cImNvbC5mb3JtYXR0ZXJcIiBbaW50Um93XT1cInRoaXNcIiBbYWN0aXZlXT1cImlzQ2VsbEFjdGl2ZShjb2wudmlzaWJsZUluZGV4KVwiXG4gICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cImNlbGxIZWlnaHRcIiBbcm93RGF0YV09XCJkYXRhXCIgW3N0eWxlLm1pbi13aWR0aF09XCJjb2wud2lkdGhcIiBbc3R5bGUubWF4LXdpZHRoXT1cImNvbC53aWR0aFwiXG4gICAgICAgIFtzdHlsZS5mbGV4LWJhc2lzXT1cImNvbC53aWR0aFwiIFt3aWR0aF09XCJjb2wuZ2V0Q2VsbFdpZHRoKClcIiBbdmlzaWJsZUNvbHVtbkluZGV4XT1cImNvbC52aXNpYmxlSW5kZXhcIlxuICAgICAgICBbdmFsdWVdPVwiZGF0YSB8IGRhdGFNYXBwZXI6Y29sLmZpZWxkOmdyaWQucGlwZVRyaWdnZXI6ZGF0YVtjb2wuZmllbGRdOmNvbC5oYXNOZXN0ZWRQYXRoXCJcbiAgICAgICAgW2NlbGxUZW1wbGF0ZV09XCJjb2wuYm9keVRlbXBsYXRlXCIgW2xhc3RTZWFyY2hJbmZvXT1cImdyaWQubGFzdFNlYXJjaEluZm9cIlxuICAgICAgICBbY2VsbFNlbGVjdGlvbk1vZGVdPVwiZ3JpZC5jZWxsU2VsZWN0aW9uXCIgW2Rpc3BsYXlQaW5uZWRDaGlwXT1cInNob3VsZERpc3BsYXlQaW5uZWRDaGlwKGNvbC52aXNpYmxlSW5kZXgpXCJcbiAgICAgICAgKHBvaW50ZXJkb3duKT1cImdyaWQubmF2aWdhdGlvbi5mb2N1c091dFJvd0hlYWRlcigkZXZlbnQpXCI+XG4gICAgPC9pZ3gtZ3JpZC1jZWxsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInBpbm5lZENvbHVtbnMubGVuZ3RoID4gMCAmJiAhZ3JpZC5pc1Bpbm5pbmdUb1N0YXJ0XCI+XG4gICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicGlubmVkQ2VsbHNUZW1wbGF0ZTsgY29udGV4dDogdGhpc1wiPjwvbmctdGVtcGxhdGU+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNyb3dTZWxlY3RvckJhc2VUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWdyaWRfX2NieC1wYWRkaW5nXCI+XG4gICAgICAgIDxpZ3gtY2hlY2tib3ggW3RhYmluZGV4XT1cIi0xXCIgW3JlYWRvbmx5XT1cInRydWVcIiBbY2hlY2tlZF09XCJzZWxlY3RlZFwiIFtkaXNhYmxlUmlwcGxlXT1cInRydWVcIiBbZGlzYWJsZWRdPVwiZGVsZXRlZFwiXG4gICAgICAgICAgICBbZGlzYWJsZVRyYW5zaXRpb25zXT1cImdyaWQuZGlzYWJsZVRyYW5zaXRpb25zXCIgW2FyaWEtbGFiZWxdPVwicm93Q2hlY2tib3hBcmlhTGFiZWxcIj5cbiAgICAgICAgPC9pZ3gtY2hlY2tib3g+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Bpbm5lZENlbGxzVGVtcGxhdGUgbGV0LWNvbD5cbiAgICA8aWd4LWdyaWQtY2VsbCAqbmdGb3I9XCJsZXQgY29sIG9mIHBpbm5lZENvbHVtbnMgfCBpZ3hOb3RHcm91cGVkXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtZ3JpZF9fdGQgaWd4LWdyaWRfX3RkLS1mdyBpZ3gtZ3JpZF9fdGQtLXBpbm5lZFwiXG4gICAgICAgIFtjbGFzcy5pZ3gtZ3JpZF9fdGQtLWVkaXRlZF09XCJrZXkgfCB0cmFuc2FjdGlvblN0YXRlOmNvbC5maWVsZDpncmlkLnJvd0VkaXRhYmxlOmdyaWQudHJhbnNhY3Rpb25zOmdyaWQucGlwZVRyaWdnZXI6Z3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLmNlbGw6Z3JpZC5ncmlkQVBJLmNydWRTZXJ2aWNlLnJvd1wiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiZ3JpZElEICsgJ18nICsgY29sLmZpZWxkIHwgaWd4U3RyaW5nUmVwbGFjZTonLic6J18nXCJcbiAgICAgICAgW2NsYXNzLmlneC1ncmlkX190ZC0tbnVtYmVyXT1cImNvbC5kYXRhVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmRhdGFUeXBlID09PSAncGVyY2VudCcgfHwgY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knXCJcbiAgICAgICAgW25nQ2xhc3NdPVwiY29sLmNlbGxDbGFzc2VzIHwgaWd4Q2VsbFN0eWxlQ2xhc3NlczpkYXRhW2NvbC5maWVsZF06ZGF0YTpjb2wuZmllbGQ6dmlld0luZGV4OmdyaWQucGlwZVRyaWdnZXJcIlxuICAgICAgICBbbmdTdHlsZV09XCJjb2wuY2VsbFN0eWxlcyB8IGlneENlbGxTdHlsZXM6ZGF0YVtjb2wuZmllbGRdOmRhdGE6Y29sLmZpZWxkOnZpZXdJbmRleDpncmlkLnBpcGVUcmlnZ2VyXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImNvbC5lZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UudGFyZ2V0SW5FZGl0KGluZGV4LCBjb2wuaW5kZXgpXCIgW2NvbHVtbl09XCJjb2xcIlxuICAgICAgICBbZm9ybWF0dGVyXT1cImNvbC5mb3JtYXR0ZXJcIiBbaW50Um93XT1cInRoaXNcIiBbYWN0aXZlXT1cImlzQ2VsbEFjdGl2ZShjb2wudmlzaWJsZUluZGV4KVwiXG4gICAgICAgIFtmaXJzdFBpbm5lZF09XCJjb2wuaXNGaXJzdFBpbm5lZFwiIFtsYXN0UGlubmVkXT1cImNvbC5pc0xhc3RQaW5uZWRcIiBbc3R5bGUubWluLWhlaWdodC5weF09XCJjZWxsSGVpZ2h0XCJcbiAgICAgICAgW3Jvd0RhdGFdPVwiZGF0YVwiIFtzdHlsZS5taW4td2lkdGhdPVwiY29sLndpZHRoXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2wud2lkdGhcIiBbc3R5bGUuZmxleC1iYXNpc109XCJjb2wud2lkdGhcIlxuICAgICAgICBbc3R5bGUubGVmdF09XCJjb2wucmlnaHRQaW5uZWRPZmZzZXRcIiBbd2lkdGhdPVwiY29sLmdldENlbGxXaWR0aCgpXCIgW3Zpc2libGVDb2x1bW5JbmRleF09XCJjb2wudmlzaWJsZUluZGV4XCJcbiAgICAgICAgW3ZhbHVlXT1cImRhdGEgfCBkYXRhTWFwcGVyOmNvbC5maWVsZDpncmlkLnBpcGVUcmlnZ2VyOmRhdGFbY29sLmZpZWxkXTpjb2wuaGFzTmVzdGVkUGF0aFwiXG4gICAgICAgIFtjZWxsVGVtcGxhdGVdPVwiY29sLmJvZHlUZW1wbGF0ZVwiIFtsYXN0U2VhcmNoSW5mb109XCJncmlkLmxhc3RTZWFyY2hJbmZvXCJcbiAgICAgICAgW2NlbGxTZWxlY3Rpb25Nb2RlXT1cImdyaWQuY2VsbFNlbGVjdGlvblwiIFtkaXNwbGF5UGlubmVkQ2hpcF09XCJzaG91bGREaXNwbGF5UGlubmVkQ2hpcChjb2wudmlzaWJsZUluZGV4KVwiXG4gICAgICAgIChwb2ludGVyZG93bik9XCJncmlkLm5hdmlnYXRpb24uZm9jdXNPdXRSb3dIZWFkZXIoJGV2ZW50KVwiPlxuICAgIDwvaWd4LWdyaWQtY2VsbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgICA8ZGl2IGNsYXNzPSdpZ3gtZ3JpZF9fdHItLWhlYWRlciBpZ3gtZ3JpZF9fcm93LWluZGVudGF0aW9uLS1sZXZlbC17e2dldExldmVsKGNvbHVtbil9fSdcbiAgICAgICAgKGNsaWNrKT1cInRoaXMuc2VsZWN0UGl2b3RSb3coY29sdW1uLCAkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBbYXR0ci5kcmFnZ2FibGVdPVwiIGZhbHNlXCIgKGNsaWNrKT1cImdyaWQudG9nZ2xlUm93KGdldFJvd0RpbWVuc2lvbktleShjb2x1bW4pKVwiPlxuICAgICAgICAgICAge3sgZ2V0RXhwYW5kU3RhdGUoY29sdW1uKSA/ICdleHBhbmRfbW9yZScgOiAnY2hldnJvbl9yaWdodCd9fTwvaWd4LWljb24+XG4gICAgICAgIHt7Y29sdW1uLmhlYWRlcn19XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2hlYWRlckRlZmF1bHRUZW1wbGF0ZSBsZXQtY29sdW1uPlxuXG4gICAgPGRpdiBjbGFzcz0naWd4LWdyaWRfX3RyLS1oZWFkZXIgaWd4LWdyaWRfX3Jvdy1pbmRlbnRhdGlvbi0tbGV2ZWwte3tnZXRMZXZlbChjb2x1bW4pfX0nXG4gICAgICAgIChjbGljayk9XCJ0aGlzLnNlbGVjdFBpdm90Um93KGNvbHVtbiwgJGV2ZW50KVwiPlxuICAgICAgICA8aWd4LWljb24gc3R5bGU9J2ZsZXgtc2hyaW5rOiAwOycgW2F0dHIuZHJhZ2dhYmxlXT1cIiBmYWxzZVwiPlxuICAgICAgICA8L2lneC1pY29uPlxuICAgICAgICB7e2NvbHVtbi5oZWFkZXJ9fVxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -83915,10 +83915,10 @@ class IgxPivotRowComponent extends IgxRowDirective {
83915
83915
  }
83916
83916
  }
83917
83917
  IgxPivotRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxPivotRowComponent, deps: [{ token: IGX_GRID_BASE }, { token: IgxGridSelectionService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.ComponentFactoryResolver }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component });
83918
- IgxPivotRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: IgxPivotRowComponent, selector: "igx-pivot-row", inputs: { pivotRowWidths: "pivotRowWidths", selected: "selected" }, host: { properties: { "attr.aria-selected": "this.selected" } }, providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], viewQueries: [{ propertyName: "headerTemplate", first: true, predicate: ["headerTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headerTemplateDefault", first: true, predicate: ["headerDefaultTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>", components: [{ type: IgxPivotRowDimensionContentComponent, selector: "igx-pivot-row-dimension-content", inputs: ["intRow"] }, { type: IgxGridCellComponent, selector: "igx-grid-cell", inputs: ["column", "intRow", "row", "rowData", "cellTemplate", "pinnedIndicator", "value", "formatter", "visibleColumnIndex", "cellSelectionMode", "lastSearchInfo", "lastPinned", "firstPinned", "editMode", "width", "active", "displayPinnedChip"] }, { type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "igxNotGrouped": IgxGridNotGroupedPipe, "transactionState": IgxGridTransactionStatePipe, "igxStringReplace": IgxStringReplacePipe, "igxCellStyleClasses": IgxGridCellStyleClassesPipe, "igxCellStyles": IgxGridCellStylesPipe, "dataMapper": IgxGridDataMapperPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
83918
+ IgxPivotRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: IgxPivotRowComponent, selector: "igx-pivot-row", inputs: { pivotRowWidths: "pivotRowWidths", selected: "selected" }, host: { properties: { "attr.aria-selected": "this.selected" } }, providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], viewQueries: [{ propertyName: "headerTemplate", first: true, predicate: ["headerTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "headerTemplateDefault", first: true, predicate: ["headerDefaultTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>", components: [{ type: IgxPivotRowDimensionContentComponent, selector: "igx-pivot-row-dimension-content", inputs: ["intRow"] }, { type: IgxGridCellComponent, selector: "igx-grid-cell", inputs: ["column", "intRow", "row", "rowData", "cellTemplate", "pinnedIndicator", "value", "formatter", "visibleColumnIndex", "cellSelectionMode", "lastSearchInfo", "lastPinned", "firstPinned", "editMode", "width", "active", "displayPinnedChip"] }, { type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["id", "labelId", "value", "name", "tabindex", "labelPosition", "disableRipple", "required", "aria-labelledby", "aria-label", "indeterminate", "checked", "disabled", "readonly", "disableTransitions"], outputs: ["change"] }, { type: IgxIconComponent, selector: "igx-icon", inputs: ["family", "active", "name"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf"], outputs: ["dataChanging"] }, { type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "igxNotGrouped": IgxGridNotGroupedPipe, "transactionState": IgxGridTransactionStatePipe, "igxStringReplace": IgxStringReplacePipe, "igxCellStyleClasses": IgxGridCellStyleClassesPipe, "igxCellStyles": IgxGridCellStylesPipe, "dataMapper": IgxGridDataMapperPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
83919
83919
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: IgxPivotRowComponent, decorators: [{
83920
83920
  type: Component,
83921
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-pivot-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [data]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>" }]
83921
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-pivot-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxPivotRowComponent) }], template: "<!-- Row Dimension -->\n<div #rowDimensionContainer>\n <igx-pivot-row-dimension-content class=\"igx-grid-thead\" [grid]=\"grid\" [hasMRL]=\"grid.hasColumnLayouts\"\n [density]=\"grid.displayDensity\" [activeDescendant]=\"grid.activeDescendant\" [width]=\"grid.pivotRowWidths\"\n [unpinnedColumnCollection]=\"rowDimension\" (scroll)=\"grid.preventHeaderScroll($event)\" [intRow]=\"this\">\n </igx-pivot-row-dimension-content>\n</div>\n\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForSizePropName]='\"calcPixelWidth\"'\n [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]='grid.unpinnedWidth'\n [igxForTrackBy]='grid.trackColumnChanges' #igxDirRef>\n <igx-grid-cell #cell class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [ngClass]=\"this.getCellClass(col) | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [style.min-height.px]=\"cellHeight\" [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\"\n [style.flex-basis]=\"col.width\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-template *ngTemplateOutlet=\"pinnedCellsTemplate; context: this\"></ng-template>\n</ng-container>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"selected\" [disableRipple]=\"true\" [disabled]=\"deleted\"\n [disableTransitions]=\"grid.disableTransitions\" [aria-label]=\"rowCheckboxAriaLabel\">\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #pinnedCellsTemplate let-col>\n <igx-grid-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--pinned\"\n [class.igx-grid__td--edited]=\"key | transactionState:col.field:grid.rowEditable:grid.transactions:grid.pipeTrigger:grid.gridAPI.crudService.cell:grid.gridAPI.crudService.row\"\n [attr.aria-describedby]=\"gridID + '_' + col.field | igxStringReplace:'.':'_'\"\n [class.igx-grid__td--number]=\"col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency'\"\n [ngClass]=\"col.cellClasses | igxCellStyleClasses:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [ngStyle]=\"col.cellStyles | igxCellStyles:data[col.field]:data:col.field:viewIndex:grid.pipeTrigger\"\n [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\" [column]=\"col\"\n [formatter]=\"col.formatter\" [intRow]=\"this\" [active]=\"isCellActive(col.visibleIndex)\"\n [firstPinned]=\"col.isFirstPinned\" [lastPinned]=\"col.isLastPinned\" [style.min-height.px]=\"cellHeight\"\n [rowData]=\"data\" [style.min-width]=\"col.width\" [style.max-width]=\"col.width\" [style.flex-basis]=\"col.width\"\n [style.left]=\"col.rightPinnedOffset\" [width]=\"col.getCellWidth()\" [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n [cellTemplate]=\"col.bodyTemplate\" [lastSearchInfo]=\"grid.lastSearchInfo\"\n [cellSelectionMode]=\"grid.cellSelection\" [displayPinnedChip]=\"shouldDisplayPinnedChip(col.visibleIndex)\"\n (pointerdown)=\"grid.navigation.focusOutRowHeader($event)\">\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #headerTemplate let-column>\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon [attr.draggable]=\" false\" (click)=\"grid.toggleRow(getRowDimensionKey(column))\">\n {{ getExpandState(column) ? 'expand_more' : 'chevron_right'}}</igx-icon>\n {{column.header}}\n </div>\n</ng-template>\n\n<ng-template #headerDefaultTemplate let-column>\n\n <div class='igx-grid__tr--header igx-grid__row-indentation--level-{{getLevel(column)}}'\n (click)=\"this.selectPivotRow(column, $event)\">\n <igx-icon style='flex-shrink: 0;' [attr.draggable]=\" false\">\n </igx-icon>\n {{column.header}}\n </div>\n</ng-template>" }]
83922
83922
  }], ctorParameters: function () {
83923
83923
  return [{ type: undefined, decorators: [{
83924
83924
  type: Inject,