{"version":3,"file":"igniteui-angular-grids-grid.mjs","sources":["../../../projects/igniteui-angular/grids/grid/src/grid-api.service.ts","../../../projects/igniteui-angular/grids/grid/src/groupby-row.component.ts","../../../projects/igniteui-angular/grids/grid/src/groupby-row.component.html","../../../projects/igniteui-angular/grids/grid/src/grouping/grid-group-by-area.component.ts","../../../projects/igniteui-angular/grids/core/src/grouping/group-by-area.component.html","../../../projects/igniteui-angular/grids/grid/src/grid.details.pipe.ts","../../../projects/igniteui-angular/grids/grid/src/grid.summary.pipe.ts","../../../projects/igniteui-angular/grids/grid/src/grid.pipes.ts","../../../projects/igniteui-angular/grids/grid/src/expandable-cell.component.ts","../../../projects/igniteui-angular/grids/grid/src/expandable-cell.component.html","../../../projects/igniteui-angular/grids/grid/src/grid-row.component.ts","../../../projects/igniteui-angular/grids/grid/src/grid-row.component.html","../../../projects/igniteui-angular/grids/grid/src/grid-base.directive.ts","../../../projects/igniteui-angular/grids/grid/src/grid.component.ts","../../../projects/igniteui-angular/grids/grid/src/grid.component.html","../../../projects/igniteui-angular/grids/grid/src/grid.module.ts","../../../projects/igniteui-angular/grids/grid/src/igniteui-angular-grids-grid.ts"],"sourcesContent":["import { GridBaseAPIService } from 'igniteui-angular/grids/core';\nimport { Injectable } from '@angular/core';\nimport { GridServiceType, GridType } from 'igniteui-angular/grids/core';\nimport { cloneArray, DataUtil, IGroupByExpandState, IGroupByRecord, IGroupingExpression } from 'igniteui-angular/core';\n\n@Injectable()\nexport class IgxGridAPIService extends GridBaseAPIService<GridType> implements GridServiceType {\n\n    public groupBy(expression: IGroupingExpression): void {\n        const groupingState = cloneArray(this.grid.groupingExpressions);\n        this.prepare_grouping_expression([groupingState], expression);\n        this.grid.groupingExpressions = groupingState;\n        this.arrange_sorting_expressions();\n    }\n\n    public groupBy_multiple(expressions: IGroupingExpression[]): void {\n        const groupingState = cloneArray(this.grid.groupingExpressions);\n\n        for (const each of expressions) {\n            this.prepare_grouping_expression([groupingState], each);\n        }\n\n        this.grid.groupingExpressions = groupingState;\n        this.arrange_sorting_expressions();\n    }\n\n    public override clear_groupby(name?: string | Array<string>) {\n        const groupingState = cloneArray(this.grid.groupingExpressions);\n\n        if (name) {\n            const names = typeof name === 'string' ? [name] : name;\n            const groupedCols = groupingState.filter((state) => names.indexOf(state.fieldName) < 0);\n            this.grid.groupingExpressions = groupedCols;\n            names.forEach((colName) => {\n                const grExprIndex = groupingState.findIndex((exp) => exp.fieldName === colName);\n                const grpExpandState = this.grid.groupingExpansionState;\n                /* remove expansion states related to the cleared group\n                   and all with deeper hierarchy than the cleared group */\n                const newExpandState = grpExpandState.filter((val) => val.hierarchy && val.hierarchy.length <= grExprIndex);\n                /* Do not set the new instance produced by filter\n                    when there are no differences between expansion states */\n                if (newExpandState.length !== grpExpandState.length) {\n                    this.grid.groupingExpansionState = newExpandState;\n                }\n            });\n        } else {\n            // clear all\n            this.grid.groupingExpressions = [];\n            this.grid.groupingExpansionState = [];\n        }\n    }\n\n    public groupBy_get_expanded_for_group(groupRow: IGroupByRecord): IGroupByExpandState {\n        const grState = this.grid.groupingExpansionState;\n        const hierarchy = DataUtil.getHierarchy(groupRow);\n        return grState.find((state) =>\n            DataUtil.isHierarchyMatch(\n                state.hierarchy || [{ fieldName: groupRow.expression.fieldName, value: groupRow.value }],\n                hierarchy,\n                this.grid.groupingExpressions));\n    }\n\n    public groupBy_is_row_in_group(groupRow: IGroupByRecord, rowID): boolean {\n        const grid = this.grid;\n        let rowInGroup = false;\n        groupRow.records.forEach(row => {\n            if (grid.primaryKey ? row[grid.primaryKey] === rowID : row === rowID) {\n                rowInGroup = true;\n            }\n        });\n        return rowInGroup;\n    }\n\n    public groupBy_toggle_group(groupRow: IGroupByRecord) {\n        const grid = this.grid;\n        if (grid.gridAPI.crudService.cellInEditMode) {\n            this.crudService.endEdit(false);\n        }\n\n        const expansionState = grid.groupingExpansionState;\n        const state: IGroupByExpandState = this.groupBy_get_expanded_for_group(groupRow);\n        if (state) {\n            state.expanded = !state.expanded;\n        } else {\n            expansionState.push({\n                expanded: !grid.groupsExpanded,\n                hierarchy: DataUtil.getHierarchy(groupRow)\n            });\n        }\n        this.grid.groupingExpansionState = [...expansionState];\n        if (grid.rowEditable) {\n            grid.repositionRowEditingOverlay(grid.gridAPI.crudService.rowInEditMode);\n        }\n    }\n    public set_grouprow_expansion_state(groupRow: IGroupByRecord, value: boolean) {\n        if (this.grid.isExpandedGroup(groupRow) !== value) {\n            this.groupBy_toggle_group(groupRow);\n        }\n    }\n\n    public groupBy_fully_expand_group(groupRow: IGroupByRecord) {\n        const state: IGroupByExpandState = this.groupBy_get_expanded_for_group(groupRow);\n        const expanded = state ? state.expanded : this.grid.groupsExpanded;\n        if (!expanded) {\n            this.groupBy_toggle_group(groupRow);\n        }\n        if (groupRow.groupParent) {\n            this.groupBy_fully_expand_group(groupRow.groupParent);\n        }\n    }\n\n    public groupBy_select_all_rows_in_group(groupRow: IGroupByRecord, clearPrevSelection: boolean) {\n        this.grid.selectionService.selectRowsWithNoEvent(this.grid.primaryKey ?\n            groupRow.records.map(x => x[this.grid.primaryKey]) : groupRow.records, clearPrevSelection);\n    }\n\n    public groupBy_deselect_all_rows_in_group(groupRow: IGroupByRecord) {\n        this.grid.selectionService.deselectRowsWithNoEvent(this.grid.primaryKey ?\n            groupRow.records.map(x => x[this.grid.primaryKey]) : groupRow.records);\n    }\n\n    public arrange_sorting_expressions() {\n        const groupingState = this.grid.groupingExpressions;\n        const sortingState = cloneArray(this.grid.sortingExpressions);\n        for (const grExpr of groupingState) {\n            const sortExprIndex = sortingState.findIndex((exp) => exp.fieldName === grExpr.fieldName);\n            if (sortExprIndex > -1) {\n                sortingState.splice(sortExprIndex, 1);\n            }\n        }\n        this.grid.sortingExpressions = sortingState;\n    }\n\n    public get_groupBy_record_id(gRow: IGroupByRecord): string {\n        let recordId = '{ ';\n        const hierrarchy = DataUtil.getHierarchy(gRow);\n\n        for (let i = 0; i < hierrarchy.length; i++) {\n            const groupByKey = hierrarchy[i];\n            recordId += `'${groupByKey.fieldName}': '${groupByKey.value}'`;\n\n            if (i < hierrarchy.length - 1) {\n                recordId += ', ';\n            }\n        }\n        recordId += ' }';\n\n        return recordId;\n    }\n\n    public override remove_grouping_expression(fieldName: string) {\n        const groupingExpressions = this.grid.groupingExpressions;\n        const index = groupingExpressions.findIndex((expr) => expr.fieldName === fieldName);\n        if (index !== -1) {\n            groupingExpressions.splice(index, 1);\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    ViewChild,\n    TemplateRef,\n    OnDestroy,\n    inject\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport {\n    GridSelectionMode,\n    GridType,\n    IGX_GRID_BASE,\n    IgxColumnFormatterPipe,\n    IgxFilteringService,\n    IgxGridSelectionService,\n    ISelectionNode\n} from 'igniteui-angular/grids/core';\nimport { IgxGridRowComponent } from './grid-row.component';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxBadgeComponent } from 'igniteui-angular/badge';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { GridColumnDataType, IGroupByRecord, IgxNumberFormatterPipe, IgxDateFormatterPipe, IgxCurrencyFormatterPipe, IgxPercentFormatterPipe } from 'igniteui-angular/core';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-groupby-row',\n    templateUrl: './groupby-row.component.html',\n    imports: [\n        NgTemplateOutlet,\n        IgxNumberFormatterPipe,\n        IgxDateFormatterPipe,\n        IgxPercentFormatterPipe,\n        IgxCurrencyFormatterPipe,\n        IgxIconComponent,\n        IgxBadgeComponent,\n        IgxCheckboxComponent,\n        IgxColumnFormatterPipe\n    ]\n})\nexport class IgxGridGroupByRowComponent implements OnDestroy {\n    public grid = inject<GridType>(IGX_GRID_BASE);\n    public gridSelection = inject(IgxGridSelectionService);\n    public element = inject(ElementRef);\n    public cdr = inject(ChangeDetectorRef);\n    public filteringService = inject(IgxFilteringService);\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public hideGroupRowSelectors: boolean;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public rowDraggable: boolean;\n\n    /**\n     * Sets the index of the row.\n     * ```html\n     * <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" #row></igx-grid-groupby-row>\n     * ```\n     */\n    @Input()\n    public index: number;\n\n    /**\n     * Sets the id of the grid the row belongs to.\n     * ```html\n     * <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" #row></igx-grid-groupby-row>\n     * ```\n     */\n    @Input()\n    public gridID: string;\n\n    /**\n     * The group record the component renders for.\n     * ```typescript\n     * <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" #row></igx-grid-groupby-row>\n     * ```\n     */\n    @Input()\n    public groupRow: IGroupByRecord;\n\n    /**\n     * Returns a reference of the content of the group.\n     * ```typescript\n     * const groupRowContent = this.grid1.rowList.first.groupContent;\n     * ```\n     */\n    @ViewChild('groupContent', { static: true })\n    public groupContent: ElementRef;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    protected isFocused = false;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultGroupByExpandedTemplate', { read: TemplateRef, static: true })\n    protected defaultGroupByExpandedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultGroupByCollapsedTemplate', { read: TemplateRef, static: true })\n    protected defaultGroupByCollapsedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    protected destroy$ = new Subject<void>();\n\n    /**\n     * @hidden\n     */\n    protected defaultCssClass = 'igx-grid__group-row';\n\n    /**\n     * @hidden\n     */\n    protected paddingIndentationCssClass = 'igx-grid__group-row--padding-level';\n\n    /**\n     * Returns whether the row is focused.\n     * ```\n     * let gridRowFocused = this.grid1.rowList.first.focused;\n     * ```\n     */\n    public get focused(): boolean {\n        return this.isActive();\n    }\n\n    /** @hidden @internal */\n    public get currencyCode(): string {\n        return this.grid.i18nFormatter.getCurrencyCode(this.grid.locale, this.groupRow.column.pipeArgs.currencyCode);\n    }\n\n    constructor() {\n        this.gridSelection.selectedRowsChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.cdr.markForCheck();\n        });\n    }\n\n\n    @HostListener('pointerdown')\n    public activate() {\n        this.grid.navigation.setActiveNode({ row: this.index });\n    }\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        this.grid.rowClick.emit({\n            row: this.grid.createRow(this.index),\n            event\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next();\n        this.destroy$.complete();\n    }\n\n    /**\n     * Returns whether the group row is expanded.\n     * ```typescript\n     * const groupRowExpanded = this.grid1.rowList.first.expanded;\n     * ```\n     */\n    @HostBinding('attr.aria-expanded')\n    public get expanded(): boolean {\n        return this.grid.isExpandedGroup(this.groupRow);\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.aria-describedby')\n    public get describedBy(): string {\n        const grRowExpr = this.groupRow.expression !== undefined ? this.groupRow.expression.fieldName : '';\n        return this.gridID + '_' + grRowExpr;\n    }\n\n    @HostBinding('attr.data-rowIndex')\n    public get dataRowIndex() {\n        return this.index;\n    }\n\n    /**\n     * Returns a reference to the underlying HTML element.\n     * ```typescript\n     * const groupRowElement = this.nativeElement;\n     * ```\n     */\n    public get nativeElement(): any {\n        return this.element.nativeElement;\n    }\n\n    @HostBinding('attr.id')\n    public get attrCellID() {\n        return `${this.gridID}_${this.index}`;\n    }\n\n    /**\n     * Returns the style classes applied to the group rows.\n     * ```typescript\n     * const groupCssStyles = this.grid1.rowList.first.styleClasses;\n     * ```\n     */\n    @HostBinding('class')\n    public get styleClasses(): string {\n        return `${this.defaultCssClass} ` + `${this.paddingIndentationCssClass}-` + this.groupRow.level +\n            (this.isActive() ? ` ${this.defaultCssClass}--active` : '');\n    }\n\n    public isActive() {\n        return this.grid.navigation.activeNode ? this.grid.navigation.activeNode.row === this.index : false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getRowID(rowData): IgxGridRowComponent {\n        return this.grid.primaryKey ? rowData[this.grid.primaryKey] : rowData;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onGroupSelectorClick(event) {\n        if (!this.grid.isMultiRowSelectionEnabled) {\n            return;\n        }\n        event.stopPropagation();\n        if (this.areAllRowsInTheGroupSelected) {\n            this.gridSelection.deselectRows(this.groupRow.records.map(x => this.getRowID(x)));\n        } else {\n            this.gridSelection.selectRows(this.groupRow.records.map(x => this.getRowID(x)));\n        }\n    }\n\n    /**\n     * Toggles the group row.\n     * ```typescript\n     * this.grid1.rowList.first.toggle()\n     * ```\n     */\n    public toggle() {\n        this.grid.toggleGroup(this.groupRow);\n    }\n\n    public get iconTemplate() {\n        if (this.expanded) {\n            return this.grid.rowExpandedIndicatorTemplate || this.defaultGroupByExpandedTemplate;\n        } else {\n            return this.grid.rowCollapsedIndicatorTemplate || this.defaultGroupByCollapsedTemplate;\n        }\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.index,\n            column: this.gridSelection.activeElement ? this.gridSelection.activeElement.column : 0\n        };\n    }\n\n    /**\n     * @hidden @internal\n    */\n    public get dataType(): any {\n        const column = this.groupRow.column;\n        return (column && column.dataType) || GridColumnDataType.String;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get formatter(): any {\n        const column = this.groupRow.column;\n        return (column && column.formatter) || null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get areAllRowsInTheGroupSelected(): boolean {\n        return this.groupRow.records.every(x => this.gridSelection.isRowSelected(this.getRowID(x)));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get selectedRowsInTheGroup(): any[] {\n        const selectedIds = new Set(this.gridSelection.filteredSelectedRowIds);\n        return this.groupRow.records.filter(rowID => selectedIds.has(this.getRowID(rowID)));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get groupByRowCheckboxIndeterminateState(): boolean {\n        if (this.selectedRowsInTheGroup.length > 0) {\n            return !this.areAllRowsInTheGroupSelected;\n        }\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get groupByRowSelectorBaseAriaLabel(): string {\n        const ariaLabel: string = this.areAllRowsInTheGroupSelected ?\n            this.grid.resourceStrings.igx_grid_groupByArea_deselect_message : this.grid.resourceStrings.igx_grid_groupByArea_select_message;\n        return ariaLabel.replace('{0}', this.groupRow.expression.fieldName).replace('{1}', this.groupRow.value);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get showRowSelectors(): boolean {\n        return this.grid.rowSelection !== GridSelectionMode.none && !this.hideGroupRowSelectors;\n    }\n\n}\n","<ng-container #defaultGroupRow>\n\n    @if (rowDraggable) {\n        <div class=\"igx-grid__drag-indicator igx-grid__tr-action\">\n            <igx-icon family=\"default\" name=\"drag_indicator\" [style.visibility]=\"'hidden'\"></igx-icon>\n        </div>\n    }\n\n    @if (showRowSelectors) {\n        <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\"\n            (click)=\"onGroupSelectorClick($event)\">\n            <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n                this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n                context: { $implicit: {\n                    selectedCount: selectedRowsInTheGroup.length,\n                    totalCount: this.groupRow.records.length,\n                    groupRow: this.groupRow }}\">\n            </ng-template>\n        </div>\n    }\n\n    <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\">\n        <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n        </ng-container>\n    </div>\n\n    <div class=\"igx-grid__group-content\" #groupContent>\n        <ng-container\n            *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n        </ng-container>\n    </div>\n\n    <ng-template #defaultGroupByExpandedTemplate>\n        <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n    </ng-template>\n\n    <ng-template #defaultGroupByCollapsedTemplate>\n        <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n    </ng-template>\n\n\n    <ng-template #defaultGroupByTemplate>\n        <div class=\"igx-group-label\">\n            <igx-icon family=\"default\" name=\"group_work\" class=\"igx-group-label__icon\"></igx-icon>\n            <span class=\"igx-group-label__column-name\">\n                {{ groupRow.column && groupRow.column.header ?\n                groupRow.column.header :\n                (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n            </span>\n\n            <span class=\"igx-group-label__text\">{{\n                formatter\n                    ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n                    : dataType === \"number\"\n                    ? (groupRow.value | number:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n                    : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n                    ? (groupRow.value | date:groupRow.column.pipeArgs.format:groupRow.column.pipeArgs.timezone:grid.locale)\n                    : dataType === 'currency'\n                    ? (groupRow.value | currency:currencyCode:groupRow.column.pipeArgs.display:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n                    : dataType === 'percent'\n                    ? (groupRow.value | percent:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n                    : groupRow.value\n            }}</span>\n\n            <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n            </igx-badge>\n        </div>\n    </ng-template>\n    <ng-template #groupByRowSelectorBaseTemplate let-context>\n        <div class=\"igx-grid__cbx-padding\">\n            <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n                [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n                [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n                #groupByRowCheckbox>\n            </igx-checkbox>\n        </div>\n    </ng-template>\n</ng-container>\n","import {\n    Component,\n    Input,\n} from '@angular/core';\nimport { IChipsAreaReorderEventArgs, IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips';\nimport { FlatGridType, IgxGroupByAreaDirective, IgxGroupByMetaPipe, IgxGroupAreaDropDirective } from 'igniteui-angular/grids/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxDropDirective } from 'igniteui-angular/directives';\nimport { IGroupingExpression, ISortingExpression } from 'igniteui-angular/core';\n\n/**\n * An internal component representing the group-by drop area for the igx-grid component.\n *\n * @hidden @internal\n */\n@Component({\n    selector: 'igx-grid-group-by-area',\n    templateUrl: '../../../core/src/grouping/group-by-area.component.html',\n    providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxGridGroupByAreaComponent }],\n    imports: [IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent, IgxSuffixDirective, IgxGroupAreaDropDirective, IgxDropDirective, NgTemplateOutlet, IgxGroupByMetaPipe]\n})\nexport class IgxGridGroupByAreaComponent extends IgxGroupByAreaDirective {\n    @Input()\n    public sortingExpressions: ISortingExpression[] = [];\n\n    /** The parent grid containing the component. */\n    @Input()\n    public override grid: FlatGridType;\n\n    public handleReorder(event: IChipsAreaReorderEventArgs) {\n        const { chipsArray, originalEvent } = event;\n        const newExpressions = this.getReorderedExpressions(chipsArray);\n\n        this.grid.groupingExpansionState = [];\n        this.expressions = newExpressions;\n\n        // When reordered using keyboard navigation, we don't have `onMoveEnd` event.\n        if (originalEvent instanceof KeyboardEvent) {\n            this.grid.groupingExpressions = newExpressions;\n        }\n    }\n\n    public handleMoveEnd() {\n        this.grid.groupingExpressions = this.expressions;\n    }\n\n    public groupBy(expression: IGroupingExpression) {\n        this.grid.groupBy(expression);\n    }\n\n    public clearGrouping(name: string) {\n        this.grid.clearGrouping(name);\n    }\n}\n\n","<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n    @for (expression of chipExpressions; track expression.fieldName; let last = $last) {\n        <igx-chip\n            [id]=\"expression.fieldName\"\n            [title]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title\"\n            [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n            (remove)=\"clearGrouping($event.owner.id)\"\n            (chipClick)=\"handleClick(expression.fieldName)\"\n        >\n            <span>{{ (expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title }}</span>\n            <igx-icon\n                family=\"default\"\n                [name]=\"expression.dir === 1 ? 'sort_asc' : 'sort_desc'\"\n                igxSuffix>\n            </igx-icon>\n        </igx-chip>\n\n        <span class=\"igx-grid-grouparea__connector\">\n            <igx-icon\n                family=\"default\"\n                name=\"arrow_forward\"\n                [hidden]=\"(last && !dropAreaVisible)\">\n            </igx-icon>\n        </span>\n    }\n    <div igxGroupAreaDrop\n        class=\"igx-drop-area\"\n        [attr.gridId]=\"grid.id\"\n        [hidden]=\"!dropAreaVisible\"\n        (igxDrop)=\"onDragDrop($event)\"\n    >\n        <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n    </div>\n</igx-chips-area>\n\n<ng-template #default>\n    <igx-icon\n        family=\"default\"\n        name=\"group_work\"\n        class=\"igx-drop-area__icon\">\n    </igx-icon>\n    <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n","import { PipeTransform, Pipe, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\n\n/** @hidden */\n@Pipe({\n    name: 'gridDetails',\n    standalone: true\n})\nexport class IgxGridDetailsPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: any[], hasDetails: boolean, expansionStates: Map<any, boolean>, _pipeTrigger: number) {\n        if (!hasDetails) {\n            return collection;\n        }\n        const res = this.addDetailRows(collection, expansionStates);\n        return res;\n    }\n\n    protected addDetailRows(collection: any[], _expansionStates: Map<any, boolean>) {\n        const result = [];\n        collection.forEach((v) => {\n            result.push(v);\n            if (!this.grid.isGroupByRecord(v) && !this.grid.isSummaryRow(v) &&\n                this.grid.gridAPI.get_row_expansion_state(v)) {\n                const detailsObj = { detailsData: v };\n                result.push(detailsObj);\n            }\n        });\n        return result;\n    }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridSummaryPosition, GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\nimport { GridSummaryCalculationMode, IGroupByRecord, IGroupByResult, ISummaryRecord } from 'igniteui-angular/core';\n\n/** @hidden */\ninterface ISkipRecord { skip?: boolean }\n\n/** @hidden */\n@Pipe({\n    name: 'gridSummary',\n    standalone: true\n})\nexport class IgxGridSummaryPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: IGroupByResult,\n        hasSummary: boolean,\n        summaryCalculationMode: GridSummaryCalculationMode,\n        summaryPosition: GridSummaryPosition,\n        id: string, showSummary, _: number, __: number): any[] {\n\n        if (!collection.data || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {\n            return collection.data;\n        }\n\n        return this.addSummaryRows(id, collection, summaryPosition, showSummary);\n    }\n\n    private addSummaryRows(gridId: string, collection: IGroupByResult, summaryPosition: GridSummaryPosition, showSummary): any[] {\n        const recordsWithSummary = [];\n        const lastChildMap = new Map<any, IGroupByRecord[]>();\n        const maxSummaryHeight = this.grid.summaryService.calcMaxSummaryHeight();\n\n        if (collection.metadata.length && !this.grid.isGroupByRecord(collection.data[0]) &&\n            this.grid.isGroupByRecord(collection.metadata[0]) && summaryPosition === GridSummaryPosition.bottom) {\n            const groups: Array<IGroupByRecord & ISkipRecord> = [];\n            groups.push(collection.metadata[0]);\n            while (groups[groups.length - 1].groupParent) {\n                groups.push(groups[groups.length - 1].groupParent);\n            }\n            groups.reverse();\n            groups.forEach(g => g.skip = true);\n            collection.data.splice(0, 0, ...groups);\n        }\n        for (const record of collection.data) {\n            let skipAdd = false;\n            let recordId;\n            let groupByRecord: IGroupByRecord = null;\n            if (this.grid.isGroupByRecord(record)) {\n                skipAdd = !!record.skip;\n                record.skip = null;\n                groupByRecord = record as IGroupByRecord;\n                recordId = this.grid.gridAPI.get_groupBy_record_id(groupByRecord);\n            } else {\n                recordId = this.grid.gridAPI.get_row_id(record);\n            }\n            if (!skipAdd) {\n                recordsWithSummary.push(record);\n            }\n\n            if (summaryPosition === GridSummaryPosition.bottom && showSummary &&\n                (groupByRecord && !this.grid.isExpandedGroup(groupByRecord))) {\n                const records = this.removeDeletedRecord(this.grid, groupByRecord.records.slice());\n                const summaries = this.grid.summaryService.calculateSummaries(recordId, records);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight\n                };\n                recordsWithSummary.push(summaryRecord);\n            }\n            if (summaryPosition === GridSummaryPosition.bottom && lastChildMap.has(recordId)) {\n                const groupRecords = lastChildMap.get(recordId);\n\n                for (const groupRecord of groupRecords) {\n                    const groupRecordId = this.grid.gridAPI.get_groupBy_record_id(groupRecord);\n                    const records = this.removeDeletedRecord(this.grid, groupRecord.records.slice());\n                    const summaries = this.grid.summaryService.calculateSummaries(groupRecordId, records, groupRecord);\n                    const summaryRecord: ISummaryRecord = {\n                        summaries,\n                        max: maxSummaryHeight\n                    };\n                    recordsWithSummary.push(summaryRecord);\n                }\n            }\n\n            const showSummaries = showSummary ? false : (groupByRecord && !this.grid.isExpandedGroup(groupByRecord));\n            if (groupByRecord === null || showSummaries) {\n                continue;\n            }\n\n            if (summaryPosition === GridSummaryPosition.top) {\n                const records = this.removeDeletedRecord(this.grid, groupByRecord.records.slice());\n                const summaries = this.grid.summaryService.calculateSummaries(recordId, records, groupByRecord);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight\n                };\n                recordsWithSummary.push(summaryRecord);\n            } else if (summaryPosition === GridSummaryPosition.bottom) {\n                let lastChild = groupByRecord;\n\n                while (lastChild.groups && lastChild.groups.length > 0 && this.grid.isExpandedGroup(lastChild)) {\n                    lastChild = lastChild.groups[lastChild.groups.length - 1];\n                }\n\n                let lastChildId;\n                if (this.grid.isExpandedGroup(lastChild)) {\n                    lastChildId = this.grid.gridAPI.get_row_id(lastChild.records[lastChild.records.length - 1]);\n                } else {\n                    lastChildId = this.grid.gridAPI.get_groupBy_record_id(lastChild);\n                }\n\n                let groupRecords = lastChildMap.get(lastChildId);\n                if (!groupRecords) {\n                    groupRecords = [];\n                    lastChildMap.set(lastChildId, groupRecords);\n                }\n                groupRecords.unshift(groupByRecord);\n            }\n        }\n        return recordsWithSummary;\n    }\n\n    private removeDeletedRecord(grid: GridType, data: any[]) {\n        if (!grid.transactions.enabled) {\n            return data;\n        }\n        const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);\n        deletedRows.forEach(rowID => {\n            const tempData = grid.primaryKey ? data.map(rec => rec[grid.primaryKey]) : data;\n            const index = tempData.indexOf(rowID);\n            if (index !== -1) {\n                data.splice(index, 1);\n            }\n        });\n        return data;\n    }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { IGridSortingStrategy, IGridGroupingStrategy, cloneArray, DataUtil, FilteringExpressionsTree, FilterUtil, IFilteringExpressionsTree, IFilteringStrategy, IGridMergeStrategy, IGroupByExpandState, IGroupingExpression, ISortingExpression, IGroupByResult, ColumnType, IMergeByResult } from 'igniteui-angular/core';\nimport { GridCellMergeMode, RowPinningPosition, GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridSort',\n    standalone: true\n})\nexport class IgxGridSortingPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n    public transform(collection: any[], sortExpressions: ISortingExpression[], groupExpressions: IGroupingExpression[], sorting: IGridSortingStrategy,\n        id: string, pipeTrigger: number, pinned?): any[] {\n        let result: any[];\n        const expressions = groupExpressions.concat(sortExpressions);\n        if (!expressions.length) {\n            result = collection;\n        } else {\n            result = DataUtil.sort(cloneArray(collection), expressions, sorting, this.grid);\n        }\n        this.grid.setFilteredSortedData(result, pinned);\n\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridGroupBy',\n    standalone: true\n})\nexport class IgxGridGroupingPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: any[], expression: IGroupingExpression | IGroupingExpression[],\n        expansion: IGroupByExpandState | IGroupByExpandState[],\n        groupingStrategy: IGridGroupingStrategy, defaultExpanded: boolean,\n        id: string, groupsRecords: any[], _pipeTrigger: number): IGroupByResult {\n\n        const state = { expressions: [], expansion: [], defaultExpanded };\n        state.expressions = this.grid.groupingExpressions;\n        let result: IGroupByResult;\n        const fullResult: IGroupByResult = { data: [], metadata: [] };\n\n        if (!state.expressions.length) {\n            // empty the array without changing reference\n            groupsRecords.splice(0, groupsRecords.length);\n            result = {\n                data: collection,\n                metadata: collection\n            };\n        } else {\n            state.expansion = this.grid.groupingExpansionState;\n            state.defaultExpanded = this.grid.groupsExpanded;\n            result = DataUtil.group(cloneArray(collection), state, groupingStrategy, this.grid, groupsRecords, fullResult);\n        }\n        this.grid.groupingFlatResult = result.data;\n        this.grid.groupingResult = fullResult.data;\n        this.grid.groupingMetadata = fullResult.metadata;\n        return result;\n    }\n}\n\n@Pipe({\n    name: 'gridCellMerge',\n    standalone: true\n})\nexport class IgxGridCellMergePipe implements PipeTransform {\n\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n    public transform(collection: any, colsToMerge: ColumnType[], mergeMode: GridCellMergeMode, mergeStrategy: IGridMergeStrategy, _pipeTrigger: number) {\n        if (colsToMerge.length === 0) {\n            return collection;\n        }\n        const result = DataUtil.merge(collection, colsToMerge, mergeStrategy, [], this.grid);\n        return result;\n    }\n}\n\n@Pipe({\n    name: 'gridUnmergeActive',\n    standalone: true\n})\nexport class IgxGridUnmergeActivePipe implements PipeTransform {\n\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n    public transform(collection: any, colsToMerge: ColumnType[], activeRowIndexes: number[], pinned: boolean, _pipeTrigger: number) {\n        if (colsToMerge.length === 0) {\n            return collection;\n        }\n        if (this.grid.hasPinnedRecords && !pinned && this.grid.pinning.rows !== RowPinningPosition.Bottom) {\n            activeRowIndexes = activeRowIndexes.map(x => x - this.grid.pinnedRecordsCount);\n        }\n        activeRowIndexes = Array.from(new Set(activeRowIndexes)).filter(x => !isNaN(x));\n        const rootsToUpdate = [];\n        activeRowIndexes.forEach(index => {\n            const target = collection[index];\n            if (target && target.cellMergeMeta) {\n                colsToMerge.forEach(col => {\n                    const colMeta = target.cellMergeMeta.get(col.field);\n                    const root = colMeta.root ||  (colMeta.rowSpan > 1 ? target : null);\n                    if (root) {\n                        rootsToUpdate.push(root);\n                    }\n                });\n            }\n        });\n        const uniqueRoots =  Array.from(new Set(rootsToUpdate));\n        if (uniqueRoots.length === 0) {\n            // if nothing to update, return\n            return collection;\n        }\n\n        const result = cloneArray(collection) as any;\n        uniqueRoots.forEach(x => {\n            const index = collection.indexOf(x);\n            const colKeys = [...x.cellMergeMeta.keys()];\n            const cols = colsToMerge.filter(col => colKeys.indexOf(col.field) !== -1);\n            for (const col of cols) {\n                const childData = x.cellMergeMeta.get(col.field).childRecords;\n                const childRecs = childData.map(rec => rec.recordRef);\n                if(childRecs.length === 0) {\n                    // nothing to unmerge\n                    continue;\n                }\n                const unmergedData = DataUtil.merge([x.recordRef, ...childRecs], [col], this.grid.mergeStrategy, activeRowIndexes.map(ri => ri - index), this.grid);\n                for (let i = 0; i < unmergedData.length; i++) {\n                    const unmergedRec = unmergedData[i];\n                    const origRecord = result[index + i];\n                    if (unmergedRec.cellMergeMeta?.get(col.field)) {\n                        // clone of object, since we don't want to pollute the original fully merged collection.\n                        const objCopy = {\n                            recordRef: origRecord.recordRef,\n                            ghostRecord: origRecord.ghostRecord,\n                            cellMergeMeta: new Map<string, IMergeByResult>(origRecord.cellMergeMeta.entries())\n                        };\n                        // update copy with new meta from unmerged data record, but just for this column\n                        objCopy.cellMergeMeta?.set(col.field, unmergedRec.cellMergeMeta.get(col.field));\n                        result[index + i] = objCopy;\n                    } else {\n                        // this is the unmerged record, with no merge metadata\n                        result[index + i] = unmergedRec;\n                    }\n                }\n            }\n        });\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridPaging',\n    standalone: true\n})\nexport class IgxGridPagingPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: IGroupByResult, enabled: boolean, page = 0, perPage = 15, _: number): IGroupByResult {\n        if (!enabled || this.grid.pagingMode !== 'local') {\n            return collection;\n        }\n        const state = {\n            index: page,\n            recordsPerPage: perPage\n        };\n        const total = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.data?.length;\n        DataUtil.correctPagingState(state, total);\n\n        const result = {\n            data: DataUtil.page(cloneArray(collection.data), state, total),\n            metadata: DataUtil.page(cloneArray(collection.metadata), state, total)\n        };\n        if (this.grid.page !== state.index) {\n            this.grid.page = state.index;\n        }\n        this.grid.pagingState = state;\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridFiltering',\n    standalone: true\n})\nexport class IgxGridFilteringPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: any[], expressionsTree: IFilteringExpressionsTree,\n        filterStrategy: IFilteringStrategy,\n        advancedExpressionsTree: IFilteringExpressionsTree, id: string, pipeTrigger: number, filteringPipeTrigger: number, pinned?) {\n        const state = {\n            expressionsTree,\n            strategy: filterStrategy,\n            advancedExpressionsTree\n        };\n\n        if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n            return collection;\n        }\n\n        const result = FilterUtil.filter(cloneArray(collection), state, this.grid);\n        this.grid.setFilteredData(result, pinned);\n        return result;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    Input,\n    OnInit,\n    TemplateRef,\n    ViewChild,\n    DOCUMENT,\n    inject\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    IgxColumnFormatterPipe,\n    IgxGridCellComponent,\n    IgxGridCellImageAltPipe,\n    IgxStringReplacePipe\n} from 'igniteui-angular/grids/core';\nimport { HammerGesturesManager, IgxNumberFormatterPipe, IgxDateFormatterPipe, IgxCurrencyFormatterPipe, IgxPercentFormatterPipe } from 'igniteui-angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport { IgxDateTimeEditorDirective, IgxFocusDirective, IgxTextHighlightDirective, IgxTooltipDirective, IgxTooltipTargetDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-expandable-grid-cell',\n    templateUrl: 'expandable-cell.component.html',\n    providers: [HammerGesturesManager],\n    imports: [IgxChipComponent, IgxTextHighlightDirective, IgxIconComponent, NgClass, FormsModule, ReactiveFormsModule,\n        IgxInputGroupComponent, IgxInputDirective, IgxFocusDirective, IgxCheckboxComponent, IgxDatePickerComponent,\n        IgxTimePickerComponent, IgxDateTimeEditorDirective, IgxPrefixDirective, IgxSuffixDirective, NgTemplateOutlet,\n        IgxTooltipTargetDirective, IgxTooltipDirective, IgxGridCellImageAltPipe, IgxStringReplacePipe,\n        IgxColumnFormatterPipe, IgxNumberFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, IgxDateFormatterPipe]\n})\nexport class IgxGridExpandableCellComponent extends IgxGridCellComponent implements OnInit {\n    public document = inject(DOCUMENT);\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public expanded = false;\n\n    @ViewChild('indicator', { read: ElementRef })\n    public indicator: ElementRef;\n\n    @ViewChild('indentationDiv', { read: ElementRef })\n    public indentationDiv: ElementRef;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultExpandedTemplate', { read: TemplateRef, static: true })\n    protected defaultExpandedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultCollapsedTemplate', { read: TemplateRef, static: true })\n    protected defaultCollapsedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    public toggle(event: Event) {\n        event.stopPropagation();\n        const expansionState = this.grid.gridAPI.get_row_expansion_state(this.intRow.data);\n        this.grid.gridAPI.set_row_expansion_state(this.intRow.key, !expansionState, event);\n    }\n\n    /**\n     * @hidden\n     */\n    public onIndicatorFocus() {\n        this.grid.gridAPI.update_cell(this.grid.crudService.cell);\n    }\n\n    /**\n     * @hidden\n     */\n    public override calculateSizeToFit(range: any): number {\n        let leftPadding = 0;\n        if (this.indentationDiv) {\n            const indentationStyle = this.document.defaultView.getComputedStyle(this.indentationDiv.nativeElement);\n            leftPadding = parseFloat(indentationStyle.paddingLeft);\n        }\n        const contentWidth = this.platformUtil.getNodeSizeViaRange(range, this.nativeElement);\n        return contentWidth + leftPadding;\n    }\n\n    /**\n     * @hidden\n     */\n    public get iconTemplate() {\n        if (this.expanded) {\n            return this.grid.rowExpandedIndicatorTemplate || this.defaultExpandedTemplate;\n        } else {\n            return this.grid.rowCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public get showExpanderIndicator() {\n        const isGhost = this.intRow.pinned && this.intRow.disabled;\n        return !this.editMode && (!this.intRow.pinned || isGhost);\n    }\n}\n","<ng-template #defaultPinnedIndicator>\n    @if (displayPinnedChip) {\n        <igx-chip class=\"igx-grid__td--pinned-chip\" [disabled]=\"true\" [style.--ig-size]=\"1\">{{ grid.resourceStrings.igx_grid_pinned_row_indicator }}</igx-chip>\n    }\n</ng-template>\n<ng-template #defaultCell>\n    @if (column.dataType !== 'boolean' && column.dataType !== 'image' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n            igxTextHighlight class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [class.igx-grid__td--number]=\"column.dataType === 'number' || column.dataType === 'percent' || column.dataType === 'currency'\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"formatter ? (value | columnFormatter:formatter:rowData)\n                : column.dataType === 'number'\n                ? (value | number:column.pipeArgs.digitsInfo:grid.locale)\n                : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale)\n                : column.dataType === 'currency'\n                ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale)\n                : column.dataType === 'percent'\n                ? (value | percent:column.pipeArgs.digitsInfo:grid.locale)\n                : value\"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\">\n            {{ formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === \"number\"\n                ? (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime')\n                ? (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'\n                ? (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent'\n                ? (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value}}</div>\n    }\n\n    @if (column.dataType === 'boolean' && !this.formatter) {\n    <div [class.igx-grid__td--bool]=\"column.dataType === 'boolean'\">\n        <igx-icon\n            family=\"default\"\n            [name]=\"value ? 'confirm' : 'close'\"\n            [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\">\n        </igx-icon>\n    </div>\n    }\n    @if (column.dataType === 'image') {\n        <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n    }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n    @if (column.dataType !== 'boolean' || (column.dataType === 'boolean' && this.formatter)) {\n        <div\n            igxTextHighlight class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"formatter ? (value | columnFormatter:formatter:rowData) : column.dataType === 'number' ?\n                (value | number:column.pipeArgs.digitsInfo:grid.locale) : (column.dataType === 'date' || column.dataType === 'time' || column.dataType === 'dateTime') ?\n                (value | date:column.pipeArgs.format:column.pipeArgs.timezone:grid.locale) : column.dataType === 'currency'?\n                (value | currency:currencyCode:column.pipeArgs.display:column.pipeArgs.digitsInfo:grid.locale) : column.dataType === 'percent' ?\n                (value | percent:column.pipeArgs.digitsInfo:grid.locale) : value\"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\">\n            {{ value ? value : (column.header || column.field) }}\n        </div>\n    }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n    @if (column.dataType === 'string' || column.dataType === 'image') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-input-group [style.--ig-size]=\"1\" >\n                <input\n                    igxInput\n                    [attr.aria-describedby]=\"ariaDescribeBy\"\n                    [attr.aria-invalid]=\"isInvalid\"\n                    [igxFocus]=\"true\"\n                    [formControl]=\"formControl\"\n                    (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n                    (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n                />\n            </igx-input-group>\n        </ng-container>\n    }\n    @if (column.dataType === 'number') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'boolean') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-checkbox\n                [checked]=\"editValue\"\n                [igxFocus]=\"true\"\n                [disableRipple]=\"true\"\n                [formControl]=\"formControl\"\n            ></igx-checkbox>\n        </ng-container>\n    }\n    @if (column.dataType === 'date') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-date-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [weekStart]=\"column.pipeArgs.weekStart\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            >\n            </igx-date-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'time') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-time-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            ></igx-time-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'dateTime') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            <input\n                type=\"text\"\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [formControl]=\"formControl\"\n                igxInput\n                [locale]=\"grid.locale\"\n                [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n                [defaultFormatType]=\"column.dataType\"\n                [displayFormat]=\"column.pipeArgs.format\"\n                [igxFocus]=\"true\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'currency') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            @if (grid.currencyPositionLeft) {\n                <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n            }\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            @if (!grid.currencyPositionLeft) {\n                <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n            }\n        </igx-input-group>\n    }\n    @if (column.dataType === 'percent') {\n        <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n        </igx-input-group>\n    }\n</ng-template>\n@if (showExpanderIndicator) {\n    <div #indicator\n         class=\"igx-grid__tree-grouping-indicator\"\n         (click)=\"toggle($event)\" (focus)=\"onIndicatorFocus()\">\n         <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit:  row }\">\n        </ng-container>\n    </div>\n}\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\">\n</ng-container>\n@if (isInvalid) {\n    <igx-icon\n        family=\"default\"\n        name=\"error\"\n        #errorIcon\n        [igxTooltipTarget]=\"tooltipRef\"\n        [igxToggleOutlet]=\"grid.outlet\"\n        (mouseover)='errorShowing = true'\n        (mouseout)='errorShowing = false'>\n    </igx-icon>\n    <div [id]=\"ariaErrorMessage\"\n    igxTooltip #error #tooltipRef=\"tooltip\">\n        <div [style.width]=\"'max-content'\">\n            <ng-container *ngTemplateOutlet=\"cellValidationErrorTemplate || defaultError; context: context\"></ng-container>\n        </div>\n    </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n        <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n        <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultError>\n    @if (formGroup?.get(column?.field).errors?.['required']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_required_validation_error}}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['minlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.minlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['maxlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.maxlength.requiredLength }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['min']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.min.min }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['max']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':formGroup.get(column.field).errors.max.max }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['email']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_email_validation_error }}\n        </div>\n    }\n    @if (formGroup?.get(column?.field).errors?.['pattern']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_pattern_validation_error}}\n        </div>\n    }\n</ng-template>\n","import { Component, ChangeDetectionStrategy, forwardRef } from '@angular/core';\nimport { NgTemplateOutlet, NgStyle, NgClass } from '@angular/common';\nimport {\n    IgxGridCellComponent,\n    IgxGridCellStyleClassesPipe,\n    IgxGridCellStylesPipe,\n    IgxGridDataMapperPipe,\n    IgxGridNotGroupedPipe,\n    IgxGridTopLevelColumns,\n    IgxGridTransactionStatePipe,\n    IgxRowDirective,\n    IgxRowDragDirective\n} from 'igniteui-angular/grids/core';\nimport { IgxGridExpandableCellComponent } from './expandable-cell.component';\nimport { IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\n\n/* blazorIndirectRender */\n/* blazorElement */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-row',\n    templateUrl: './grid-row.component.html',\n    providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxGridRowComponent) }],\n    imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, NgStyle, IgxCheckboxComponent, IgxGridCellComponent, NgClass, IgxGridExpandableCellComponent, IgxGridNotGroupedPipe, IgxGridTopLevelColumns, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe]\n})\nexport class IgxGridRowComponent extends IgxRowDirective {\n\n    public getContext(col, row) {\n        return {\n            $implicit: col,\n            row\n        };\n    }\n\n    public getContextMRL(pinnedCols, row) {\n        return {\n            $implicit: pinnedCols,\n            row\n        };\n    }\n}\n","<ng-container *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"></ng-container>\n\n<ng-template #addTemp>\n    <div class=\"igx-grid__tr--inner\" [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\" (animationend)=\"animationEndHandler()\">\n        <ng-container *ngTemplateOutlet='defaultTemp'></ng-container>\n    </div>\n</ng-template>\n<ng-template #defaultTemp>\n    @if (rowDraggable) {\n        <div [class]=\"resolveDragIndicatorClasses\" [igxRowDrag]=\"this\" (click)=\"$event.stopPropagation()\" [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\">\n            <ng-container *ngTemplateOutlet=\"this.grid.dragIndicatorIconTemplate ? this.grid.dragIndicatorIconTemplate : this.grid.dragIndicatorIconBase\"></ng-container>\n        </div>\n    }\n    @if (this.showRowSelectors) {\n        <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" (click)=\"onRowSelectorClick($event)\">\n            <ng-template *ngTemplateOutlet=\"\n                this.grid.rowSelectorTemplate ? this.grid.rowSelectorTemplate : rowSelectorBaseTemplate;\n                context: { $implicit: { index: viewIndex, rowID: key, key, selected: selected }}\">\n            </ng-template>\n        </div>\n    }\n    @if (grid.groupingExpressions.length > 0) {\n        <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{grid.groupingExpressions.length}}\" (pointerdown)=\"$event.preventDefault()\" (click)=\"$event.stopPropagation()\"></div>\n    }\n\n\n    @if (!grid.hasColumnLayouts) {\n        @if (pinnedStartColumns.length > 0) {\n            @for (col of pinnedStartColumns | igxNotGrouped; track trackPinnedColumn(col)) {\n                @if (this.hasMergedCells) {\n                    <div [style.height.px]=\" this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? getRowHeight() : null\"\n                         class=\"igx-grid__mrl-block\"\n                         [style.visibility]=\"this.metaData?.cellMergeMeta.get(col.field)?.root ? 'hidden' : 'visible'\"\n                         [ngStyle]=\"{\n                        'grid-template-rows': this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? this.getMergeCellSpan(col) : null\n                    }\">\n                    <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n                </div>\n                }\n                @else {\n                    <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n                }\n            }\n        }\n        <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]=\"grid.trackColumnChanges\" #igxDirRef>\n            @if (this.hasMergedCells) {\n                <div [style.height.px]=\" this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? getRowHeight() : null\"\n                     class=\"igx-grid__mrl-block\"\n                     [style.visibility]=\"this.metaData?.cellMergeMeta.get(col.field)?.root ? 'hidden' : 'visible'\"\n                     [ngStyle]=\"{\n                    'grid-template-rows': this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? this.getMergeCellSpan(col) : null\n                }\">\n                <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n            </div>\n            }\n            @else {\n                <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n            }\n\n        </ng-template>\n        @if (pinnedEndColumns.length > 0) {\n            @for (col of pinnedEndColumns | igxNotGrouped; track trackPinnedColumn(col)) {\n                @if (this.hasMergedCells) {\n                    <div [style.height.px]=\" this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? getRowHeight() : null\"\n                         class=\"igx-grid__mrl-block\"\n                         [style.visibility]=\"this.metaData?.cellMergeMeta.get(col.field)?.root ? 'hidden' : 'visible'\"\n                         [ngStyle]=\"{\n                        'grid-template-rows': this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1 ? this.getMergeCellSpan(col) : null\n                    }\">\n                    <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n                </div>\n                }\n                @else {\n                    <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? expandableCellTemplate : cellTemplate; context: getContext(col, this)\"></ng-container>\n                }\n            }\n        }\n    }\n\n    @if (grid.hasColumnLayouts) {\n        @if (pinnedStartColumns.length > 0) {\n            <ng-container *ngTemplateOutlet=\"mrlPinnedTemplate; context: getContextMRL(pinnedStartColumns, this)\"></ng-container>\n        }\n        <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxTopLevel\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForSizePropName]=\"'calcPixelWidth'\" [igxForTrackBy]=\"grid.trackColumnChanges\" #igxDirRef>\n            <div class=\"igx-grid__mrl-block\" [ngStyle]=\"{\n                'grid-template-rows':col.getGridTemplate(true),\n                'grid-template-columns':col.getGridTemplate(false)\n            }\">\n                @for (col of col.children; track trackPinnedColumn(col)) {\n                    <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails ? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n                }\n            </div>\n        </ng-template>\n        @if (pinnedEndColumns.length > 0) {\n            <ng-container *ngTemplateOutlet=\"mrlPinnedTemplate; context: getContextMRL(pinnedEndColumns, this)\"></ng-container>\n        }\n    }\n</ng-template>\n\n<ng-template #mrlPinnedTemplate let-pinnedColumns>\n    @for (col of pinnedColumns | igxTopLevel; track trackPinnedColumn(col)) {\n        <div class=\"igx-grid__mrl-block\"\n            [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n            [class.igx-grid__td--pinned-first]=\"col.hasFirstPinnedChildColumn\"\n            [ngStyle]=\"{\n                'grid-template-rows':col.getGridTemplate(true),\n                'grid-template-columns':col.getGridTemplate(false),\n                'z-index': col.pinned ? 1 : null\n            }\"\n        >\n            @for (col of col.children; track col) {\n                <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 && grid.hasDetails? mrlExpandableCellTemplate : mrlCellTemplate; context: getContext(col, this)\"></ng-container>\n            }\n        </div>\n    }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n    <div class=\"igx-grid__cbx-padding\">\n        <igx-checkbox\n            [tabindex]=\"-1\"\n            [checked]=\"selected\"\n            [readonly]=\"true\"\n            [disabled]=\"deleted\"\n            [disableRipple]=\"true\"\n            [disableTransitions]=\"grid.disableTransitions\"\n            [aria-label]=\"rowCheckboxAriaLabel\">\n        </igx-checkbox>\n    </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n    <igx-grid-cell\n        [class.igx-grid__td--merged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n        [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n        [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n        [isMerged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n        [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n        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        [class.igx-grid__td--pinned]=\"col.pinned\"\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        [class.igx-grid__td--image]=\"col.dataType === 'image'\"\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)\"\n        [column]=\"col\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n        [rowData]=\"data\"\n        [style.min-width]=\"col.resolvedWidth\"\n        [style.max-width]=\"col.resolvedWidth\"\n        [style.flex-basis]=\"col.resolvedWidth\"\n        [width]=\"col.getCellWidth()\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n        #cell>\n    </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n    <igx-expandable-grid-cell\n        [class.igx-grid__td--merged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n        [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n        [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n        [isMerged]=\"metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\"\n        [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n        [class.igx-grid__td--pinned]=\"col.pinned\"\n        class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\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        [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\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        [expanded]=\"expanded\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n        [column]=\"col\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [rowData]=\"data\"\n        [style.min-width]=\"col.resolvedWidth\"\n        [style.max-width]=\"col.resolvedWidth\"\n        [style.flex-basis]=\"col.resolvedWidth\"\n        [width]=\"col.getCellWidth()\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n        #cell>\n    </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n    <igx-grid-cell\n        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\n        [class.igx-grid__td--pinned]=\"col.pinned\"\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)\"\n        [column]=\"col\"\n        [style.grid-row-end]=\"col.rowEnd\"\n        [style.grid-column-end]=\"col.colEnd\"\n        [style.grid-row-start]=\"col.rowStart\"\n        [style.grid-column-start]=\"col.colStart\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [rowData]=\"data\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n        #cell>\n    </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n    <igx-expandable-grid-cell\n        class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\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\n        [class.igx-grid__td--pinned]=\"col.pinned\"\n        [class.igx-grid__td--number]=\"(col.dataType === 'number' || col.dataType === 'percent' || col.dataType === 'currency') && col.visibleIndex !== 0\"\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        [expanded]=\"expanded\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n        [column]=\"col\"\n        [style.grid-row-end]=\"col.rowEnd\"\n        [style.grid-column-end]=\"col.colEnd\"\n        [style.grid-row-start]=\"col.rowStart\"\n        [style.grid-column-start]=\"col.colStart\"\n        [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [rowData]=\"data\"\n        [visibleColumnIndex]=\"col.visibleIndex\"\n        [value]=\"data | dataMapper:col.field:grid.pipeTrigger:data[col.field]:col.hasNestedPath\"\n        [cellTemplate]=\"col.bodyTemplate\"\n        [cellValidationErrorTemplate]=\"col.errorTemplate\"\n        [lastSearchInfo]=\"grid.lastSearchInfo\"\n        [active]=\"isCellActive(col.visibleIndex)\"\n        [cellSelectionMode]=\"grid.cellSelection\"\n        [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n        #cell>\n    </igx-expandable-grid-cell>\n</ng-template>\n","import {\n    AfterContentInit,\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    ComponentRef,\n    ContentChild,\n    ContentChildren,\n    createComponent,\n    Directive,\n    DoCheck,\n    ElementRef,\n    EnvironmentInjector,\n    EventEmitter,\n    HostBinding,\n    HostListener,\n    Injector,\n    Input,\n    IterableChangeRecord,\n    IterableDiffers,\n    LOCALE_ID,\n    NgZone,\n    OnDestroy,\n    OnInit,\n    Output,\n    TemplateRef,\n    QueryList,\n    ViewChild,\n    ViewChildren,\n    ViewContainerRef,\n    DOCUMENT,\n    inject,\n    InjectionToken\n} from '@angular/core';\nimport {\n    areEqualArrays,\n    columnFieldPath,\n    resizeObservable,\n    Transaction,\n    TransactionType,\n    TransactionService,\n    State,\n    cloneArray,\n    mergeObjects,\n    compareMaps,\n    resolveNestedPath,\n    isObject,\n    PlatformUtil,\n    VerticalAlignment,\n    HorizontalAlignment,\n    PositionSettings,\n    OverlaySettings,\n    IgxFlatTransactionFactory,\n    TRANSACTION_TYPE,\n    IgxOverlayService,\n    ConnectedPositioningStrategy,\n    ContainerPositionStrategy,\n    AbsoluteScrollStrategy,\n    Action,\n    StateUpdateEvent,\n    TransactionEventOrigin,\n    getCurrentResourceStrings,\n    DataUtil,\n    DefaultDataCloneStrategy,\n    DefaultMergeStrategy,\n    FilteringExpressionsTree,\n    FilteringExpressionsTreeType,\n    FilteringLogic,\n    FilteringStrategy,\n    GridColumnDataType,\n    IDataCloneStrategy,\n    IFilteringExpressionsTree,\n    IFilteringOperation,\n    IFilteringStrategy,\n    IGridMergeStrategy,\n    IGridSortingStrategy,\n    IGroupByRecord,\n    ISortingExpression,\n    isTree,\n    recreateTree,\n    recreateTreeFromFields,\n    ɵSize,\n    ColumnPinningPosition,\n    ColumnType,\n    EntityType,\n    ISortingOptions,\n    ISummaryExpression,\n    GridSummaryCalculationMode,\n    IgxActionStripToken,\n    GridResourceStringsEN,\n    IGridResourceStrings,\n    IgxOverlayOutletDirective,\n    DEFAULT_LOCALE,\n    onResourceChangeHandle\n} from 'igniteui-angular/core';\nimport { IgcTrialWatermark } from 'igniteui-trial-watermark';\nimport { Subject, pipe, fromEvent, animationFrameScheduler, merge, BehaviorSubject, timer } from 'rxjs';\nimport { takeUntil, first, filter, throttleTime, map, shareReplay, takeWhile, throttle, take, switchMap } from 'rxjs/operators';\nimport {\n    IgxToggleDirective,\n    IForOfDataChangeEventArgs,\n    IgxGridForOfDirective,\n    IgxTextHighlightService,\n    ICachedViewLoadedEventArgs,\n    IgxTemplateOutletDirective\n} from 'igniteui-angular/directives';\nimport { IgxGridRowComponent } from './grid-row.component';\nimport { IgxGridGroupByAreaComponent } from './grouping/grid-group-by-area.component';\nimport { IgxPaginatorToken, type IgxPaginatorComponent } from 'igniteui-angular/paginator';\nimport { IgxSnackbarComponent } from 'igniteui-angular/snackbar';\nimport { CharSeparatedValueData, DropPosition, FilterMode, getUUID, GridCellMergeMode, GridKeydownTargetType, GridPagingMode, GridSelectionMode, GridSelectionRange, GridServiceType, GridSummaryPosition, GridType, GridValidationTrigger, IActiveNode, IActiveNodeChangeEventArgs, ICellPosition, IClipboardOptions, IColumnMovingEndEventArgs, IColumnMovingEventArgs, IColumnMovingStartEventArgs, IColumnResizeEventArgs, IColumnsAutoGeneratedEventArgs, IColumnSelectionEventArgs, IColumnVisibilityChangedEventArgs, IColumnVisibilityChangingEventArgs, IFilteringEventArgs, IGridCellEventArgs, IGridClipboardEvent, IGridContextMenuEventArgs, IGridEditDoneEventArgs, IGridEditEventArgs, IGridFormGroupCreatedEventArgs, IGridKeydownEventArgs, IGridRowEventArgs, IGridScrollEventArgs, IGridToolbarExportEventArgs, IGridValidationStatusEventArgs, IGX_GRID_SERVICE_BASE, IgxAdvancedFilteringDialogComponent, IgxCell, IgxColumnComponent, IgxColumnGroupComponent, IgxColumnResizingService, IgxDragIndicatorIconDirective, IgxEditRow, IgxExcelStyleHeaderIconDirective, IgxExcelStyleLoadingValuesTemplateDirective, IgxFilteringService, IgxGridBodyDirective, IgxGridCellComponent, IgxGridColumnResizerComponent, IgxGridEmptyTemplateContext, IgxGridEmptyTemplateDirective, IgxGridExcelStyleFilteringComponent, IgxGridFilteringCellComponent, IgxGridFilteringRowComponent, IgxGridHeaderComponent, IgxGridHeaderGroupComponent, IgxGridHeaderRowComponent, IgxGridHeaderTemplateContext, IgxGridLoadingTemplateDirective, IgxGridNavigationService, IgxGridRowDragGhostContext, IgxGridRowEditActionsTemplateContext, IgxGridRowEditTemplateContext, IgxGridRowEditTextTemplateContext, IgxGridRowTemplateContext, IgxGridSelectionService, IgxGridSummaryService, IgxGridTemplateContext, IgxGridToolbarComponent, IgxGridTransaction, IgxGridValidationService, IgxHeaderCollapsedIndicatorDirective, IgxHeaderExpandedIndicatorDirective, IgxHeadSelectorDirective, IgxHeadSelectorTemplateContext, IgxRowAddTextDirective, IgxRowCollapsedIndicatorDirective, IgxRowDirective, IgxRowDragGhostDirective, IgxRowEditActionsDirective, IgxRowEditTabStopDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective, IgxRowExpandedIndicatorDirective, IgxRowSelectorDirective, IgxRowSelectorTemplateContext, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective, IgxSummaryRowComponent, IgxToolbarToken, IPinColumnCancellableEventArgs, IPinColumnEventArgs, IPinningConfig, IPinRowEventArgs, IRowDataCancelableEventArgs, IRowDataEventArgs, IRowDragEndEventArgs, IRowDragStartEventArgs, IRowSelectionEventArgs, IRowToggleEventArgs, ISearchInfo, ISizeInfo, ISortingEventArgs, RowEditPositionStrategy, RowPinningPosition, RowType, WatchChanges } from 'igniteui-angular/grids/core';\nimport { getCurrentI18n, getNumberFormatter, IResourceChangeEventArgs,  } from 'igniteui-i18n-core';\nimport { I18N_FORMATTER } from 'igniteui-angular/core';\n\n/**\n * Injection token for setting the throttle time multiplier used in grid virtual scroll.\n * @hidden\n */\nexport const SCROLL_THROTTLE_TIME_MULTIPLIER = /*@__PURE__*/new InjectionToken<number>('SCROLL_THROTTLE_TIME_MULTIPLIER', {\n    factory: () => 10\n});\n\n\ninterface IMatchInfoCache {\n    row: any;\n    index: number;\n    column: string;\n    metadata: Map<string, boolean>;\n}\n\nlet FAKE_ROW_ID = -1;\nconst DEFAULT_ITEMS_PER_PAGE = 15;\nconst MINIMUM_COLUMN_WIDTH = 136;\n// By default row editing overlay outlet is inside grid body so that overlay is hidden below grid header when scrolling.\n// In cases when grid has 1-2 rows there isn't enough space in grid body and row editing overlay should be shown above header.\n// Default row editing overlay height is higher then row height that is why the case is valid also for row with 2 rows.\n// More accurate calculation is not possible, cause row editing overlay is still not shown and we don't know its height,\n// but in the same time we need to set row editing overlay outlet before opening the overlay itself.\nconst MIN_ROW_EDITING_COUNT_THRESHOLD = 2;\n\n/* blazorIndirectRender\n   blazorComponent\n   omitModule\n   wcSkipComponentSuffix */\n@Directive()\nexport abstract class IgxGridBaseDirective implements GridType,\n    OnInit, DoCheck, OnDestroy, AfterContentInit, AfterViewInit {\n\n    /* blazorSuppress */\n    public readonly validation = inject(IgxGridValidationService);\n    /** @hidden @internal */\n    public readonly selectionService = inject(IgxGridSelectionService);\n    protected colResizingService = inject(IgxColumnResizingService);\n    /* blazorSuppress */\n    public readonly gridAPI = inject<GridServiceType>(IGX_GRID_SERVICE_BASE);\n    protected transactionFactory = inject(IgxFlatTransactionFactory);\n    private elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    protected zone = inject(NgZone);\n    /** @hidden @internal */\n    public document = inject(DOCUMENT);\n    /* blazorSuppress */\n    public readonly cdr = inject(ChangeDetectorRef);\n    protected differs = inject(IterableDiffers);\n    protected viewRef = inject(ViewContainerRef);\n    protected injector = inject(Injector);\n    protected envInjector = inject(EnvironmentInjector);\n    /* blazorSuppress */\n    public navigation = inject(IgxGridNavigationService);\n    /** @hidden @internal */\n    public filteringService = inject(IgxFilteringService);\n    protected textHighlightService = inject(IgxTextHighlightService);\n    protected overlayService = inject(IgxOverlayService);\n    /** @hidden @internal */\n    public summaryService = inject(IgxGridSummaryService);\n    private localeId = inject(LOCALE_ID);\n    protected platform = inject(PlatformUtil);\n    protected _diTransactions = inject(IgxGridTransaction, { optional: true });\n    /** @hidden @internal */\n    public i18nFormatter = inject(I18N_FORMATTER);\n    private readonly THROTTLE_TIME_MULTIPLIER = inject(SCROLL_THROTTLE_TIME_MULTIPLIER);\n    private throttleTime$ = new BehaviorSubject<number>(this.THROTTLE_TIME_MULTIPLIER);\n    /** @hidden @internal */\n    public throttleScheduler = animationFrameScheduler;\n    private readonly MAX_SCROLL_THROTTLE: number = 60;\n\n    /**\n     * Gets/Sets the display time for the row adding snackbar notification.\n     *\n     * @remarks\n     * By default it is 6000ms.\n     */\n    @Input()\n    public snackbarDisplayTime = 6000;\n\n    /**\n     * Gets/Sets whether to auto-generate the columns.\n     *\n     * @remarks\n     * The default value is false. When set to true, it will override all columns declared through code or in markup.\n     * @example\n     * ```html\n     * <igx-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public autoGenerate = false;\n\n    /**\n     * Gets/Sets a list of property keys to be excluded from the generated column collection\n     * @remarks\n     * The collection is only used during initialization and changing it will not cause any changes in the generated columns at runtime\n     * unless the grid is destroyed and recreated. To modify the columns visible in the UI at runtime, please use their\n     * [hidden](https://www.infragistics.com/products/ignite-ui-angular/docs/typescript/latest/classes/IgxColumnComponent.html#hidden) property.\n     * @example\n     * ```html\n     * <igx-grid data=[Data] [autoGenerate]=\"true\" [autoGenerateExclude]=\"['ProductName', 'Count']\"></igx-grid>\n     * ```\n     * ```typescript\n     * const Data = [{ 'Id': '1', 'ProductName': 'name1', 'Description': 'description1', 'Count': 5 }]\n     * ```\n     */\n    @Input()\n    public autoGenerateExclude: string[] = [];\n\n    /**\n     * Controls whether columns moving is enabled in the grid.\n     *\n     */\n    @Input({ transform: booleanAttribute })\n    public moving = false;\n\n    /**\n     * Gets/Sets a custom template when empty.\n     *\n     * @example\n     * ```html\n     * <ng-template igxGridEmpty>\n     *   <!-- content to show when the grid is empty -->\n     * </ng-template>\n     * ```\n     * Or\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [emptyGridTemplate]=\"myTemplate\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get emptyGridTemplate(): TemplateRef<IgxGridTemplateContext> {\n        return this._emptyGridTemplate || this.emptyDirectiveTemplate;\n    }\n    public set emptyGridTemplate(template: TemplateRef<IgxGridTemplateContext>) {\n        this._emptyGridTemplate = template;\n    }\n\n    /**\n     * Gets/Sets a custom template for adding row UI when grid is empty.\n     *\n     * @example\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [addRowEmptyTemplate]=\"myTemplate\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public addRowEmptyTemplate: TemplateRef<void>;\n\n    /**\n     * Gets/Sets a custom template when loading.\n     *\n     * @example\n     * ```html\n     * <ng-template igxGridLoading>\n     *   <!-- content to show when the grid is loading -->\n     * </ng-template>\n     * ```\n     * Or\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [loadingGridTemplate]=\"myTemplate\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get loadingGridTemplate(): TemplateRef<IgxGridTemplateContext> {\n        return this._loadingGridTemplate || this.loadingDirectiveTemplate;\n    }\n    public set loadingGridTemplate(template: TemplateRef<IgxGridTemplateContext>) {\n        this._loadingGridTemplate = template;\n    }\n\n    /**\n     * Get/Set IgxSummaryRow height\n     */\n    @Input()\n    public set summaryRowHeight(value: number) {\n        this._summaryRowHeight = value | 0;\n        this.summaryService.summaryHeight = value;\n        if (!this._init) {\n            this.reflow();\n        }\n    }\n\n    public get summaryRowHeight(): number {\n        if (this.hasSummarizedColumns && this.rootSummariesEnabled) {\n            return this._summaryRowHeight || this.summaryService.calcMaxSummaryHeight();\n        }\n        return 0;\n    }\n\n    /** @hidden @internal */\n    public get hasColumnsToAutosize() {\n        return this._columns.some(x => x.width === 'fit-content');\n    }\n\n    /**\n     * Gets/Sets the data clone strategy of the grid when in edit mode.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [dataCloneStrategy]=\"customCloneStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get dataCloneStrategy(): IDataCloneStrategy {\n        return this._dataCloneStrategy;\n    }\n\n    public set dataCloneStrategy(strategy: IDataCloneStrategy) {\n        if (strategy) {\n            this._dataCloneStrategy = strategy;\n            this._transactions.cloneStrategy = strategy;\n        }\n    }\n\n    /**\n     * Controls the copy behavior of the grid.\n     */\n    @Input()\n    public clipboardOptions: IClipboardOptions = {\n        /**\n         * Enables/disables the copy behavior\n         */\n        enabled: true,\n        /**\n         * Include the columns headers in the clipboard output.\n         */\n        copyHeaders: true,\n        /**\n         * Apply the columns formatters (if any) on the data in the clipboard output.\n         */\n        copyFormatters: true,\n        /**\n         * The separator used for formatting the copy output. Defaults to `\\t`.\n         */\n        separator: '\\t'\n    };\n\n    /**\n     * Emitted after filtering is performed.\n     *\n     * @remarks\n     * Returns the filtering expressions tree of the column for which filtering was performed.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"\n     *              (filteringExpressionsTreeChange)=\"filteringExprTreeChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public filteringExpressionsTreeChange = new EventEmitter<IFilteringExpressionsTree>();\n\n    /**\n     * Emitted after advanced filtering is performed.\n     *\n     * @remarks\n     * Returns the advanced filtering expressions tree.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"\n     *           (advancedFilteringExpressionsTreeChange)=\"advancedFilteringExprTreeChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public advancedFilteringExpressionsTreeChange = new EventEmitter<IFilteringExpressionsTree>();\n\n    /**\n     * Emitted when grid is scrolled horizontally/vertically.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"\n     *              (gridScroll)=\"onScroll($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public gridScroll = new EventEmitter<IGridScrollEventArgs>();\n\n    /* treatAsRef */\n    /**\n     * Sets a conditional class selector to the grid's row element.\n     * Accepts an object literal, containing key-value pairs,\n     * where the key is the name of the CSS class and the value is\n     * either a callback function that returns a boolean, or boolean, like so:\n     * ```typescript\n     * callback = (row: RowType) => { return row.selected > 6; }\n     * rowClasses = { 'className' : this.callback };\n     * ```\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [rowClasses] = \"rowClasses\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowClasses: any;\n\n    /* treatAsRef */\n    /**\n     * Sets conditional style properties on the grid row element.\n     * It accepts an object literal where the keys are\n     * the style properties and the value is an expression to be evaluated.\n     * ```typescript\n     * styles = {\n     *  background: 'yellow',\n     *  color: (row: RowType) => row.selected : 'red': 'white'\n     * }\n     * ```\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [rowStyles]=\"styles\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowStyles = null;\n\n    /**\n     * Gets/Sets the primary key.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [primaryKey]=\"'ProductID'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get primaryKey(): string {\n        return this._primaryKey;\n    }\n\n    public set primaryKey(value: string) {\n        this._primaryKey = value;\n        this.checkPrimaryKeyField();\n    }\n\n    /* blazorSuppress */\n    /**\n     * Gets/Sets a unique values strategy used by the Excel Style Filtering\n     *\n     * @remarks\n     * Provides a callback for loading unique column values on demand.\n     * If this property is provided, the unique values it generates will be used by the Excel Style Filtering.\n     * @example\n     * ```html\n     * <igx-grid [data]=\"localData\" [filterMode]=\"'excelStyleFilter'\" [uniqueColumnValuesStrategy]=\"columnValuesStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public uniqueColumnValuesStrategy: (column: ColumnType,\n        filteringExpressionsTree: IFilteringExpressionsTree,\n        done: (values: any[]) => void) => void;\n\n    /** @hidden @internal */\n    @ContentChildren(IgxGridExcelStyleFilteringComponent, { read: IgxGridExcelStyleFilteringComponent, descendants: false })\n    public excelStyleFilteringComponents: QueryList<IgxGridExcelStyleFilteringComponent>;\n\n    /** @hidden @internal */\n    public get excelStyleFilteringComponent() {\n        return this.excelStyleFilteringComponents?.first;\n    }\n\n    /** @hidden @internal */\n    public get headerGroups() {\n        return this.theadRow.groups;\n    }\n\n    /**\n     * Emitted when a cell is clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridCell`.\n     * @example\n     * ```html\n     * <igx-grid #grid (cellClick)=\"cellClick($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public cellClick = new EventEmitter<IGridCellEventArgs>();\n\n    /**\n     * Emitted when a row is clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridRow`.\n     * @example\n     * ```html\n     * <igx-grid #grid (rowClick)=\"rowClick($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowClick = new EventEmitter<IGridRowEventArgs>();\n\n\n    /**\n     * Emitted when formGroup is created on edit of row/cell.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (formGroupCreated)=\"formGroupCreated($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public formGroupCreated = new EventEmitter<IGridFormGroupCreatedEventArgs>();\n\n    /**\n     * Emitted when grid's validation status changes.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (validationStatusChange)=\"validationStatusChange($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public validationStatusChange = new EventEmitter<IGridValidationStatusEventArgs>();\n\n    /**\n     * Emitted when a cell is selected.\n     *\n     * @remarks\n     *  Returns the `IgxGridCell`.\n     * @example\n     * ```html\n     * <igx-grid #grid (selected)=\"onCellSelect($event)\" [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public selected = new EventEmitter<IGridCellEventArgs>();\n\n    /**\n     *  Emitted when `IgxGridRowComponent` is selected.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (rowSelectionChanging)=\"rowSelectionChanging($event)\" [data]=\"localData\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowSelectionChanging = new EventEmitter<IRowSelectionEventArgs>();\n\n    /**\n     *  Emitted when `IgxColumnComponent` is selected.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid (columnSelectionChanging)=\"columnSelectionChanging($event)\" [data]=\"localData\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnSelectionChanging = new EventEmitter<IColumnSelectionEventArgs>();\n\n    /**\n     * Emitted before `IgxColumnComponent` is pinned.\n     *\n     * @remarks\n     * The index at which to insert the column may be changed through the `insertAtIndex` property.\n     * @example\n     * ```typescript\n     * public columnPinning(event) {\n     *     if (event.column.field === \"Name\") {\n     *       event.insertAtIndex = 0;\n     *     }\n     * }\n     * ```\n     */\n    @Output()\n    public columnPin = new EventEmitter<IPinColumnCancellableEventArgs>();\n\n    /**\n     * Emitted after `IgxColumnComponent` is pinned.\n     *\n     * @remarks\n     * The index that the column is inserted at may be changed through the `insertAtIndex` property.\n     * @example\n     * ```typescript\n     * public columnPinning(event) {\n     *     if (event.column.field === \"Name\") {\n     *       event.insertAtIndex = 0;\n     *     }\n     * }\n     * ```\n     */\n    @Output()\n    public columnPinned = new EventEmitter<IPinColumnEventArgs>();\n\n    /**\n     * Emitted when cell enters edit mode.\n     *\n     * @remarks\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEditEnter)=\"editStart($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEditEnter = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * Emitted when cell exits edit mode.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEditExit)=\"editExit($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEditExit = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when cell has been edited.\n     *\n     * @remarks\n     * Event is fired after editing is completed, when the cell is exiting edit mode.\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEdit)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEdit = new EventEmitter<IGridEditEventArgs>();\n\n    /* blazorCSSuppress */\n    /**\n     * Emitted after cell has been edited and editing has been committed.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid3 (cellEditDone)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public cellEditDone = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when a row enters edit mode.\n     *\n     * @remarks\n     * Emitted when [rowEditable]=\"true\".\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEditEnter)=\"editStart($event)\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEditEnter = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * Emitted when exiting edit mode for a row.\n     *\n     * @remarks\n     * Emitted when [rowEditable]=\"true\" & `endEdit(true)` is called.\n     * Emitted when changing rows during edit mode, selecting an un-editable cell in the edited row,\n     * performing paging operation, column resizing, pinning, moving or hitting `Done`\n     * button inside of the rowEditingOverlay, or hitting the `Enter` key while editing a cell.\n     * This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEdit)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEdit = new EventEmitter<IGridEditEventArgs>();\n\n    /**\n     * Emitted after exiting edit mode for a row and editing has been committed.\n     *\n     * @remarks\n     * Emitted when [rowEditable]=\"true\" & `endEdit(true)` is called.\n     * Emitted when changing rows during edit mode, selecting an un-editable cell in the edited row,\n     * performing paging operation, column resizing, pinning, moving or hitting `Done`\n     * button inside of the rowEditingOverlay, or hitting the `Enter` key while editing a cell.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEditDone)=\"editDone($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEditDone = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when row editing is canceled.\n     *\n     * @remarks\n     * Emits when [rowEditable]=\"true\" & `endEdit(false)` is called.\n     * Emitted when changing hitting `Esc` key during cell editing and when click on the `Cancel` button\n     * in the row editing overlay.\n     * @example\n     * ```html\n     * <igx-grid #grid3 (rowEditExit)=\"editExit($event)\" [data]=\"data\" [primaryKey]=\"'ProductID'\" [rowEditable]=\"true\">\n     * </igx-grid>\n     * ```\n     */\n    @Output()\n    public rowEditExit = new EventEmitter<IGridEditDoneEventArgs>();\n\n    /**\n     * Emitted when a column is initialized.\n     *\n     * @remarks\n     * Returns the column object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (columnInit)=\"initColumns($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnInit = new EventEmitter<IgxColumnComponent>();\n\n    /* blazorInclude */\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public columnsAutogenerated = new EventEmitter<IColumnsAutoGeneratedEventArgs>();\n\n    /**\n     * Emitted before sorting expressions are applied.\n     *\n     * @remarks\n     * Returns an `ISortingEventArgs` object. `sortingExpressions` key holds the sorting expressions.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (sorting)=\"sorting($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public sorting = new EventEmitter<ISortingEventArgs>();\n\n    /**\n     * Emitted after sorting is completed.\n     *\n     * @remarks\n     * Returns the sorting expression.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (sortingDone)=\"sortingDone($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public sortingDone = new EventEmitter<ISortingExpression | ISortingExpression[]>();\n\n    /**\n     * Emitted before filtering expressions are applied.\n     *\n     * @remarks\n     * Returns an `IFilteringEventArgs` object. `filteringExpressions` key holds the filtering expressions for the column.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\" (filtering)=\"filtering($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public filtering = new EventEmitter<IFilteringEventArgs>();\n\n    /**\n     * Emitted after filtering is performed through the UI.\n     *\n     * @remarks\n     * Returns the filtering expressions tree of the column for which filtering was performed.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [height]=\"'305px'\" [autoGenerate]=\"true\" (filteringDone)=\"filteringDone($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public filteringDone = new EventEmitter<IFilteringExpressionsTree>();\n\n    /* blazorCSSuppress */\n    /**\n     * Emitted when a row is added.\n     *\n     * @remarks\n     * Returns the data for the new `IgxGridRowComponent` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowAdded)=\"rowAdded($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowAdded = new EventEmitter<IRowDataEventArgs>();\n\n    /* blazorCSSuppress */\n    /**\n     * Emitted when a row is deleted.\n     *\n     * @remarks\n     * Returns an `IRowDataEventArgs` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowDeleted)=\"rowDeleted($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowDeleted = new EventEmitter<IRowDataEventArgs>();\n\n    /**\n     * Emmited when deleting a row.\n     *\n     * @remarks\n     * This event is cancelable.\n     * Returns an IRowDataCancellableEventArgs` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowDelete)=\"rowDelete($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowDelete = new EventEmitter<IRowDataCancelableEventArgs>();\n\n    /**\n     * Emmited just before the newly added row is commited.\n     *\n     * @remarks\n     * This event is cancelable.\n     * Returns an IRowDataCancellableEventArgs` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (rowAdd)=\"rowAdd($event)\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowAdd = new EventEmitter<IRowDataCancelableEventArgs>();\n\n    /**\n     * Emitted after column is resized.\n     *\n     * @remarks\n     * Returns the `IgxColumnComponent` object's old and new width.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (columnResized)=\"resizing($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnResized = new EventEmitter<IColumnResizeEventArgs>();\n\n    /**\n     * Emitted when a cell or row is right clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridCell` object if the immediate context menu target is a cell or an `IgxGridRow` otherwise.\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (contextMenu)=\"contextMenu($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public contextMenu = new EventEmitter<IGridContextMenuEventArgs>();\n\n    /**\n     * Emitted when a cell is double clicked.\n     *\n     * @remarks\n     * Returns the `IgxGridCell` object.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (doubleClick)=\"dblClick($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public doubleClick = new EventEmitter<IGridCellEventArgs>();\n\n    /**\n     * Emitted before column visibility is changed.\n     *\n     * @remarks\n     * Args: { column: any, newValue: boolean }\n     * @example\n     * ```html\n     * <igx-grid (columnVisibilityChanging)=\"visibilityChanging($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnVisibilityChanging = new EventEmitter<IColumnVisibilityChangingEventArgs>();\n\n    /**\n     * Emitted after column visibility is changed.\n     *\n     * @remarks\n     * Args: { column: IgxColumnComponent, newValue: boolean }\n     * @example\n     * ```html\n     * <igx-grid (columnVisibilityChanged)=\"visibilityChanged($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnVisibilityChanged = new EventEmitter<IColumnVisibilityChangedEventArgs>();\n\n    /**\n     * Emitted when column moving starts.\n     *\n     * @remarks\n     * Returns the moved `IgxColumnComponent` object.\n     * @example\n     * ```html\n     * <igx-grid (columnMovingStart)=\"movingStart($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnMovingStart = new EventEmitter<IColumnMovingStartEventArgs>();\n\n    /**\n     * Emitted during the column moving operation.\n     *\n     * @remarks\n     * Returns the source and target `IgxColumnComponent` objects. This event is cancelable.\n     * @example\n     * ```html\n     * <igx-grid (columnMoving)=\"moving($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnMoving = new EventEmitter<IColumnMovingEventArgs>();\n\n    /**\n     * Emitted when column moving ends.\n     *\n     * @remarks\n     * Returns the source and target `IgxColumnComponent` objects.\n     * @example\n     * ```html\n     * <igx-grid (columnMovingEnd)=\"movingEnds($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public columnMovingEnd = new EventEmitter<IColumnMovingEndEventArgs>();\n\n    /**\n     * Emitted when keydown is triggered over element inside grid's body.\n     *\n     * @remarks\n     * This event is fired only if the key combination is supported in the grid.\n     * Return the target type, target object and the original event. This event is cancelable.\n     * @example\n     * ```html\n     *  <igx-grid (gridKeydown)=\"customKeydown($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public gridKeydown = new EventEmitter<IGridKeydownEventArgs>();\n\n    /**\n     * Emitted when start dragging a row.\n     *\n     * @remarks\n     * Return the dragged row.\n     */\n    @Output()\n    public rowDragStart = new EventEmitter<IRowDragStartEventArgs>();\n\n    /**\n     * Emitted when dropping a row.\n     *\n     * @remarks\n     * Return the dropped row.\n     */\n    @Output()\n    public rowDragEnd = new EventEmitter<IRowDragEndEventArgs>();\n\n    /**\n     * Emitted when a copy operation is executed.\n     *\n     * @remarks\n     * Fired only if copy behavior is enabled through the [`clipboardOptions`]{@link IgxGridBaseDirective#clipboardOptions}.\n     */\n    @Output()\n    public gridCopy = new EventEmitter<IGridClipboardEvent>();\n\n    /* blazorCSSuppress */\n    /**\n     * Emitted when the rows are expanded or collapsed.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (expansionStatesChange)=\"expansionStatesChange($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public expansionStatesChange = new EventEmitter<Map<any, boolean>>();\n\n    /* blazorInclude */\n    /**\n     * Emitted when the rows are selected or deselected.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (selectedRowsChange)=\"selectedRowsChange($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public selectedRowsChange = new EventEmitter<any[]>();\n\n    /**\n     * Emitted when the expanded state of a row gets changed.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (rowToggle)=\"rowToggle($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowToggle = new EventEmitter<IRowToggleEventArgs>();\n\n    /**\n     * Emitted when the pinned state of a row is changed.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (rowPinning)=\"rowPin($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowPinning = new EventEmitter<IPinRowEventArgs>();\n\n    /**\n     * Emitted when the pinned state of a row is changed.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"employeeData\" (rowPinned)=\"rowPin($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public rowPinned = new EventEmitter<IPinRowEventArgs>();\n\n    /**\n     * Emitted when the active node is changed.\n     *\n     * @example\n     * ```\n     * <igx-grid [data]=\"data\" [autoGenerate]=\"true\" (activeNodeChange)=\"activeNodeChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public activeNodeChange = new EventEmitter<IActiveNodeChangeEventArgs>();\n\n    /**\n     * Emitted before sorting is performed.\n     *\n     * @remarks\n     * Returns the sorting expressions.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (sortingExpressionsChange)=\"sortingExprChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public sortingExpressionsChange = new EventEmitter<ISortingExpression[]>();\n\n\n    /**\n     * Emitted when an export process is initiated by the user.\n     *\n     * @example\n     * ```typescript\n     * toolbarExporting(event: IGridToolbarExportEventArgs){\n     *     const toolbarExporting = event;\n     * }\n     * ```\n     */\n    @Output()\n    public toolbarExporting = new EventEmitter<IGridToolbarExportEventArgs>();\n\n    /* End of toolbar related definitions */\n\n    /**\n     * Emitted when making a range selection.\n     *\n     * @remarks\n     * Range selection can be made either through drag selection or through keyboard selection.\n     */\n    @Output()\n    public rangeSelected = new EventEmitter<GridSelectionRange>();\n\n    /** Emitted after the ngAfterViewInit hook. At this point the grid exists in the DOM */\n    @Output()\n    public rendered = new EventEmitter<boolean>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public localeChange = new EventEmitter<boolean>();\n\n    /**\n     * Emitted before the grid's data view is changed because of a data operation, rebinding, etc.\n     *\n     * @example\n     * ```typescript\n     *  <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (dataChanging)='handleDataChangingEvent()'></igx-grid>\n     * ```\n     */\n    @Output()\n    public dataChanging = new EventEmitter<IForOfDataChangeEventArgs>();\n\n    /**\n     * Emitted after the grid's data view is changed because of a data operation, rebinding, etc.\n     *\n     * @example\n     * ```typescript\n     *  <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (dataChanged)='handleDataChangedEvent()'></igx-grid>\n     * ```\n     */\n    @Output()\n    public dataChanged = new EventEmitter<IForOfDataChangeEventArgs>();\n\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxSnackbarComponent)\n    public addRowSnackbar: IgxSnackbarComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxGridColumnResizerComponent)\n    public resizeLine: IgxGridColumnResizerComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('loadingOverlay', { read: IgxToggleDirective, static: true })\n    public loadingOverlay: IgxToggleDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('igxLoadingOverlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    public loadingOutlet: IgxOverlayOutletDirective;\n\n    /* reactContentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: ColumnCollection */\n    /* ngQueryListName: columnList */\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxColumnComponent, { read: IgxColumnComponent, descendants: true })\n    public columnList: QueryList<IgxColumnComponent> = new QueryList<IgxColumnComponent>();\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: ActionStripCollection */\n    /* blazorCollectionItemName: ActionStrip */\n    /* ngQueryListName: actionStripComponents */\n    /** @hidden @internal */\n    @ContentChildren(IgxActionStripToken)\n    protected actionStripComponents: QueryList<IgxActionStripToken>;\n\n    /** @hidden @internal */\n    public get actionStrip() {\n        return this.actionStripComponents?.first;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxExcelStyleLoadingValuesTemplateDirective, { read: IgxExcelStyleLoadingValuesTemplateDirective, static: true })\n    public excelStyleLoadingValuesTemplateDirective: IgxExcelStyleLoadingValuesTemplateDirective;\n\n    /** @hidden @internal */\n    @ViewChild('emptyFilteredGrid', { read: TemplateRef, static: true })\n    public emptyFilteredGridTemplate: TemplateRef<any>;\n\n    /** @hidden @internal */\n    @ViewChild('defaultEmptyGrid', { read: TemplateRef, static: true })\n    public emptyGridDefaultTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultLoadingGrid', { read: TemplateRef, static: true })\n    public loadingGridDefaultTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('scrollContainer', { read: IgxGridForOfDirective, static: true })\n    public parentVirtDir: IgxGridForOfDirective<any, any[]>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxHeadSelectorDirective, { read: TemplateRef, descendants: false })\n    public headSelectorsTemplates: QueryList<TemplateRef<IgxHeadSelectorTemplateContext>>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxRowSelectorDirective, { read: TemplateRef, descendants: false })\n    public rowSelectorsTemplates: QueryList<TemplateRef<IgxRowSelectorTemplateContext>>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxRowDragGhostDirective, { read: TemplateRef, descendants: false })\n    public dragGhostCustomTemplates: QueryList<TemplateRef<IgxGridRowDragGhostContext>>;\n\n\n    /**\n     * Gets the custom template, if any, used for row drag ghost.\n     */\n    @Input()\n    public get dragGhostCustomTemplate() {\n        return this._dragGhostCustomTemplate || this.dragGhostCustomTemplates?.first;\n    }\n\n    /**\n     * Sets a custom template for the row drag ghost.\n     *```html\n     * <ng-template #template igxRowDragGhost>\n     *    <igx-icon>menu</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.dragGhostCustomTemplate = this.template;\n     * ```\n     */\n    public set dragGhostCustomTemplate(template: TemplateRef<IgxGridRowDragGhostContext>) {\n        this._dragGhostCustomTemplate = template;\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('verticalScrollContainer', { read: IgxGridForOfDirective, static: true })\n    public verticalScrollContainer: IgxGridForOfDirective<any, any[]>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('verticalScrollHolder', { read: IgxGridForOfDirective, static: true })\n    public verticalScroll: IgxGridForOfDirective<any, any[]>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('scr', { read: ElementRef, static: true })\n    public scr: ElementRef;\n\n    /** @hidden @internal */\n    @ViewChild('headSelectorBaseTemplate', { read: TemplateRef, static: true })\n    public headerSelectorBaseTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('footer', { read: ElementRef })\n    public footer: ElementRef;\n\n    /** @hidden @internal */\n    public get headerContainer() {\n        return this.theadRow?.headerForOf;\n    }\n\n    /** @hidden @internal */\n    public get headerSelectorContainer() {\n        return this.theadRow?.headerSelectorContainer;\n    }\n\n    /** @hidden @internal */\n    public get headerDragContainer() {\n        return this.theadRow?.headerDragContainer;\n    }\n\n    /** @hidden @internal */\n    public get headerGroupContainer() {\n        return this.theadRow?.headerGroupContainer;\n    }\n\n    /** @hidden @internal */\n    public get filteringRow(): IgxGridFilteringRowComponent {\n        return this.theadRow?.filterRow;\n    }\n\n    /** @hidden @internal */\n    @ViewChild(IgxGridHeaderRowComponent, { static: true })\n    public theadRow: IgxGridHeaderRowComponent;\n\n    /** @hidden @internal */\n    @ViewChild(IgxGridGroupByAreaComponent)\n    public groupArea: IgxGridGroupByAreaComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('tbody', { static: true })\n    public tbody: ElementRef;\n\n    @ViewChild(IgxGridBodyDirective, { static: true, read: ElementRef })\n    protected tbodyContainer: ElementRef;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('pinContainer', { read: ElementRef })\n    public pinContainer: ElementRef;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('tfoot', { static: true })\n    public tfoot: ElementRef<HTMLElement>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('igxRowEditingOverlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    public rowEditingOutletDirective: IgxOverlayOutletDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxTemplateOutletDirective, { read: IgxTemplateOutletDirective })\n    public tmpOutlets: QueryList<any> = new QueryList<any>();\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('dragIndicatorIconBase', { read: TemplateRef, static: true })\n    public dragIndicatorIconBase: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditTemplateDirective, { descendants: false, read: TemplateRef })\n    public rowEditCustomDirectives: QueryList<TemplateRef<IgxGridRowEditTemplateContext>>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditTextDirective, { descendants: false, read: TemplateRef })\n    public rowEditTextDirectives: QueryList<TemplateRef<IgxGridRowEditTextTemplateContext>>;\n\n    /**\n     * Gets the row edit text template.\n     */\n    @Input()\n    public get rowEditTextTemplate(): TemplateRef<IgxGridRowEditTextTemplateContext> {\n        return this._rowEditTextTemplate || this.rowEditTextDirectives?.first;\n    }\n    /**\n     * Sets the row edit text template.\n     *```html\n     * <ng-template #template igxRowEditText let-rowChangesCount>\n     * Changes: {{rowChangesCount}}\n     * </ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowEditTextTemplate = this.template;\n     * ```\n     */\n    public set rowEditTextTemplate(template: TemplateRef<IgxGridRowEditTextTemplateContext>) {\n        this._rowEditTextTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxRowAddTextDirective, { read: TemplateRef })\n    public rowAddText: TemplateRef<IgxGridEmptyTemplateContext>;\n\n    /**\n     * Gets the row add text template.\n     */\n    @Input()\n    public get rowAddTextTemplate(): TemplateRef<IgxGridEmptyTemplateContext> {\n        return this._rowAddTextTemplate || this.rowAddText;\n    }\n    /**\n     * Sets the row add text template.\n     *```html\n     * <ng-template #template igxRowAddText>\n     * Adding Row\n     * </ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowAddTextTemplate = this.template;\n     * ```\n     */\n    public set rowAddTextTemplate(template: TemplateRef<IgxGridEmptyTemplateContext>) {\n        this._rowAddTextTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditActionsDirective, { descendants: false, read: TemplateRef })\n    public rowEditActionsDirectives: QueryList<TemplateRef<IgxGridRowEditActionsTemplateContext>>;\n\n    /**\n     * Gets the row edit actions template.\n     */\n    @Input()\n    public get rowEditActionsTemplate(): TemplateRef<IgxGridRowEditActionsTemplateContext> {\n        return this._rowEditActionsTemplate || this.rowEditActionsDirectives?.first;\n    }\n    /**\n     * Sets the row edit actions template.\n     *```html\n     * <ng-template #template igxRowEditActions let-endRowEdit>\n     *     <button type=\"button\" igxButton igxRowEditTabStop (click)=\"endRowEdit(false)\">Cancel</button>\n     *     <button type=\"button\" igxButton igxRowEditTabStop (click)=\"endRowEdit(true)\">Apply</button>\n     * </ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowEditActionsTemplate = this.template;\n     * ```\n     */\n    public set rowEditActionsTemplate(template: TemplateRef<IgxGridRowEditActionsTemplateContext>) {\n        this._rowEditActionsTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a row expand indicator.\n     */\n    @ContentChild(IgxRowExpandedIndicatorDirective, { read: TemplateRef })\n    protected rowExpandedIndicatorDirectiveTemplate: TemplateRef<IgxGridRowTemplateContext> = null;\n\n    /**\n     * Gets the row expand indicator template.\n    */\n    @Input()\n    public get rowExpandedIndicatorTemplate(): TemplateRef<IgxGridRowTemplateContext> {\n        return this._rowExpandedIndicatorTemplate || this.rowExpandedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the row expand indicator template.\n     *```html\n     *<ng-template igxRowExpandedIndicator>\n     *  <igx-icon role=\"button\">remove</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowExpandedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set rowExpandedIndicatorTemplate(template: TemplateRef<IgxGridRowTemplateContext>) {\n        this._rowExpandedIndicatorTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a row collapse indicator.\n     */\n    @ContentChild(IgxRowCollapsedIndicatorDirective, { read: TemplateRef })\n    protected rowCollapsedIndicatorDirectiveTemplate: TemplateRef<IgxGridRowTemplateContext> = null;\n\n    /**\n     * Gets the row collapse indicator template.\n    */\n    @Input()\n    public get rowCollapsedIndicatorTemplate(): TemplateRef<IgxGridRowTemplateContext> {\n        return this._rowCollapsedIndicatorTemplate || this.rowCollapsedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the row collapse indicator template.\n     *```html\n     *<ng-template igxRowCollapsedIndicator>\n     *  <igx-icon role=\"button\">add</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.rowCollapsedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set rowCollapsedIndicatorTemplate(template: TemplateRef<IgxGridRowTemplateContext>) {\n        this._rowCollapsedIndicatorTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a header expand indicator.\n     */\n    @ContentChild(IgxHeaderExpandedIndicatorDirective, { read: TemplateRef })\n    protected headerExpandedIndicatorDirectiveTemplate: TemplateRef<IgxGridTemplateContext> = null;\n\n    /**\n     * Gets the header expand indicator template.\n    */\n    @Input()\n    public get headerExpandedIndicatorTemplate(): TemplateRef<IgxGridTemplateContext> {\n        return this._headerExpandIndicatorTemplate || this.headerExpandedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the header expand indicator template.\n     *```html\n     *<ng-template igxHeaderExpandedIndicator>\n     *  <igx-icon role=\"button\">remove</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.headerExpandedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set headerExpandedIndicatorTemplate(template: TemplateRef<IgxGridTemplateContext>) {\n        this._headerExpandIndicatorTemplate = template;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering a header collapse indicator.\n     */\n    @ContentChild(IgxHeaderCollapsedIndicatorDirective, { read: TemplateRef })\n    protected headerCollapsedIndicatorDirectiveTemplate: TemplateRef<IgxGridTemplateContext> = null;\n\n    /**\n     * Gets the row collapse indicator template.\n    */\n    @Input()\n    public get headerCollapsedIndicatorTemplate(): TemplateRef<IgxGridTemplateContext> {\n        return this._headerCollapseIndicatorTemplate || this.headerCollapsedIndicatorDirectiveTemplate;\n    }\n\n    /**\n     * Sets the row collapse indicator template.\n     *```html\n     *<ng-template igxHeaderCollapsedIndicator>\n     *  <igx-icon role=\"button\">add</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.headerCollapsedIndicatorTemplate = this.template;\n     * ```\n    */\n    public set headerCollapsedIndicatorTemplate(template: TemplateRef<IgxGridTemplateContext>) {\n        this._headerCollapseIndicatorTemplate = template;\n    }\n\n    /** @hidden @internal */\n    @ContentChild(IgxExcelStyleHeaderIconDirective, { read: TemplateRef })\n    public excelStyleHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * Gets the excel style header icon.\n    */\n    @Input()\n    public get excelStyleHeaderIconTemplate(): TemplateRef<IgxGridHeaderTemplateContext> {\n        return this._excelStyleHeaderIconTemplate || this.excelStyleHeaderIconDirectiveTemplate;\n    }\n\n    /**\n     * Sets the excel style header icon.\n     *```html\n     *<ng-template #template igxExcelStyleHeaderIcon>\n     * <igx-icon>filter_alt</igx-icon>\n     *</ng-template>\n     * ```\n     *```typescript\n     * @ViewChild('template', {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.excelStyleHeaderIconTemplate = this.template;\n     * ```\n    */\n    public set excelStyleHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._excelStyleHeaderIconTemplate = template;\n    }\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxSortAscendingHeaderIconDirective, { read: TemplateRef })\n    public sortAscendingHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering a header sorting indicator when columns are sorted in asc order.\n     */\n    @Input()\n    public get sortAscendingHeaderIconTemplate(): TemplateRef<IgxGridHeaderTemplateContext> {\n        return this._sortAscendingHeaderIconTemplate;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering a header sorting indicator when columns are sorted in asc order.\n     *```html\n     * <ng-template #template igxSortAscendingHeaderIcon>\n     *    <igx-icon>expand_less</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.sortAscendingHeaderIconTemplate = this.template;\n     * ```\n     */\n    public set sortAscendingHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._sortAscendingHeaderIconTemplate = template;\n    }\n\n    /** @hidden @internal */\n    @ContentChild(IgxSortDescendingHeaderIconDirective, { read: TemplateRef })\n    public sortDescendingHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * The custom template, if any, that should be used when rendering a header sorting indicator when columns are sorted in desc order.\n     */\n    @Input()\n    public get sortDescendingHeaderIconTemplate() {\n        return this._sortDescendingHeaderIconTemplate;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering a header sorting indicator when columns are sorted in desc order.\n     *```html\n     * <ng-template #template igxSortDescendingHeaderIcon>\n     *    <igx-icon>expand_more</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.sortDescendingHeaderIconTemplate = this.template;\n     * ```\n     */\n    public set sortDescendingHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._sortDescendingHeaderIconTemplate = template;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxSortHeaderIconDirective, { read: TemplateRef })\n    public sortHeaderIconDirectiveTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n\n    /**\n     * Gets custom template, if any, that should be used when rendering a header sorting indicator when columns are not sorted.\n     */\n    @Input()\n    public get sortHeaderIconTemplate(): TemplateRef<IgxGridHeaderTemplateContext> {\n        return this._sortHeaderIconTemplate;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering a header sorting indicator when columns are not sorted.\n     *```html\n     * <ng-template #template igxSortHeaderIcon>\n     *    <igx-icon>unfold_more</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.sortHeaderIconTemplate = this.template;\n     * ```\n     */\n    public set sortHeaderIconTemplate(template: TemplateRef<IgxGridHeaderTemplateContext>) {\n        this._sortHeaderIconTemplate = template;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxDragIndicatorIconDirective, { read: TemplateRef, descendants: false })\n    public dragIndicatorIconTemplates: QueryList<TemplateRef<IgxGridEmptyTemplateContext>>;\n\n\n    @ContentChild(IgxGridLoadingTemplateDirective, { read: TemplateRef })\n    protected loadingDirectiveTemplate: TemplateRef<IgxGridTemplateContext>;\n\n    @ContentChild(IgxGridEmptyTemplateDirective, { read: TemplateRef })\n    protected emptyDirectiveTemplate: TemplateRef<IgxGridTemplateContext>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChildren(IgxRowEditTabStopDirective)\n    public rowEditTabsDEFAULT: QueryList<IgxRowEditTabStopDirective>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChildren(IgxRowEditTabStopDirective, { descendants: true })\n    public rowEditTabsCUSTOM: QueryList<IgxRowEditTabStopDirective>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('rowEditingOverlay', { read: IgxToggleDirective })\n    public rowEditingOverlay: IgxToggleDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.tabindex')\n    public tabindex = 0;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public hostRole = 'grid';\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: GridToolbarCollection */\n    /* ngQueryListName: toolbar */\n    /** @hidden @internal */\n    @ContentChildren(IgxToolbarToken)\n    public toolbar: QueryList<IgxGridToolbarComponent>;\n\n    /* contentChildren */\n    /* blazorInclude */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: PaginatorCollection */\n    /* ngQueryListName: paginationComponents */\n    /** @hidden @internal */\n    @ContentChildren(IgxPaginatorToken)\n    protected paginationComponents: QueryList<IgxPaginatorComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('igxFilteringOverlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    protected _outletDirective: IgxOverlayOutletDirective;\n\n    /**\n     * @hidden @internal\n     * @igxElementsAnchor\n     */\n    @ViewChild('sink', { read: ViewContainerRef, static: true })\n    public anchor: ViewContainerRef;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExpandedTemplate', { read: TemplateRef, static: true })\n    protected defaultExpandedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultCollapsedTemplate', { read: TemplateRef, static: true })\n    protected defaultCollapsedTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultESFHeaderIcon', { read: TemplateRef, static: true })\n    protected defaultESFHeaderIconTemplate: TemplateRef<any>;\n\n    @ViewChildren('summaryRow', { read: IgxSummaryRowComponent })\n    protected _summaryRowList: QueryList<IgxSummaryRowComponent>;\n\n    @ViewChildren('row')\n    private _rowList: QueryList<IgxGridRowComponent>;\n\n    @ViewChildren('pinnedRow')\n    private _pinnedRowList: QueryList<IgxGridRowComponent>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultRowEditTemplate', { read: TemplateRef, static: true })\n    private defaultRowEditTemplate: TemplateRef<IgxGridRowEditTemplateContext>;\n\n    @ViewChildren(IgxRowDirective, { read: IgxRowDirective })\n    private _dataRowList: QueryList<IgxRowDirective>;\n\n    @HostBinding('class.igx-grid')\n    protected baseClass = 'igx-grid';\n\n    @HostBinding('attr.aria-colcount')\n    protected get ariaColCount(): number {\n        return this.visibleColumns.length;\n    }\n\n    @HostBinding('attr.aria-rowcount')\n    protected get ariaRowCount(): number {\n        return this._rendered ? this._rowCount : null;\n    }\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    @Input()\n    public set resourceStrings(value: IGridResourceStrings) {\n        this._resourceStrings = Object.assign({}, this.resourceStrings, value);\n        this.notifyChanges();\n    }\n\n    public get resourceStrings(): IGridResourceStrings {\n        return this._resourceStrings || this._defaultResourceStrings;\n    }\n\n    /**\n     * Gets/Sets the filtering logic of the `IgxGridComponent`.\n     *\n     * @remarks\n     * The default is AND.\n     * @example\n     * ```html\n     * <igx-grid [data]=\"Data\" [autoGenerate]=\"true\" [filteringLogic]=\"filtering\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get filteringLogic() {\n        return this._filteringExpressionsTree.operator;\n    }\n\n    public set filteringLogic(value: FilteringLogic) {\n        this._filteringExpressionsTree.operator = value;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor */\n    /**\n     * Gets/Sets the filtering state.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(filteringExpressionsTree)]=\"model.filteringExpressions\"></igx-grid>\n     * ```\n     * @remarks\n     * Supports two-way binding.\n     */\n    @WatchChanges()\n    @Input()\n    public get filteringExpressionsTree() {\n        return this._filteringExpressionsTree;\n    }\n\n    public set filteringExpressionsTree(value) {\n        if (value && isTree(value)) {\n            for (let index = 0; index < value.filteringOperands.length; index++) {\n                if (!(isTree(value.filteringOperands[index]))) {\n                    const newExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And, value.filteringOperands[index].fieldName);\n                    newExpressionsTree.filteringOperands.push(value.filteringOperands[index]);\n                    value.filteringOperands[index] = newExpressionsTree;\n                }\n            }\n\n            value.type = FilteringExpressionsTreeType.Regular;\n            if (value && this._columns?.length > 0) {\n                this._filteringExpressionsTree = this.getRecreatedTree(value);\n            } else {\n                this._filteringExpressionsTree = value;\n            }\n            this.filteringPipeTrigger++;\n            this.filteringExpressionsTreeChange.emit(this._filteringExpressionsTree);\n\n            if (this.filteringService.isFilteringExpressionsTreeEmpty(this._filteringExpressionsTree) &&\n                this.filteringService.isFilteringExpressionsTreeEmpty(this._advancedFilteringExpressionsTree)) {\n                this._filteredData = null;\n            }\n\n            this.filteringService.refreshExpressions();\n            this.selectionService.clearHeaderCBState();\n            this.summaryService.clearSummaryCache();\n            this.notifyChanges();\n        }\n    }\n\n    /**\n     * Gets/Sets the advanced filtering state.\n     *\n     * @example\n     * ```typescript\n     * let advancedFilteringExpressionsTree = this.grid.advancedFilteringExpressionsTree;\n     * this.grid.advancedFilteringExpressionsTree = logic;\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get advancedFilteringExpressionsTree() {\n        return this._advancedFilteringExpressionsTree;\n    }\n\n    public set advancedFilteringExpressionsTree(value) {\n        const filteringEventArgs: IFilteringEventArgs = {\n            owner: this,\n            filteringExpressions: value,\n            cancel: false\n        };\n\n        this.filtering.emit(filteringEventArgs);\n\n        if (filteringEventArgs.cancel) {\n            return;\n        }\n\n        if (value && isTree(value)) {\n            value.type = FilteringExpressionsTreeType.Advanced;\n            if (this._columns && this._columns.length > 0) {\n                this._advancedFilteringExpressionsTree = this.getRecreatedTree(value);\n            } else {\n                this._advancedFilteringExpressionsTree = value;\n            }\n            this.filteringPipeTrigger++;\n        } else {\n            this._advancedFilteringExpressionsTree = null;\n        }\n        this.advancedFilteringExpressionsTreeChange.emit(this._advancedFilteringExpressionsTree);\n\n        if (this.filteringService.isFilteringExpressionsTreeEmpty(this._filteringExpressionsTree) &&\n            this.filteringService.isFilteringExpressionsTreeEmpty(this._advancedFilteringExpressionsTree)) {\n            this._filteredData = null;\n        }\n\n        this.selectionService.clearHeaderCBState();\n        this.summaryService.clearSummaryCache();\n        this.notifyChanges();\n\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.filteringDone.emit(this._advancedFilteringExpressionsTree));\n    }\n\n    /**\n     * Gets/Sets the locale.\n     *\n     * @remarks\n     * If not set, returns browser's language.\n     */\n    @Input()\n    public get locale(): string {\n        return this._locale || this._defaultLocale;\n    }\n\n    public set locale(value: string) {\n        if (value !== this._locale) {\n            this._locale = this.i18nFormatter.verifyLocale(value);\n            this._defaultResourceStrings = getCurrentResourceStrings(GridResourceStringsEN, false, this._locale);\n            this._currencyPositionLeft = undefined;\n            this.summaryService.clearSummaryCache();\n            this.pipeTrigger++;\n            this.notifyChanges();\n            this.localeChange.emit();\n        }\n    }\n\n    @Input()\n    public get pagingMode() {\n        return this._pagingMode;\n    }\n\n    public set pagingMode(val: GridPagingMode) {\n        this._pagingMode = val;\n        this.pipeTrigger++;\n        this.notifyChanges(true);\n    }\n\n    /** @hidden @internal */\n    public get page(): number {\n        return this.paginator?.page || 0;\n    }\n\n    public set page(val: number) {\n        if (this.paginator) {\n            this.paginator.page = val;\n        }\n    }\n\n    /** @hidden @internal */\n    public get perPage(): number {\n        return this.paginator?.perPage || DEFAULT_ITEMS_PER_PAGE;\n    }\n\n    public set perPage(val: number) {\n        if (this.paginator) {\n            this.paginator.perPage = val;\n        }\n    }\n\n    /**\n     * Gets/Sets if the row selectors are hidden.\n     *\n     * @remarks\n     *  By default row selectors are shown\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public get hideRowSelectors() {\n        return this._hideRowSelectors;\n    }\n\n    public set hideRowSelectors(value: boolean) {\n        this._hideRowSelectors = value;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Gets/Sets whether rows can be moved.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [rowDraggable]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get rowDraggable(): boolean {\n        return this._rowDrag && this.hasVisibleColumns;\n    }\n\n    public set rowDraggable(val: boolean) {\n        this._rowDrag = val;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Gets/Sets the trigger for validators used when editing the grid.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid validationTrigger='blur'></igx-grid>\n     * ```\n     */\n    @Input()\n    public validationTrigger: GridValidationTrigger = 'change';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public rowDragging = false;\n\n    /** @hidden @internal */\n    public dragRowID = null;\n\n    /**\n     * Gets/Sets whether the rows are editable.\n     *\n     * @remarks\n     * By default it is set to false.\n     * @example\n     * ```html\n     * <igx-grid #grid [rowEditable]=\"true\" [primaryKey]=\"'ProductID'\" ></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public get rowEditable(): boolean {\n        return this._rowEditable;\n    }\n\n    public set rowEditable(val: boolean) {\n        if (!this._init) {\n            this.refreshGridState();\n        }\n        this._rowEditable = val;\n        this.notifyChanges();\n    }\n\n    /**\n     * Gets/Sets the height.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @HostBinding('style.height')\n    @Input()\n    public get height(): string | null {\n        return this._height;\n    }\n\n    public set height(value: string | null) {\n        if (this._height !== value) {\n            this._height = value;\n            this.nativeElement.style.height = value;\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('style.width')\n    public get hostWidth() {\n        return this._width || this._hostWidth;\n    }\n\n    /**\n     * Gets/Sets the width of the grid.\n     *\n     * @example\n     * ```typescript\n     * let gridWidth = this.grid.width;\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get width(): string | null {\n        return this._width;\n    }\n\n    public set width(value: string | null) {\n        if (this._width !== value) {\n            this._width = value;\n            this.nativeElement.style.width = value;\n            this.notifyChanges(true);\n        }\n    }\n\n    /** @hidden @internal */\n    public get headerWidth() {\n        return parseInt(this.width, 10) - 17;\n    }\n\n    /**\n     * Gets/Sets the row height.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [rowHeight]=\"100\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get rowHeight(): number {\n        return this._rowHeight ? this._rowHeight : this.defaultRowHeight;\n    }\n\n    public set rowHeight(value: number | string) {\n        if (typeof value !== 'number') {\n            value = parseInt(value, 10);\n        }\n        this._rowHeight = value;\n    }\n\n    /**\n     * Gets/Sets the default width of the columns.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [columnWidth]=\"100\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get columnWidth(): string {\n        return this._columnWidth;\n    }\n    public set columnWidth(value: string) {\n        this._columnWidth = value;\n        this.columnWidthSetByUser = true;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Get/Sets the message displayed when there are no records.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [emptyGridMessage]=\"'The grid is empty'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public set emptyGridMessage(value: string) {\n        this._emptyGridMessage = value;\n    }\n    public get emptyGridMessage(): string {\n        return this._emptyGridMessage || this.resourceStrings.igx_grid_emptyGrid_message;\n    }\n\n    /**\n     * Gets/Sets whether the grid is going to show a loading indicator.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [isLoading]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public set isLoading(value: boolean) {\n        if (this._isLoading !== value) {\n            this._isLoading = value;\n            if (this.data) {\n                this.evaluateLoadingState();\n            }\n        }\n        Promise.resolve().then(() => {\n            // wait for the current detection cycle to end before triggering a new one.\n            this.notifyChanges();\n        });\n    }\n\n    public get isLoading(): boolean {\n        return this._isLoading;\n    }\n\n    /**\n     * Gets/Sets whether the columns should be auto-generated once again after the initialization of the grid\n     *\n     * @remarks\n     * This will allow to bind the grid to remote data and having auto-generated columns at the same time.\n     * Note that after generating the columns, this property would be disabled to avoid re-creating\n     * columns each time a new data is assigned.\n     * @example\n     * ```typescript\n     *  this.grid.shouldGenerate = true;\n     * ```\n     * @deprecated in version 18.2.0. Column re-creation now relies on `autoGenerate` instead.\n     */\n    public get shouldGenerate(): boolean {\n        return this.autoGenerate;\n    }\n\n    public set shouldGenerate(value: boolean) {\n        this.autoGenerate = value;\n    }\n\n    /**\n     * Gets/Sets the message displayed when there are no records and the grid is filtered.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [emptyGridMessage]=\"'The grid is empty'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public set emptyFilteredGridMessage(value: string) {\n        this._emptyFilteredGridMessage = value;\n    }\n\n    public get emptyFilteredGridMessage(): string {\n        return this._emptyFilteredGridMessage || this.resourceStrings.igx_grid_emptyFilteredGrid_message;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * Gets/Sets the initial pinning configuration.\n     *\n     * @remarks\n     * Allows to apply pinning the columns to the start or the end.\n     * Note that pinning to both sides at a time is not allowed.\n     * @example\n     * ```html\n     * <igx-grid [pinning]=\"pinningConfig\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get pinning() {\n        return this._pinning;\n    }\n    public set pinning(value) {\n        if (value !== this._pinning) {\n            this.resetCaches();\n        }\n\n        this._pinning = Object.assign({}, this._pinning, value);\n    }\n\n    /**\n     * Gets/Sets if the filtering is enabled.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [allowFiltering]=\"true\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get allowFiltering() {\n        return this._allowFiltering;\n    }\n\n    public set allowFiltering(value) {\n        if (this._allowFiltering !== value) {\n            this._allowFiltering = value;\n            this.filteringService.registerSVGIcons();\n\n\n            this.filteringService.isFilterRowVisible = false;\n            this.filteringService.filteredColumn = null;\n\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * Gets/Sets a value indicating whether the advanced filtering is enabled.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [allowAdvancedFiltering]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get allowAdvancedFiltering() {\n        return this._allowAdvancedFiltering;\n    }\n\n    public set allowAdvancedFiltering(value) {\n        if (this._allowAdvancedFiltering !== value) {\n            this._allowAdvancedFiltering = value;\n            this.filteringService.registerSVGIcons();\n\n            if (!this._init) {\n                this.notifyChanges(true);\n            }\n        }\n    }\n\n    /**\n     * Gets/Sets the filter mode.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [filterMode]=\"'quickFilter'\" [height]=\"'305px'\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default it's set to FilterMode.quickFilter.\n     */\n    @Input()\n    public get filterMode() {\n        return this._filterMode;\n    }\n\n    public set filterMode(value: FilterMode) {\n        switch (value) {\n            case FilterMode.excelStyleFilter:\n            case FilterMode.quickFilter:\n                this._filterMode = value;\n                break;\n            default:\n                break;\n        }\n\n        if (this.filteringService.isFilterRowVisible) {\n            this.filteringRow.close();\n        }\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Gets/Sets the summary position.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" summaryPosition=\"top\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default it is bottom.\n     */\n    @Input()\n    public get summaryPosition() {\n        return this._summaryPosition;\n    }\n\n    public set summaryPosition(value: GridSummaryPosition) {\n        this._summaryPosition = value;\n        this.notifyChanges();\n    }\n\n    /**\n     * Gets/Sets the summary calculation mode.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" summaryCalculationMode=\"rootLevelOnly\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default it is rootAndChildLevels which means the summaries are calculated for the root level and each child level.\n     */\n    @Input()\n    public get summaryCalculationMode() {\n        return this._summaryCalculationMode;\n    }\n\n    public set summaryCalculationMode(value: GridSummaryCalculationMode) {\n        this._summaryCalculationMode = value;\n        if (!this._init) {\n            this.crudService.endEdit(false);\n            this.summaryService.resetSummaryHeight();\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * Controls whether the summary row is visible when groupBy/parent row is collapsed.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [showSummaryOnCollapse]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     * @remarks\n     * By default showSummaryOnCollapse is set to 'false' which means that the summary row is not visible\n     * when the groupBy/parent row is collapsed.\n     */\n    @Input({ transform: booleanAttribute })\n    public get showSummaryOnCollapse() {\n        return this._showSummaryOnCollapse;\n    }\n\n    public set showSummaryOnCollapse(value: boolean) {\n        this._showSummaryOnCollapse = value;\n        this.notifyChanges();\n    }\n\n    /**\n     * Gets/Sets the filtering strategy of the grid.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [filterStrategy]=\"filterStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get filterStrategy(): IFilteringStrategy {\n        return this._filterStrategy;\n    }\n\n    public set filterStrategy(classRef: IFilteringStrategy) {\n        this._filterStrategy = classRef;\n    }\n\n    /**\n     * Gets/Sets the sorting strategy of the grid.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [sortStrategy]=\"sortStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get sortStrategy(): IGridSortingStrategy {\n        return this._sortingStrategy;\n    }\n\n    public set sortStrategy(value: IGridSortingStrategy) {\n        this._sortingStrategy = value;\n    }\n\n    /* csSuppress */\n    /**\n     * Gets/Sets the merge strategy of the grid.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [mergeStrategy]=\"mergeStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get mergeStrategy() {\n        return this._mergeStrategy;\n    }\n    public set mergeStrategy(value) {\n        this._mergeStrategy = value;\n    }\n\n    /**\n     * Gets/Sets the sorting options - single or multiple sorting.\n     * Accepts an `ISortingOptions` object with any of the `mode` properties.\n     *\n     * @example\n     * ```typescript\n     * const _sortingOptions: ISortingOptions = {\n     *      mode: 'single'\n     * }\n     * ```html\n     * <igx-grid [sortingOptions]=\"sortingOptions\"><igx-grid>\n     * ```\n     */\n    @Input()\n    public set sortingOptions(value: ISortingOptions) {\n        if (!this._init) {\n            // clear sort only if option is changed runtime. No need to clear on initial load.\n            this.clearSort();\n        }\n        this._sortingOptions = Object.assign(this._sortingOptions, value);\n    }\n\n    public get sortingOptions() {\n        return this._sortingOptions;\n    }\n\n    /* blazorByValueArray */\n    /* blazorAlwaysWriteback */\n    /* @tsTwoWayProperty (true, \"SelectedRowsChange\", \"Detail\", false) */\n    /* blazorPrimitiveValue */\n    /**\n     * Gets/Sets the current selection state.\n     *\n     * @remarks\n     * Represents the selected rows' IDs (primary key or rowData)\n     * @example\n     * ```html\n     * <igx-grid [data]=\"localData\" primaryKey=\"ID\" rowSelection=\"multiple\" [selectedRows]=\"[0, 1, 2]\"><igx-grid>\n     * ```\n     */\n    @Input()\n    public set selectedRows(rowIDs: any[]) {\n        this.selectRows(rowIDs || [], true);\n    }\n\n    public get selectedRows(): any[] {\n        return this.selectionService.getSelectedRows();\n    }\n\n\n    /** @hidden @internal */\n    public get headerGroupsList(): IgxGridHeaderGroupComponent[] {\n        return this.theadRow.groups;\n    }\n\n    /** @hidden @internal */\n    public get headerCellList(): IgxGridHeaderComponent[] {\n        return this.headerGroupsList.map(headerGroup => headerGroup.header).filter(header => header);\n    }\n\n    /** @hidden @internal */\n    public get filterCellList(): IgxGridFilteringCellComponent[] {\n        return this.headerGroupsList.map(group => group.filter).filter(cell => cell);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get summariesRowList() {\n        const res = new QueryList<any>();\n        if (!this._summaryRowList) {\n            return res;\n        }\n        const sumList = this._summaryRowList.filter((item) => item.element.nativeElement.parentElement !== null);\n        res.reset(sumList);\n        return res;\n    }\n\n    /* csSuppress */\n    /**\n     * A list of `IgxGridRowComponent`.\n     *\n     * @example\n     * ```typescript\n     * const rowList = this.grid.rowList;\n     * ```\n     */\n    public get rowList() {\n        const res = new QueryList<IgxRowDirective>();\n        if (!this._rowList) {\n            return res;\n        }\n        const rList = this._rowList\n            .filter((item) => item.element.nativeElement.parentElement !== null)\n            .sort((a, b) => a.index - b.index);\n        res.reset(rList);\n        return res;\n    }\n\n    /* csSuppress */\n    /**\n     * A list of currently rendered `IgxGridRowComponent`'s.\n     *\n     * @example\n     * ```typescript\n     * const dataList = this.grid.dataRowList;\n     * ```\n     */\n    public get dataRowList(): QueryList<IgxRowDirective> {\n        const res = new QueryList<IgxRowDirective>();\n        if (!this._dataRowList) {\n            return res;\n        }\n        const rList = this._dataRowList.filter(item => item.element.nativeElement.parentElement !== null).sort((a, b) => a.index - b.index);\n        res.reset(rList);\n        return res;\n    }\n\n    /**\n     * Gets the header row selector template.\n     */\n    @Input()\n    public get headSelectorTemplate(): TemplateRef<IgxHeadSelectorTemplateContext> {\n        return this._headSelectorTemplate || this.headSelectorsTemplates?.first;\n    }\n\n    /**\n     * Sets the header row selector template.\n     * ```html\n     * <ng-template #template igxHeadSelector let-headContext>\n     * {{ headContext.selectedCount }} / {{ headContext.totalCount  }}\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.headSelectorTemplate = this.template;\n     * ```\n     */\n    public set headSelectorTemplate(template: TemplateRef<IgxHeadSelectorTemplateContext>) {\n        this._headSelectorTemplate = template;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get isRowPinningToTop() {\n        return this.pinning.rows !== RowPinningPosition.Bottom;\n    }\n\n    /**\n     * Gets the row selector template.\n     */\n    @Input()\n    public get rowSelectorTemplate(): TemplateRef<IgxRowSelectorTemplateContext> {\n        return this._rowSelectorTemplate || this.rowSelectorsTemplates?.first;\n    }\n\n    /**\n         * Sets a custom template for the row selectors.\n         * ```html\n         * <ng-template #template igxRowSelector let-rowContext>\n         *    <igx-checkbox [checked]=\"rowContext.selected\"></igx-checkbox>\n         * </ng-template>\n         * ```\n         * ```typescript\n         * @ViewChild(\"'template'\", {read: TemplateRef })\n         * public template: TemplateRef<any>;\n         * this.grid.rowSelectorTemplate = this.template;\n         * ```\n         */\n    public set rowSelectorTemplate(template: TemplateRef<IgxRowSelectorTemplateContext>) {\n        this._rowSelectorTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rowOutletDirective() {\n        return this.rowEditingOutletDirective;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get parentRowOutletDirective() {\n        return this.outlet;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rowEditCustom(): TemplateRef<IgxGridRowEditTemplateContext> {\n        if (this.rowEditCustomDirectives && this.rowEditCustomDirectives.first) {\n            return this.rowEditCustomDirectives.first;\n        }\n        return null;\n    }\n\n    /**\n\n    /**\n     * @hidden @internal\n     */\n    public get rowEditContainer(): TemplateRef<IgxGridRowEditTemplateContext> {\n        return this.rowEditCustom ? this.rowEditCustom : this.defaultRowEditTemplate;\n    }\n\n    /**\n     * The custom template, if any, that should be used when rendering the row drag indicator icon\n     */\n    @Input()\n    public get dragIndicatorIconTemplate(): TemplateRef<IgxGridEmptyTemplateContext> {\n        return this._customDragIndicatorIconTemplate || this.dragIndicatorIconTemplates?.first;\n    }\n\n    /**\n     * Sets a custom template that should be used when rendering the row drag indicator icon.\n     *```html\n     * <ng-template #template igxDragIndicatorIcon>\n     *    <igx-icon>expand_less</igx-icon>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.dragIndicatorIconTemplate = this.template;\n     * ```\n     */\n    public set dragIndicatorIconTemplate(val: TemplateRef<IgxGridEmptyTemplateContext>) {\n        this._customDragIndicatorIconTemplate = val;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get firstEditableColumnIndex(): number {\n        const index = this.visibleColumns.filter(col => col.editable)\n            .map(c => c.visibleIndex).sort((a, b) => a - b);\n        return index.length ? index[0] : null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get lastEditableColumnIndex(): number {\n        const index = this.visibleColumns.filter(col => col.editable)\n            .map(c => c.visibleIndex).sort((a, b) => a > b ? -1 : 1);\n        return index.length ? index[0] : null;\n    }\n\n    /**\n     * @hidden @internal\n     * TODO: Nav service logic doesn't handle 0 results from this querylist\n     */\n    public get rowEditTabs(): QueryList<IgxRowEditTabStopDirective> {\n        return this.rowEditTabsCUSTOM.length ? this.rowEditTabsCUSTOM : this.rowEditTabsDEFAULT;\n    }\n\n    /** @hidden @internal */\n    public get activeDescendant(): string | undefined {\n        const activeElem = this.navigation.activeNode;\n\n        if (!activeElem || !Object.keys(activeElem).length || activeElem.row < 0) {\n            return;\n        }\n        return `${this.id}_${activeElem.row}_${activeElem.column}`;\n    }\n\n    /** @hidden @internal */\n    public get bannerClass(): string {\n        const position = this.rowEditPositioningStrategy.isTop ? 'igx-banner__border-top' : 'igx-banner__border-bottom';\n        return `igx-banner ${position}`;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * Gets/Sets the sorting state.\n     *\n     * @remarks\n     * Supports two-way data binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(sortingExpressions)]=\"model.sortingExpressions\"></igx-grid>\n     * ```\n     */\n    @WatchChanges()\n    @Input()\n    public get sortingExpressions(): ISortingExpression[] {\n        return this._sortingExpressions;\n    }\n\n    public set sortingExpressions(value: ISortingExpression[]) {\n        this._sortingExpressions = cloneArray(value);\n        this.sortingExpressionsChange.emit(this._sortingExpressions);\n        if (this.cellMergeMode === GridCellMergeMode.onSort) {\n            this.resetColumnCollections();\n        }\n        this.notifyChanges();\n    }\n\n    /**\n     * Gets the number of hidden columns.\n     *\n     * @example\n     * ```typescript\n     * const hiddenCol = this.grid.hiddenColumnsCount;\n     * ``\n     */\n    public get hiddenColumnsCount() {\n        return this._columns.filter((col) => col.columnGroup === false && col.hidden === true).length;\n    }\n\n    /**\n     * Gets the number of pinned columns.\n     */\n    public get pinnedColumnsCount() {\n        return this.pinnedColumns.filter(col => !col.columnLayout).length;\n    }\n\n    /**\n     * Gets/Sets whether the grid has batch editing enabled.\n     * When batch editing is enabled, changes are not made directly to the underlying data.\n     * Instead, they are stored as transactions, which can later be committed w/ the `commit` method.\n     *\n     * @example\n     * ```html\n     * <igx-grid [batchEditing]=\"true\" [data]=\"someData\">\n     * </igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get batchEditing(): boolean {\n        return this._batchEditing;\n    }\n\n    public set batchEditing(val: boolean) {\n        if (val !== this._batchEditing) {\n            delete this._transactions;\n            this._batchEditing = val;\n            this.switchTransactionService(val);\n            this.subscribeToTransactions();\n        }\n    }\n\n    /* blazorSuppress */\n    /**\n     * Get transactions service for the grid.\n     */\n    public get transactions(): TransactionService<Transaction, State> {\n        if (this._diTransactions && !this.batchEditing) {\n            return this._diTransactions;\n        }\n        return this._transactions;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get currentRowState(): any {\n        return this._currentRowState;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get currencyPositionLeft(): boolean {\n        if (this._currencyPositionLeft !== undefined) {\n            return this._currencyPositionLeft;\n        }\n        const i = getNumberFormatter().getCurrencyPosition(this.locale);\n        return this._currencyPositionLeft = i < 1;\n    }\n\n    /**\n     * Gets/Sets cell selection mode.\n     *\n     * @remarks\n     * By default the cell selection mode is multiple\n     * @param selectionMode: GridSelectionMode\n     */\n    @WatchChanges()\n    @Input()\n    public get cellSelection() {\n        return this._cellSelectionMode;\n    }\n\n    public set cellSelection(selectionMode: GridSelectionMode) {\n        this._cellSelectionMode = selectionMode;\n        // if (this.gridAPI.grid) {\n        this.selectionService.clear(true);\n        this._activeRowIndexes = null;\n        this.notifyChanges();\n        // }\n    }\n\n    /**\n     * Gets/Sets cell merge mode.\n     *\n     */\n    @WatchChanges()\n    @Input()\n    public get cellMergeMode() {\n        return this._cellMergeMode;\n    }\n\n    public set cellMergeMode(value: GridCellMergeMode) {\n        if (value !== this._cellMergeMode) {\n            this._cellMergeMode = value;\n            this.resetColumnCollections();\n            this.notifyChanges();\n        }\n    }\n\n    /**\n     * Gets/Sets row selection mode\n     *\n     * @remarks\n     * By default the row selection mode is 'none'\n     * Note that in IgxGrid and IgxHierarchicalGrid 'multipleCascade' behaves like 'multiple'\n     */\n    @WatchChanges()\n    @Input()\n    public get rowSelection() {\n        return this._rowSelectionMode;\n    }\n\n    public set rowSelection(selectionMode: GridSelectionMode) {\n        this._rowSelectionMode = selectionMode;\n        if (!this._init) {\n            this.selectionService.clearAllSelectedRows();\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * Gets/Sets column selection mode\n     *\n     * @remarks\n     * By default the row selection mode is none\n     * @param selectionMode: GridSelectionMode\n     */\n    @WatchChanges()\n    @Input()\n    public get columnSelection() {\n        return this._columnSelectionMode;\n    }\n\n    public set columnSelection(selectionMode: GridSelectionMode) {\n        this._columnSelectionMode = selectionMode;\n        // if (this.gridAPI.grid) {\n        this.selectionService.clearAllSelectedColumns();\n        this.notifyChanges(true);\n        // }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set pagingState(value) {\n        this._pagingState = value;\n        if (this.paginator && !this._init) {\n            this.paginator.totalRecords = value.metadata.countRecords;\n        }\n    }\n\n    public get pagingState() {\n        return this._pagingState;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public rowEditMessage;\n\n    /**\n     * @hidden @internal\n     */\n    public calcWidth: number;\n    /**\n     * @hidden @internal\n     */\n    public calcHeight = 0;\n    /**\n     * @hidden @internal\n     */\n    public tfootHeight: number;\n\n    /**\n     * @hidden @internal\n     */\n    public disableTransitions = false;\n\n    /**\n     * Represents the last search information.\n     */\n    public get lastSearchInfo(): ISearchInfo {\n        return this._lastSearchInfo;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public columnWidthSetByUser = false;\n\n    /**\n     * @hidden @internal\n     */\n    public pinnedRecords: any[];\n\n    /**\n     * @hidden @internal\n     */\n    public unpinnedRecords: any[];\n\n    /**\n     * @hidden @internal\n     */\n    public rendered$ = this.rendered.asObservable().pipe(shareReplay({ bufferSize: 1, refCount: true }));\n\n    /** @hidden @internal */\n    public resizeNotify = new Subject<void>();\n\n    /** @hidden @internal */\n    public scrollNotify = new Subject<any>();\n\n    /** @hidden @internal */\n    public rowAddedNotifier = new Subject<IRowDataEventArgs>();\n\n    /** @hidden @internal */\n    public rowDeletedNotifier = new Subject<IRowDataEventArgs>();\n\n    /** @hidden @internal */\n    public pipeTriggerNotifier = new Subject();\n\n    /** @hidden @internal */\n    public _filteredSortedPinnedData: any[];\n\n    /** @hidden @internal */\n    public _filteredSortedUnpinnedData: any[];\n\n    /** @hidden @internal */\n    public _filteredPinnedData: any[];\n\n    /**\n     * @hidden\n     */\n    public _filteredUnpinnedData;\n    /**\n     * @hidden @internal\n     */\n    public _destroyed = false;\n    /**\n     * @hidden @internal\n     */\n    public _totalRecords = -1;\n    /**\n     * @hidden @internal\n     */\n    public columnsWithNoSetWidths = null;\n    /**\n     * @hidden @internal\n     */\n    public pipeTrigger = 0;\n    /**\n     * @hidden @internal\n     */\n    public filteringPipeTrigger = 0;\n\n    /**\n     * @hidden @internal\n     */\n    public isColumnWidthSum = false;\n\n    /**\n     * @hidden @internal\n     */\n    public summaryPipeTrigger = 0;\n    /**\n     * @hidden @internal\n     */\n    public groupablePipeTrigger = 0;\n\n    /**\n     * @hidden @internal\n     */\n    public hoverIndex: number;\n\n    /**\n    * @hidden @internal\n    */\n    public EMPTY_DATA = [];\n\n    /** @hidden @internal */\n    public get type(): GridType[\"type\"] {\n        return 'flat';\n    }\n\n    /** @hidden @internal */\n    public _baseFontSize: number;\n\n    /**\n     * @hidden\n     */\n    public destroy$ = new Subject<any>();\n    /**\n     * @hidden\n     */\n    protected _pagingMode: GridPagingMode = 'local';\n    /**\n     * @hidden\n     */\n    protected _pagingState;\n    /**\n     * @hidden\n     */\n    protected _hideRowSelectors = false;\n    /**\n     * @hidden\n     */\n    protected _rowDrag = false;\n    /**\n     * @hidden\n     */\n    protected _columns: IgxColumnComponent[] = [];\n    /**\n     * @hidden\n     */\n    protected _pinnedColumns: IgxColumnComponent[] = [];\n\n    /**\n     * @hidden\n     */\n    protected _pinnedStartColumns: IgxColumnComponent[] = [];\n\n    /**\n     * @hidden\n     */\n    protected _pinnedEndColumns: IgxColumnComponent[] = [];\n\n    /**\n     * @hidden\n     */\n    protected _unpinnedColumns: IgxColumnComponent[] = [];\n    /**\n     * @hidden\n     */\n    protected _filteringExpressionsTree: IFilteringExpressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n    /**\n     * @hidden\n     */\n    protected _advancedFilteringExpressionsTree: IFilteringExpressionsTree;\n    /**\n     * @hidden\n     */\n    protected _sortingExpressions: Array<ISortingExpression> = [];\n    /**\n     * @hidden\n     */\n    protected _columnHiding = false;\n    /**\n     * @hidden\n     */\n    protected _columnPinning = false;\n\n    protected _pinnedRecordIDs = [];\n    /**\n     * @hidden\n     */\n    protected _mergeStrategy: IGridMergeStrategy = new DefaultMergeStrategy();\n\n    /**\n     * @hidden\n     */\n    protected _hasVisibleColumns;\n    protected _allowFiltering = false;\n    protected _allowAdvancedFiltering = false;\n    protected _filterMode: FilterMode = FilterMode.quickFilter;\n\n\n    protected _defaultTargetRecordNumber = 10;\n    protected _expansionStates: Map<any, boolean> = new Map<any, boolean>();\n    protected _defaultExpandState = false;\n    protected _headerFeaturesWidth = NaN;\n    protected _init = true;\n    protected _firstAutoResize = true;\n    protected _autoSizeColumnsNotify = new Subject<void>();\n    protected _cdrRequestRepaint = false;\n    protected _userOutletDirective: IgxOverlayOutletDirective;\n    protected _transactions: TransactionService<Transaction, State>;\n    protected _batchEditing = false;\n    protected _sortingOptions: ISortingOptions = { mode: 'multiple' };\n    protected _filterStrategy: IFilteringStrategy = new FilteringStrategy();\n    protected _autoGeneratedCols: ColumnType[] = [];\n    protected _autoGeneratedColsRefs: ComponentRef<IgxColumnComponent>[] = [];\n    protected _dataView = [];\n    protected _lastSearchInfo: ISearchInfo = {\n        searchText: '',\n        caseSensitive: false,\n        exactMatch: false,\n        activeMatchIndex: 0,\n        matchInfoCache: [],\n        matchCount: 0,\n        content: ''\n    };\n    protected _hGridSchema: EntityType[];\n    protected gridComputedStyles;\n    protected _resourceStrings = null;\n\n    /** @hidden @internal */\n    public get paginator() {\n        return this.paginationComponents?.first;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get scrollSize() {\n        return this.verticalScrollContainer.getScrollNativeSize();\n    }\n\n    private _primaryKey: string;\n    private _rowEditable = false;\n    private _currentRowState: any;\n    private _filteredSortedData = null;\n    private _filteredData = null;\n    private _mergedDataInView = null;\n    private _activeRowIndexes = null;\n\n    private _customDragIndicatorIconTemplate: TemplateRef<IgxGridEmptyTemplateContext>;\n    private _excelStyleHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    private _rowSelectorTemplate: TemplateRef<IgxRowSelectorTemplateContext>;\n    private _headSelectorTemplate: TemplateRef<IgxHeadSelectorTemplateContext>;\n    private _rowEditTextTemplate: TemplateRef<IgxGridRowEditTextTemplateContext>;\n    private _rowAddTextTemplate: TemplateRef<IgxGridEmptyTemplateContext>;\n    private _rowEditActionsTemplate: TemplateRef<IgxGridRowEditActionsTemplateContext>;\n    private _dragGhostCustomTemplate: TemplateRef<IgxGridRowDragGhostContext>;\n    private _rowExpandedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    private _rowCollapsedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    private _headerExpandIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n    private _headerCollapseIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n    private _emptyGridTemplate: TemplateRef<IgxGridTemplateContext>;\n    private _loadingGridTemplate: TemplateRef<IgxGridTemplateContext>;\n\n    private _cdrRequests = false;\n    private _defaultResourceStrings = getCurrentResourceStrings(GridResourceStringsEN);\n    private _emptyGridMessage = null;\n    private _emptyFilteredGridMessage = null;\n    private _isLoading = false;\n    private _locale: string;\n    private _defaultLocale: string;\n    private overlayIDs = [];\n    private _sortingStrategy: IGridSortingStrategy;\n    private _pinning: IPinningConfig = { columns: ColumnPinningPosition.Start };\n    private _shouldRecalcRowHeight = false;\n\n    private _hostWidth;\n    private _advancedFilteringOverlayId: string;\n    private _advancedFilteringPositionSettings: PositionSettings = {\n        verticalDirection: VerticalAlignment.Middle,\n        horizontalDirection: HorizontalAlignment.Center,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalStartPoint: VerticalAlignment.Middle\n    };\n\n    private _advancedFilteringOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: false,\n        modal: false,\n        positionStrategy: new ConnectedPositioningStrategy(this._advancedFilteringPositionSettings),\n    };\n\n    private columnListDiffer;\n    private rowListDiffer;\n    private _height: string | null = '100%';\n    private _width: string | null = '100%';\n    private _rowHeight: number | undefined;\n    private _horizontalForOfs: Array<IgxGridForOfDirective<any, any[]>> = [];\n    private _multiRowLayoutRowSize = 1;\n    // Caches\n    private _totalWidth = NaN;\n    private _pinnedVisible = [];\n    private _unpinnedVisible = [];\n    private _pinnedStartWidth = NaN;\n    private _pinnedEndWidth = NaN;\n    private _unpinnedWidth = NaN;\n    private _visibleColumns = [];\n    private _columnGroups = false;\n\n    private _columnWidth: string;\n\n    private _summaryPosition: GridSummaryPosition = GridSummaryPosition.bottom;\n    private _summaryCalculationMode: GridSummaryCalculationMode = GridSummaryCalculationMode.rootAndChildLevels;\n    private _showSummaryOnCollapse = false;\n    private _summaryRowHeight = 0;\n    private _cellSelectionMode: GridSelectionMode = GridSelectionMode.multiple;\n    private _rowSelectionMode: GridSelectionMode = GridSelectionMode.none;\n    private _selectRowOnClick = true;\n    private _columnSelectionMode: GridSelectionMode = GridSelectionMode.none;\n\n    private lastAddedRowIndex;\n\n    private _currencyPositionLeft: boolean;\n\n    private rowEditPositioningStrategy = new RowEditPositionStrategy({\n        horizontalDirection: HorizontalAlignment.Right,\n        verticalDirection: VerticalAlignment.Bottom,\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalStartPoint: VerticalAlignment.Bottom,\n        closeAnimation: null\n    });\n\n    private rowEditSettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: false,\n        outlet: this.rowOutletDirective,\n        positionStrategy: this.rowEditPositioningStrategy\n    };\n\n    private transactionChange$ = new Subject<void>();\n    private _rendered = false;\n    private readonly DRAG_SCROLL_DELTA = 10;\n    private _dataCloneStrategy: IDataCloneStrategy = new DefaultDataCloneStrategy();\n    private _autoSize = false;\n    private _sortHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n    private _sortAscendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n    private _sortDescendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext> = null;\n    private _gridSize: ɵSize = ɵSize.Large;\n    private _defaultRowHeight = 50;\n    private _borderSize = 1;\n    private _rowCount: number;\n    private _cellMergeMode: GridCellMergeMode = GridCellMergeMode.onSort;\n    private _columnsToMerge: IgxColumnComponent[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public get minColumnWidth() {\n        return MINIMUM_COLUMN_WIDTH;\n    }\n\n    protected get isCustomSetRowHeight(): boolean {\n        return !isNaN(this._rowHeight);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public abstract id: string;\n    /* blazorSuppress */\n    public abstract data: any[] | null;\n\n    /**\n     * Returns an array of objects containing the filtered data.\n     *\n     * @example\n     * ```typescript\n     * let filteredData = this.grid.filteredData;\n     * ```\n     */\n    public get filteredData() {\n        return this._filteredData;\n    }\n\n    /**\n     * Returns an array containing the filtered sorted data.\n     *\n     * @example\n     * ```typescript\n     * const filteredSortedData = this.grid1.filteredSortedData;\n     * ```\n     */\n    public get filteredSortedData(): any[] | null {\n        return this._filteredSortedData;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rowChangesCount() {\n        if (!this.crudService.row) {\n            return 0;\n        }\n        const f = (obj: any) => {\n            let changes = 0;\n            Object.keys(obj).forEach(key => isObject(obj[key]) ? changes += f(obj[key]) : changes++);\n            return changes;\n        };\n        if (this.transactions.getState(this.crudService.row.id)?.type === TransactionType.ADD) {\n            return this._columns.filter(c => c.field).length;\n        }\n        const rowChanges = this.transactions.getAggregatedValue(this.crudService.row.id, false);\n        return rowChanges ? f(rowChanges) : 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get dataWithAddedInTransactionRows() {\n        const result = cloneArray(this.gridAPI.get_all_data());\n        if (this.transactions.enabled) {\n            result.push(...this.transactions.getAggregatedChanges(true)\n                .filter(t => t.type === TransactionType.ADD)\n                .map(t => t.newValue));\n        }\n\n        if (this.crudService.row && this.crudService.row.isAddRow) {\n            result.splice(this.crudService.row.index, 0, this.crudService.row.data);\n        }\n\n        return result;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get dataLength() {\n        return this.transactions.enabled ? this.dataWithAddedInTransactionRows.length : this.gridAPI.get_all_data().length;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get template(): TemplateRef<IgxGridTemplateContext> {\n        if (this.isLoading && (this.hasZeroResultFilter || this.hasNoData)) {\n            return this.loadingGridTemplate ? this.loadingGridTemplate : this.loadingGridDefaultTemplate;\n        }\n\n        if (this.hasZeroResultFilter) {\n            return this.emptyGridTemplate ? this.emptyGridTemplate : this.emptyFilteredGridTemplate;\n        }\n\n        if (this.hasNoData) {\n            return this.emptyGridTemplate ? this.emptyGridTemplate : this.emptyGridDefaultTemplate;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    private get hasZeroResultFilter(): boolean {\n        return this.filteredData && this.filteredData.length === 0;\n    }\n    protected get totalCalcWidth() {\n        return this.platform.isBrowser ? this.calcWidth : undefined;\n    }\n\n    protected get renderData() {\n        // omit data if not in the browser and size is %\n        return !this.platform.isBrowser && this.isPercentHeight ? undefined : this.data;\n    }\n\n    @HostBinding('style.display')\n    protected displayStyle = 'grid';\n\n    @HostBinding('style.grid-template-rows')\n    protected templateRows = 'auto auto auto 1fr auto auto';\n\n    /**\n     * @hidden @internal\n     */\n    private get hasNoData(): boolean {\n        return !this.data || this.dataLength === 0 || !this.platform.isBrowser;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get shouldOverlayLoading(): boolean {\n        return this.isLoading && !this.hasNoData && !this.hasZeroResultFilter;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isMultiRowSelectionEnabled(): boolean {\n        return this.rowSelection === GridSelectionMode.multiple\n            || this.rowSelection === GridSelectionMode.multipleCascade;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isRowSelectable(): boolean {\n        return this.rowSelection !== GridSelectionMode.none;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isCellSelectable() {\n        return this.cellSelection !== GridSelectionMode.none;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get columnInDrag() {\n        return this.gridAPI.cms.column;\n    }\n\n    constructor() {\n        this.initLocale();\n        this._transactions = this.transactionFactory.create(TRANSACTION_TYPE.None);\n        this._transactions.cloneStrategy = this.dataCloneStrategy;\n        this.cdr.detach();\n        this.selectionService.selectedRowsChange.pipe(takeUntil(this.destroy$)).subscribe((args: any[]) => {\n            this.selectedRowsChange.emit(args);\n        });\n        IgcTrialWatermark.register();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('mouseleave')\n    public hideActionStrip() {\n        this.actionStrip?.hide();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get headerFeaturesWidth() {\n        return this._headerFeaturesWidth;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isDetailRecord(_rec) {\n        return false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isGroupByRecord(_rec) {\n        return false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isChildGridRecord(_rec) {\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isGhostRecord(record: any): boolean {\n        return record.ghostRecord !== undefined;\n    }\n    /**\n     * @hidden @internal\n     */\n    public isAddRowRecord(record: any): boolean {\n        return record.addRow !== undefined;\n    }\n\n    /**\n     * @hidden\n     * Returns the row index of a row that takes into account the full view data like pinning.\n     */\n    public getDataViewIndex(rowIndex, pinned) {\n        if (pinned && !this.isRowPinningToTop) {\n            rowIndex = rowIndex + this.unpinnedDataView.length;\n        } else if (!pinned && this.isRowPinningToTop) {\n            rowIndex = rowIndex + this.pinnedDataView.length;\n        }\n        return rowIndex;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get hasDetails() {\n        return false;\n    }\n\n    /**\n     * Returns the state of the grid virtualization.\n     *\n     * @remarks\n     * Includes the start index and how many records are rendered.\n     * @example\n     * ```typescript\n     * const gridVirtState = this.grid1.virtualizationState;\n     * ```\n     */\n    public get virtualizationState() {\n        return this.verticalScrollContainer.state;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public hideOverlays() {\n        this.overlayIDs.forEach(overlayID => {\n            const overlay = this.overlayService.getOverlayById(overlayID);\n\n            if (overlay?.visible && !overlay.closeAnimationPlayer?.hasStarted()) {\n                this.overlayService.hide(overlayID);\n\n                this.nativeElement.focus();\n            }\n        });\n    }\n\n    /**\n     * Returns whether the record is pinned or not.\n     *\n     * @param rowIndex Index of the record in the `dataView` collection.\n     *\n     * @hidden\n     * @internal\n     */\n    public isRecordPinnedByViewIndex(rowIndex: number) {\n        return this.hasPinnedRecords && (this.isRowPinningToTop && rowIndex < this.pinnedDataView.length) ||\n            (!this.isRowPinningToTop && rowIndex >= this.unpinnedDataView.length);\n    }\n\n    /**\n     * Returns whether the record is pinned or not.\n     *\n     * @param rowIndex Index of the record in the `filteredSortedData` collection.\n     */\n    public isRecordPinnedByIndex(rowIndex: number) {\n        return this.hasPinnedRecords && (this.isRowPinningToTop && rowIndex < this._filteredSortedPinnedData.length) ||\n            (!this.isRowPinningToTop && rowIndex >= this._filteredSortedUnpinnedData.length);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isRecordPinned(rec) {\n        return this.getInitialPinnedIndex(rec) !== -1;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isRecordMerged(rec) {\n        return rec?.cellMergeMeta;\n    }\n\n    protected getMergeCellOffset(rowData) {\n        const index = rowData.dataIndex;\n        let offset = this.verticalScrollContainer.scrollPosition - this.verticalScrollContainer.getScrollForIndex(index);\n        if (this.hasPinnedRecords && this.isRowPinningToTop) {\n            offset -= this.pinnedRowHeight;\n        }\n        return -offset;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * Returns the record index in order of pinning by the user. Does not consider sorting/filtering.\n     */\n    public getInitialPinnedIndex(rec) {\n        const id = this.gridAPI.get_row_id(rec);\n        return this._pinnedRecordIDs.indexOf(id);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get hasPinnedRecords() {\n        return this._pinnedRecordIDs.length > 0;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get pinnedRecordsCount() {\n        return this._pinnedRecordIDs.length;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get crudService() {\n        return this.gridAPI.crudService;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public _setupServices() {\n        this.gridAPI.grid = this as any;\n        this.crudService.grid = this as any;\n        this.selectionService.grid = this as any;\n        this.validation.grid = this as any;\n        this.navigation.grid = this as any;\n        this.filteringService.grid = this as any;\n        this.summaryService.grid = this as any;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public _setupListeners() {\n        const destructor = takeUntil<any>(this.destroy$);\n        fromEvent(this.nativeElement, 'focusout').pipe(filter(() => !!this.navigation.activeNode), destructor).subscribe((event) => {\n            const activeNode = this.navigation.activeNode;\n            if (!this.crudService.cell && !!activeNode &&\n                ((event.target === this.tbody.nativeElement && activeNode.row >= 0 &&\n                    activeNode.row < this.dataView.length)\n                    || (event.target === this.theadRow.nativeElement && activeNode.row === -1)\n                    || (event.target === this.tfoot.nativeElement && activeNode.row === this.dataView.length)) &&\n                !(this.rowEditable && this.crudService.rowEditingBlocked && this.crudService.rowInEditMode)) {\n                this.clearActiveNode();\n            }\n        });\n        this.rowAddedNotifier.pipe(destructor).subscribe(args => this.refreshGridState(args));\n        this.rowDeletedNotifier.pipe(destructor).subscribe(args => {\n            this.summaryService.deleteOperation = true;\n            this.summaryService.clearSummaryCache(args);\n        });\n\n        this.subscribeToTransactions();\n\n        this.scrollNotify.pipe(\n            filter(() => !this._init),\n            throttle(() =>\n                this.throttleTime$.pipe(\n                  take(1),\n                  switchMap(time => timer(time, this.throttleScheduler))\n                )\n              ),\n            destructor\n        )\n            .subscribe((event) => {\n                this.verticalScrollHandler(event);\n            });\n\n        this.resizeNotify.pipe(\n            filter(() => !this._init),\n            throttleTime(40, animationFrameScheduler, { leading: true, trailing: true }),\n            destructor\n        )\n            .subscribe(() => {\n                this.zone.run(() => {\n                    // do not trigger reflow if element is detached.\n                    if (this.nativeElement.isConnected) {\n                        if (this.shouldResize) {\n                            // resizing occurs due to the change of --ig-size css var\n                            this._gridSize = this.gridSize;\n                            this.updateDefaultRowHeight();\n                            this._autoSize = this.isPercentHeight && this.calcHeight !== this.getDataBasedBodyHeight();\n                            this.crudService.endEdit(false);\n                            if (this._summaryRowHeight === 0) {\n                                this.summaryService.summaryHeight = 0;\n                            }\n                        }\n                        this.notifyChanges(true);\n                    }\n                });\n            });\n\n        this.pipeTriggerNotifier.pipe(takeUntil(this.destroy$)).subscribe(() => this.pipeTrigger++);\n        this.columnMovingEnd.pipe(destructor).subscribe(() => this.crudService.endEdit(false));\n\n        this.overlayService.opening.pipe(destructor).subscribe((event) => {\n            if (this._advancedFilteringOverlayId === event.id) {\n                const instance = event.componentRef.instance as IgxAdvancedFilteringDialogComponent;\n                if (instance) {\n                    instance.initialize(this as any, this.overlayService, event.id);\n                }\n            }\n        });\n\n        this.overlayService.opened.pipe(destructor).subscribe((event) => {\n            const overlaySettings = this.overlayService.getOverlayById(event.id)?.settings;\n\n            // do not hide the advanced filtering overlay on scroll\n            if (this._advancedFilteringOverlayId === event.id) {\n                const instance = event.componentRef.instance as IgxAdvancedFilteringDialogComponent;\n                if (instance) {\n                    instance.lastActiveNode = this.navigation.activeNode;\n                    instance.queryBuilder.setAddButtonFocus();\n                }\n                return;\n            }\n\n            // do not hide the overlay if it's attached to a row\n            if (this.rowEditingOverlay?.overlayId === event.id) {\n                return;\n            }\n\n            if (overlaySettings?.outlet === this.outlet && this.overlayIDs.indexOf(event.id) === -1) {\n                this.overlayIDs.push(event.id);\n            }\n        });\n\n        this.overlayService.closed.pipe(filter(() => !this._init), destructor).subscribe((event) => {\n            if (this._advancedFilteringOverlayId === event.id) {\n                this.overlayService.detach(this._advancedFilteringOverlayId);\n                this._advancedFilteringOverlayId = null;\n                return;\n            }\n\n            const ind = this.overlayIDs.indexOf(event.id);\n            if (ind !== -1) {\n                this.overlayIDs.splice(ind, 1);\n            }\n        });\n\n        this.verticalScrollContainer.dataChanging.pipe(filter(() => !this._init), destructor).subscribe(($event) => {\n            const shouldRecalcSize = this.isPercentHeight &&\n                (!this.calcHeight || this.calcHeight === this.getDataBasedBodyHeight() ||\n                    this.calcHeight === this.renderedRowHeight * this._defaultTargetRecordNumber);\n            if (shouldRecalcSize) {\n                this.calculateGridHeight();\n                $event.containerSize = this.calcHeight;\n            }\n            this.evaluateLoadingState();\n            this.updateMergedData();\n        });\n\n        this.verticalScrollContainer.chunkSizeChange.pipe(destructor).subscribe((count: number) => {\n            this.updateScrollThrottle(count * this.headerContainer.state.chunkSize);\n        });\n\n        this.headerContainer?.chunkSizeChange.pipe(destructor).subscribe((count: number) => {\n            this.updateScrollThrottle(count * this.verticalScrollContainer.state.chunkSize);\n        });\n\n        this.verticalScrollContainer.scrollbarVisibilityChanged.pipe(filter(() => !this._init), destructor).subscribe(() => {\n            // called to recalc all widths that may have changes as a result of\n            // the vert. scrollbar showing/hiding\n            this.notifyChanges(true);\n            this.cdr.detectChanges();\n            Promise.resolve().then(() => this.headerContainer.updateScroll());\n        });\n\n\n        this.headerContainer?.scrollbarVisibilityChanged.pipe(filter(() => !this._init), destructor).subscribe(() => {\n            // the horizontal scrollbar showing/hiding\n            // update scrollbar visibility and recalc heights\n            this.notifyChanges(true);\n            this.cdr.detectChanges();\n        });\n\n        this.verticalScrollContainer.contentSizeChange.pipe(filter(() => !this._init), throttleTime(30), destructor).subscribe(() => {\n            this.notifyChanges(true);\n        });\n\n        this.verticalScrollContainer.chunkPreload.pipe(filter(() => !this._init), destructor).subscribe(() => {\n            this.updateMergedData();\n        });\n\n        // notifier for column autosize requests\n        this._autoSizeColumnsNotify.pipe(\n            throttleTime(0, this.platform.isBrowser ? animationFrameScheduler : undefined, { leading: false, trailing: true }),\n            destructor\n        )\n            .subscribe(() => {\n                this.autoSizeColumnsInView();\n                this._firstAutoResize = false;\n            });\n\n        this.activeNodeChange.pipe(\n            throttleTime(0, this.platform.isBrowser ? animationFrameScheduler : undefined, { leading: false, trailing: true }),\n            destructor\n        ).subscribe(() => {\n            this._activeRowIndexes = null;\n            if (this.hasCellsToMerge) {\n                this.refreshSearch();\n                this.notifyChanges();\n            }\n        });\n\n        this.selectionService.selectedRangeChange.pipe(filter(() => !this._init), destructor).subscribe(() => {\n            this._activeRowIndexes = null;\n            if (this.hasCellsToMerge) {\n                this.refreshSearch();\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnInit() {\n        this._setupServices();\n        this._setupListeners();\n        this.rowListDiffer = this.differs.find([]).create(null);\n        // compare based on field, not on object ref.\n        this.columnListDiffer = this.differs.find([]).create((_index, col: ColumnType) => col.field);\n        this.calcWidth = this.width && this.width.indexOf('%') === -1 ? parseInt(this.width, 10) : 0;\n        this.gridComputedStyles = this.document.defaultView.getComputedStyle(this.nativeElement);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetColumnsCaches() {\n        this._columns.forEach(column => column.resetCaches());\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public generateRowID(): string | number {\n        const primaryColumn = this._columns.find(col => col.field === this.primaryKey);\n        const idType = this.data.length ?\n            this.resolveDataTypes(this.data[0][this.primaryKey]) : primaryColumn ? primaryColumn.dataType : 'string';\n        return idType === 'string' ? getUUID() : FAKE_ROW_ID--;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetForOfCache() {\n        const firstVirtRow = this.dataRowList.first;\n        if (firstVirtRow) {\n            if (this._cdrRequests) {\n                firstVirtRow.virtDirRow.cdr.detectChanges();\n            }\n            firstVirtRow.virtDirRow.assumeMaster();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public setFilteredData(data, pinned: boolean) {\n        if (this.hasPinnedRecords && pinned) {\n            this._filteredPinnedData = data || [];\n            const filteredUnpinned = this._filteredUnpinnedData || [];\n            const filteredData = [... this._filteredPinnedData, ...filteredUnpinned];\n            this._filteredData = filteredData.length > 0 ? filteredData : this._filteredUnpinnedData;\n        } else if (this.hasPinnedRecords && !pinned) {\n            this._filteredUnpinnedData = data;\n        } else {\n            this._filteredData = data;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get columnsToMerge(): ColumnType[] {\n        if (this._columnsToMerge.length) {\n            return this._columnsToMerge;\n        }\n        const cols = this.visibleColumns.filter(\n            x => x.merge && (this.cellMergeMode === 'always' ||\n                (this.cellMergeMode === 'onSort' && !!this.sortingExpressions.find(y => y.fieldName === x.field)))\n        );\n        this._columnsToMerge = cols;\n        return this._columnsToMerge;\n    }\n\n    protected allowResetOfColumnsToMerge() {\n        const cols = this.visibleColumns.filter(\n            x => x.merge && (this.cellMergeMode === 'always' ||\n                (this.cellMergeMode === 'onSort' && !!this.sortingExpressions.find(y => y.fieldName === x.field)))\n        );\n        if (areEqualArrays(cols, this._columnsToMerge)) {\n            return false;\n        } else {\n            return true\n        }\n    }\n\n    protected get mergedDataInView() {\n        return this._mergedDataInView;\n    }\n\n    protected updateScrollThrottle(cells: number) {\n        // for less than 100 - throttle 0, 10ms more for every 100 cells upto max of 60ms\n        const currentThrottle = cells <= 100 ? 0 : Math.floor(cells / 100) * this.THROTTLE_TIME_MULTIPLIER;\n        this.throttleTime$.next(Math.min(currentThrottle, this.MAX_SCROLL_THROTTLE));\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetColumnCollections() {\n        if (this.hasColumnLayouts) {\n            this._columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n        this._visibleColumns.length = 0;\n        this._pinnedVisible.length = 0;\n        this._unpinnedVisible.length = 0;\n        if (this.allowResetOfColumnsToMerge()) {\n            this._columnsToMerge.length = 0;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetCachedWidths() {\n        this._unpinnedWidth = NaN;\n        this._pinnedStartWidth = NaN;\n        this._pinnedEndWidth = NaN;\n        this._totalWidth = NaN;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetCaches(recalcFeatureWidth = true) {\n        if (recalcFeatureWidth) {\n            this._headerFeaturesWidth = NaN;\n            this.summaryService.summaryHeight = 0;\n        }\n        this.resetColumnsCaches();\n        this.resetColumnCollections();\n        this.resetForOfCache();\n        this.resetCachedWidths();\n        this.hasVisibleColumns = undefined;\n        this._columnGroups = this._columns.some(col => col.columnGroup);\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterContentInit() {\n        if (this.sortHeaderIconDirectiveTemplate) {\n            this.sortHeaderIconTemplate = this.sortHeaderIconDirectiveTemplate;\n        }\n\n        if (this.sortAscendingHeaderIconDirectiveTemplate) {\n            this.sortAscendingHeaderIconTemplate = this.sortAscendingHeaderIconDirectiveTemplate;\n        }\n\n        if (this.sortDescendingHeaderIconDirectiveTemplate) {\n            this.sortDescendingHeaderIconTemplate = this.sortDescendingHeaderIconDirectiveTemplate;\n        }\n\n        this.setupColumns();\n        this.toolbar.changes.pipe(filter(() => !this._init), takeUntil(this.destroy$)).subscribe(() => this.notifyChanges(true));\n        this.setUpPaginator();\n        this.paginationComponents.changes.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.setUpPaginator();\n        });\n        if (this.actionStrip) {\n            this.actionStrip.menuOverlaySettings.outlet = this.outlet;\n        }\n    }\n\n\n    protected get activeRowIndexes(): number[] {\n        if (this._activeRowIndexes) {\n            return this._activeRowIndexes;\n        } else {\n            const activeRow = this.navigation.activeNode?.row;\n\n            const selectedCellIndexes = this.selectionService.selection\n            ? Array.from(this.selectionService.selection.keys())\n            : [];\n            this._activeRowIndexes = [activeRow, ...selectedCellIndexes];\n            return this._activeRowIndexes;\n        }\n    }\n\n    protected get hasCellsToMerge() {\n        return this.columnsToMerge.length > 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dataRebinding(event: IForOfDataChangeEventArgs) {\n        if (event.state.chunkSize == 0) {\n            this._shouldRecalcRowHeight = true;\n        }\n        this.dataChanging.emit(event);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dataRebound(event: IForOfDataChangeEventArgs) {\n        this.selectionService.clearHeaderCBState();\n        if (this._shouldRecalcRowHeight) {\n            this._shouldRecalcRowHeight = false;\n            this.updateDefaultRowHeight();\n        }\n        this.dataChanged.emit(event);\n    }\n\n    /** @hidden @internal */\n    public createFilterDropdown(column: ColumnType, options: OverlaySettings) {\n        options.outlet = this.outlet;\n        if (this.excelStyleFilteringComponent) {\n            this.excelStyleFilteringComponent.initialize(column, this.overlayService);\n            this.excelStyleFilteringComponent.populateData();\n            const id = this.overlayService.attach(this.excelStyleFilteringComponent.element, options);\n            this.excelStyleFilteringComponent.overlayComponentId = id;\n            return id;\n        }\n        const id = this.overlayService.attach(IgxGridExcelStyleFilteringComponent, this.viewRef, options);\n        return id;\n    }\n\n    /** @hidden @internal */\n    public setUpPaginator() {\n        if (this.paginator) {\n            this.paginator.pageChange\n                .pipe(takeWhile(() => !!this.paginator), filter(() => !this._init))\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => {\n                    this.selectionService.clear(true);\n                    this._activeRowIndexes = null;\n                    this.crudService.endEdit(false);\n                    this.pipeTrigger++;\n                    this.navigateTo(0);\n                    this.notifyChanges();\n                });\n            this.paginator.perPageChange\n                .pipe(takeWhile(() => !!this.paginator), filter(() => !this._init))\n                .pipe(takeUntil(this.destroy$))\n                .subscribe(() => {\n                    this.selectionService.clear(true);\n                    this._activeRowIndexes = null;\n                    this.page = 0;\n                    this.crudService.endEdit(false);\n                    this.notifyChanges();\n                });\n        } else {\n            this.markForCheck();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public setFilteredSortedData(data, pinned: boolean) {\n        data = data || [];\n        if (this.pinnedRecordsCount > 0) {\n            if (pinned) {\n                this._filteredSortedPinnedData = data;\n                this.pinnedRecords = data;\n                this._filteredSortedData = this.isRowPinningToTop ? [... this._filteredSortedPinnedData, ... this._filteredSortedUnpinnedData] :\n                    [... this._filteredSortedUnpinnedData, ... this._filteredSortedPinnedData];\n                this.refreshSearch(true, false);\n            } else {\n                this._filteredSortedUnpinnedData = data;\n            }\n        } else {\n            this._filteredSortedData = data;\n            this.refreshSearch(true, false);\n        }\n        this.buildDataView(data);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public resetHorizontalVirtualization() {\n        const elementFilter = (item: IgxRowDirective | IgxSummaryRowComponent) => this.isDefined(item.nativeElement.parentElement);\n        this._horizontalForOfs = [\n            ...this._dataRowList.filter(elementFilter).map(item => item.virtDirRow),\n            ...this._summaryRowList.filter(elementFilter).map(item => item.virtDirRow)\n        ];\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public _setupRowObservers() {\n        const elementFilter = (item: IgxRowDirective | IgxSummaryRowComponent) => this.isDefined(item.nativeElement.parentElement);\n        const extractForOfs = pipe(map((collection: any[]) => collection.filter(elementFilter).map(item => item.virtDirRow)));\n        const rowListObserver = extractForOfs(this._dataRowList.changes);\n        const summaryRowObserver = extractForOfs(this._summaryRowList.changes);\n        rowListObserver.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.resetHorizontalVirtualization();\n        });\n        summaryRowObserver.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.resetHorizontalVirtualization();\n        });\n        this.resetHorizontalVirtualization();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public _zoneBegoneListeners() {\n        this.zone.runOutsideAngular(() => {\n            this.verticalScrollHandler = this.verticalScrollHandler.bind(this);\n            this.horizontalScrollHandler = this.horizontalScrollHandler.bind(this);\n            this.verticalScrollContainer.getScroll().addEventListener('scroll', (event) => this.scrollNotify.next(event));\n            this.headerContainer?.getScroll().addEventListener('scroll', this.horizontalScrollHandler);\n            if (this.hasColumnsToAutosize) {\n                this.headerContainer?.dataChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n                    this.cdr.detectChanges();\n                    this.zone.onStable.pipe(first()).subscribe(() => {\n                        this.autoSizeColumnsInView();\n                    });\n                });\n            }\n            // Window resize observer not needed because when you resize the window element the tbody container always resize so\n            // it would always notify resizing, thus a change detection and recalculation of sizes will occur\n            resizeObservable(this.nativeElement).pipe(first(), takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());\n            resizeObservable(this.tbodyContainer.nativeElement).pipe(takeUntil(this.destroy$)).subscribe(() => this.resizeNotify.next());\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        this.initPinning();\n        this.calculateGridSizes();\n        this._init = false;\n        this.cdr.reattach();\n        this._setupRowObservers();\n        this._zoneBegoneListeners();\n\n        const vertScrDC = this.verticalScrollContainer.displayContainer;\n        vertScrDC.addEventListener('scroll', this.preventContainerScroll);\n\n        this._pinnedRowList.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change: QueryList<IgxGridRowComponent>) => {\n                this.onPinnedRowsChanged(change);\n            });\n\n        this.addRowSnackbar?.clicked.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            const rec = this.filteredSortedData[this.lastAddedRowIndex];\n            this.scrollTo(rec, 0);\n            this.addRowSnackbar.close();\n        });\n\n        // Keep the stream open for future subscribers\n        this.rendered$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.paginator) {\n                this.paginator.totalRecords = this.totalRecords ? this.totalRecords : this.paginator.totalRecords;\n                this.paginator.overlaySettings = { outlet: this.outlet };\n            }\n            if (this.hasColumnsToAutosize) {\n                this.autoSizeColumnsInView();\n            }\n            this._calculateRowCount();\n            this._rendered = true;\n        });\n        Promise.resolve().then(() => this.rendered.next(true));\n\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public notifyChanges(repaint = false) {\n        this._cdrRequests = true;\n        this._cdrRequestRepaint = repaint;\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        if (this._init) {\n            return;\n        }\n\n        if (this._cdrRequestRepaint) {\n            this.resetNotifyChanges();\n            this.calculateGridSizes();\n            this.refreshSearch(true);\n            return;\n        }\n\n        if (this._cdrRequests) {\n            this.resetNotifyChanges();\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getDragGhostCustomTemplate() {\n\n        return this.dragGhostCustomTemplate;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy() {\n        this.tmpOutlets.forEach((tmplOutlet) => {\n            tmplOutlet.cleanCache();\n        });\n        this._autoGeneratedColsRefs.forEach(ref => ref.destroy());\n        this._autoGeneratedColsRefs = [];\n\n        this.destroy$.next(true);\n        this.destroy$.complete();\n        this.transactionChange$.next();\n        this.transactionChange$.complete();\n        this._destroyed = true;\n\n        this.textHighlightService.destroyGroup(this.id);\n\n        if (this._advancedFilteringOverlayId) {\n            this.overlayService.detach(this._advancedFilteringOverlayId);\n            delete this._advancedFilteringOverlayId;\n        }\n\n        this.overlayIDs.forEach(overlayID => {\n            const overlay = this.overlayService.getOverlayById(overlayID);\n\n            if (overlay && !overlay.detached) {\n                this.overlayService.detach(overlayID);\n            }\n        });\n\n\n        this.zone.runOutsideAngular(() => {\n            this.verticalScrollContainer?.getScroll()?.removeEventListener('scroll', this.verticalScrollHandler);\n            this.headerContainer?.getScroll()?.removeEventListener('scroll', this.horizontalScrollHandler);\n            const vertScrDC = this.verticalScrollContainer?.displayContainer;\n            vertScrDC?.removeEventListener('scroll', this.preventContainerScroll);\n        });\n    }\n\n    /**\n     * Toggles the specified column's visibility.\n     *\n     * @example\n     * ```typescript\n     * this.grid1.toggleColumnVisibility({\n     *       column: this.grid1.columns[0],\n     *       newValue: true\n     * });\n     * ```\n     */\n    public toggleColumnVisibility(args: IColumnVisibilityChangedEventArgs) {\n        const col = args.column ? this._columns.find((c) => c === args.column) : undefined;\n\n        if (!col) {\n            return;\n        }\n        col.toggleVisibility(args.newValue);\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Gets/Sets a list of key-value pairs [row ID, expansion state].\n     *\n     * @remarks\n     * Includes only states that differ from the default one.\n     * Supports two-way binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"data\" [(expansionStates)]=\"model.expansionStates\">\n     * </igx-grid>\n     * ```\n     */\n    @Input()\n    public get expansionStates() {\n        return this._expansionStates;\n    }\n\n    /* blazorCSSuppress */\n    public set expansionStates(value) {\n        this._expansionStates = new Map<any, boolean>(value);\n        this.expansionStatesChange.emit(this._expansionStates);\n        this.notifyChanges(true);\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * Expands all rows.\n     *\n     * @example\n     * ```typescript\n     * this.grid.expandAll();\n     * ```\n     */\n    public expandAll() {\n        this._defaultExpandState = true;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * Collapses all rows.\n     *\n     * @example\n     * ```typescript\n     * this.grid.collapseAll();\n     * ```\n     */\n    public collapseAll() {\n        this._defaultExpandState = false;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * Expands the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.expandRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public expandRow(rowID: any) {\n        this.gridAPI.set_row_expansion_state(rowID, true);\n    }\n\n    /**\n     * Collapses the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.collapseRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public collapseRow(rowID: any) {\n        this.gridAPI.set_row_expansion_state(rowID, false);\n    }\n\n\n    /**\n     * Toggles the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.toggleRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public toggleRow(rowID: any) {\n        const rec = this.gridAPI.get_rec_by_id(rowID);\n        const state = this.gridAPI.get_row_expansion_state(rec);\n        this.gridAPI.set_row_expansion_state(rowID, !state);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getDefaultExpandState(_rec: any) {\n        return this._defaultExpandState;\n    }\n\n    /**\n     * Gets the native element.\n     *\n     * @example\n     * ```typescript\n     * const nativeEl = this.grid.nativeElement.\n     * ```\n     */\n    public get nativeElement() {\n        return this.elementRef.nativeElement;\n    }\n\n    /**\n     * Gets/Sets the outlet used to attach the grid's overlays to.\n     *\n     * @remarks\n     * If set, returns the outlet defined outside the grid. Otherwise returns the grid's internal outlet directive.\n     */\n    @Input()\n    public get outlet() {\n        return this.resolveOutlet();\n    }\n\n    public set outlet(val: IgxOverlayOutletDirective) {\n        this._userOutletDirective = val;\n    }\n\n\n    /**\n     * Gets the default row height.\n     *\n     * @example\n     * ```typescript\n     * const rowHeigh = this.grid.defaultRowHeight;\n     * ```\n     */\n    public get defaultRowHeight(): number {\n        return this._defaultRowHeight;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get defaultSummaryHeight(): number {\n        switch (this.gridSize) {\n            case ɵSize.Medium:\n                return 30;\n            case ɵSize.Small:\n                return 24;\n            default:\n                return 36;\n        }\n    }\n\n    /** @hidden @internal */\n    public get pinnedStartWidth() {\n        if (!isNaN(this._pinnedStartWidth)) {\n            return this._pinnedStartWidth;\n        }\n        this._pinnedStartWidth = this.getPinnedStartWidth();\n        return this._pinnedStartWidth;\n    }\n\n    /** @hidden @internal */\n    public get pinnedEndWidth() {\n        if (!isNaN(this._pinnedEndWidth)) {\n            return this._pinnedEndWidth;\n        }\n        this._pinnedEndWidth = this.getPinnedEndWidth();\n        return this._pinnedEndWidth;\n    }\n\n    /** @hidden @internal */\n    public get unpinnedWidth() {\n        if (!isNaN(this._unpinnedWidth)) {\n            return this._unpinnedWidth;\n        }\n        this._unpinnedWidth = this.getUnpinnedWidth();\n        return this._unpinnedWidth;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isHorizontalScrollHidden = false;\n\n    /**\n     * @hidden @internal\n     * Gets the header cell inner width for auto-sizing.\n     */\n    public getHeaderCellWidth(element: HTMLElement): ISizeInfo {\n        const range = this.document.createRange();\n        const headerWidth = this.platform.getNodeSizeViaRange(range,\n            element, element);\n\n        const headerStyle = this.document.defaultView.getComputedStyle(element);\n        const headerPadding = parseFloat(headerStyle.paddingLeft) + parseFloat(headerStyle.paddingRight) +\n            parseFloat(headerStyle.borderRightWidth);\n\n        return { width: Math.ceil(headerWidth), padding: Math.ceil(headerPadding) };\n    }\n\n    /**\n     * @hidden @internal\n     * Gets the combined width of the columns that are specific to the enabled grid features. They are fixed.\n     */\n    public featureColumnsWidth(expander?: ElementRef) {\n        if (Number.isNaN(this._headerFeaturesWidth)) {\n            // TODO: platformUtil.isBrowser check\n            const rowSelectArea = this.headerSelectorContainer?.nativeElement?.getBoundingClientRect ?\n                this.headerSelectorContainer.nativeElement.getBoundingClientRect().width : 0;\n            const rowDragArea = this.rowDraggable && this.headerDragContainer?.nativeElement?.getBoundingClientRect ?\n                this.headerDragContainer.nativeElement.getBoundingClientRect().width : 0;\n            const groupableArea = this.headerGroupContainer?.nativeElement?.getBoundingClientRect ?\n                this.headerGroupContainer.nativeElement.getBoundingClientRect().width : 0;\n            const expanderWidth = expander?.nativeElement?.getBoundingClientRect ? expander.nativeElement.getBoundingClientRect().width : 0;\n            this._headerFeaturesWidth = rowSelectArea + rowDragArea + groupableArea + expanderWidth;\n        }\n        return this._headerFeaturesWidth;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get summariesMargin() {\n        return this.featureColumnsWidth();\n    }\n\n    /**\n     * Gets an array of `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const colums = this.grid.columns.\n     * ```\n     */\n    public get columns(): IgxColumnComponent[] {\n        return this._columns || [];\n    }\n\n    /**\n     * Gets an array of the pinned `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const pinnedColumns = this.grid.pinnedColumns.\n     * ```\n     */\n    public get pinnedColumns(): IgxColumnComponent[] {\n        if (this._pinnedVisible.length) {\n            return this._pinnedVisible;\n        }\n        this._pinnedVisible = this._pinnedColumns.filter(col => !col.hidden);\n        return this._pinnedVisible;\n    }\n\n    /**\n     * Gets an array of the pinned to the left `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const pinnedColumns = this.grid.pinnedStartColumns.\n     * ```\n     */\n    public get pinnedStartColumns(): IgxColumnComponent[] {\n        return this._pinnedStartColumns.filter(col => !col.hidden);\n    }\n\n    /**\n     * Gets an array of the pinned to the right `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const pinnedColumns = this.grid.pinnedEndColumns.\n     * ```\n     */\n    public get pinnedEndColumns(): IgxColumnComponent[] {\n        return this._pinnedEndColumns.filter(col => !col.hidden);\n    }\n\n    /* csSuppress */\n    /**\n     * Gets an array of the pinned `IgxRowComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const pinnedRow = this.grid.pinnedRows;\n     * ```\n     */\n    public get pinnedRows(): IgxGridRowComponent[] {\n        return this._pinnedRowList.toArray().sort((a, b) => a.index - b.index);\n    }\n\n    /**\n     * Gets an array of unpinned `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const unpinnedColumns = this.grid.unpinnedColumns.\n     * ```\n     */\n    public get unpinnedColumns(): IgxColumnComponent[] {\n        if (this._unpinnedVisible.length) {\n            return this._unpinnedVisible;\n        }\n        this._unpinnedVisible = this._unpinnedColumns.filter((col) => !col.hidden);\n        return this._unpinnedVisible;\n    }\n\n    /**\n     * Gets the `width` to be set on `IgxGridHeaderGroupComponent`.\n     */\n    public getHeaderGroupWidth(column: IgxColumnComponent): string {\n        return this.hasColumnLayouts\n            ? ''\n            : `${parseFloat(column.calcWidth)}px`;\n    }\n\n    /**\n     * Returns the `IgxColumnComponent` by field name.\n     *\n     * @example\n     * ```typescript\n     * const myCol = this.grid1.getColumnByName(\"ID\");\n     * ```\n     * @param name\n     */\n    public getColumnByName(name: string): IgxColumnComponent {\n        return this._columns.find((col) => col.field === name);\n    }\n\n    public getColumnByVisibleIndex(index: number): IgxColumnComponent {\n        return this.visibleColumns.find((col) =>\n            !col.columnGroup && !col.columnLayout &&\n            col.visibleIndex === index\n        );\n    }\n\n    /**\n     * Recalculates all widths of columns that have size set to `auto`.\n     *\n     * @example\n     * ```typescript\n     * this.grid1.recalculateAutoSizes();\n     * ```\n     */\n    public recalculateAutoSizes() {\n        // reset auto-size and calculate it again.\n        this._columns.forEach(x => x.autoSize = undefined);\n        this.resetCaches();\n        this.zone.onStable.pipe(first()).subscribe(() => {\n            this.cdr.detectChanges();\n            this.autoSizeColumnsInView();\n        });\n    }\n\n    /**\n     * Returns an array of visible `IgxColumnComponent`s.\n     *\n     * @example\n     * ```typescript\n     * const visibleColumns = this.grid.visibleColumns.\n     * ```\n     */\n    public get visibleColumns(): IgxColumnComponent[] {\n        if (this._visibleColumns.length) {\n            return this._visibleColumns;\n        }\n        this._visibleColumns = this._columns.filter(c => !c.hidden);\n        return this._visibleColumns;\n    }\n\n    /**\n     * Returns the total number of records.\n     *\n     * @remarks\n     * Only functions when paging is enabled.\n     * @example\n     * ```typescript\n     * const totalRecords = this.grid.totalRecords;\n     * ```\n     */\n    @Input()\n    public get totalRecords(): number {\n        return this._totalRecords >= 0 ? this._totalRecords : this.pagingState?.metadata.countRecords;\n    }\n\n    public set totalRecords(total: number) {\n        if (total >= 0) {\n            if (this.paginator) {\n                this.paginator.totalRecords = total;\n            }\n            this._totalRecords = total;\n            this.pipeTrigger++;\n            this.notifyChanges();\n        }\n    }\n\n    /** @hidden @internal */\n    public get totalWidth(): number {\n        if (!isNaN(this._totalWidth)) {\n            return this._totalWidth;\n        }\n        // Take only top level columns\n        const cols = this.visibleColumns.filter(col => col.level === 0 && !col.pinned);\n        let totalWidth = 0;\n        let i = 0;\n        for (i; i < cols.length; i++) {\n            totalWidth += parseFloat(cols[i].calcWidth) || 0;\n        }\n        this._totalWidth = totalWidth;\n        return totalWidth;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get showRowSelectors(): boolean {\n        return this.isRowSelectable && this.hasVisibleColumns && !this.hideRowSelectors;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get showAddButton() {\n        return this.rowEditable && this.dataView.length === 0 && this._columns.length > 0;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get showDragIcons(): boolean {\n        return this.rowDraggable && this._columns.length > this.hiddenColumnsCount;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected _getDataViewIndex(index: number): number {\n        let newIndex = index;\n        if ((index < 0 || index >= this.dataView.length) && this.pagingMode === 'remote' && this.page !== 0) {\n            newIndex = index - this.perPage * this.page;\n        } else if (this.gridAPI.grid.verticalScrollContainer.isRemote) {\n            newIndex = index - this.gridAPI.grid.virtualizationState.startIndex;\n        }\n        return newIndex;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected getDataIndex(dataViewIndex: number): number {\n        let newIndex = dataViewIndex;\n        if (this.gridAPI.grid.verticalScrollContainer.isRemote) {\n            newIndex = dataViewIndex + this.gridAPI.grid.virtualizationState.startIndex;\n        }\n        return newIndex;\n    }\n\n    /**\n     * Places a column before or after the specified target column.\n     *\n     * @example\n     * ```typescript\n     * grid.moveColumn(column, target);\n     * ```\n     */\n    public moveColumn(column: IgxColumnComponent, target: IgxColumnComponent, pos: DropPosition = DropPosition.AfterDropTarget) {\n        // M.A. May 11th, 2021 #9508 Make the event cancelable\n        const eventArgs: IColumnMovingEndEventArgs = { source: column, target, cancel: false };\n\n        this.columnMovingEnd.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        if (column === target || (column.level !== target.level) ||\n            (column.topLevelParent !== target.topLevelParent)) {\n            return;\n        }\n\n        if (column.level) {\n            this._moveChildColumns(column.parent as IgxColumnComponent, column, target, pos);\n        }\n\n        // let columnPinStateChanged;\n        // pinning and unpinning will work correctly even without passing index\n        // but is easier to calclulate the index here, and later use it in the pinning event args\n        if (target.pinned && !column.pinned) {\n            const pinnedIndex = target.pinningPosition === ColumnPinningPosition.Start ? this.pinnedStartColumns.indexOf(target) : this.pinnedEndColumns.indexOf(target);\n            const index = pos === DropPosition.AfterDropTarget ? pinnedIndex + 1 : pinnedIndex;\n            column.pin(index, target.pinningPosition);\n        }\n\n        if (!target.pinned && column.pinned) {\n            const unpinnedIndex = this._unpinnedColumns.indexOf(target);\n            const index = pos === DropPosition.AfterDropTarget ? unpinnedIndex + 1 : unpinnedIndex;\n            column.unpin(index);\n        }\n\n        // both are pinned but are in different sides\n        if (target.pinned && column.pinned && target.pinningPosition !== column.pinningPosition) {\n            column.pinningPosition = target.pinningPosition;\n        }\n\n        // if (target.pinned && column.pinned && !columnPinStateChanged) {\n        //     this._reorderColumns(column, target, pos, this._pinnedColumns);\n        // }\n\n        // if (!target.pinned && !column.pinned && !columnPinStateChanged) {\n        //     this._reorderColumns(column, target, pos, this._unpinnedColumns);\n        // }\n\n        this._moveColumns(column, target, pos);\n        this._columnsReordered(column);\n    }\n\n    /**\n     * Triggers change detection for the `IgxGridComponent`.\n     * Calling markForCheck also triggers the grid pipes explicitly, resulting in all updates being processed.\n     * May degrade performance if used when not needed, or if misused:\n     * ```typescript\n     * // DON'Ts:\n     * // don't call markForCheck from inside a loop\n     * // don't call markForCheck when a primitive has changed\n     * grid.data.forEach(rec => {\n     *  rec = newValue;\n     *  grid.markForCheck();\n     * });\n     *\n     * // DOs\n     * // call markForCheck after updating a nested property\n     * grid.data.forEach(rec => {\n     *  rec.nestedProp1.nestedProp2 = newValue;\n     * });\n     * grid.markForCheck();\n     * ```\n     *\n     * @example\n     * ```typescript\n     * grid.markForCheck();\n     * ```\n     */\n    public markForCheck() {\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    /* csSuppress */\n    /**\n     * Creates a new `IgxGridRowComponent` and adds the data record to the end of the data source.\n     *\n     * @example\n     * ```typescript\n     * this.grid1.addRow(record);\n     * ```\n     * @param data\n     */\n    public addRow(data: any): void {\n        // commit pending states prior to adding a row\n        this.crudService.endEdit(true);\n        this.gridAPI.addRowToData(data);\n\n        this.pipeTrigger++;\n        this.rowAddedNotifier.next({ data: data, rowData: data, owner: this, primaryKey: data[this.primaryKey], rowKey: data[this.primaryKey] });\n        this.notifyChanges();\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Removes the `IgxGridRowComponent` and the corresponding data record by primary key.\n     *\n     * @remarks\n     * Requires that the `primaryKey` property is set.\n     * The method accept rowSelector as a parameter, which is the rowID.\n     * @example\n     * ```typescript\n     * this.grid1.deleteRow(0);\n     * ```\n     * @param rowSelector\n     */\n    public deleteRow(rowSelector: any): any {\n        if (this.primaryKey !== undefined && this.primaryKey !== null) {\n            return this.deleteRowById(rowSelector);\n        }\n    }\n\n    /** @hidden */\n    public deleteRowById(rowId: any): any {\n        const args: IRowDataCancelableEventArgs = {\n            rowID: rowId,\n            primaryKey: rowId,\n            rowKey: rowId,\n            rowData: this.getRowData(rowId),\n            data: this.getRowData(rowId),\n            oldValue: this.getRowData(rowId),\n            owner: this,\n            isAddRow: false,\n            cancel: false\n        };\n        this.rowDelete.emit(args);\n        if (args.cancel) {\n            return;\n        }\n\n        const record = this.gridAPI.deleteRowById(rowId);\n        if (record !== null && record !== undefined) {\n            const rowDeletedEventArgs: IRowDataEventArgs = {\n                data: record,\n                rowData: record,\n                owner: this,\n                primaryKey: record[this.primaryKey],\n                rowKey: record[this.primaryKey]\n            };\n            this.rowDeleted.emit(rowDeletedEventArgs);\n        }\n        return record;\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Updates the `IgxGridRowComponent` and the corresponding data record by primary key.\n     *\n     * @remarks\n     * Requires that the `primaryKey` property is set.\n     * @example\n     * ```typescript\n     * this.gridWithPK.updateCell('Updated', 1, 'ProductName');\n     * ```\n     * @param value the new value which is to be set.\n     * @param rowSelector corresponds to rowID.\n     * @param column corresponds to column field.\n     */\n    public updateCell(value: any, rowSelector: any, column: string): void {\n        if (this.isDefined(this.primaryKey)) {\n            const col = this._columns.find(c => c.field === column);\n            if (col) {\n                // Simplify\n                const rowData = this.gridAPI.getRowData(rowSelector);\n                const index = this.gridAPI.get_row_index_in_data(rowSelector);\n                // If row passed is invalid\n                if (index < 0) {\n                    return;\n                }\n\n                const id = {\n                    rowID: rowSelector,\n                    columnID: col.index,\n                    rowIndex: index\n                };\n\n                const cell = new IgxCell(id, index, col, rowData[col.field], value, rowData, this as any);\n                const formControl = this.validation.getFormControl(cell.id.rowID, cell.column.field);\n                formControl.setValue(value);\n                this.gridAPI.update_cell(cell);\n                this.cdr.detectChanges();\n            }\n        }\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Updates the `IgxGridRowComponent`\n     *\n     * @remarks\n     * The row is specified by\n     * rowSelector parameter and the data source record with the passed value.\n     * This method will apply requested update only if primary key is specified in the grid.\n     * @example\n     * ```typescript\n     * grid.updateRow({\n     *       ProductID: 1, ProductName: 'Spearmint', InStock: true, UnitsInStock: 1, OrderDate: new Date('2005-03-21')\n     *   }, 1);\n     * ```\n     * @param value–\n     * @param rowSelector correspond to rowID\n     */\n    // TODO: prevent event invocation\n    public updateRow(value: any, rowSelector: any): void {\n        if (this.isDefined(this.primaryKey)) {\n            const editableCell = this.crudService.cell;\n            if (editableCell && editableCell.id.rowID === rowSelector) {\n                this.crudService.endCellEdit();\n            }\n            const row = new IgxEditRow(rowSelector, -1, this.gridAPI.getRowData(rowSelector), this as any);\n            this.gridAPI.update_row(row, value);\n\n            // TODO: fix for #5934 and probably break for #5763\n            // consider adding of third optional boolean parameter in updateRow.\n            // If developer set this parameter to true we should call notifyChanges(true), and\n            // vise-versa if developer set it to false we should call notifyChanges(false).\n            // The parameter should default to false\n            this.notifyChanges();\n        }\n    }\n\n    /**\n     * Returns the data that is contained in the row component.\n     *\n     * @remarks\n     * If the primary key is not specified the row selector match the row data.\n     * @example\n     * ```typescript\n     * const data = grid.getRowData(94741);\n     * ```\n     * @param rowSelector correspond to rowID\n     */\n    public getRowData(rowSelector: any): any {\n        if (!this.primaryKey) {\n            return rowSelector;\n        }\n        const data = this.gridAPI.get_all_data(this.transactions.enabled);\n        const index = this.gridAPI.get_row_index_in_data(rowSelector);\n        return index < 0 ? {} : data[index];\n    }\n\n    /**\n     * Sort a single `IgxColumnComponent`.\n     *\n     * @remarks\n     * Sort the `IgxGridComponent`'s `IgxColumnComponent` based on the provided array of sorting expressions.\n     * @example\n     * ```typescript\n     * this.grid.sort({ fieldName: name, dir: SortingDirection.Asc, ignoreCase: false });\n     * ```\n     */\n    public sort(expression: ISortingExpression | Array<ISortingExpression>): void {\n        const sortingState = cloneArray(this.sortingExpressions);\n\n        if (expression instanceof Array) {\n            for (const each of expression) {\n                this.gridAPI.prepare_sorting_expression([sortingState], each);\n            }\n        } else {\n            if (this._sortingOptions.mode === 'single') {\n                this._columns.forEach((col) => {\n                    if (!(col.field === expression.fieldName)) {\n                        this.clearSort(col.field);\n                    }\n                });\n            }\n            this.gridAPI.prepare_sorting_expression([sortingState], expression);\n        }\n\n        const eventArgs: ISortingEventArgs = { owner: this, sortingExpressions: sortingState, cancel: false };\n        this.sorting.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        this.crudService.endEdit(false);\n        if (expression instanceof Array) {\n            this.gridAPI.sort_multiple(expression);\n        } else {\n            this.gridAPI.sort(expression);\n        }\n        requestAnimationFrame(() => this.sortingDone.emit(expression));\n    }\n\n    /**\n     * Filters a single `IgxColumnComponent`.\n     *\n     * @example\n     * ```typescript\n     * public filter(term) {\n     *      this.grid.filter(\"ProductName\", term, IgxStringFilteringOperand.instance().condition(\"contains\"));\n     * }\n     * ```\n     * @param name\n     * @param value\n     * @param conditionOrExpressionTree\n     * @param ignoreCase\n     */\n    public filter(name: string, value: any, conditionOrExpressionTree?: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase?: boolean) {\n        this.filteringService.filter(name, value, conditionOrExpressionTree, ignoreCase);\n    }\n\n    /**\n     * Filters all the `IgxColumnComponent` in the `IgxGridComponent` with the same condition.\n     *\n     * @example\n     * ```typescript\n     * grid.filterGlobal('some', IgxStringFilteringOperand.instance().condition('contains'));\n     * ```\n     * @param value\n     * @param condition\n     * @param ignoreCase\n     * @deprecated in version 19.0.0.\n     */\n    public filterGlobal(value: any, condition, ignoreCase?) {\n        this.filteringService.filterGlobal(value, condition, ignoreCase);\n    }\n\n    /**\n     * Enables summaries for the specified column and applies your customSummary.\n     *\n     * @remarks\n     * If you do not provide the customSummary, then the default summary for the column data type will be applied.\n     * @example\n     * ```typescript\n     * grid.enableSummaries([{ fieldName: 'ProductName' }, { fieldName: 'ID' }]);\n     * ```\n     * Enable summaries for the listed columns.\n     * @example\n     * ```typescript\n     * grid.enableSummaries('ProductName');\n     * ```\n     * @param rest\n     */\n    public enableSummaries(...rest) {\n        if (rest.length === 1 && Array.isArray(rest[0])) {\n            this._multipleSummaries(rest[0], true);\n        } else {\n            this._summaries(rest[0], true, rest[1]);\n        }\n    }\n\n    /**\n     * Disable summaries for the specified column.\n     *\n     * @example\n     * ```typescript\n     * grid.disableSummaries('ProductName');\n     * ```\n     * @remarks\n     * Disable summaries for the listed columns.\n     * @example\n     * ```typescript\n     * grid.disableSummaries([{ fieldName: 'ProductName' }]);\n     * ```\n     */\n    public disableSummaries(...rest) {\n        if (rest.length === 1 && Array.isArray(rest[0])) {\n            this._disableMultipleSummaries(rest[0]);\n        } else {\n            this._summaries(rest[0], false);\n        }\n    }\n\n    /**\n     * If name is provided, clears the filtering state of the corresponding `IgxColumnComponent`.\n     *\n     * @remarks\n     * Otherwise clears the filtering state of all `IgxColumnComponent`s.\n     * @example\n     * ```typescript\n     * this.grid.clearFilter();\n     * ```\n     * @param name\n     */\n    public clearFilter(name?: string) {\n        this.filteringService.clearFilter(name);\n    }\n\n    /**\n     * If name is provided, clears the sorting state of the corresponding `IgxColumnComponent`.\n     *\n     * @remarks\n     * otherwise clears the sorting state of all `IgxColumnComponent`.\n     * @example\n     * ```typescript\n     * this.grid.clearSort();\n     * ```\n     * @param name\n     */\n    public clearSort(name?: string) {\n        if (!name) {\n            this.sortingExpressions = [];\n            return;\n        }\n        if (!this.gridAPI.get_column_by_name(name)) {\n            return;\n        }\n        this.gridAPI.clear_sort(name);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public refreshGridState(_args?) {\n        this.crudService.endEdit(true);\n        this.selectionService.clearHeaderCBState();\n        this.summaryService.clearSummaryCache();\n        this.summaryPipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    // TODO: We have return values here. Move them to event args ??\n\n    /**\n     * Pins a column by field name.\n     *\n     * @remarks\n     * Returns whether the operation is successful.\n     * @example\n     * ```typescript\n     * this.grid.pinColumn(\"ID\");\n     * ```\n     * @param columnName\n     * @param index\n     * @param pinningPosition\n     */\n    public pinColumn(columnName: string | IgxColumnComponent, index?: number, pinningPosition?: ColumnPinningPosition): boolean {\n        const col = columnName instanceof IgxColumnComponent ? columnName : this.getColumnByName(columnName);\n        return col.pin(index, pinningPosition);\n    }\n\n    /**\n     * Unpins a column by field name. Returns whether the operation is successful.\n     *\n     * @example\n     * ```typescript\n     * this.grid.pinColumn(\"ID\");\n     * ```\n     * @param columnName\n     * @param index\n     */\n    public unpinColumn(columnName: string | IgxColumnComponent, index?: number): boolean {\n        const col = columnName instanceof IgxColumnComponent ? columnName : this.getColumnByName(columnName);\n        return col.unpin(index);\n    }\n\n    /* csSuppress */\n    /**\n     * Pin the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.pinRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     * @param index The index at which to insert the row in the pinned collection.\n     */\n    public pinRow(rowID: any, index?: number, row?: RowType): boolean {\n        if (this._pinnedRecordIDs.indexOf(rowID) !== -1) {\n            return false;\n        }\n        const eventArgs = this.gridAPI.get_pin_row_event_args(rowID, index, row, true);\n        this.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        this.crudService.endEdit(false);\n\n        const insertIndex = typeof eventArgs.insertAtIndex === 'number' ? eventArgs.insertAtIndex : this._pinnedRecordIDs.length;\n        this._pinnedRecordIDs.splice(insertIndex, 0, rowID);\n        this.pipeTrigger++;\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n            this.rowPinned.emit(eventArgs);\n        }\n\n        return true;\n    }\n\n    /* csSuppress */\n    /**\n     * Unpin the row by its id.\n     *\n     * @remarks\n     * ID is either the primaryKey value or the data record instance.\n     * @example\n     * ```typescript\n     * this.grid.unpinRow(rowID);\n     * ```\n     * @param rowID The row id - primaryKey value or the data record instance.\n     */\n    public unpinRow(rowID: any, row?: RowType): boolean {\n        const index = this._pinnedRecordIDs.indexOf(rowID);\n        if (index === -1) {\n            return false;\n        }\n\n        const eventArgs = this.gridAPI.get_pin_row_event_args(rowID, null, row, false);\n        this.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        this.crudService.endEdit(false);\n        this._pinnedRecordIDs.splice(index, 1);\n        this.pipeTrigger++;\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n            this.rowPinned.emit(eventArgs);\n        }\n\n        return true;\n    }\n\n    /** @hidden @internal */\n    public get pinnedRowHeight() {\n        const containerHeight = this.pinContainer ? this.pinContainer.nativeElement.offsetHeight : 0;\n        return this.hasPinnedRecords ? containerHeight : 0;\n    }\n\n    /** @hidden @internal */\n    public get totalHeight() {\n        const height = this.calcHeight ? this.calcHeight + this.pinnedRowHeight : this.calcHeight;\n        return this.platform.isBrowser ? height : undefined;\n    }\n\n    /**\n     * Recalculates grid width/height dimensions.\n     *\n     * @remarks\n     * Should be run when changing DOM elements dimentions manually that affect the grid's size.\n     * @example\n     * ```typescript\n     * this.grid.reflow();\n     * ```\n     */\n    public reflow() {\n        this.calculateGridSizes();\n    }\n\n    /**\n     * Finds the next occurrence of a given string in the grid and scrolls to the cell if it isn't visible.\n     *\n     * @remarks\n     * Returns how many times the grid contains the string.\n     * @example\n     * ```typescript\n     * this.grid.findNext(\"financial\");\n     * ```\n     * @param text the string to search.\n     * @param caseSensitive optionally, if the search should be case sensitive (defaults to false).\n     * @param exactMatch optionally, if the text should match the entire value  (defaults to false).\n     */\n    public findNext(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        return this.find(text, 1, caseSensitive, exactMatch);\n    }\n\n    /**\n     * Finds the previous occurrence of a given string in the grid and scrolls to the cell if it isn't visible.\n     *\n     * @remarks\n     * Returns how many times the grid contains the string.\n     * @example\n     * ```typescript\n     * this.grid.findPrev(\"financial\");\n     * ```\n     * @param text the string to search.\n     * @param caseSensitive optionally, if the search should be case sensitive (defaults to false).\n     * @param exactMatch optionally, if the text should match the entire value (defaults to false).\n     */\n    public findPrev(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        return this.find(text, -1, caseSensitive, exactMatch);\n    }\n\n    /**\n     * Reapplies the existing search.\n     *\n     * @remarks\n     * Returns how many times the grid contains the last search.\n     * @example\n     * ```typescript\n     * this.grid.refreshSearch();\n     * ```\n     * @param updateActiveInfo\n     */\n    public refreshSearch(updateActiveInfo?: boolean, endEdit = true): number {\n        if (this._lastSearchInfo.searchText) {\n            this.rebuildMatchCache();\n\n            if (updateActiveInfo) {\n                const activeInfo = this.textHighlightService.highlightGroupsMap.get(this.id);\n                this._lastSearchInfo.matchInfoCache.forEach((match, i) => {\n                    if (match.column === activeInfo.column &&\n                        match.row === activeInfo.row &&\n                        match.index === activeInfo.index &&\n                        compareMaps(match.metadata, activeInfo.metadata)) {\n                        this._lastSearchInfo.activeMatchIndex = i;\n                    }\n                });\n            }\n\n            return this.find(this._lastSearchInfo.searchText,\n                0,\n                this._lastSearchInfo.caseSensitive,\n                this._lastSearchInfo.exactMatch,\n                false,\n                endEdit);\n        } else {\n            return 0;\n        }\n    }\n\n    /**\n     * Removes all the highlights in the cell.\n     *\n     * @example\n     * ```typescript\n     * this.grid.clearSearch();\n     * ```\n     */\n    public clearSearch() {\n        this._lastSearchInfo = {\n            searchText: '',\n            caseSensitive: false,\n            exactMatch: false,\n            activeMatchIndex: 0,\n            matchInfoCache: [],\n            matchCount: 0,\n            content: ''\n        };\n\n        this.rowList.forEach((row) => {\n            if (row.cells) {\n                row.cells.forEach((c: IgxGridCellComponent) => {\n                    c.clearHighlight();\n                });\n            }\n        });\n    }\n\n    /** @hidden @internal */\n    public get hasEditableColumns(): boolean {\n        return this._columns.some((col) => col.editable);\n    }\n\n    /** @hidden @internal */\n    public get hasSummarizedColumns(): boolean {\n        const summarizedColumns = this._columns.filter(col => col.hasSummary && !col.hidden);\n        return summarizedColumns.length > 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get rootSummariesEnabled(): boolean {\n        return this.summaryCalculationMode !== GridSummaryCalculationMode.childLevelsOnly;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get hasVisibleColumns(): boolean {\n        if (this._hasVisibleColumns === undefined) {\n            return this._columns ? this._columns.some(c => !c.hidden) : false;\n        }\n        return this._hasVisibleColumns;\n    }\n\n    public set hasVisibleColumns(value) {\n        this._hasVisibleColumns = value;\n    }\n\n    /** @hidden @internal */\n    public get hasMovableColumns(): boolean {\n        return this.moving;\n    }\n\n    /** @hidden @internal */\n    public get hasColumnGroups(): boolean {\n        return this._columnGroups;\n    }\n\n    /** @hidden @internal */\n    public get hasColumnLayouts() {\n        return !!this._columns.some(col => col.columnLayout);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public get multiRowLayoutRowSize() {\n        return this._multiRowLayoutRowSize;\n    }\n\n    /**\n     * @hidden\n     */\n    protected get rowBasedHeight() {\n        return this.dataLength * this.rowHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected get isPercentWidth() {\n        return this.width && this.width.indexOf('%') !== -1;\n    }\n\n    protected get shouldResize(): boolean {\n        return this._gridSize !== this.gridSize;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isPercentHeight() {\n        return this._height && this._height.indexOf('%') !== -1;\n    }\n\n    /**\n     * @hidden\n     */\n    protected get defaultTargetBodyHeight(): number {\n        const allItems = this.dataLength;\n        return this.renderedActualRowHeight * Math.min(this._defaultTargetRecordNumber,\n            this.paginator ? Math.min(allItems, this.paginator.perPage) : allItems);\n    }\n\n    /**\n     * @hidden @internal\n     * The rowHeight input is bound to min-height css prop of rows that adds a 1px border in all cases\n     */\n    public get renderedRowHeight(): number {\n        if (this.hasCellsToMerge) {\n            return this.rowHeight;\n        }\n        return this.rowHeight + this._borderSize;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get outerWidth() {\n        return this.hasVerticalScroll() ? this.calcWidth + this.scrollSize : this.calcWidth;\n    }\n\n    /**\n     * @hidden @internal\n     * Gets the size of the grid\n     */\n    public get gridSize(): ɵSize {\n        return this.gridComputedStyles?.getPropertyValue('--component-size') || ɵSize.Large;\n    }\n\n    /**\n     * @hidden @internal\n     * Gets the visible content height that includes header + tbody + footer.\n     */\n    public getVisibleContentHeight() {\n        let height = this.theadRow.nativeElement.clientHeight + this.tbody.nativeElement.clientHeight;\n        if (this.hasSummarizedColumns) {\n            height += this.tfoot.nativeElement.clientHeight;\n        }\n        return height;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getPossibleColumnWidth(baseWidth: number = null) {\n        let computedWidth;\n        if (baseWidth !== null) {\n            computedWidth = baseWidth;\n        } else {\n            computedWidth = this.calcWidth ||\n                parseFloat(this.document.defaultView.getComputedStyle(this.nativeElement).getPropertyValue('width'));\n        }\n\n        const visibleChildColumns = this.visibleColumns.filter(c => !c.columnGroup);\n\n\n        // Column layouts related\n        let visibleCols = [];\n        const columnBlocks = this.visibleColumns.filter(c => c.columnGroup);\n        const colsPerBlock = columnBlocks.map(block => block.getInitialChildColumnSizes(block.children));\n        const combinedBlocksSize = colsPerBlock.reduce((acc, item) => acc + item.length, 0);\n        colsPerBlock.forEach(blockCols => visibleCols = visibleCols.concat(blockCols));\n        //\n\n        const columnsWithSetWidths = this.hasColumnLayouts ?\n            visibleCols.filter(c => c.widthSetByUser) :\n            visibleChildColumns.filter(c => (c.widthSetByUser || c.widthConstrained) && c.width !== 'fit-content');\n\n        const columnsToSize = this.hasColumnLayouts ?\n            combinedBlocksSize - columnsWithSetWidths.length :\n            visibleChildColumns.length - columnsWithSetWidths.length;\n        const sumExistingWidths = columnsWithSetWidths\n            .reduce((prev, curr) => {\n                const colInstance = this.hasColumnLayouts ? curr.ref : curr;\n                const colWidth = !colInstance.widthConstrained ? curr.width : colInstance.calcPixelWidth;\n                let widthValue = parseFloat(colWidth);\n                if (isNaN(widthValue)) {\n                    widthValue = MINIMUM_COLUMN_WIDTH;\n                }\n                const currWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1 ?\n                    widthValue / 100 * computedWidth :\n                    widthValue;\n                // apply constraints, since constraint may change width\n                const constrainedWidth = this.hasColumnLayouts ? currWidth : colInstance.getConstrainedSizePx(currWidth);\n                return prev + constrainedWidth;\n            }, 0);\n\n        // When all columns are hidden, return 0px width\n        if (!sumExistingWidths && !columnsToSize) {\n            return '0px';\n        }\n\n        computedWidth -= this.featureColumnsWidth();\n\n        const columnWidth = !Number.isFinite(sumExistingWidths) ?\n            computedWidth / columnsToSize :\n            (computedWidth - sumExistingWidths) / columnsToSize;\n\n        return columnWidth + 'px';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public hasVerticalScroll() {\n        if (this._init) {\n            return false;\n        }\n        const isScrollable = this.verticalScrollContainer ? this.verticalScrollContainer.isScrollable() : false;\n        return !!(this.calcWidth && this.dataView && this.dataView.length > 0 && isScrollable);\n    }\n\n    /**\n     * Gets calculated width of the pinned areas.\n     *\n     * @example\n     * ```typescript\n     * const pinnedWidth = this.grid.getPinnedStartWidth();\n     * ```\n     * @param takeHidden If we should take into account the hidden columns in the pinned area.\n     */\n    public getPinnedStartWidth(takeHidden = false) {\n        const fc = takeHidden ? this._pinnedStartColumns : this.pinnedStartColumns;\n        let sum = 0;\n        for (const col of fc) {\n            if (col.level === 0) {\n                sum += parseFloat(col.calcWidth);\n            }\n        }\n        // includes features at start\n        sum += this.featureColumnsWidth();\n\n        return sum;\n    }\n\n    /**\n * Gets calculated width of the pinned areas.\n *\n * @example\n * ```typescript\n * const pinnedWidth = this.grid.getPinnedEndWidth();\n * ```\n * @param takeHidden If we should take into account the hidden columns in the pinned area.\n */\n    public getPinnedEndWidth(takeHidden = false) {\n        const fc = takeHidden ? this._pinnedEndColumns : this.pinnedEndColumns;\n        let sum = 0;\n        for (const col of fc) {\n            if (col.level === 0) {\n                sum += parseFloat(col.calcWidth);\n            }\n        }\n        return sum;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isColumnGrouped(_fieldName: string): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden @internal\n     * TODO: REMOVE\n     */\n    public onHeaderSelectorClick(event) {\n        if (!this.isMultiRowSelectionEnabled) {\n            return;\n        }\n        if (this.selectionService.areAllRowSelected()) {\n            this.selectionService.clearRowSelection(event);\n        } else {\n            this.selectionService.selectAllRows(event);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get headSelectorBaseAriaLabel() {\n        if (this._filteringExpressionsTree.filteringOperands.length > 0) {\n            return this.selectionService.areAllRowSelected() ? 'Deselect all filtered' : 'Select all filtered';\n        }\n\n        return this.selectionService.areAllRowSelected() ? 'Deselect all' : 'Select all';\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get totalRowsCountAfterFilter() {\n        if (this.data) {\n            return this.selectionService.allData.length;\n        }\n\n        return 0;\n    }\n\n    /** @hidden @internal */\n    public get pinnedDataView(): any[] {\n        return this.pinnedRecords ? this.pinnedRecords : [];\n    }\n\n    /** @hidden @internal */\n    public get unpinnedDataView(): any[] {\n        return this.unpinnedRecords ? this.unpinnedRecords : this.verticalScrollContainer?.igxForOf || [];\n    }\n\n    /**\n     * Returns the currently transformed paged/filtered/sorted/grouped/pinned/unpinned row data, displayed in the grid.\n     *\n     * @example\n     * ```typescript\n     *      const dataView = this.grid.dataView;\n     * ```\n     */\n    public get dataView() {\n        return this._dataView;\n    }\n\n    /**\n     * Gets/Sets whether clicking over a row should select/deselect it\n     *\n     * @remarks\n     * By default it is set to true\n     * @param enabled: boolean\n     */\n    @WatchChanges()\n    @Input({ transform: booleanAttribute })\n    public get selectRowOnClick() {\n        return this._selectRowOnClick;\n    }\n\n    public set selectRowOnClick(enabled: boolean) {\n        this._selectRowOnClick = enabled;\n    }\n\n    /**\n     * Select specified rows by ID.\n     *\n     * @example\n     * ```typescript\n     * this.grid.selectRows([1,2,5], true);\n     * ```\n     * @param rowIDs\n     * @param clearCurrentSelection if true clears the current selection\n     */\n    public selectRows(rowIDs: any[], clearCurrentSelection?: boolean) {\n        this.selectionService.selectRowsWithNoEvent(rowIDs, clearCurrentSelection);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselect specified rows by ID.\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectRows([1,2,5]);\n     * ```\n     * @param rowIDs\n     */\n    public deselectRows(rowIDs: any[]) {\n        this.selectionService.deselectRowsWithNoEvent(rowIDs);\n        this.notifyChanges();\n    }\n\n    /**\n     * Selects all rows\n     *\n     * @remarks\n     * By default if filtering is in place, selectAllRows() and deselectAllRows() select/deselect all filtered rows.\n     * If you set the parameter onlyFilterData to false that will select all rows in the grid exept deleted rows.\n     * @example\n     * ```typescript\n     * this.grid.selectAllRows();\n     * this.grid.selectAllRows(false);\n     * ```\n     * @param onlyFilterData\n     */\n    public selectAllRows(onlyFilterData = true) {\n        const data = onlyFilterData && this.filteredData ? this.filteredData : this.gridAPI.get_all_data(true);\n        const rowIDs = this.selectionService.getRowIDs(data).filter(rID => !this.gridAPI.row_deleted_transaction(rID));\n        this.selectRows(rowIDs);\n    }\n\n    /**\n     * Deselects all rows\n     *\n     * @remarks\n     * By default if filtering is in place, selectAllRows() and deselectAllRows() select/deselect all filtered rows.\n     * If you set the parameter onlyFilterData to false that will deselect all rows in the grid exept deleted rows.\n     * @example\n     * ```typescript\n     * this.grid.deselectAllRows();\n     * ```\n     * @param onlyFilterData\n     */\n    public deselectAllRows(onlyFilterData = true) {\n        if (onlyFilterData && this.filteredData && this.filteredData.length > 0) {\n            this.deselectRows(this.selectionService.getRowIDs(this.filteredData));\n        } else {\n            this.selectionService.clearAllSelectedRows();\n            this.notifyChanges();\n        }\n    }\n\n    /**\n     * Deselect selected cells.\n     * @example\n     * ```typescript\n     * this.grid.clearCellSelection();\n     * ```\n     */\n    public clearCellSelection(): void {\n        this.selectionService.clear(true);\n        this._activeRowIndexes = null;\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dragScroll(delta: { left: number; top: number }): void {\n        const horizontal = this.headerContainer.getScroll();\n        const vertical = this.verticalScrollContainer.getScroll();\n        const { left, top } = delta;\n\n        horizontal.scrollLeft += left * this.DRAG_SCROLL_DELTA;\n        vertical.scrollTop += top * this.DRAG_SCROLL_DELTA;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isDefined(arg: any): boolean {\n        return arg !== undefined && arg !== null;\n    }\n\n    /**\n     * Select range(s) of cells between certain rows and columns of the grid.\n     */\n    public selectRange(arg: GridSelectionRange | GridSelectionRange[] | null | undefined): void {\n        if (!this.isDefined(arg)) {\n            this.clearCellSelection();\n            return;\n        }\n        if (arg instanceof Array) {\n            arg.forEach(range => this.setSelection(range));\n        } else {\n            this.setSelection(arg);\n        }\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public columnToVisibleIndex(field: string | number): number {\n        const visibleColumns = this.visibleColumns;\n        if (typeof field === 'number') {\n            return field;\n        }\n        return visibleColumns.find(column => column.field === field).visibleIndex;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public setSelection(range: GridSelectionRange): void {\n        const startNode = { row: range.rowStart, column: this.columnToVisibleIndex(range.columnStart) };\n        const endNode = { row: range.rowEnd, column: this.columnToVisibleIndex(range.columnEnd) };\n\n        this.selectionService.pointerState.node = startNode;\n        this.selectionService.selectRange(endNode, this.selectionService.pointerState);\n        this.selectionService.addRangeMeta(endNode, this.selectionService.pointerState);\n        this.selectionService.initPointerState();\n    }\n\n    /**\n     * Get the currently selected ranges in the grid.\n     */\n    public getSelectedRanges(): GridSelectionRange[] {\n        return this.selectionService.ranges;\n    }\n\n    /**\n     *\n     * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n     *\n     * @remarks\n     * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n     * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n     */\n    public getSelectedData(formatters = false, headers = false) {\n        const source = this.filteredSortedData;\n        return this.extractDataFromSelection(source, formatters, headers);\n    }\n\n    /**\n     * Get current selected columns.\n     *\n     * @example\n     * Returns an array with selected columns\n     * ```typescript\n     * const selectedColumns = this.grid.selectedColumns();\n     * ```\n     */\n    public selectedColumns(): ColumnType[] {\n        const fields = this.selectionService.getSelectedColumns();\n        return fields.map(field => this.getColumnByName(field)).filter(field => field);\n    }\n\n    /**\n     * Select specified columns.\n     *\n     * @example\n     * ```typescript\n     * this.grid.selectColumns(['ID','Name'], true);\n     * ```\n     * @param columns\n     * @param clearCurrentSelection if true clears the current selection\n     */\n    public selectColumns(columns: string[] | ColumnType[], clearCurrentSelection?: boolean) {\n        let fieldToSelect: string[] = [];\n        if (columns.length === 0 || typeof columns[0] === 'string') {\n            fieldToSelect = columns as string[];\n        } else {\n            (columns as ColumnType[]).forEach(col => {\n                if (col.columnGroup) {\n                    const children = col.allChildren.filter(c => !c.columnGroup).map(c => c.field);\n                    fieldToSelect = [...fieldToSelect, ...children];\n                } else {\n                    fieldToSelect.push(col.field);\n                }\n            });\n        }\n\n        this.selectionService.selectColumnsWithNoEvent(fieldToSelect, clearCurrentSelection);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselect specified columns by field.\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectColumns(['ID','Name']);\n     * ```\n     * @param columns\n     */\n    public deselectColumns(columns: string[] | ColumnType[]) {\n        let fieldToDeselect: string[] = [];\n        if (columns.length === 0 || typeof columns[0] === 'string') {\n            fieldToDeselect = columns as string[];\n        } else {\n            (columns as ColumnType[]).forEach(col => {\n                if (col.columnGroup) {\n                    const children = col.allChildren.filter(c => !c.columnGroup).map(c => c.field);\n                    fieldToDeselect = [...fieldToDeselect, ...children];\n                } else {\n                    fieldToDeselect.push(col.field);\n                }\n            });\n        }\n        this.selectionService.deselectColumnsWithNoEvent(fieldToDeselect);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselects all columns\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectAllColumns();\n     * ```\n     */\n    public deselectAllColumns() {\n        this.selectionService.clearAllSelectedColumns();\n        this.notifyChanges();\n    }\n\n    /**\n     * Selects all columns\n     *\n     * @example\n     * ```typescript\n     * this.grid.deselectAllColumns();\n     * ```\n     */\n    public selectAllColumns() {\n        this.selectColumns(this._columns.filter(c => !c.columnGroup));\n    }\n\n    /**\n     *\n     * Returns an array of the current columns selection in the form of `[{ column.field: cell.value }, ...]`.\n     *\n     * @remarks\n     * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n     * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n     */\n    public getSelectedColumnsData(formatters = false, headers = false) {\n        const source = this.filteredSortedData ? this.filteredSortedData : this.data;\n        return this.extractDataFromColumnsSelection(source, formatters, headers);\n    }\n\n\n    /** @hidden @internal **/\n    public combineSelectedCellAndColumnData(columnData: any[], formatters = false, headers = false) {\n        const source = this.filteredSortedData;\n        return this.extractDataFromSelection(source, formatters, headers, columnData);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public preventContainerScroll = (evt) => {\n        if (evt.target.scrollTop !== 0) {\n            this.verticalScrollContainer.addScroll(evt.target.scrollTop);\n            evt.target.scrollTop = 0;\n        }\n        if (evt.target.scrollLeft !== 0) {\n            this.headerContainer.scrollPosition += evt.target.scrollLeft;\n            evt.target.scrollLeft = 0;\n        }\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public copyHandler(event) {\n        const eventPathElements = event.composedPath().map(el => el.tagName?.toLowerCase());\n        if (eventPathElements.includes('igx-grid-filtering-row') ||\n            eventPathElements.includes('igx-grid-filtering-cell')) {\n            return;\n        }\n\n        const selectedColumns = this.gridAPI.grid.selectedColumns();\n        const columnData = this.getSelectedColumnsData(this.clipboardOptions.copyFormatters, this.clipboardOptions.copyHeaders);\n        let selectedData;\n        if (event.type === 'copy') {\n            selectedData = this.getSelectedData(this.clipboardOptions.copyFormatters, this.clipboardOptions.copyHeaders);\n        }\n\n        let data = [];\n        let result;\n\n        if (event.code === 'KeyC' && (event.ctrlKey || event.metaKey) && event.currentTarget.className === 'igx-grid-thead__wrapper') {\n            if (selectedData.length) {\n                if (columnData.length === 0) {\n                    result = this.prepareCopyData(event, selectedData);\n                } else {\n                    data = this.combineSelectedCellAndColumnData(columnData, this.clipboardOptions.copyFormatters,\n                        this.clipboardOptions.copyHeaders);\n                    result = this.prepareCopyData(event, data[0], data[1]);\n                }\n            } else {\n                data = columnData;\n                result = this.prepareCopyData(event, data);\n            }\n\n            navigator.clipboard.writeText(result).then().catch(e => console.error(e));\n        } else if (!this.clipboardOptions.enabled || this.crudService.cellInEditMode || event.type === 'keydown') {\n            return;\n        } else {\n            if (selectedColumns.length) {\n                data = this.combineSelectedCellAndColumnData(columnData, this.clipboardOptions.copyFormatters,\n                    this.clipboardOptions.copyHeaders);\n                result = this.prepareCopyData(event, data[0], data[1]);\n            } else {\n                data = selectedData;\n                result = this.prepareCopyData(event, data);\n            }\n            event.clipboardData.setData('text/plain', result);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public prepareCopyData(event, data, keys?) {\n        const ev = { data, cancel: false } as IGridClipboardEvent;\n        this.gridCopy.emit(ev);\n\n        if (ev.cancel) {\n            return;\n        }\n\n        const transformer = new CharSeparatedValueData(ev.data, this.clipboardOptions.separator);\n        let result = keys ? transformer.prepareData(keys) : transformer.prepareData();\n\n        if (!this.clipboardOptions.copyHeaders) {\n            result = result.substring(result.indexOf('\\n') + 1);\n        }\n\n        if (data && data.length > 0 && Object.values(data[0]).length === 1) {\n            result = result.slice(0, -2);\n        }\n\n        event.preventDefault();\n\n        /* Necessary for the hiearachical case but will probably have to\n           change how getSelectedData is propagated in the hiearachical grid\n        */\n        event.stopPropagation();\n\n        return result;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public showSnackbarFor(index: number) {\n        this.addRowSnackbar.actionText = index === -1 ? '' : this.resourceStrings.igx_grid_snackbar_addrow_actiontext;\n        this.lastAddedRowIndex = index;\n        this.addRowSnackbar.open();\n    }\n\n    /* blazorCsSuppress */\n    /**\n     * Navigates to a position in the grid based on provided `rowindex` and `visibleColumnIndex`.\n     *\n     * @remarks\n     * Also can execute a custom logic over the target element,\n     * through a callback function that accepts { targetType: GridKeydownTargetType, target: Object }\n     * @example\n     * ```typescript\n     *  this.grid.navigateTo(10, 3, (args) => { args.target.nativeElement.focus(); });\n     * ```\n     */\n    public navigateTo(rowIndex: number, visibleColIndex = -1, cb: (args: any) => void = null) {\n        const totalItems = (this as any).totalItemCount ?? this.dataView.length - 1;\n        if (rowIndex < 0 || rowIndex > totalItems || (visibleColIndex !== -1\n            && this._columns.map(col => col.visibleIndex).indexOf(visibleColIndex) === -1)) {\n            return;\n        }\n        if (this.dataView.slice(rowIndex, rowIndex + 1).find(rec => rec.expression || rec.childGridsData)) {\n            visibleColIndex = -1;\n        }\n        // If the target row is pinned no need to scroll as well.\n        const shouldScrollVertically = this.navigation.shouldPerformVerticalScroll(rowIndex, visibleColIndex);\n        const shouldScrollHorizontally = this.navigation.shouldPerformHorizontalScroll(visibleColIndex, rowIndex);\n        if (shouldScrollVertically) {\n            this.navigation.performVerticalScrollToCell(rowIndex, visibleColIndex, () => {\n                if (shouldScrollHorizontally) {\n                    this.navigation.performHorizontalScrollToCell(visibleColIndex, () =>\n                        this.executeCallback(rowIndex, visibleColIndex, cb));\n                } else {\n                    this.executeCallback(rowIndex, visibleColIndex, cb);\n                }\n            });\n        } else if (shouldScrollHorizontally) {\n            this.navigation.performHorizontalScrollToCell(visibleColIndex, () => {\n                if (shouldScrollVertically) {\n                    this.navigation.performVerticalScrollToCell(rowIndex, visibleColIndex, () =>\n                        this.executeCallback(rowIndex, visibleColIndex, cb));\n                } else {\n                    this.executeCallback(rowIndex, visibleColIndex, cb);\n                }\n            });\n        } else {\n            this.executeCallback(rowIndex, visibleColIndex, cb);\n        }\n    }\n\n    /* blazorCsSuppress */\n    /**\n     * Returns `ICellPosition` which defines the next cell,\n     * according to the current position, that match specific criteria.\n     *\n     * @remarks\n     * You can pass callback function as a third parameter of `getPreviousCell` method.\n     * The callback function accepts IgxColumnComponent as a param\n     * @example\n     * ```typescript\n     *  const nextEditableCellPosition = this.grid.getNextCell(0, 3, (column) => column.editable);\n     * ```\n     */\n    public getNextCell(currRowIndex: number, curVisibleColIndex: number,\n        callback: (IgxColumnComponent) => boolean = null): ICellPosition {\n        const columns = this._columns.filter(col => !col.columnGroup && col.visibleIndex >= 0);\n        const dataViewIndex = this._getDataViewIndex(currRowIndex);\n        if (!this.isValidPosition(dataViewIndex, curVisibleColIndex)) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n        }\n        const colIndexes = callback ? columns.filter((col) => callback(col)).map(editCol => editCol.visibleIndex).sort((a, b) => a - b) :\n            columns.map(editCol => editCol.visibleIndex).sort((a, b) => a - b);\n        const nextCellIndex = colIndexes.find(index => index > curVisibleColIndex);\n        if (this.dataView.slice(dataViewIndex, dataViewIndex + 1)\n            .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData && !rec.detailsData) && nextCellIndex !== undefined) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: nextCellIndex };\n        } else {\n            const nextIndex = this.getNextDataRowIndex(currRowIndex)\n            if (colIndexes.length === 0 || nextIndex === currRowIndex) {\n                return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n            } else {\n                return { rowIndex: nextIndex, visibleColumnIndex: colIndexes[0] };\n            }\n        }\n    }\n\n    /* blazorCsSuppress */\n    /**\n     * Returns `ICellPosition` which defines the previous cell,\n     * according to the current position, that match specific criteria.\n     *\n     * @remarks\n     * You can pass callback function as a third parameter of `getPreviousCell` method.\n     * The callback function accepts IgxColumnComponent as a param\n     * @example\n     * ```typescript\n     *  const previousEditableCellPosition = this.grid.getPreviousCell(0, 3, (column) => column.editable);\n     * ```\n     */\n    public getPreviousCell(currRowIndex: number, curVisibleColIndex: number,\n        callback: (IgxColumnComponent) => boolean = null): ICellPosition {\n        const columns = this._columns.filter(col => !col.columnGroup && col.visibleIndex >= 0);\n        const dataViewIndex = this._getDataViewIndex(currRowIndex);\n        if (!this.isValidPosition(dataViewIndex, curVisibleColIndex)) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n        }\n        const colIndexes = callback ? columns.filter((col) => callback(col)).map(editCol => editCol.visibleIndex).sort((a, b) => b - a) :\n            columns.map(editCol => editCol.visibleIndex).sort((a, b) => b - a);\n        const prevCellIndex = colIndexes.find(index => index < curVisibleColIndex);\n        if (this.dataView.slice(dataViewIndex, dataViewIndex + 1)\n            .find(rec => !rec.expression && !rec.summaries && !rec.childGridsData && !rec.detailsData) && prevCellIndex !== undefined) {\n            return { rowIndex: currRowIndex, visibleColumnIndex: prevCellIndex };\n        } else {\n            const prevIndex = this.getNextDataRowIndex(currRowIndex, true);\n            if (colIndexes.length === 0 || prevIndex === currRowIndex) {\n                return { rowIndex: currRowIndex, visibleColumnIndex: curVisibleColIndex };\n            } else {\n                return { rowIndex: prevIndex, visibleColumnIndex: colIndexes[0] };\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public endRowEditTabStop(commit = true, event?: Event) {\n        const canceled = this.crudService.endEdit(commit, event);\n\n        if (canceled) {\n            return true;\n        }\n\n        this.navigation.restoreActiveNodeFocus();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public trackColumnChanges(_index, col) {\n        return col.field + col._calcWidth.toString();\n    }\n\n    /**\n     * @hidden\n     */\n    public isExpandedGroup(_group: IGroupByRecord): boolean {\n        return undefined;\n    }\n\n    /**\n     * @hidden @internal\n     * TODO: MOVE to CRUD\n     */\n    public openRowOverlay(id) {\n        this.configureRowEditingOverlay(id, this.rowList.length <= MIN_ROW_EDITING_COUNT_THRESHOLD);\n\n        this.rowEditingOverlay.open(this.rowEditSettings);\n        this.rowEditingOverlay.element.addEventListener('wheel', this.rowEditingWheelHandler);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public closeRowEditingOverlay() {\n        this.rowEditingOverlay.element.removeEventListener('wheel', this.rowEditingWheelHandler);\n        this.rowEditPositioningStrategy.isTopInitialPosition = null;\n        this.rowEditingOverlay.close();\n        this.rowEditingOverlay.element.parentElement.style.display = '';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleRowEditingOverlay(show) {\n        const rowStyle = this.rowEditingOverlay.element.style;\n        if (show) {\n            rowStyle.display = 'block';\n        } else {\n            rowStyle.display = 'none';\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public repositionRowEditingOverlay(row: RowType) {\n        if (row && !this.rowEditingOverlay.collapsed) {\n            const rowStyle = this.rowEditingOverlay.element.parentElement.style;\n            if (row) {\n                rowStyle.display = '';\n                this.configureRowEditingOverlay(row.key);\n                this.rowEditingOverlay.reposition();\n            } else {\n                rowStyle.display = 'none';\n            }\n        }\n    }\n\n    protected viewDetachHandler(args) {\n        if (this.actionStrip && args.view.rootNodes.find(x => x === this.actionStrip.context?.element.nativeElement)) {\n            this.actionStrip.hide();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cachedViewLoaded(args: ICachedViewLoadedEventArgs) {\n        if (this.hasHorizontalScroll()) {\n            const tmplId = args.context.templateID.type;\n            const index = args.context.index;\n            args.view.detectChanges();\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                const row = tmplId === 'dataRow' ? this.gridAPI.get_row_by_index(index) : null;\n                const summaryRow = tmplId === 'summaryRow' ? this.summariesRowList.find((sr) => sr.dataRowIndex === index) : null;\n                if (row && row instanceof IgxRowDirective) {\n                    this._restoreVirtState(row);\n                } else if (summaryRow) {\n                    this._restoreVirtState(summaryRow);\n                }\n            });\n        }\n    }\n\n    /**\n     * Opens the advanced filtering dialog.\n     */\n    public openAdvancedFilteringDialog(overlaySettings?: OverlaySettings) {\n        const settings = overlaySettings ? overlaySettings : this._advancedFilteringOverlaySettings;\n        if (!this._advancedFilteringOverlayId) {\n            this._advancedFilteringOverlaySettings.target =\n                (this as any).rootGrid ? (this as any).rootGrid.nativeElement : this.nativeElement;\n            this._advancedFilteringOverlaySettings.outlet = this.outlet;\n\n            this._advancedFilteringOverlayId = this.overlayService.attach(\n                IgxAdvancedFilteringDialogComponent,\n                this.viewRef,\n                settings);\n            this.overlayService.show(this._advancedFilteringOverlayId);\n        }\n    }\n\n    /**\n     * Closes the advanced filtering dialog.\n     *\n     * @param applyChanges indicates whether the changes should be applied\n     */\n    public closeAdvancedFilteringDialog(applyChanges: boolean) {\n        if (this._advancedFilteringOverlayId) {\n            const advancedFilteringOverlay = this.overlayService.getOverlayById(this._advancedFilteringOverlayId);\n            const advancedFilteringDialog = advancedFilteringOverlay.componentRef.instance as IgxAdvancedFilteringDialogComponent;\n\n            if (applyChanges) {\n                advancedFilteringDialog.applyChanges();\n            }\n            advancedFilteringDialog.closeDialog();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getEmptyRecordObjectFor(inRow: RowType) {\n        const row = { ...inRow?.data };\n        Object.keys(row).forEach(key => row[key] = undefined);\n        const id = this.generateRowID();\n        row[this.primaryKey] = id;\n        return { rowID: id, data: row, recordRef: row };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public hasHorizontalScroll() {\n        return Math.round(this.totalWidth - this.unpinnedWidth) > 0 && this.width !== null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isSummaryRow(rowData): boolean {\n        return rowData && rowData.summaries && (rowData.summaries instanceof Map);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public triggerPipes() {\n        this.pipeTrigger++;\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     */\n    public rowEditingWheelHandler = (event: WheelEvent) => {\n        if (event.deltaY > 0) {\n            this.verticalScrollContainer.scrollNext();\n        } else {\n            this.verticalScrollContainer.scrollPrev();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getUnpinnedIndexById(id) {\n        return this.unpinnedRecords.findIndex(x => x[this.primaryKey] === id);\n    }\n\n    /**\n     * Finishes the row transactions on the current row and returns whether the grid editing was canceled.\n     *\n     * @remarks\n     * If `commit === true`, passes them from the pending state to the data (or transaction service)\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton (click)=\"grid.endEdit(true)\">Commit Row</button>\n     * ```\n     * @param commit\n     */\n    // TODO: Facade for crud service refactoring. To be removed\n    // TODO: do not remove this, as it is used in rowEditTemplate, but mark is as internal and hidden\n    /* blazorCSSuppress */\n    public endEdit(commit = true, event?: Event): boolean {\n        if (!this.crudService.cellInEditMode && !this.crudService.rowInEditMode) {\n            return;\n        }\n        const document = this.nativeElement?.getRootNode() as Document | ShadowRoot;\n        const focusWithin = this.nativeElement?.contains(document.activeElement);\n\n        const success = this.crudService.endEdit(commit, event);\n\n        if (focusWithin) {\n            // restore focus for navigation\n            this.navigation.restoreActiveNodeFocus();\n        } else if (this.navigation.activeNode) {\n            // grid already lost focus, clear active node\n            this.clearActiveNode();\n        }\n\n        return success;\n    }\n\n    /**\n     * Enters add mode by spawning the UI under the specified row by rowID.\n     *\n     * @remarks\n     * If null is passed as rowID, the row adding UI is spawned as the first record in the data view\n     * @remarks\n     * Spawning the UI to add a child for a record only works if you provide a rowID\n     * @example\n     * ```typescript\n     * this.grid.beginAddRowById('ALFKI');\n     * this.grid.beginAddRowById('ALFKI', true);\n     * this.grid.beginAddRowById(null);\n     * ```\n     * @param rowID - The rowID to spawn the add row UI for, or null to spawn it as the first record in the data view\n     * @param asChild - Whether the record should be added as a child. Only applicable to igxTreeGrid.\n     */\n    public beginAddRowById(rowID: any, asChild?: boolean): void {\n        let index = rowID;\n        if (rowID == null) {\n            if (asChild) {\n                console.warn('The record cannot be added as a child to an unspecified record.');\n                return;\n            }\n            index = null;\n        } else {\n            // find the index of the record with that PK\n            index = this.gridAPI.get_rec_index_by_id(rowID, this.dataView);\n            if (index === -1) {\n                console.warn('No row with the specified ID was found.');\n                return;\n            }\n        }\n\n        this._addRowForIndex(index, asChild);\n    }\n\n    protected _addRowForIndex(index: number, asChild?: boolean) {\n        if (!this.dataView.length) {\n            this.beginAddRowForIndex(index, asChild);\n            return;\n        }\n        // check if the index is valid - won't support anything outside the data view\n        if (index >= 0 && index < this.dataView.length) {\n            // check if the index is in the view port\n            if ((index < this.virtualizationState.startIndex ||\n                index >= this.virtualizationState.startIndex + this.virtualizationState.chunkSize) &&\n                !this.isRecordPinnedByViewIndex(index)) {\n                this.verticalScrollContainer.chunkLoad\n                    .pipe(first(), takeUntil(this.destroy$))\n                    .subscribe(() => {\n                        this.beginAddRowForIndex(index, asChild);\n                    });\n                this.navigateTo(index);\n                this.notifyChanges(true);\n                return;\n            }\n            this.beginAddRowForIndex(index, asChild);\n        } else {\n            console.warn('The row with the specified PK or index is outside of the current data view.');\n        }\n    }\n\n    /* csSuppress */\n    /**\n     * Enters add mode by spawning the UI at the specified index.\n     *\n     * @remarks\n     * Accepted values for index are integers from 0 to this.grid.dataView.length\n     * @example\n     * ```typescript\n     * this.grid.beginAddRowByIndex(0);\n     * ```\n     * @param index - The index to spawn the UI at. Accepts integers from 0 to this.grid.dataView.length\n     */\n    public beginAddRowByIndex(index: number): void {\n        if (index === 0) {\n            return this.beginAddRowById(null);\n        }\n        return this._addRowForIndex(index - 1);\n    }\n\n    /**\n     * @hidden\n     */\n    public preventHeaderScroll(args) {\n        if (args.target.scrollLeft !== 0) {\n            (this.navigation as any).forOfDir().getScroll().scrollLeft = args.target.scrollLeft;\n            args.target.scrollLeft = 0;\n        }\n    }\n\n    protected beginAddRowForIndex(index: number, asChild = false) {\n        // TODO is row from rowList suitable for enterAddRowMode\n        const row = index == null ?\n            null : this.rowList.find(r => r.index === index);\n        if (row !== undefined) {\n            this.crudService.enterAddRowMode(row, asChild);\n        } else {\n            console.warn('No row with the specified PK or index was found.');\n        }\n    }\n\n    protected switchTransactionService(val: boolean) {\n        if (val) {\n            this._transactions = this.transactionFactory.create(TRANSACTION_TYPE.Base);\n        } else {\n            this._transactions = this.transactionFactory.create(TRANSACTION_TYPE.None);\n        }\n\n        if (this.dataCloneStrategy) {\n            this._transactions.cloneStrategy = this.dataCloneStrategy;\n        }\n    }\n\n    protected subscribeToTransactions(): void {\n        this.transactionChange$.next();\n        this.transactions.onStateUpdate.pipe(takeUntil(merge(this.destroy$, this.transactionChange$)))\n            .subscribe(this.transactionStatusUpdate.bind(this));\n    }\n\n    protected transactionStatusUpdate(event: StateUpdateEvent) {\n        let actions: Action<Transaction>[] = [];\n        if (event.origin === TransactionEventOrigin.REDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.DELETE) : [];\n        } else if (event.origin === TransactionEventOrigin.UNDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.ADD) : [];\n        }\n        if (actions.length > 0) {\n            for (const action of actions) {\n                if (this.selectionService.isRowSelected(action.transaction.id)) {\n                    this.selectionService.deselectRow(action.transaction.id);\n                }\n            }\n        }\n        if (event.origin === TransactionEventOrigin.REDO || event.origin === TransactionEventOrigin.UNDO) {\n            event.actions.forEach(x => {\n                if (x.transaction.type === TransactionType.UPDATE) {\n                    const value = this.transactions.getAggregatedValue(x.transaction.id, true);\n                    this.validation.update(x.transaction.id, value ?? x.recordRef);\n                } else if (x.transaction.type === TransactionType.DELETE || x.transaction.type === TransactionType.ADD) {\n                    const value = this.transactions.getAggregatedValue(x.transaction.id, true);\n                    if (value) {\n                        this.validation.create(x.transaction.id, value ?? x.recordRef);\n                        this.validation.update(x.transaction.id, value ?? x.recordRef);\n                        this.validation.markAsTouched(x.transaction.id);\n                    } else {\n                        this.validation.clear(x.transaction.id);\n                    }\n                }\n\n            });\n        }\n\n        this.selectionService.clearHeaderCBState();\n        this.summaryService.clearSummaryCache();\n        this.pipeTrigger++;\n        this.notifyChanges();\n    }\n\n    protected writeToData(rowIndex: number, value: any) {\n        mergeObjects(this.gridAPI.get_all_data()[rowIndex], value);\n    }\n\n    protected _restoreVirtState(row) {\n        // check virtualization state of data record added from cache\n        // in case state is no longer valid - update it.\n        const rowForOf = row.virtDirRow;\n        const gridScrLeft = rowForOf.getScroll().scrollLeft;\n        rowForOf.onHScroll(gridScrLeft);\n        rowForOf.cdr.detectChanges();\n    }\n\n    protected changeRowEditingOverlayStateOnScroll(row: RowType) {\n        if (!this.rowEditable || !this.rowEditingOverlay || this.rowEditingOverlay.collapsed) {\n            return;\n        }\n        if (!row) {\n            this.toggleRowEditingOverlay(false);\n        } else {\n            this.repositionRowEditingOverlay(row);\n        }\n    }\n\n    /**\n     * Should be called when data and/or isLoading input changes so that the overlay can be\n     * hidden/shown based on the current value of shouldOverlayLoading\n     */\n    protected evaluateLoadingState() {\n        if (this.shouldOverlayLoading) {\n            // a new overlay should be shown\n            const overlaySettings: OverlaySettings = {\n                outlet: this.loadingOutlet,\n                closeOnOutsideClick: false,\n                positionStrategy: new ContainerPositionStrategy()\n            };\n            this.loadingOverlay.open(overlaySettings);\n        } else {\n            this.loadingOverlay.close();\n        }\n    }\n\n    /**\n     * @hidden\n     * Sets grid width i.e. this.calcWidth\n     */\n    protected calculateGridWidth() {\n        let width;\n\n        if (this.isPercentWidth) {\n            /* width in %*/\n            const computed = this.document.defaultView.getComputedStyle(this.nativeElement).getPropertyValue('width');\n            width = computed.indexOf('%') === -1 ? parseFloat(computed) : null;\n        } else {\n            width = parseInt(this.width, 10);\n        }\n\n        if (!width && this.nativeElement) {\n            width = this.nativeElement.offsetWidth;\n        }\n\n\n        if (this.width === null || !width) {\n            this.isColumnWidthSum = true;\n            width = this.getColumnWidthSum();\n        } else {\n            this.isColumnWidthSum = false;\n        }\n\n        if (this.hasVerticalScroll() && this.width !== null) {\n            width -= this.scrollSize;\n        }\n        if ((Number.isFinite(width) || width === null) && width !== this.calcWidth) {\n            this.calcWidth = width;\n        }\n        this._derivePossibleWidth();\n    }\n\n    /**\n     * @hidden\n     * Sets columns defaultWidth property\n     */\n    protected _derivePossibleWidth() {\n        if (!this.columnWidthSetByUser) {\n            const possibleWidth = this.getPossibleColumnWidth();\n            if (possibleWidth === \"0px\") {\n                // all columns - hidden\n                // Do not update _columnWidth to preserve valid column widths for when columns are unhidden\n                // Only update column defaultWidth if _columnWidth is already set and not '0px'\n                if (this._columnWidth && this._columnWidth !== '0px') {\n                    this._updateColumnDefaultWidths();\n                }\n                this.resetCachedWidths();\n                return;\n            } else if (this.width !== null) {\n                this._columnWidth = Math.max(parseFloat(possibleWidth), this.minColumnWidth) + 'px'\n            } else {\n                this._columnWidth =  this.minColumnWidth + 'px';\n            }\n        }\n        this._updateColumnDefaultWidths();\n        this.resetCachedWidths();\n    }\n\n    private _updateColumnDefaultWidths() {\n        this._columns.forEach((column: IgxColumnComponent) => {\n            if (this.hasColumnLayouts) {\n                const columnWidthCombined = parseFloat(this._columnWidth) * (column.colEnd ? column.colEnd - column.colStart : 1);\n                column.defaultWidth = columnWidthCombined + 'px';\n            } else {\n                column.defaultWidth = this._columnWidth;\n                column.resetCaches();\n            }\n        });\n    }\n\n    protected resetNotifyChanges() {\n        this._cdrRequestRepaint = false;\n        this._cdrRequests = false;\n    }\n\n    /** @hidden @internal */\n    public resolveOutlet() {\n        return this._userOutletDirective ? this._userOutletDirective : this._outletDirective;\n    }\n\n    /**\n     * Reorder columns in the main columnList and _columns collections.\n     *\n     * @hidden\n     */\n    protected _moveColumns(from: IgxColumnComponent, to: IgxColumnComponent, pos: DropPosition) {\n        const orderedList = this._pinnedStartColumns.concat(this._unpinnedColumns, this._pinnedEndColumns);\n        const list = orderedList;\n        this._reorderColumns(from, to, pos, list);\n        const newList = this._resetColumnList(list);\n        this.updateColumns(newList);\n    }\n\n\n    /**\n     * Update internal column's collection.\n     * @hidden\n     */\n    public updateColumns(newColumns: IgxColumnComponent[]) {\n        // update internal collections to retain order.\n        this._pinnedColumns = newColumns\n            .filter((c) => c.pinned);\n        this._pinnedStartColumns = newColumns.filter((c) => c.pinned && c.pinningPosition === ColumnPinningPosition.Start);\n        this._pinnedEndColumns = newColumns.filter((c) => c.pinned && c.pinningPosition === ColumnPinningPosition.End);\n        this._unpinnedColumns = newColumns.filter((c) => !c.pinned);\n        this._columns = newColumns;\n        if (this._columns && this._columns.length && this._filteringExpressionsTree) {\n            this._filteringExpressionsTree = this.getRecreatedTree(this._filteringExpressionsTree);\n        }\n        if (this._columns && this._columns.length && this._advancedFilteringExpressionsTree) {\n            this._advancedFilteringExpressionsTree = this.getRecreatedTree(this._advancedFilteringExpressionsTree);\n        }\n        this.resetCaches();\n    }\n\n    /**\n     * @hidden\n     */\n    protected _resetColumnList(list?) {\n        if (!list) {\n            list = this._columns;\n        }\n        let newList = [];\n        list.filter(c => c.level === 0).forEach(p => {\n            newList.push(p);\n            if (p.columnGroup) {\n                newList = newList.concat(p.allChildren);\n            }\n        });\n        return newList;\n    }\n\n    /**\n     * Reorders columns inside the passed column collection.\n     * When reordering column group collection, the collection is not flattened.\n     * In all other cases, the columns collection is flattened, this is why adittional calculations on the dropIndex are done.\n     *\n     * @hidden\n     */\n    protected _reorderColumns(from: IgxColumnComponent, to: IgxColumnComponent, position: DropPosition, columnCollection: any[],\n        inGroup = false) {\n        const fromIndex = columnCollection.indexOf(from);\n        const childColumnsCount = inGroup ? 1 : from.allChildren.length + 1;\n        columnCollection.splice(fromIndex, childColumnsCount);\n        let dropIndex = columnCollection.indexOf(to);\n        if (position === DropPosition.AfterDropTarget) {\n            dropIndex++;\n            if (!inGroup && to.columnGroup) {\n                dropIndex += to.allChildren.length;\n            }\n        }\n        columnCollection.splice(dropIndex, 0, from);\n    }\n\n    /**\n     * Reorder column group collection.\n     *\n     * @hidden\n     */\n    protected _moveChildColumns(parent: IgxColumnComponent, from: IgxColumnComponent, to: IgxColumnComponent, pos: DropPosition) {\n        const buffer = parent.children.toArray();\n        this._reorderColumns(from, to, pos, buffer, true);\n        parent.children.reset(buffer);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected setupColumns() {\n        if (this.autoGenerate) {\n            this.autogenerateColumns();\n        } else {\n            this._columns = this.getColumnList();\n        }\n        if (this._columns && this._columns.length && this._filteringExpressionsTree) {\n            this._filteringExpressionsTree = this.getRecreatedTree(this._filteringExpressionsTree);\n        }\n        if (this._columns && this._columns.length && this._advancedFilteringExpressionsTree) {\n            this._advancedFilteringExpressionsTree = this.getRecreatedTree(this._advancedFilteringExpressionsTree);\n        }\n\n        this.initColumns(this._columns, (col: IgxColumnComponent) => this.columnInit.emit(col));\n        this.columnListDiffer.diff(this.columnList);\n        this._calculateRowCount();\n\n        this.columnList.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change: QueryList<IgxColumnComponent>) => {\n                this.onColumnsChanged(change);\n            });\n    }\n\n    protected getColumnList() {\n        return this.columnList.toArray().filter((col) => col.grid === this);\n    }\n\n    /**\n     * @hidden\n     */\n    protected deleteRowFromData(rowID: any, index: number) {\n        //  if there is a row (index !== 0) delete it\n        //  if there is a row in ADD or UPDATE state change it's state to DELETE\n        if (index !== -1) {\n            if (this.transactions.enabled) {\n                const transaction: Transaction = { id: rowID, type: TransactionType.DELETE, newValue: null };\n                this.transactions.add(transaction, this.data[index]);\n            } else {\n                this.data.splice(index, 1);\n            }\n        } else {\n            const state: State = this.transactions.getState(rowID);\n            this.transactions.add({ id: rowID, type: TransactionType.DELETE, newValue: null }, state && state.recordRef);\n        }\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    protected getDataBasedBodyHeight(): number {\n        return !this.data || (this.data.length < this._defaultTargetRecordNumber) ?\n            0 : this.defaultTargetBodyHeight;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected onPinnedRowsChanged(change: QueryList<IgxGridRowComponent>) {\n        const diff = this.rowListDiffer.diff(change);\n        if (diff) {\n            this.notifyChanges(true);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected onColumnsChanged(change: QueryList<IgxColumnComponent>) {\n        const diff = this.columnListDiffer.diff(change);\n\n        if (this.autoGenerate && this._columns.length === 0 && this._autoGeneratedCols.length > 0) {\n            // In Ivy if there are nested conditional templates the content children are re-evaluated\n            // hence autogenerated columns are cleared and need to be reset.\n            this.updateColumns(this._autoGeneratedCols as IgxColumnComponent[]);\n            return;\n        }\n        if (diff) {\n            let added = false;\n            let removed = false;\n            let pinning = false;\n            diff.forEachAddedItem((record: IterableChangeRecord<IgxColumnComponent>) => {\n                if (record.item.grid !== this) {\n                    return;\n                }\n                added = true;\n                if (record.item.pinned) {\n                    this._pinnedColumns.push(record.item);\n                    if (record.item.pinningPosition === ColumnPinningPosition.Start) {\n                        this._pinnedStartColumns.push(record.item);\n                    } else {\n                        this._pinnedEndColumns.push(record.item);\n                    }\n                    pinning = true;\n                } else {\n                    this._unpinnedColumns.push(record.item);\n                }\n            });\n\n            this.initColumns(this.getColumnList(), (col: IgxColumnComponent) => this.columnInit.emit(col));\n            if (pinning) {\n                this.initPinning();\n            }\n\n            diff.forEachRemovedItem((record: IterableChangeRecord<IgxColumnComponent | IgxColumnGroupComponent>) => {\n                if (record.item.grid !== this) {\n                    return;\n                }\n                const isColumnGroup = record.item instanceof IgxColumnGroupComponent;\n                if (!isColumnGroup) {\n                    // Clear Grouping\n                    this.gridAPI.clear_groupby(record.item.field);\n\n                    // Clear Filtering\n                    this.filteringService.clear_filter(record.item.field);\n\n                    // Close filter row\n                    if (this.filteringService.isFilterRowVisible\n                        && this.filteringService.filteredColumn\n                        && this.filteringService.filteredColumn.field === record.item.field) {\n                        this.filteringRow.close();\n                    }\n\n                    // Clear Sorting\n                    this.gridAPI.clear_sort(record.item.field);\n\n                    // Remove column selection\n                    this.selectionService.deselectColumnsWithNoEvent([record.item.field]);\n                }\n                removed = true;\n            });\n\n            this.resetCaches();\n\n            if (added || removed) {\n                this.onColumnsAddedOrRemoved();\n            }\n        }\n    }\n\n    protected checkPrimaryKeyField() {\n        if (this.primaryKey && this.data?.length && !(this.primaryKey in this.data[0])) {\n            console.warn(`Field \"${this.primaryKey}\" is not defined in the data. Set \\`primaryKey\\` to a valid field.`);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected onColumnsAddedOrRemoved() {\n        this.summaryService.clearSummaryCache();\n        Promise.resolve().then(() => {\n            // `onColumnsChanged` can be executed midway a current detectChange cycle and markForCheck will be ignored then.\n            // This ensures that we will wait for the current cycle to end so we can trigger a new one and ngDoCheck to fire.\n            this.notifyChanges(true);\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    protected calculateGridSizes(recalcFeatureWidth = true) {\n        /*\n            TODO: (R.K.) This layered lasagne should be refactored\n            ASAP. The reason I have to reset the caches so many times is because\n            after teach `detectChanges` call they are filled with invalid\n            state. Of course all of this happens midway through the grid\n            sizing process which of course, uses values from the caches, thus resulting\n            in a broken layout.\n        */\n        this.cdr.detectChanges();\n        this.resetCaches(recalcFeatureWidth);\n        const hasScroll = this.hasVerticalScroll();\n        const hasHScroll = !this.isHorizontalScrollHidden;\n        this.calculateGridWidth();\n        this.resetCaches(recalcFeatureWidth);\n        this.cdr.detectChanges();\n        this.calculateGridHeight();\n\n        if (this.rowEditable) {\n            this.repositionRowEditingOverlay(this.crudService.rowInEditMode);\n        }\n\n        if (this.filteringService.isFilterRowVisible) {\n            this.filteringRow.resetChipsArea();\n        }\n\n        this.cdr.detectChanges();\n        // in case scrollbar has appeared recalc to size correctly.\n        if (hasScroll !== this.hasVerticalScroll()) {\n            this.calculateGridWidth();\n            this.cdr.detectChanges();\n        }\n\n        if (this.zone.isStable) {\n            this.zone.run(() => {\n                this._applyWidthHostBinding();\n                this.cdr.detectChanges();\n            });\n        } else {\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                this.zone.run(() => {\n                    this._applyWidthHostBinding();\n                });\n            });\n        }\n        this.resetCaches(recalcFeatureWidth);\n        if (this.hasColumnsToAutosize) {\n            this.cdr.detectChanges();\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                this._autoSizeColumnsNotify.next();\n            });\n        }\n\n        // in case horizontal scrollbar has appeared recalc to size correctly.\n        if (hasHScroll !== this.hasHorizontalScroll()) {\n            this.isHorizontalScrollHidden = !this.hasHorizontalScroll();\n            this.cdr.detectChanges();\n            this.calculateGridHeight();\n            this.cdr.detectChanges();\n        } else {\n            this.resetCaches(recalcFeatureWidth);\n        }\n    }\n\n    /**\n     * @hidden\n     * Sets TBODY height i.e. this.calcHeight\n     */\n    protected calculateGridHeight() {\n\n        this.calcHeight = this._calculateGridBodyHeight();\n        if (this.pinnedRowHeight && this.calcHeight) {\n            this.calcHeight -= this.pinnedRowHeight;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected getGroupAreaHeight(): number {\n        return 0;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getComputedHeight(elem) {\n        return elem.offsetHeight ? parseFloat(this.document.defaultView.getComputedStyle(elem).getPropertyValue('height')) : 0;\n    }\n    /**\n     * @hidden\n     */\n    protected getFooterHeight(): number {\n        return this.summaryRowHeight || this.getComputedHeight(this.tfoot.nativeElement);\n    }\n    /**\n     * @hidden\n     */\n    protected getTheadRowHeight(): number {\n        // D.P.: Before CSS loads,theadRow computed height will be 'auto'->NaN, so use 0 fallback\n        const height = this.getComputedHeight(this.theadRow.nativeElement) || 0;\n        return (!this.allowFiltering || (this.allowFiltering && this.filterMode !== FilterMode.quickFilter)) ?\n            height - this.getFilterCellHeight() :\n            height;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getToolbarHeight(): number {\n        let toolbarHeight = 0;\n        if (this.toolbar.first) {\n            toolbarHeight = this.getComputedHeight(this.toolbar.first.nativeElement);\n        }\n        return toolbarHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getPagingFooterHeight(): number {\n        let pagingHeight = 0;\n        if (this.footer) {\n            const height = this.getComputedHeight(this.footer.nativeElement);\n            pagingHeight = this.footer.nativeElement.firstElementChild ?\n                height : 0;\n        }\n        return pagingHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected getFilterCellHeight(): number {\n        const headerGroupNativeEl = (this.headerGroupsList.length !== 0) ?\n            this.headerGroupsList[0].nativeElement : null;\n        const filterCellNativeEl = (headerGroupNativeEl) ?\n            headerGroupNativeEl.querySelector('igx-grid-filtering-cell') as HTMLElement : null;\n        return (filterCellNativeEl) ? filterCellNativeEl.offsetHeight : 0;\n    }\n\n    /**\n     * @hidden\n     */\n    protected _calculateGridBodyHeight(): number {\n        if (!this._height) {\n            return null;\n        }\n        const actualTheadRow = this.getTheadRowHeight();\n        const footerHeight = this.getFooterHeight();\n        const toolbarHeight = this.getToolbarHeight();\n        const pagingHeight = this.getPagingFooterHeight();\n        const groupAreaHeight = this.getGroupAreaHeight();\n        const scrHeight = this.getComputedHeight(this.scr.nativeElement);\n        const renderedHeight = toolbarHeight + actualTheadRow +\n            footerHeight + pagingHeight + groupAreaHeight +\n            scrHeight;\n\n        let gridHeight = 0;\n\n        if (this.isPercentHeight) {\n            const computed = this.document.defaultView.getComputedStyle(this.nativeElement).getPropertyValue('height');\n            const autoSize = this._shouldAutoSize(renderedHeight);\n            if (autoSize || computed.indexOf('%') !== -1) {\n                const bodyHeight = this.getDataBasedBodyHeight();\n                return bodyHeight > 0 ? bodyHeight : null;\n            }\n            gridHeight = parseFloat(computed);\n        } else {\n            gridHeight = parseInt(this._height, 10);\n        }\n        const height = Math.abs(gridHeight - renderedHeight);\n\n        if (Math.round(height) === 0 || isNaN(gridHeight)) {\n            const bodyHeight = this.defaultTargetBodyHeight;\n            return bodyHeight > 0 ? bodyHeight : null;\n        }\n        return height;\n    }\n\n    protected checkContainerSizeChange() {\n        const parentElement = this.nativeElement.parentElement || (this.nativeElement.getRootNode() as any).host;\n        const origHeight = parentElement.offsetHeight;\n        this.nativeElement.style.display = 'none';\n        const height = parentElement.offsetHeight;\n        this.nativeElement.style.display = '';\n        return origHeight !== height;\n    }\n\n    protected _shouldAutoSize(renderedHeight) {\n        this.tbody.nativeElement.style.display = 'none';\n        const parentElement = this.nativeElement.parentElement || (this.nativeElement.getRootNode() as any).host;\n        let res = !parentElement ||\n            parentElement.clientHeight === 0 ||\n            parentElement.clientHeight === renderedHeight;\n        if (parentElement && (res || this._autoSize)) {\n            // If grid causes the parent container to extend (for example when container is flex)\n            // we should always auto-size since the actual size of the container will continuously change as the grid renders elements.\n            this._autoSize = false;\n            res = this.checkContainerSizeChange();\n        }\n        this.tbody.nativeElement.style.display = '';\n        return res;\n    }\n\n    /**\n     * @hidden\n     * Gets calculated width of the unpinned area\n     * @param takeHidden If we should take into account the hidden columns in the pinned area.\n     */\n    protected getUnpinnedWidth(takeHidden = false) {\n        let width = this.isPercentWidth ?\n            this.calcWidth :\n            parseInt(this.width, 10) || parseInt(this.hostWidth, 10) || this.calcWidth;\n        if (this.hasVerticalScroll() && !this.isPercentWidth) {\n            width -= this.scrollSize;\n        }\n\n        return width - (this.getPinnedStartWidth(takeHidden) + this.getPinnedEndWidth(takeHidden));\n    }\n\n    /**\n     * @hidden\n     */\n    protected _summaries(fieldName: string, hasSummary: boolean, summaryOperand?: any) {\n        const column = this.gridAPI.get_column_by_name(fieldName);\n        if (column) {\n            column.hasSummary = hasSummary;\n            if (summaryOperand) {\n                if (this.rootSummariesEnabled) {\n                    this.summaryService.retriggerRootPipe++;\n                }\n                column.summaries = summaryOperand;\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected _multipleSummaries(expressions: ISummaryExpression[], hasSummary: boolean) {\n        expressions.forEach((element) => {\n            this._summaries(element.fieldName, hasSummary, element.customSummary);\n        });\n    }\n    /**\n     * @hidden\n     */\n    protected _disableMultipleSummaries(expressions) {\n        expressions.forEach((column) => {\n            const columnName = column && column.fieldName ? column.fieldName : column;\n            this._summaries(columnName, false);\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public resolveDataTypes(rec) {\n        if (typeof rec === 'number') {\n            return GridColumnDataType.Number;\n        } else if (typeof rec === 'boolean') {\n            return GridColumnDataType.Boolean;\n        } else if (typeof rec === 'object' && rec instanceof Date) {\n            return GridColumnDataType.Date;\n        } else if (typeof rec === 'string' && (/\\.(gif|jpe?g|tiff?|png|webp|bmp)$/i).test(rec)) {\n            return GridColumnDataType.Image;\n        }\n        return GridColumnDataType.String;\n    }\n\n    /**\n     * @hidden\n     */\n    protected autogenerateColumns() {\n        const data = this.gridAPI.get_data();\n        const fields = this.generateDataFields(data);\n        const columns = [];\n\n        this._autoGeneratedColsRefs.forEach(ref => ref.destroy());\n        this._autoGeneratedColsRefs = [];\n        fields.forEach((field) => {\n            const ref = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n            ref.instance.field = field;\n            ref.instance.dataType = this.resolveDataTypes(data[0][field]);\n            ref.changeDetectorRef.detectChanges();\n            this._autoGeneratedColsRefs.push(ref);\n            columns.push(ref.instance);\n        });\n        this._autoGeneratedCols = columns;\n\n        this.updateColumns(columns);\n        this.columnsAutogenerated.emit({ columns: this._autoGeneratedCols });\n    }\n\n    protected generateDataFields(data: any[]): string[] {\n        return Object.keys(data && data.length !== 0 ? data[0] : [])\n            .filter(key => !this.autoGenerateExclude.includes(key));\n    }\n\n    /**\n     * @hidden\n     */\n    protected initColumns(collection: IgxColumnComponent[], cb: (args: any) => void = null) {\n        this._columnGroups = collection.some(col => col.columnGroup);\n        if (this.hasColumnLayouts) {\n            // Set overall row layout size\n            collection.forEach((col) => {\n                if (col.columnLayout) {\n                    const layoutSize = col.children ?\n                        col.children.reduce((acc, val) => Math.max(val.rowStart + val.gridRowSpan - 1, acc), 1) :\n                        1;\n                    this._multiRowLayoutRowSize = Math.max(layoutSize, this._multiRowLayoutRowSize);\n                }\n            });\n        }\n        if (this.hasColumnLayouts && this.hasColumnGroups) {\n            // invalid configuration - multi-row and column groups\n            // remove column groups\n            const columnLayoutColumns = collection.filter((col) => col.columnLayout || col.columnLayoutChild);\n            collection = columnLayoutColumns;\n        }\n\n        collection.forEach((column: IgxColumnComponent) => {\n            column.defaultWidth = this.columnWidthSetByUser ? this._columnWidth : column.defaultWidth ? column.defaultWidth : '';\n\n            if (cb) {\n                cb(column);\n            }\n        });\n\n        this.updateColumns(collection);\n\n        if (this.hasColumnLayouts) {\n            collection.forEach((column: IgxColumnComponent) => {\n                column.populateVisibleIndexes();\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected reinitPinStates() {\n        this._pinnedColumns = this._columns\n            .filter((c) => c.pinned).sort((a, b) => this._pinnedColumns.indexOf(a) - this._pinnedColumns.indexOf(b));\n        this._pinnedStartColumns = this._columns.filter((c) => c.pinned && c.pinningPosition === ColumnPinningPosition.Start)\n            .sort((a, b) => this._pinnedStartColumns.indexOf(a) - this._pinnedStartColumns.indexOf(b));\n        this._pinnedEndColumns = this._columns.filter((c) => c.pinned && c.pinningPosition === ColumnPinningPosition.End)\n            .sort((a, b) => this._pinnedEndColumns.indexOf(a) - this._pinnedEndColumns.indexOf(b));\n        this._unpinnedColumns = this.hasColumnGroups ? this._columns.filter((c) => !c.pinned) :\n            this._columns.filter((c) => !c.pinned)\n                .sort((a, b) => this._unpinnedColumns.indexOf(a) - this._unpinnedColumns.indexOf(b));\n    }\n\n    protected extractDataFromSelection(source: any[], formatters = false, headers = false, columnData?: any[]): any[] {\n        let columnsArray: IgxColumnComponent[];\n        let record = {};\n        let selectedData = [];\n        let keys = [];\n        const selectionCollection = new Map();\n        const keysAndData = [];\n        const activeEl = this.selectionService.activeElement;\n\n        if (this.type === 'hierarchical') {\n            const expansionRowIndexes = [];\n            for (const [key, value] of this.expansionStates.entries()) {\n                if (value) {\n                    const rowIndex = this.gridAPI.get_rec_index_by_id(key, this.dataView);\n                    expansionRowIndexes.push(rowIndex);\n                }\n            }\n            if (this.selectionService.selection.size > 0) {\n                if (expansionRowIndexes.length > 0) {\n                    for (const [key, value] of this.selectionService.selection.entries()) {\n                        const updatedKey = key;\n                        let subtract = 0;\n                        expansionRowIndexes.forEach((row) => {\n                            if (updatedKey > Number(row)) {\n                                subtract++;\n                            }\n                        });\n                        selectionCollection.set(updatedKey - subtract, value);\n                    }\n                }\n            } else if (activeEl) {\n                let subtract = 0;\n                if (expansionRowIndexes.length > 0) {\n                    expansionRowIndexes.forEach(row => {\n                        if (activeEl.row > Number(row)) {\n                            subtract++;\n                        }\n                    });\n                    activeEl.row -= subtract;\n                }\n            }\n        }\n\n        const totalItems = (this as any).totalItemCount ?? 0;\n        const isRemote = totalItems && totalItems > this.dataView.length;\n        let selectionMap;\n        if (this.type === 'hierarchical' && selectionCollection.size > 0) {\n            selectionMap = isRemote ? Array.from(selectionCollection) :\n                Array.from(selectionCollection).filter((tuple) => tuple[0] < source.length);\n        } else {\n            selectionMap = isRemote ? Array.from(this.selectionService.selection) :\n                Array.from(this.selectionService.selection).filter((tuple) => tuple[0] < source.length);\n        }\n\n        if (this.cellSelection === GridSelectionMode.single && activeEl) {\n            selectionMap.push([activeEl.row, new Set<number>().add(activeEl.column)]);\n        }\n\n        if (this.cellSelection === GridSelectionMode.none && activeEl) {\n            selectionMap.push([activeEl.row, new Set<number>().add(activeEl.column)]);\n        }\n\n        if (columnData) {\n            selectedData = columnData;\n        }\n\n        // eslint-disable-next-line prefer-const\n        for (let [row, set] of selectionMap) {\n            row = this.paginator && (this.pagingMode === 'local' && source === this.filteredSortedData) ? row + (this.perPage * this.page) : row;\n            row = isRemote ? row - this.virtualizationState.startIndex : row;\n            if (!source[row] || source[row].detailsData !== undefined) {\n                continue;\n            }\n            const temp = Array.from(set);\n            for (const each of temp) {\n                columnsArray = this.getSelectableColumnsAt(each);\n                columnsArray.forEach((col) => {\n                    if (col) {\n                        const key = this.type !== 'pivot' && headers ? col.header || col.field : col.field;\n                        const rowData = source[row].ghostRecord ? source[row].recordRef : source[row];\n                        const value = this.type === 'pivot' ? rowData.aggregationValues.get(col.field)\n                            : resolveNestedPath(rowData, columnFieldPath(col.field));\n                        record[key] = formatters && col.formatter ? col.formatter(value, rowData) : value;\n                        if (columnData) {\n                            if (!record[key]) {\n                                record[key] = '';\n                            }\n                            record[key] = record[key].toString().concat('recordRow-' + row);\n                        }\n                    }\n                });\n            }\n            if (Object.keys(record).length) {\n                if (columnData) {\n                    if (!keys.length) {\n                        keys = Object.keys(columnData[0]);\n                    }\n                    for (const [key, value] of Object.entries(record)) {\n                        if (!keys.includes(key)) {\n                            keys.push(key);\n                        }\n                        let c: any = value;\n                        const rowNumber = +c.split('recordRow-')[1];\n                        c = c.split('recordRow-')[0];\n                        record[key] = c;\n                        const mergedObj = Object.assign(selectedData[rowNumber], record);\n                        selectedData[rowNumber] = mergedObj;\n                    }\n                } else {\n                    selectedData.push(record);\n                }\n            }\n            record = {};\n        }\n\n        if (keys.length) {\n            keysAndData.push(selectedData);\n            keysAndData.push(keys);\n            return keysAndData;\n        } else {\n            return selectedData;\n        }\n    }\n\n    protected getSelectableColumnsAt(index) {\n        if (this.hasColumnLayouts) {\n            const visibleLayoutColumns = this.visibleColumns\n                .filter(col => col.columnLayout)\n                .sort((a, b) => a.visibleIndex - b.visibleIndex);\n            const colLayout = visibleLayoutColumns[index];\n            return colLayout ? colLayout.children.toArray() : [];\n        } else {\n            const visibleColumns = this.visibleColumns\n                .filter(col => !col.columnGroup)\n                .sort((a, b) => a.visibleIndex - b.visibleIndex);\n            return [visibleColumns[index]];\n        }\n    }\n\n    protected autoSizeColumnsInView() {\n        if (!this.hasColumnsToAutosize) return;\n        const vState = this.headerContainer.state;\n        let colResized = false;\n        const unpinnedInView = this.headerContainer.igxGridForOf.slice(vState.startIndex, vState.startIndex + vState.chunkSize).flatMap(x => x.columnGroup ? x.allChildren : x);\n        const columnsInView = this.pinnedColumns.concat(unpinnedInView as IgxColumnComponent[]);\n        for (const col of columnsInView) {\n            if (!col.autoSize && col.headerCell) {\n                const cellsContentWidths = [];\n                if (col._cells.length !== this.rowList.length) {\n                    this.rowList.forEach(x => x.cdr.detectChanges());\n                }\n                const cells = this._dataRowList.map(x => x.cells.find(c => c.column === col));\n                cells.forEach((cell) => cellsContentWidths.push(cell?.nativeElement?.offsetWidth || 0));\n                let maxForCells = Math.max(...cellsContentWidths);\n                const header = this.headerCellList.find(x => x.column === col);\n                cellsContentWidths.push(header.nativeElement.offsetWidth);\n                const max = Math.max(...cellsContentWidths);\n                // in cases with template contains something, like a webcomponent,\n                // that renders fully only after it is already injected in the DOM,\n                // and initially renders as empty, skip measuring it.\n                let emptyCellWithPaddingOnly = 0;\n                if (cells.length > 0 && !!col.bodyTemplate) {\n                    const cellStyle = this.document.defaultView.getComputedStyle(cells[0].nativeElement);\n                    emptyCellWithPaddingOnly = parseFloat(cellStyle.paddingLeft) + parseFloat(cellStyle.paddingRight);\n                } else {\n                    maxForCells = max;\n                }\n\n                if (max === 0 || (maxForCells <= emptyCellWithPaddingOnly && this._firstAutoResize)) {\n                    // cells not in DOM yet or content not fully initialized.\n                    continue;\n                }\n                let maxSize = Math.ceil(Math.max(...cellsContentWidths)) + 1;\n                if (col.maxWidth && maxSize > col.maxWidthPx) {\n                    maxSize = col.maxWidthPx;\n                } else if (maxSize < col.userSetMinWidthPx) {\n                    maxSize = col.userSetMinWidthPx;\n                }\n                col.autoSize = maxSize;\n                col.resetCaches();\n                colResized = true;\n            }\n        }\n        if (colResized) {\n            this.resetCachedWidths();\n            this.cdr.detectChanges();\n        }\n\n        if (this.isColumnWidthSum) {\n            this.calcWidth = this.getColumnWidthSum();\n        }\n    }\n\n    protected extractDataFromColumnsSelection(source: any[], formatters = false, headers = false): any[] {\n        let record = {};\n        const selectedData = [];\n        const selectedColumns = this.selectedColumns();\n        if (selectedColumns.length === 0) {\n            return [];\n        }\n\n        for (const data of source) {\n            selectedColumns.forEach((col) => {\n                const key = headers ? col.header || col.field : col.field;\n                record[key] = formatters && col.formatter ? col.formatter(data[col.field], data)\n                    : data[col.field];\n            });\n\n            if (Object.keys(record).length) {\n                selectedData.push(record);\n            }\n            record = {};\n        }\n        return selectedData;\n    }\n\n    /**\n     * @hidden\n     */\n    protected initPinning() {\n        this.calculateGridWidth();\n        this.resetCaches();\n        this.handleColumnPinningForGroups();\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden\n     */\n    protected scrollTo(row: any | number, column: any | number, inCollection = this._filteredSortedUnpinnedData): void {\n        let delayScrolling = false;\n\n        if (this.paginator && typeof (row) !== 'number') {\n            const rowIndex = inCollection.indexOf(row);\n            const page = Math.floor(rowIndex / this.perPage);\n\n            if (this.page !== page) {\n                delayScrolling = true;\n                this.page = page;\n            }\n        }\n        let targetRowIndex = (typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(row));\n        const virtRec = this.verticalScrollContainer.igxForOf[targetRowIndex];\n        const col = typeof (column) === 'number' ? this.visibleColumns[column] : column;\n        const rowSpan = this.isRecordMerged(virtRec) ? virtRec?.cellMergeMeta.get(col)?.rowSpan : 1;\n        if (rowSpan > 1) {\n            targetRowIndex += Math.floor(rowSpan / 2);\n        }\n        if (delayScrolling) {\n            this.verticalScrollContainer.dataChanged.pipe(first(), takeUntil(this.destroy$)).subscribe(() => {\n                this.scrollDirective(this.verticalScrollContainer,\n                    targetRowIndex);\n            });\n        } else {\n            this.scrollDirective(this.verticalScrollContainer,\n                targetRowIndex);\n        }\n\n        this.scrollToHorizontally(column);\n    }\n\n    /**\n     * @hidden\n     */\n    protected scrollToHorizontally(column: any | number) {\n        let columnIndex = typeof column === 'number' ? column : this.getColumnByName(column).visibleIndex;\n        const scrollRow = this.rowList.find(r => !!r.virtDirRow);\n        const virtDir = scrollRow ? scrollRow.virtDirRow : null;\n        if (this.pinnedStartColumns.length) {\n            if (columnIndex >= this.pinnedStartColumns.length) {\n                columnIndex -= this.pinnedStartColumns.length;\n                this.scrollDirective(virtDir, columnIndex);\n            }\n        } else {\n            this.scrollDirective(virtDir, columnIndex);\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    protected scrollDirective(directive: IgxGridForOfDirective<any, any[]>, goal: number): void {\n        if (!directive) {\n            return;\n        }\n        directive.scrollTo(goal);\n    }\n\n\n    /**\n     * @hidden\n     */\n    protected getColumnWidthSum(): number {\n        let colSum = 0;\n        const cols = this.hasColumnLayouts ?\n            this.visibleColumns.filter(x => x.columnLayout) : this.visibleColumns.filter(x => !x.columnGroup);\n        cols.forEach((item) => {\n            colSum += parseInt((item.calcWidth || item.defaultWidth), 10) || this.minColumnWidth;\n        });\n        if (!colSum) {\n            return null;\n        }\n        this.cdr.detectChanges();\n        colSum += this.featureColumnsWidth();\n        return colSum;\n    }\n\n    /**\n     * Notify changes, reset cache and populateVisibleIndexes.\n     *\n     * @hidden\n     */\n    private _columnsReordered(column: IgxColumnComponent) {\n        this.notifyChanges();\n        // after reordering is done reset cached column collections.\n        this.resetColumnCollections();\n        column.resetCaches();\n    }\n\n    protected buildDataView(_data: any[]) {\n        this._dataView = this.isRowPinningToTop ?\n            [...this.pinnedDataView, ...this.unpinnedDataView] :\n            [...this.unpinnedDataView, ...this.pinnedDataView];\n    }\n\n    private _applyWidthHostBinding() {\n        let width = this._width;\n        if (width === null) {\n            let currentWidth = this.calcWidth;\n            if (this.hasVerticalScroll()) {\n                currentWidth += this.scrollSize;\n            }\n            width = currentWidth + 'px';\n            this.resetCaches();\n        }\n        this._hostWidth = width;\n        this.cdr.markForCheck();\n    }\n\n    protected verticalScrollHandler(event) {\n        this.verticalScrollContainer.onScroll(event);\n        this.disableTransitions = true;\n\n        this.zone.onStable.pipe(first()).subscribe(() => {\n            this.verticalScrollContainer.chunkLoad.emit(this.verticalScrollContainer.state);\n            if (this.rowEditable) {\n                this.changeRowEditingOverlayStateOnScroll(this.crudService.rowInEditMode);\n            }\n        });\n        this.disableTransitions = false;\n\n        this.hideOverlays();\n        this.actionStrip?.hide();\n        if (this.actionStrip) {\n            this.actionStrip.context = null;\n        }\n        const args: IGridScrollEventArgs = {\n            direction: 'vertical',\n            event,\n            scrollPosition: this.verticalScrollContainer.scrollPosition\n        };\n        this.gridScroll.emit(args);\n    }\n\n    protected horizontalScrollHandler(event) {\n        const scrollLeft = event.target.scrollLeft;\n        this.headerContainer.onHScroll(scrollLeft);\n        this._horizontalForOfs.forEach(vfor => vfor.onHScroll(scrollLeft));\n        this.cdr.markForCheck();\n\n        this.zone.run(() => {\n            this.zone.onStable.pipe(first()).subscribe(() => {\n                this.parentVirtDir.chunkLoad.emit(this.headerContainer.state);\n                requestAnimationFrame(() => {\n                    this.autoSizeColumnsInView();\n                });\n            });\n        });\n        if (!this.navigation.isColumnFullyVisible(this.navigation.lastColumnIndex)) {\n            this.hideOverlays();\n        }\n        const args: IGridScrollEventArgs = { direction: 'horizontal', event, scrollPosition: this.headerContainer.scrollPosition };\n        this.gridScroll.emit(args);\n    }\n\n    protected get renderedActualRowHeight() {\n        return this.rowHeight + this._borderSize;\n    }\n\n    private executeCallback(rowIndex, visibleColIndex = -1, cb: (args: any) => void = null) {\n        if (!cb) {\n            return;\n        }\n        let row = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).find(r => r.index === rowIndex);\n        if (!row) {\n            if ((this as any).totalItemCount) {\n                this.verticalScrollContainer.dataChanged.pipe(first(), takeUntil(this.destroy$)).subscribe(() => {\n                    this.cdr.detectChanges();\n                    row = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).find(r => r.index === rowIndex);\n                    const cbArgs = this.getNavigationArguments(row, visibleColIndex);\n                    cb(cbArgs);\n                });\n            }\n            const dataViewIndex = this._getDataViewIndex(rowIndex);\n            if (this.dataView[dataViewIndex].detailsData) {\n                this.navigation.setActiveNode({ row: rowIndex });\n                this.cdr.detectChanges();\n            }\n\n            return;\n        }\n        const args = this.getNavigationArguments(row, visibleColIndex);\n        cb(args);\n    }\n\n    private getNavigationArguments(row, visibleColIndex) {\n        let targetType: GridKeydownTargetType; let target;\n        switch (row.nativeElement.tagName.toLowerCase()) {\n            case 'igx-grid-groupby-row':\n                targetType = 'groupRow';\n                target = row;\n                break;\n            case 'igx-grid-summary-row':\n                targetType = 'summaryCell';\n                target = visibleColIndex !== -1 ?\n                    row.summaryCells.find(c => c.visibleColumnIndex === visibleColIndex) : row.summaryCells.first;\n                break;\n            case 'igx-child-grid-row':\n                targetType = 'hierarchicalRow';\n                target = row;\n                break;\n            default:\n                targetType = 'dataCell';\n                target = visibleColIndex !== -1 ? row.cells.find(c => c.visibleColumnIndex === visibleColIndex) : row.cells.first;\n                break;\n        }\n        return { targetType, target };\n    }\n\n    private getNextDataRowIndex(currentRowIndex, previous = false): number {\n        const resolvedIndex = this._getDataViewIndex(currentRowIndex);\n        if (currentRowIndex < 0 || (currentRowIndex === 0 && previous) || (resolvedIndex >= this.dataView.length - 1 && !previous)) {\n            return currentRowIndex;\n        }\n        // find next/prev record that is editable.\n        const nextRowIndex = previous ? this.findPrevEditableDataRowIndex(currentRowIndex) :\n            this.dataView.findIndex((_rec, index) =>\n                index > resolvedIndex && this.isEditableDataRecordAtIndex(index));\n        const nextDataIndex = this.getDataIndex(nextRowIndex);\n        return nextDataIndex !== -1 ? nextDataIndex : currentRowIndex;\n    }\n\n    /**\n     * Returns the previous editable row index or -1 if no such row is found.\n     *\n     * @param currentIndex The index of the current editable record.\n     */\n    private findPrevEditableDataRowIndex(currentIndex): number {\n        let i = this.dataView.length;\n        const resolvedIndex = this._getDataViewIndex(currentIndex);\n        while (i--) {\n            if (i < resolvedIndex && this.isEditableDataRecordAtIndex(i)) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n\n    /**\n     * Returns if the record at the specified data view index is a an editable data record.\n     * If record is group rec, summary rec, child rec, ghost rec. etc. it is not editable.\n     *\n     * @param dataViewIndex The index of that record in the data view.\n     *\n     */\n    // TODO: Consider moving it into CRUD\n    private isEditableDataRecordAtIndex(dataViewIndex) {\n        const rec = this.dataView[dataViewIndex];\n        return !rec.expression && !rec.summaries && !rec.childGridsData && !rec.detailsData &&\n            !this.isGhostRecordAtIndex(dataViewIndex);\n    }\n\n    /**\n     * Returns if the record at the specified data view index is a ghost.\n     * If record is pinned but is not in pinned area then it is a ghost record.\n     *\n     * @param dataViewIndex The index of that record in the data view.\n     * @hidden\n     * @internal\n     */\n    public isGhostRecordAtIndex(dataViewIndex) {\n        const isPinned = this.isRecordPinned(this.dataView[dataViewIndex]);\n        const isInPinnedArea = this.isRecordPinnedByViewIndex(dataViewIndex);\n        return isPinned && !isInPinnedArea;\n    }\n\n    private isValidPosition(rowIndex, colIndex): boolean {\n        const rows = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).length;\n        const cols = this._columns.filter(col => !col.columnGroup && col.visibleIndex >= 0 && !col.hidden).length;\n        if (rows < 1 || cols < 1) {\n            return false;\n        }\n        if (rowIndex > -1 && rowIndex < this.dataView.length &&\n            colIndex > - 1 && colIndex <= Math.max(...this.visibleColumns.map(c => c.visibleIndex))) {\n            return true;\n        }\n        return false;\n    }\n\n    private find(text: string, increment: number, caseSensitive?: boolean, exactMatch?: boolean, scroll?: boolean, endEdit = true) {\n        if (!this.rowList) {\n            return 0;\n        }\n\n        if (endEdit) {\n            this.crudService.endEdit(false);\n        }\n\n        if (!text) {\n            this.clearSearch();\n            return 0;\n        }\n\n        const caseSensitiveResolved = caseSensitive ? true : false;\n        const exactMatchResolved = exactMatch ? true : false;\n        let rebuildCache = false;\n\n        if (this._lastSearchInfo.searchText !== text ||\n            this._lastSearchInfo.caseSensitive !== caseSensitiveResolved ||\n            this._lastSearchInfo.exactMatch !== exactMatchResolved) {\n            this._lastSearchInfo = {\n                searchText: text,\n                activeMatchIndex: 0,\n                caseSensitive: caseSensitiveResolved,\n                exactMatch: exactMatchResolved,\n                matchInfoCache: [],\n                matchCount: 0,\n                content: ''\n            };\n\n            rebuildCache = true;\n        } else {\n            this._lastSearchInfo.activeMatchIndex += increment;\n        }\n\n        if (rebuildCache) {\n            this.rowList.forEach((row) => {\n                if (row.cells) {\n                    row.cells.forEach((c: IgxGridCellComponent) => {\n                        c.highlightText(text, caseSensitiveResolved, exactMatchResolved);\n                    });\n                }\n            });\n\n            this.rebuildMatchCache();\n        }\n\n        if (this._lastSearchInfo.activeMatchIndex >= this._lastSearchInfo.matchCount) {\n            this._lastSearchInfo.activeMatchIndex = 0;\n        } else if (this._lastSearchInfo.activeMatchIndex < 0) {\n            this._lastSearchInfo.activeMatchIndex = this._lastSearchInfo.matchCount - 1;\n        }\n\n        if (this._lastSearchInfo.matchCount > 0) {\n            const matchInfo = this._lastSearchInfo.matchInfoCache[this._lastSearchInfo.activeMatchIndex];\n            this._lastSearchInfo = { ...this._lastSearchInfo };\n\n            if (scroll !== false) {\n                this.scrollTo(matchInfo.row, matchInfo.column);\n            }\n\n            this.textHighlightService.setActiveHighlight(this.id, {\n                column: matchInfo.column,\n                row: matchInfo.row,\n                index: matchInfo.index,\n                metadata: matchInfo.metadata,\n            });\n\n        } else {\n            this.textHighlightService.clearActiveHighlight(this.id);\n        }\n\n        return this._lastSearchInfo.matchCount;\n    }\n\n    private rebuildMatchCache() {\n        this._lastSearchInfo.matchInfoCache = [];\n\n        const caseSensitive = this._lastSearchInfo.caseSensitive;\n        const exactMatch = this._lastSearchInfo.exactMatch;\n        const searchText = caseSensitive ? this._lastSearchInfo.searchText : this._lastSearchInfo.searchText.toLowerCase();\n        let data = this.filteredSortedData;\n        if (this.hasCellsToMerge) {\n            let indexes = this.activeRowIndexes;\n            if (this.page > 0) {\n                indexes = indexes.map(x => this.perPage * this.page + x);\n            }\n\n            data = DataUtil.merge(cloneArray(this.filteredSortedData), this.columnsToMerge, this.mergeStrategy, indexes, this);\n        }\n        const columnItems = this.visibleColumns.filter((c) => !c.columnGroup).sort((c1, c2) => c1.visibleIndex - c2.visibleIndex);\n        const columnsPathParts = columnItems.map(col => columnFieldPath(col.field));\n\n        data.forEach((dataRow, rowIndex) => {\n            const currentRowData = this.isRecordMerged(dataRow) ? dataRow.recordRef : dataRow;\n            columnItems.forEach((c, cid) => {\n                const pipeArgs = this.getColumnByName(c.field).pipeArgs;\n                const value = c.formatter ? c.formatter(resolveNestedPath(currentRowData, columnsPathParts[cid]), currentRowData) :\n                    c.dataType === 'number' ? this.i18nFormatter.formatNumber(resolveNestedPath(currentRowData, columnsPathParts[cid]) as number, this.locale, pipeArgs.digitsInfo) :\n                        c.dataType === 'date'\n                            ? this.i18nFormatter.formatDate(resolveNestedPath(currentRowData, columnsPathParts[cid]) as string, pipeArgs.format, this.locale, pipeArgs.timezone)\n                            : resolveNestedPath(currentRowData, columnsPathParts[cid]);\n                if (value !== undefined && value !== null && c.searchable) {\n                    let searchValue = caseSensitive ? String(value) : String(value).toLowerCase();\n                    const isMergePlaceHolder = this.isRecordMerged(dataRow) ? !!dataRow?.cellMergeMeta.get(c.field)?.root : false;\n                    if (exactMatch) {\n                        if (searchValue === searchText && !isMergePlaceHolder) {\n                            const mic: IMatchInfoCache = {\n                                row: currentRowData,\n                                column: c.field,\n                                index: 0,\n                                metadata: new Map<string, boolean>([['pinned', this.isRecordPinnedByIndex(rowIndex)]])\n                            };\n\n                            this._lastSearchInfo.matchInfoCache.push(mic);\n                        }\n                    } else {\n                        let occurrenceIndex = 0;\n                        let searchIndex = searchValue.indexOf(searchText);\n\n                        while (searchIndex !== -1 && !isMergePlaceHolder) {\n                            const mic: IMatchInfoCache = {\n                                row: currentRowData,\n                                column: c.field,\n                                index: occurrenceIndex++,\n                                metadata: new Map<string, boolean>([['pinned', this.isRecordPinnedByIndex(rowIndex)]])\n                            };\n\n                            this._lastSearchInfo.matchInfoCache.push(mic);\n\n                            searchValue = searchValue.substring(searchIndex + searchText.length);\n                            searchIndex = searchValue.indexOf(searchText);\n                        }\n                    }\n                }\n            });\n        });\n\n        this._lastSearchInfo.matchCount = this._lastSearchInfo.matchInfoCache.length;\n    }\n\n    protected updateDefaultRowHeight() {\n        if (this.dataRowList.length > 0 && this.dataRowList.first.cells && this.dataRowList.first.cells.length > 0) {\n            const targetCell = this.dataRowList.first.cells.toArray().find((x: IgxGridCellComponent) => !x.isMerged);\n            if (!targetCell) {\n                this._shouldRecalcRowHeight = true;\n                return;\n            }\n            const height = parseFloat(this.document.defaultView.getComputedStyle(targetCell.nativeElement)?.getPropertyValue('height'));\n            if (height) {\n                this._defaultRowHeight = height;\n            } else {\n                this._shouldRecalcRowHeight = true;\n            }\n\n            const rowStyles = this.document.defaultView.getComputedStyle(this.dataRowList.first.nativeElement);\n\n            const border = rowStyles.borderBottomWidth ? parseFloat(rowStyles.borderBottomWidth) : 1;\n            if (border) {\n                this._borderSize = border;\n            }\n        }\n    }\n\n    // TODO: About to Move to CRUD\n    private configureRowEditingOverlay(rowID: any, useOuter = false) {\n        let settings = this.rowEditSettings;\n        const overlay = this.overlayService.getOverlayById(this.rowEditingOverlay.overlayId);\n        if (overlay) {\n            settings = overlay.settings;\n        }\n        settings.outlet = useOuter ? this.parentRowOutletDirective : this.rowOutletDirective;\n        this.rowEditPositioningStrategy.settings.container = this.tbody.nativeElement;\n        const pinned = this._pinnedRecordIDs.indexOf(rowID) !== -1;\n        const targetRow = !pinned ?\n            this.gridAPI.get_row_by_key(rowID) as IgxRowDirective\n            : this.pinnedRows.find(x => x.key === rowID) as IgxRowDirective;\n        if (!targetRow) {\n            return;\n        }\n        settings.target = targetRow.element.nativeElement;\n        this.toggleRowEditingOverlay(true);\n    }\n\n    private handleColumnPinningForGroups(): void {\n        // When a column is a group or is inside a group, pin all related.\n        const pinnedColumns = [];\n        const unpinnedColumns = [];\n\n        this._pinnedColumns.forEach(col => {\n            if (col.parent) {\n                col.parent.pinned = true;\n            }\n            if (col.columnGroup) {\n                col.children.forEach(child => child.pinned = true);\n            }\n        });\n\n        // Make sure we don't exceed unpinned area min width and get pinned and unpinned col collections.\n        // We take into account top level columns (top level groups and non groups).\n        // If top level is unpinned the pinning handles all children to be unpinned as well.\n        for (const column of this._columns) {\n            if (column.pinned && !column.parent) {\n                pinnedColumns.push(column);\n            } else if (column.pinned && column.parent) {\n                if (column.topLevelParent.pinned) {\n                    pinnedColumns.push(column);\n                } else {\n                    column.pinned = false;\n                    unpinnedColumns.push(column);\n                }\n            } else {\n                unpinnedColumns.push(column);\n            }\n        }\n        // Assign the applicable collections.\n        this._pinnedColumns = pinnedColumns;\n        this._pinnedStartColumns = pinnedColumns.filter((c) => c.pinned && c.pinningPosition === ColumnPinningPosition.Start);\n        this._pinnedEndColumns = pinnedColumns.filter((c) => c.pinned && c.pinningPosition === ColumnPinningPosition.End);\n        this._unpinnedColumns = unpinnedColumns;\n    }\n\n    protected shouldRecreateColumns(oldData: any[] | null | undefined, newData: any[] | null | undefined): boolean {\n        if (!oldData || !oldData.length) return true;\n        if (!newData || !newData.length) return false;\n        return Object.keys(oldData[0]).join() !== Object.keys(newData[0]).join();\n    }\n\n    /**\n     * Clears the current navigation service active node\n     */\n    private clearActiveNode() {\n        this.navigation.lastActiveNode = this.navigation.activeNode;\n        this.navigation.activeNode = {} as IActiveNode;\n        this._activeRowIndexes = null;\n        this.notifyChanges();\n    }\n\n    private getRecreatedTree(value: IFilteringExpressionsTree): IFilteringExpressionsTree {\n        if (this._hGridSchema) {\n            return recreateTree(value, this._hGridSchema, true) as IFilteringExpressionsTree;\n        } else {\n            return recreateTreeFromFields(value, this._columns) as IFilteringExpressionsTree;\n        }\n    }\n\n    private _calculateRowCount(): void {\n        if (this.verticalScrollContainer?.isRemote) {\n            this._rowCount = this.verticalScrollContainer.totalItemCount ?? 0;\n        } else if (this.paginator) {\n            this._rowCount = this.totalRecords ?? 0;\n        } else {\n            this._rowCount = this.verticalScrollContainer?.igxForOf?.length ?? 0;\n        }\n        this._rowCount += 1; // include header row\n    }\n\n    private updateMergedData() {\n        // recalc merged data\n        if (this.columnsToMerge.length > 0) {\n            const startIndex = this.verticalScrollContainer.state.startIndex;\n            const prevDataView = this.verticalScrollContainer.igxForOf?.slice(0, startIndex);\n            const data = [];\n            for (let index = 0; index < startIndex; index++) {\n                const rec = prevDataView[index];\n                if (rec.cellMergeMeta &&\n                    // index + maxRowSpan is within view\n                    startIndex < (index + Math.max(...rec.cellMergeMeta.values().toArray().map(x => x.rowSpan)))) {\n                    const visibleIndex = this.isRowPinningToTop ? index + this.pinnedRecordsCount : index;\n                    data.push({ record: rec, index: visibleIndex, dataIndex: index });\n                }\n            }\n            this._mergedDataInView = data;\n            this.notifyChanges();\n        }\n    }\n\n    private initLocale() {\n        this._defaultLocale = getCurrentI18n();\n        this._locale = this.localeId !== DEFAULT_LOCALE ? this.localeId : this._locale;\n        onResourceChangeHandle(this.destroy$, this.onResourceChange, this);\n    }\n\n    private onResourceChange(args: CustomEvent<IResourceChangeEventArgs>) {\n        this._defaultLocale = args.detail.newLocale;\n        if (!this._locale) {\n            this._defaultResourceStrings = getCurrentResourceStrings(GridResourceStringsEN, false);\n        }\n        // Reset currency position because of new locale.\n        this._currencyPositionLeft = undefined;\n        if (!this._init) {\n            this.pipeTrigger++;\n            this.notifyChanges(true);\n        }\n    }\n}\n","import {\n    Component, ChangeDetectionStrategy, Input, Output, EventEmitter, ContentChild, ViewChildren,\n    QueryList, ViewChild, TemplateRef, DoCheck, AfterContentInit, HostBinding,\n    OnInit, AfterViewInit, ContentChildren, CUSTOM_ELEMENTS_SCHEMA, booleanAttribute\n} from '@angular/core';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\nimport {\n    CellType,\n    FilterMode,\n    GridType,\n    IGX_GRID_BASE,\n    IGX_GRID_SERVICE_BASE,\n    IgxColumnComponent,\n    IgxColumnMovingDropDirective,\n    IgxColumnResizingService,\n    IgxFilteringService,\n    IgxGridAddRowPipe,\n    IgxGridBodyDirective,\n    IgxGridCell,\n    IgxGridColumnResizerComponent,\n    IgxGridCRUDService,\n    IgxGridDetailTemplateDirective,\n    IgxGridDragSelectDirective,\n    IgxGridHeaderRowComponent,\n    IgxGridMasterDetailContext,\n    IgxGridMRLNavigationService,\n    IgxGridNavigationService,\n    IgxGridRow,\n    IgxGridRowClassesPipe,\n    IgxGridRowPinningPipe,\n    IgxGridRowStylesPipe,\n    IgxGridSelectionService,\n    IgxGridSummaryService,\n    IgxGridTransactionPipe,\n    IgxGridValidationService,\n    IgxGroupByRow,\n    IgxGroupByRowSelectorDirective,\n    IgxGroupByRowSelectorTemplateContext,\n    IgxGroupByRowTemplateContext,\n    IgxGroupByRowTemplateDirective,\n    IgxHasVisibleColumnsPipe,\n    IgxRowEditTabStopDirective,\n    IgxStringReplacePipe,\n    IgxSummaryDataPipe,\n    IgxSummaryRow,\n    IgxSummaryRowComponent,\n    RowType\n} from 'igniteui-angular/grids/core';\nimport { IgxGridAPIService } from './grid-api.service';\nimport { IgxGridGroupByRowComponent } from './groupby-row.component';\nimport { IgxGridGroupByAreaComponent } from './grouping/grid-group-by-area.component';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { cloneArray, IBaseEventArgs, IGridGroupingStrategy, IGroupByExpandState, IGroupByRecord, IGroupingExpression, IgxOverlayOutletDirective, ISortingExpression } from 'igniteui-angular/core';\nimport { IgxGridDetailsPipe } from './grid.details.pipe';\nimport { IgxGridSummaryPipe } from './grid.summary.pipe';\nimport { IgxGridGroupingPipe, IgxGridPagingPipe, IgxGridSortingPipe, IgxGridFilteringPipe, IgxGridCellMergePipe, IgxGridUnmergeActivePipe } from './grid.pipes';\nimport { IgxGridRowComponent } from './grid-row.component';\nimport { Observable, Subject } from 'rxjs';\nimport { IForOfState, IgxButtonDirective, IgxForOfScrollSyncService, IgxForOfSyncService, IgxGridForOfDirective, IgxRippleDirective, IgxScrollInertiaDirective, IgxTemplateOutletDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { IgxSnackbarComponent } from 'igniteui-angular/snackbar';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxGridBaseDirective } from './grid-base.directive';\n\nlet NEXT_ID = 0;\n\nexport interface IGroupingDoneEventArgs extends IBaseEventArgs {\n    expressions: Array<ISortingExpression> | ISortingExpression;\n    groupedColumns: Array<IgxColumnComponent> | IgxColumnComponent;\n    ungroupedColumns: Array<IgxColumnComponent> | IgxColumnComponent;\n}\n\n/* blazorAdditionalDependency: Column */\n/* blazorAdditionalDependency: ColumnGroup */\n/* blazorAdditionalDependency: ColumnLayout */\n/* blazorAdditionalDependency: GridToolbar */\n/* blazorAdditionalDependency: GridToolbarActions */\n/* blazorAdditionalDependency: GridToolbarTitle */\n/* blazorAdditionalDependency: GridToolbarAdvancedFiltering */\n/* blazorAdditionalDependency: GridToolbarExporter */\n/* blazorAdditionalDependency: GridToolbarHiding */\n/* blazorAdditionalDependency: GridToolbarPinning */\n/* blazorAdditionalDependency: ActionStrip */\n/* blazorAdditionalDependency: GridActionsBaseDirective */\n/* blazorAdditionalDependency: GridEditingActions */\n/* blazorAdditionalDependency: GridPinningActions */\n/* blazorIndirectRender */\n/**\n * Grid provides a way to present and manipulate tabular data.\n *\n * @igxModule IgxGridModule\n * @igxGroup Grids & Lists\n * @igxKeywords grid, table\n * @igxTheme igx-grid-theme\n * @remarks\n * The Ignite UI Grid is used for presenting and manipulating tabular data in the simplest way possible.  Once data\n * has been bound, it can be manipulated through filtering, sorting & editing operations.\n * @example\n * ```html\n * <igx-grid [data]=\"employeeData\" [autoGenerate]=\"false\">\n *   <igx-column field=\"first\" header=\"First Name\"></igx-column>\n *   <igx-column field=\"last\" header=\"Last Name\"></igx-column>\n *   <igx-column field=\"role\" header=\"Role\"></igx-column>\n * </igx-grid>\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    preserveWhitespaces: false,\n    providers: [\n        IgxGridCRUDService,\n        IgxGridNavigationService,\n        IgxGridSummaryService,\n        IgxGridSelectionService,\n        IgxGridValidationService,\n        { provide: IGX_GRID_SERVICE_BASE, useClass: IgxGridAPIService },\n        { provide: IGX_GRID_BASE, useExisting: IgxGridComponent },\n        IgxFilteringService,\n        IgxColumnResizingService,\n        IgxForOfSyncService,\n        IgxForOfScrollSyncService,\n    ],\n    selector: 'igx-grid',\n    templateUrl: './grid.component.html',\n    imports: [\n        NgClass,\n        NgStyle,\n        NgTemplateOutlet,\n        IgxGridGroupByAreaComponent,\n        IgxGridHeaderRowComponent,\n        IgxGridBodyDirective,\n        IgxGridDragSelectDirective,\n        IgxColumnMovingDropDirective,\n        IgxGridForOfDirective,\n        IgxTemplateOutletDirective,\n        IgxGridRowComponent,\n        IgxGridGroupByRowComponent,\n        IgxSummaryRowComponent,\n        IgxOverlayOutletDirective,\n        IgxToggleDirective,\n        IgxCircularProgressBarComponent,\n        IgxSnackbarComponent,\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxIconComponent,\n        IgxRowEditTabStopDirective,\n        IgxGridColumnResizerComponent,\n        IgxGridTransactionPipe,\n        IgxHasVisibleColumnsPipe,\n        IgxGridRowPinningPipe,\n        IgxGridAddRowPipe,\n        IgxGridRowClassesPipe,\n        IgxGridRowStylesPipe,\n        IgxSummaryDataPipe,\n        IgxGridGroupingPipe,\n        IgxGridPagingPipe,\n        IgxGridSortingPipe,\n        IgxGridFilteringPipe,\n        IgxGridSummaryPipe,\n        IgxGridDetailsPipe,\n        IgxStringReplacePipe,\n        IgxGridCellMergePipe,\n        IgxGridUnmergeActivePipe,\n        IgxScrollInertiaDirective\n    ],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxGridComponent extends IgxGridBaseDirective implements GridType, OnInit, DoCheck, AfterContentInit, AfterViewInit {\n    /**\n     * Emitted when a new chunk of data is loaded from virtualization.\n     *\n     * @example\n     * ```typescript\n     *  <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (dataPreLoad)='handleDataPreloadEvent()'></igx-grid>\n     * ```\n     */\n    @Output()\n    public dataPreLoad = new EventEmitter<IForOfState>();\n\n    /**\n     * Emitted when grouping is performed.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (groupingExpressionsChange)=\"groupingExpressionsChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public groupingExpressionsChange = new EventEmitter<IGroupingExpression[]>();\n\n    /**\n     * Emitted when groups are expanded/collapsed.\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [autoGenerate]=\"true\" (groupingExpansionStateChange)=\"groupingExpansionStateChange($event)\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public groupingExpansionStateChange = new EventEmitter<IGroupByExpandState[]>();\n\n    /**\n     * Emitted when columns are grouped/ungrouped.\n     *\n     * @remarks\n     * The `groupingDone` event would be raised only once if several columns get grouped at once by calling\n     * the `groupBy()` or `clearGrouping()` API methods and passing an array as an argument.\n     * The event arguments provide the `expressions`, `groupedColumns` and `ungroupedColumns` properties, which contain\n     * the `ISortingExpression` and the `IgxColumnComponent` related to the grouping/ungrouping operation.\n     * Please note that `groupedColumns` and `ungroupedColumns` show only the **newly** changed columns (affected by the **last**\n     * grouping/ungrouping operation), not all columns which are currently grouped/ungrouped.\n     * columns.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" (groupingDone)=\"groupingDone($event)\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Output()\n    public groupingDone = new EventEmitter<IGroupingDoneEventArgs>();\n\n    /**\n     * Gets/Sets whether created groups are rendered expanded or collapsed.\n     *\n     * @remarks\n     * The default rendered state is expanded.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [groupsExpanded]=\"false\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public groupsExpanded = true;\n\n    /**\n     * Gets/Sets the template that will be rendered as a GroupBy drop area.\n     *\n     * @remarks\n     * The grid needs to have at least one groupable column in order the GroupBy area to be displayed.\n     * @example\n     * ```html\n     * <igx-grid [dropAreaTemplate]=\"dropAreaRef\">\n     * </igx-grid>\n     * <ng-template #myDropArea>\n     *      <span> Custom drop area! </span>\n     * </ng-template>\n     * ```\n     */\n    @Input()\n    public dropAreaTemplate: TemplateRef<void>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxGridDetailTemplateDirective, { read: TemplateRef })\n    public detailTemplateDirective: TemplateRef<IgxGridMasterDetailContext>;\n\n\n    /**\n     * Returns a reference to the master-detail template.\n     * ```typescript\n     * let detailTemplate = this.grid.detailTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input('detailTemplate')\n    public get detailTemplate(): TemplateRef<IgxGridMasterDetailContext> {\n        return this._detailTemplate;\n    }\n    /**\n     * Sets the master-detail template.\n     * ```html\n     * <ng-template #detailTemplate igxGridDetail let-dataItem>\n     *    <div>\n     *       <div><span class='categoryStyle'>City:</span> {{dataItem.City}}</div>\n     *       <div><span class='categoryStyle'>Address:</span> {{dataItem.Address}}</div>\n     *    </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'detailTemplate'\", {read: TemplateRef })\n     * public detailTemplate: TemplateRef<any>;\n     * this.grid.detailTemplate = this.detailTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set detailTemplate(template: TemplateRef<IgxGridMasterDetailContext>) {\n        this._detailTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public role = 'grid';\n\n    /**\n     * Gets/Sets the value of the `id` attribute.\n     *\n     * @remarks\n     * If not provided it will be automatically generated.\n     * @example\n     * ```html\n     * <igx-grid [id]=\"'igx-grid-1'\" [data]=\"Data\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-grid-${NEXT_ID++}`;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('record_template', { read: TemplateRef, static: true })\n    protected recordTemplate: TemplateRef<any>;\n\n    @ViewChild('detail_template_container', { read: TemplateRef, static: true })\n    protected detailTemplateContainer: TemplateRef<any>;\n\n    @ViewChild('group_template', { read: TemplateRef, static: true })\n    protected defaultGroupTemplate: TemplateRef<any>;\n\n    @ViewChild('summary_template', { read: TemplateRef, static: true })\n    protected summaryTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxGroupByRowTemplateDirective, { read: IgxGroupByRowTemplateDirective })\n    protected groupTemplate: IgxGroupByRowTemplateDirective;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChildren(IgxGroupByRowSelectorDirective, { read: TemplateRef, descendants: false })\n    protected groupByRowSelectorsTemplates: QueryList<TemplateRef<IgxGroupByRowSelectorTemplateContext>>;\n\n    @ViewChildren(IgxGridGroupByRowComponent, { read: IgxGridGroupByRowComponent })\n    private _groupsRowList: QueryList<IgxGridGroupByRowComponent>;\n\n    private _groupsRecords: IGroupByRecord[] = [];\n    /**\n     * Gets the hierarchical representation of the group by records.\n     *\n     * @example\n     * ```typescript\n     * let groupRecords = this.grid.groupsRecords;\n     * ```\n     */\n    public get groupsRecords(): IGroupByRecord[] {\n        return this._groupsRecords;\n    }\n\n    /**\n     * @hidden @internal\n     * Includes children of collapsed group rows.\n     */\n    public groupingResult: any[];\n\n    /**\n     * @hidden @internal\n     */\n    public groupingMetadata: any[];\n\n    /**\n     * @hidden @internal\n     * Does not include children of collapsed group rows.\n     */\n    public groupingFlatResult: any[];\n    /**\n     * @hidden\n     */\n    protected _groupingExpressions: IGroupingExpression[] = [];\n    /**\n     * @hidden\n     */\n    protected _groupingExpandState: IGroupByExpandState[] = [];\n    /**\n     * @hidden\n     */\n    protected _groupRowTemplate: TemplateRef<IgxGroupByRowTemplateContext>;\n\n    /**\n     * @hidden\n     */\n    protected _groupStrategy: IGridGroupingStrategy;\n    /**\n     * @hidden\n     */\n    protected groupingDiffer;\n    private _data?: any[] | null;\n    private _hideGroupedColumns = false;\n    private _dropAreaMessage = null;\n    private _showGroupArea = true;\n\n    private _groupByRowSelectorTemplate: TemplateRef<IgxGroupByRowSelectorTemplateContext>;\n    private _detailTemplate;\n\n    /**\n     * Gets/Sets the array of data that populates the component.\n     *\n     * @example\n     * ```html\n     * <igx-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    /* treatAsRef */\n    @Input()\n    public get data(): any[] | null {\n        return this._data;\n    }\n\n    public set data(value: any[] | null) {\n        const dataLoaded = (!this._data || this._data.length === 0) && value && value.length > 0;\n        const oldData = this._data;\n        this._data = value || [];\n        this.summaryService.clearSummaryCache();\n        if (!this._init) {\n            this.validation.updateAll(this._data);\n        }\n\n        if (this.autoGenerate && this._data.length > 0 && this.shouldRecreateColumns(oldData, this._data) && this.gridAPI.grid) {\n            this.setupColumns();\n        }\n\n        this.cdr.markForCheck();\n        if (this.isPercentHeight) {\n            this.notifyChanges(true);\n        }\n        // check if any columns have width auto and if so recalculate their auto-size on data loaded.\n        if (dataLoaded && this._columns.some(x => (x as any)._width === 'auto')) {\n            this.recalculateAutoSizes();\n        }\n        this.checkPrimaryKeyField();\n    }\n\n    /**\n     * Gets/Sets the total number of records in the data source.\n     *\n     * @remarks\n     * This property is required for remote grid virtualization to function when it is bound to remote data.\n     * @example\n     * ```typescript\n     * const itemCount = this.grid1.totalItemCount;\n     * this.grid1.totalItemCount = 55;\n     * ```\n     */\n    @Input()\n    public set totalItemCount(count) {\n        this.verticalScrollContainer.totalItemCount = count;\n    }\n\n    public get totalItemCount() {\n        return this.verticalScrollContainer.totalItemCount;\n    }\n\n    private get _gridAPI(): IgxGridAPIService {\n        return this.gridAPI as IgxGridAPIService;\n    }\n\n    private childDetailTemplates: Map<any, any> = new Map();\n\n    /**\n     * @hidden @internal\n     */\n    public groupingPerformedSubject = new Subject<void>();\n\n    /**\n     * @hidden @internal\n     */\n    public groupingPerformed$: Observable<void> = this.groupingPerformedSubject.asObservable();\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * Gets/Sets the group by state.\n     *\n     * @example\n     * ```typescript\n     * let groupByState = this.grid.groupingExpressions;\n     * this.grid.groupingExpressions = [...];\n     * ```\n     * @remarks\n     * Supports two-way data binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(groupingExpressions)]=\"model.groupingExpressions\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get groupingExpressions(): IGroupingExpression[] {\n        return this._groupingExpressions;\n    }\n\n    public set groupingExpressions(value: IGroupingExpression[]) {\n        if (this.groupingExpressions === value) {\n            return;\n        }\n        if (value && value.length > 10) {\n            throw Error('Maximum amount of grouped columns is 10.');\n        }\n        const oldExpressions: IGroupingExpression[] = this.groupingExpressions;\n        const newExpressions: IGroupingExpression[] = value;\n        this._groupingExpressions = cloneArray(value);\n        this.groupingExpressionsChange.emit(this._groupingExpressions);\n        if (this._gridAPI.grid) {\n            /* grouping and sorting are working separate from each other */\n            this._applyGrouping();\n            this.notifyChanges();\n        }\n        if (!this._init && JSON.stringify(oldExpressions, this.stringifyCallback) !== JSON.stringify(newExpressions, this.stringifyCallback) && this._columns) {\n            const groupedCols: IgxColumnComponent[] = [];\n            const ungroupedCols: IgxColumnComponent[] = [];\n            const groupedColsArr = newExpressions.filter((obj) => !oldExpressions.some((obj2) => obj.fieldName === obj2.fieldName));\n            groupedColsArr.forEach((elem) => {\n                groupedCols.push(this.getColumnByName(elem.fieldName));\n            }, this);\n            const ungroupedColsArr = oldExpressions.filter((obj) => !newExpressions.some((obj2) => obj.fieldName === obj2.fieldName));\n            ungroupedColsArr.forEach((elem) => {\n                ungroupedCols.push(this.getColumnByName(elem.fieldName));\n            }, this);\n            this.notifyChanges();\n            const groupingDoneArgs: IGroupingDoneEventArgs = {\n                expressions: newExpressions,\n                groupedColumns: groupedCols,\n                ungroupedColumns: ungroupedCols\n            };\n            this.groupingPerformed$.pipe(take(1)).subscribe(() => {\n                this.groupingDone.emit(groupingDoneArgs);\n            });\n        }\n    }\n\n    /**\n     * Gets/Sets a list of expansion states for group rows.\n     *\n     * @remarks\n     * Includes only states that differ from the default one (controlled through groupsExpanded and states that the user has changed.\n     * Contains the expansion state (expanded: boolean) and the unique identifier for the group row (Array).\n     * Supports two-way data binding.\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [autoGenerate]=\"true\" [(groupingExpansionState)]=\"model.groupingExpansionState\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get groupingExpansionState() {\n        return this._groupingExpandState;\n    }\n\n    public set groupingExpansionState(value) {\n        if (value !== this._groupingExpandState) {\n            this.groupingExpansionStateChange.emit(value);\n        }\n        this._groupingExpandState = value;\n        if (this.gridAPI.grid) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * Gets/Sets whether the grouped columns should be hidden.\n     *\n     * @remarks\n     * The default value is \"false\"\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"localData\" [hideGroupedColumns]=\"true\" [autoGenerate]=\"true\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get hideGroupedColumns() {\n        return this._hideGroupedColumns;\n    }\n\n    public set hideGroupedColumns(value: boolean) {\n        if (value) {\n            this.groupingDiffer = this.differs.find(this.groupingExpressions).create();\n        } else {\n            this.groupingDiffer = null;\n        }\n        if (this._columns && this.groupingExpressions) {\n            this._setGroupColsVisibility(value);\n        }\n\n        this._hideGroupedColumns = value;\n    }\n\n    /**\n     * Gets/Sets the grouping strategy of the grid.\n     *\n     * @remarks The default IgxGrouping extends from IgxSorting and a custom one can be used as a `sortStrategy` as well.\n     *\n     * @example\n     * ```html\n     *  <igx-grid #grid [data]=\"localData\" [groupStrategy]=\"groupStrategy\"></igx-grid>\n     * ```\n     */\n    @Input()\n    public get groupStrategy(): IGridGroupingStrategy {\n        return this._groupStrategy;\n    }\n\n    public set groupStrategy(value: IGridGroupingStrategy) {\n        this._groupStrategy = value;\n    }\n\n    /**\n     * Gets/Sets the message displayed inside the GroupBy drop area where columns can be dragged on.\n     *\n     * @remarks\n     * The grid needs to have at least one groupable column in order the GroupBy area to be displayed.\n     * @example\n     * ```html\n     * <igx-grid dropAreaMessage=\"Drop here to group!\">\n     *      <igx-column [groupable]=\"true\" field=\"ID\"></igx-column>\n     * </igx-grid>\n     * ```\n     */\n    @Input()\n    public set dropAreaMessage(value: string) {\n        this._dropAreaMessage = value;\n        this.notifyChanges();\n    }\n\n    public get dropAreaMessage(): string {\n        return this._dropAreaMessage || this.resourceStrings.igx_grid_groupByArea_message;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get groupsRowList() {\n        const res = new QueryList<any>();\n        if (!this._groupsRowList) {\n            return res;\n        }\n        const rList = this._groupsRowList.filter(item => item.element.nativeElement.parentElement !== null)\n            .sort((item1, item2) => item1.index - item2.index);\n        res.reset(rList);\n        return res;\n    }\n\n    /**\n     * Gets the group by row selector template.\n     */\n    @Input()\n    public get groupByRowSelectorTemplate(): TemplateRef<IgxGroupByRowSelectorTemplateContext> {\n        return this._groupByRowSelectorTemplate || this.groupByRowSelectorsTemplates?.first;\n    }\n\n    /**\n     * Sets the group by row selector template.\n     * ```html\n     * <ng-template #template igxGroupByRowSelector let-groupByRowContext>\n     * {{ groupByRowContext.selectedCount }} / {{ groupByRowContext.totalCount  }}\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'template'\", {read: TemplateRef })\n     * public template: TemplateRef<any>;\n     * this.grid.groupByRowSelectorTemplate = this.template;\n     * ```\n     */\n    public set groupByRowSelectorTemplate(template: TemplateRef<IgxGroupByRowSelectorTemplateContext>) {\n        this._groupByRowSelectorTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getDetailsContext(rowData, index): IgxGridDetailTemplateDirective {\n        return {\n            $implicit: rowData,\n            index\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public detailsViewFocused(container, rowIndex) {\n        this.navigation.setActiveNode({ row: rowIndex });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override get hasDetails() {\n        return !!this.detailTemplate;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getRowTemplate(rowData) {\n        if (this.isGroupByRecord(rowData)) {\n            return this.defaultGroupTemplate;\n        } else if (this.isSummaryRow(rowData)) {\n            return this.summaryTemplate;\n        } else if (this.hasDetails && this.isDetailRecord(rowData)) {\n            return this.detailTemplateContainer;\n        } else {\n            return this.recordTemplate;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override isDetailRecord(record) {\n        return record && record.detailsData !== undefined;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isDetailActive(rowIndex) {\n        return this.navigation.activeNode ? this.navigation.activeNode.row === rowIndex : false;\n    }\n\n    /**\n     * Gets/Sets the template reference for the group row.\n     *\n     * @example\n     * ```\n     * const groupRowTemplate = this.grid.groupRowTemplate;\n     * this.grid.groupRowTemplate = myRowTemplate;\n     * ```\n     */\n    @Input()\n    public get groupRowTemplate(): TemplateRef<IgxGroupByRowTemplateContext> {\n        return this._groupRowTemplate;\n    }\n\n    public set groupRowTemplate(template: TemplateRef<IgxGroupByRowTemplateContext>) {\n        this._groupRowTemplate = template;\n        this.notifyChanges();\n    }\n\n    /** @hidden @internal */\n    public trackChanges: (index, rec) => any;\n\n    /**\n     * Groups by a new `IgxColumnComponent` based on the provided expression, or modifies an existing one.\n     *\n     * @remarks\n     * Also allows for multiple columns to be grouped at once if an array of `ISortingExpression` is passed.\n     * The `groupingDone` event would get raised only **once** if this method gets called multiple times with the same arguments.\n     * @example\n     * ```typescript\n     * this.grid.groupBy({ fieldName: name, dir: SortingDirection.Asc, ignoreCase: false });\n     * this.grid.groupBy([\n     *     { fieldName: name1, dir: SortingDirection.Asc, ignoreCase: false },\n     *     { fieldName: name2, dir: SortingDirection.Desc, ignoreCase: true },\n     *     { fieldName: name3, dir: SortingDirection.Desc, ignoreCase: false }\n     * ]);\n     * ```\n     */\n    public groupBy(expression: IGroupingExpression | Array<IGroupingExpression>): void {\n        if (this.checkIfNoColumnField(expression)) {\n            return;\n        }\n        this.crudService.endEdit(false);\n        if (expression instanceof Array) {\n            this._gridAPI.groupBy_multiple(expression);\n        } else {\n            this._gridAPI.groupBy(expression);\n        }\n        this.notifyChanges(true);\n    }\n\n    /**\n     * Clears grouping for particular column, array of columns or all columns.\n     *\n     * @remarks\n     * Clears all grouping in the grid, if no parameter is passed.\n     * If a parameter is provided, clears grouping for a particular column or an array of columns.\n     * @example\n     * ```typescript\n     * this.grid.clearGrouping(); //clears all grouping\n     * this.grid.clearGrouping(\"ID\"); //ungroups a single column\n     * this.grid.clearGrouping([\"ID\", \"Column1\", \"Column2\"]); //ungroups multiple columns\n     * ```\n     * @param name Name of column or array of column names to be ungrouped.\n     */\n    public clearGrouping(name?: string | Array<string>): void {\n        this._gridAPI.clear_groupby(name);\n        this.calculateGridSizes();\n        this.notifyChanges(true);\n        this.groupingPerformedSubject.next();\n    }\n\n    /**\n     * Returns if a group is expanded or not.\n     *\n     * @param group The group record.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * const expandedGroup = this.grid.isExpandedGroup(this.groupRow);\n     * ```\n     */\n    public override isExpandedGroup(group: IGroupByRecord): boolean {\n        const state: IGroupByExpandState = this._getStateForGroupRow(group);\n        return state ? state.expanded : this.groupsExpanded;\n    }\n\n    /**\n     * Toggles the expansion state of a group.\n     *\n     * @param groupRow The group record to toggle.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * const toggleExpGroup = this.grid.toggleGroup(this.groupRow);\n     * ```\n     */\n    public toggleGroup(groupRow: IGroupByRecord) {\n        this._toggleGroup(groupRow);\n        this.notifyChanges();\n    }\n\n    /**\n     * Select all rows within a group.\n     *\n     * @param groupRow: The group record which rows would be selected.\n     * @param clearCurrentSelection if true clears the current selection\n     * @example\n     * ```typescript\n     * this.grid.selectRowsInGroup(this.groupRow, true);\n     * ```\n     */\n    public selectRowsInGroup(groupRow: IGroupByRecord, clearPrevSelection?: boolean) {\n        this._gridAPI.groupBy_select_all_rows_in_group(groupRow, clearPrevSelection);\n        this.notifyChanges();\n    }\n\n    /**\n     * Deselect all rows within a group.\n     *\n     * @param groupRow The group record which rows would be deselected.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * this.grid.deselectRowsInGroup(this.groupRow);\n     * ```\n     */\n    public deselectRowsInGroup(groupRow: IGroupByRecord) {\n        this._gridAPI.groupBy_deselect_all_rows_in_group(groupRow);\n        this.notifyChanges();\n    }\n\n    /**\n     * Expands the specified group and all of its parent groups.\n     *\n     * @param groupRow The group record to fully expand.\n     * @example\n     * ```typescript\n     * public groupRow: IGroupByRecord;\n     * this.grid.fullyExpandGroup(this.groupRow);\n     * ```\n     */\n    public fullyExpandGroup(groupRow: IGroupByRecord) {\n        this._fullyExpandGroup(groupRow);\n        this.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override isGroupByRecord(record: any): boolean {\n        // return record.records instance of GroupedRecords fails under Webpack\n        return record && record?.records && record.records?.length &&\n            record.expression && record.expression?.fieldName;\n    }\n\n    /**\n     * Toggles the expansion state of all group rows recursively.\n     *\n     * @example\n     * ```typescript\n     * this.grid.toggleAllGroupRows;\n     * ```\n     */\n    public toggleAllGroupRows() {\n        this.groupingExpansionState = [];\n        this.groupsExpanded = !this.groupsExpanded;\n        this.notifyChanges();\n    }\n\n    /** @hidden @internal */\n    public get hasGroupableColumns(): boolean {\n        return this._columns.some((col) => col.groupable && !col.columnGroup);\n    }\n\n    /**\n     * Returns whether the `IgxGridComponent` has group area.\n     *\n     * @example\n     * ```typescript\n     * let isGroupAreaVisible = this.grid.showGroupArea;\n     * ```\n     *\n     * @example\n     * ```html\n     * <igx-grid #grid [data]=\"Data\" [showGroupArea]=\"false\"></igx-grid>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public get showGroupArea(): boolean {\n        return this._showGroupArea;\n    }\n    public set showGroupArea(value: boolean) {\n        this._showGroupArea = value;\n        this.notifyChanges(true);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override isColumnGrouped(fieldName: string): boolean {\n        return this.groupingExpressions.find(exp => exp.fieldName === fieldName) ? true : false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getContext(rowData: any, rowIndex: number, pinned?: boolean): any {\n        if (this.isDetailRecord(rowData)) {\n            const cachedData = this.childDetailTemplates.get(rowData.detailsData);\n            const rowID = this.primaryKey ? rowData.detailsData[this.primaryKey] : rowData.detailsData;\n            if (cachedData) {\n                const view = cachedData.view;\n                const tmlpOutlet = cachedData.owner;\n                return {\n                    $implicit: rowData.detailsData,\n                    moveView: view,\n                    owner: tmlpOutlet,\n                    index: this.dataView.indexOf(rowData),\n                    templateID: {\n                        type: 'detailRow',\n                        id: rowID\n                    }\n                };\n            } else {\n                // child rows contain unique grids, hence should have unique templates\n                return {\n                    $implicit: rowData.detailsData,\n                    templateID: {\n                        type: 'detailRow',\n                        id: rowID\n                    },\n                    index: this.dataView.indexOf(rowData)\n                };\n            }\n        }\n        return {\n            $implicit: this.isGhostRecord(rowData) || this.isRecordMerged(rowData) ? rowData.recordRef : rowData,\n            index: this.getDataViewIndex(rowIndex, pinned),\n            templateID: {\n                type: this.isGroupByRecord(rowData) ? 'groupRow' : this.isSummaryRow(rowData) ? 'summaryRow' : 'dataRow',\n                id: null\n            },\n            disabled: this.isGhostRecord(rowData),\n            metaData: this.isRecordMerged(rowData) ? rowData : null\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public viewCreatedHandler(args) {\n        if (args.context.templateID.type === 'detailRow') {\n            this.childDetailTemplates.set(args.context.$implicit, args);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public viewMovedHandler(args) {\n        if (args.context.templateID.type === 'detailRow') {\n            // view was moved, update owner in cache\n            const key = args.context.$implicit;\n            const cachedData = this.childDetailTemplates.get(key);\n            cachedData.owner = args.owner;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get iconTemplate() {\n        if (this.groupsExpanded) {\n            return this.headerExpandedIndicatorTemplate || this.defaultExpandedTemplate;\n        } else {\n            return this.headerCollapsedIndicatorTemplate || this.defaultCollapsedTemplate;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngAfterContentInit() {\n        super.ngAfterContentInit();\n        if (this.allowFiltering && this.hasColumnLayouts) {\n            this.filterMode = FilterMode.excelStyleFilter;\n        }\n        if (this.groupTemplate) {\n            this._groupRowTemplate = this.groupTemplate.template;\n        }\n\n        if (this.detailTemplateDirective) {\n            this._detailTemplate = this.detailTemplateDirective;\n        }\n\n\n        if (this.hideGroupedColumns && this._columns && this.groupingExpressions) {\n            this._setGroupColsVisibility(this.hideGroupedColumns);\n        }\n        this._setupNavigationService();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngAfterViewInit() {\n        super.ngAfterViewInit();\n        this.verticalScrollContainer.beforeViewDestroyed.pipe(takeUntil(this.destroy$)).subscribe((view) => {\n            const rowData = view.context.$implicit;\n            if (this.isDetailRecord(rowData)) {\n                const cachedData = this.childDetailTemplates.get(rowData.detailsData);\n                if (cachedData) {\n                    const tmlpOutlet = cachedData.owner;\n                    tmlpOutlet._viewContainerRef.detach(0);\n                }\n            }\n        });\n\n        this.sortingExpressionsChange.pipe(takeUntil(this.destroy$)).subscribe((sortingExpressions: ISortingExpression[]) => {\n            if (!this.groupingExpressions || !this.groupingExpressions.length) {\n                return;\n            }\n\n            sortingExpressions.forEach((sortExpr: ISortingExpression) => {\n                const fieldName = sortExpr.fieldName;\n                const groupingExpr = this.groupingExpressions.find(ex => ex.fieldName === fieldName);\n                if (groupingExpr) {\n                    groupingExpr.dir = sortExpr.dir;\n                }\n            });\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngOnInit() {\n        super.ngOnInit();\n        this.trackChanges = (_, rec) => (rec?.detailsData !== undefined ? rec.detailsData : rec);\n        this.groupingDone.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n            this.crudService.endEdit(false);\n            this.summaryService.updateSummaryCache(args);\n            this._headerFeaturesWidth = NaN;\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override ngDoCheck(): void {\n        if (this.groupingDiffer && this._columns && !this.hasColumnLayouts) {\n            const changes = this.groupingDiffer.diff(this.groupingExpressions);\n            if (changes && this._columns.length > 0) {\n                changes.forEachAddedItem((rec) => {\n                    const col = this.getColumnByName(rec.item.fieldName);\n                    if (col) {\n                        col.hidden = true;\n                    }\n                });\n                changes.forEachRemovedItem((rec) => {\n                    const col = this.getColumnByName(rec.item.fieldName);\n                    col.hidden = false;\n                });\n            }\n        }\n        super.ngDoCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dataLoading(event) {\n        this.dataPreLoad.emit(event);\n    }\n\n    /**\n     *\n     * Returns an array of the current cell selection in the form of `[{ column.field: cell.value }, ...]`.\n     *\n     * @remarks\n     * If `formatters` is enabled, the cell value will be formatted by its respective column formatter (if any).\n     * If `headers` is enabled, it will use the column header (if any) instead of the column field.\n     */\n    public override getSelectedData(formatters = false, headers = false): any[] {\n        if (this.groupingExpressions.length || this.hasDetails) {\n            const source = [];\n\n            const process = (record) => {\n                if (record.expression || record.summaries || this.isDetailRecord(record)) {\n                    source.push(null);\n                    return;\n                }\n                source.push(record);\n\n            };\n\n            this.dataView.forEach(process);\n            return this.extractDataFromSelection(source, formatters, headers);\n        } else {\n            return super.getSelectedData(formatters, headers);\n        }\n    }\n\n    /**\n     * Returns the `IgxGridRow` by index.\n     *\n     * @example\n     * ```typescript\n     * const myRow = grid.getRowByIndex(1);\n     * ```\n     * @param index\n     */\n    public getRowByIndex(index: number): RowType {\n        let row: RowType;\n        if (index < 0) {\n            return undefined;\n        }\n        if (this.dataView.length >= this.virtualizationState.startIndex + this.virtualizationState.chunkSize) {\n            row = this.createRow(index);\n        } else {\n            if (!(index < this.virtualizationState.startIndex) && !(index > this.virtualizationState.startIndex + this.virtualizationState.chunkSize)) {\n                row = this.createRow(index);\n            }\n        }\n\n        if (this.pagingMode === 'remote' && this.page !== 0) {\n            row.index = index + this.perPage * this.page;\n        }\n        return row;\n    }\n\n    /**\n     * Returns `IgxGridRow` object by the specified primary key.\n     *\n     * @remarks\n     * Requires that the `primaryKey` property is set.\n     * @example\n     * ```typescript\n     * const myRow = this.grid1.getRowByKey(\"cell5\");\n     * ```\n     * @param keyValue\n     */\n    public getRowByKey(key: any): RowType {\n        const rec = this.filteredSortedData ? this.primaryKey ?\n            this.filteredSortedData.find(record => record[this.primaryKey] === key) :\n            this.filteredSortedData.find(record => record === key) : undefined;\n        const index = this.dataView.indexOf(rec);\n        if (index < 0 || index > this.dataView.length) {\n            return undefined;\n        }\n\n        return new IgxGridRow(this, index, rec);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public allRows(): RowType[] {\n        return this.dataView.map((rec, index) => {\n            this.pagingMode === 'remote' && this.page !== 0 ?\n                index = index + this.perPage * this.page : index = this.dataRowList.first.index + index;\n            return this.createRow(index);\n        });\n    }\n\n    /**\n     * Returns the collection of `IgxGridRow`s for current page.\n     *\n     * @hidden @internal\n     */\n    public dataRows(): RowType[] {\n        return this.allRows().filter(row => row instanceof IgxGridRow);\n    }\n\n    /**\n     * Returns an array of the selected `IgxGridCell`s.\n     *\n     * @example\n     * ```typescript\n     * const selectedCells = this.grid.selectedCells;\n     * ```\n     */\n    public get selectedCells(): CellType[] {\n        return this.dataRows().map((row) => row.cells.filter((cell) => cell.selected))\n            .reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @example\n     * ```typescript\n     * const myCell = this.grid1.getCellByColumn(2, \"UnitPrice\");\n     * ```\n     * @param rowIndex\n     * @param columnField\n     */\n    public getCellByColumn(rowIndex: number, columnField: string): CellType {\n        const row = this.getRowByIndex(rowIndex);\n        const column = this._columns.find((col) => col.field === columnField);\n        if (row && row instanceof IgxGridRow && !row.data?.detailsData && column) {\n            if (this.pagingMode === 'remote' && this.page !== 0) {\n                row.index = rowIndex + this.perPage * this.page;\n            }\n            return new IgxGridCell(this, row.index, column);\n        }\n    }\n\n    /**\n     * Returns a `CellType` object that matches the conditions.\n     *\n     * @remarks\n     * Requires that the primaryKey property is set.\n     * @example\n     * ```typescript\n     * grid.getCellByKey(1, 'index');\n     * ```\n     * @param rowSelector match any rowID\n     * @param columnField\n     */\n    public getCellByKey(rowSelector: any, columnField: string): CellType {\n        const row = this.getRowByKey(rowSelector);\n        const column = this._columns.find((col) => col.field === columnField);\n        if (row && column) {\n            return new IgxGridCell(this, row.index, column);\n        }\n    }\n\n    public override pinRow(rowID: any, index?: number): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.pinRow(rowID, index, row);\n    }\n\n    public override unpinRow(rowID: any): boolean {\n        const row = this.getRowByKey(rowID);\n        return super.unpinRow(rowID, row);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public createRow(index: number, data?: any): RowType {\n        let row: RowType;\n\n        const dataIndex = this._getDataViewIndex(index);\n        const rec = data ?? this.dataView[dataIndex];\n\n        if (rec && this.isGroupByRecord(rec)) {\n            row = new IgxGroupByRow(this, index, rec);\n        }\n        if (rec && this.isSummaryRow(rec)) {\n            row = new IgxSummaryRow(this, index, rec.summaries);\n        }\n        // if found record is a no a groupby or summary row, return IgxGridRow instance\n        if (!row && rec) {\n            row = new IgxGridRow(this, index, rec);\n        }\n\n        return row;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override get defaultTargetBodyHeight(): number {\n        const allItems = this.totalItemCount || this.dataLength;\n        return this.renderedActualRowHeight * Math.min(this._defaultTargetRecordNumber,\n            this.paginator ? Math.min(allItems, this.perPage) : allItems);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override getGroupAreaHeight(): number {\n        return this.groupArea ? this.getComputedHeight(this.groupArea.nativeElement) : 0;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override onColumnsAddedOrRemoved() {\n        // update grouping states\n        this.groupablePipeTrigger++;\n        if (this.groupingExpressions && this.hideGroupedColumns) {\n            this._setGroupColsVisibility(this.hideGroupedColumns);\n        }\n        super.onColumnsAddedOrRemoved();\n    }\n\n    /**\n     * @hidden\n     */\n    protected override onColumnsChanged(change: QueryList<IgxColumnComponent>) {\n        super.onColumnsChanged(change);\n\n        if (this.hasColumnLayouts && !(this.navigation instanceof IgxGridMRLNavigationService)) {\n            this._setupNavigationService();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override scrollTo(row: any | number, column: any | number): void {\n        if (this.groupingExpressions && this.groupingExpressions.length\n            && typeof (row) !== 'number') {\n            const rowIndex = this.groupingResult.indexOf(row);\n            const groupByRecord = this.groupingMetadata[rowIndex];\n            if (groupByRecord) {\n                this._fullyExpandGroup(groupByRecord);\n            }\n        }\n\n        super.scrollTo(row, column, this.groupingFlatResult);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected _getStateForGroupRow(groupRow: IGroupByRecord): IGroupByExpandState {\n        return this._gridAPI.groupBy_get_expanded_for_group(groupRow);\n    }\n\n    /**\n     * @hidden\n     */\n    protected _toggleGroup(groupRow: IGroupByRecord) {\n        this._gridAPI.groupBy_toggle_group(groupRow);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected _fullyExpandGroup(groupRow: IGroupByRecord) {\n        this._gridAPI.groupBy_fully_expand_group(groupRow);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected _applyGrouping() {\n        this._gridAPI.sort_groupBy_multiple(this._groupingExpressions);\n    }\n\n    protected _setupNavigationService() {\n        if (this.hasColumnLayouts) {\n            this.navigation = this.injector.get(IgxGridMRLNavigationService);\n            this.navigation.grid = this;\n        }\n    }\n\n    private checkIfNoColumnField(expression: IGroupingExpression | Array<IGroupingExpression> | any): boolean {\n        if (expression instanceof Array) {\n            for (const singleExpression of expression) {\n                if (!singleExpression.fieldName) {\n                    return true;\n                }\n            }\n            return false;\n        }\n        return !expression.fieldName;\n    }\n\n    private _setGroupColsVisibility(value) {\n        if (this._columns.length > 0 && !this.hasColumnLayouts) {\n            this.groupingExpressions.forEach((expr) => {\n                const col = this.getColumnByName(expr.fieldName);\n                col.hidden = value;\n            });\n        }\n    }\n\n    private stringifyCallback(key: string, val: any) {\n        // Workaround for Blazor, since its wrappers inject this externalObject that cannot serialize.\n        if (key === 'externalObject') {\n            return undefined;\n        }\n        return val;\n    }\n}\n","<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n\n<!-- Group-by area -->\n@if (showGroupArea && (groupingExpressions.length > 0 || hasGroupableColumns)) {\n    <igx-grid-group-by-area #groupArea [style.flex-basis.px]=\"outerWidth\"\n        [grid]=\"this\"\n        [expressions]=\"groupingExpressions\"\n        [sortingExpressions]=\"sortingExpressions\"\n        [dropAreaTemplate]=\"dropAreaTemplate\"\n        [dropAreaMessage]=\"dropAreaMessage\"\n    >\n    </igx-grid-group-by-area>\n}\n\n<!-- Grid table head row area -->\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n    [grid]=\"this\"\n    [hasMRL]=\"hasColumnLayouts\"\n    [width]=\"calcWidth\"\n    [pinnedStartColumnCollection]=\"pinnedStartColumns\"\n    [pinnedEndColumnCollection]=\"pinnedEndColumns\"\n    [unpinnedColumnCollection]=\"unpinnedColumns\"\n    (keydown.meta.c)=\"copyHandler($event)\"\n    (keydown.control.c)=\"copyHandler($event)\"\n    (copy)=\"copyHandler($event)\"\n    (keydown)=\"navigation.headerNavigation($event)\"\n    (scroll)=\"preventHeaderScroll($event)\"\n    (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"rowgroup\">\n    <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? null : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n        (dragStop)=\"selectionService.dragMode = $event\" (scroll)=\"preventContainerScroll($event)\"\n        (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n        [style.height.px]=\"totalHeight\" [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody [attr.aria-activedescendant]=\"activeDescendant\">\n        @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n            <span\n                [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n                class=\"igx-grid__scroll-on-drag-left\"></span>\n        }\n        @if (moving && columnInDrag && pinnedColumns.length > 0) {\n            <span\n                [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n                class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedStartWidth\"></span>\n        }\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n        </ng-container>\n\n        @if (mergedDataInView && mergedDataInView.length > 0) {\n            <div igxScrollInertia\n            [IgxScrollInertiaScrollContainer]=\"this.verticalScrollContainer.dc.instance.scrollContainer\"\n            [IgxScrollInertiaDirection]=\"this.verticalScrollContainer.dc.instance.scrollDirection\">\n                @for (rowData of mergedDataInView; track rowData.record;) {\n                    <igx-grid-row  class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [data]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n                    [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:hasCellsToMerge:false:rowData.record:pipeTrigger\"\n                    [ngStyle]=\"rowStyles | igxGridRowStyles:rowData.record:rowData.index:pipeTrigger\" #row>\n                    </igx-grid-row>\n                }\n            </div>\n        }\n\n        <ng-template #pinnedRecordsTemplate>\n            @if (data\n                | gridTransaction:id:pipeTrigger\n                | visibleColumns:hasVisibleColumns\n                | gridAddRow:true:pipeTrigger\n                | gridRowPinning:id:true:pipeTrigger\n                | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true\n                | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger:true\n                | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n                | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData) {\n                @if (pinnedData.length > 0) {\n                    <div #pinContainer\n                        [ngClass]=\"{\n                            'igx-grid__tr--pinned-bottom':  !isRowPinningToTop,\n                            'igx-grid__tr--pinned-top': isRowPinningToTop\n                        }\"\n                        class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n                        @for (rowData of pinnedData; track (rowData.recordRef || rowData); let rowIndex = $index) {\n                            <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n                            </ng-container>\n                        }\n                    </div>\n                }\n            }\n        </ng-template>\n        <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData\n        | gridTransaction:id:pipeTrigger\n        | visibleColumns:hasVisibleColumns\n        | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n        | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger\n        | gridGroupBy:groupingExpressions:groupingExpansionState:groupStrategy:groupsExpanded:id:groupsRecords:pipeTrigger\n        | gridPaging:!!paginator:page:perPage:pipeTrigger\n        | gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n        | gridDetails:hasDetails:expansionStates:pipeTrigger\n        | gridAddRow:false:pipeTrigger\n        | gridRowPinning:id:false:pipeTrigger\n        | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n        | gridUnmergeActive:columnsToMerge:activeRowIndexes:false:pipeTrigger\"\n            let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n            [igxForContainerSize]=\"calcHeight\"\n            [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n            [igxForTrackBy]=\"trackChanges\"\n            #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\" (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n            <div [attr.data-index]=\"rowIndex\">\n            <ng-template\n                [igxTemplateOutlet]=\"getRowTemplate(rowData)\"\n                [igxTemplateOutletContext]=\"getContext(rowData, rowIndex)\"\n                (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n                (viewCreated)=\"viewCreatedHandler($event)\"\n                (beforeViewDetach)=\"viewDetachHandler($event)\"\n                (viewMoved)=\"viewMovedHandler($event)\">\n            </ng-template>\n            </div>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n        </ng-container>\n        <ng-template #record_template let-rowIndex=\"index\" let-rowData let-disabledRow=\"disabled\" let-metaData=\"metaData\">\n            <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n            </igx-grid-row>\n        </ng-template>\n        <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n            <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [metaData]=\"metaData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n            </igx-grid-row>\n        </ng-template>\n        <ng-template #group_template let-rowIndex=\"index\" let-rowData>\n            <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" [hideGroupRowSelectors]=\"hideRowSelectors\" [rowDraggable]=\"rowDraggable\" #row>\n            </igx-grid-groupby-row>\n        </ng-template>\n        <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n            <igx-grid-summary-row role=\"row\" [gridID]=\"id\" [summaries]=\"rowData.summaries\" [index]=\"rowIndex\"\n                class=\"igx-grid__summaries--body\" #summaryRow>\n            </igx-grid-summary-row>\n        </ng-template>\n        <ng-template #detail_template_container let-rowIndex=\"index\" let-rowData>\n            <div detail=\"true\" id=\"{{id}}_{{rowIndex}}\" (pointerdown)=\"detailsViewFocused(detailsContainer, rowIndex)\" #detailsContainer [attr.data-rowindex]=\"rowIndex\"\n                [ngClass]=\"{\n                'igx-grid__tr-container': true,\n                'igx-grid__tr-container--active': isDetailActive(rowIndex)\n            }\">\n                <div class=\"igx-grid__hierarchical-indent\">\n                    @if (this.groupingExpressions.length > 0) {\n                        <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{groupingExpressions.length}}\"></div>\n                    }\n                    <ng-template\n                        [ngTemplateOutlet]=\"detailTemplate\"\n                        [ngTemplateOutletContext]=\"getDetailsContext(rowData, rowIndex)\">\n                    </ng-template>\n                </div>\n            </div>\n        </ng-template>\n\n        <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n        <div class=\"igx-grid__row-editing-outlet\" igxOverlayOutlet #igxRowEditingOverlayOutlet></div>\n        <igc-trial-watermark></igc-trial-watermark>\n    </div>\n    <div igxToggle #loadingOverlay>\n        @if (shouldOverlayLoading) {\n            <igx-circular-bar [indeterminate]=\"true\">\n            </igx-circular-bar>\n        }\n    </div>\n    @if (moving && columnInDrag) {\n        <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n            id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n    }\n    <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n        <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n        <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n            <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n        </div>\n        <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n    </div>\n\n    <div class=\"igx-grid__addrow-snackbar\">\n        <igx-snackbar #addRowSnackbar [outlet]=\"igxBodyOverlayOutlet\" [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n    </div>\n\n    <div #igxBodyOverlayOutlet=\"overlay-outlet\" igxOverlayOutlet></div>\n    <div class=\"igx-grid__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\n</div>\n\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]=\"summaryRowHeight\" #tfoot>\n    <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\" (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n        @if (hasSummarizedColumns && rootSummariesEnabled) {\n            <igx-grid-summary-row [style.width.px]=\"calcWidth\"  [style.height.px]=\"summaryRowHeight\"\n                [gridID]=\"id\" role=\"row\"\n                [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n                class=\"igx-grid__summaries\" #summaryRow>\n            </igx-grid-summary-row>\n        }\n        <div class=\"igx-grid__tfoot-thumb\" [hidden]=\"!hasVerticalScroll()\" [style.height.px]=\"summaryRowHeight\"\n            [style.width.px]=\"scrollSize\"></div>\n    </div>\n</div>\n\n<div class=\"igx-grid__scroll\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n    <div class=\"igx-grid__scroll-start\" [style.width.px]=\"pinnedStartWidth\" [style.min-width.px]=\"pinnedStartWidth\"></div>\n    <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n        <ng-template igxGridFor [igxGridForOf]=\"EMPTY_DATA\" #scrollContainer>\n        </ng-template>\n    </div>\n    <div class=\"igx-grid__scroll-end\" [style.float]=\"'right'\" [style.width.px]=\"pinnedEndWidth\" [style.min-width.px]=\"pinnedEndWidth\" [hidden]=\"pinnedEndWidth === 0\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" #footer>\n    <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n    <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyFilteredGridMessage}}</span>\n        @if (showAddButton) {\n            <span>\n                <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n            </span>\n        }\n    </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n    <span class=\"igx-grid__tbody-message\" role=\"cell\">\n        <span>{{emptyGridMessage}}</span>\n        @if (showAddButton) {\n            <span>\n                <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n            </span>\n        }\n    </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n    <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n        {{resourceStrings.igx_grid_add_row_label}}\n    </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n    <div class=\"igx-grid__loading\">\n        <igx-circular-bar [indeterminate]=\"true\">\n        </igx-circular-bar>\n    </div>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n    <igx-icon\n        family=\"default\"\n        name=\"unfold_less\"\n        role=\"button\"\n        [ngClass]=\"{\n            'igx-grid__group-expand-btn': true,\n            'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n        }\"\n    >\n    </igx-icon>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n    <igx-icon\n        family=\"default\"\n        name=\"unfold_more\"\n        role=\"button\"\n        [ngClass]=\"{\n            'igx-grid__group-expand-btn': true,\n            'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n        }\"\n    ></igx-icon>\n</ng-template>\n\n@if (rowEditable) {\n    <div igxToggle #rowEditingOverlay>\n        <div [className]=\"bannerClass\">\n            <ng-container\n                *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.endEdit.bind(this) }\">\n            </ng-container>\n        </div>\n    </div>\n}\n\n<ng-template #defaultRowEditText>\n    {{ this.resourceStrings.igx_grid_row_edit_text | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n    <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n    <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n    <div class=\"igx-banner__message\">\n        <span class=\"igx-banner__text\">\n            <ng-container\n                *ngTemplateOutlet=\"this.crudService.row?.isAddRow ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n                context: { $implicit: !this.crudService.row?.isAddRow ? rowChangesCount : null }\">\n            </ng-container>\n        </span>\n    </div>\n    <div class=\"igx-banner__actions\">\n        <div class=\"igx-banner__row\">\n            <ng-container\n                *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n            </ng-container>\n        </div>\n    </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n    <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n    <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n    <div #sink style=\"display: none;\"></div>\n    <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n    <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-column-layout,igc-column-layout,igx-action-strip,igc-action-strip\"></ng-content>\n}\n","import { NgModule } from '@angular/core';\nimport { IgxGridComponent } from './grid.component';\n\n/* Imports that cannot be resolved from IGX_GRID_COMMON_DIRECTIVES spread\n    NOTE: Do not remove! Issue: https://github.com/IgniteUI/igniteui-angular/issues/13310\n*/\nimport {\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxRowExpandedIndicatorDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxGridEmptyTemplateDirective,\n    IgxGridLoadingTemplateDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumnPatternValidatorDirective,\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective,\n    IgxGridDetailTemplateDirective,\n    IgxGroupByRowTemplateDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTabStopDirective,\n    IgxRowEditTextDirective,\n    IgxGridActionButtonComponent,\n    IgxGridPinningActionsComponent,\n    IgxGridActionsBaseDirective,\n    IgxGridEditingActionsComponent\n} from \"igniteui-angular/grids/core\";\nimport {\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n} from 'igniteui-angular/paginator';\n\n/* NOTE: Grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_GRID_DIRECTIVES = [\n    IgxGridComponent,\n    IgxGroupByRowTemplateDirective,\n    IgxGridDetailTemplateDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTextDirective,\n    IgxRowEditTabStopDirective,\n    // IGX_GRID_COMMON_DIRECTIVES:\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxRowExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxGridEmptyTemplateDirective,\n    IgxGridLoadingTemplateDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    // IGX_GRID_ACTIONS\n    IgxGridPinningActionsComponent,\n    IgxGridEditingActionsComponent,\n    IgxGridActionsBaseDirective,\n    IgxGridActionButtonComponent,\n    // IGX_GRID_HEADERS_DIRECTIVES:\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    // IGX_GRID_COLUMN_DIRECTIVES:\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    // IGX_GRID_SELECTION_DIRECTIVES:\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    // IGX_GRID_TOOLBAR_DIRECTIVES:\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective,\n    // IGX_GRID_VALIDATION_DIRECTIVES:\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumnPatternValidatorDirective,\n    // IGX_PAGINATOR_DIRECTIVES:\n    IgxPaginatorComponent,\n    IgxPageNavigationComponent,\n    IgxPageSizeSelectorComponent,\n    IgxPaginatorContentDirective,\n    IgxPaginatorDirective\n] as const;\n\n/**\n * @hidden\n * IMPORTANT: The following is NgModule exported for backwards-compatibility before standalone components\n */\n@NgModule({\n  imports: [\n    ...IGX_GRID_DIRECTIVES\n  ],\n  exports: [\n    ...IGX_GRID_DIRECTIVES\n  ]\n})\nexport class IgxGridModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵSize"],"mappings":"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"}