igniteui-angular 21.0.2 → 21.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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/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/public_api.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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, ViewChild, TemplateRef, OnDestroy, inject } from '@angular/core';\nimport { NgTemplateOutlet, DecimalPipe, DatePipe, getLocaleCurrencyCode, PercentPipe, CurrencyPipe } 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 } 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 DecimalPipe,\n DatePipe,\n PercentPipe,\n CurrencyPipe,\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.groupRow.column.pipeArgs.currencyCode ?\n this.groupRow.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale);\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 { 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 let 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, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe } from '@angular/common';\nimport {\n IgxColumnFormatterPipe,\n IgxGridCellComponent,\n IgxGridCellImageAltPipe,\n IgxStringReplacePipe\n} from 'igniteui-angular/grids/core';\nimport { HammerGesturesManager } 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, IgxInputGroupComponent, IgxInputDirective, IgxFocusDirective, IgxCheckboxComponent, IgxDatePickerComponent, IgxTimePickerComponent, IgxDateTimeEditorDirective, IgxPrefixDirective, IgxSuffixDirective, NgTemplateOutlet, IgxTooltipTargetDirective, IgxTooltipDirective, IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe]\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 { formatNumber, getLocaleNumberFormat, NumberFormatStyle } from '@angular/common';\nimport {\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} from '@angular/core';\nimport {\n areEqualArrays,\n columnFieldPath,\n formatDate,\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} from 'igniteui-angular/core';\nimport { IgcTrialWatermark } from 'igniteui-trial-watermark';\nimport { Subject, pipe, fromEvent, animationFrameScheduler, merge } from 'rxjs';\nimport { takeUntil, first, filter, throttleTime, map, shareReplay, takeWhile } 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 { 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, IgxGridGroupByAreaComponent, 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';\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 public readonly validation = inject(IgxGridValidationService);\n /** @hidden @internal */\n public readonly selectionService = inject(IgxGridSelectionService);\n protected colResizingService = inject(IgxColumnResizingService);\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 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 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\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 }\n\n public get resourceStrings(): IGridResourceStrings {\n return this._resourceStrings;\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;\n }\n\n public set locale(value: string) {\n if (value !== this._locale) {\n this._locale = value;\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 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\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 format = getLocaleNumberFormat(this.locale, NumberFormatStyle.Currency);\n const formatParts = format.split(',');\n const i = formatParts.indexOf(formatParts.find(c => c.includes('¤')));\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 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\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 _resourceStrings = getCurrentResourceStrings(GridResourceStringsEN);\n private _emptyGridMessage = null;\n private _emptyFilteredGridMessage = null;\n private _isLoading = false;\n private _locale: 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 _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.locale = this.locale || this.localeId;\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.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.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 /**\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', this.verticalScrollHandler);\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 + 1;\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, minColumnWidth: 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 computedWidth -= this.featureColumnsWidth();\n\n const minColWidth = minColumnWidth || this.minColumnWidth;\n\n const columnWidth = !Number.isFinite(sumExistingWidths) ?\n Math.max(computedWidth / columnsToSize, minColWidth) :\n Math.max((computedWidth - sumExistingWidths) / columnsToSize, minColWidth);\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 this._columnWidth = this.width !== null ? this.getPossibleColumnWidth() : this.minColumnWidth + 'px';\n }\n this._columns.forEach((column: IgxColumnComponent) => {\n if (this.hasColumnLayouts && parseFloat(this._columnWidth)) {\n const columnWidthCombined = parseFloat(this._columnWidth) * (column.colEnd ? column.colEnd - column.colStart : 1);\n column.defaultWidth = columnWidthCombined + 'px';\n } else {\n // D.K. March 29th, 2021 #9145 Consider min/max width when setting defaultWidth property\n column.defaultWidth = this.getExtremumBasedColWidth(column);\n column.resetCaches();\n }\n });\n this.resetCachedWidths();\n }\n\n /**\n * @hidden\n * @internal\n */\n protected getExtremumBasedColWidth(column: IgxColumnComponent): string {\n let width = this._columnWidth;\n if (width && typeof width !== 'string') {\n width = String(width);\n }\n const minWidth = width.indexOf('%') === -1 ? column.userSetMinWidthPx : column.minWidthPercent;\n const maxWidth = width.indexOf('%') === -1 ? column.maxWidthPx : column.maxWidthPercent;\n if (column.hidden) {\n return width;\n }\n\n if (minWidth > parseFloat(width)) {\n width = String(column.minWidth);\n } else if (maxWidth < parseFloat(width)) {\n width = String(column.maxWidth);\n }\n\n // if no px or % are defined in maxWidth/minWidth consider it px\n if (width.indexOf('%') === -1 && width.indexOf('px') === -1) {\n width += 'px';\n }\n return width;\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 // 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 }\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\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.run(() => {\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 });\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 let border = 1;\n if (this.rowList.toArray().length > 0) {\n const rowStyles = this.document.defaultView.getComputedStyle(this.rowList.first.nativeElement);\n border = rowStyles.borderBottomWidth ? Math.ceil(parseFloat(rowStyles.borderBottomWidth)) : border;\n }\n return this.rowHeight + border;\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 */\n private 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' ? formatNumber(resolveNestedPath(currentRowData, columnsPathParts[cid]) as number, this.locale, pipeArgs.digitsInfo) :\n c.dataType === 'date'\n ? 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 height = parseFloat(this.document.defaultView.getComputedStyle(this.dataRowList.first.cells.first.nativeElement)?.getPropertyValue('height'));\n if (height) {\n this._defaultRowHeight = height;\n } else {\n this._shouldRecalcRowHeight = true;\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","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 IgxGridGroupByAreaComponent,\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 { 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:isRecordMerged(rowData):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 <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 </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:isRecordMerged(metaData):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:isRecordMerged(metaData):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 { 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*/\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\nexport * from './grid.component';\nexport * from './grid-base.directive';\nexport * from './grid.pipes';\nexport * from './grid-row.component';\nexport * from './expandable-cell.component';\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 * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["ɵSize"],"mappings":"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"}
1
+ {"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/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 { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostBinding, HostListener, Input, ViewChild, TemplateRef, OnDestroy, inject } from '@angular/core';\nimport { NgTemplateOutlet, DecimalPipe, DatePipe, getLocaleCurrencyCode, PercentPipe, CurrencyPipe } 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 } 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 DecimalPipe,\n DatePipe,\n PercentPipe,\n CurrencyPipe,\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.groupRow.column.pipeArgs.currencyCode ?\n this.groupRow.column.pipeArgs.currencyCode : getLocaleCurrencyCode(this.grid.locale);\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 { 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 let 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, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe } from '@angular/common';\nimport {\n IgxColumnFormatterPipe,\n IgxGridCellComponent,\n IgxGridCellImageAltPipe,\n IgxStringReplacePipe\n} from 'igniteui-angular/grids/core';\nimport { HammerGesturesManager } 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, IgxInputGroupComponent, IgxInputDirective, IgxFocusDirective, IgxCheckboxComponent, IgxDatePickerComponent, IgxTimePickerComponent, IgxDateTimeEditorDirective, IgxPrefixDirective, IgxSuffixDirective, NgTemplateOutlet, IgxTooltipTargetDirective, IgxTooltipDirective, IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe, DecimalPipe, PercentPipe, CurrencyPipe, DatePipe]\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 { formatNumber, getLocaleNumberFormat, NumberFormatStyle } from '@angular/common';\nimport {\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} from '@angular/core';\nimport {\n areEqualArrays,\n columnFieldPath,\n formatDate,\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} from 'igniteui-angular/core';\nimport { IgcTrialWatermark } from 'igniteui-trial-watermark';\nimport { Subject, pipe, fromEvent, animationFrameScheduler, merge } from 'rxjs';\nimport { takeUntil, first, filter, throttleTime, map, shareReplay, takeWhile } 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 { 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, IgxGridGroupByAreaComponent, 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';\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 public readonly validation = inject(IgxGridValidationService);\n /** @hidden @internal */\n public readonly selectionService = inject(IgxGridSelectionService);\n protected colResizingService = inject(IgxColumnResizingService);\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 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 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\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 }\n\n public get resourceStrings(): IGridResourceStrings {\n return this._resourceStrings;\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;\n }\n\n public set locale(value: string) {\n if (value !== this._locale) {\n this._locale = value;\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 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\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 format = getLocaleNumberFormat(this.locale, NumberFormatStyle.Currency);\n const formatParts = format.split(',');\n const i = formatParts.indexOf(formatParts.find(c => c.includes('¤')));\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 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\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 _resourceStrings = getCurrentResourceStrings(GridResourceStringsEN);\n private _emptyGridMessage = null;\n private _emptyFilteredGridMessage = null;\n private _isLoading = false;\n private _locale: 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 _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.locale = this.locale || this.localeId;\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.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.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 /**\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', this.verticalScrollHandler);\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 + 1;\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, minColumnWidth: 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 computedWidth -= this.featureColumnsWidth();\n\n const minColWidth = minColumnWidth || this.minColumnWidth;\n\n const columnWidth = !Number.isFinite(sumExistingWidths) ?\n Math.max(computedWidth / columnsToSize, minColWidth) :\n Math.max((computedWidth - sumExistingWidths) / columnsToSize, minColWidth);\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 this._columnWidth = this.width !== null ? this.getPossibleColumnWidth() : this.minColumnWidth + 'px';\n }\n this._columns.forEach((column: IgxColumnComponent) => {\n if (this.hasColumnLayouts && parseFloat(this._columnWidth)) {\n const columnWidthCombined = parseFloat(this._columnWidth) * (column.colEnd ? column.colEnd - column.colStart : 1);\n column.defaultWidth = columnWidthCombined + 'px';\n } else {\n // D.K. March 29th, 2021 #9145 Consider min/max width when setting defaultWidth property\n column.defaultWidth = this.getExtremumBasedColWidth(column);\n column.resetCaches();\n }\n });\n this.resetCachedWidths();\n }\n\n /**\n * @hidden\n * @internal\n */\n protected getExtremumBasedColWidth(column: IgxColumnComponent): string {\n let width = this._columnWidth;\n if (width && typeof width !== 'string') {\n width = String(width);\n }\n const minWidth = width.indexOf('%') === -1 ? column.userSetMinWidthPx : column.minWidthPercent;\n const maxWidth = width.indexOf('%') === -1 ? column.maxWidthPx : column.maxWidthPercent;\n if (column.hidden) {\n return width;\n }\n\n if (minWidth > parseFloat(width)) {\n width = String(column.minWidth);\n } else if (maxWidth < parseFloat(width)) {\n width = String(column.maxWidth);\n }\n\n // if no px or % are defined in maxWidth/minWidth consider it px\n if (width.indexOf('%') === -1 && width.indexOf('px') === -1) {\n width += 'px';\n }\n return width;\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 // 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 }\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\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.run(() => {\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 });\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 let border = 1;\n if (this.rowList.toArray().length > 0) {\n const rowStyles = this.document.defaultView.getComputedStyle(this.rowList.first.nativeElement);\n border = rowStyles.borderBottomWidth ? Math.ceil(parseFloat(rowStyles.borderBottomWidth)) : border;\n }\n return this.rowHeight + border;\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 */\n private 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' ? formatNumber(resolveNestedPath(currentRowData, columnsPathParts[cid]) as number, this.locale, pipeArgs.digitsInfo) :\n c.dataType === 'date'\n ? 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 height = parseFloat(this.document.defaultView.getComputedStyle(this.dataRowList.first.cells.first.nativeElement)?.getPropertyValue('height'));\n if (height) {\n this._defaultRowHeight = height;\n } else {\n this._shouldRecalcRowHeight = true;\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","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 IgxGridGroupByAreaComponent,\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 { 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:isRecordMerged(rowData):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 <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 </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:isRecordMerged(metaData):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:isRecordMerged(metaData):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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"}