{"version":3,"file":"igniteui-angular-grids-tree-grid.mjs","sources":["../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-api.service.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.directives.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-selection.service.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.summary.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.filtering.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.pipes.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-cell.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-cell.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-row.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-row.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid-group-by-area.component.ts","../../../projects/igniteui-angular/grids/core/src/grouping/group-by-area.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.component.html","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.grouping.pipe.ts","../../../projects/igniteui-angular/grids/tree-grid/src/tree-grid.module.ts","../../../projects/igniteui-angular/grids/tree-grid/src/igniteui-angular-grids-tree-grid.ts"],"sourcesContent":["import { GridBaseAPIService } from 'igniteui-angular/grids/core';\nimport {\n    HierarchicalTransaction,\n    TransactionType,\n    State,\n    IgxDataRecordSorting,\n    TreeGridFilteringStrategy,\n    cloneArray,\n    DataUtil,\n    FilterUtil,\n    GridColumnDataType,\n    IFilteringExpressionsTree,\n    ISortingExpression,\n    mergeObjects,\n    ColumnType,\n    ITreeGridRecord\n} from 'igniteui-angular/core';\nimport { Injectable } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\n\n@Injectable()\nexport class IgxTreeGridAPIService extends GridBaseAPIService<GridType> {\n\n    public override get_all_data(transactions?: boolean): any[] {\n        const grid = this.grid;\n        let data = grid && grid.flatData ? grid.flatData : [];\n        data = transactions ? grid.dataWithAddedInTransactionRows : data;\n        return data;\n    }\n\n    public override get_summary_data(): any[] | null {\n        const grid = this.grid;\n        const data = grid.processedRootRecords?.filter(row => row.isFilteredOutParent === undefined || row.isFilteredOutParent === false)\n            .map(rec => rec.data);\n        if (data && grid.transactions.enabled) {\n            const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === TransactionType.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        }\n        return data;\n    }\n\n    public override allow_expansion_state_change(rowID, expanded): boolean {\n        const grid = this.grid;\n        const row = grid.records.get(rowID);\n        if (row.expanded === expanded ||\n            ((!row.children || !row.children.length) && (!grid.loadChildrenOnDemand ||\n                (grid.hasChildrenKey && !row.data[grid.hasChildrenKey])))) {\n            return false;\n        }\n        return true;\n    }\n\n    public expand_path_to_record(record: ITreeGridRecord) {\n        const grid = this.grid;\n        const expandedStates = grid.expansionStates;\n\n        while (record.parent) {\n            record = record.parent;\n            const expanded = this.get_row_expansion_state(record);\n\n            if (!expanded) {\n                expandedStates.set(record.key, true);\n            }\n        }\n        grid.expansionStates = expandedStates;\n\n        if (grid.rowEditable) {\n            grid.gridAPI.crudService.endEdit(false);\n        }\n    }\n\n    public override get_row_expansion_state(record: ITreeGridRecord): boolean {\n        const grid = this.grid;\n        const states = grid.expansionStates;\n        const expanded = states.get(record.key);\n\n        if (expanded !== undefined) {\n            return expanded;\n        } else {\n            return record.children && !!record.children.length && record.level < grid.expansionDepth;\n        }\n    }\n\n    public override should_apply_number_style(column: ColumnType): boolean {\n        return (column.dataType === GridColumnDataType.Number\n            || column.dataType === GridColumnDataType.Currency\n            || column.dataType === GridColumnDataType.Percent) && column.visibleIndex !== 0;\n    }\n\n    public override deleteRowById(rowID: any): any {\n        const treeGrid = this.grid;\n        const flatDataWithCascadeOnDeleteAndTransactions =\n            treeGrid.primaryKey &&\n            treeGrid.foreignKey &&\n            treeGrid.cascadeOnDelete &&\n            treeGrid.transactions.enabled;\n\n        if (flatDataWithCascadeOnDeleteAndTransactions) {\n            treeGrid.transactions.startPending();\n        }\n\n        const record = super.deleteRowById(rowID);\n\n        if (flatDataWithCascadeOnDeleteAndTransactions) {\n            treeGrid.transactions.endPending(true);\n        }\n\n        return record;\n    }\n\n    public override deleteRowFromData(rowID: any, index: number) {\n        const treeGrid = this.grid;\n        const record = treeGrid.records.get(rowID);\n\n        if (treeGrid.primaryKey && treeGrid.foreignKey) {\n            index = treeGrid.primaryKey ?\n                treeGrid.data.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n                treeGrid.data.indexOf(rowID);\n            super.deleteRowFromData(rowID, index);\n\n            if (treeGrid.cascadeOnDelete) {\n                if (record && record.children) {\n                    for (const child of record.children) {\n                        super.deleteRowById(child.key);\n                    }\n                }\n            }\n        } else {\n            const collection = record.parent ? record.parent.data[treeGrid.childDataKey] : treeGrid.data;\n            index = treeGrid.primaryKey ?\n                collection.map(c => c[treeGrid.primaryKey]).indexOf(rowID) :\n                collection.indexOf(rowID);\n\n            const selectedChildren = [];\n            this.get_selected_children(record, selectedChildren);\n            if (selectedChildren.length > 0) {\n                treeGrid.deselectRows(selectedChildren);\n            }\n\n            if (treeGrid.transactions.enabled) {\n                const path = treeGrid.generateRowPath(rowID);\n                treeGrid.transactions.add({\n                    id: rowID,\n                    type: TransactionType.DELETE,\n                    newValue: null,\n                    path\n                } as HierarchicalTransaction,\n                    collection[index]\n                );\n            } else {\n                collection.splice(index, 1);\n            }\n            this.grid.validation.clear(rowID);\n        }\n    }\n\n    public get_selected_children(record: ITreeGridRecord, selectedRowIDs: any[]) {\n        const grid = this.grid;\n        if (!record.children || record.children.length === 0) {\n            return;\n        }\n        for (const child of record.children) {\n            if (grid.selectionService.isRowSelected(child.key)) {\n                selectedRowIDs.push(child.key);\n            }\n            this.get_selected_children(child, selectedRowIDs);\n        }\n    }\n\n    public override row_deleted_transaction(rowID: any): boolean {\n        return this.row_deleted_parent(rowID) || super.row_deleted_transaction(rowID);\n    }\n\n    public override get_rec_by_id(rowID) {\n        return this.grid.records.get(rowID);\n    }\n\n    /**\n     * Returns the index of the record in the data view by pk or -1 if not found or primaryKey is not set.\n     *\n     * @param pk\n     * @param dataCollection\n     */\n    public override get_rec_index_by_id(pk: string | number, dataCollection?: any[]): number {\n        dataCollection = dataCollection || this.grid.data;\n        return this.grid.primaryKey ? dataCollection.findIndex(rec => rec.data[this.grid.primaryKey] === pk) : -1;\n    }\n\n    public override addRowToData(data: any, parentRowID?: any) {\n        if (parentRowID !== undefined && parentRowID !== null) {\n\n            const state = this.grid.transactions.getState(parentRowID);\n            // we should not allow adding of rows as child of deleted row\n            if (state && state.type === TransactionType.DELETE) {\n                throw Error(`Cannot add child row to deleted parent row`);\n            }\n\n            const parentRecord = this.grid.records.get(parentRowID);\n\n            if (!parentRecord) {\n                throw Error('Invalid parent row ID!');\n            }\n            this.grid.summaryService.clearSummaryCache({ rowID: parentRecord.key });\n            if (this.grid.primaryKey && this.grid.foreignKey) {\n                data[this.grid.foreignKey] = parentRowID;\n                super.addRowToData(data);\n            } else {\n                const parentData = parentRecord.data;\n                const childKey = this.grid.childDataKey;\n                if (this.grid.transactions.enabled) {\n                    const rowId = this.grid.primaryKey ? data[this.grid.primaryKey] : data;\n                    const path: any[] = [];\n                    path.push(...this.grid.generateRowPath(parentRowID));\n                    path.push(parentRowID);\n                    this.grid.transactions.add({\n                        id: rowId,\n                        path,\n                        newValue: data,\n                        type: TransactionType.ADD\n                    } as HierarchicalTransaction,\n                        null);\n                } else {\n                    if (!parentData[childKey]) {\n                        parentData[childKey] = [];\n                    }\n                    parentData[childKey].push(data);\n                }\n            }\n        } else {\n            super.addRowToData(data);\n        }\n    }\n\n    public override filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[] {\n        const records = this.filterTreeDataByExpressions(expressionsTree);\n        const data = [];\n\n        this.getFlatDataFromFilteredRecords(records, data);\n\n        return data;\n    }\n\n    public override sortDataByExpressions(data: ITreeGridRecord[], expressions: ISortingExpression[]) {\n        const records: ITreeGridRecord[] = DataUtil.sort(\n            cloneArray(data),\n            expressions,\n            this.grid.sortStrategy ?? new IgxDataRecordSorting(),\n            this.grid);\n        return records.map(r => r.data);\n    }\n\n    public filterTreeDataByExpressions(expressionsTree: IFilteringExpressionsTree): ITreeGridRecord[] {\n        let records = this.grid.rootRecords;\n\n        if (expressionsTree.filteringOperands.length) {\n            const state = {\n                expressionsTree,\n                strategy: this.grid.filterStrategy ?? new TreeGridFilteringStrategy()\n            };\n            records = FilterUtil.filter(cloneArray(records), state, this.grid);\n        }\n\n        return records;\n    }\n\n    protected override update_row_in_array(value: any, rowID: any, index: number) {\n        const grid = this.grid;\n        if (grid.primaryKey && grid.foreignKey) {\n            super.update_row_in_array(value, rowID, index);\n        } else {\n            const record = grid.records.get(rowID);\n            const childData = record.parent ? record.parent.data[grid.childDataKey] : grid.data;\n            index = grid.primaryKey ? childData.map(c => c[grid.primaryKey]).indexOf(rowID) :\n                childData.indexOf(rowID);\n            childData[index] = value;\n        }\n    }\n\n    /**\n     * Updates related row of provided grid's data source with provided new row value\n     *\n     * @param grid Grid to update data for\n     * @param rowID ID of the row to update\n     * @param rowValueInDataSource Initial value of the row as it is in data source\n     * @param rowCurrentValue Current value of the row as it is with applied previous transactions\n     * @param rowNewValue New value of the row\n     */\n    protected override updateData(\n        grid: GridType,\n        rowID: any,\n        rowValueInDataSource: any,\n        rowCurrentValue: any,\n        rowNewValue: { [x: string]: any }) {\n        if (grid.transactions.enabled) {\n            const path = grid.generateRowPath(rowID);\n            const transaction: HierarchicalTransaction = {\n                id: rowID,\n                type: TransactionType.UPDATE,\n                newValue: rowNewValue,\n                path\n            };\n            grid.transactions.add(transaction, rowCurrentValue);\n        } else {\n            mergeObjects(rowValueInDataSource, rowNewValue);\n        }\n    }\n\n    private row_deleted_parent(rowID: any): boolean {\n        const grid = this.grid;\n        if (!grid) {\n            return false;\n        }\n        if ((grid.cascadeOnDelete && grid.foreignKey) || grid.childDataKey) {\n            let node = grid.records.get(rowID);\n            while (node) {\n                const state: State = grid.transactions.getState(node.key);\n                if (state && state.type === TransactionType.DELETE) {\n                    return true;\n                }\n                node = node.parent;\n            }\n        }\n        return false;\n    }\n\n    private getFlatDataFromFilteredRecords(records: ITreeGridRecord[], data: any[]) {\n        if (!records || records.length === 0) {\n            return;\n        }\n\n        for (const record of records) {\n            if (!record.isFilteredOutParent) {\n                data.push(record);\n            }\n            this.getFlatDataFromFilteredRecords(record.children, data);\n        }\n    }\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowLoadingIndicator]',\n    standalone: true\n})\nexport class IgxRowLoadingIndicatorTemplateDirective {\n    public template = inject<TemplateRef<any>>(TemplateRef);\n}\n","import { Injectable } from '@angular/core';\nimport { GridSelectionMode } from 'igniteui-angular/grids/core';\nimport { IgxGridSelectionService } from 'igniteui-angular/grids/core';\nimport { ITreeGridRecord } from 'igniteui-angular/core';\n\n@Injectable()\nexport class IgxTreeGridSelectionService extends IgxGridSelectionService {\n    private rowsToBeSelected: Set<any>;\n    private rowsToBeIndeterminate: Set<any>;\n\n    /** Select specified rows. No event is emitted. */\n    public override selectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?): void {\n        if (this.grid && this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n            this.cascadeSelectRowsWithNoEvent(rowIDs, clearPrevSelection);\n            return;\n        }\n        super.selectRowsWithNoEvent(rowIDs, clearPrevSelection);\n    }\n\n    /** Deselect specified rows. No event is emitted. */\n    public override deselectRowsWithNoEvent(rowIDs: any[]): void {\n        if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n            this.cascadeDeselectRowsWithNoEvent(rowIDs);\n            return;\n        }\n        super.deselectRowsWithNoEvent(rowIDs);\n    }\n\n    public override emitRowSelectionEvent(newSelection, added, removed, event?): boolean {\n        if (this.grid.rowSelection === GridSelectionMode.multipleCascade) {\n            this.emitCascadeRowSelectionEvent(newSelection, added, removed, event);\n            return;\n        }\n\n        super.emitRowSelectionEvent(newSelection, added, removed, event);\n    }\n\n    public updateCascadeSelectionOnFilterAndCRUD(\n        parents: Set<any>,\n        crudRowID?: any,\n        visibleRowIDs: Set<any> = null) {\n        if (visibleRowIDs === null) {\n            // if the tree grid has flat structure\n            // do not explicitly handle the selection state of the rows\n            if (!parents.size) {\n                return;\n            }\n            visibleRowIDs = new Set(this.getRowIDs(this.allData));\n            this.rowsToBeSelected = new Set(this.rowSelection);\n            this.rowsToBeIndeterminate = new Set(this.indeterminateRows);\n            if (crudRowID) {\n                this.rowSelection.delete(crudRowID);\n            }\n        }\n        if (!parents.size) {\n            this.rowSelection = new Set(this.rowsToBeSelected);\n            this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n            // TODO: emit selectionChangeD event, calculate its args through the handleAddedAndRemovedArgs method\n            this.clearHeaderCBState();\n            this.selectedRowsChange.next(this.getSelectedRows());\n            return;\n        }\n        const newParents = new Set<any>();\n        parents.forEach(parent => {\n            this.handleRowSelectionState(parent, visibleRowIDs);\n            if (parent && parent.parent) {\n                newParents.add(parent.parent);\n            }\n        });\n        this.updateCascadeSelectionOnFilterAndCRUD(newParents, null, visibleRowIDs);\n    }\n\n    private cascadeSelectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?: boolean): void {\n        if (clearPrevSelection) {\n            this.indeterminateRows.clear();\n            this.rowSelection.clear();\n            this.calculateRowsNewSelectionState({ added: rowIDs, removed: [] });\n        } else {\n            const oldSelection = this.getSelectedRows();\n            const newSelection = [...oldSelection, ...rowIDs];\n            const args = { oldSelection, newSelection };\n\n            // retrieve only the rows without their parents/children which has to be added to the selection\n            this.handleAddedAndRemovedArgs(args);\n\n            this.calculateRowsNewSelectionState(args);\n        }\n        this.rowSelection = new Set(this.rowsToBeSelected);\n        this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next(this.getSelectedRows());\n    }\n\n    private cascadeDeselectRowsWithNoEvent(rowIDs: any[]): void {\n        const args = { added: [], removed: rowIDs };\n        this.calculateRowsNewSelectionState(args);\n\n        this.rowSelection = new Set(this.rowsToBeSelected);\n        this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next(this.getSelectedRows());\n    }\n\n    public get selectionService(): IgxGridSelectionService {\n        return this.grid.selectionService;\n    }\n\n    private emitCascadeRowSelectionEvent(newSelection, added, removed, event?): boolean {\n        const currSelection = this.getSelectedRows();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args = {\n            owner: this.grid, oldSelection: this.getSelectedRowsData(), newSelection,\n            added, removed, event, cancel: false\n        };\n\n        this.calculateRowsNewSelectionState(args, !!this.grid.primaryKey);\n        args.newSelection = Array.from(this.grid.gridAPI.get_all_data().filter(r => this.rowsToBeSelected.has(this.grid.primaryKey ? r[this.grid.primaryKey] : r)));\n\n        // retrieve rows/parents/children which has been added/removed from the selection\n        this.handleAddedAndRemovedArgs(args);\n\n        this.grid.rowSelectionChanging.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n        const newSelectionIDs = args.newSelection.map(r => this.grid.primaryKey? r[this.grid.primaryKey] : r)\n        // if args.newSelection hasn't been modified\n        if (this.areEqualCollections(Array.from(this.rowsToBeSelected), newSelectionIDs)) {\n            this.rowSelection = new Set(this.rowsToBeSelected);\n            this.indeterminateRows = new Set(this.rowsToBeIndeterminate);\n            this.clearHeaderCBState();\n            this.selectedRowsChange.next(this.getSelectedRows());\n        } else {\n            // select the rows within the modified args.newSelection with no event\n            this.cascadeSelectRowsWithNoEvent(newSelectionIDs, true);\n        }\n    }\n\n\n    /**\n     * retrieve the rows which should be added/removed to/from the old selection\n     */\n    private handleAddedAndRemovedArgs(args: any) {\n        const newSelectionSet = new Set(args.newSelection);\n        const oldSelectionSet = new Set(args.oldSelection);\n        args.removed = args.oldSelection.filter(x => !newSelectionSet.has(x));\n        args.added = args.newSelection.filter(x => !oldSelectionSet.has(x));\n    }\n\n    /**\n     * adds to rowsToBeProcessed set all visible children of the rows which was initially within the rowsToBeProcessed set\n     *\n     * @param rowsToBeProcessed set of the rows (without their parents/children) to be selected/deselected\n     * @param visibleRowIDs list of all visible rowIds\n     * @returns a new set with all direct parents of the rows within rowsToBeProcessed set\n     */\n    private collectRowsChildrenAndDirectParents(rowsToBeProcessed: Set<any>, visibleRowIDs: Set<any>, adding: boolean, shouldConvert: boolean): Set<any> {\n        const processedRowsParents = new Set<any>();\n        Array.from(rowsToBeProcessed).forEach((row) => {\n            const rowID = shouldConvert ? row[this.grid.primaryKey] : row;\n            this.selectDeselectRow(rowID, adding);\n            const rowTreeRecord = this.grid.gridAPI.get_rec_by_id(rowID);\n            const rowAndAllChildren = this.get_all_children(rowTreeRecord);\n            rowAndAllChildren.forEach(r => {\n                if (visibleRowIDs.has(r.key)) {\n                    this.selectDeselectRow(r.key, adding);\n                }\n            });\n            if (rowTreeRecord && rowTreeRecord.parent) {\n                processedRowsParents.add(rowTreeRecord.parent);\n            }\n        });\n        return processedRowsParents;\n    }\n\n\n    /**\n     * populates the rowsToBeSelected and rowsToBeIndeterminate sets\n     * with the rows which will be eventually in selected/indeterminate state\n     */\n    private calculateRowsNewSelectionState(args: any, shouldConvert = false) {\n        this.rowsToBeSelected = new Set<any>(args.oldSelection ? shouldConvert ? args.oldSelection.map(r => r[this.grid.primaryKey]) : args.oldSelection : this.getSelectedRows());\n        this.rowsToBeIndeterminate = new Set<any>(this.getIndeterminateRows());\n\n        const visibleRowIDs = new Set(this.getRowIDs(this.allData));\n\n        const removed = new Set(args.removed);\n        const added = new Set(args.added);\n\n        if (removed && removed.size) {\n            let removedRowsParents = new Set<any>();\n\n            removedRowsParents = this.collectRowsChildrenAndDirectParents(removed, visibleRowIDs, false, shouldConvert);\n\n            Array.from(removedRowsParents).forEach((parent) => {\n                this.handleParentSelectionState(parent, visibleRowIDs);\n            });\n        }\n\n        if (added && added.size) {\n            let addedRowsParents = new Set<any>();\n\n            addedRowsParents = this.collectRowsChildrenAndDirectParents(added, visibleRowIDs, true, shouldConvert);\n\n            Array.from(addedRowsParents).forEach((parent) => {\n                this.handleParentSelectionState(parent, visibleRowIDs);\n            });\n        }\n    }\n\n    /**\n     * recursively handle the selection state of the direct and indirect parents\n     */\n    private handleParentSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n        if (!treeRow) {\n            return;\n        }\n        this.handleRowSelectionState(treeRow, visibleRowIDs);\n        if (treeRow.parent) {\n            this.handleParentSelectionState(treeRow.parent, visibleRowIDs);\n        }\n    }\n\n    /**\n     * Handle the selection state of a given row based the selection states of its direct children\n     */\n    private handleRowSelectionState(treeRow: ITreeGridRecord, visibleRowIDs: Set<any>) {\n        let visibleChildren = [];\n        if (treeRow && treeRow.children) {\n            visibleChildren = treeRow.children.filter(child => visibleRowIDs.has(child.key));\n        }\n        if (visibleChildren.length) {\n            if (visibleChildren.every(row => this.rowsToBeSelected.has(row.key))) {\n                this.selectDeselectRow(treeRow.key, true);\n            } else if (visibleChildren.some(row => this.rowsToBeSelected.has(row.key) || this.rowsToBeIndeterminate.has(row.key))) {\n                this.rowsToBeIndeterminate.add(treeRow.key);\n                this.rowsToBeSelected.delete(treeRow.key);\n            } else {\n                this.selectDeselectRow(treeRow.key, false);\n            }\n        } else {\n            // if the children of the row has been deleted and the row was selected do not change its state\n            if (this.isRowSelected(treeRow.key)) {\n                this.selectDeselectRow(treeRow.key, true);\n            } else {\n                this.selectDeselectRow(treeRow.key, false);\n            }\n        }\n    }\n\n    private get_all_children(record: ITreeGridRecord): any[] {\n        const children = [];\n        if (record && record.children && record.children.length) {\n            for (const child of record.children) {\n                children.push(...this.get_all_children(child));\n                children.push(child);\n            }\n        }\n        return children;\n\n    }\n\n    private selectDeselectRow(rowID: any, select: boolean) {\n        if (select) {\n            this.rowsToBeSelected.add(rowID);\n            this.rowsToBeIndeterminate.delete(rowID);\n        } else {\n            this.rowsToBeSelected.delete(rowID);\n            this.rowsToBeIndeterminate.delete(rowID);\n        }\n    }\n\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE, GridSummaryPosition } from 'igniteui-angular/grids/core';\nimport { GridSummaryCalculationMode, ISummaryRecord, ITreeGridRecord } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridSummary',\n    standalone: true\n})\nexport class IgxTreeGridSummaryPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(flatData: ITreeGridRecord[],\n        hasSummary: boolean,\n        summaryCalculationMode: GridSummaryCalculationMode,\n        summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean, _: number, __: number): any[] {\n\n        if (!flatData || !hasSummary || summaryCalculationMode === GridSummaryCalculationMode.rootLevelOnly) {\n            return flatData;\n        }\n\n        return this.addSummaryRows(this.grid, flatData, summaryPosition, showSummaryOnCollapse);\n    }\n\n    private addSummaryRows(grid: GridType, collection: ITreeGridRecord[],\n        summaryPosition: GridSummaryPosition, showSummaryOnCollapse: boolean): any[] {\n        const recordsWithSummary = [];\n        const maxSummaryHeight = grid.summaryService.calcMaxSummaryHeight();\n\n        for (const record of collection) {\n            recordsWithSummary.push(record);\n\n            const isCollapsed = !record.expanded && record.children && record.children.length > 0 && showSummaryOnCollapse;\n            if (isCollapsed) {\n                let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n                childData = this.removeDeletedRecord(grid, record.key, childData);\n                const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight,\n                    cellIndentation: record.level + 1\n                };\n                recordsWithSummary.push(summaryRecord);\n            }\n            const isExpanded = record.children && record.children.length > 0 && record.expanded;\n            if (summaryPosition === GridSummaryPosition.bottom && !isExpanded) {\n                let childRecord = record;\n                let parent = record.parent;\n\n                while (parent) {\n                    const children = parent.children;\n\n                    if (children[children.length - 1] === childRecord ) {\n                        let childData = children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n                        childData = this.removeDeletedRecord(grid, parent.key, childData);\n                        const summaries = grid.summaryService.calculateSummaries(parent.key, childData);\n                        const summaryRecord: ISummaryRecord = {\n                            summaries,\n                            max: maxSummaryHeight,\n                            cellIndentation: parent.level + 1\n                        };\n                        recordsWithSummary.push(summaryRecord);\n\n                        childRecord = parent;\n                        parent = childRecord.parent;\n                    } else {\n                        break;\n                    }\n                }\n            } else if (summaryPosition === GridSummaryPosition.top && isExpanded) {\n                let childData = record.children.filter(r => !r.isFilteredOutParent).map(r => r.data);\n                childData = this.removeDeletedRecord(grid, record.key, childData);\n                const summaries = grid.summaryService.calculateSummaries(record.key, childData);\n                const summaryRecord: ISummaryRecord = {\n                    summaries,\n                    max: maxSummaryHeight,\n                    cellIndentation: record.level + 1\n                };\n                recordsWithSummary.push(summaryRecord);\n            }\n        }\n        return recordsWithSummary;\n    }\n\n    private removeDeletedRecord(grid, rowId, data) {\n        if (!grid.transactions.enabled || !grid.cascadeOnDelete) {\n            return data;\n        }\n        const deletedRows = grid.transactions.getTransactionLog().filter(t => t.type === 'delete').map(t => t.id);\n        let row = grid.records.get(rowId);\n        if (!row && deletedRows.lenght === 0) {\n            return [];\n        }\n        row = row.children ? row : row.parent;\n        while (row) {\n            rowId = row.key;\n            if (deletedRows.indexOf(rowId) !== -1) {\n                return [];\n            }\n            row = row.parent;\n        }\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 { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\nimport { FilteringExpressionsTree, IFilteringExpressionsTree, IFilteringState, IFilteringStrategy, ITreeGridRecord, TreeGridFilteringStrategy } from 'igniteui-angular/core';\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridFiltering',\n    standalone: true\n})\nexport class IgxTreeGridFilteringPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(hierarchyData: ITreeGridRecord[], expressionsTree: IFilteringExpressionsTree,\n        filterStrategy: IFilteringStrategy,\n        advancedFilteringExpressionsTree: IFilteringExpressionsTree,\n        _: number, __: number, pinned?): ITreeGridRecord[] {\n        const state: IFilteringState = {\n            expressionsTree,\n            advancedExpressionsTree: advancedFilteringExpressionsTree,\n            strategy: new TreeGridFilteringStrategy()\n        };\n\n        if (filterStrategy) {\n            state.strategy = filterStrategy;\n        }\n\n        if (FilteringExpressionsTree.empty(state.expressionsTree) && FilteringExpressionsTree.empty(state.advancedExpressionsTree)) {\n            this.grid.setFilteredData(null, pinned);\n            return hierarchyData;\n        }\n\n        const result = this.filter(hierarchyData, state, this.grid);\n        const filteredData: any[] = [];\n        this.expandAllRecursive(this.grid, result, this.grid.expansionStates, filteredData);\n        this.grid.setFilteredData(filteredData, pinned);\n\n        return result;\n    }\n\n    private expandAllRecursive(grid: GridType, data: ITreeGridRecord[],\n        expandedStates: Map<any, boolean>, filteredData: any[]) {\n        for (const rec of data) {\n            filteredData.push(rec.data);\n\n            if (rec.children && rec.children.length > 0) {\n                expandedStates.set(rec.key, true);\n                this.expandAllRecursive(grid, rec.children, expandedStates, filteredData);\n            }\n        }\n    }\n\n    private filter(data: ITreeGridRecord[], state: IFilteringState, grid?: GridType): ITreeGridRecord[] {\n        return state.strategy.filter(data, state.expressionsTree, state.advancedExpressionsTree, grid);\n    }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from 'igniteui-angular/grids/core';\nimport { cloneArray, cloneHierarchicalArray, DataUtil, IGroupingExpression, ISortingExpression, TransactionType, IGridSortingStrategy, ITreeGridRecord } from 'igniteui-angular/core';\nimport { IgxAddRow } from 'igniteui-angular/grids/core';\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'treeGridHierarchizing',\n    standalone: true\n})\nexport class IgxTreeGridHierarchizingPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: any[], primaryKey: string, foreignKey: string, childDataKey: string, _: number): ITreeGridRecord[] {\n        let hierarchicalRecords: ITreeGridRecord[] = [];\n        const treeGridRecordsMap = new Map<any, ITreeGridRecord>();\n        const flatData: any[] = [];\n\n        if (!collection || !collection.length) {\n            this.grid.flatData = collection;\n            this.grid.records = treeGridRecordsMap;\n            this.grid.rootRecords = collection;\n            return collection;\n        }\n\n        if (childDataKey) {\n            hierarchicalRecords = this.hierarchizeRecursive(collection, primaryKey, childDataKey, undefined,\n                flatData, 0, treeGridRecordsMap);\n        } else if (primaryKey) {\n            hierarchicalRecords = this.hierarchizeFlatData(collection, primaryKey, foreignKey, treeGridRecordsMap, flatData);\n        }\n\n        this.grid.flatData = this.grid.transactions.enabled ?\n            flatData.filter(rec => {\n                const state = this.grid.transactions.getState(this.getRowID(primaryKey, rec));\n                return !state || state.type !== TransactionType.ADD;\n            }) : flatData;\n        this.grid.records = treeGridRecordsMap;\n        this.grid.rootRecords = hierarchicalRecords;\n        return hierarchicalRecords;\n    }\n\n    private getRowID(primaryKey: any, rowData: any) {\n        return primaryKey ? rowData[primaryKey] : rowData;\n    }\n\n    /**\n     * Converts a flat array of data into a hierarchical (tree) structure,\n     * preserving the original order of the records among siblings.\n     *\n     * It uses a two-pass approach:\n     * 1. Creates all ITreeGridRecord objects and populates the Map for quick lookup.\n     * 2. Links the records by iterating again, ensuring children are added to\n     * their parent's children array in the order they appeared in the\n     * original collection.\n     *\n     * @param collection The flat array of data to be hierarchized. This is the array whose order should be preserved.\n     * @param primaryKey The name of the property in the data objects that serves as the unique identifier (e.g., 'id').\n     * @param foreignKey The name of the property in the data objects that links to the parent's primary key (e.g., 'parentId').\n     * @param map A pre-existing Map object (key: primaryKey value, value: ITreeGridRecord) used to store and quickly look up all created records.\n     * @param flatData The original flat data array. Used for passing to the setIndentationLevels method (not directly used for hierarchy building).\n     * @returns An array of ITreeGridRecord objects representing the root nodes of the hierarchy, ordered as they appeared in the original collection.\n     */\n    private hierarchizeFlatData(\n        collection: any[],\n        primaryKey: string,\n        foreignKey: string,\n        map: Map<any, ITreeGridRecord>,\n        flatData: any[]\n    ): ITreeGridRecord[] {\n        collection.forEach(row => {\n            const record: ITreeGridRecord = {\n                key: this.getRowID(primaryKey, row),\n                data: row,\n                children: []\n            };\n            map.set(row[primaryKey], record);\n        });\n\n        const result: ITreeGridRecord[] = [];\n        collection.forEach(row => {\n            const record: ITreeGridRecord = map.get(row[primaryKey])!;\n            const parent = map.get(row[foreignKey]);\n\n            if (parent) {\n                record.parent = parent;\n                parent.children.push(record);\n            } else {\n                result.push(record);\n            }\n        });\n\n        this.setIndentationLevels(result, 0, flatData);\n\n        return result;\n    }\n\n    private setIndentationLevels(collection: ITreeGridRecord[], indentationLevel: number, flatData: any[]) {\n        for (const record of collection) {\n            record.level = indentationLevel;\n            record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n            flatData.push(record.data);\n\n            if (record.children && record.children.length > 0) {\n                this.setIndentationLevels(record.children, indentationLevel + 1, flatData);\n            }\n        }\n    }\n\n    private hierarchizeRecursive(collection: any[], primaryKey: string, childDataKey: string,\n        parent: ITreeGridRecord, flatData: any[], indentationLevel: number, map: Map<any, ITreeGridRecord>): ITreeGridRecord[] {\n        const result: ITreeGridRecord[] = [];\n\n        for (const item of collection) {\n            const record: ITreeGridRecord = {\n                key: this.getRowID(primaryKey, item),\n                data: item,\n                parent,\n                level: indentationLevel\n            };\n            record.expanded = this.grid.gridAPI.get_row_expansion_state(record);\n            flatData.push(item);\n            map.set(record.key, record);\n            record.children = item[childDataKey] ?\n                this.hierarchizeRecursive(item[childDataKey], primaryKey, childDataKey, record, flatData, indentationLevel + 1, map) :\n                undefined;\n            result.push(record);\n        }\n\n        return result;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'treeGridFlattening',\n    standalone: true\n})\nexport class IgxTreeGridFlatteningPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: ITreeGridRecord[],\n        expandedLevels: number, expandedStates: Map<any, boolean>, _: number): any[] {\n\n        const data: ITreeGridRecord[] = [];\n\n        this.grid.processedRootRecords = collection;\n        this.grid.processedRecords = new Map<any, ITreeGridRecord>();\n\n        this.getFlatDataRecursive(collection, data, expandedLevels, expandedStates, true);\n\n        this.grid.processedExpandedFlatData = data.map(r => r.data);\n\n        return data;\n    }\n\n    private getFlatDataRecursive(collection: ITreeGridRecord[], data: ITreeGridRecord[],\n        expandedLevels: number, expandedStates: Map<any, boolean>, parentExpanded: boolean) {\n        if (!collection || !collection.length) {\n            return;\n        }\n\n        for (const hierarchicalRecord of collection) {\n            if (parentExpanded) {\n                data.push(hierarchicalRecord);\n            }\n\n            hierarchicalRecord.expanded = this.grid.gridAPI.get_row_expansion_state(hierarchicalRecord);\n\n            this.updateNonProcessedRecordExpansion(this.grid, hierarchicalRecord);\n\n            this.grid.processedRecords.set(hierarchicalRecord.key, hierarchicalRecord);\n\n            this.getFlatDataRecursive(hierarchicalRecord.children, data, expandedLevels,\n                expandedStates, parentExpanded && hierarchicalRecord.expanded);\n        }\n    }\n\n    private updateNonProcessedRecordExpansion(grid: GridType, record: ITreeGridRecord) {\n        const rec = grid.records.get(record.key);\n        rec.expanded = record.expanded;\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridSorting',\n    standalone: true\n})\nexport class IgxTreeGridSortingPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(\n        hierarchicalData: ITreeGridRecord[],\n        sortExpressions: ISortingExpression[],\n        groupExpressions: IGroupingExpression[],\n        sorting: IGridSortingStrategy,\n        _: number,\n        pinned?: boolean): ITreeGridRecord[] {\n\n        const expressions = groupExpressions ? groupExpressions.concat(sortExpressions) : sortExpressions;\n        let result: ITreeGridRecord[];\n        if (!expressions.length) {\n            result = hierarchicalData;\n        } else {\n            result = DataUtil.treeGridSort(hierarchicalData, expressions, sorting, this.grid);\n        }\n\n        const filteredSortedData = [];\n        this.flattenTreeGridRecords(result, filteredSortedData);\n        this.grid.setFilteredSortedData(filteredSortedData, pinned);\n\n        return result;\n    }\n\n    private flattenTreeGridRecords(records: ITreeGridRecord[], flatData: any[]) {\n        if (records && records.length) {\n            for (const record of records) {\n                flatData.push(record.data);\n                this.flattenTreeGridRecords(record.children, flatData);\n            }\n        }\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridPaging',\n    standalone: true\n})\nexport class IgxTreeGridPagingPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: ITreeGridRecord[], enabled: boolean, page = 0, perPage = 15, _: number): ITreeGridRecord[] {\n        if (!enabled || this.grid.pagingMode !== 'local') {\n            return collection;\n        }\n\n        const len = this.grid._totalRecords >= 0 ? this.grid._totalRecords : collection.length;\n        const totalPages = Math.ceil(len / perPage);\n\n        const state = {\n            index: (totalPages > 0 && page >= totalPages) ? totalPages - 1 : page,\n            recordsPerPage: perPage\n        };\n\n        const result: ITreeGridRecord[] = DataUtil.page(cloneArray(collection), state, len);\n        this.grid.pagingState = state;\n        this.grid.page = state.index;\n\n        return result;\n    }\n}\n/** @hidden */\n@Pipe({\n    name: 'treeGridTransaction',\n    standalone: true\n})\nexport class IgxTreeGridTransactionPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: any[], _: number): any[] {\n\n        if (this.grid.transactions.enabled) {\n            const aggregatedChanges = this.grid.transactions.getAggregatedChanges(true);\n            if (aggregatedChanges.length > 0) {\n                const primaryKey = this.grid.primaryKey;\n                if (!primaryKey) {\n                    return collection;\n                }\n\n                const childDataKey = this.grid.childDataKey;\n\n                if (childDataKey) {\n                    const hierarchicalDataClone = cloneHierarchicalArray(collection, childDataKey);\n                    return DataUtil.mergeHierarchicalTransactions(\n                        hierarchicalDataClone,\n                        aggregatedChanges,\n                        childDataKey,\n                        this.grid.primaryKey,\n                        this.grid.dataCloneStrategy\n                    );\n                } else {\n                    const flatDataClone = cloneArray(collection);\n                    return DataUtil.mergeTransactions(\n                        flatDataClone,\n                        aggregatedChanges,\n                        this.grid.primaryKey,\n                        this.grid.dataCloneStrategy);\n                }\n            }\n        }\n        return collection;\n    }\n}\n\n/**\n * This pipe maps the original record to ITreeGridRecord format used in TreeGrid.\n */\n@Pipe({\n    name: 'treeGridNormalizeRecord',\n    standalone: true\n})\nexport class IgxTreeGridNormalizeRecordsPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(_: any[], __: number): any[] {\n        const primaryKey = this.grid.primaryKey;\n        // using flattened data because origin data may be hierarchical.\n        const flatData = this.grid.flatData;\n        const res = flatData ? flatData.map(rec =>\n        ({\n            rowID: this.grid.primaryKey ? rec[primaryKey] : rec,\n            data: rec,\n            level: 0,\n            children: []\n        })) : [];\n        return res;\n    }\n}\n\n@Pipe({\n    name: 'treeGridAddRow',\n    standalone: true\n})\nexport class IgxTreeGridAddRowPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: any, isPinned = false, _pipeTrigger: number) {\n        if (!this.grid.rowEditable || !this.grid.crudService.row || !this.grid.crudService.row.isAddRow ||\n            !this.grid.gridAPI.crudService.addRowParent || isPinned !== this.grid.gridAPI.crudService.addRowParent.isPinned) {\n            return collection;\n        }\n        const copy = collection.slice(0);\n        const rec = (this.grid.crudService.row as IgxAddRow).recordRef;\n        if (this.grid.crudService.addRowParent.isPinned) {\n            const parentRowIndex = copy.findIndex(record => record.rowID === this.grid.crudService.addRowParent.rowID);\n            copy.splice(parentRowIndex + 1, 0, rec);\n        } else {\n            copy.splice(this.grid.crudService.row.index, 0, rec);\n        }\n        this.grid.records.set(rec.key, rec);\n        return copy;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    Input\n} from '@angular/core';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\n\nimport { IgxTreeGridRow } from 'igniteui-angular/grids/core';\nimport { RowType } from 'igniteui-angular/grids/core';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from 'igniteui-angular/grids/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { HammerGesturesManager, IgxNumberFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, IgxDateFormatterPipe } from 'igniteui-angular/core';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport { IgxDateTimeEditorDirective, IgxFocusDirective, IgxTextHighlightDirective, IgxTextSelectionDirective, 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';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { IgxGridExpandableCellComponent } from 'igniteui-angular/grids/grid';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-tree-grid-cell',\n    templateUrl: 'tree-cell.component.html',\n    providers: [HammerGesturesManager],\n    imports: [\n        NgClass,\n        NgStyle,\n        NgTemplateOutlet,\n        IgxNumberFormatterPipe,\n        IgxPercentFormatterPipe,\n        IgxCurrencyFormatterPipe,\n        IgxDateFormatterPipe,\n        IgxChipComponent,\n        IgxTextHighlightDirective,\n        IgxIconComponent,\n        ReactiveFormsModule,\n        IgxInputGroupComponent,\n        IgxInputDirective,\n        IgxFocusDirective,\n        IgxCheckboxComponent,\n        IgxDatePickerComponent,\n        IgxTimePickerComponent,\n        IgxDateTimeEditorDirective,\n        IgxPrefixDirective,\n        IgxSuffixDirective,\n        IgxCircularProgressBarComponent,\n        IgxTooltipTargetDirective,\n        IgxTooltipDirective,\n        IgxGridCellImageAltPipe,\n        IgxStringReplacePipe,\n        IgxColumnFormatterPipe,\n        IgxTextSelectionDirective\n    ]\n})\nexport class IgxTreeGridCellComponent extends IgxGridExpandableCellComponent {\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public level = 0;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public showIndicator = false;\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public isLoading: boolean;\n\n    /**\n     * Gets the row of the cell.\n     * ```typescript\n     * let cellRow = this.cell.row;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public override get row(): RowType {\n        // TODO: Fix types\n        return new IgxTreeGridRow(this.grid as any, this.intRow.index, this.intRow.data);\n    }\n\n    /**\n     * @hidden\n     */\n    public override toggle(event: Event) {\n        event.stopPropagation();\n        this.grid.gridAPI.set_row_expansion_state(this.intRow.key, !this.intRow.expanded, event);\n    }\n\n    /**\n     * @hidden\n     */\n    public onLoadingDblClick(event: Event) {\n        event.stopPropagation();\n    }\n}\n","<ng-template #defaultPinnedIndicator>\n    @if (displayPinnedChip) {\n        <igx-chip\n            class=\"igx-grid__td--pinned-chip\"\n            [disabled]=\"true\"\n            [style.--ig-size]=\"1\"\n        >{{ 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\n            class=\"igx-grid__td-text\"\n            [cssClass]=\"highlightClass\"\n            [activeCssClass]=\"activeHighlightClass\"\n            [groupName]=\"gridID\"\n            [value]=\"\n                formatter\n                    ? (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            \"\n            [row]=\"rowData\"\n            [column]=\"this.column.field\"\n            [containerClass]=\"'igx-grid__td-text'\"\n            [metadata]=\"searchMetadata\"\n        >{{\n            formatter\n                ? (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        }}</div>\n    }\n    @if (column.dataType === 'boolean' && !this.formatter) {\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    }\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            !isEmptyAddRowCell ? 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                    [igxTextSelection]=\"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                [igxTextSelection]=\"true\"\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                [igxTextSelection]=\"true\"\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                [igxTextSelection]=\"true\"\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 (!editMode) {\n    @if (level > 0) {\n        <div\n            #indentationDiv\n            class=\"igx-grid__tree-cell--padding-level-{{level}}\"\n            [ngStyle]=\"{'padding-inline-start': 'calc(var(--ig-tree-indent-size) *' + level + ')'}\"\n        ></div>\n    }\n    @if (!isLoading) {\n        <div\n            #indicator\n            class=\"igx-grid__tree-grouping-indicator\"\n            [ngStyle]=\"{ visibility: showIndicator ? 'visible' : 'hidden' }\"\n            (click)=\"toggle($event)\"\n            (focus)=\"onIndicatorFocus()\"\n        >\n            <ng-container\n                *ngTemplateOutlet=\"iconTemplate; context: { $implicit:  this }\"\n            >\n            </ng-container>\n            <ng-container\n                *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\"\n            >\n            </ng-container>\n        </div>\n    }\n    @if (isLoading) {\n        <div\n            (dblclick)=\"onLoadingDblClick($event)\"\n            class=\"igx-grid__tree-loading-indicator\"\n        >\n            <ng-container\n                *ngTemplateOutlet=\"\n                    grid.rowLoadingIndicatorTemplate\n                        ? grid.rowLoadingIndicatorTemplate\n                        : defaultLoadingIndicatorTemplate\n                \"\n            >\n            </ng-container>\n        </div>\n    }\n    <ng-template #defaultLoadingIndicatorTemplate>\n        <igx-circular-bar [indeterminate]=\"true\"> </igx-circular-bar>\n    </ng-template>\n}\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </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<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, forwardRef, Input, ViewChildren, QueryList, HostBinding, DoCheck, ChangeDetectionStrategy } from '@angular/core';\nimport { IgxRowDirective } from 'igniteui-angular/grids/core';\nimport { IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe } from 'igniteui-angular/grids/core';\nimport { IgxTreeGridCellComponent } from './tree-cell.component';\nimport { IgxGridCellComponent } from 'igniteui-angular/grids/core';\nimport { IgxRowDragDirective } from 'igniteui-angular/grids/core';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\nimport { IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { ITreeGridRecord } from 'igniteui-angular/core';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-tree-grid-row',\n    templateUrl: 'tree-grid-row.component.html',\n    providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxTreeGridRowComponent) }],\n    imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, IgxGridCellComponent, NgClass, NgStyle, IgxTreeGridCellComponent, IgxCheckboxComponent, IgxGridNotGroupedPipe, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe]\n})\nexport class IgxTreeGridRowComponent extends IgxRowDirective implements DoCheck {\n    @ViewChildren('treeCell')\n    protected override _cells: QueryList<any>;\n\n    /**\n     * @hidden\n     */\n    public isLoading: boolean;\n\n    private _treeRow: ITreeGridRecord;\n\n    /**\n     * The `ITreeGridRecord` passed to the row component.\n     *\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * const treeRow = row.treeRow;\n     * ```\n     */\n    @Input()\n    public get treeRow(): ITreeGridRecord {\n        return this._treeRow;\n    }\n\n    public set treeRow(value: ITreeGridRecord) {\n        if (this._treeRow !== value) {\n            this._treeRow = value;\n            this.data = this._treeRow.data;\n        }\n    }\n\n    /**\n     * Sets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * this.grid.selectedRows[0].pinned = true;\n     * ```\n     */\n    public override set pinned(value: boolean) {\n        if (value) {\n            this.grid.pinRow(this.key);\n        } else {\n            this.grid.unpinRow(this.key);\n        }\n    }\n\n    /**\n     * Gets whether the row is pinned.\n     * ```typescript\n     * let isPinned = row.pinned;\n     * ```\n     */\n    public override get pinned() {\n        return this.grid.isRecordPinned(this._treeRow);\n    }\n\n    /**\n     * @hidden\n     */\n    public override get isRoot(): boolean {\n        let treeRec = this.treeRow;\n        const isPinnedArea = this.pinned && !this.disabled;\n        if (isPinnedArea) {\n            treeRec = this.grid.unpinnedRecords.find(x => x.data === this.data);\n        }\n        return treeRec?.level === 0;\n    }\n\n    /**\n     * @hidden\n     */\n    public override get hasChildren(): boolean {\n        return true;\n    }\n\n    /**\n     * Returns a value indicating whether the row component is expanded.\n     *\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * const expanded = row.expanded;\n     * ```\n     */\n    @HostBinding('attr.aria-expanded')\n    public override get expanded(): boolean {\n        return this._treeRow.expanded;\n    }\n\n    /**\n     * Sets a value indicating whether the row component is expanded.\n     *\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * row.expanded = true;\n     * ```\n     */\n    public override set expanded(value: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this._treeRow.key, value);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override get viewIndex(): number {\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * @hidden\n     */\n    public get showIndicator() {\n        return this.grid.loadChildrenOnDemand ?\n            this.grid.expansionStates.has(this.key) ?\n                this.treeRow.children && this.treeRow.children.length :\n                this.grid.hasChildrenKey ?\n                    this.data[this.grid.hasChildrenKey] :\n                    true :\n            this.treeRow.children && this.treeRow.children.length;\n    }\n\n    /**\n     * @hidden\n     */\n    public get indeterminate(): boolean {\n        return this.selectionService.isRowInIndeterminateState(this.key);\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngDoCheck() {\n        this.isLoading = this.grid.loadChildrenOnDemand ? this.grid.loadingRows.has(this.key) : false;\n        super.ngDoCheck();\n    }\n\n    /**\n     * Spawns the add child row UI for the specific row.\n     *\n     * @example\n     * ```typescript\n     * const row = this.grid.getRowByKey(1) as IgxTreeGridRowComponent;\n     * row.beginAddChild();\n     * ```\n     * @param rowID\n     */\n    public beginAddChild() {\n        this.grid.crudService.enterAddRowMode(this, true);\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 (showRowSelectors) {\n        <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" (click)=\"onRowSelectorClick($event)\" (pointerdown)=\"$event.preventDefault()\">\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 (pinnedStartColumns.length > 0) {\n        <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: { $implicit: this, columns: pinnedStartColumns }\"></ng-container>\n    }\n    <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [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 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n            </div>\n        }\n        @else {\n            <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n        }\n    </ng-template>\n    @if (pinnedEndColumns.length > 0) {\n        <ng-container *ngTemplateOutlet=\"pinnedCellsTemplate; context: { $implicit: this, columns: pinnedEndColumns }\"></ng-container>\n    }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n    <div class=\"igx-grid__cbx-padding\">\n        <igx-checkbox\n            [tabindex]=\"-1\"\n            [readonly]=\"true\"\n            [checked]=\"selected\"\n            [indeterminate]=\"indeterminate\"\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 #pinnedCellsTemplate let-col let-columns=\"columns\">\n    @for (col of columns | 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 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n            </div>\n        }\n        @else {\n            <ng-container *ngTemplateOutlet=\"col.visibleIndex === 0 ? treeCellTemplate : cellTemplate; context: { $implicit: this, column: col }\"></ng-container>\n        }\n    }\n</ng-template>\n\n<ng-template #cellTemplate let-col=\"column\">\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        [class.igx-grid__td--pinned]=\"col.pinned\"\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--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        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [firstPinned]=\"col.isFirstPinned\"\n        [lastPinned]=\"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        #treeCell>\n    </igx-grid-cell>\n</ng-template>\n<ng-template #treeCellTemplate let-col=\"column\">\n    <igx-tree-grid-cell\n        class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-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--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        [level]=\"treeRow.level\"\n        [expanded]=\"expanded\"\n        [showIndicator]=\"showIndicator\"\n        [editMode]=\"col.editable && this.grid.crudService.targetInEdit(index, col.index)\"\n        [column]=\"col\"\n        [formatter]=\"col.formatter\"\n        [intRow]=\"this\"\n        [lastPinned]=\"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        [isLoading]=\"isLoading\"\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        #treeCell>\n    </igx-tree-grid-cell>\n</ng-template>\n\n","import { AfterContentInit, Component, Input, IterableDiffer, IterableDiffers, OnDestroy, booleanAttribute, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IChipsAreaReorderEventArgs, IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxDropDirective } from 'igniteui-angular/directives';\nimport { IGroupingExpression, ISortingExpression } from 'igniteui-angular/core';\nimport { IgxGroupAreaDropDirective, IgxGroupByAreaDirective, IgxGroupByMetaPipe } from 'igniteui-angular/grids/core';\n\n/**\n * An internal component representing the group-by drop area for the igx-grid component.\n *\n * @hidden @internal\n */\n@Component({\n    selector: 'igx-tree-grid-group-by-area',\n    templateUrl: '../../core/src/grouping/group-by-area.component.html',\n    providers: [{ provide: IgxGroupByAreaDirective, useExisting: IgxTreeGridGroupByAreaComponent }],\n    imports: [IgxChipsAreaComponent, IgxChipComponent, IgxIconComponent, IgxSuffixDirective, IgxGroupAreaDropDirective, IgxDropDirective, NgTemplateOutlet, IgxGroupByMetaPipe]\n})\nexport class IgxTreeGridGroupByAreaComponent extends IgxGroupByAreaDirective implements AfterContentInit, OnDestroy {\n    private differs = inject(IterableDiffers);\n\n    @Input({ transform: booleanAttribute })\n    public get hideGroupedColumns() {\n        return this._hideGroupedColumns;\n    }\n\n    public set hideGroupedColumns(value: boolean) {\n        if (this.grid?.columns && this.expressions) {\n            this.setColumnsVisibility(value);\n        }\n\n        this._hideGroupedColumns = value;\n    }\n\n    private _hideGroupedColumns = false;\n    private groupingDiffer: IterableDiffer<IGroupingExpression>;\n    private destroy$ = new Subject<any>();\n\n    public ngAfterContentInit(): void {\n        if (this.grid.columns && this.expressions) {\n            this.groupingDiffer = this.differs.find(this.expressions).create();\n            this.updateColumnsVisibility();\n        }\n\n        this.grid.sortingExpressionsChange.pipe(takeUntil(this.destroy$)).subscribe((sortingExpressions: ISortingExpression[]) => {\n            if (!this.expressions || !this.expressions.length) {\n                return;\n            }\n\n            let changed = false;\n\n            sortingExpressions.forEach((sortExpr: ISortingExpression) => {\n                const fieldName = sortExpr.fieldName;\n                const groupingExpr = this.expressions.find(ex => ex.fieldName === fieldName);\n                if (groupingExpr && groupingExpr.dir !== sortExpr.dir) {\n                    groupingExpr.dir = sortExpr.dir;\n                    changed = true;\n                }\n            });\n\n            if (changed) {\n                this.expressions = [...this.expressions];\n            }\n        });\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    public handleReorder(event: IChipsAreaReorderEventArgs) {\n        const { chipsArray, originalEvent } = event;\n        const newExpressions = this.getReorderedExpressions(chipsArray);\n\n        this.chipExpressions = newExpressions;\n\n        // When reordered using keyboard navigation, we don't have `onMoveEnd` event.\n        if (originalEvent instanceof KeyboardEvent) {\n            this.expressions = newExpressions;\n        }\n    }\n\n    public handleMoveEnd() {\n        this.expressions = this.chipExpressions;\n    }\n\n    public groupBy(expression: IGroupingExpression) {\n        this.expressions.push(expression);\n        this.expressions = [...this.expressions];\n    }\n\n    public clearGrouping(name: string) {\n        this.expressions = this.expressions.filter(item => item.fieldName !== name);\n        this.grid.sortingExpressions = this.grid.sortingExpressions.filter(item => item.fieldName !== name);\n        this.grid.notifyChanges(true);\n    }\n\n    protected override expressionsChanged() {\n        this.updateColumnsVisibility();\n    }\n\n    private updateColumnsVisibility() {\n        if (this.groupingDiffer && this.grid.columns && !this.grid.hasColumnLayouts) {\n            const changes = this.groupingDiffer.diff(this.expressions);\n            if (changes && this.grid.columns.length > 0) {\n                changes.forEachAddedItem((rec) => {\n                    const col = this.grid.getColumnByName(rec.item.fieldName);\n                    col.hidden = this.hideGroupedColumns;\n                });\n                changes.forEachRemovedItem((rec) => {\n                    const col = this.grid.getColumnByName(rec.item.fieldName);\n                    col.hidden = false;\n                });\n            }\n        }\n    }\n\n    private setColumnsVisibility(value) {\n        if (this.grid.columns.length > 0 && !this.grid.hasColumnLayouts) {\n            this.expressions.forEach((expr) => {\n                const col = this.grid.getColumnByName(expr.fieldName);\n                col.hidden = value;\n            });\n        }\n    }\n}\n\n","<igx-chips-area (reorder)=\"handleReorder($event)\" (moveEnd)=\"handleMoveEnd()\">\n    @for (expression of chipExpressions; track expression.fieldName; let last = $last) {\n        <igx-chip\n            [id]=\"expression.fieldName\"\n            [title]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title\"\n            [removable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            [draggable]=\"(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            [disabled]=\"!(expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).groupable\"\n            (keyDown)=\"handleKeyDown($event.owner.id, $event.originalEvent)\"\n            (remove)=\"clearGrouping($event.owner.id)\"\n            (chipClick)=\"handleClick(expression.fieldName)\"\n        >\n            <span>{{ (expression.fieldName | igxGroupByMeta:grid:grid.groupablePipeTrigger).title }}</span>\n            <igx-icon\n                family=\"default\"\n                [name]=\"expression.dir === 1 ? 'sort_asc' : 'sort_desc'\"\n                igxSuffix>\n            </igx-icon>\n        </igx-chip>\n\n        <span class=\"igx-grid-grouparea__connector\">\n            <igx-icon\n                family=\"default\"\n                name=\"arrow_forward\"\n                [hidden]=\"(last && !dropAreaVisible)\">\n            </igx-icon>\n        </span>\n    }\n    <div igxGroupAreaDrop\n        class=\"igx-drop-area\"\n        [attr.gridId]=\"grid.id\"\n        [hidden]=\"!dropAreaVisible\"\n        (igxDrop)=\"onDragDrop($event)\"\n    >\n        <ng-container *ngTemplateOutlet=\"dropAreaTemplate || default\"></ng-container>\n    </div>\n</igx-chips-area>\n\n<ng-template #default>\n    <igx-icon\n        family=\"default\"\n        name=\"group_work\"\n        class=\"igx-drop-area__icon\">\n    </igx-icon>\n    <span class=\"igx-drop-area__text\">{{ dropAreaMessage }}</span>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, HostBinding, Input, OnInit, TemplateRef, ContentChild, AfterContentInit, ViewChild, DoCheck, AfterViewInit, CUSTOM_ELEMENTS_SCHEMA, booleanAttribute, inject } from '@angular/core';\nimport { NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';\nimport { IgxTreeGridAPIService } from './tree-grid-api.service';\nimport { IgxGridBaseDirective, IgxGridCellMergePipe, IgxGridUnmergeActivePipe } from 'igniteui-angular/grids/grid';\nimport {\n    CellType,\n    GridSelectionMode,\n    GridType,\n    IGX_GRID_BASE,\n    IGX_GRID_SERVICE_BASE,\n    IgxColumnComponent,\n    IgxColumnMovingDropDirective,\n    IgxColumnResizingService,\n    IgxFilteringService,\n    IgxGridBodyDirective,\n    IgxGridCell,\n    IgxGridColumnResizerComponent,\n    IgxGridCRUDService,\n    IgxGridDragSelectDirective,\n    IgxGridHeaderRowComponent,\n    IgxGridNavigationService,\n    IgxGridRowClassesPipe,\n    IgxGridRowPinningPipe,\n    IgxGridRowStylesPipe,\n    IgxGridSelectionService,\n    IgxGridSummaryService,\n    IgxGridTransaction,\n    IgxGridValidationService,\n    IgxHasVisibleColumnsPipe,\n    IgxRowEditTabStopDirective,\n    IgxStringReplacePipe,\n    IgxSummaryDataPipe,\n    IgxSummaryRow,\n    IgxSummaryRowComponent,\n    IgxTreeGridRow,\n    IRowDataCancelableEventArgs,\n    IRowDataEventArgs,\n    IRowToggleEventArgs,\n    RowType\n} from 'igniteui-angular/grids/core';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { IgxRowLoadingIndicatorTemplateDirective } from './tree-grid.directives';\nimport { IgxTreeGridSelectionService } from './tree-grid-selection.service';\nimport { DefaultTreeGridMergeStrategy, HierarchicalState, HierarchicalTransaction, HierarchicalTransactionService, IGridMergeStrategy, IgxHierarchicalTransactionFactory, IgxOverlayOutletDirective, ITreeGridRecord, mergeObjects, StateUpdateEvent, TransactionEventOrigin, TransactionType, TreeGridFilteringStrategy } from 'igniteui-angular/core';\nimport { IgxTreeGridSummaryPipe } from './tree-grid.summary.pipe';\nimport { IgxTreeGridFilteringPipe } from './tree-grid.filtering.pipe';\nimport { IgxTreeGridHierarchizingPipe, IgxTreeGridFlatteningPipe, IgxTreeGridSortingPipe, IgxTreeGridPagingPipe, IgxTreeGridTransactionPipe, IgxTreeGridNormalizeRecordsPipe, IgxTreeGridAddRowPipe } from './tree-grid.pipes';\nimport { IgxTreeGridRowComponent } from './tree-grid-row.component';\nimport { 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 { IgxTreeGridGroupByAreaComponent } from './tree-grid-group-by-area.component';\n\nlet NEXT_ID = 0;\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 * **Ignite UI for Angular Tree Grid** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid)\n *\n * The Ignite UI Tree Grid displays and manipulates hierarchical data with consistent schema formatted as a table and\n * provides features such as sorting, filtering, editing, column pinning, paging, column moving and hiding.\n *\n * Example:\n * ```html\n * <igx-tree-grid [data]=\"employeeData\" primaryKey=\"employeeID\" foreignKey=\"PID\" [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-tree-grid>\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-tree-grid',\n    templateUrl: 'tree-grid.component.html',\n    providers: [\n        IgxGridCRUDService,\n        IgxGridValidationService,\n        IgxGridSummaryService,\n        IgxGridNavigationService,\n        { provide: IgxGridSelectionService, useClass: IgxTreeGridSelectionService },\n        { provide: IGX_GRID_SERVICE_BASE, useClass: IgxTreeGridAPIService },\n        { provide: IGX_GRID_BASE, useExisting: IgxTreeGridComponent },\n        IgxFilteringService,\n        IgxColumnResizingService,\n        IgxForOfSyncService,\n        IgxForOfScrollSyncService\n    ],\n    imports: [\n        NgClass,\n        NgStyle,\n        NgTemplateOutlet,\n        IgxGridHeaderRowComponent,\n        IgxGridBodyDirective,\n        IgxGridDragSelectDirective,\n        IgxColumnMovingDropDirective,\n        IgxGridForOfDirective,\n        IgxTemplateOutletDirective,\n        IgxTreeGridRowComponent,\n        IgxSummaryRowComponent,\n        IgxOverlayOutletDirective,\n        IgxToggleDirective,\n        IgxCircularProgressBarComponent,\n        IgxSnackbarComponent,\n        IgxButtonDirective,\n        IgxRippleDirective,\n        IgxRowEditTabStopDirective,\n        IgxIconComponent,\n        IgxGridColumnResizerComponent,\n        IgxHasVisibleColumnsPipe,\n        IgxGridRowPinningPipe,\n        IgxGridRowClassesPipe,\n        IgxGridRowStylesPipe,\n        IgxSummaryDataPipe,\n        IgxTreeGridHierarchizingPipe,\n        IgxTreeGridFlatteningPipe,\n        IgxTreeGridSortingPipe,\n        IgxTreeGridFilteringPipe,\n        IgxTreeGridPagingPipe,\n        IgxTreeGridTransactionPipe,\n        IgxTreeGridSummaryPipe,\n        IgxTreeGridNormalizeRecordsPipe,\n        IgxTreeGridAddRowPipe,\n        IgxStringReplacePipe,\n        IgxGridCellMergePipe,\n        IgxScrollInertiaDirective,\n        IgxGridUnmergeActivePipe\n    ],\n    schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class IgxTreeGridComponent extends IgxGridBaseDirective implements GridType, OnInit, AfterViewInit, DoCheck, AfterContentInit {\n    protected override _diTransactions = inject<HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>>(IgxGridTransaction, { optional: true, });\n    protected override transactionFactory = inject(IgxHierarchicalTransactionFactory);\n\n    /**\n     * Sets the child data key of the `IgxTreeGridComponent`.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" [autoGenerate]=\"true\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public childDataKey: string;\n\n    /**\n     * Sets the foreign key of the `IgxTreeGridComponent`.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [autoGenerate]=\"true\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public foreignKey: string;\n\n    /**\n     * Sets the key indicating whether a row has children.\n     * This property is only used for load on demand scenarios.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\"\n     *                [loadChildrenOnDemand]=\"loadChildren\"\n     *                [hasChildrenKey]=\"'hasEmployees'\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public hasChildrenKey: string;\n\n    /**\n     * Sets whether child records should be deleted when their parent gets deleted.\n     * By default it is set to true and deletes all children along with the parent.\n     * ```html\n     * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" cascadeOnDelete=\"false\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public cascadeOnDelete = true;\n\n    /* csSuppress */\n    /**\n     * Sets a callback for loading child rows on demand.\n     * ```html\n     * <igx-tree-grid [data]=\"employeeData\" [primaryKey]=\"'employeeID'\" [foreignKey]=\"'parentID'\" [loadChildrenOnDemand]=\"loadChildren\">\n     * </igx-tree-grid>\n     * ```\n     * ```typescript\n     * public loadChildren = (parentID: any, done: (children: any[]) => void) => {\n     *     this.dataService.getData(parentID, children => done(children));\n     * }\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public loadChildrenOnDemand: (parentID: any, done: (children: any[]) => void) => void;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('attr.role')\n    public role = 'treegrid';\n\n    /**\n     * Sets the value of the `id` attribute. If not provided it will be automatically generated.\n     * ```html\n     * <igx-tree-grid [id]=\"'igx-tree-grid-1'\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public id = `igx-tree-grid-${NEXT_ID++}`;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxTreeGridGroupByAreaComponent, { read: IgxTreeGridGroupByAreaComponent })\n    public treeGroupArea: IgxTreeGridGroupByAreaComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('record_template', { read: TemplateRef, static: true })\n    protected recordTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('summary_template', { read: TemplateRef, static: true })\n    protected summaryTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxRowLoadingIndicatorTemplateDirective, { read: IgxRowLoadingIndicatorTemplateDirective })\n    protected rowLoadingTemplate: IgxRowLoadingIndicatorTemplateDirective;\n\n    /**\n     * @hidden\n     */\n    public flatData: any[] | null;\n\n    /**\n     * @hidden\n     */\n    public processedExpandedFlatData: any[] | null;\n\n    /**\n     * Returns an array of the root level `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the root record with index=2\n     * const states = this.grid.rootRecords[2];\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public rootRecords: ITreeGridRecord[];\n\n    /* blazorSuppress */\n    /**\n     * Returns a map of all `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the record with primaryKey=2\n     * const states = this.grid.records.get(2);\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public records: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n    /**\n     * Returns an array of processed (filtered and sorted) root `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the processed root record with index=2\n     * const states = this.grid.processedRootRecords[2];\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public processedRootRecords: ITreeGridRecord[];\n\n    /* blazorSuppress */\n    /**\n     * Returns a map of all processed (filtered and sorted) `ITreeGridRecord`s.\n     * ```typescript\n     * // gets the processed record with primaryKey=2\n     * const states = this.grid.processedRecords.get(2);\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public processedRecords: Map<any, ITreeGridRecord> = new Map<any, ITreeGridRecord>();\n\n    /**\n     * @hidden\n     */\n    public loadingRows = new Set<any>();\n\n    protected override _filterStrategy = new TreeGridFilteringStrategy();\n    protected override _transactions: HierarchicalTransactionService<HierarchicalTransaction, HierarchicalState>;\n    protected override _mergeStrategy: IGridMergeStrategy = new DefaultTreeGridMergeStrategy();\n    private _data;\n    private _rowLoadingIndicatorTemplate: TemplateRef<void>;\n    private _expansionDepth = Infinity;\n\n    /* treatAsRef */\n    /**\n     * Gets/Sets the array of data that populates the component.\n     * ```html\n     * <igx-tree-grid [data]=\"Data\" [autoGenerate]=\"true\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public get data(): any[] | null {\n        return this._data;\n    }\n\n    /* treatAsRef */\n    public set data(value: any[] | null) {\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        if (this.autoGenerate && this._data.length > 0 && this.shouldRecreateColumns(oldData, this._data)) {\n            this.setupColumns();\n        }\n        this.checkPrimaryKeyField();\n        this.cdr.markForCheck();\n    }\n\n    /** @hidden @internal */\n    public override get type(): GridType[\"type\"] {\n        return 'tree';\n    }\n\n    /**\n     * Get transactions service for the grid.\n     *\n     * @experimental @hidden\n     */\n    public override get transactions() {\n        if (this._diTransactions && !this.batchEditing) {\n            return this._diTransactions;\n        }\n        return this._transactions;\n    }\n\n    /**\n     * Sets the count of levels to be expanded in the `IgxTreeGridComponent`. By default it is\n     * set to `Infinity` which means all levels would be expanded.\n     * ```html\n     * <igx-tree-grid #grid [data]=\"employeeData\" [childDataKey]=\"'employees'\" expansionDepth=\"1\" [autoGenerate]=\"true\"></igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public get expansionDepth(): number {\n        return this._expansionDepth;\n    }\n\n    public set expansionDepth(value: number) {\n        this._expansionDepth = value;\n        this.notifyChanges();\n    }\n\n    /**\n     * Template for the row loading indicator when load on demand is enabled.\n     * ```html\n     * <ng-template #rowLoadingTemplate>\n     *     <igx-icon>loop</igx-icon>\n     * </ng-template>\n     *\n     * <igx-tree-grid #grid [data]=\"employeeData\" [primaryKey]=\"'ID'\" [foreignKey]=\"'parentID'\"\n     *                [loadChildrenOnDemand]=\"loadChildren\"\n     *                [rowLoadingIndicatorTemplate]=\"rowLoadingTemplate\">\n     * </igx-tree-grid>\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    @Input()\n    public get rowLoadingIndicatorTemplate(): TemplateRef<void> {\n        return this._rowLoadingIndicatorTemplate;\n    }\n\n    public set rowLoadingIndicatorTemplate(value: TemplateRef<void>) {\n        this._rowLoadingIndicatorTemplate = value;\n        this.notifyChanges();\n    }\n\n    // Kind of stupid\n    // private get _gridAPI(): IgxTreeGridAPIService {\n    //     return this.gridAPI as IgxTreeGridAPIService;\n    // }\n\n    /**\n     * @hidden\n     */\n    public override ngOnInit() {\n        super.ngOnInit();\n\n        this.rowToggle.pipe(takeUntil(this.destroy$)).subscribe((args) => {\n            this.loadChildrenOnRowExpansion(args);\n        });\n\n        // TODO: cascade selection logic should be refactor to be handled in the already existing subs\n        this.rowAddedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                let rec = this.gridAPI.get_rec_by_id(this.primaryKey ? args.data[this.primaryKey] : args.data);\n                if (rec && rec.parent) {\n                    this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n                        new Set([rec.parent]), rec.parent.key);\n                } else {\n                    // The record is still not available\n                    // Wait for the change detection to update records through pipes\n                    requestAnimationFrame(() => {\n                        rec = this.gridAPI.get_rec_by_id(this.primaryKey ?\n                            args.data[this.primaryKey] : args.data);\n                        if (rec && rec.parent) {\n                            this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n                                new Set([rec.parent]), rec.parent.key);\n                        }\n                        this.notifyChanges();\n                    });\n                }\n            }\n        });\n\n        this.rowDeletedNotifier.pipe(takeUntil(this.destroy$)).subscribe(args => {\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                if (args.data) {\n                    const rec = this.gridAPI.get_rec_by_id(\n                        this.primaryKey ? args.data[this.primaryKey] : args.data);\n                    this.handleCascadeSelection(args, rec);\n                } else {\n                    // if a row has been added and before commiting the transaction deleted\n                    const leafRowsDirectParents = new Set<any>();\n                    this.records.forEach(record => {\n                        if (record && (!record.children || record.children.length === 0) && record.parent) {\n                            leafRowsDirectParents.add(record.parent);\n                        }\n                    });\n                    // Wait for the change detection to update records through pipes\n                    requestAnimationFrame(() => {\n                        this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n                        this.notifyChanges();\n                    });\n                }\n            }\n        });\n\n        this.filteringDone.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                const leafRowsDirectParents = new Set<any>();\n                this.records.forEach(record => {\n                    if (record && (!record.children || record.children.length === 0) && record.parent) {\n                        leafRowsDirectParents.add(record.parent);\n                    }\n                });\n                this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(leafRowsDirectParents);\n                this.notifyChanges();\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterViewInit() {\n        super.ngAfterViewInit();\n        // TODO: pipesExectured event\n        // run after change detection in super triggers pipes for records structure\n        if (this.rowSelection === GridSelectionMode.multipleCascade && this.selectedRows.length) {\n            const selRows = this.selectedRows;\n            this.selectionService.clearRowSelection();\n            this.selectRows(selRows, true);\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        if (this.rowLoadingTemplate) {\n            this._rowLoadingIndicatorTemplate = this.rowLoadingTemplate.template;\n        }\n        super.ngAfterContentInit();\n    }\n\n    public override getDefaultExpandState(record: ITreeGridRecord): boolean {\n        return record.children && record.children.length && record.level < this.expansionDepth;\n    }\n\n    /**\n     * Expands all rows.\n     * ```typescript\n     * this.grid.expandAll();\n     * ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public override expandAll() {\n        this._expansionDepth = Infinity;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * Collapses all rows.\n     *\n     * ```typescript\n     * this.grid.collapseAll();\n     *  ```\n     *\n     * @memberof IgxTreeGridComponent\n     */\n    public override collapseAll() {\n        this._expansionDepth = 0;\n        this.expansionStates = new Map<any, boolean>();\n    }\n\n    /**\n     * @hidden\n     */\n    public override refreshGridState(args?: IRowDataEventArgs) {\n        super.refreshGridState();\n        if (this.primaryKey && this.foreignKey && args) {\n            const rowID = args.data[this.foreignKey];\n            this.summaryService.clearSummaryCache({ rowID });\n            this.pipeTrigger++;\n            this.cdr.detectChanges();\n        }\n    }\n\n    /* blazorCSSuppress */\n    /**\n     * Creates a new `IgxTreeGridRowComponent` with the given data. If a parentRowID is not specified, the newly created\n     * row would be added at the root level. Otherwise, it would be added as a child of the row whose primaryKey matches\n     * the specified parentRowID. If the parentRowID does not exist, an error would be thrown.\n     * ```typescript\n     * const record = {\n     *     ID: this.grid.data[this.grid1.data.length - 1].ID + 1,\n     *     Name: this.newRecord\n     * };\n     * this.grid.addRow(record, 1); // Adds a new child row to the row with ID=1.\n     * ```\n     *\n     * @param data\n     * @param parentRowID\n     * @memberof IgxTreeGridComponent\n     */\n    // TODO: remove evt emission\n    public override addRow(data: any, parentRowID?: any) {\n        this.crudService.endEdit(true);\n        this.gridAPI.addRowToData(data, parentRowID);\n\n        this.rowAddedNotifier.next({\n            data: data,\n            rowData: data, owner: this,\n            primaryKey: data[this.primaryKey],\n            rowKey: data[this.primaryKey]\n        });\n        this.pipeTrigger++;\n        this.notifyChanges();\n    }\n\n    /**\n     * Enters add mode by spawning the UI with the context of the specified row by index.\n     *\n     * @remarks\n     * Accepted values for index are integers from 0 to this.grid.dataView.length\n     * @remarks\n     * When adding the row as a child, the parent row is the specified row.\n     * @remarks\n     * To spawn the UI on top, call the function with index = null or a negative number.\n     * In this case trying to add this row as a child will result in error.\n     * @example\n     * ```typescript\n     * this.grid.beginAddRowByIndex(10);\n     * this.grid.beginAddRowByIndex(10, true);\n     * this.grid.beginAddRowByIndex(null);\n     * ```\n     * @param index - The index to spawn the UI at. Accepts integers from 0 to this.grid.dataView.length\n     * @param asChild - Whether the record should be added as a child. Only applicable to igxTreeGrid.\n     */\n    public override beginAddRowByIndex(index: number, asChild?: boolean): void {\n        if (index === null || index < 0) {\n            return this.beginAddRowById(null, asChild);\n        }\n        return this._addRowForIndex(index - 1, asChild);\n    }\n\n    /**\n     * @hidden\n     */\n    public getContext(rowData: any, rowIndex: number, pinned?: boolean): any {\n        return {\n            $implicit: this.isGhostRecord(rowData) || this.isRecordMerged(rowData) ? rowData.recordRef : rowData,\n            index: this.getDataViewIndex(rowIndex, pinned),\n            templateID: {\n                type: this.isSummaryRow(rowData) ? 'summaryRow' : 'dataRow',\n                id: null\n            },\n            disabled: this.isGhostRecord(rowData) ? rowData.recordRef.isFilteredOutParent === undefined : false,\n            metaData: this.isRecordMerged(rowData) ? rowData : null\n        };\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public override 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 override isRecordPinned(rec) {\n        return this.getInitialPinnedIndex(rec.data) !== -1;\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        let source = [];\n\n        const process = (record) => {\n            if (record.summaries) {\n                source.push(null);\n                return;\n            }\n            source.push(record.data);\n        };\n\n        this.unpinnedDataView.forEach(process);\n        source = this.isRowPinningToTop ? [...this.pinnedDataView, ...source] : [...source, ...this.pinnedDataView];\n        return this.extractDataFromSelection(source, formatters, headers);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override getEmptyRecordObjectFor(inTreeRow: RowType) {\n        const treeRowRec = inTreeRow?.treeRow || null;\n        const row = { ...treeRowRec };\n        const data = treeRowRec?.data || {};\n        row.data = { ...data };\n        Object.keys(row.data).forEach(key => {\n            // persist foreign key if one is set.\n            if (this.foreignKey && key === this.foreignKey) {\n                row.data[key] = treeRowRec.data[this.crudService.addRowParent?.asChild ? this.primaryKey : key];\n            } else {\n                row.data[key] = undefined;\n            }\n        });\n        let id = this.generateRowID();\n        const rootRecPK = this.foreignKey && this.rootRecords && this.rootRecords.length > 0 ?\n            this.rootRecords[0].data[this.foreignKey] : null;\n        if (id === rootRecPK) {\n            // safeguard in case generated id matches the root foreign key.\n            id = this.generateRowID();\n        }\n        row.key = id;\n        row.data[this.primaryKey] = id;\n        return { rowID: id, data: row.data, recordRef: row };\n    }\n\n    /** @hidden */\n    public override deleteRowById(rowId: any): any {\n        //  if this is flat self-referencing data, and CascadeOnDelete is set to true\n        //  and if we have transactions we should start pending transaction. This allows\n        //  us in case of delete action to delete all child rows as single undo action\n        const args: IRowDataCancelableEventArgs = {\n            rowID: rowId,\n            primaryKey: rowId,\n            rowKey: rowId,\n            cancel: false,\n            rowData: this.getRowData(rowId),\n            data: this.getRowData(rowId),\n            oldValue: null,\n            owner: this\n        };\n        this.rowDelete.emit(args);\n        if (args.cancel) {\n            return;\n        }\n\n        const record = this.gridAPI.deleteRowById(rowId);\n        const key = record[this.primaryKey];\n        if (record !== null && record !== undefined) {\n            const rowDeletedEventArgs: IRowDataEventArgs = {\n                data: record,\n                rowData: record,\n                owner: this,\n                primaryKey: key,\n                rowKey: key\n            };\n            this.rowDeleted.emit(rowDeletedEventArgs);\n        }\n        return record;\n    }\n\n    /**\n     * Returns the `IgxTreeGridRow` by index.\n     *\n     * @example\n     * ```typescript\n     * const myRow = treeGrid.getRowByIndex(1);\n     * ```\n     * @param index\n     */\n    public getRowByIndex(index: number): RowType {\n        if (index < 0 || index >= this.dataView.length) {\n            return undefined;\n        }\n        return this.createRow(index);\n    }\n\n    /**\n     * Returns the `RowType` object by the specified primary key.\n     *\n     * @example\n     * ```typescript\n     * const myRow = this.treeGrid.getRowByIndex(1);\n     * ```\n     * @param index\n     */\n    public getRowByKey(key: any): RowType {\n        const rec = this.filteredSortedData ? this.primaryKey ? this.filteredSortedData.find(r => r[this.primaryKey] === key) :\n            this.filteredSortedData.find(r => r === key) : undefined;\n        const index = this.dataView.findIndex(r => r.data && r.data === rec);\n        if (index < 0 || index >= this.filteredSortedData.length) {\n            return undefined;\n        }\n        return new IgxTreeGridRow(this as any, index, rec);\n    }\n\n    /**\n     * Returns the collection of all RowType for current page.\n     *\n     * @hidden @internal\n     */\n    public allRows(): RowType[] {\n        return this.dataView.map((rec, index) => this.createRow(index));\n    }\n\n    /**\n     * Returns the collection of `IgxTreeGridRow`s for current page.\n     *\n     * @hidden @internal\n     */\n    public dataRows(): RowType[] {\n        return this.allRows().filter(row => row instanceof IgxTreeGridRow);\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 IgxTreeGridRow && column) {\n            return new IgxGridCell(this as any, rowIndex, 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 as any, 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    /** @hidden */\n    public generateRowPath(rowId: any): any[] {\n        const path: any[] = [];\n        let record = this.records.get(rowId);\n\n        while (record.parent) {\n            path.push(record.parent.key);\n            record = record.parent;\n        }\n\n        return path.reverse();\n    }\n\n    /** @hidden */\n    public isTreeRow(record: any): boolean {\n        return record.key !== undefined && record.data;\n    }\n\n    /** @hidden */\n    public override getUnpinnedIndexById(id) {\n        return this.unpinnedRecords.findIndex(x => x.data[this.primaryKey] === id);\n    }\n\n    /**\n     * @hidden\n     */\n    public createRow(index: number, data?: any): RowType {\n        let row: RowType;\n        const dataIndex = this._getDataViewIndex(index);\n        const rec: any = data ?? this.dataView[dataIndex];\n\n        if (this.isSummaryRow(rec)) {\n            row = new IgxSummaryRow(this as any, index, rec.summaries);\n        }\n\n        if (!row && rec) {\n            const isTreeRow = this.isTreeRow(rec);\n            const dataRec = isTreeRow ? rec.data : rec;\n            const treeRow = isTreeRow ? rec : undefined;\n            row = new IgxTreeGridRow(this as any, index, dataRec, treeRow);\n        }\n\n        return row;\n    }\n\n    protected override generateDataFields(data: any[]): string[] {\n        return super.generateDataFields(data).filter(field => field !== this.childDataKey);\n    }\n\n    protected override transactionStatusUpdate(event: StateUpdateEvent) {\n        let actions = [];\n        if (event.origin === TransactionEventOrigin.REDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.DELETE) : [];\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                this.handleCascadeSelection(event);\n            }\n        } else if (event.origin === TransactionEventOrigin.UNDO) {\n            actions = event.actions ? event.actions.filter(x => x.transaction.type === TransactionType.ADD) : [];\n            if (this.rowSelection === GridSelectionMode.multipleCascade) {\n                if (event.actions[0].transaction.type === 'add') {\n                    const rec = this.gridAPI.get_rec_by_id(event.actions[0].transaction.id);\n                    this.handleCascadeSelection(event, rec);\n                } else {\n                    this.handleCascadeSelection(event);\n                }\n            }\n        }\n        if (actions.length) {\n            for (const action of actions) {\n                this.deselectChildren(action.transaction.id);\n            }\n        }\n        super.transactionStatusUpdate(event);\n    }\n\n    protected findRecordIndexInView(rec) {\n        return this.dataView.findIndex(x => x.data[this.primaryKey] === rec[this.primaryKey]);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override getDataBasedBodyHeight(): number {\n        return !this.flatData || (this.flatData.length < this._defaultTargetRecordNumber) ?\n            0 : this.defaultTargetBodyHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    protected override scrollTo(row: any | number, column: any | number): void {\n        let delayScrolling = false;\n        let record: ITreeGridRecord;\n\n        if (typeof (row) !== 'number') {\n            const rowData = row;\n            const rowID = this.gridAPI.get_row_id(rowData);\n            record = this.processedRecords.get(rowID);\n            this.gridAPI.expand_path_to_record(record);\n\n            if (this.paginator) {\n                const rowIndex = this.processedExpandedFlatData.indexOf(rowData);\n                const page = Math.floor(rowIndex / this.perPage);\n\n                if (this.page !== page) {\n                    delayScrolling = true;\n                    this.page = page;\n                }\n            }\n        }\n\n        if (delayScrolling) {\n            this.verticalScrollContainer.dataChanged.pipe(first()).subscribe(() => {\n                this.scrollDirective(this.verticalScrollContainer,\n                    typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n            });\n        } else {\n            this.scrollDirective(this.verticalScrollContainer,\n                typeof (row) === 'number' ? row : this.unpinnedDataView.indexOf(record));\n        }\n\n        this.scrollToHorizontally(column);\n    }\n\n    protected override writeToData(rowIndex: number, value: any) {\n        mergeObjects(this.flatData[rowIndex], value);\n    }\n\n    /**\n     * @hidden\n     */\n    protected override initColumns(collection: IgxColumnComponent[], cb: (args: any) => void = null) {\n        if (this.hasColumnLayouts) {\n            // invalid configuration - tree grid should not allow column layouts\n            // remove column layouts\n            const nonColumnLayoutColumns = this.columns.filter((col) => !col.columnLayout && !col.columnLayoutChild);\n            this.updateColumns(nonColumnLayoutColumns);\n        }\n        super.initColumns(collection, cb);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    protected override getGroupAreaHeight(): number {\n        return this.treeGroupArea ? this.getComputedHeight(this.treeGroupArea.nativeElement) : 0;\n    }\n\n    /** {@link triggerPipes} will re-create pinnedData on CRUD operations */\n    protected trackPinnedRowData(record: ITreeGridRecord) {\n        // TODO FIX: pipeline data doesn't match end interface (¬_¬ )\n        // return record.key || (record as any).rowID;\n        return record;\n    }\n\n    /**\n     * @description A recursive way to deselect all selected children of a given record\n     * @param recordID ID of the record whose children to deselect\n     * @hidden\n     * @internal\n     */\n    private deselectChildren(recordID): void {\n        const selectedChildren = [];\n        // G.E. Apr 28, 2021 #9465 Records which are not in view can also be selected so we need to\n        // deselect them as well, hence using 'records' map instead of getRowByKey() method which will\n        // return only row components (i.e. records in view).\n        const rowToDeselect = this.records.get(recordID);\n        this.selectionService.deselectRowsWithNoEvent([recordID]);\n        this.gridAPI.get_selected_children(rowToDeselect, selectedChildren);\n        if (selectedChildren.length > 0) {\n            selectedChildren.forEach(x => this.deselectChildren(x));\n        }\n    }\n\n    private addChildRows(children: any[], parentID: any) {\n        if (this.primaryKey && this.foreignKey) {\n            for (const child of children) {\n                child[this.foreignKey] = parentID;\n            }\n            this.data.push(...children);\n        } else if (this.childDataKey) {\n            let parent = this.records.get(parentID);\n            let parentData = parent.data;\n\n            if (this.transactions.enabled && this.transactions.getAggregatedChanges(true).length) {\n                const path = [];\n                while (parent) {\n                    path.push(parent.key);\n                    parent = parent.parent;\n                }\n\n                let collection = this.data;\n                let record: any;\n                for (let i = path.length - 1; i >= 0; i--) {\n                    const pid = path[i];\n                    record = collection.find(r => r[this.primaryKey] === pid);\n\n                    if (!record) {\n                        break;\n                    }\n                    collection = record[this.childDataKey];\n                }\n                if (record) {\n                    parentData = record;\n                }\n            }\n\n            parentData[this.childDataKey] = children;\n        }\n        this.selectionService.clearHeaderCBState();\n        this.pipeTrigger++;\n        if (this.rowSelection === GridSelectionMode.multipleCascade) {\n            // Force pipe triggering for building the data structure\n            this.cdr.detectChanges();\n            if (this.selectionService.isRowSelected(parentID)) {\n                this.selectionService.rowSelection.delete(parentID);\n                this.selectionService.selectRowsWithNoEvent([parentID]);\n            }\n        }\n    }\n\n    private loadChildrenOnRowExpansion(args: IRowToggleEventArgs) {\n        if (this.loadChildrenOnDemand) {\n            const parentID = args.rowID;\n\n            if (args.expanded && !this._expansionStates.has(parentID)) {\n                this.loadingRows.add(parentID);\n\n                this.loadChildrenOnDemand(parentID, children => {\n                    this.loadingRows.delete(parentID);\n                    this.addChildRows(children, parentID);\n                    this.notifyChanges();\n                });\n            }\n        }\n    }\n\n    private handleCascadeSelection(event: IRowDataEventArgs | StateUpdateEvent, rec: ITreeGridRecord = null) {\n        // Wait for the change detection to update records through the pipes\n        requestAnimationFrame(() => {\n            if (rec === null) {\n                rec = this.gridAPI.get_rec_by_id((event as StateUpdateEvent).actions[0].transaction.id);\n            }\n            if (rec && rec.parent) {\n                this.gridAPI.grid.selectionService.updateCascadeSelectionOnFilterAndCRUD(\n                    new Set([rec.parent]), rec.parent.key\n                );\n                this.notifyChanges();\n            }\n        });\n    }\n}\n","<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n<ng-content select=\"igx-tree-grid-group-by-area,igc-tree-grid-group-by-area\"></ng-content>\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    (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\" (focus)=\"navigation.focusTbody($event)\" (keydown)=\"navigation.handleNavigation($event)\"\n    (dragStop)=\"selectionService.dragMode = $event\" [attr.aria-activedescendant]=\"activeDescendant\" [attr.role]=\"dataView.length ? null : 'row'\"\n        (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n        [style.height.px]='totalHeight' [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody (scroll)='preventContainerScroll($event)'>\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\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-tree-grid-row class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [treeRow]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n                    [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:hasCellsToMerge:row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n                    [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowData.index:pipeTrigger\" #row>\n                </igx-tree-grid-row>\n                }\n            </div>\n        }\n\n        <ng-template #pinnedRecordsTemplate>\n            @if (data\n                | treeGridTransaction:pipeTrigger\n                | visibleColumns:hasVisibleColumns\n                | treeGridNormalizeRecord:pipeTrigger\n                | treeGridAddRow:true:pipeTrigger\n                | gridRowPinning:id:true:pipeTrigger\n                | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger:true\n                | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger:true\n                | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n                | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData\n            ) {\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 trackPinnedRowData(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-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n        <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData\n        | treeGridTransaction:pipeTrigger\n        | visibleColumns:hasVisibleColumns\n        | treeGridHierarchizing:primaryKey:foreignKey:childDataKey:pipeTrigger\n        | treeGridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:pipeTrigger:filteringPipeTrigger\n        | treeGridSorting:sortingExpressions:treeGroupArea?.expressions:sortStrategy:pipeTrigger\n        | treeGridFlattening:expansionDepth:expansionStates:pipeTrigger\n        | treeGridPaging:!!paginator:page:perPage:pipeTrigger\n        | treeGridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n        | treeGridAddRow: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' [igxForItemSize]=\"renderedRowHeight\" #verticalScrollContainer\n            (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n            <div [attr.data-index]=\"rowIndex\">\n            <ng-template [igxTemplateOutlet]='isSummaryRow(rowData) ? summary_template : record_template'\n                [igxTemplateOutletContext]='getContext(rowData, rowIndex, false)'\n                (beforeViewDetach)=\"viewDetachHandler($event)\"\n                (cachedViewLoaded)='cachedViewLoaded($event)'>\n            </ng-template>\n            </div>\n        </ng-template>\n        <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\"></ng-container>\n        <ng-template #record_template let-rowIndex=\"index\" let-disabledRow=\"disabled\" let-rowData let-metaData=\"metaData\">\n            <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n            </igx-tree-grid-row>\n        </ng-template>\n        <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n            <igx-tree-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [treeRow]=\"rowData\" [metaData]=\"metaData\"\n                [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:row.treeRow.isFilteredOutParent:rowData:pipeTrigger\"\n                [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n            </igx-tree-grid-row>\n        </ng-template>\n        <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n            <igx-grid-summary-row [gridID]=\"id\" [summaries]=\"rowData.summaries\"\n                [firstCellIndentation]=\"rowData.cellIndentation\" [index]=\"rowIndex\"\n                class=\"igx-grid__summaries--body\" role=\"row\" #summaryRow>\n            </igx-grid-summary-row>\n        </ng-template>\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        [style.height.px]='calcHeight'>\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    <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 igxOverlayOutlet #igxBodyOverlayOutlet=\"overlay-outlet\"></div>\n</div>\n\n<div class=\"igx-grid__tfoot\" role=\"rowgroup\" [style.height.px]='summaryRowHeight' #tfoot>\n    <div tabindex=\"0\" (focus)=\"navigation.focusFirstCell(false)\"\n        (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]='[]' #scrollContainer>\n        </ng-template>\n    </div>\n    <div class=\"igx-grid__scroll-end\" [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@if (rowEditable) {\n    <div igxToggle #rowEditingOverlay>\n        <div [className]=\"bannerClass\">\n            <ng-container\n                *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.crudService.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 type=\"button\" igxButton igxRowEditTabStop (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n    <button type=\"button\" igxButton igxRowEditTabStop (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__loading-outlet\" #igxLoadingOverlayOutlet igxOverlayOutlet></div>\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-action-strip,igc-action-strip\"></ng-content>\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { GridType } from 'igniteui-angular/grids/core';\nimport { GridColumnDataType, IGroupingExpression, IgxSorting } from 'igniteui-angular/core';\n\nconst HIDDEN_FIELD_NAME = '_Igx_Hidden_Data_';\n\n/**\n * @hidden\n * @internal\n */\nclass GroupByRecord {\n    public key: string;\n    public value: any;\n    public groups: GroupByRecord[];\n    public records: any[];\n}\n\nexport class ITreeGridAggregation {\n    public field: string;\n    public aggregate: (parent: any, children: any[]) => any;\n}\n\nexport class IgxGroupedTreeGridSorting extends IgxSorting {\n    private static _instance: IgxGroupedTreeGridSorting = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new IgxGroupedTreeGridSorting());\n    }\n\n    protected override getFieldValue(obj: any, key: string, isDate = false, isTime = false): any {\n        const data = obj.data[HIDDEN_FIELD_NAME] ?\n            obj.data.hasOwnProperty(key) ?\n                obj.data :\n                obj.data[HIDDEN_FIELD_NAME] :\n            obj.data;\n\n        return super.getFieldValue(data, key, isDate, isTime);\n    }\n}\n\n/** @hidden */\n@Pipe({\n    name: 'treeGridGrouping',\n    standalone: true\n})\nexport class IgxTreeGridGroupingPipe implements PipeTransform {\n    private grid: GridType;\n\n    public transform(collection: any[],\n                     groupingExpressions: IGroupingExpression[],\n                     groupKey: string,\n                     childDataKey: string,\n                     grid: GridType,\n                     aggregations?: ITreeGridAggregation[]\n                    ): any[] {\n        if (groupingExpressions.length === 0) {\n            return collection;\n        }\n\n        if (groupKey?.toLowerCase() === childDataKey?.toLowerCase()) {\n            throw new Error('Group key and child data key cannot be the same.');\n        }\n\n        this.grid = grid;\n\n        const result = [];\n        const groupedRecords = this.groupByMultiple(collection, groupingExpressions);\n        this.flattenGrouping(groupedRecords, groupKey,\n            childDataKey, result, aggregations);\n\n        return result;\n    }\n\n    private flattenGrouping(groupRecords: GroupByRecord[],\n                            groupKey: string,\n                            childDataKey: string,\n                            data: any[],\n                            aggregations: ITreeGridAggregation[] = []) {\n        for (const groupRecord of groupRecords) {\n            const parent = {};\n            const children = groupRecord.records;\n\n            parent[childDataKey] = [];\n\n            for (const aggregation of aggregations) {\n                parent[aggregation.field] = aggregation.aggregate(parent, children);\n            }\n\n            parent[groupKey] = groupRecord.value + ` (${groupRecord.records.length})`;\n            parent[HIDDEN_FIELD_NAME] = { [groupRecord.key]: groupRecord.value };\n            data.push(parent);\n\n            if (groupRecord.groups) {\n                this.flattenGrouping(groupRecord.groups, groupKey, childDataKey,\n                    parent[childDataKey], aggregations);\n            } else {\n                parent[childDataKey] = children;\n            }\n        }\n    }\n\n    private groupByMultiple(array: any[], groupingExpressions: IGroupingExpression[], index = 0): GroupByRecord[] {\n        const res = this.groupBy(array, groupingExpressions[index]);\n\n        if (index + 1 < groupingExpressions.length) {\n           for (const groupByRecord of res) {\n                groupByRecord.groups = this.groupByMultiple(groupByRecord.records, groupingExpressions, index + 1);\n            }\n        }\n\n        return res;\n    }\n\n    private groupBy(array: any[], groupingExpression: IGroupingExpression): GroupByRecord[] {\n        const key = groupingExpression.fieldName;\n        const column = this.grid?.getColumnByName(key);\n        const isDateTime = column?.dataType === GridColumnDataType.Date ||\n            column?.dataType === GridColumnDataType.DateTime ||\n            column?.dataType === GridColumnDataType.Time;\n        const map: Map<any, GroupByRecord> = new Map<any, GroupByRecord>();\n        for (const record of array) {\n            const value = isDateTime\n                ? this.grid.i18nFormatter.formatDate(record[key], column.pipeArgs.format, this.grid.locale)\n                : record[key];\n\n            let valueCase = value;\n            let groupByRecord: GroupByRecord;\n\n            if (groupingExpression.ignoreCase) {\n                valueCase = value?.toString().toLowerCase();\n            }\n            if (map.has(valueCase)) {\n                groupByRecord = map.get(valueCase);\n            } else {\n                groupByRecord = new GroupByRecord();\n                groupByRecord.key = key;\n                groupByRecord.value = value;\n                groupByRecord.records = [];\n                map.set(valueCase, groupByRecord);\n            }\n\n            groupByRecord.records.push(record);\n        }\n\n        return Array.from(map.values());\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { IgxTreeGridComponent } from './tree-grid.component';\nimport { IgxTreeGridGroupByAreaComponent } from './tree-grid-group-by-area.component';\nimport { IgxTreeGridGroupingPipe } from './tree-grid.grouping.pipe';\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    IgxRowEditTextDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTabStopDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxRowExpandedIndicatorDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\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    IgxGridActionButtonComponent,\n    IgxGridActionsBaseDirective,\n    IgxGridEditingActionsComponent,\n    IgxGridPinningActionsComponent\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: Tree grid directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_TREE_GRID_DIRECTIVES = [\n    IgxTreeGridComponent,\n    IgxTreeGridGroupByAreaComponent,\n    IgxTreeGridGroupingPipe,\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    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_PAGINATOR_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_TREE_GRID_DIRECTIVES\n    ],\n    exports: [\n        ...IGX_TREE_GRID_DIRECTIVES\n    ]\n})\nexport class IgxTreeGridModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}