{"version":3,"file":"igniteui-angular-grids-core.mjs","sources":["../../../projects/igniteui-angular/grids/core/src/common/enums.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-actions.component.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-actions.component.html","../../../projects/igniteui-angular/grids/core/src/column-actions/column-actions-base.directive.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-hiding.directive.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/column-pinning.directive.ts","../../../projects/igniteui-angular/grids/core/src/column-actions/public_api.ts","../../../projects/igniteui-angular/grids/core/src/columns/validators.directive.ts","../../../projects/igniteui-angular/grids/core/src/watch-changes.ts","../../../projects/igniteui-angular/grids/core/src/summaries/grid-summary.ts","../../../projects/igniteui-angular/grids/core/src/pivot-grid-aggregate.ts","../../../projects/igniteui-angular/grids/core/src/pivot-grid.interface.ts","../../../projects/igniteui-angular/grids/core/src/pivot-util.ts","../../../projects/igniteui-angular/grids/core/src/selection/selection.service.ts","../../../projects/igniteui-angular/grids/core/src/common/crud.service.ts","../../../projects/igniteui-angular/grids/core/src/common/grid.interface.ts","../../../projects/igniteui-angular/grids/core/src/row.directive.ts","../../../projects/igniteui-angular/grids/core/src/columns/templates.directive.ts","../../../projects/igniteui-angular/grids/core/src/moving/moving.service.ts","../../../projects/igniteui-angular/grids/core/src/grid-public-cell.ts","../../../projects/igniteui-angular/grids/core/src/columns/column.component.ts","../../../projects/igniteui-angular/grids/core/src/columns/column-group.component.ts","../../../projects/igniteui-angular/grids/core/src/columns/column-layout.component.ts","../../../projects/igniteui-angular/grids/core/src/columns/public_api.ts","../../../projects/igniteui-angular/grids/core/src/filtering/advanced-filtering/advanced-filtering-dialog.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/advanced-filtering/advanced-filtering-dialog.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/base-filtering.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-clear-filters.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-clear-filters.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-default-expression.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-date-expression.component.html","../../../projects/igniteui-angular/grids/core/src/common/random.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/common.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-custom-dialog.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-conditional-filter.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-conditional-filter.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-header.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-header.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-hiding.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-hiding.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-moving.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-moving.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-pinning.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-pinning.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-search.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-search.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-selecting.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-selecting.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-sorting.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-sorting.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-filtering.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-filtering.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/public_api.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-action-button.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-action-button.component.html","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-actions-base.directive.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-editing-actions.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-editing-actions.component.html","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-actions/grid-pinning-actions.component.html","../../../projects/igniteui-angular/grids/core/src/grid-footer/grid-footer.component.ts","../../../projects/igniteui-angular/grids/core/src/moving/moving.drag.directive.ts","../../../projects/igniteui-angular/grids/core/src/grouping/group-by-area.directive.ts","../../../projects/igniteui-angular/grids/core/src/grid.directives.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizing.service.ts","../../../projects/igniteui-angular/grids/core/src/headers/pipes.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header.component.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/excel-style/excel-style-position-strategy.ts","../../../projects/igniteui-angular/grids/core/src/filtering/grid-filtering.service.ts","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-cell.component.html","../../../projects/igniteui-angular/grids/core/src/resizing/resize-handle.directive.ts","../../../projects/igniteui-angular/grids/core/src/moving/moving.drop.directive.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-group.component.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-group.component.html","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-row.component.ts","../../../projects/igniteui-angular/grids/core/src/filtering/base/grid-filtering-row.component.html","../../../projects/igniteui-angular/grids/core/src/grid-public-row.ts","../../../projects/igniteui-angular/grids/core/src/common/pipes.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.ts","../../../projects/igniteui-angular/grids/core/src/headers/grid-header-row.component.html","../../../projects/igniteui-angular/grids/core/src/headers/public_api.ts","../../../projects/igniteui-angular/grids/core/src/row-drag.directive.ts","../../../projects/igniteui-angular/grids/core/src/selection/row-selectors.ts","../../../projects/igniteui-angular/grids/core/src/selection/drag-select.directive.ts","../../../projects/igniteui-angular/grids/core/src/selection/public_api.ts","../../../projects/igniteui-angular/grids/core/src/pivot-grid-dimensions.ts","../../../projects/igniteui-angular/grids/core/src/state-base.directive.ts","../../../projects/igniteui-angular/grids/core/src/state.directive.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/common.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/token.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-advanced-filtering.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-advanced-filtering.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar.base.ts","../../../projects/igniteui-angular/grids/core/src/services/exporter-common/exporter-options-base.ts","../../../projects/igniteui-angular/grids/core/src/services/csv/csv-exporter-options.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-exporter-options.ts","../../../projects/igniteui-angular/grids/core/src/services/pdf/pdf-exporter-options.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-enums.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-strings.ts","../../../projects/igniteui-angular/grids/core/src/services/exporter-common/export-utilities.ts","../../../projects/igniteui-angular/grids/core/src/setImmediate.ts","../../../projects/igniteui-angular/grids/core/src/services/exporter-common/yielding-loop.ts","../../../projects/igniteui-angular/grids/core/src/services/exporter-common/base-export-service.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-files.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-folders.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-elements-factory.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/worksheet-data-dictionary.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/worksheet-data.ts","../../../projects/igniteui-angular/grids/core/src/services/excel/excel-exporter.ts","../../../projects/igniteui-angular/grids/core/src/services/csv/char-separated-value-data.ts","../../../projects/igniteui-angular/grids/core/src/services/csv/csv-exporter.ts","../../../projects/igniteui-angular/grids/core/src/services/pdf/pdf-exporter.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-exporter.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-exporter.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-hiding.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-hiding.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-pinning.component.ts","../../../projects/igniteui-angular/grids/core/src/toolbar/grid-toolbar-pinning.component.html","../../../projects/igniteui-angular/grids/core/src/toolbar/public_api.ts","../../../projects/igniteui-angular/grids/core/src/grid.rowEdit.directive.ts","../../../projects/igniteui-angular/grids/core/src/common/types.ts","../../../projects/igniteui-angular/grids/core/src/common/pivot-strategy.ts","../../../projects/igniteui-angular/grids/core/src/summaries/grid-summary.service.ts","../../../projects/igniteui-angular/grids/core/src/summaries/summary-cell.component.ts","../../../projects/igniteui-angular/grids/core/src/summaries/summary-cell.component.html","../../../projects/igniteui-angular/grids/core/src/summaries/summary-row.component.ts","../../../projects/igniteui-angular/grids/core/src/summaries/summary-row.component.html","../../../projects/igniteui-angular/grids/core/src/summaries/grid-root-summary.pipe.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizer.directive.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizer.component.ts","../../../projects/igniteui-angular/grids/core/src/resizing/resizer.component.html","../../../projects/igniteui-angular/grids/core/src/resizing/pivot-grid/pivot-resizing.service.ts","../../../projects/igniteui-angular/grids/core/src/resizing/pivot-grid/pivot-resize-handle.directive.ts","../../../projects/igniteui-angular/grids/core/src/resizing/pivot-grid/pivot-resizer.component.ts","../../../projects/igniteui-angular/grids/core/src/grid-navigation-keys.ts","../../../projects/igniteui-angular/grids/core/src/grid-navigation.service.ts","../../../projects/igniteui-angular/grids/core/src/grid-validation.service.ts","../../../projects/igniteui-angular/grids/core/src/grid.common.ts","../../../projects/igniteui-angular/grids/core/src/cell.component.ts","../../../projects/igniteui-angular/grids/core/src/cell.component.html","../../../projects/igniteui-angular/grids/core/src/grid-mrl-navigation.service.ts","../../../projects/igniteui-angular/grids/core/src/api.service.ts","../../../projects/igniteui-angular/grids/core/src/public_api.ts","../../../projects/igniteui-angular/grids/core/src/igniteui-angular-grids-core.ts"],"sourcesContent":["\n/**\n * Enumeration representing different filter modes for grid filtering.\n * - quickFilter: Default mode with a filter row UI between the column headers and the first row of records.\n * - excelStyleFilter: Filter mode where an Excel-style filter is used.\n */\nexport const FilterMode = {\n    quickFilter: 'quickFilter',\n    excelStyleFilter: 'excelStyleFilter'\n} as const;\nexport type FilterMode = (typeof FilterMode)[keyof typeof FilterMode];\n\n/**\n * Enumeration representing the position of grid summary rows.\n * - top: Default value; Summary rows are displayed at the top of the grid.\n * - bottom: Summary rows are displayed at the bottom of the grid.\n */\nexport const GridSummaryPosition = {\n    top: 'top',\n    bottom: 'bottom'\n} as const;\nexport type GridSummaryPosition = (typeof GridSummaryPosition)[keyof typeof GridSummaryPosition];\n\n/**\n * Type representing the triggers for grid cell validation.\n * - 'change': Validation is triggered when the cell value changes.\n * - 'blur': Validation is triggered when the cell loses focus.\n */\nexport type GridValidationTrigger = 'change' | 'blur' ;\n\n/**\n * Type representing the type of the target object (elements of the grid) for keydown (fired when a key is pressed) events in the grid.\n * - 'dataCell': Represents a data cell within the grid. It contains and displays individual data values\n * - 'summaryCell': Summary cells display aggregated/summarized data at the bottom of the grid. They provide insights like total record count, min/max values, etc.\n * - 'groupRow': Group row within the grid. Group rows are used to group related data rows by columns. Contains the related group expression, level, sub-records and group value.\n * - 'hierarchicalRow': Hierarchical rows are similar to group rows, but represent a more complex hierarchical structure, allowing for nested grouping\n * - 'headerCell': Represents a header cell within the grid. Header cells are used to display column headers, providing context and labels for the columns.\n * - 'masterDetailRow': Represents a grid row that can be expanded in order to show additional information\n */\nexport type GridKeydownTargetType =\n    'dataCell' |\n    'summaryCell' |\n    'groupRow' |\n    'hierarchicalRow' |\n    'headerCell' |\n    'masterDetailRow';\n\n/**\n * Enumeration representing different selection modes for the grid elements if can be selected.\n * - 'none': No selection is allowed. Default row and column selection mode.\n * - 'single': Only one element can be selected at a time. Selecting a new one will deselect the previously selected one.\n * - 'multiple': Default cell selection mode. More than one element can be selected at a time.\n * - 'multipleCascade': Similar to multiple selection. It is used in hierarchical or tree grids. Allows selection not only to an individual item but also all its related or nested items in a single action\n */\nexport const GridSelectionMode = {\n    none: 'none',\n    single: 'single',\n    multiple: 'multiple',\n    multipleCascade: 'multipleCascade'\n} as const;\nexport type GridSelectionMode = (typeof GridSelectionMode)[keyof typeof GridSelectionMode];\n\n\n/**\n * Enumeration representing different cell merging modes for the grid elements.\n * - 'onSort': Only merge cells in column that are sorted.\n * - 'always': Always merge adjacent cells based on merge strategy.\n */\nexport const GridCellMergeMode = {\n    onSort: 'onSort',\n    always: 'always',\n} as const;\nexport type GridCellMergeMode = (typeof GridCellMergeMode)[keyof typeof GridCellMergeMode];\n\n/** Enumeration representing different column display order options. */\nexport const ColumnDisplayOrder = {\n    Alphabetical: 'Alphabetical',\n    DisplayOrder: 'DisplayOrder'\n} as const;\nexport type ColumnDisplayOrder = (typeof ColumnDisplayOrder)[keyof typeof ColumnDisplayOrder];\n\n/* mustCoerceToInt */\n/**\n * Enumeration representing the possible positions for pinning rows.\n * - Top: Rows are pinned to the top of the grid.\n * - Bottom: Rows are pinned to the bottom of the grid.\n */\nexport enum RowPinningPosition {\n    Top,\n    Bottom\n}\n\n/**\n * Enumeration representing different paging modes for the grid.\n * - Local: The grid will use local data to extract pages during paging.\n * - Remote: The grid will expect pages to be delivered from a remote location and will only raise events during paging interactions.\n */\nexport const GridPagingMode = {\n    Local: 'local',\n    Remote: 'remote'\n} as const;\nexport type GridPagingMode = (typeof GridPagingMode)[keyof typeof GridPagingMode];\n","import { Component, DoCheck, EventEmitter, HostBinding, Input, IterableDiffer, IterableDiffers, Output, Pipe, PipeTransform, QueryList, ViewChildren, booleanAttribute, forwardRef, inject } from '@angular/core';\nimport { ColumnDisplayOrder } from '../common/enums';\nimport { GridType } from '../common/grid.interface';\nimport { IColumnToggledEventArgs } from '../common/events';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { FormsModule } from '@angular/forms';\nimport { IgxInputDirective, IgxInputGroupComponent } from 'igniteui-angular/input-group';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxButtonDirective, IgxRippleDirective } from 'igniteui-angular/directives';\nimport { ColumnType } from 'igniteui-angular/core';\n\nlet NEXT_ID = 0;\n/**\n * Providing reference to `IgxColumnActionsComponent`:\n * ```typescript\n *  @ViewChild('columnActions', { read: IgxColumnActionsComponent })\n *  public columnActions: IgxColumnActionsComponent;\n */\n@Component({\n    selector: 'igx-column-actions',\n    templateUrl: './column-actions.component.html',\n    imports: [IgxInputGroupComponent, FormsModule, IgxInputDirective, IgxCheckboxComponent, IgxButtonDirective, IgxRippleDirective, forwardRef(() => IgxColumnActionEnabledPipe), forwardRef(() => IgxFilterActionColumnsPipe), forwardRef(() => IgxSortActionColumnsPipe)]\n})\nexport class IgxColumnActionsComponent implements DoCheck {\n    private differs = inject(IterableDiffers);\n\n\n    /**\n     * Gets/Sets the grid to provide column actions for.\n     *\n     * @example\n     * ```typescript\n     * let grid = this.columnActions.grid;\n     * ```\n     */\n    @Input()\n    public grid: GridType;\n    /**\n     * Gets/sets the indentation of columns in the column list based on their hierarchy level.\n     *\n     * @example\n     * ```\n     * <igx-column-actions [indentation]=\"15\"></igx-column-actions>\n     * ```\n     */\n    @Input()\n    public indentation = 30;\n    /**\n     * Sets/Gets the css class selector.\n     * By default the value of the `class` attribute is `\"igx-column-actions\"`.\n     * ```typescript\n     * let cssCLass =  this.columnHidingUI.cssClass;\n     * ```\n     * ```typescript\n     * this.columnHidingUI.cssClass = 'column-chooser';\n     * ```\n     */\n    @HostBinding('class')\n    public cssClass = 'igx-column-actions';\n    /**\n     * Gets/sets the max height of the columns area.\n     *\n     * @remarks\n     * The default max height is 100%.\n     * @example\n     * ```html\n     * <igx-column-actions [columnsAreaMaxHeight]=\"200px\"></igx-column-actions>\n     * ```\n     */\n    @Input()\n    public columnsAreaMaxHeight = '100%';\n    /**\n     * Shows/hides the columns filtering input from the UI.\n     *\n     * @example\n     * ```html\n     *  <igx-column-actions [hideFilter]=\"true\"></igx-column-actions>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public hideFilter = false;\n    /**\n     * Gets the checkbox components representing column items currently present in the dropdown\n     *\n     * @example\n     * ```typescript\n     * let columnItems =  this.columnActions.columnItems;\n     * ```\n     */\n    @ViewChildren(IgxCheckboxComponent)\n    public columnItems: QueryList<IgxCheckboxComponent>;\n    /**\n     * Gets/sets the title of the column actions component.\n     *\n     * @example\n     * ```html\n     * <igx-column-actions [title]=\"'Pin Columns'\"></igx-column-actions>\n     * ```\n     */\n    @Input()\n    public title = '';\n\n    /**\n     * An event that is emitted after a column's checked state is changed.\n     * Provides references to the `column` and the `checked` properties as event arguments.\n     * ```html\n     *  <igx-column-actions (columnToggled)=\"columnToggled($event)\"></igx-column-actions>\n     * ```\n     */\n    @Output()\n    public columnToggled = new EventEmitter<IColumnToggledEventArgs>();\n\n    /**\n     * @hidden @internal\n     */\n    public actionableColumns: ColumnType[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public filteredColumns: ColumnType[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public pipeTrigger = 0;\n\n    /**\n     * @hidden @internal\n     */\n    public actionsDirective: IgxColumnActionsBaseDirective;\n\n    protected _differ: IterableDiffer<any> | null = null;\n\n    /**\n     * @hidden @internal\n     */\n    private _filterColumnsPrompt = '';\n\n    /**\n     * @hidden @internal\n     */\n    private _filterCriteria = '';\n\n    /**\n     * @hidden @internal\n     */\n    private _columnDisplayOrder: ColumnDisplayOrder = ColumnDisplayOrder.DisplayOrder;\n\n    /**\n     * @hidden @internal\n     */\n    private _uncheckAllText: string;\n\n    /**\n     * @hidden @internal\n     */\n    private _checkAllText: string;\n\n    /**\n     * @hidden @internal\n     */\n    private _id = `igx-column-actions-${NEXT_ID++}`;\n\n    constructor() {\n        this._differ = this.differs.find([]).create(this.trackChanges);\n    }\n\n    /**\n     * Gets the prompt that is displayed in the filter input.\n     *\n     * @example\n     * ```typescript\n     * let filterColumnsPrompt = this.columnActions.filterColumnsPrompt;\n     * ```\n     */\n    @Input()\n    public get filterColumnsPrompt(): string {\n        return this._filterColumnsPrompt;\n    }\n    /**\n     * Sets the prompt that is displayed in the filter input.\n     *\n     * @example\n     * ```html\n     * <igx-column-actions [filterColumnsPrompt]=\"'Type here to search'\"></igx-column-actions>\n     * ```\n     */\n    public set filterColumnsPrompt(value: string) {\n        this._filterColumnsPrompt = value || '';\n    }\n    /**\n     * Gets the value which filters the columns list.\n     *\n     * @example\n     * ```typescript\n     * let filterCriteria =  this.columnActions.filterCriteria;\n     * ```\n     */\n    @Input()\n    public get filterCriteria() {\n        return this._filterCriteria;\n    }\n    /**\n     * Sets the value which filters the columns list.\n     *\n     * @example\n     * ```html\n     *  <igx-column-actions [filterCriteria]=\"'ID'\"></igx-column-actions>\n     * ```\n     */\n    public set filterCriteria(value: string) {\n        value = value || '';\n        if (value !== this._filterCriteria) {\n            this._filterCriteria = value;\n            this.pipeTrigger++;\n        }\n    }\n    /**\n     * Gets the display order of the columns.\n     *\n     * @example\n     * ```typescript\n     * let columnDisplayOrder = this.columnActions.columnDisplayOrder;\n     * ```\n     */\n    @Input()\n    public get columnDisplayOrder() {\n        return this._columnDisplayOrder;\n    }\n    /**\n     * Sets the display order of the columns.\n     *\n     * @example\n     * ```typescript\n     * this.columnActions.columnDisplayOrder = ColumnDisplayOrder.Alphabetical;\n     * ```\n     */\n    public set columnDisplayOrder(value: ColumnDisplayOrder) {\n        if (value && value !== this._columnDisplayOrder) {\n            this._columnDisplayOrder = value;\n            this.pipeTrigger++;\n        }\n    }\n    /**\n     * Gets the text of the button that unchecks all columns.\n     *\n     * @remarks\n     * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n     * @example\n     * ```typescript\n     * let uncheckAllText = this.columnActions.uncheckAllText;\n     * ```\n     */\n    @Input()\n    public get uncheckAllText() {\n        return this._uncheckAllText || this.actionsDirective.uncheckAllLabel;\n    }\n    /**\n     * Sets the text of the button that unchecks all columns.\n     *\n     * @example\n     * ```html\n     * <igx-column-actions [uncheckAllText]=\"'Show All'\"></igx-column-actions>\n     * ```\n     */\n    public set uncheckAllText(value: string) {\n        this._uncheckAllText = value;\n    }\n    /**\n     * Gets the text of the button that checks all columns.\n     *\n     * @remarks\n     * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n     * @example\n     * ```typescript\n     * let uncheckAllText = this.columnActions.uncheckAllText;\n     * ```\n     */\n    @Input()\n    public get checkAllText() {\n        return this._checkAllText || this.actionsDirective.checkAllLabel;\n    }\n    /**\n     * Sets the text of the button that checks all columns.\n     *\n     * @remarks\n     * If unset it is obtained from the IgxColumnActionsBased derived directive applied.\n     * @example\n     * ```html\n     * <igx-column-actions [checkAllText]=\"'Hide All'\"></igx-column-actions>\n     * ```\n     */\n    public set checkAllText(value: string) {\n        this._checkAllText = value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get checkAllDisabled(): boolean {\n        return this.actionsDirective.allUnchecked;\n\n    }\n    /**\n     * @hidden @internal\n     */\n    public get uncheckAllDisabled(): boolean {\n        return this.actionsDirective.allChecked;\n    }\n\n    /**\n     * Gets/Sets the value of the `id` attribute.\n     *\n     * @remarks\n     * If not provided it will be automatically generated.\n     * @example\n     * ```html\n     * <igx-column-actions [id]=\"'igx-actions-1'\"></igx-column-actions>\n     * ```\n     */\n    @HostBinding('attr.id')\n    @Input()\n    public get id(): string {\n        return this._id;\n    }\n    public set id(value: string) {\n        this._id = value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get titleID() {\n        return this.id + '_title';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public trackChanges = (index, col) => col.field + '_' + this.actionsDirective.actionEnabledColumnsFilter(col, index, []);\n\n    /**\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        if (this._differ) {\n            const changes = this._differ.diff(this.grid?.columnList);\n            if (changes) {\n                this.pipeTrigger++;\n            }\n        }\n    }\n\n    /**\n     * Unchecks all columns and performs the appropriate action.\n     *\n     * @example\n     * ```typescript\n     * this.columnActions.uncheckAllColumns();\n     * ```\n     */\n    public uncheckAllColumns() {\n        this.actionsDirective.uncheckAll();\n    }\n\n    /**\n     * Checks all columns and performs the appropriate action.\n     *\n     * @example\n     * ```typescript\n     * this.columnActions.checkAllColumns();\n     * ```\n     */\n    public checkAllColumns() {\n        this.actionsDirective.checkAll();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleColumn(column: ColumnType) {\n        this.actionsDirective.toggleColumn(column);\n\n        this.columnToggled.emit({ column: column as any, checked: this.actionsDirective.columnChecked(column) });\n    }\n}\n\n@Pipe({\n    name: 'columnActionEnabled',\n    standalone: true\n})\nexport class IgxColumnActionEnabledPipe implements PipeTransform {\n    protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n    public transform(\n        collection: ColumnType[],\n        actionFilter: (value: ColumnType, index: number, array: ColumnType[]) => boolean,\n        _pipeTrigger: number\n    ): ColumnType[] {\n        if (!collection) {\n            return collection;\n        }\n        let copy = collection.slice(0);\n        if (copy.length && copy[0].grid.hasColumnLayouts) {\n            copy = copy.filter(c => c.columnLayout);\n        }\n        if (actionFilter) {\n            copy = copy.filter(actionFilter);\n        }\n        // Preserve the actionable collection for use in the component\n        this.columnActions.actionableColumns = copy as any;\n        return copy;\n    }\n}\n\n@Pipe({\n    name: 'filterActionColumns',\n    standalone: true\n})\nexport class IgxFilterActionColumnsPipe implements PipeTransform {\n    protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n    public transform(collection: ColumnType[], filterCriteria: string, _pipeTrigger: number): ColumnType[] {\n        if (!collection) {\n            return collection;\n        }\n        let copy = collection.slice(0);\n        if (filterCriteria && filterCriteria.length > 0) {\n            const filterFunc = (c) => {\n                const filterText = c.header || c.field;\n                if (!filterText) {\n                    return false;\n                }\n                return filterText.toLocaleLowerCase().indexOf(filterCriteria.toLocaleLowerCase()) >= 0 ||\n                    (c.children?.some(filterFunc) ?? false);\n            };\n            copy = collection.filter(filterFunc);\n        }\n        // Preserve the filtered collection for use in the component\n        this.columnActions.filteredColumns = copy as any;\n        return copy;\n    }\n}\n\n@Pipe({\n    name: 'sortActionColumns',\n    standalone: true\n})\nexport class IgxSortActionColumnsPipe implements PipeTransform {\n\n    public transform(collection: ColumnType[], displayOrder: ColumnDisplayOrder, _pipeTrigger: number): ColumnType[] {\n        if (displayOrder === ColumnDisplayOrder.Alphabetical) {\n            return collection.sort((a, b) => (a.header || a.field).localeCompare(b.header || b.field));\n        }\n        return collection;\n    }\n}\n","<div class=\"igx-column-actions__header\">\n    @if (title) {\n        <h4 [attr.id]='titleID' class=\"igx-column-actions__header-title\">{{ title }}</h4>\n    }\n\n    @if (!hideFilter) {\n        <igx-input-group class=\"igx-column-actions__header-input\">\n            <input igxInput\n                type=\"text\"\n                [attr.aria-describedby]='titleID'\n                [(ngModel)]=\"filterCriteria\"\n                [placeholder]=\"filterColumnsPrompt\"\n                autocomplete=\"off\" />\n        </igx-input-group>\n    }\n</div>\n\n<div class=\"igx-column-actions__columns\" tabindex=\"0\"\n    [style.max-height]=\"columnsAreaMaxHeight\">\n    @for (\n        column of $any(grid)?._columns\n        | columnActionEnabled:actionsDirective.actionEnabledColumnsFilter:pipeTrigger\n        | filterActionColumns:filterCriteria:pipeTrigger\n        | sortActionColumns:columnDisplayOrder:pipeTrigger; track column\n    ) {\n        <igx-checkbox\n            class=\"igx-column-actions__columns-item\"\n            [readonly]=\"true\"\n            (click)=\"toggleColumn(column)\"\n            [checked]=\"actionsDirective.columnChecked(column)\"\n            [style.margin-left.px]=\"column.level * indentation\">\n            {{ column.header || column.field }}\n        </igx-checkbox>\n    }\n</div>\n\n<div class=\"igx-column-actions__buttons\">\n    <button type=\"button\" igxButton igxRipple (click)=\"uncheckAllColumns()\" [disabled]=\"uncheckAllDisabled\">{{ uncheckAllText }}</button>\n    <button type=\"button\" igxButton igxRipple (click)=\"checkAllColumns()\" [disabled]=\"checkAllDisabled\">{{ checkAllText }}</button>\n</div>\n","import { Directive } from '@angular/core';\nimport { ColumnType } from 'igniteui-angular/core';\n\n@Directive()\nexport abstract class IgxColumnActionsBaseDirective {\n\n    /** @hidden @internal */\n    public abstract actionEnabledColumnsFilter: (\n        value: ColumnType,\n        index: number,\n        array: ColumnType[]\n    ) => boolean;\n\n    /**\n     * @hidden @internal\n     */\n    public abstract get checkAllLabel(): string;\n\n    /**\n     * @hidden @internal\n     */\n    public abstract get uncheckAllLabel(): string;\n\n    /** @hidden @internal */\n    public abstract columnChecked(column: ColumnType): boolean;\n\n    /** @hidden @internal */\n    public abstract toggleColumn(column: ColumnType): void;\n\n    /** @hidden @internal */\n    public abstract uncheckAll(): void;\n\n    /** @hidden @internal */\n    public abstract checkAll(): void;\n\n    /** @hidden @internal */\n    public abstract get allChecked(): boolean;\n\n    /** @hidden @internal */\n    public abstract get allUnchecked(): boolean;\n}\n","import { Directive, inject } from '@angular/core';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { IgxColumnActionsComponent } from './column-actions.component';\nimport { ColumnType } from 'igniteui-angular/core';\n\n@Directive({\n    selector: '[igxColumnHiding]',\n    standalone: true\n})\nexport class IgxColumnHidingDirective extends IgxColumnActionsBaseDirective {\n    protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n    constructor() {\n        super();\n        const columnActions = this.columnActions;\n\n        columnActions.actionsDirective = this;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get checkAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_hiding_check_all_label ?? 'Show All';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get uncheckAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_hiding_uncheck_all_label ?? 'Hide All';\n    }\n    /**\n     * @hidden @internal\n     */\n    public checkAll() {\n        this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(false));\n\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public uncheckAll() {\n        this.columnActions.filteredColumns.forEach(c => c.toggleVisibility(true));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public actionEnabledColumnsFilter = c => !c.disableHiding;\n\n    /**\n     * @hidden @internal\n     */\n    public columnChecked(column: ColumnType): boolean {\n        return !column.hidden;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleColumn(column: ColumnType) {\n        column.toggleVisibility();\n    }\n\n    public get allChecked() {\n        return this.columnActions.filteredColumns.every(col => !this.columnChecked(col));\n    }\n\n    public get allUnchecked() {\n        return this.columnActions.filteredColumns.every(col => this.columnChecked(col));\n    }\n}\n","import { Directive, inject } from '@angular/core';\nimport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\nimport { IgxColumnActionsComponent } from './column-actions.component';\nimport { ColumnType } from 'igniteui-angular/core';\n\n@Directive({\n    selector: '[igxColumnPinning]',\n    standalone: true\n})\nexport class IgxColumnPinningDirective extends IgxColumnActionsBaseDirective {\n    protected columnActions = inject<IgxColumnActionsComponent>(IgxColumnActionsComponent);\n\n\n    constructor() {\n        super();\n        const columnActions = this.columnActions;\n\n        columnActions.actionsDirective = this;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get checkAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_pinning_check_all_label ?? 'Pin All';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get uncheckAllLabel(): string {\n        return this.columnActions.grid?.resourceStrings.igx_grid_pinning_uncheck_all_label ?? 'Unpin All';\n    }\n    /**\n     * @hidden @internal\n     */\n    public checkAll() {\n        this.columnActions.filteredColumns.forEach(c => c.pinned = true);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public uncheckAll() {\n        this.columnActions.filteredColumns.forEach(c => c.pinned = false);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public actionEnabledColumnsFilter = (c: ColumnType) => !c.disablePinning && !c.level;\n\n    /**\n     * @hidden @internal\n     */\n    public columnChecked(column: ColumnType): boolean {\n        return column.pinned;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleColumn(column: ColumnType) {\n        column.pinned = !column.pinned;\n    }\n\n    public get allUnchecked() {\n        return !this.columnActions.filteredColumns.some(col => !this.columnChecked(col));\n    }\n\n    public get allChecked() {\n        return !this.columnActions.filteredColumns.some(col => this.columnChecked(col));\n    }\n}\n","// import { IgxColumnActionsComponent } from './column-actions.component';\n// import { IgxColumnHidingDirective } from './column-hiding.directive';\n// import { IgxColumnPinningDirective } from './column-pinning.directive';\n\nexport { IgxColumnActionsComponent } from './column-actions.component';\nexport { IgxColumnHidingDirective } from './column-hiding.directive';\nexport { IgxColumnPinningDirective } from './column-pinning.directive';\nexport { IgxColumnActionsBaseDirective } from './column-actions-base.directive';\n\n/* NOTE: Grid column actions directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_COLUMN_ACTIONS_DIRECTIVES = [\n//     IgxColumnActionsComponent,\n//     IgxColumnHidingDirective,\n//     IgxColumnPinningDirective\n// ] as const;\n","/* eslint-disable @angular-eslint/directive-selector */\nimport { Directive } from '@angular/core';\nimport { RequiredValidator, NG_VALIDATORS, MinValidator, MaxValidator, EmailValidator, MinLengthValidator, MaxLengthValidator, PatternValidator } from '@angular/forms';\n\n@Directive({\n    selector: 'igx-column[required]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnRequiredValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnRequiredValidatorDirective extends RequiredValidator {\n}\n\n@Directive({\n    selector: 'igx-column[min]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMinValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMinValidatorDirective extends MinValidator { }\n\n\n@Directive({\n    selector: 'igx-column[max]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMaxValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMaxValidatorDirective extends MaxValidator { }\n\n\n@Directive({\n    selector: 'igx-column[email]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnEmailValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnEmailValidatorDirective extends EmailValidator { }\n\n\n@Directive({\n    selector: 'igx-column[minlength]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMinLengthValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMinLengthValidatorDirective extends MinLengthValidator { }\n\n@Directive({\n    selector: 'igx-column[maxlength]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnMaxLengthValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnMaxLengthValidatorDirective extends MaxLengthValidator {\n}\n\n@Directive({\n    selector: 'igx-column[pattern]',\n    providers: [{\n            provide: NG_VALIDATORS,\n            useExisting: IgxColumnPatternValidatorDirective,\n            multi: true\n        }],\n    standalone: true\n})\nexport class IgxColumnPatternValidatorDirective extends PatternValidator {\n}\n","import { SimpleChanges, SimpleChange } from '@angular/core';\n\n/**\n * @hidden\n */\nexport function WatchChanges(): PropertyDecorator {\n    return (target: any, key: string, propDesc?: PropertyDescriptor) => {\n        const privateKey = '_' + key.toString();\n        propDesc = propDesc || {\n            configurable: true,\n            enumerable: true,\n        };\n        propDesc.get = propDesc.get || (function (this: any) {\n            return this[privateKey];\n        });\n        const originalSetter = propDesc.set || (function (this: any, val: any) {\n            this[privateKey] = val;\n        });\n\n        propDesc.set = function (this: any, val: any) {\n            const init = this._init;\n            const oldValue = this[key];\n            if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n                originalSetter.call(this, val);\n                if (this.ngOnChanges && !init) {\n                    // in case wacthed prop changes trigger ngOnChanges manually\n                    const changes: SimpleChanges = {\n                        [key]: new SimpleChange(oldValue, val, false)\n                    };\n                    this.ngOnChanges(changes);\n                }\n            }\n        };\n        return propDesc;\n    };\n}\n\nexport function WatchColumnChanges(): PropertyDecorator {\n    return (target: any, key: string, propDesc?: PropertyDescriptor) => {\n        const privateKey = '_' + key.toString();\n        propDesc = propDesc || {\n            configurable: true,\n            enumerable: true,\n        };\n        propDesc.get = propDesc.get || (function (this: any) {\n            return this[privateKey];\n        });\n        const originalSetter = propDesc.set || (function (this: any, val: any) {\n            this[privateKey] = val;\n        });\n\n        propDesc.set = function (this: any, val: any) {\n            const oldValue = this[key];\n            originalSetter.call(this, val);\n            if (val !== oldValue || (typeof val === 'object' && val === oldValue)) {\n                if (this.columnChange) {\n                    this.columnChange.emit();\n                }\n            }\n        };\n        return propDesc;\n    };\n}\n\nexport function notifyChanges(repaint = false) {\n    return (_: any, key: string, propDesc?: PropertyDescriptor) => {\n\n        const privateKey = `__${key}`;\n\n        propDesc = propDesc || {\n            enumerable: true,\n            configurable: true\n        };\n\n\n        const originalSetter = propDesc ? propDesc.set : null;\n        propDesc.get = propDesc.get || (function (this) {\n            return this[privateKey];\n        });\n\n        propDesc.set = function (this, newValue) {\n            if (originalSetter) {\n                originalSetter.call(this, newValue);\n                if (this.grid) {\n                    this.grid.notifyChanges(repaint && this.type !== 'pivot');\n                }\n            } else {\n                if (newValue === this[key]) {\n                    return;\n                }\n                this[privateKey] = newValue;\n                if (this.grid) {\n                    this.grid.notifyChanges(repaint && this.type !== 'pivot');\n                }\n            }\n        };\n        return propDesc as any;\n    };\n}\n","import { IGroupByRecord, IgxSummaryResult } from 'igniteui-angular/core';\n\nconst clear = (el) => el === 0 || Boolean(el);\nconst first = (arr) => arr[0];\nconst last = (arr) => arr[arr.length - 1];\n\n/* blazorCSSuppress */\nexport class IgxSummaryOperand {\n    /**\n     * Counts all the records in the data source.\n     * If filtering is applied, counts only the filtered records.\n     * ```typescript\n     * IgxSummaryOperand.count(dataSource);\n     * ```\n     *\n     * @memberof IgxSummaryOperand\n     */\n    public static count(data: any[]): number {\n        return data.length;\n    }\n    /**\n     * Executes the static `count` method and returns `IgxSummaryResult[]`.\n     * ```typescript\n     * interface IgxSummaryResult {\n     *   key: string;\n     *   label: string;\n     *   summaryResult: any;\n     * }\n     * ```\n     * Can be overridden in the inherited classes to provide customization for the `summary`.\n     * ```typescript\n     * class CustomSummary extends IgxSummaryOperand {\n     *   constructor() {\n     *     super();\n     *   }\n     *   public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n     *     const result = [];\n     *     result.push({\n     *       key: \"test\",\n     *       label: \"Test\",\n     *       summaryResult: IgxSummaryOperand.count(data)\n     *     });\n     *     return result;\n     *   }\n     * }\n     * this.grid.getColumnByName('ColumnName').summaries = CustomSummary;\n     * ```\n     *\n     * @memberof IgxSummaryOperand\n     */\n    public operate(data: any[] = [], _allData: any[] = [], _fieldName?: string, _groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        return [{\n            key: 'count',\n            label: 'Count',\n            defaultFormatting: false,\n            summaryResult: IgxSummaryOperand.count(data)\n        }];\n    }\n}\n\n/* blazorCSSuppress */\n// @dynamic\nexport class IgxNumberSummaryOperand extends IgxSummaryOperand {\n    /**\n     * Returns the minimum numeric value in the provided data records.\n     * If filtering is applied, returns the minimum value in the filtered data records.\n     * ```typescript\n     * IgxNumberSummaryOperand.min(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static min(data: any[]): number {\n        return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.min(a, b)) : 0;\n    }\n    /**\n     * Returns the maximum numeric value in the provided data records.\n     * If filtering is applied, returns the maximum value in the filtered data records.\n     * ```typescript\n     * IgxNumberSummaryOperand.max(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static max(data: any[]): number {\n        return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => Math.max(a, b)) : 0;\n    }\n    /**\n     * Returns the sum of the numeric values in the provided data records.\n     * If filtering is applied, returns the sum of the numeric values in the data records.\n     * ```typescript\n     * IgxNumberSummaryOperand.sum(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static sum(data: any[]): number {\n        return data.length && data.filter(clear).length ? data.filter(clear).reduce((a, b) => +a + +b) : 0;\n    }\n    /**\n     * Returns the average numeric value in the data provided data records.\n     * If filtering is applied, returns the average numeric value in the filtered data records.\n     * ```typescript\n     * IgxSummaryOperand.average(data);\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public static average(data: any[]): number {\n        return data.length && data.filter(clear).length ? this.sum(data) / this.count(data) : 0;\n    }\n    /**\n     * Executes the static methods and returns `IgxSummaryResult[]`.\n     * ```typescript\n     * interface IgxSummaryResult {\n     *   key: string;\n     *   label: string;\n     *   summaryResult: any;\n     * }\n     * ```\n     * Can be overridden in the inherited classes to provide customization for the `summary`.\n     * ```typescript\n     * class CustomNumberSummary extends IgxNumberSummaryOperand {\n     *   constructor() {\n     *     super();\n     *   }\n     *   public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n     *     const result = super.operate(data, allData, fieldName, groupRecord);\n     *     result.push({\n     *       key: \"avg\",\n     *       label: \"Avg\",\n     *       summaryResult: IgxNumberSummaryOperand.average(data)\n     *     });\n     *     result.push({\n     *       key: 'mdn',\n     *       label: 'Median',\n     *       summaryResult: this.findMedian(data)\n     *     });\n     *     return result;\n     *   }\n     * }\n     * this.grid.getColumnByName('ColumnName').summaries = CustomNumberSummary;\n     * ```\n     *\n     * @memberof IgxNumberSummaryOperand\n     */\n    public override operate(data: any[] = [], allData: any[] = [], fieldName?: string, groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        const result = super.operate(data, allData, fieldName, groupRecord);\n        result.push({\n            key: 'min',\n            label: 'Min',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.min(data)\n        });\n        result.push({\n            key: 'max',\n            label: 'Max',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.max(data)\n        });\n        result.push({\n            key: 'sum',\n            label: 'Sum',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.sum(data)\n        });\n        result.push({\n            key: 'average',\n            label: 'Avg',\n            defaultFormatting: true,\n            summaryResult: IgxNumberSummaryOperand.average(data)\n        });\n        return result;\n    }\n}\n\n/* blazorCSSuppress */\n// @dynamic\nexport class IgxDateSummaryOperand extends IgxSummaryOperand {\n    /**\n     * Returns the latest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxDateSummaryOperand.latest(data);\n     * ```\n     *\n     * @memberof IgxDateSummaryOperand\n     */\n    public static latest(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            first(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;\n    }\n    /**\n     * Returns the earliest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxDateSummaryOperand.earliest(data);\n     * ```\n     *\n     * @memberof IgxDateSummaryOperand\n     */\n    public static earliest(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            last(data.filter(clear).sort((a, b) => new Date(b).valueOf() - new Date(a).valueOf())) : undefined;\n    }\n    /**\n     * Executes the static methods and returns `IgxSummaryResult[]`.\n     * ```typescript\n     * interface IgxSummaryResult {\n     *   key: string;\n     *   label: string;\n     *   summaryResult: any;\n     * }\n     * ```\n     * Can be overridden in the inherited classes to provide customization for the `summary`.\n     * ```typescript\n     * class CustomDateSummary extends IgxDateSummaryOperand {\n     *   constructor() {\n     *     super();\n     *   }\n     *   public operate(data: any[], allData: any[], fieldName: string, groupRecord: IGroupByRecord): IgxSummaryResult[] {\n     *     const result = super.operate(data, allData, fieldName, groupRecord);\n     *     result.push({\n     *       key: \"deadline\",\n     *       label: \"Deadline Date\",\n     *       summaryResult: this.calculateDeadline(data);\n     *     });\n     *     return result;\n     *   }\n     * }\n     * this.grid.getColumnByName('ColumnName').summaries = CustomDateSummary;\n     * ```\n     *\n     * @memberof IgxDateSummaryOperand\n     */\n    public override operate(data: any[] = [], allData: any[] = [],  fieldName?: string, groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        const result = super.operate(data, allData, fieldName, groupRecord);\n        result.push({\n            key: 'earliest',\n            label: 'Earliest',\n            defaultFormatting: true,\n            summaryResult: IgxDateSummaryOperand.earliest(data)\n        });\n        result.push({\n            key: 'latest',\n            label: 'Latest',\n            defaultFormatting: true,\n            summaryResult: IgxDateSummaryOperand.latest(data)\n        });\n        return result;\n    }\n}\n\n/* blazorCSSuppress */\n// @dynamic\nexport class IgxTimeSummaryOperand extends IgxSummaryOperand {\n    /**\n     * Returns the latest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the latest time value in the filtered data records.\n     * ```typescript\n     * IgxTimeSummaryOperand.latestTime(data);\n     * ```\n     *\n     * @memberof IgxTimeSummaryOperand\n     */\n    public static latestTime(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            first(data.filter(clear).map(v => new Date(v)).sort((a, b) =>\n                new Date().setHours(b.getHours(), b.getMinutes(), b.getSeconds()) -\n                new Date().setHours(a.getHours(), a.getMinutes(), a.getSeconds()))) : undefined;\n    }\n\n    /**\n     * Returns the earliest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the earliest time value in the filtered data records.\n     * ```typescript\n     * IgxTimeSummaryOperand.earliestTime(data);\n     * ```\n     *\n     * @memberof IgxTimeSummaryOperand\n     */\n    public static earliestTime(data: any[]) {\n        return data.length && data.filter(clear).length ?\n            last(data.filter(clear).map(v => new Date(v)).sort((a, b) => new Date().setHours(b.getHours(), b.getMinutes(), b.getSeconds()) -\n            new Date().setHours(a.getHours(), a.getMinutes(), a.getSeconds()))) : undefined;\n    }\n    /**\n     * @memberof IgxTimeSummaryOperand\n     */\n    public override operate(data: any[] = [], allData: any[] = [],  fieldName?: string, groupRecord?: IGroupByRecord): IgxSummaryResult[] {\n        const result = super.operate(data, allData, fieldName, groupRecord);\n        result.push({\n            key: 'earliest',\n            label: 'Earliest',\n            defaultFormatting: true,\n            summaryResult: IgxTimeSummaryOperand.earliestTime(data)\n        });\n        result.push({\n            key: 'latest',\n            label: 'Latest',\n            defaultFormatting: true,\n            summaryResult: IgxTimeSummaryOperand.latestTime(data)\n        });\n        return result;\n    }\n}\n","import { IPivotAggregator } from './pivot-grid.interface';\nimport { IgxDateSummaryOperand, IgxNumberSummaryOperand, IgxTimeSummaryOperand } from './summaries/grid-summary';\n\n\nexport class IgxPivotAggregate {\n    /**\n     * Gets array with default aggregator function for base aggregation.\n     * ```typescript\n     * IgxPivotAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static aggregators(): Array<IPivotAggregator> {\n        return [{\n            key: 'COUNT',\n            label: 'Count',\n            aggregator: IgxPivotAggregate.count\n        }];\n    }\n    /**\n     * Counts all the records in the data source.\n     * If filtering is applied, counts only the filtered records.\n     * ```typescript\n     * IgxSummaryOperand.count(dataSource);\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static count(members: number[]): number {\n        return members.length;\n    }\n}\n\nexport class IgxPivotNumericAggregate extends IgxPivotAggregate {\n\n    /**\n     * Gets array with default aggregator function for numeric aggregation.\n     * ```typescript\n     * IgxPivotAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static override aggregators() {\n        let result: IPivotAggregator[] = [];\n        result = result.concat(super.aggregators());\n        result.push({\n            key: 'MIN',\n            label: 'Minimum',\n            aggregator: IgxPivotNumericAggregate.min\n        });\n        result.push({\n            key: 'MAX',\n            label: 'Maximum',\n            aggregator: IgxPivotNumericAggregate.max\n        });\n\n        result.push({\n            key: 'SUM',\n            label: 'Sum',\n            aggregator: IgxPivotNumericAggregate.sum\n        });\n\n        result.push({\n            key: 'AVG',\n            label: 'Average',\n            aggregator: IgxPivotNumericAggregate.average\n        });\n        return result;\n    }\n\n    /**\n     * Returns the minimum numeric value in the provided data records.\n     * If filtering is applied, returns the minimum value in the filtered data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.min(members, data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static min(members: number[]): number {\n        return IgxNumberSummaryOperand.min(members);\n    }\n\n    /**\n     * Returns the maximum numeric value in the provided data records.\n     * If filtering is applied, returns the maximum value in the filtered data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.max(data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static max(members: number[]): number {\n        return IgxNumberSummaryOperand.max(members);\n    }\n\n    /**\n     * Returns the sum of the numeric values in the provided data records.\n     * If filtering is applied, returns the sum of the numeric values in the data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.sum(data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static sum(members: number[]): number {\n        return IgxNumberSummaryOperand.sum(members);\n    }\n\n    /**\n     * Returns the average numeric value in the data provided data records.\n     * If filtering is applied, returns the average numeric value in the filtered data records.\n     * ```typescript\n     * IgxPivotNumericAggregate.average(data);\n     * ```\n     *\n     * @memberof IgxPivotNumericAggregate\n     */\n    public static average(members: number[]): number {\n        return IgxNumberSummaryOperand.average(members);\n    }\n}\n\nexport class IgxPivotDateAggregate extends IgxPivotAggregate {\n    /**\n     * Gets array with default aggregator function for date aggregation.\n     * ```typescript\n     * IgxPivotDateAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static override aggregators() {\n        let result: IPivotAggregator[] = [];\n        result = result.concat(super.aggregators());\n        result.push({\n            key: 'LATEST',\n            label: 'Latest Date',\n            aggregator: IgxPivotDateAggregate.latest\n        });\n        result.push({\n            key: 'EARLIEST',\n            label: 'Earliest Date',\n            aggregator: IgxPivotDateAggregate.earliest\n        });\n        return result;\n    }\n    /**\n     * Returns the latest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxPivotDateAggregate.latest(data);\n     * ```\n     *\n     * @memberof IgxPivotDateAggregate\n     */\n    public static latest(members: any[]) {\n        return IgxDateSummaryOperand.latest(members);\n    }\n\n    /**\n     * Returns the earliest date value in the data records.\n     * If filtering is applied, returns the latest date value in the filtered data records.\n     * ```typescript\n     * IgxPivotDateAggregate.earliest(data);\n     * ```\n     *\n     * @memberof IgxPivotDateAggregate\n     */\n    public static earliest(members: any[]) {\n        return IgxDateSummaryOperand.earliest(members);\n    }\n}\n\nexport class IgxPivotTimeAggregate extends IgxPivotAggregate {\n    /**\n     * Gets array with default aggregator function for time aggregation.\n     * ```typescript\n     * IgxPivotTimeAggregate.aggregators();\n     * ```\n     *\n     * @memberof IgxPivotAggregate\n     */\n    public static override aggregators() {\n        let result: IPivotAggregator[] = [];\n        result = result.concat(super.aggregators());\n        result.push({\n            key: 'LATEST',\n            label: 'Latest Time',\n            aggregator: IgxPivotTimeAggregate.latestTime\n        });\n        result.push({\n            key: 'EARLIEST',\n            label: 'Earliest Time',\n            aggregator: IgxPivotTimeAggregate.earliestTime\n        });\n        return result;\n    }\n\n    /**\n     * Returns the latest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the latest time value in the filtered data records.\n     * ```typescript\n     * IgxPivotTimeAggregate.latestTime(data);\n     * ```\n     *\n     * @memberof IgxPivotTimeAggregate\n     */\n    public static latestTime(members: any[]) {\n        return IgxTimeSummaryOperand.latestTime(members);\n    }\n\n    /**\n     * Returns the earliest time value in the data records. Compare only the time part of the date.\n     * If filtering is applied, returns the earliest time value in the filtered data records.\n     * ```typescript\n     * IgxPivotTimeAggregate.earliestTime(data);\n     * ```\n     *\n     * @memberof IgxPivotTimeAggregate\n     */\n    public static earliestTime(members: any[]) {\n        return IgxTimeSummaryOperand.earliestTime(members);\n    }\n}\n","import { ColumnType, GridColumnDataType, IDataCloneStrategy, IFilteringExpressionsTree, SortingDirection } from 'igniteui-angular/core';\n\n\n/**\n* Default pivot keys used for data processing in the pivot pipes.\n*/\nexport const DEFAULT_PIVOT_KEYS = {\n    aggregations: 'aggregations', records: 'records', children: 'children', level: 'level',\n    rowDimensionSeparator: '_', columnDimensionSeparator: '-'\n};\n\n/**\n * Event emitted when dimension collection for rows, columns of filters is changed.\n */\nexport interface IDimensionsChange {\n    /** The new list of dimensions. */\n    dimensions: IPivotDimension[],\n    /** The dimension list type - Row, Column or Filter. */\n    dimensionCollectionType: PivotDimensionType\n}\n\n/**\n* Event emitted when values list is changed.\n*/\nexport interface IValuesChange {\n    /** The new list of values. */\n    values: IPivotValue[]\n}\n\n/**\n * Event emitted when pivot configuration is changed.\n */\nexport interface IPivotConfigurationChangedEventArgs {\n    /** The new configuration. */\n    pivotConfiguration: IPivotConfiguration\n}\n\n/**\n* Interface describing Pivot data processing for dimensions.\n* Should contain a process method and return records hierarchy based on the provided dimensions.\n*/\nexport interface IPivotDimensionStrategy {\n    /* blazorCSSuppress */\n    process(collection: any,\n        dimensions: IPivotDimension[],\n        values: IPivotValue[],\n        cloneStrategy: IDataCloneStrategy,\n        pivotKeys?: IPivotKeys): any[];\n}\n\n/**\n* Interface describing a PivotAggregation function.\n* Accepts an array of extracted data members and a array of the original data records.\n*/\nexport type PivotAggregation = (members: any[], data: any[]) => any;\n\n/* marshalByValue */\n/**\n* Interface describing a IPivotAggregator class.\n* Used for specifying custom aggregator lists.\n*/\nexport interface IPivotAggregator {\n    /** Aggregation unique key. */\n    key: string;\n    /** Aggregation label to show in the UI. */\n    label: string;\n    /**\n     * Aggregation name that will be used from a list of predefined aggregations.\n     * If not set will use the specified aggregator function.\n     */\n    aggregatorName?: PivotAggregationType;\n\n    /* blazorAlternateType: AggregatorEventHandler */\n    /* blazorOnlyScript */\n    /**\n     * Aggregator function can be a custom implementation of `PivotAggregation`, or\n     * use predefined ones from `IgxPivotAggregate` and its variants.\n     */\n    aggregator?: (members: any[], data?: any[]) => any;\n}\n\n/* marshalByValue */\n/**\n* Configuration of the pivot grid.\n*/\nexport interface IPivotConfiguration {\n    /** A strategy to transform the rows. */\n    rowStrategy?: IPivotDimensionStrategy | null;\n    /** A strategy to transform the columns. */\n    columnStrategy?: IPivotDimensionStrategy | null;\n    /** A list of the rows. */\n    rows: IPivotDimension[] | null;\n    /** A list of the columns. */\n    columns: IPivotDimension[] | null;\n    /** A list of the values. */\n    values: IPivotValue[] | null;\n    /** Dimensions to be displayed in the filter area. */\n    filters?: IPivotDimension[] | null;\n    /** Pivot data keys used for data generation. Can be used for custom remote scenarios where the data is pre-populated. */\n    pivotKeys?: IPivotKeys;\n}\n\n/* blazorElement */\n/* marshalByValue */\n/**\n* Configuration of a pivot dimension.\n*/\nexport interface IPivotDimension {\n    /** Allows defining a hierarchy when multiple sub groups need to be extracted from single member. */\n    childLevel?: IPivotDimension;\n    /** Unique member to extract related data field value or the result of the memberFunction. */\n    memberName: string;\n\n    /* csTreatAsEvent: MemberFunctionHandler */\n    /* blazorOnlyScript */\n    /** Function that extracts the value */\n    memberFunction?: (data: any) => any;\n    /** Display name to show instead of the field name of this value. **/\n    displayName?: string;\n    /** Enables/Disables a particular dimension from pivot structure. */\n    enabled: boolean;\n    /**\n     * A predefined or defined via the `igxPivotSelector` filter expression tree for the current dimension to be applied in the filter pipe.\n     * */\n    filter?: IFilteringExpressionsTree | null;\n    /** Enable/disable sorting for a particular dimension. True by default. */\n    sortable?: boolean;\n    /**\n     * The sorting direction of the current dimension. Determines the order in which the values will appear in the related dimension.\n     */\n    sortDirection?: SortingDirection;\n    /**\n     * The dataType of the related data field.\n     */\n    dataType?: GridColumnDataType;\n    /** The width of the dimension cells to be rendered.Can be pixel, % or \"auto\". */\n    width?: string;\n    /** Level of the dimension. */\n    level?: number;\n    /** @hidden @internal */\n    autoWidth?: number;\n    horizontalSummary? : boolean;\n}\n\n/* marshalByValue */\n/**\n* Configuration of a pivot value aggregation.\n*/\nexport interface IPivotValue {\n    /** Unique member to extract related data field value for aggregations. */\n    member: string;\n    /** Display name to show instead of member for the column header of this value. **/\n    displayName?: string;\n    /**\n     * Active aggregator definition with key, label and aggregator.\n     */\n    aggregate: IPivotAggregator;\n    /**\n     * List of aggregates to show in aggregate drop-down.\n     */\n    aggregateList?: IPivotAggregator[];\n    /** Enables/Disables a particular value from pivot aggregation. */\n    enabled: boolean;\n    /**  Allow conditionally styling of the IgxPivotGrid cells. */\n    styles?: any;\n    /** Enables a data type specific template of the cells */\n    dataType?: GridColumnDataType;\n\n    /* csTreatAsEvent: PivotValueFormatterEventHandler */\n    /* blazorOnlyScript */\n    /** Applies display format to cell values. */\n    formatter?: (value: any, rowData?: IPivotGridRecord, columnData?: IPivotGridColumn) => any;\n}\n\n/** Interface describing the Pivot column data.\n*  Contains information on the related column dimensions and their values.\n*/\nexport interface IPivotGridColumn {\n        field: string,\n        /* blazorSuppress */\n        /** Gets/Sets the group value associated with the related column dimension by its memberName. **/\n        dimensionValues: Map<string, string>;\n        /** List of dimensions associated with the column.**/\n        dimensions: IPivotDimension[];\n        value: IPivotValue\n}\n\n/* marshalByValue */\n/** Interface describing the Pivot data keys used for data generation.\n*  Can be used for custom remote scenarios where the data is pre-populated.\n*/\nexport interface IPivotKeys {\n    /** Field that stores children for hierarchy building. */\n    children: string;\n    /** Field that stores reference to the original data records. */\n    records: string;\n    /** Field that stores aggregation values. */\n    aggregations: string;\n    /** Field that stores dimension level based on its hierarchy. */\n    level: string;\n    /** Separator used when generating the unique column field values. */\n    columnDimensionSeparator: string;\n    /** Separator used when generating the unique row field values. */\n    rowDimensionSeparator: string;\n}\n\n/* mustCoerceToInt */\n/** The dimension types - Row, Column or Filter. */\nexport enum PivotDimensionType {\n    Row,\n    Column,\n    Filter\n}\n\n\nexport enum PivotRowLayoutType {\n    Vertical = \"vertical\",\n    Horizontal = \"horizontal\"\n}\n\nexport enum PivotSummaryPosition {\n    Top = \"top\",\n    Bottom = \"bottom\"\n}\n\nexport interface IPivotUISettings {\n    showConfiguration?: boolean;\n    showRowHeaders?: boolean;\n    rowLayout?: PivotRowLayoutType;\n    horizontalSummariesPosition?: PivotSummaryPosition;\n}\n\nexport type PivotAggregationType = 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT' | 'LATEST' | 'EARLIEST';\n\n/** Interface describing the pivot dimension data.\n* Contains additional information needed to render dimension headers.\n*/\nexport interface IPivotDimensionData {\n    /** Associated column definition. */\n    column: ColumnType;\n    /** Associated dimension definition. */\n    dimension: IPivotDimension;\n    /** List of previous dimension groups. */\n    prevDimensions: IPivotDimension[];\n    /** Whether this a child dimension. */\n    isChild?: boolean;\n}\n\nexport interface PivotRowHeaderGroupType {\n    rowIndex: number;\n    parent: any;\n    header: any;\n    headerID: string;\n    grid: any;\n}\n\nexport interface DimensionValueType {\n    value: string;\n    children: Map<string, string | DimensionValueType>;\n}\n\nexport interface IPivotGridRecord {\n    /* blazorSuppress */\n    /** Gets/Sets the group value associated with the related row dimension by its memberName. **/\n    dimensionValues: Map<string, string>;\n    /* blazorSuppress */\n    /** Gets/Sets the aggregation value associated with the value path. Value path depends on configured column dimension hierarchy and values.**/\n    aggregationValues: Map<string, any>;\n    /* blazorSuppress */\n    /** List of children records in case any row dimension member contain a hierarchy. Each dimension member contains its own hierarchy, which you can get by its memberName. **/\n    children?: Map<string, IPivotGridRecord[]>;\n    /** List of original data records associated with the current pivoted data. **/\n    records?: any[];\n     /** Record level**/\n    level?: number;\n    /** List of dimensions associated with the record.**/\n    dimensions: IPivotDimension[];\n    /** If set, it specifies the name of the dimension, that has total record enabled. */\n    totalRecordDimensionName?: string;\n    /** The index of the record in the total view */\n    dataIndex?: number;\n}\n\nexport interface IPivotGridGroupRecord extends IPivotGridRecord {\n    height?: number;\n    rowSpan?: number;\n}\n\nexport interface IPivotGridHorizontalGroup {\n    value?: string;\n    rootDimension?: IPivotDimension;\n    dimensions?: IPivotDimension[];\n    records?: IPivotGridRecord[];\n    rowStart?: number;\n    rowSpan?: number;\n    colStart?: number;\n    colSpan?: number;\n}\n\nexport interface IgxPivotGridValueTemplateContext {\n    $implicit: IPivotValue;\n}\n","import { DataUtil, FilteringExpressionsTree, FilteringLogic, GridColumnDataType, IDataCloneStrategy, IGridSortingStrategy, IgxSorting, ISortingExpression } from 'igniteui-angular/core';\nimport { IgxPivotAggregate, IgxPivotDateAggregate, IgxPivotNumericAggregate, IgxPivotTimeAggregate } from './pivot-grid-aggregate';\nimport { IPivotAggregator, IPivotConfiguration, IPivotDimension, IPivotGridRecord, IPivotKeys, IPivotValue, PivotDimensionType, PivotSummaryPosition } from './pivot-grid.interface';\nimport { PivotGridType } from './common/grid.interface';\n\nexport class PivotUtil {\n\n    // go through all children and apply new dimension groups as child\n    public static processGroups(recs: IPivotGridRecord[], dimension: IPivotDimension, pivotKeys: IPivotKeys, cloneStrategy: IDataCloneStrategy) {\n        for (const rec of recs) {\n            // process existing children\n            if (rec.children && rec.children.size > 0) {\n                // process hierarchy in dept\n                rec.children.forEach((values) => {\n                    this.processGroups(values, dimension, pivotKeys, cloneStrategy);\n                });\n            }\n            // add children for current dimension\n            const hierarchyFields = PivotUtil\n                .getFieldsHierarchy(rec.records, [dimension], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n            const siblingData = PivotUtil\n                .processHierarchy(hierarchyFields, pivotKeys, 0);\n            rec.children.set(dimension.memberName, siblingData);\n        }\n    }\n\n    public static flattenGroups(data: IPivotGridRecord[], dimension: IPivotDimension, expansionStates, defaultExpand: boolean, parent?: IPivotDimension, parentRec?: IPivotGridRecord) {\n        for (let i = 0; i < data.length; i++) {\n            const rec = data[i];\n            const field = dimension.memberName;\n            if (!field) {\n                continue;\n            }\n\n            let recordsData = rec.children.get(field);\n            if (!recordsData && parent) {\n                // check parent\n                recordsData = rec.children.get(parent.memberName);\n                if (recordsData) {\n                    dimension = parent;\n                }\n            }\n\n            if (parentRec) {\n                parentRec.dimensionValues.forEach((value, key) => {\n                    if (parent.memberName !== key) {\n                        rec.dimensionValues.set(key, value);\n                        const dim = parentRec.dimensions.find(x => x.memberName === key);\n                        rec.dimensions.unshift(dim);\n                    }\n\n                });\n            }\n\n\n            const expansionRowKey = PivotUtil.getRecordKey(rec, dimension);\n            const isExpanded = expansionStates.get(expansionRowKey) === undefined ?\n                defaultExpand :\n                expansionStates.get(expansionRowKey);\n            const shouldExpand = isExpanded || !dimension.childLevel || !rec.dimensionValues.get(dimension.memberName);\n            if (shouldExpand && recordsData) {\n                if (dimension.childLevel) {\n                    this.flattenGroups(recordsData, dimension.childLevel, expansionStates, defaultExpand, dimension, rec);\n                } else {\n                    // copy parent values and dims in child\n                    recordsData.forEach(x => {\n                        rec.dimensionValues.forEach((value, key) => {\n                            if (dimension.memberName !== key) {\n                                x.dimensionValues.set(key, value);\n                                const dim = rec.dimensions.find(y => y.memberName === key);\n                                x.dimensions.unshift(dim);\n                            }\n\n                        });\n                    });\n                }\n\n                data.splice(i + 1, 0, ...recordsData);\n                i += recordsData.length;\n\n            }\n        }\n    }\n\n    public static flattenGroupsHorizontally(data: IPivotGridRecord[],\n        dimension: IPivotDimension,\n        expansionStates,\n        defaultExpand: boolean,\n        visibleDimensions: IPivotDimension[],\n        summariesPosition: PivotSummaryPosition,\n        parent?: IPivotDimension,\n        parentRec?: IPivotGridRecord) {\n        for (let i = 0; i < data.length; i++) {\n            const rec = data[i];\n            const field = dimension.memberName;\n            if (!field) {\n                continue;\n            }\n\n            if (!visibleDimensions.find(recDim => recDim.memberName === rec.dimensions[0].memberName)) {\n                visibleDimensions.push(rec.dimensions[0]);\n            }\n\n            let recordsData = rec.children.get(field);\n            if (!recordsData && parent) {\n                // check parent\n                recordsData = rec.children.get(parent.memberName);\n                if (recordsData) {\n                    dimension = parent;\n                }\n            }\n\n            if (parentRec) {\n                parentRec.dimensionValues.forEach((value, key) => {\n                    rec.dimensionValues.set(key, value);\n                    const dim = parentRec.dimensions.find(x => x.memberName === key);\n                    rec.dimensions.unshift(dim);\n                });\n            }\n\n            const expansionRowKey = PivotUtil.getRecordKey(rec, dimension);\n            const isExpanded = expansionStates.get(expansionRowKey) === undefined ?\n                defaultExpand :\n                expansionStates.get(expansionRowKey);\n            const shouldExpand = isExpanded || !dimension.childLevel || !rec.dimensionValues.get(dimension.memberName);\n            if (shouldExpand && recordsData && !rec.totalRecordDimensionName) {\n                if (dimension.childLevel) {\n                    this.flattenGroupsHorizontally(recordsData, dimension.childLevel, expansionStates, defaultExpand, visibleDimensions, summariesPosition, dimension, rec);\n                } else {\n                    // copy parent values and dims in child\n                    recordsData.forEach(x => {\n                        rec.dimensionValues.forEach((value, key) => {\n                            if (dimension.memberName !== key) {\n                                x.dimensionValues.set(key, value);\n                                const dim = rec.dimensions.find(y => y.memberName === key);\n                                x.dimensions.unshift(dim);\n                            }\n\n                        });\n                    });\n                }\n\n                recordsData.forEach((childRec) => {\n                    if (childRec.dimensions.length === 1) {\n                        rec.dimensionValues.forEach((value: string, key) => {\n                            childRec.dimensionValues.set(key, value);\n                        });\n                    }\n\n                    childRec.dimensions.forEach((dim) => {\n                        if (!visibleDimensions.find(recDim => recDim.memberName === dim.memberName)) {\n                            visibleDimensions.push(dim);\n                        }\n                    });\n                });\n\n                const curDimValue = rec.dimensionValues.get(dimension.memberName);\n                if (dimension.horizontalSummary && curDimValue) {\n                    rec.totalRecordDimensionName = dimension.memberName;\n                    rec.dimensionValues.set(dimension.memberName, `${curDimValue} Total`);\n                    if (summariesPosition === PivotSummaryPosition.Top) {\n                        recordsData.unshift(rec);\n                    } else {\n                        recordsData.push(rec);\n                    }\n                }\n\n                data.splice(i, 1, ...recordsData);\n                i += recordsData.length - 1;\n\n            }\n        }\n    }\n\n    public static assignLevels(dims) {\n        for (const dim of dims) {\n            let currDim = dim;\n            let lvl = 0;\n            while (currDim.childLevel) {\n                currDim.level = lvl;\n                currDim = currDim.childLevel;\n                lvl++;\n            }\n            currDim.level = lvl;\n        }\n    }\n    public static getFieldsHierarchy(data: any[], dimensions: IPivotDimension[],\n        dimensionType: PivotDimensionType, pivotKeys: IPivotKeys, cloneStrategy: IDataCloneStrategy): Map<string, any> {\n        const hierarchy = new Map<string, any>();\n        for (const rec of data) {\n            const vals = dimensionType === PivotDimensionType.Column ?\n                this.extractValuesForColumn(dimensions, rec, pivotKeys) :\n                this.extractValuesForRow(dimensions, rec, pivotKeys, cloneStrategy);\n            for (const [_key, val] of vals) { // this should go in depth also vals.children\n                if (hierarchy.get(val.value) != null) {\n                    this.applyHierarchyChildren(hierarchy, val, rec, pivotKeys);\n                } else {\n                    hierarchy.set(val.value, cloneStrategy.clone(val));\n                    this.applyHierarchyChildren(hierarchy, val, rec, pivotKeys);\n                }\n            }\n        }\n        return hierarchy;\n    }\n\n    public static sort(data: IPivotGridRecord[], expressions: ISortingExpression[], sorting: IGridSortingStrategy = new IgxSorting()): any[] {\n        for (const rec of data) {\n            const children = rec.children;\n            for (const [key, child] of children) {\n                /**\n                * DataUtil.sort is returning new reference of the sorted array\n                * because of the Schwartizian transform\n                */\n                const sorted = this.sort(child, expressions, sorting);\n                children.set(key, sorted);\n            }\n\n        }\n        return DataUtil.sort(data, expressions, sorting);\n    }\n\n    public static extractValueFromDimension(dim: IPivotDimension, recData: any) {\n        return dim.memberFunction ? dim.memberFunction.call(null, recData) : recData[dim.memberName];\n    }\n\n    public static getDimensionDepth(dim: IPivotDimension): number {\n        let lvl = 0;\n        while (dim.childLevel) {\n            lvl++;\n            dim = dim.childLevel;\n        }\n        return lvl;\n    }\n\n    public static extractValuesForRow(dims: IPivotDimension[], recData: any, pivotKeys: IPivotKeys, cloneStrategy: IDataCloneStrategy) {\n        const values = new Map<string, any>();\n        for (const col of dims) {\n            if (recData[pivotKeys.level] && recData[pivotKeys.level] > 0) {\n                const childData = recData[pivotKeys.records];\n                return this.getFieldsHierarchy(childData, [col], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n            }\n\n            const value = this.extractValueFromDimension(col, recData);\n            const objValue = {};\n            objValue['value'] = value;\n            objValue['dimension'] = col;\n            if (col.childLevel) {\n                const childValues = this.extractValuesForRow([col.childLevel], recData, pivotKeys, cloneStrategy);\n                objValue[pivotKeys.children] = childValues;\n            }\n            values.set(value, objValue);\n        }\n\n        return values;\n    }\n\n    public static extractValuesForColumn(dims: IPivotDimension[], recData: any, pivotKeys: IPivotKeys, path = []) {\n        const vals = new Map<string, any>();\n        let lvlCollection = vals;\n        const flattenedDims = this.flatten(dims);\n        for (const col of flattenedDims) {\n            const value = this.extractValueFromDimension(col, recData);\n            path.push(value);\n            const newValue = path.join(pivotKeys.columnDimensionSeparator);\n            const newObj = { value: newValue, expandable: col.expandable, children: null, dimension: col };\n            if (!newObj.children) {\n                newObj.children = new Map<string, any>();\n            }\n            lvlCollection.set(newValue, newObj);\n            lvlCollection = newObj.children;\n        }\n        return vals;\n    }\n\n    public static flatten(arr, lvl = 0) {\n        const newArr = arr.reduce((acc, item) => {\n            if (item) {\n                item.level = lvl;\n                acc.push(item);\n                if (item.childLevel) {\n                    item.expandable = true;\n                    acc = acc.concat(this.flatten([item.childLevel], lvl + 1));\n                }\n            }\n            return acc;\n        }, []);\n        return newArr;\n    }\n\n    public static applyAggregations(rec: IPivotGridRecord, hierarchies, values, pivotKeys: IPivotKeys) {\n        if (hierarchies.size === 0) {\n            // no column groups\n            const aggregationResult = this.aggregate(rec.records, values);\n            this.applyAggregationRecordData(aggregationResult, undefined, rec, pivotKeys);\n            return;\n        }\n        hierarchies.forEach((hierarchy) => {\n            const children = hierarchy[pivotKeys.children];\n            if (children && children.size > 0) {\n                this.applyAggregations(rec, children, values, pivotKeys);\n                const childRecords = this.collectRecords(children, pivotKeys);\n                hierarchy[pivotKeys.aggregations] = this.aggregate(childRecords, values);\n                this.applyAggregationRecordData(hierarchy[pivotKeys.aggregations], hierarchy.value, rec, pivotKeys);\n            } else if (hierarchy[pivotKeys.records]) {\n                hierarchy[pivotKeys.aggregations] = this.aggregate(hierarchy[pivotKeys.records], values);\n                this.applyAggregationRecordData(hierarchy[pivotKeys.aggregations], hierarchy.value, rec, pivotKeys);\n            }\n        });\n    }\n\n    protected static applyAggregationRecordData(aggregationData: any, groupName: string, rec: IPivotGridRecord, pivotKeys: IPivotKeys) {\n        const aggregationKeys = Object.keys(aggregationData);\n        if (aggregationKeys.length > 1) {\n            aggregationKeys.forEach((key) => {\n                const aggregationKey = groupName ? groupName + pivotKeys.columnDimensionSeparator + key : key;\n                rec.aggregationValues.set(aggregationKey, aggregationData[key]);\n            });\n        } else if (aggregationKeys.length === 1) {\n            const aggregationKey = aggregationKeys[0];\n            rec.aggregationValues.set(groupName || aggregationKey, aggregationData[aggregationKey]);\n        }\n    }\n\n    public static aggregate(records, values: IPivotValue[]) {\n        const result = {};\n        for (const pivotValue of values) {\n            const aggregator = PivotUtil.getAggregatorForType(pivotValue.aggregate, pivotValue.dataType);\n            if (!aggregator) {\n                throw `No valid aggregator found for ${pivotValue.member}. Please set either a valid aggregatorName or aggregator`;\n            }\n            result[pivotValue.member] = aggregator(records.map(r => r[pivotValue.member]), records);\n        }\n\n        return result;\n    }\n\n    public static getAggregatorForType(aggregate: IPivotAggregator, dataType: GridColumnDataType) {\n        let aggregator = aggregate.aggregator;\n        if (aggregate.aggregatorName) {\n            let aggregators = IgxPivotNumericAggregate.aggregators();\n            if (!dataType || dataType === 'date' || dataType === 'dateTime') {\n                aggregators = aggregators.concat(IgxPivotDateAggregate.aggregators())\n            } else if (dataType === 'time') {\n                aggregators = aggregators.concat(IgxPivotTimeAggregate.aggregators());\n            }\n            aggregator = aggregators.find(x => x.key.toLocaleLowerCase() === aggregate.aggregatorName.toLocaleLowerCase())?.aggregator;\n        }\n        return aggregator;\n    }\n\n    public static processHierarchy(hierarchies, pivotKeys, level = 0, rootData = false): IPivotGridRecord[] {\n        const flatData: IPivotGridRecord[] = [];\n        hierarchies.forEach((h, key) => {\n            const field = h.dimension.memberName;\n            const rec: IPivotGridRecord = {\n                dimensionValues: new Map<string, string>(),\n                aggregationValues: new Map<string, string>(),\n                children: new Map<string, IPivotGridRecord[]>(),\n                dimensions: [h.dimension]\n            };\n            rec.dimensionValues.set(field, key);\n            if (h[pivotKeys.records]) {\n                rec.records = this.getDirectLeafs(h[pivotKeys.records]);\n            }\n            rec.level = level;\n            flatData.push(rec);\n            if (h[pivotKeys.children] && h[pivotKeys.children].size > 0) {\n                const nestedData = this.processHierarchy(h[pivotKeys.children],\n                    pivotKeys, level + 1, rootData);\n                rec.records = this.getDirectLeafs(nestedData);\n                rec.children.set(field, nestedData);\n            }\n        });\n\n        return flatData;\n    }\n\n    public static getDirectLeafs(records: IPivotGridRecord[]) {\n        let leafs = [];\n        for (const rec of records) {\n            if (rec.records) {\n                const data = rec.records.filter(x => !x.records && leafs.indexOf(x) === -1);\n                leafs = leafs.concat(data);\n            } else {\n                leafs.push(rec);\n            }\n        }\n        return leafs;\n    }\n\n    public static getRecordKey(rec: IPivotGridRecord, currentDim: IPivotDimension) {\n        const parentFields = [];\n\n        const currentDimIndex = rec.dimensions.findIndex(x => x.memberName === currentDim.memberName) + 1;\n        const prevDims = rec.dimensions.slice(0, currentDimIndex);\n        for (const prev of prevDims) {\n            const prevValue = rec.dimensionValues.get(prev.memberName);\n            parentFields.push(prevValue);\n        }\n\n        return parentFields.join('-');\n    }\n\n    public static buildExpressionTree(config: IPivotConfiguration) {\n        const allDimensions = (config?.rows || []).concat((config?.columns || [])).concat(config?.filters || []).filter(x => x !== null && x !== undefined);\n        const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n\n        const expressionsTree = new FilteringExpressionsTree(FilteringLogic.And);\n        // add expression trees from all filters\n        PivotUtil.flatten(enabledDimensions).forEach((x: IPivotDimension) => {\n            if (x.filter && x.filter.filteringOperands) {\n                expressionsTree.filteringOperands.push(...x.filter.filteringOperands);\n            }\n        });\n\n        return expressionsTree;\n    }\n\n    private static collectRecords(children, pivotKeys: IPivotKeys) {\n        let result = [];\n        children.forEach(value => result = result.concat(value[pivotKeys.records]));\n        return result;\n    }\n\n    private static applyHierarchyChildren(hierarchy, val, rec, pivotKeys: IPivotKeys) {\n        const recordsKey = pivotKeys.records;\n        const childKey = pivotKeys.children;\n        const childCollection = val[childKey];\n        const hierarchyValue = hierarchy.get(val.value);\n        if (Array.isArray(hierarchyValue[childKey])) {\n            hierarchyValue[childKey] = new Map<string, any>();\n        }\n        if (!childCollection || childCollection.size === 0) {\n            const dim = hierarchyValue.dimension;\n            const isValid = this.extractValueFromDimension(dim, rec) === val.value;\n            if (isValid) {\n                if (hierarchyValue[recordsKey]) {\n                    hierarchyValue[recordsKey].push(rec);\n                } else {\n                    hierarchyValue[recordsKey] = [rec];\n                }\n            }\n        } else {\n            const hierarchyChild = hierarchyValue[childKey];\n            for (const [_key, child] of childCollection) {\n                let hierarchyChildValue = hierarchyChild.get(child.value);\n                if (!hierarchyChildValue) {\n                    hierarchyChild.set(child.value, child);\n                    hierarchyChildValue = child;\n                }\n\n                if (hierarchyChildValue[recordsKey]) {\n                    const copy = Object.assign({}, rec);\n                    if (rec[recordsKey]) {\n                        // not all nested children are valid\n                        const nestedValue = hierarchyChildValue.value;\n                        const dimension = hierarchyChildValue.dimension;\n                        const validRecs = rec[recordsKey].filter(x => this.extractValueFromDimension(dimension, x) === nestedValue);\n                        copy[recordsKey] = validRecs;\n                    }\n                    hierarchyChildValue[recordsKey].push(copy);\n                } else {\n                    hierarchyChildValue[recordsKey] = [rec];\n                }\n\n                if (child[childKey] && child[childKey].size > 0) {\n                    this.applyHierarchyChildren(hierarchyChild, child, rec, pivotKeys);\n                }\n            }\n        }\n    }\n\n    public static getAggregateList(val: IPivotValue, grid: PivotGridType): IPivotAggregator[] {\n        if (!val.aggregateList) {\n            let defaultAggr = this.getAggregatorsForValue(val, grid);\n            const isDefault = defaultAggr.find(\n                (x) => x.key === val.aggregate.key\n            );\n            // resolve custom aggregations\n            if (!isDefault && grid.data[0][val.member] !== undefined) {\n                // if field exists, then we can apply default aggregations and add the custom one.\n                defaultAggr.unshift(val.aggregate);\n            } else if (!isDefault) {\n                // otherwise this is a custom aggregation that is not compatible\n                // with the defaults, since it operates on field that is not in the data\n                // leave only the custom one.\n                defaultAggr = [val.aggregate];\n            }\n            val.aggregateList = defaultAggr;\n        }\n        return val.aggregateList;\n    }\n\n    public static getAggregatorsForValue(value: IPivotValue, grid: PivotGridType): IPivotAggregator[] {\n        const dataType = value.dataType || grid.resolveDataTypes(grid.data[0][value.member]);\n        switch (dataType) {\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n                return IgxPivotNumericAggregate.aggregators();\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n                return IgxPivotDateAggregate.aggregators();\n            case GridColumnDataType.Time:\n                return IgxPivotTimeAggregate.aggregators();\n            default:\n                return IgxPivotAggregate.aggregators();\n        }\n    }\n\n    public static updateColumnTypeByAggregator(columns: any[], value: IPivotValue, isSingleValue: boolean): void {\n        const targetColumnType = PivotUtil.getColumnDataTypeForValue(value);\n        columns.forEach(column => {\n            if ((column.field?.includes(value.member) || isSingleValue) && targetColumnType !== undefined) {\n                column.dataType = targetColumnType;\n            }\n        })\n    }\n\n    private static getColumnDataTypeForValue(value: IPivotValue): GridColumnDataType {\n        const isCountAggregator = value.aggregate.aggregator?.name?.toLowerCase() === 'count' || value.aggregate.aggregatorName?.toLowerCase() === 'count';\n\n        if ((value.dataType === GridColumnDataType.Currency || value.dataType === GridColumnDataType.Percent) && isCountAggregator) {\n            return GridColumnDataType.Number;\n        } else if (value.dataType === GridColumnDataType.Currency && !isCountAggregator) {\n            return GridColumnDataType.Currency;\n        } else if (value.dataType === GridColumnDataType.Percent && !isCountAggregator) {\n            return GridColumnDataType.Percent;\n        }\n    }\n}\n","import { EventEmitter, Injectable, NgZone, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IRowSelectionEventArgs } from '../common/events';\nimport { GridType } from '../common/grid.interface';\nimport { FilteringExpressionsTree, PlatformUtil } from 'igniteui-angular/core';\nimport { GridSelectionRange, IColumnSelectionState, IMultiRowLayoutNode, ISelectionKeyboardState, ISelectionNode, ISelectionPointerState, SelectionState } from '../common/types';\nimport { PivotUtil } from '../pivot-util';\n\n\n@Injectable()\nexport class IgxGridSelectionService {\n    private zone = inject(NgZone);\n    protected platform = inject(PlatformUtil);\n\n    public grid: GridType;\n    public dragMode = false;\n    public activeElement: ISelectionNode | null;\n    public keyboardState = {} as ISelectionKeyboardState;\n    public pointerState = {} as ISelectionPointerState;\n    public columnsState = {} as IColumnSelectionState;\n\n    public selection = new Map<number, Set<number>>();\n    public temp = new Map<number, Set<number>>();\n    public rowSelection: Set<any> = new Set<any>();\n    public indeterminateRows: Set<any> = new Set<any>();\n    public columnSelection: Set<string> = new Set<string>();\n    /**\n     * @hidden @internal\n     */\n    public selectedRowsChange = new Subject<any[]>();\n\n    /**\n     * @hidden @internal\n     */\n    public selectedRangeChange = new Subject<Map<number, Set<number>>>();\n\n    /**\n     * Toggled when a pointerdown event is triggered inside the grid body (cells).\n     * When `false` the drag select behavior is disabled.\n     */\n    private pointerEventInGridBody = false;\n\n    private allRowsSelected: boolean;\n    private _lastSelectedNode: ISelectionNode;\n    private _ranges: Set<string> = new Set<string>();\n    private _selectionRange: Range;\n\n    /**\n     * Returns the current selected ranges in the grid from both\n     * keyboard and pointer interactions\n     */\n    public get ranges(): GridSelectionRange[] {\n\n        // The last action was keyboard + shift selection -> add it\n        this.addKeyboardRange();\n\n        const ranges = Array.from(this._ranges).map(range => JSON.parse(range));\n\n        // No ranges but we have a focused cell -> add it\n        if (!ranges.length && this.activeElement && this.grid.isCellSelectable) {\n            ranges.push(this.generateRange(this.activeElement));\n        }\n\n        return ranges;\n    }\n\n    public get primaryButton(): boolean {\n        return this.pointerState.primaryButton;\n    }\n\n    public set primaryButton(value: boolean) {\n        this.pointerState.primaryButton = value;\n    }\n\n    constructor() {\n        this.initPointerState();\n        this.initKeyboardState();\n        this.initColumnsState();\n    }\n\n    /**\n     * Resets the keyboard state\n     */\n    public initKeyboardState(): void {\n        this.keyboardState.node = null;\n        this.keyboardState.shift = false;\n        this.keyboardState.range = null;\n        this.keyboardState.active = false;\n    }\n\n    /**\n     * Resets the pointer state\n     */\n    public initPointerState(): void {\n        this.pointerState.node = null;\n        this.pointerState.ctrl = false;\n        this.pointerState.shift = false;\n        this.pointerState.range = null;\n        this.pointerState.primaryButton = true;\n    }\n\n    /**\n     * Resets the columns state\n     */\n    public initColumnsState(): void {\n        this.columnsState.field = null;\n        this.columnsState.range = [];\n    }\n\n    /**\n     * Adds a single node.\n     * Single clicks | Ctrl + single clicks on cells is the usual case.\n     */\n    public add(node: ISelectionNode, addToRange = true): void {\n        if (this.selection.has(node.row)) {\n            this.selection.get(node.row).add(node.column);\n        } else {\n            this.selection.set(node.row, new Set<number>()).get(node.row).add(node.column);\n        }\n\n        if (addToRange) {\n            this._ranges.add(JSON.stringify(this.generateRange(node)));\n        }\n    }\n\n    /**\n     * Adds the active keyboard range selection (if any) to the `ranges` meta.\n     */\n    public addKeyboardRange(): void {\n        if (this.keyboardState.range) {\n            this._ranges.add(JSON.stringify(this.keyboardState.range));\n        }\n    }\n\n    public remove(node: ISelectionNode): void {\n        if (this.selection.has(node.row)) {\n            this.selection.get(node.row).delete(node.column);\n        }\n        if (this.isActiveNode(node)) {\n            this.activeElement = null;\n        }\n        this._ranges.delete(JSON.stringify(this.generateRange(node)));\n    }\n\n    public isInMap(node: ISelectionNode): boolean {\n        return (this.selection.has(node.row) && this.selection.get(node.row).has(node.column)) ||\n            (this.temp.has(node.row) && this.temp.get(node.row).has(node.column));\n    }\n\n    public selected(node: ISelectionNode): boolean {\n        return (this.isActiveNode(node) && this.grid.isCellSelectable) || this.isInMap(node);\n    }\n\n    public isActiveNode(node: ISelectionNode): boolean {\n        if (this.activeElement) {\n            const isActive = this.activeElement.column === node.column && this.activeElement.row === node.row;\n            if (this.grid.hasColumnLayouts) {\n                const layout = this.activeElement.layout;\n                return isActive && this.isActiveLayout(layout, node.layout);\n            }\n            return isActive;\n        }\n        return false;\n    }\n\n    public isActiveLayout(current: IMultiRowLayoutNode, target: IMultiRowLayoutNode): boolean {\n        return current.columnVisibleIndex === target.columnVisibleIndex;\n    }\n\n    public addRangeMeta(node: ISelectionNode, state?: SelectionState): void {\n        this._ranges.add(JSON.stringify(this.generateRange(node, state)));\n    }\n\n    public removeRangeMeta(node: ISelectionNode, state?: SelectionState): void {\n        this._ranges.delete(JSON.stringify(this.generateRange(node, state)));\n    }\n\n    /**\n     * Generates a new selection range from the given `node`.\n     * If `state` is passed instead it will generate the range based on the passed `node`\n     * and the start node of the `state`.\n     */\n    public generateRange(node: ISelectionNode, state?: SelectionState): GridSelectionRange {\n        this._lastSelectedNode = node;\n\n        if (!state) {\n            return {\n                rowStart: node.row,\n                rowEnd: node.row,\n                columnStart: node.column,\n                columnEnd: node.column\n            };\n        }\n\n        const { row, column } = state.node;\n        const rowStart = Math.min(node.row, row);\n        const rowEnd = Math.max(node.row, row);\n        const columnStart = Math.min(node.column, column);\n        const columnEnd = Math.max(node.column, column);\n\n        return { rowStart, rowEnd, columnStart, columnEnd };\n    }\n\n    /**\n     *\n     */\n    public keyboardStateOnKeydown(node: ISelectionNode, shift: boolean, shiftTab: boolean): void {\n        this.keyboardState.active = true;\n        this.initPointerState();\n        this.keyboardState.shift = shift && !shiftTab;\n        if (!this.grid.navigation.isDataRow(node.row)) {\n            return;\n        }\n        // Kb navigation with shift and no previous node.\n        // Clear the current selection init the start node.\n        if (this.keyboardState.shift && !this.keyboardState.node) {\n            this.clear();\n            this.keyboardState.node = Object.assign({}, node);\n        }\n    }\n\n    public keyboardStateOnFocus(node: ISelectionNode, emitter: EventEmitter<GridSelectionRange>, dom): void {\n        const kbState = this.keyboardState;\n\n        // Focus triggered by keyboard navigation\n        if (kbState.active) {\n            if (this.platform.isChromium) {\n                this._moveSelectionChrome(dom);\n            }\n            // Start generating a range if shift is hold\n            if (kbState.shift) {\n                this.dragSelect(node, kbState);\n                kbState.range = this.generateRange(node, kbState);\n                emitter.emit(this.generateRange(node, kbState));\n                return;\n            }\n\n            this.initKeyboardState();\n            this.clear();\n            this.add(node);\n        }\n    }\n\n    public pointerDown(node: ISelectionNode, shift: boolean, ctrl: boolean): void {\n        this.addKeyboardRange();\n        this.initKeyboardState();\n        this.pointerState.ctrl = ctrl;\n        this.pointerState.shift = shift;\n        this.pointerEventInGridBody = true;\n        this.grid.document.body.addEventListener('pointerup', this.pointerOriginHandler);\n\n        // No ctrl key pressed - no multiple selection\n        if (!ctrl) {\n            this.clear();\n        }\n\n        if (shift) {\n            // No previously 'clicked' node. Use the last active node.\n            if (!this.pointerState.node) {\n                this.pointerState.node = this.activeElement || node;\n            }\n            this.pointerDownShiftKey(node);\n            this.clearTextSelection();\n            return;\n        }\n\n        this.removeRangeMeta(node);\n        this.pointerState.node = node;\n    }\n\n    public pointerDownShiftKey(node: ISelectionNode): void {\n        this.clear();\n        this.selectRange(node, this.pointerState);\n    }\n\n    public mergeMap(target: Map<number, Set<number>>, source: Map<number, Set<number>>): void {\n        const iterator = source.entries();\n        let pair = iterator.next();\n        let key: number;\n        let value: Set<number>;\n\n        while (!pair.done) {\n            [key, value] = pair.value;\n            if (target.has(key)) {\n                const newValue = target.get(key);\n                value.forEach(record => newValue.add(record));\n                target.set(key, newValue);\n            } else {\n                target.set(key, value);\n            }\n            pair = iterator.next();\n        }\n    }\n\n    public pointerEnter(node: ISelectionNode, event: PointerEvent): boolean {\n        // https://www.w3.org/TR/pointerevents/#the-button-property\n        this.dragMode = (event.buttons === 1 && (event.button === -1 || event.button === 0)) && this.pointerEventInGridBody;\n        if (!this.dragMode) {\n            return false;\n        }\n        this.clearTextSelection();\n\n        // If the users triggers a drag-like event by first clicking outside the grid cells\n        // and then enters in the grid body we may not have a initial pointer starting node.\n        // Assume the first pointerenter node is where we start.\n        if (!this.pointerState.node) {\n            this.pointerState.node = node;\n        }\n\n        if (this.pointerState.ctrl) {\n            this.selectRange(node, this.pointerState, this.temp);\n        } else {\n            this.dragSelect(node, this.pointerState);\n        }\n        return true;\n    }\n\n    public pointerUp(node: ISelectionNode, emitter: EventEmitter<GridSelectionRange>, firedOutsideGrid?: boolean): boolean {\n        if (this.dragMode || firedOutsideGrid) {\n            this.restoreTextSelection();\n            this.addRangeMeta(node, this.pointerState);\n            this.mergeMap(this.selection, this.temp);\n            this.zone.runTask(() => emitter.emit(this.generateRange(node, this.pointerState)));\n            this.temp.clear();\n            this.dragMode = false;\n            return true;\n        }\n\n        if (this.pointerState.shift) {\n            this.clearTextSelection();\n            this.restoreTextSelection();\n            this.addRangeMeta(node, this.pointerState);\n            emitter.emit(this.generateRange(node, this.pointerState));\n            return true;\n        }\n\n        if (this.pointerEventInGridBody && this.isActiveNode(node)) {\n            this.add(node);\n        }\n        return false;\n    }\n\n    public selectRange(node: ISelectionNode, state: SelectionState, collection: Map<number, Set<number>> = this.selection): void {\n        if (collection === this.temp) {\n            collection.clear();\n        }\n        const { rowStart, rowEnd, columnStart, columnEnd } = this.generateRange(node, state);\n        for (let i = rowStart; i <= rowEnd; i++) {\n            for (let j = columnStart as number; j <= (columnEnd as number); j++) {\n                if (collection.has(i)) {\n                    collection.get(i).add(j);\n                } else {\n                    collection.set(i, new Set<number>()).get(i).add(j);\n                }\n            }\n        }\n\n        this.selectedRangeChange.next(collection);\n    }\n\n    public dragSelect(node: ISelectionNode, state: SelectionState): void {\n        if (!this.pointerState.ctrl) {\n            this.selection.clear();\n        }\n        this.selectRange(node, state);\n    }\n\n    public clear(clearAcriveEl = false): void {\n        if (clearAcriveEl) {\n            this.activeElement = null;\n        }\n        this.selection.clear();\n        this.temp.clear();\n        this._ranges.clear();\n    }\n\n    public clearTextSelection(): void {\n        const selection = window.getSelection();\n        if (selection.rangeCount) {\n            this._selectionRange = selection.getRangeAt(0);\n            this._selectionRange.collapse(true);\n            selection.removeAllRanges();\n        }\n    }\n\n    public restoreTextSelection(): void {\n        const selection = window.getSelection();\n        if (!selection.rangeCount) {\n            selection.addRange(this._selectionRange || this.grid.document.createRange());\n        }\n    }\n\n    public getSelectedRowsData() {\n        if (this.grid.type === 'pivot') {\n            return this.grid.dataView.filter(r => {\n                const keys = r.dimensions.map(d => PivotUtil.getRecordKey(r, d));\n                return keys.some(k => this.isPivotRowSelected(k));\n            });\n        }\n        if (!this.grid.primaryKey) {\n            return Array.from(this.rowSelection);\n        }\n        const selection = [];\n        const gridDataMap = {};\n        this.grid.gridAPI.get_all_data(true).forEach(row => gridDataMap[this.getRecordKey(row)] = row);\n        this.rowSelection.forEach(rID => {\n            const rData = gridDataMap[rID];\n            const partialRowData = {};\n            partialRowData[this.grid.primaryKey] = rID;\n            selection.push(rData ? rData : partialRowData);\n        });\n        return selection;\n    }\n\n    /** Returns array of the selected row id's. */\n    public getSelectedRows(): Array<any> {\n        return this.rowSelection.size ? Array.from(this.rowSelection.keys()) : [];\n    }\n\n    /** Returns array of the rows in indeterminate state. */\n    public getIndeterminateRows(): Array<any> {\n        return this.indeterminateRows.size ? Array.from(this.indeterminateRows.keys()) : [];\n    }\n\n    /** Clears row selection, if filtering is applied clears only selected rows from filtered data. */\n    public clearRowSelection(event?): void {\n        const selectedRows = this.getSelectedRowsData();\n        const removedRec = this.isFilteringApplied() ?\n            this.allData.filter(row => this.isRowSelected(this.getRecordKey(row))) : selectedRows;\n        let newSelection;\n        if (this.grid.primaryKey) {\n            newSelection = this.isFilteringApplied() ? selectedRows.filter(x => {\n                return !removedRec.some(item => item[this.grid.primaryKey] === x[this.grid.primaryKey]);\n            }) : [];\n        } else {\n            newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : [];\n        }\n        this.emitRowSelectionEvent(newSelection, [], removedRec, event, selectedRows);\n    }\n\n    /** Select all rows, if filtering is applied select only from filtered data. */\n    public selectAllRows(event?) {\n        const addedRows = this.allData.filter((row) => !this.rowSelection.has(this.getRecordKey(row)));\n        const selectedRows = this.getSelectedRowsData();\n        const newSelection = this.rowSelection.size ? selectedRows.concat(addedRows) : addedRows;\n        this.indeterminateRows.clear();\n        this.emitRowSelectionEvent(newSelection, addedRows, [], event, selectedRows);\n    }\n\n    /** Select the specified row and emit event. */\n    public selectRowById(rowID, clearPrevSelection?, event?): void {\n        if (!(this.grid.isRowSelectable || this.grid.type === 'pivot') || this.isRowDeleted(rowID)) {\n            return;\n        }\n        clearPrevSelection = !this.grid.isMultiRowSelectionEnabled || clearPrevSelection;\n        if (this.grid.type === 'pivot') {\n            this.selectPivotRowById(rowID, clearPrevSelection, event);\n            return;\n        }\n        const selectedRows = this.getSelectedRowsData();\n        const newSelection = clearPrevSelection ? [this.getRowDataById(rowID)] : this.rowSelection.has(rowID) ?\n            selectedRows : [...selectedRows, this.getRowDataById(rowID)];\n        const removed = clearPrevSelection ? selectedRows : [];\n        this.emitRowSelectionEvent(newSelection, [this.getRowDataById(rowID)], removed, event, selectedRows);\n    }\n\n    public selectPivotRowById(rowID, clearPrevSelection: boolean, event?): void {\n        const selectedRows = this.getSelectedRows();\n        const newSelection = clearPrevSelection ? [rowID] : this.rowSelection.has(rowID) ? selectedRows : [...selectedRows, rowID];\n        const added = this.getPivotRowsByIds([rowID]);\n        const removed = this.getPivotRowsByIds(clearPrevSelection ? selectedRows : []);\n        this.emitRowSelectionEventPivotGrid(selectedRows, newSelection, added, removed, event);\n    }\n\n    /** Deselect the specified row and emit event. */\n    public deselectRow(rowID, event?): void {\n        if (!this.isRowSelected(rowID)) {\n            return;\n        }\n        if(this.grid.type === 'pivot') {\n            this.deselectPivotRowByID(rowID, event);\n            return;\n        }\n        const selectedRows = this.getSelectedRowsData();\n        const newSelection = selectedRows.filter(r =>  this.getRecordKey(r) !== rowID);\n        if (this.rowSelection.size && this.rowSelection.has(rowID)) {\n            this.emitRowSelectionEvent(newSelection, [], [this.getRowDataById(rowID)], event, selectedRows);\n        }\n    }\n\n    public deselectPivotRowByID(rowID, event?) {\n        if (this.rowSelection.size && this.rowSelection.has(rowID)) {\n            const currSelection = this.getSelectedRows();\n            const newSelection = currSelection.filter(r => r !== rowID);\n            const removed  = this.getPivotRowsByIds([rowID]);\n            this.emitRowSelectionEventPivotGrid(currSelection, newSelection, [], removed, event);\n        }\n    }\n\n    private emitRowSelectionEventPivotGrid(currSelection, newSelection, added, removed, event) {\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n        const currSelectedRows = this.getSelectedRowsData();\n        const args: IRowSelectionEventArgs = {\n            owner: this.grid,\n            oldSelection: currSelectedRows,\n            newSelection: this.getPivotRowsByIds(newSelection),\n            added,\n            removed,\n            event,\n            cancel: false,\n            allRowsSelected: this.areAllRowSelected(newSelection)\n        };\n        this.grid.rowSelectionChanging.emit(args);\n        if (args.cancel) {\n            this.clearHeaderCBState();\n            return;\n        }\n        this.selectRowsWithNoEvent(newSelection, true);\n    }\n\n    /** Select the specified rows and emit event. */\n    public selectRows(keys: any[], clearPrevSelection?: boolean, event?): void {\n        if (!this.grid.isMultiRowSelectionEnabled) {\n            return;\n        }\n\n        let rowsToSelect = keys.filter(x => !this.isRowDeleted(x) && !this.rowSelection.has(x));\n        if (!rowsToSelect.length && !clearPrevSelection) {\n            // no valid/additional rows to select and no clear\n            return;\n        }\n\n        const selectedRows = this.getSelectedRowsData();\n        rowsToSelect = this.grid.primaryKey ? rowsToSelect.map(r => this.getRowDataById(r)) : rowsToSelect;\n        const newSelection = clearPrevSelection ? rowsToSelect : [...selectedRows, ...rowsToSelect];\n        const keysAsSet = new Set(rowsToSelect);\n        const removed = clearPrevSelection ? selectedRows.filter(x => !keysAsSet.has(x)) : [];\n        this.emitRowSelectionEvent(newSelection, rowsToSelect, removed, event, selectedRows);\n    }\n\n    public deselectRows(keys: any[], event?): void {\n        if (!this.rowSelection.size) {\n            return;\n        }\n        let rowsToDeselect = keys.filter(x => this.rowSelection.has(x));\n        if (!rowsToDeselect.length) {\n            return;\n        }\n        const selectedRows = this.getSelectedRowsData();\n        rowsToDeselect = this.grid.primaryKey ? rowsToDeselect.map(r => this.getRowDataById(r)) : rowsToDeselect;\n        const keysAsSet = new Set(rowsToDeselect);\n        const newSelection = selectedRows.filter(r => !keysAsSet.has(r));\n        this.emitRowSelectionEvent(newSelection, [], rowsToDeselect, event, selectedRows);\n    }\n\n    /** Select specified rows. No event is emitted. */\n    public selectRowsWithNoEvent(rowIDs: any[], clearPrevSelection?): void {\n        if (clearPrevSelection) {\n            this.rowSelection.clear();\n        }\n        rowIDs.forEach(rowID => this.rowSelection.add(rowID));\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next(rowIDs);\n    }\n\n    /** Deselect specified rows. No event is emitted. */\n    public deselectRowsWithNoEvent(rowIDs: any[]): void {\n        this.clearHeaderCBState();\n        rowIDs.forEach(rowID => this.rowSelection.delete(rowID));\n        this.selectedRowsChange.next(this.getSelectedRows());\n    }\n\n    public isRowSelected(rowID): boolean {\n        return this.rowSelection.size > 0 && this.rowSelection.has(rowID);\n    }\n\n    public isPivotRowSelected(rowID): boolean {\n        let contains = false;\n        this.rowSelection.forEach(x => {\n            const correctRowId = rowID.replace(x,'');\n            if (rowID.includes(x) && (correctRowId === '' || correctRowId.startsWith('_')) ) {\n                contains = true;\n                return;\n            }\n        });\n        return this.rowSelection.size > 0 && contains;\n    }\n\n    public isRowInIndeterminateState(rowID): boolean {\n        return this.indeterminateRows.size > 0 && this.indeterminateRows.has(rowID);\n    }\n\n    /** Select range from last selected row to the current specified row. */\n    public selectMultipleRows(rowID, rowData, event?): void {\n        this.clearHeaderCBState();\n        if (!this.rowSelection.size || this.isRowDeleted(rowID)) {\n            this.selectRowById(rowID);\n            return;\n        }\n        const gridData = this.allData;\n        const lastRowID = this.getSelectedRows()[this.rowSelection.size - 1];\n        const currIndex = gridData.indexOf(this.getRowDataById(lastRowID));\n        const newIndex = gridData.indexOf(rowData);\n        const rows = gridData.slice(Math.min(currIndex, newIndex), Math.max(currIndex, newIndex) + 1);\n        const currSelection = this.getSelectedRowsData();\n        const added = rows.filter(r => !this.isRowSelected(this.getRecordKey(r)));\n        const newSelection = currSelection.concat(added);\n        this.emitRowSelectionEvent(newSelection, added, [], event, currSelection);\n    }\n\n    public areAllRowSelected(newSelection?): boolean {\n        if (!this.grid.data && !newSelection) {\n            return false;\n        }\n        if (this.allRowsSelected !== undefined && !newSelection) {\n            return this.allRowsSelected;\n        }\n        const selectedData = new Set(this.getRowIDs(newSelection || this.rowSelection));\n        return this.allRowsSelected = this.allData.length > 0 && this.allData.every(row => selectedData.has(this.getRecordKey(row)));\n    }\n\n    public hasSomeRowSelected(): boolean {\n        const filteredData = this.isFilteringApplied() ?\n            this.getRowIDs(this.grid.filteredData).some(rID => this.isRowSelected(rID)) : true;\n        return this.rowSelection.size > 0 && filteredData && !this.areAllRowSelected();\n    }\n\n    public get filteredSelectedRowIds(): any[] {\n        return this.isFilteringApplied() ?\n            this.getRowIDs(this.allData).filter(rowID => this.isRowSelected(rowID)) :\n            this.getSelectedRows().filter(rowID => !this.isRowDeleted(rowID));\n    }\n\n    public emitRowSelectionEvent(newSelection, added, removed, event?, currSelection?): boolean {\n        currSelection = currSelection ?? this.getSelectedRowsData();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args: IRowSelectionEventArgs = {\n            owner: this.grid,\n            oldSelection: currSelection,\n            newSelection,\n            added,\n            removed,\n            event,\n            cancel: false,\n            allRowsSelected: this.areAllRowSelected(newSelection)\n        };\n\n        this.grid.rowSelectionChanging.emit(args);\n        if (args.cancel) {\n            this.clearHeaderCBState();\n            return;\n        }\n        this.selectRowsWithNoEvent(args.newSelection.map(r => this.getRecordKey(r)), true);\n    }\n\n    public getPivotRowsByIds(ids: any[]) {\n        return this.grid.dataView.filter(r => {\n            const keys = r.dimensions.map(d => PivotUtil.getRecordKey(r, d));\n            return new Set(ids.concat(keys)).size < ids.length + keys.length;\n        });\n    }\n\n    public getRowDataById(rowID): any {\n        if (!this.grid.primaryKey) {\n            return rowID;\n        }\n        const rowIndex = this.getRowIDs(this.grid.gridAPI.get_all_data(true)).indexOf(rowID);\n        return rowIndex < 0 ? rowID : this.grid.gridAPI.get_all_data(true)[rowIndex];\n    }\n\n    public clearHeaderCBState(): void {\n        this.allRowsSelected = undefined;\n    }\n\n    public getRowIDs(data): Array<any> {\n        return this.grid.primaryKey && data.length ? data.map(rec => rec[this.grid.primaryKey]) : data;\n    }\n\n    public getRecordKey(record) {\n        return this.grid.primaryKey ? record[this.grid.primaryKey] : record;\n    }\n\n    /** Clear rowSelection and update checkbox state */\n    public clearAllSelectedRows(): void {\n        this.rowSelection.clear();\n        this.indeterminateRows.clear();\n        this.clearHeaderCBState();\n        this.selectedRowsChange.next([]);\n    }\n\n    /** Returns all data in the grid, with applied filtering and sorting and without deleted rows. */\n    public get allData(): Array<any> {\n        let allData;\n        // V.T. Jan 17th, 2024 #13757 Adding an additional conditional check to take account WITHIN range of groups\n        if (this.isFilteringApplied() || this.grid.sortingExpressions.length || this.grid.groupingExpressions?.length) {\n            allData = this.grid.pinnedRecordsCount ? this.grid._filteredSortedUnpinnedData : this.grid.filteredSortedData;\n        } else {\n            allData = this.grid.gridAPI.get_all_data(true);\n        }\n        return allData.filter(rData => !this.isRowDeleted(this.grid.gridAPI.get_row_id(rData)));\n    }\n\n    /** Returns array of the selected columns fields. */\n    public getSelectedColumns(): Array<any> {\n        return this.columnSelection.size ? Array.from(this.columnSelection.keys()) : [];\n    }\n\n    public isColumnSelected(field: string): boolean {\n        return this.columnSelection.size > 0 && this.columnSelection.has(field);\n    }\n\n    /** Select the specified column and emit event. */\n    public selectColumn(field: string, clearPrevSelection?, selectColumnsRange?, event?): void {\n        const stateColumn = this.columnsState.field ? this.grid.getColumnByName(this.columnsState.field) : null;\n        if (!event || !stateColumn || stateColumn.visibleIndex < 0 || !selectColumnsRange) {\n            this.columnsState.field = field;\n            this.columnsState.range = [];\n\n            const newSelection = clearPrevSelection ? [field] : this.getSelectedColumns().indexOf(field) !== -1 ?\n                this.getSelectedColumns() : [...this.getSelectedColumns(), field];\n            const removed = clearPrevSelection ? this.getSelectedColumns().filter(colField => colField !== field) : [];\n            const added = this.isColumnSelected(field) ? [] : [field];\n            this.emitColumnSelectionEvent(newSelection, added, removed, event);\n        } else if (selectColumnsRange) {\n            this.selectColumnsRange(field, event);\n        }\n    }\n\n    /** Select specified columns. And emit event. */\n    public selectColumns(fields: string[], clearPrevSelection?, selectColumnsRange?, event?): void {\n        const columns = fields.map(f => this.grid.getColumnByName(f)).sort((a, b) => a.visibleIndex - b.visibleIndex);\n        const stateColumn = this.columnsState.field ? this.grid.getColumnByName(this.columnsState.field) : null;\n        if (!stateColumn || stateColumn.visibleIndex < 0 || !selectColumnsRange) {\n            this.columnsState.field = columns[0] ? columns[0].field : null;\n            this.columnsState.range = [];\n\n            const added = fields.filter(colField => !this.isColumnSelected(colField));\n            const removed = clearPrevSelection ? this.getSelectedColumns().filter(colField => fields.indexOf(colField) === -1) : [];\n            const newSelection = clearPrevSelection ? fields : this.getSelectedColumns().concat(added);\n\n            this.emitColumnSelectionEvent(newSelection, added, removed, event);\n        } else {\n            const filedStart = stateColumn.visibleIndex >\n                columns[columns.length - 1].visibleIndex ? columns[0].field : columns[columns.length - 1].field;\n            this.selectColumnsRange(filedStart, event);\n        }\n    }\n\n    /** Select range from last clicked column to the current specified column. */\n    public selectColumnsRange(field: string, event): void {\n        const currIndex = this.grid.getColumnByName(this.columnsState.field).visibleIndex;\n        const newIndex = this.grid.columnToVisibleIndex(field);\n        const columnsFields = this.grid.visibleColumns\n            .filter(c => !c.columnGroup)\n            .sort((a, b) => a.visibleIndex - b.visibleIndex)\n            .slice(Math.min(currIndex, newIndex), Math.max(currIndex, newIndex) + 1)\n            .filter(col => col.selectable).map(col => col.field);\n        const removed = [];\n        const oldAdded = [];\n        const added = columnsFields.filter(colField => !this.isColumnSelected(colField));\n        this.columnsState.range.forEach(f => {\n            if (columnsFields.indexOf(f) === -1) {\n                removed.push(f);\n            } else {\n                oldAdded.push(f);\n            }\n        });\n        this.columnsState.range = columnsFields.filter(colField => !this.isColumnSelected(colField) || oldAdded.indexOf(colField) > -1);\n        const newSelection = this.getSelectedColumns().concat(added).filter(c => removed.indexOf(c) === -1);\n        this.emitColumnSelectionEvent(newSelection, added, removed, event);\n    }\n\n    /** Select specified columns. No event is emitted. */\n    public selectColumnsWithNoEvent(fields: string[], clearPrevSelection?): void {\n        if (clearPrevSelection) {\n            this.columnSelection.clear();\n        }\n        fields.forEach(field => {\n            this.columnSelection.add(field);\n        });\n    }\n\n    /** Deselect the specified column and emit event. */\n    public deselectColumn(field: string, event?): void {\n        this.initColumnsState();\n        const newSelection = this.getSelectedColumns().filter(c => c !== field);\n        this.emitColumnSelectionEvent(newSelection, [], [field], event);\n    }\n\n    /** Deselect specified columns. No event is emitted. */\n    public deselectColumnsWithNoEvent(fields: string[]): void {\n        fields.forEach(field => this.columnSelection.delete(field));\n    }\n\n    /** Deselect specified columns. And emit event. */\n    public deselectColumns(fields: string[], event?): void {\n        const removed = this.getSelectedColumns().filter(colField => fields.indexOf(colField) > -1);\n        const newSelection = this.getSelectedColumns().filter(colField => fields.indexOf(colField) === -1);\n\n        this.emitColumnSelectionEvent(newSelection, [], removed, event);\n    }\n\n    public emitColumnSelectionEvent(newSelection, added, removed, event?): boolean {\n        const currSelection = this.getSelectedColumns();\n        if (this.areEqualCollections(currSelection, newSelection)) {\n            return;\n        }\n\n        const args = {\n            oldSelection: currSelection, newSelection,\n            added, removed, event, cancel: false\n        };\n        this.grid.columnSelectionChanging.emit(args);\n        if (args.cancel) {\n            return;\n        }\n        this.selectColumnsWithNoEvent(args.newSelection, true);\n    }\n\n    /** Clear columnSelection */\n    public clearAllSelectedColumns(): void {\n        this.columnSelection.clear();\n    }\n\n    protected areEqualCollections(first, second): boolean {\n        return first.length === second.length && new Set(first.concat(second)).size === first.length;\n    }\n\n    /**\n     * (╯°□°）╯︵ ┻━┻\n     * Chrome and Chromium don't care about the active\n     * range after keyboard navigation, thus this.\n     */\n    private _moveSelectionChrome(node: Node) {\n        const selection = window.getSelection();\n        selection.removeAllRanges();\n        const range = new Range();\n        range.selectNode(node);\n        range.collapse(true);\n        selection.addRange(range);\n    }\n\n    private isFilteringApplied(): boolean {\n        return !FilteringExpressionsTree.empty(this.grid.filteringExpressionsTree) ||\n            !FilteringExpressionsTree.empty(this.grid.advancedFilteringExpressionsTree);\n    }\n\n    private isRowDeleted(rowID): boolean {\n        return this.grid.gridAPI.row_deleted_transaction(rowID);\n    }\n\n    private pointerOriginHandler = (event) => {\n        this.pointerEventInGridBody = false;\n        this.grid.document.body.removeEventListener('pointerup', this.pointerOriginHandler);\n\n        const gridCellSelectors = ['igx-grid-cell', 'igx-hierarchical-grid-cell', 'igx-tree-grid-cell'];\n        const isInsideGridCell = gridCellSelectors.some(selector => event.target.closest(selector));\n\n        if (!isInsideGridCell) {\n            this.pointerUp(this._lastSelectedNode, this.grid.rangeSelected, true);\n        }\n    };\n}\n","import { Injectable } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { IGridEditDoneEventArgs, IGridEditEventArgs, IRowDataCancelableEventArgs, IRowDataEventArgs } from '../common/events';\nimport { GridType, RowType } from './grid.interface';\nimport { Subject } from 'rxjs';\nimport { FormGroup } from '@angular/forms';\nimport { copyDescriptors, DateTimeUtil, isDate, isEqual } from 'igniteui-angular/core';\n\nexport class IgxEditRow {\n    public transactionState: any;\n    public state: any;\n    public newData: any;\n    public rowFormGroup = new FormGroup({});\n\n    constructor(public id: any, public index: number, public data: any, public grid: GridType) {\n        this.rowFormGroup = this.grid.validation.create(id, data);\n    }\n\n    public createRowEditEventArgs(includeNewValue = true, event?: Event): IGridEditEventArgs {\n        const args: IGridEditEventArgs = {\n            primaryKey: this.id,\n            rowID: this.id,\n            rowKey: this.id,\n            rowData: this.data,\n            oldValue: this.data,\n            cancel: false,\n            owner: this.grid,\n            isAddRow: false,\n            valid: this.rowFormGroup.valid,\n            event\n        };\n        if (includeNewValue) {\n            args.newValue = this.newData ?? this.data;\n        }\n        return args;\n    }\n\n    public createRowDataEventArgs(event?: Event): IRowDataCancelableEventArgs {\n        const args: IRowDataCancelableEventArgs = {\n            rowID: this.id,\n            primaryKey: this.id,\n            rowKey: this.id,\n            rowData: this.newData ?? this.data,\n            data: this.newData ?? this.data,\n            oldValue: this.data,\n            cancel: false,\n            owner: this.grid,\n            isAddRow: true,\n            valid: this.rowFormGroup.valid,\n            event\n        };\n        return args;\n    }\n\n    public createRowEditDoneEventArgs(cachedRowData: any, event?: Event): IGridEditDoneEventArgs {\n        const updatedData = this.grid.transactions.enabled ?\n            this.grid.transactions.getAggregatedValue(this.id, true) : this.grid.gridAPI.getRowData(this.id);\n        const rowData = updatedData ?? this.grid.gridAPI.getRowData(this.id);\n        const args: IGridEditDoneEventArgs = {\n            primaryKey: this.id,\n            rowID: this.id,\n            rowKey: this.id,\n            rowData,\n            oldValue: cachedRowData,\n            newValue: updatedData,\n            owner: this.grid,\n            isAddRow: false,\n            valid: true,\n            event\n        };\n\n        return args;\n    }\n\n    public get isAddRow(): boolean {\n        return false;\n    }\n}\n\nexport class IgxAddRow extends IgxEditRow {\n    constructor(id: any,\n        index: number,\n        data: any,\n        public recordRef: any,\n        grid: GridType) {\n        super(id, index, data, grid);\n    }\n\n    public override createRowEditEventArgs(includeNewValue = true, event?: Event): IGridEditEventArgs {\n        const args = super.createRowEditEventArgs(includeNewValue, event);\n        args.oldValue = null;\n        args.isAddRow = true;\n        args.rowData = this.newData ?? this.data;\n        return args;\n    }\n\n    public override createRowEditDoneEventArgs(cachedRowData: any, event?: Event): IGridEditDoneEventArgs {\n        const args = super.createRowEditDoneEventArgs(null, event);\n        args.isAddRow = true;\n        return args;\n    }\n\n    public override get isAddRow(): boolean {\n        return true;\n    }\n}\n\nexport interface IgxAddRowParent {\n    /**\n     * @deprecated since version 17.1.0. Use `rowKey` instead\n     */\n    rowID: string;\n    rowKey: any;\n    index: number;\n    asChild: boolean;\n    isPinned: boolean;\n}\n\nexport class IgxCell {\n    public primaryKey: any;\n    public state: any;\n    public pendingValue: any;\n\n    constructor(\n        public id,\n        public rowIndex: number,\n        public column,\n        public value: any,\n        public _editValue: any,\n        public rowData: any,\n        public grid: GridType) {\n        this.grid.validation.create(id.rowID, rowData);\n    }\n\n    public get editValue() {\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n        if (formControl) {\n            return formControl.value;\n        }\n    }\n\n    public set editValue(value) {\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n\n        if (this.grid.validationTrigger === 'change') {\n            // in case trigger is change, mark as touched.\n            formControl.setValue(value);\n            formControl.markAsTouched();\n        } else {\n            this.pendingValue = value;\n        }\n    }\n\n    public castToNumber(value: any): any {\n        if (this.column.dataType === 'number' && !this.column.inlineEditorTemplate) {\n            const v = parseFloat(value);\n            return !isNaN(v) && isFinite(v) ? v : 0;\n        }\n        return value;\n    }\n\n    public createCellEditEventArgs(includeNewValue = true, event?: Event): IGridEditEventArgs {\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n        const args: IGridEditEventArgs = {\n            primaryKey: this.id.rowID,\n            rowID: this.id.rowID,\n            rowKey: this.id.rowID,\n            cellID: this.id,\n            rowData: this.rowData,\n            oldValue: this.value,\n            cancel: false,\n            column: this.column,\n            owner: this.grid,\n            valid: formControl ? formControl.valid : true,\n            event\n        };\n        if (includeNewValue) {\n            args.newValue = this.castToNumber(this.editValue);\n        }\n        return args;\n    }\n\n    public createCellEditDoneEventArgs(value: any, event?: Event): IGridEditDoneEventArgs {\n        const updatedData = this.grid.transactions.enabled ?\n            this.grid.transactions.getAggregatedValue(this.id.rowID, true) : this.rowData;\n        const rowData = updatedData === null ? this.grid.gridAPI.getRowData(this.id.rowID) : updatedData;\n        const formControl = this.grid.validation.getFormControl(this.id.rowID, this.column.field);\n        const args: IGridEditDoneEventArgs = {\n            primaryKey: this.id.rowID,\n            rowID: this.id.rowID,\n            rowKey: this.id.rowID,\n            cellID: this.id,\n            // rowData - should be the updated/committed rowData - this effectively should be the newValue\n            // the only case we use this.rowData directly, is when there is no rowEditing or transactions enabled\n            rowData,\n            oldValue: this.value,\n            valid: formControl ? formControl.valid : true,\n            newValue: value,\n            column: this.column,\n            owner: this.grid,\n            event\n        };\n        return args;\n    }\n}\n\nexport class IgxCellCrudState {\n    public grid: GridType;\n    public cell: IgxCell | null = null;\n    public row: IgxEditRow | null = null;\n    public isInCompositionMode = false;\n\n    public createCell(cell): IgxCell {\n        return this.cell = new IgxCell(cell.cellID || cell.id, cell.row.index, cell.column, cell.value, cell.value,\n            cell.row.data, cell.grid);\n    }\n\n    public createRow(cell: IgxCell): IgxEditRow {\n        return this.row = new IgxEditRow(cell.id.rowID, cell.rowIndex, cell.rowData, cell.grid);\n    }\n\n    public sameRow(rowID): boolean {\n        return this.row && this.row.id === rowID;\n    }\n\n    public sameCell(cell: IgxCell): boolean {\n        return (this.cell.id.rowID === cell.id.rowID &&\n            this.cell.id.columnID === cell.id.columnID);\n    }\n\n    public get cellInEditMode(): boolean {\n        return !!this.cell;\n    }\n\n    public beginCellEdit(event?: Event) {\n        const args = this.cell.createCellEditEventArgs(false, event);\n        this.grid.cellEditEnter.emit(args);\n\n        if (args.cancel) {\n            this.endCellEdit();\n        }\n\n    }\n\n    public cellEdit(event?: Event) {\n        const args = this.cell.createCellEditEventArgs(true, event);\n        this.grid.cellEdit.emit(args);\n        return args;\n    }\n\n    public updateCell(exit: boolean, event?: Event): IGridEditEventArgs {\n        if (!this.cell) {\n            return;\n        }\n        // this is needed when we are not using ngModel to update the editValue\n        // so that the change event of the inlineEditorTemplate is hit before\n        // trying to update any cell\n        const cellNode = this.grid.gridAPI.get_cell_by_index(this.cell.id.rowIndex, this.cell.column.field)?.nativeElement;\n        let activeElement;\n        if (cellNode) {\n            const document = cellNode.getRootNode() as Document | ShadowRoot;\n            if (cellNode.contains(document.activeElement)) {\n                activeElement = document.activeElement as HTMLElement;\n                this.grid.tbody.nativeElement.focus();\n            }\n        }\n\n        const formControl = this.grid.validation.getFormControl(this.cell.id.rowID, this.cell.column.field);\n        if (this.grid.validationTrigger === 'blur' && this.cell.pendingValue !== undefined) {\n            // in case trigger is blur, update value if there's a pending one and mark as touched.\n            formControl.setValue(this.cell.pendingValue);\n            formControl.markAsTouched();\n        }\n\n        if (this.grid.validationTrigger === 'blur') {\n            this.grid.tbody.nativeElement.focus({ preventScroll: true });\n        }\n\n        let doneArgs;\n        if (this.cell.column.dataType === 'date' && !isDate(this.cell.value)) {\n            if (isEqual(DateTimeUtil.parseIsoDate(this.cell.value), this.cell.editValue)) {\n                doneArgs = this.exitCellEdit(event);\n                return doneArgs;\n            }\n        }\n        if (isEqual(this.cell.value, this.cell.editValue)) {\n            doneArgs = this.exitCellEdit(event);\n            return doneArgs;\n        }\n\n        const args = this.cellEdit(event);\n        if (args.cancel) {\n            // the focus is needed when we cancel the cellEdit so that the activeElement stays on the editor template\n            activeElement?.focus();\n            return args;\n        }\n\n        this.grid.gridAPI.update_cell(this.cell);\n\n        doneArgs = this.cellEditDone(event, false);\n        if (exit) {\n            doneArgs = this.exitCellEdit(event);\n        }\n\n        return { ...args, ...doneArgs };\n    }\n\n    public cellEditDone(event, addRow: boolean): IGridEditDoneEventArgs {\n        const newValue = this.cell.castToNumber(this.cell.editValue);\n        const doneArgs = this.cell.createCellEditDoneEventArgs(newValue, event);\n        this.grid.cellEditDone.emit(doneArgs);\n        if (addRow) {\n            doneArgs.rowData = this.row.data;\n        }\n        return doneArgs;\n    }\n\n    /** Exit cell edit mode */\n    public exitCellEdit(event?: Event): IGridEditDoneEventArgs {\n        if (!this.cell) {\n            return;\n        }\n        const newValue = this.cell.castToNumber(this.cell.editValue);\n        const args = this.cell?.createCellEditDoneEventArgs(newValue, event);\n\n        this.cell.value = newValue;\n        this.grid.cellEditExit.emit(args);\n        this.endCellEdit();\n        return args;\n    }\n\n\n    /** Clears cell editing state */\n    public endCellEdit(restoreFocus: boolean = false) {\n        this.cell = null;\n        if (restoreFocus) {\n            this.grid.tbody.nativeElement.focus();\n        }\n    }\n\n    /** Returns whether the targeted cell is in edit mode */\n    public targetInEdit(rowIndex: number, columnIndex: number): boolean {\n        if (!this.cell) {\n            return false;\n        }\n        const res = this.cell.column.index === columnIndex && this.cell.rowIndex === rowIndex;\n        return res;\n    }\n}\nexport class IgxRowCrudState extends IgxCellCrudState {\n    public closeRowEditingOverlay = new Subject();\n\n    private _rowEditingBlocked = false;\n    private _rowEditingStarted = false;\n\n    public get primaryKey(): any {\n        return this.grid.primaryKey;\n    }\n\n    public get rowInEditMode(): RowType {\n        const editRowState = this.row;\n        return editRowState !== null ? this.grid.rowList.find(e => e.key === editRowState.id) : null;\n    }\n\n    public get rowEditing(): boolean {\n        return this.grid.rowEditable;\n    }\n\n    public get nonEditable(): boolean {\n        return this.grid.rowEditable && (this.grid.primaryKey === undefined || this.grid.primaryKey === null);\n    }\n\n    public get rowEditingBlocked() {\n        return this._rowEditingBlocked;\n    }\n\n    public set rowEditingBlocked(val: boolean) {\n        this._rowEditingBlocked = val;\n    }\n\n    /** Enters row edit mode */\n    public beginRowEdit(event?: Event) {\n        if (!this.row || this.row.isAddRow) {\n            if (!this.row) {\n                this.createRow(this.cell);\n            }\n\n            if (!this._rowEditingStarted) {\n                const rowArgs = this.row.createRowEditEventArgs(false, event);\n\n                this.grid.rowEditEnter.emit(rowArgs);\n                if (rowArgs.cancel) {\n                    this.endEditMode();\n                    return true;\n                }\n\n                this._rowEditingStarted = true;\n            }\n\n            this.row.transactionState = this.grid.transactions.getAggregatedValue(this.row.id, true);\n            this.grid.transactions.startPending();\n            this.grid.openRowOverlay(this.row.id);\n        }\n    }\n\n    public rowEdit(event: Event): IGridEditEventArgs {\n        const args = this.row.createRowEditEventArgs(true, event);\n        this.grid.rowEdit.emit(args);\n        return args;\n    }\n\n    public updateRow(commit: boolean, event?: Event): IGridEditEventArgs {\n        if (!this.grid.rowEditable ||\n            this.grid.rowEditingOverlay &&\n            this.grid.rowEditingOverlay.collapsed || !this.row) {\n            return {} as IGridEditEventArgs;\n        }\n\n        let args;\n        if (commit) {\n            this.row.newData = this.grid.transactions.getAggregatedValue(this.row.id, true);\n            this.updateRowEditData(this.row, this.row.newData);\n            args = this.rowEdit(event);\n            if (args.cancel) {\n                return args;\n            }\n        }\n\n        args = this.endRowTransaction(commit, event);\n\n        return args;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public endRowTransaction(commit: boolean, event?: Event): IGridEditEventArgs | IRowDataCancelableEventArgs {\n        this.row.newData = this.grid.transactions.getAggregatedValue(this.row.id, true);\n        let rowEditArgs = this.row.createRowEditEventArgs(true, event);\n\n        let nonCancelableArgs;\n        if (!commit) {\n            this.grid.transactions.endPending(false);\n            const isAddRow = this.row && this.row.isAddRow;\n            const id = this.row ? this.row.id : this.cell.id.rowID;\n            if (isAddRow) {\n                this.grid.validation.clear(id);\n            } else {\n                this.grid.validation.update(id, rowEditArgs.oldValue);\n            }\n        } else if (!this.row.isAddRow) {\n            rowEditArgs = this.grid.gridAPI.update_row(this.row, this.row.newData, event);\n            nonCancelableArgs = this.rowEditDone(rowEditArgs.oldValue, event);\n        } else {\n            const rowAddArgs = this.row.createRowDataEventArgs(event);\n            this.grid.rowAdd.emit(rowAddArgs);\n            if (rowAddArgs.cancel) {\n                return rowAddArgs;\n            }\n\n            this.grid.transactions.endPending(false);\n\n            const parentId = this.getParentRowId();\n            this.grid.gridAPI.addRowToData(this.row.newData ?? this.row.data, parentId);\n            this.grid.triggerPipes();\n\n            nonCancelableArgs = this.rowEditDone(null, event);\n        }\n\n        nonCancelableArgs = this.exitRowEdit(rowEditArgs.oldValue, event);\n\n        return { ...nonCancelableArgs, ...rowEditArgs };\n    }\n\n    public rowEditDone(cachedRowData, event: Event) {\n        const doneArgs = this.row.createRowEditDoneEventArgs(cachedRowData, event);\n        this.grid.rowEditDone.emit(doneArgs);\n        return doneArgs;\n    }\n\n\n    /** Exit row edit mode */\n    public exitRowEdit(cachedRowData, event?: Event): IGridEditDoneEventArgs {\n        const nonCancelableArgs = this.row.createRowEditDoneEventArgs(cachedRowData, event);\n        this.grid.rowEditExit.emit(nonCancelableArgs);\n        this.grid.closeRowEditingOverlay();\n\n        this.endRowEdit();\n        return nonCancelableArgs;\n    }\n\n    /** Clears row editing state */\n    public endRowEdit() {\n        this.row = null;\n        this.rowEditingBlocked = false;\n        this._rowEditingStarted = false;\n    }\n\n    /** Clears cell and row editing state and closes row editing template if it is open */\n    public endEditMode() {\n        this.endCellEdit();\n        if (this.grid.rowEditable) {\n            this.endRowEdit();\n            this.grid.closeRowEditingOverlay();\n        }\n    }\n\n    public updateRowEditData(row: IgxEditRow, value?: any) {\n        const grid = this.grid;\n\n        const rowInEditMode = grid.gridAPI.crudService.row;\n        row.newData = value ?? rowInEditMode.transactionState;\n\n\n        if (rowInEditMode && row.id === rowInEditMode.id) {\n            // do not use spread operator here as it will copy everything over an empty object with no descriptors\n            row.data = Object.assign(copyDescriptors(row.data), row.data, rowInEditMode.transactionState);\n            // TODO: Workaround for updating a row in edit mode through the API\n        } else if (this.grid.transactions.enabled) {\n            const state = grid.transactions.getState(row.id);\n            row.data = state ? Object.assign({}, row.data, state.value) : row.data;\n        }\n    }\n\n    protected getParentRowId() {\n        return null;\n    }\n}\n\nexport class IgxRowAddCrudState extends IgxRowCrudState {\n    public addRowParent: IgxAddRowParent = null;\n\n    /**\n     * @hidden @internal\n     */\n    public createAddRow(parentRow: RowType, asChild?: boolean) {\n        this.createAddRowParent(parentRow, asChild);\n\n        const newRec = this.grid.getEmptyRecordObjectFor(parentRow);\n        const addRowIndex = this.addRowParent.index + 1;\n        return this.row = new IgxAddRow(newRec.rowID, addRowIndex, newRec.data, newRec.recordRef, this.grid);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public createAddRowParent(row: RowType, newRowAsChild?: boolean) {\n        const rowIndex = row ? row.index : -1;\n        const rowId = row ? row.key : (rowIndex >= 0 ? this.grid.rowList.last.key : null);\n\n        const isInPinnedArea = this.grid.isRecordPinnedByViewIndex(rowIndex);\n        const pinIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowId);\n        const unpinIndex = this.grid.getUnpinnedIndexById(rowId);\n        this.addRowParent = {\n            rowID: rowId,\n            rowKey: rowId,\n            index: isInPinnedArea ? pinIndex : unpinIndex,\n            asChild: newRowAsChild,\n            isPinned: isInPinnedArea\n        };\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public override endRowTransaction(commit: boolean, event?: Event): IGridEditEventArgs | IRowDataCancelableEventArgs {\n        const isAddRow = this.row && this.row.isAddRow;\n        if (isAddRow) {\n            this.grid.rowAdded.pipe(first()).subscribe((addRowArgs: IRowDataEventArgs) => {\n                const rowData = addRowArgs.data;\n                const pinnedIndex = this.grid.pinnedRecords.findIndex(x => x[this.primaryKey] === rowData[this.primaryKey]);\n                // A check whether the row is in the current view\n                const viewIndex = pinnedIndex !== -1 ? pinnedIndex : this._findRecordIndexInView(rowData);\n                const dataIndex = this.grid.filteredSortedData.findIndex(data => data[this.primaryKey] === rowData[this.primaryKey]);\n                const isInView = viewIndex !== -1 && !this.grid.navigation.shouldPerformVerticalScroll(viewIndex, 0);\n                const showIndex = isInView ? -1 : dataIndex;\n                this.grid.showSnackbarFor(showIndex);\n            });\n        }\n\n        const args = super.endRowTransaction(commit, event);\n        if (args.cancel) {\n            return args;\n        }\n\n        if (isAddRow) {\n            this.endAddRow();\n            if (commit) {\n                const rowAddedEventArgs: IRowDataEventArgs = {\n                    data: args.rowData,\n                    rowData: args.rowData,\n                    owner: this.grid,\n                    primaryKey: args.rowData[this.grid.primaryKey],\n                    rowKey: args.rowData[this.grid.primaryKey],\n                }\n                this.grid.rowAddedNotifier.next(rowAddedEventArgs);\n                this.grid.rowAdded.emit(rowAddedEventArgs);\n            }\n        }\n\n        return args;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public endAddRow() {\n        this.addRowParent = null;\n        this.grid.triggerPipes();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * TODO: consider changing modifier\n     */\n    public _findRecordIndexInView(rec) {\n        return this.grid.dataView.findIndex(data => data[this.primaryKey] === rec[this.primaryKey]);\n    }\n\n    protected override getParentRowId() {\n        if (this.addRowParent.asChild) {\n            return this.addRowParent.asChild ? this.addRowParent.rowID : undefined;\n        } else if (this.addRowParent.rowID !== null && this.addRowParent.rowID !== undefined) {\n            const spawnedForRecord = this.grid.gridAPI.get_rec_by_id(this.addRowParent.rowID);\n            return spawnedForRecord?.parent?.rowID;\n        }\n    }\n}\n\n@Injectable()\nexport class IgxGridCRUDService extends IgxRowAddCrudState {\n\n    public enterEditMode(cell, event?: Event) {\n        if (this.isInCompositionMode) {\n            return;\n        }\n\n        if (this.nonEditable) {\n            console.warn('The grid must have a `primaryKey` specified when using `rowEditable`!');\n            return;\n        }\n\n        if (this.cellInEditMode) {\n            // TODO: case solely for f2/enter nav that uses enterEditMode as toggle. Refactor.\n            const canceled = this.endEdit(true, event);\n\n            if (!canceled || !this.cell) {\n                this.grid.tbody.nativeElement.focus();\n            }\n        } else {\n            if (this.rowEditing) {\n                // TODO rowData\n                if (this.row && !this.sameRow(cell?.cellID?.rowID)) {\n                    this.rowEditingBlocked = this.endEdit(true, event);\n                    if (this.rowEditingBlocked) {\n                        return true;\n                    }\n\n                    this.rowEditingBlocked = false;\n                    this.endRowEdit();\n                }\n                this.createCell(cell);\n\n                const canceled = this.beginRowEdit(event);\n                if (!canceled) {\n                    this.beginCellEdit(event);\n                }\n\n            } else {\n                this.createCell(cell);\n                this.beginCellEdit(event);\n            }\n        }\n    }\n\n    /**\n     * Enters add row mode by creating temporary dummy so the user can fill in new row cells.\n     *\n     * @param parentRow Parent row after which the Add Row UI will be rendered.\n     *                  If `null` will show it at the bottom after all rows (or top if there are not rows).\n     * @param asChild Specifies if the new row should be added as a child to a tree row.\n     * @param event Base event that triggered the add row mode.\n     */\n    public enterAddRowMode(parentRow: RowType, asChild?: boolean, event?: Event) {\n        if (!this.rowEditing && (this.grid.primaryKey === undefined || this.grid.primaryKey === null)) {\n            console.warn('The grid must use row edit mode to perform row adding! Please set rowEditable to true.');\n            return;\n        }\n        this.endEdit(true, event);\n        // work with copy of original row, since context may change on collapse.\n        const parentRowCopy = parentRow ? Object.assign(copyDescriptors(parentRow), parentRow) : null;\n        if (parentRowCopy != null && this.grid.expansionStates.get(parentRowCopy.key)) {\n            this.grid.collapseRow(parentRowCopy.key);\n        }\n\n        this.createAddRow(parentRowCopy, asChild);\n\n        this.grid.transactions.startPending();\n        if (this.addRowParent.isPinned) {\n            // If parent is pinned, add the new row to pinned records\n            (this.grid as any)._pinnedRecordIDs.splice(this.row.index, 0, this.row.id);\n        }\n\n        this.grid.triggerPipes();\n        this.grid.notifyChanges(true);\n\n        this.grid.navigateTo(this.row.index, -1);\n        // when selecting the dummy row we need to adjust for top pinned rows\n        const indexAdjust = this.grid.isRowPinningToTop ?\n            (!this.addRowParent.isPinned ? this.grid.pinnedRows.length : 0) :\n            (!this.addRowParent.isPinned ? 0 : this.grid.unpinnedRecords.length);\n\n        // TODO: Type this without shoving a bunch of internal properties in the row type\n        const dummyRow = this.grid.gridAPI.get_row_by_index(this.row.index + indexAdjust) as any;\n        dummyRow.triggerAddAnimation();\n        dummyRow.cdr.detectChanges();\n        dummyRow.addAnimationEnd.pipe(first()).subscribe(() => {\n            const cell = dummyRow.cells.find(c => c.editable);\n            if (cell) {\n                this.grid.gridAPI.update_cell(this.cell);\n                this.enterEditMode(cell, event);\n                cell.activate();\n            }\n        });\n    }\n\n    /**\n     * Finishes the row transactions on the current row and returns whether the grid editing was canceled.\n     *\n     * @remarks\n     * If `commit === true`, passes them from the pending state to the data (or transaction service)\n     * @example\n     * ```html\n     * <button type=\"button\" igxButton (click)=\"grid.endEdit(true)\">Commit Row</button>\n     * ```\n     * @param commit\n     */\n    // TODO: Implement the same representation of the method without evt emission.\n    public endEdit(commit = true, event?: Event): boolean {\n        if (!this.row && !this.cell) {\n            return;\n        }\n\n        let args;\n        if (commit) {\n            args = this.updateCell(true, event);\n            if (args && args.cancel) {\n                return args.cancel;\n            }\n        } else {\n            // needede because this.cell is null after exitCellEdit\n            // thus the next if is always false\n            const cell = this.cell;\n            this.exitCellEdit(event);\n            if (!this.grid.rowEditable && cell) {\n                const value = this.grid.transactions.getAggregatedValue(cell.id.rowID, true) || cell.rowData;\n                this.grid.validation.update(cell.id.rowID, value);\n            }\n        }\n\n        args = this.updateRow(commit, event);\n        this.rowEditingBlocked = args.cancel;\n        if (args.cancel) {\n            return true;\n        }\n\n        const activeCell = this.grid.selectionService.activeElement;\n        if (event && activeCell) {\n            const rowIndex = activeCell.row;\n            const visibleColIndex = activeCell.layout ? activeCell.layout.columnVisibleIndex : activeCell.column;\n            this.grid.navigateTo(rowIndex, visibleColIndex);\n        }\n\n        return false;\n    }\n}\n","import { FilterMode, GridCellMergeMode, GridPagingMode, GridSelectionMode, GridSummaryPosition, GridValidationTrigger, RowPinningPosition } from './enums';\nimport {\n    ISearchInfo, IGridCellEventArgs, IRowSelectionEventArgs, IColumnSelectionEventArgs,\n    IPinColumnCancellableEventArgs, IColumnVisibilityChangedEventArgs, IColumnVisibilityChangingEventArgs,\n    IRowDragEndEventArgs, IColumnMovingStartEventArgs, IColumnMovingEndEventArgs,\n    IRowDataEventArgs, IGridKeydownEventArgs, IRowDragStartEventArgs,\n    IColumnMovingEventArgs, IPinColumnEventArgs,\n    IActiveNodeChangeEventArgs,\n    ICellPosition, IFilteringEventArgs, IColumnResizeEventArgs, IRowToggleEventArgs, IGridToolbarExportEventArgs, IPinRowEventArgs,\n    IGridRowEventArgs, IGridEditEventArgs, IRowDataCancelableEventArgs, IGridEditDoneEventArgs,\n    IGridContextMenuEventArgs\n} from '../common/events';\nimport { ChangeDetectorRef, ElementRef, EventEmitter, InjectionToken, QueryList, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { IgxCell, IgxEditRow } from './crud.service';\nimport { GridSelectionRange } from './types';\nimport { DropPosition, IgxColumnMovingService } from '../moving/moving.service';\nimport { Observable, Subject } from 'rxjs';\nimport { ColumnPinningPosition, ColumnType, FilteringExpressionsTree, FilteringLogic, GridColumnDataType, GridSummaryCalculationMode, GridTypeBase, IDataCloneStrategy, IFilteringExpressionsTree, IFilteringStrategy, IGridGroupingStrategy, IGridMergeStrategy, IGridResourceStrings, IGridSortingStrategy, IGroupByExpandState, IGroupByRecord, IGroupingExpression, IgxSummaryResult, IPathSegment, ISortingExpression, ISortingOptions, ITreeGridRecord, OverlaySettings, ɵSize, SortingDirection, State, Transaction, TransactionService, type IgxOverlayOutletDirective } from 'igniteui-angular/core';\nimport { FormControl, FormGroup, ValidationErrors } from '@angular/forms';\nimport type { IForOfState, IgxGridForOfDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport type { IgxPaginatorComponent } from 'igniteui-angular/paginator';\nimport { IgxGridValidationService } from '../grid-validation.service';\nimport { IDimensionsChange, IPivotConfiguration, IPivotDimension, IPivotKeys, IPivotUISettings, IPivotValue, IValuesChange, PivotDimensionType } from '../pivot-grid.interface';\n\nexport const IGX_GRID_BASE = /*@__PURE__*/new InjectionToken<GridType>('IgxGridBaseToken');\nexport const IGX_GRID_SERVICE_BASE = /*@__PURE__*/new InjectionToken<GridServiceType>('IgxGridServiceBaseToken');\n\nexport interface IGridDataBindable extends GridTypeBase {\n    data: any[] | null;\n    get filteredData(): any[] | null;\n}\n\n/* marshalByValue */\n/* jsonAPIComplexObject */\n/**\n * Interface representing a cell in the grid. It is essentially the blueprint to a cell object.\n * Contains definitions of properties and methods, relevant to a cell\n */\nexport interface CellType {\n    /** The current value of the cell. */\n    value: any;\n    /** The value to display when the cell is in edit mode. */\n    editValue: any;\n    /** Indicates whether the cell is currently selected. It is false, if the sell is not selected, and true, if it is. */\n    selected: boolean;\n    /** Indicates whether the cell is currently active (focused). */\n    active: boolean;\n    /** Indicates whether the cell can be edited. */\n    editable: boolean;\n    /** Indicates whether the cell is currently in edit mode. */\n    editMode: boolean;\n    /* blazorSuppress */\n    /** Represents the native HTML element of the cell itself */\n    nativeElement?: HTMLElement;\n    /** Represents the column that the cell belongs to. */\n    column: ColumnType;\n    /* blazorCSSuppress */\n    /** Represents the row that the cell belongs to */\n    row: RowType;\n    /** Represents the grid instance containing the cell */\n    grid: GridType;\n    /** Optional; An object identifying the cell. It contains rowID, columnID, and rowIndex of the cell. */\n    id?: { rowID: any; columnID: number; rowIndex: number };\n    /** Optional; The `cellID` is the unique key, used to identify the cell */\n    cellID?: any;\n    /**\n     * Optional; An object representing the validation state of the cell.\n     * Whether it's valid or invalid, and if it has errors\n     */\n    readonly validation?: IGridValidationState;\n    readonly?: boolean;\n    /** An optional title to display for the cell */\n    title?: any;\n    /** The CSS width of the cell as a string. */\n    width: string;\n    /** The index of the column that the cell belongs to. It counts only the visible (not hidden) columns */\n    visibleColumnIndex?: number;\n    /** A method definition to update the value of the cell. */\n    update: (value: any) => void;\n    /** A method definition to start or end the edit mode of the cell. It takes a boolean value as an argument*/\n    setEditMode?(value: boolean): void;\n    /**\n     * Optional;\n     * A method definition to calculate the size of the cell to fit the content\n     * The method can be used to calculate the size of the cell with the longest content and resize all cells to that size\n     */\n    calculateSizeToFit?(range: any): number;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to activate the cell.\n     * It takes a focus or keyboard event as an argument\n     */\n    activate?(event: FocusEvent | KeyboardEvent): void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle double-click events on the cell\n     * It takes a mouse event as an argument\n     */\n    onDoubleClick?(event: MouseEvent): void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle click events on the cell\n     * It takes a mouse event as an argument\n     */\n    onClick?(event: MouseEvent): void;\n}\n\n/**\n * Interface representing a header cell in the grid. It is essentially the blueprint to a header cell object.\n * Contains definitions of properties, relevant to the header\n */\nexport interface HeaderType {\n    /* blazorSuppress */\n    /** Represents the native HTML element of the cell itself */\n    nativeElement: HTMLElement;\n    /** The column that the header cell represents. */\n    column: ColumnType;\n    /** Indicates whether the column is currently sorted. */\n    sorted: boolean;\n    /** Indicates whether the cell can be selected */\n    selectable: boolean;\n    /** Indicates whether the cell is currently selected */\n    selected: boolean;\n    /** Indicates whether the column header is a title cell. */\n    title: boolean;\n    /** Represents the sorting direction of the column (ascending, descending or none). */\n    sortDirection: SortingDirection;\n}\n\n/* jsonAPIComplexObject */\n/* marshalByValue */\n/**\n * Interface representing a row in the grid. It is essentially the blueprint to a row object.\n * Contains definitions of properties and methods, relevant to a row\n */\nexport interface RowType {\n    /* blazorSuppress */\n    /** Represents the native HTML element of the row itself */\n    nativeElement?: HTMLElement;\n    /** The index of the row within the grid */\n    index: number;\n    viewIndex: number;\n    /** Indicates whether the row is grouped. */\n    isGroupByRow?: boolean;\n    isSummaryRow?: boolean;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A map of column field names to the summary results for the row.\n     */\n    summaries?: Map<string, IgxSummaryResult[]>;\n    groupRow?: IGroupByRecord;\n    key?: any;\n    readonly validation?: IGridValidationState;\n    data?: any;\n    /**\n     * Optional\n     * A list or an array of cells, that belong to the row\n     */\n    cells?: QueryList<CellType> | CellType[];\n    /**\n     * Optional\n     * Indicates whether the current row is disabled\n     */\n    disabled?: boolean;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * Virtualization state of data record added from cache\n     */\n    virtDirRow?: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n    /**\n     * Optional\n     * Indicates whether the current row is pinned.\n     */\n    pinned?: boolean;\n    /**\n     * Optional\n     * Indicates whether the current row is selected\n     */\n    selected?: boolean;\n    /**\n     * Optional\n     * Indicates whether the current row is expanded.\n     * The value is true, if the row is expanded and false, if it is collapsed\n     */\n    expanded?: boolean;\n    /**\n     * Optional\n     * Indicates whether the row is marked for deletion.\n     */\n    deleted?: boolean;\n     /**\n     * Optional\n     * Indicates whether the row is currently being edited.\n     */\n    inEditMode?: boolean;\n    /**\n     * Optional\n     * Contains the child rows of the current row, if there are any.\n     */\n    children?: RowType[];\n    /* blazorAlternateName: RowParent */\n    /**\n     * Optional\n     * Contains the parent row of the current row, if it has one.\n     * If the parent row exist, it means that the current row is a child row\n     */\n    parent?: RowType;\n    /**\n     * Optional\n     * Indicates whether the current row has any child rows\n     */\n    hasChildren?: boolean;\n    /**\n     * Optional\n     * Represents the hierarchical record associated with the row (for tree grids).\n     * It is of type ITreeGridRecord, which contains the data, children, the hierarchical level, etc.\n     */\n    treeRow?: ITreeGridRecord;\n    addRowUI?: boolean;\n    /**\n     * Optional\n     * Indicates whether the row is currently focused.\n     */\n    focused?: boolean;\n    /** Represent the grid instance, the row belongs to */\n    grid: GridType;\n    /* blazorSuppress */\n    onRowSelectorClick?: (event: MouseEvent) => void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle click event on the row\n     * It takes a `MouseEvent` as an argument\n     */\n    onClick?: (event: MouseEvent) => void;\n    /* blazorSuppress */\n    /**\n     * Optional\n     * A method to handle adding a new row\n     */\n    beginAddRow?: () => void;\n    /**\n     * Optional\n     * A method to handle changing the value of elements of the row\n     * It takes the new value as an argument\n     */\n    update?: (value: any) => void;\n    /**\n     * Optional\n     * A method to handle deleting rows\n     */\n    delete?: () => any;\n    /**\n     * Optional\n     * A method to handle pinning a row\n     */\n    pin?: () => void;\n    /**\n     * Optional\n     * A method to handle unpinning a row, that has been pinned\n     */\n    unpin?: () => void;\n}\n\n/**\n * Interface representing the event arguments when a form group is created in the grid.\n * - formGroup: The form group that is created.\n * - owner: The grid instance that owns the form group.\n */\nexport interface IGridFormGroupCreatedEventArgs {\n    /* blazorSuppress */\n    formGroup: FormGroup,\n    owner: GridType\n}\n\n/**\n * Interface representing the event arguments for the grid validation status change event.\n * - status: The validation status ('VALID' or 'INVALID').\n * - owner: The grid instance that owns the validation state.\n */\nexport interface IGridValidationStatusEventArgs {\n    status: ValidationStatus,\n    owner: GridType\n}\n\n/**\n * Type representing the validation status.\n * - 'VALID': The validation status is valid.\n * - 'INVALID': The validation status is invalid.\n */\nexport type ValidationStatus = 'VALID' | 'INVALID';\n\n/**\n * Interface representing the validation state of a grid.\n * - status: The validation status ('VALID' or 'INVALID').\n * - errors: The validation errors if any.\n */\nexport interface IGridValidationState {\n    readonly status: ValidationStatus;\n    readonly errors?: ValidationErrors;\n}\n\n/**\n * Interface representing the validation state of a record in the grid.\n * - `key`: The unique identifier of the record.\n * - `fields`: An array of the validation state of individual fields in the record.\n */\nexport interface IRecordValidationState extends IGridValidationState {\n    key: any;\n    fields: IFieldValidationState[];\n}\n\n/**\n * Interface representing the validation state of a field in the grid.\n * -`field`: The name of the field (property) being validated.\n */\nexport interface IFieldValidationState extends IGridValidationState {\n    field: string\n}\n\n/**\n * Represents the service interface for interacting with the grid.\n */\nexport interface GridServiceType {\n\n    /** The reference to the parent `GridType` that contains the service. */\n    grid: GridType;\n    /** Represents the type of the CRUD service (Create, Read, Update, Delete) operations on the grid data. */\n    crudService: any;\n    /** A service responsible for handling column moving within the grid. It contains a reference to the column, its icon, and indicator for cancellation. */\n    cms: IgxColumnMovingService;\n\n    /** Represents a method declaration for retrieving the data used in the grid. The returned values could be of any type */\n    get_data(): any[];\n    /**\n     * Represents a method declaration for retrieving all the data available in the grid, including any transactional data.\n     * `includeTransactions`: Optional parameter. Specifies whether to include transactional data if present.\n     * Returns an array containing all the data available in the grid.\n     */\n    get_all_data(includeTransactions?: boolean): any[];\n    /** Represents a method declaration for retrieving a column object by its name, taken as a parameter. */\n    get_column_by_name(name: string): ColumnType;\n    /** Represents a method declaration for retrieving the data associated with a specific row by its unique identifier (of any type, taken as a parameter). */\n    getRowData(id: any): any;\n    /** Represents a method declaration for retrieving the data associated with a specific record by its unique identifier (of any type, taken as a parameter). */\n    get_rec_by_id(id: any): any;\n    /** Represents a method declaration for retrieving the unique identifier of a specific row by its data. */\n    get_row_id(rowData: any): any;\n    /** Represents a method declaration for retrieving the row object associated with a specific index (taken as a parameter) in the grid */\n    get_row_by_index(rowSelector: any): RowType;\n    /** Represents a method declaration for retrieving the row object associated with a specific key (taken as a parameter) in the grid */\n    get_row_by_key(rowSelector: any): RowType;\n    /** Represents a method declaration for retrieving the index of a record in the grid's data collection using its unique identifier. */\n    get_rec_index_by_id(pk: string | number, dataCollection?: any[]): number;\n    /** Represents a method declaration for retrieving the index of a record in the grid's data collection using its index. */\n    get_rec_id_by_index(index: number, dataCollection?: any[]): any;\n    get_row_index_in_data(rowID: any, dataCollection?: any[]): number;\n    /** Represents a method declaration for retrieving the cell object associated with a specific row and column in the grid. */\n    get_cell_by_key(rowSelector: any, field: string): CellType;\n    /** Represents a method declaration for retrieving the cell object associated with a specific row and column using their indexes. */\n    get_cell_by_index(rowIndex: number, columnID: number | string): CellType;\n    /**\n     * Represents a method declaration for retrieving the cell object associated with a specific row and column using their indexes.\n     * It counts only the indexes of the visible columns and rows\n     */\n    get_cell_by_visible_index(rowIndex: number, columnIndex: number);\n    /** Represents a method declaration that sets the expansion state of a group row (used for tree grids)\n     * It takes the value for the expansion as a parameter (expanded or collapsed)\n     */\n    set_grouprow_expansion_state?(groupRow: IGroupByRecord, value: boolean): void;\n    row_deleted_transaction(id: any): boolean;\n    /**\n     * Represents a method declaration for adding a new row to the grid.\n     * It takes the row's data and the identifier of the parent row if applicable (used for tree grids)\n     */\n    addRowToData(rowData: any, parentID?: any): void;\n    /** Represents a method declaration for deleting a row, specified by it's identifier (taken as a parameter) */\n    deleteRowById(id: any): any;\n    /** Represents a method declaration for retrieving the row's current state of expansion (used for tree grids)*/\n    get_row_expansion_state(id: any): boolean;\n    /** Represents a method declaration for setting a new expansion state. It can be triggered by an event */\n    set_row_expansion_state(id: any, expanded: boolean, event?: Event): void;\n    get_summary_data(): any[] | null;\n\n    prepare_sorting_expression(stateCollections: Array<Array<any>>, expression: ISortingExpression): void;\n    /**\n     * Represents a method declaration for sorting by only one expression\n     * The expression contains fieldName, sorting directory, whether case should be ignored and optional sorting strategy\n     */\n    sort(expression: ISortingExpression): void;\n    /**\n     * Represents a method declaration for sorting by multiple expressions\n     * The expressions contains fieldName, sorting directory, whether case should be ignored and optional sorting strategy\n     */\n    sort_multiple(expressions: ISortingExpression[]): void;\n    /** Represents a method declaration for resetting the sorting */\n    clear_sort(fieldName: string): void;\n\n    /** Represents an event, triggered when the pin state is changed */\n    get_pin_row_event_args(rowID: any, index?: number, row?: RowType, pinned?: boolean): IPinRowEventArgs;\n\n    filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[];\n    sortDataByExpressions(data: any[], expressions: ISortingExpression[]): any[];\n\n    update_cell(cell: IgxCell): IGridEditEventArgs;\n    update_row(row: IgxEditRow, value: any, event?: Event): IGridEditEventArgs;\n\n    expand_path_to_record?(record: ITreeGridRecord): void;\n    get_selected_children?(record: ITreeGridRecord, selectedRowIDs: any[]): void;\n    get_groupBy_record_id?(gRow: IGroupByRecord): string;\n    remove_grouping_expression?(fieldName: string): void;\n    clear_groupby?(field: string | any): void;\n    getParentRowId?(child: GridType): any;\n    getChildGrids?(inDepth?: boolean): GridType[];\n    getChildGrid?(path: IPathSegment[]): GridType | undefined;\n\n    unsetChildRowIsland?(rowIsland: GridType): void;\n    registerChildRowIsland?(rowIsland: GridType): void;\n}\n\n\n/**\n * Interface representing a grid type. It is essentially the blueprint to a grid object.\n * Contains definitions of properties and methods, relevant to a grid\n * Extends `IGridDataBindable`\n */\nexport interface GridType extends IGridDataBindable {\n    /** Represents the locale of the grid: `USD`, `EUR`, `GBP`, `CNY`, `JPY`, etc. */\n    locale: string;\n    cellMergeMode: GridCellMergeMode;\n    mergeStrategy: IGridMergeStrategy;\n    resourceStrings: IGridResourceStrings;\n    /* blazorSuppress */\n    /** Represents the native HTML element itself */\n    nativeElement: HTMLElement;\n    /** Indicates whether rows in the grid are editable. If te value is true, the rows can be edited */\n    rowEditable: boolean;\n    rootSummariesEnabled: boolean;\n    /** Indicates whether filtering in the grid is enabled. If te value is true, the grid can be filtered */\n    allowFiltering: boolean;\n     /** Indicates whether rows in the grid can be dragged. If te value is true, the rows can be dragged */\n    rowDraggable: boolean;\n    /** Represents the unique primary key used for identifying rows in the grid */\n    primaryKey: string;\n    /** Represents the unique identifier of the grid. */\n    id: string;\n    /** The height of the visible rows in the grid. */\n    renderedRowHeight: number;\n    pipeTrigger: number;\n    summaryPipeTrigger: number;\n    /** @hidden @internal */\n    columnsToMerge: ColumnType[],\n    /** @hidden @internal */\n    groupablePipeTrigger: number;\n    filteringPipeTrigger: number;\n    /** @hidden @internal */\n    hasColumnLayouts: boolean;\n    /** Indicates whether the grid is currently in a moving state. */\n    moving: boolean;\n    isLoading: boolean;\n    /** @hidden @internal */\n    gridSize: ɵSize;\n    /** @hidden @internal */\n    isColumnWidthSum: boolean;\n    /** @hidden @internal */\n    minColumnWidth: number;\n    /** @hidden @internal */\n    hoverIndex?: number;\n    /** Strategy, used for cloning the provided data. The type has one method, that takes any type of data */\n    dataCloneStrategy: IDataCloneStrategy;\n\n    /** Represents the grid service type providing API methods for the grid */\n    readonly gridAPI: GridServiceType;\n\n    /** The filter mode for the grid. It can be quick filter of excel-style filter */\n    filterMode: FilterMode;\n\n    // TYPE\n    /** @hidden @internal */\n    theadRow: any;\n    /** @hidden @internal */\n    groupArea: any;\n    /** @hidden @internal */\n    filterCellList: any[];\n    /** @hidden @internal */\n    filteringRow: any;\n    /** @hidden @internal */\n    actionStrip: any;\n    /** @hidden @internal */\n    resizeLine: any;\n\n    /** @hidden @internal */\n    tfoot: ElementRef<HTMLElement>;\n    /** @hidden @internal */\n    paginator?: IgxPaginatorComponent;\n    /** @hidden @internal */\n    paginatorList?: QueryList<IgxPaginatorComponent>;\n    /** @hidden @internal */\n    crudService: any;\n    /** @hidden @internal */\n    summaryService: any;\n    /** @hidden @internal */\n    i18nFormatter: any;\n\n\n\n    /** Represents the state of virtualization for the grid. It has an owner, start index and chunk size */\n    virtualizationState: IForOfState;\n    // TYPE\n    /** @hidden @internal */\n    /** The service handling selection in the grid. Selecting, deselecting elements */\n    selectionService: any;\n    navigation: any;\n    /** @hidden @internal */\n    filteringService: any;\n    outlet: any;\n    /** Indicates whether the grid has columns that can be moved */\n    /** @hidden @internal */\n    hasMovableColumns: boolean;\n    /** Indicates whether the grid's rows can be selected */\n    isRowSelectable: boolean;\n    /** Indicates whether the selectors of the rows are visible */\n    showRowSelectors: boolean;\n    /** Indicates if the column of the grid is in drag mode */\n    columnInDrag: any;\n    /** @hidden @internal */\n    /** The width of pinned element for pinning at start. */\n    pinnedStartWidth: number;\n    /** The width of pinned element for pinning at end. */\n    pinnedEndWidth: number;\n    /** @hidden @internal */\n    /** The width of unpinned element */\n    unpinnedWidth: number;\n    /** The CSS margin of the summaries */\n    summariesMargin: number;\n    headSelectorBaseAriaLabel: string;\n\n    /** Indicates whether the grid has columns that are shown */\n    hasVisibleColumns: boolean;\n    /**\n     * Optional\n     * Indicates whether the grid has expandable children (hierarchical and tree grid)\n     */\n    hasExpandableChildren?: boolean;\n    /**\n     * Optional\n     * Indicates whether collapsed grid elements should be expanded\n     */\n    showExpandAll?: boolean;\n\n    /** Represents the count of only the hidden (not visible) columns */\n    hiddenColumnsCount: number;\n    /** Represents the count of only the pinned columns */\n    pinnedColumnsCount: number;\n\n    /**\n     * Optional\n     * The template for grid icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    iconTemplate?: TemplateRef<any>;\n    /**\n     * Optional\n     * The template for group-by rows.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    groupRowTemplate?: TemplateRef<IgxGroupByRowTemplateContext>;\n    /**\n     * Optional\n     * The template for the group row selector.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    groupByRowSelectorTemplate?: TemplateRef<IgxGroupByRowSelectorTemplateContext>;\n    /**\n     * Optional\n     * The template for row loading indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowLoadingIndicatorTemplate?: TemplateRef<any>;\n    /**\n     * The template for the header selector.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headSelectorTemplate: TemplateRef<IgxHeadSelectorTemplateContext>;\n    /**\n     * The template for row selectors.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowSelectorTemplate: TemplateRef<IgxRowSelectorTemplateContext>;\n    /**\n     * The template for sort header icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    sortHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    /**\n     * The template for ascending sort header icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    sortAscendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    /**\n     * The template for descending sort header icons.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    sortDescendingHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n    /**\n     * The template for header collapsed indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headerCollapsedIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n    /**\n     * The template for header expanded indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    headerExpandedIndicatorTemplate: TemplateRef<IgxGridTemplateContext>;\n    /** The template for drag indicator icons. Could be of any type */\n    dragIndicatorIconTemplate: any;\n    /** The base drag indicator icon. Could be of any type */\n    dragIndicatorIconBase: any;\n    /** Indicates whether transitions are disabled for the grid. */\n    disableTransitions: boolean;\n    /** Indicates whether the currency symbol is positioned to the left of values. */\n    currencyPositionLeft: boolean;\n\n    /** Indicates whether the width of the column is set by the user, or is configured automatically. */\n    columnWidthSetByUser: boolean;\n    headerFeaturesWidth: number;\n    /** CSS styling calculated for an element: calcHeight, calcWidth, outerWidth */\n    calcHeight: number;\n    calcWidth: number;\n    outerWidth: number;\n    /** The height of each row in the grid. Setting a constant height can solve problems with not showing all elements when scrolling */\n    rowHeight: number;\n    multiRowLayoutRowSize: number;\n    defaultRowHeight: number;\n    /** The default font size, calculated for each element */\n    _baseFontSize?: number;\n    scrollSize: number;\n\n    /** The trigger for grid validation. It's value can either be `change` or `blur` */\n    validationTrigger: GridValidationTrigger;\n    /**\n     * The configuration for columns and rows pinning in the grid\n     * It's of type IPinningConfig, which can have value for columns (start, end) and for rows (top, bottom)\n    */\n    pinning: IPinningConfig;\n    /* blazorSuppress */\n    expansionStates: Map<any, boolean>;\n    parentVirtDir: any;\n    tbody: any;\n    verticalScrollContainer: any;\n    dataRowList: any;\n    rowList: any;\n    /** An unmodifiable list, containing all the columns of the grid. */\n    columnList: QueryList<ColumnType>;\n    columns: ColumnType[];\n    /** An array of columns, but it counts only the ones visible (not hidden) in the view */\n    visibleColumns: ColumnType[];\n    /** An array of columns, but it counts only the ones that are not pinned */\n    unpinnedColumns: ColumnType[];\n    /** An array of columns, but it counts only the ones that are pinned */\n    pinnedColumns: ColumnType[];\n    /** An array of columns, but it counts only the ones that are pinned to the start. */\n    pinnedStartColumns: ColumnType[];\n    /** An array of columns, but it counts only the ones that are pinned to the end. */\n    pinnedEndColumns: ColumnType[];\n    /** represents an array of the headers of the columns */\n    /** @hidden @internal */\n    headerCellList: any[];\n    /** @hidden @internal */\n    headerGroups: any[];\n    /** @hidden @internal */\n    headerGroupsList: any[];\n    summariesRowList: any;\n    /** @hidden @internal */\n    headerContainer: any;\n    /** Indicates whether cells are selectable in the grid */\n    isCellSelectable: boolean;\n    /** Indicates whether it is allowed to select more than one row in the grid */\n    isMultiRowSelectionEnabled: boolean;\n    hasPinnedRecords: boolean;\n    pinnedRecordsCount: number;\n    pinnedRecords: any[];\n    unpinnedRecords: any[];\n    /** @hidden @internal */\n    pinnedDataView: any[];\n    pinnedRows: any[];\n    dataView: any[];\n    _filteredUnpinnedData: any[];\n    _filteredSortedUnpinnedData: any[];\n    filteredSortedData: any[] | null;\n    dataWithAddedInTransactionRows: any[];\n    /** Represents the transaction service for the grid. */\n    readonly transactions: TransactionService<Transaction, State>;\n    /** Represents the validation service for the grid. The type contains properties and methods (logic) for validating records */\n    readonly validation: IgxGridValidationService;\n    defaultSummaryHeight: number;\n    summaryRowHeight: number;\n    rowEditingOverlay: IgxToggleDirective;\n    totalRowsCountAfterFilter: number;\n    _totalRecords: number;\n    /**\n     * Represents the paging of the grid. It can be either 'Local' or 'Remote'\n     * - Local: Default value; The grid will paginate the data source based on the page\n     */\n    pagingMode: GridPagingMode;\n    /** The paging state for the grid; Used to configure how paging should be applied - which is the current page, records per page */\n    /** @hidden */\n    pagingState: any;\n\n    rowEditTabs: any;\n    /** Represents the last search in the grid\n     * It contains the search text (the user has entered), the match and some settings for the search\n     */\n    readonly lastSearchInfo: ISearchInfo;\n    /** @hidden @internal */\n    page: number;\n    /** @hidden @internal */\n    perPage: number;\n    /** The ID of the row currently being dragged in the grid. */\n    /** @hidden @internal */\n    dragRowID: any;\n    /** Indicates whether a row is currently being dragged */\n    rowDragging: boolean;\n\n    firstEditableColumnIndex: number;\n    lastEditableColumnIndex: number;\n    isRowPinningToTop: boolean;\n    hasDetails: boolean;\n    /** @hidden @internal */\n    hasSummarizedColumns: boolean;\n    /** @hidden @internal */\n    hasColumnGroups: boolean;\n    /** @hidden @internal */\n    hasEditableColumns: boolean;\n    /* blazorCSSuppress */\n    /** Property, that provides a callback for loading unique column values on demand.\n     * If this property is provided, the unique values it generates will be used by the Excel Style Filtering  */\n    uniqueColumnValuesStrategy: (column: ColumnType, tree: FilteringExpressionsTree, done: (values: any[]) => void) => void;\n    /* blazorSuppress */\n    /** Property, that gets the header cell inner width for auto-sizing. */\n    getHeaderCellWidth: (element: HTMLElement) => ISizeInfo;\n\n    /* blazorSuppress */\n    /**\n     * Provides change detection functionality.\n     * A change-detection tree collects all views that are to be checked for changes.\n     * The property cannot be changed (readonly) */\n    readonly cdr: ChangeDetectorRef;\n    /** @hidden @internal */\n    document: Document;\n     /**\n     * The template for expanded row indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowExpandedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    /**\n     * The template for collapsed row indicators.\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    rowCollapsedIndicatorTemplate: TemplateRef<IgxGridRowTemplateContext>;\n    /**\n     * The template for header icon\n     * It is of type TemplateRef, which represents an embedded template, used to instantiate embedded views\n     */\n    excelStyleHeaderIconTemplate: TemplateRef<IgxGridHeaderTemplateContext>;\n\n    selectRowOnClick: boolean;\n    /** Represents the selection mode for cells: 'none','single', 'multiple', 'multipleCascade' */\n    cellSelection: GridSelectionMode;\n    /** Represents the selection mode for rows: 'none','single', 'multiple', 'multipleCascade' */\n    rowSelection: GridSelectionMode;\n    /** Represents the selection mode for columns: 'none','single', 'multiple', 'multipleCascade' */\n    columnSelection: GridSelectionMode;\n    /** Represents the calculation mode for summaries: 'rootLevelOnly', 'childLevelsOnly', 'rootAndChildLevels' */\n    summaryCalculationMode: GridSummaryCalculationMode;\n    /** Represents the position of summaries: 'top', 'bottom' */\n    summaryPosition: GridSummaryPosition;\n\n    // XXX: Work around till we fixed the injection tokens\n    lastChildGrid?: GridType;\n    /** @hidden @internal */\n    toolbarOutlet?: ViewContainerRef;\n    /** @hidden @internal */\n    paginatorOutlet?: ViewContainerRef;\n    flatData?: any[] | null;\n    /** @hidden @internal */\n    childRow?: any;\n    expansionDepth?: number;\n    childDataKey?: any;\n    foreignKey?: any;\n    cascadeOnDelete?: boolean;\n    /* blazorSuppress */\n    loadChildrenOnDemand?: (parentID: any, done: (children: any[]) => void) => void;\n    hasChildrenKey?: any;\n    /* blazorSuppress */\n    loadingRows?: Set<any>;\n    /* blazorAlternateName: GridParent */\n    parent?: GridType;\n    highlightedRowID?: any;\n    updateOnRender?: boolean;\n    childLayoutKeys?: any[];\n    childLayoutList?: QueryList<any>;\n    rootGrid?: GridType;\n    processedRootRecords?: ITreeGridRecord[];\n    rootRecords?: ITreeGridRecord[];\n    /* blazorSuppress */\n    records?: Map<any, ITreeGridRecord>;\n    processedExpandedFlatData?: any[] | null;\n    /* blazorSuppress */\n    processedRecords?: Map<any, ITreeGridRecord>;\n    treeGroupArea?: any;\n\n    activeNodeChange: EventEmitter<IActiveNodeChangeEventArgs>;\n    gridKeydown: EventEmitter<IGridKeydownEventArgs>;\n    cellClick: EventEmitter<IGridCellEventArgs>;\n    rowClick: EventEmitter<IGridRowEventArgs>;\n    doubleClick: EventEmitter<IGridCellEventArgs>;\n    contextMenu: EventEmitter<IGridContextMenuEventArgs>;\n    selected: EventEmitter<IGridCellEventArgs>;\n    rangeSelected: EventEmitter<GridSelectionRange>;\n    rowSelectionChanging: EventEmitter<IRowSelectionEventArgs>;\n    localeChange: EventEmitter<boolean>;\n    filtering: EventEmitter<IFilteringEventArgs>;\n    filteringDone: EventEmitter<IFilteringExpressionsTree>;\n    columnPinned: EventEmitter<IPinColumnEventArgs>;\n    columnResized: EventEmitter<IColumnResizeEventArgs>;\n    columnMovingEnd: EventEmitter<IColumnMovingEndEventArgs>;\n    columnSelectionChanging: EventEmitter<IColumnSelectionEventArgs>;\n    columnMoving: EventEmitter<IColumnMovingEventArgs>;\n    columnMovingStart: EventEmitter<IColumnMovingStartEventArgs>;\n    columnPin: EventEmitter<IPinColumnCancellableEventArgs>;\n    columnVisibilityChanging: EventEmitter<IColumnVisibilityChangingEventArgs>;\n    columnVisibilityChanged: EventEmitter<IColumnVisibilityChangedEventArgs>;\n    batchEditingChange?: EventEmitter<boolean>;\n    rowAdd: EventEmitter<IRowDataCancelableEventArgs>;\n    rowAdded: EventEmitter<IRowDataEventArgs>;\n    /* blazorSuppress */\n    rowAddedNotifier: Subject<IRowDataEventArgs>;\n    rowDelete: EventEmitter<IRowDataCancelableEventArgs>;\n    rowDeleted: EventEmitter<IRowDataEventArgs>;\n    /* blazorSuppress */\n    rowDeletedNotifier: Subject<IRowDataEventArgs>;\n    cellEditEnter: EventEmitter<IGridEditEventArgs>;\n    cellEdit: EventEmitter<IGridEditEventArgs>;\n    cellEditDone: EventEmitter<IGridEditDoneEventArgs>;\n    cellEditExit: EventEmitter<IGridEditDoneEventArgs>;\n    rowEditEnter: EventEmitter<IGridEditEventArgs>;\n    rowEdit: EventEmitter<IGridEditEventArgs>;\n    rowEditDone: EventEmitter<IGridEditDoneEventArgs>;\n    rowEditExit: EventEmitter<IGridEditDoneEventArgs>;\n    rowDragStart: EventEmitter<IRowDragStartEventArgs>;\n    rowDragEnd: EventEmitter<IRowDragEndEventArgs>;\n    rowToggle: EventEmitter<IRowToggleEventArgs>;\n    formGroupCreated: EventEmitter<IGridFormGroupCreatedEventArgs>;\n    validationStatusChange: EventEmitter<IGridValidationStatusEventArgs>;\n\n    toolbarExporting: EventEmitter<IGridToolbarExportEventArgs>;\n    /* blazorSuppress */\n    rendered$: Observable<boolean>;\n    /* blazorSuppress */\n    resizeNotify: Subject<void>;\n\n    sortStrategy: IGridSortingStrategy;\n    groupStrategy?: IGridGroupingStrategy;\n    filteringLogic: FilteringLogic;\n    filterStrategy: IFilteringStrategy;\n    allowAdvancedFiltering: boolean;\n    sortingExpressions: ISortingExpression[];\n    sortingExpressionsChange: EventEmitter<ISortingExpression[]>;\n    filteringExpressionsTree: IFilteringExpressionsTree;\n    filteringExpressionsTreeChange: EventEmitter<IFilteringExpressionsTree>;\n    advancedFilteringExpressionsTree: IFilteringExpressionsTree;\n    advancedFilteringExpressionsTreeChange: EventEmitter<IFilteringExpressionsTree>;\n    sortingOptions: ISortingOptions;\n\n    batchEditing: boolean;\n    groupingExpansionState?: IGroupByExpandState[];\n    groupingExpressions?: IGroupingExpression[];\n    groupingExpressionsChange?: EventEmitter<IGroupingExpression[]>;\n    groupsExpanded?: boolean;\n    readonly groupsRecords?: IGroupByRecord[];\n    groupingFlatResult?: any[];\n    groupingResult?: any[];\n    groupingMetadata?: any[];\n    selectedCells?: CellType[];\n    selectedRows: any[];\n    /** @hidden @internal */\n    activeDescendant?: string;\n    /** @hidden @internal */\n    readonly type: 'flat' | 'tree' | 'hierarchical' | 'pivot';\n\n    toggleGroup?(groupRow: IGroupByRecord): void;\n    clearGrouping?(field: string): void;\n    groupBy?(expression: IGroupingExpression | Array<IGroupingExpression>): void;\n    resolveOutlet?(): IgxOverlayOutletDirective;\n    updateColumns(columns: ColumnType[]): void;\n    getSelectedRanges(): GridSelectionRange[];\n    deselectAllColumns(): void;\n    deselectColumns(columns: string[] | ColumnType[]): void;\n    selectColumns(columns: string[] | ColumnType[]): void;\n    selectedColumns(): ColumnType[];\n    refreshSearch(): void;\n    getDefaultExpandState(record: any): boolean;\n    trackColumnChanges(index: number, column: any): any;\n    getPossibleColumnWidth(baseWidth?: number): string;\n    resetHorizontalVirtualization(): void;\n    hasVerticalScroll(): boolean;\n    getVisibleContentHeight(): number;\n    /* blazorSuppress */\n    getDragGhostCustomTemplate(): TemplateRef<any> | null;\n    openRowOverlay(id: any): void;\n    openAdvancedFilteringDialog(overlaySettings?: OverlaySettings): void;\n    showSnackbarFor(index: number): void;\n    getColumnByName(name: string): any;\n    getColumnByVisibleIndex(index: number): ColumnType;\n    getHeaderGroupWidth(column: ColumnType): string;\n    getRowByKey?(key: any): RowType;\n    getRowByIndex?(index: number): RowType;\n    setFilteredData(data: any, pinned: boolean): void;\n    setFilteredSortedData(data: any, pinned: boolean): void;\n    sort(expression: ISortingExpression | ISortingExpression[]): void;\n    clearSort(name?: string): void;\n    pinRow(id: any, index?: number, row?: RowType): boolean;\n    unpinRow(id: any, row?: RowType): boolean;\n    getUnpinnedIndexById(id: any): number;\n    getEmptyRecordObjectFor(inRow: RowType): any;\n    isSummaryRow(rec: any): boolean;\n    isRecordPinned(rec: any): boolean;\n    isRecordMerged(rec: any): boolean;\n    getInitialPinnedIndex(rec: any): number;\n    isRecordPinnedByViewIndex(rowIndex: number): boolean;\n    isColumnGrouped(fieldName: string): boolean;\n    isDetailRecord(rec: any): boolean;\n    isGroupByRecord(rec: any): boolean;\n    isGhostRecord(rec: any): boolean;\n    isTreeRow?(rec: any): boolean;\n    isChildGridRecord?(rec: any): boolean;\n    getChildGrids?(inDepth?: boolean): any[];\n    isHierarchicalRecord?(record: any): boolean;\n    columnToVisibleIndex(key: string | number): number;\n    moveColumn(column: ColumnType, target: ColumnType, pos: DropPosition): void;\n    /* blazorSuppress */\n    navigateTo(rowIndex: number, visibleColumnIndex: number, callback?: (e: any) => any): void;\n    /* blazorSuppress */\n    getPreviousCell(currRowIndex: number, curVisibleColIndex: number, callback: (c: ColumnType) => boolean): ICellPosition;\n    /* blazorSuppress */\n    getNextCell(currRowIndex: number, curVisibleColIndex: number, callback: (c: ColumnType) => boolean): ICellPosition;\n    clearCellSelection(): void;\n    selectRange(range: GridSelectionRange | GridSelectionRange[]): void;\n    selectRows(rowIDs: any[], clearCurrentSelection?: boolean): void;\n    deselectRows(rowIDs: any[]): void;\n    selectAllRows(onlyFilterData?: boolean): void;\n    deselectAllRows(onlyFilterData?: boolean): void;\n    setUpPaginator(): void;\n    createFilterDropdown(column: ColumnType, options: OverlaySettings): any;\n    updateCell(value: any, rowSelector: any, column: string): void;\n    // Type to RowType\n    createRow?(index: number, data?: any): RowType;\n    deleteRow(id: any): any;\n    deleteRowById(id: any): any;\n    updateRow(value: any, rowSelector: any): void;\n    collapseRow(id: any): void;\n    notifyChanges(repaint?: boolean): void;\n    resetColumnCollections(): void;\n    triggerPipes(): void;\n    repositionRowEditingOverlay(row: RowType): void;\n    closeRowEditingOverlay(): void;\n    reflow(): void;\n\n    // TODO: Maybe move them to FlatGridType, but then will we need another token?\n    isExpandedGroup(group: IGroupByRecord): boolean;\n    createColumnsList?(cols: ColumnType[]): void;\n    toggleAllGroupRows?(): void;\n    toggleAll?(): void;\n    generateRowPath?(rowId: any): any[];\n    preventHeaderScroll?(args: any): void;\n}\n\n/**\n * An interface describing a Flat Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface FlatGridType extends GridType {\n    groupingExpansionState: IGroupByExpandState[];\n    groupingExpressions: IGroupingExpression[];\n    groupingExpressionsChange: EventEmitter<IGroupingExpression[]>;\n\n    toggleGroup(groupRow: IGroupByRecord): void;\n    clearGrouping(field: string): void;\n    groupBy(expression: IGroupingExpression | Array<IGroupingExpression>): void;\n}\n\n/**\n * An interface describing a Tree Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface TreeGridType extends GridType {\n    /* blazorSuppress */\n    records: Map<any, ITreeGridRecord>;\n    isTreeRow(rec: any): boolean;\n}\n\n/**\n * An interface describing a Hierarchical Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface HierarchicalGridType extends GridType {\n    childLayoutKeys: any[];\n}\n\n/**\n * An interface describing a Pivot Grid type. It is essentially the blueprint to a grid kind\n * Contains definitions of properties and methods, relevant to a grid kind\n * Extends from `GridType`\n */\nexport interface PivotGridType extends GridType {\n    /**\n     * The configuration settings for the pivot grid.\n     * it includes dimension strategy for rows and columns, filters and data keys\n     */\n    pivotConfiguration: IPivotConfiguration;\n    /**\n     * An array of all dimensions (rows and columns) in the pivot grid.\n     * it includes hierarchical level, filters and sorting, dimensional level, etc.\n     */\n    allDimensions: IPivotDimension[],\n    /** Specifies whether to show the pivot configuration UI in the grid. */\n    pivotUI: IPivotUISettings;\n    /** @hidden @internal */\n    columnDimensions: IPivotDimension[];\n    /** @hidden @internal */\n    rowDimensions: IPivotDimension[];\n    rowDimensionResizing: boolean;\n    /** @hidden @internal */\n    visibleRowDimensions: IPivotDimension[];\n    /** @hidden @internal */\n    hasHorizontalLayout: boolean;\n    /** @hidden @internal */\n    values: IPivotValue[];\n    /** @hidden @internal */\n    filterDimensions: IPivotDimension[];\n    /** @hidden @internal */\n    dimensionDataColumns: ColumnType[];\n    pivotRowWidths: number;\n    getRowDimensionByName(name: string): IPivotDimension;\n    /** Represents a method declaration for setting up the columns for the pivot grid based on the pivot configuration */\n    setupColumns(): void;\n    /** Represents a method declaration that allows toggle of expansion state of a row (taken as a parameter) in the pivot grid */\n    toggleRow(rowID: any): void;\n    /**\n     * Represents a method declaration for resolving the data type for a specific field (column).\n     * It takes the field as a parameter and returns it's type\n     */\n    resolveDataTypes(field: any): GridColumnDataType;\n    /**\n     * Represents a method declaration for moving dimension from its currently collection to the specified target collection\n     * by type (Row, Column or Filter) at specified index or at the collection's end\n     */\n    moveDimension(dimension: IPivotDimension, targetCollectionType: PivotDimensionType, index?: number);\n    getDimensionsByType(dimension: PivotDimensionType);\n    /** Toggles the dimension's enabled state on or off. The dimension remains in its current collection */\n    toggleDimension(dimension: IPivotDimension);\n    /** Sort the dimension and its children in the provided direction (ascending, descending or none). */\n    sortDimension(dimension: IPivotDimension, sortDirection: SortingDirection);\n    /** Toggles the value's enabled state on or off. The value remains in its current collection. */\n    toggleValue(value: IPivotValue);\n    /** Move value from its currently at specified index or at the end.\n     * If the parameter is not set, it will add it to the end of the collection. */\n    moveValue(value: IPivotValue, index?: number);\n    rowDimensionWidth(dim: IPivotDimension): string;\n    rowDimensionWidthToPixels(dim: IPivotDimension): number;\n    /** Emits an event when the dimensions in the pivot grid change. */\n    dimensionsChange: EventEmitter<IDimensionsChange>;\n    /** Emits an event when the values in the pivot grid change. */\n    valuesChange: EventEmitter<IValuesChange>;\n    /** Emits an event when the a dimension is sorted. */\n    dimensionsSortingExpressionsChange: EventEmitter<ISortingExpression[]>;\n    /** @hidden @internal */\n    pivotKeys: IPivotKeys;\n    hasMultipleValues: boolean;\n    excelStyleFilterMaxHeight: string;\n    excelStyleFilterMinHeight: string;\n    valueChipTemplate: TemplateRef<any>;\n    rowDimensionHeaderTemplate: TemplateRef<IgxColumnTemplateContext>;\n}\n\nexport interface GridSVGIcon {\n    name: string;\n    value: string;\n}\n\nexport interface ISizeInfo {\n    width: number,\n    padding: number\n}\n\nexport interface IgxGridMasterDetailContext {\n    $implicit: any;\n    index: number;\n}\n\nexport interface IgxGroupByRowTemplateContext {\n    $implicit: IGroupByRecord;\n}\n\nexport interface IgxGridTemplateContext {\n    $implicit: GridType\n}\n\nexport interface IgxGridRowTemplateContext {\n    $implicit: RowType\n}\n\nexport interface IgxGridRowDragGhostContext {\n    $implicit: any, // this is the row data\n    data: any, // this is also the row data for some reason.\n    grid: GridType\n}\n\nexport interface IgxGridEmptyTemplateContext {\n    /* blazorSuppress */\n    $implicit: undefined\n}\n\nexport interface IgxGridRowEditTemplateContext {\n    $implicit: undefined,\n    rowChangesCount: number,\n    endEdit: (commit: boolean, event?: Event) => void\n}\n\nexport interface IgxGridRowEditTextTemplateContext {\n    $implicit: number\n}\n\nexport interface IgxGridRowEditActionsTemplateContext {\n    /* blazorCSSuppress */\n    /* blazorAlternateType: RowEditActionsImplicit */\n    $implicit: (commit: boolean, event?: Event) => void\n}\n\nexport interface IgxGridHeaderTemplateContext {\n    $implicit: HeaderType\n}\n\nexport interface IgxColumnTemplateContext {\n    $implicit: ColumnType,\n    column: ColumnType\n}\n\nexport interface IgxCellTemplateContext {\n    $implicit: any,\n    additionalTemplateContext: any,\n    /* blazorSuppress */\n    formControl?: FormControl<any>,\n    /* blazorSuppress */\n    defaultErrorTemplate?: TemplateRef<any>,\n    cell: CellType\n}\n\n/* jsonAPIComplexObject */\nexport interface IgxRowSelectorTemplateDetails {\n    index: number;\n    /**\n     * @deprecated in version 15.1.0. Use the `key` property instead.\n     */\n    rowID: any;\n    key: any;\n    selected: boolean;\n    select?: () => void;\n    deselect?: () => void;\n}\n\nexport interface IgxRowSelectorTemplateContext {\n    $implicit: IgxRowSelectorTemplateDetails;\n}\n\n/* jsonAPIComplexObject */\nexport interface IgxGroupByRowSelectorTemplateDetails {\n    selectedCount: number;\n    totalCount: number;\n    groupRow: IGroupByRecord;\n}\nexport interface IgxGroupByRowSelectorTemplateContext {\n    $implicit: IgxGroupByRowSelectorTemplateDetails;\n}\n\n/* jsonAPIComplexObject */\nexport interface IgxHeadSelectorTemplateDetails {\n    selectedCount: number;\n    totalCount: number;\n    selectAll?: () => void;\n    deselectAll?: () => void;\n}\nexport interface IgxHeadSelectorTemplateContext {\n    $implicit: IgxHeadSelectorTemplateDetails;\n}\n\nexport interface IgxSummaryTemplateContext {\n    $implicit: IgxSummaryResult[]\n}\n\nexport interface IgxGridPaginatorTemplateContext {\n    $implicit: GridType;\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\n/**\n * An interface describing settings for row/column pinning position.\n */\nexport interface IPinningConfig {\n    columns?: ColumnPinningPosition;\n    rows?: RowPinningPosition;\n}\n\n/**\n * An interface describing settings for clipboard options\n */\nexport interface IClipboardOptions {\n    /**\n     * Enables/disables the copy behavior\n     */\n    enabled: boolean;\n    /**\n     * Include the columns headers in the clipboard output.\n     */\n    copyHeaders: boolean;\n    /**\n     * Apply the columns formatters (if any) on the data in the clipboard output.\n     */\n    copyFormatters: boolean;\n    /**\n     * The separator used for formatting the copy output. Defaults to `\\t`.\n     */\n    separator: string;\n}\n","import {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectorRef,\n    Directive,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    HostListener,\n    inject,\n    Input,\n    OnDestroy,\n    Output,\n    QueryList,\n    ViewChild,\n    ViewChildren\n} from '@angular/core';\nimport { IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { ColumnType, TransactionType } from 'igniteui-angular/core';\nimport { IgxGridSelectionService } from './selection/selection.service';\nimport { IgxEditRow } from './common/crud.service';\nimport { CellType, GridType, IGX_GRID_BASE } from './common/grid.interface';\nimport { mergeWith } from 'lodash-es';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { trackByIdentity } from 'igniteui-angular/core';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\n\n@Directive({\n    selector: '[igxRowBaseComponent]',\n    standalone: true\n})\nexport class IgxRowDirective implements DoCheck, AfterViewInit, OnDestroy {\n    /* blazorSuppress */\n    public grid = inject<GridType>(IGX_GRID_BASE);\n    /* blazorSuppress */\n    public selectionService = inject(IgxGridSelectionService);\n    /* blazorSuppress */\n    public element = inject<ElementRef<HTMLElement>>(ElementRef);\n    /* blazorSuppress */\n    public cdr = inject(ChangeDetectorRef);\n\n    /**\n     * @hidden\n     */\n    @Output()\n    public addAnimationEnd = new EventEmitter<IgxRowDirective>();\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.role')\n    public role = 'row';\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public metaData: any;\n\n    /**\n     *  The data passed to the row component.\n     *\n     * ```typescript\n     * // get the row data for the first selected row\n     * let selectedRowData = this.grid.selectedRows[0].data;\n     * ```\n     */\n    @Input()\n    public get data(): any {\n        if (this.inEditMode) {\n            return mergeWith(this.grid.dataCloneStrategy.clone(this._data), this.grid.transactions.getAggregatedValue(this.key, false),\n                (objValue, srcValue) => {\n                    if (Array.isArray(srcValue)) {\n                        return objValue = srcValue;\n                    }\n                });\n        }\n        return this._data;\n    }\n\n    public set data(v: any) {\n        this._data = v;\n    }\n    /**\n     * The index of the row.\n     *\n     * ```typescript\n     * // get the index of the second selected row\n     * let selectedRowIndex = this.grid.selectedRows[1].index;\n     * ```\n     */\n    @Input()\n    public index: number;\n\n    /**\n     * Sets whether this specific row has disabled functionality for editing and row selection.\n     * Default value is `false`.\n     * ```typescript\n     * this.grid.selectedRows[0].pinned = true;\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('attr.aria-disabled')\n    @HostBinding('class.igx-grid__tr--disabled')\n    public disabled = false;\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 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 get pinned(): boolean {\n        return this.grid.isRecordPinned(this.data);\n    }\n\n    public get hasMergedCells(): boolean {\n        return this.grid.columnsToMerge.length > 0;\n    }\n\n    /**\n     * Gets the expanded state of the row.\n     * ```typescript\n     * let isExpanded = row.expanded;\n     * ```\n     */\n    public get expanded(): boolean {\n        return this.grid.gridAPI.get_row_expansion_state(this.data);\n    }\n\n    /**\n     * Expands/collapses the current row.\n     *\n     * ```typescript\n     * this.grid.selectedRows[2].expanded = true;\n     * ```\n     */\n    public set expanded(val: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this.key, val);\n    }\n\n    public get addRowUI(): any {\n        return !!this.grid.crudService.row &&\n            this.grid.crudService.row.isAddRow &&\n            this.grid.crudService.row.id === this.key;\n    }\n\n    @HostBinding('style.min-height.px')\n    public get rowHeight() {\n        let height = this.grid.rowHeight || 32;\n        if (this.grid.hasColumnLayouts) {\n            const maxRowSpan = this.grid.multiRowLayoutRowSize;\n            height = height * maxRowSpan;\n        }\n        return this.addRowUI ? height : null;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input()\n    public gridID: string;\n\n    /**\n     * @hidden\n     */\n    @ViewChildren('igxDirRef', { read: IgxGridForOfDirective })\n    public _virtDirRow: QueryList<IgxGridForOfDirective<ColumnType, ColumnType[]>>;\n\n    /* blazorSuppress */\n    public get virtDirRow(): IgxGridForOfDirective<ColumnType, ColumnType[]> {\n        return this._virtDirRow ? this._virtDirRow.first : null;\n    }\n\n    /**\n     * @hidden\n     */\n    @ViewChild(forwardRef(() => IgxCheckboxComponent), { read: IgxCheckboxComponent })\n    public checkboxElement: IgxCheckboxComponent;\n\n    @ViewChildren('cell')\n    protected _cells: QueryList<CellType>;\n\n    /**\n     * Gets the rendered cells in the row component.\n     *\n     * ```typescript\n     * // get the cells of the third selected row\n     * let selectedRowCells = this.grid.selectedRows[2].cells;\n     * ```\n     */\n    public get cells() {\n        const res = new QueryList<CellType>();\n        if (!this._cells) {\n            return res;\n        }\n        const cList = this._cells.filter((item) => item.nativeElement.parentElement !== null)\n            .sort((item1, item2) => item1.column.visibleIndex - item2.column.visibleIndex);\n        res.reset(cList);\n        return res;\n    }\n\n    @HostBinding('attr.data-rowIndex')\n    public get dataRowIndex() {\n        return this.index;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('attr.aria-selected')\n    public get selected(): boolean {\n        return this.selectionService.isRowSelected(this.key);\n    }\n\n    public set selected(value: boolean) {\n        if (value) {\n            this.selectionService.selectRowsWithNoEvent([this.key]);\n        } else {\n            this.selectionService.deselectRowsWithNoEvent([this.key]);\n        }\n        this.grid.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden\n     */\n    public get columns(): ColumnType[] {\n        return this.grid.visibleColumns;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get viewIndex(): number {\n        if ((this.grid as any).groupingExpressions.length) {\n            return this.grid.filteredSortedData.indexOf(this.data);\n        }\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pinnedColumns(): ColumnType[] {\n        return this.grid.pinnedColumns;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pinnedStartColumns(): ColumnType[] {\n        return this.grid.pinnedStartColumns;\n    }\n\n    /**\n    * @hidden\n    */\n    public get pinnedEndColumns(): ColumnType[] {\n        return this.grid.pinnedEndColumns;\n    }\n\n    /**\n     * @hidden\n     */\n    public get isRoot(): boolean {\n        return true;\n    }\n\n    /**\n     * @hidden\n     */\n    public get hasChildren(): boolean {\n        return false;\n    }\n\n    /**\n     * @hidden\n     */\n    public get unpinnedColumns(): ColumnType[] {\n        return this.grid.unpinnedColumns;\n    }\n\n    /**\n     * @hidden\n     */\n    public get showRowSelectors(): boolean {\n        return this.grid.showRowSelectors;\n    }\n\n    /** @hidden */\n    public get dirty(): boolean {\n        const row = this.grid.transactions.getState(this.key);\n        if (row) {\n            return row.type === TransactionType.ADD || row.type === TransactionType.UPDATE;\n        }\n\n        return false;\n    }\n\n    /**\n     * @hidden\n     */\n    public get rowDraggable(): boolean {\n        return this.grid.rowDraggable;\n    }\n\n    /** @hidden */\n    public get added(): boolean {\n        const row = this.grid.transactions.getState(this.key);\n        if (row) {\n            return row.type === TransactionType.ADD;\n        }\n\n        return false;\n    }\n\n    /** @hidden */\n    public get deleted(): boolean {\n        return this.grid.gridAPI.row_deleted_transaction(this.key);\n    }\n\n    /**\n     * @hidden\n     */\n    public get dragging() {\n        return this.grid.dragRowID === this.key;\n    }\n\n    // TODO: Refactor\n    public get inEditMode(): boolean {\n        if (this.grid.rowEditable) {\n            const editRowState = this.grid.crudService.row;\n            return (editRowState && editRowState.id === this.key) || false;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Gets the ID of the row.\n     * A row in the grid is identified either by:\n     * - primaryKey data value,\n     * - the whole data, if the primaryKey is omitted.\n     *\n     * ```typescript\n     * let rowID = this.grid.selectedRows[2].key;\n     * ```\n     */\n    public get key() {\n        const primaryKey = this.grid.primaryKey;\n        if (this._data) {\n            return primaryKey ? this._data[primaryKey] : this._data;\n        } else {\n            return undefined;\n        }\n    }\n\n    /**\n     * The native DOM element representing the row. Could be null in certain environments.\n     *\n     * ```typescript\n     * // get the nativeElement of the second selected row\n     * let selectedRowNativeElement = this.grid.selectedRows[1].nativeElement;\n     * ```\n     */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    public focused = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public defaultCssClass = 'igx-grid__tr';\n\n    /**\n     * @hidden\n     */\n    public triggerAddAnimationClass = false;\n\n    protected destroy$ = new Subject<any>();\n    protected _data: any;\n    protected _addRow: boolean;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        if (this.hasMergedCells && this.metaData?.cellMergeMeta) {\n            const targetRowIndex = this.grid.navigation.activeNode.row;\n            if (targetRowIndex != this.index) {\n                const row = this.grid.rowList.toArray().find(x => x.index === targetRowIndex);\n                row.onClick(event);\n                return;\n            }\n        }\n        this.grid.rowClick.emit({\n            row: this,\n            event\n        });\n\n        if (this.grid.rowSelection === 'none' || this.deleted || !this.grid.selectRowOnClick) {\n            return;\n        }\n        if (event.shiftKey && this.grid.isMultiRowSelectionEnabled) {\n            this.selectionService.selectMultipleRows(this.key, this.data, event);\n            return;\n        }\n\n        const clearSelection = !(+event.ctrlKey ^ +event.metaKey);\n        if (this.selected && !clearSelection) {\n            this.selectionService.deselectRow(this.key, event);\n        } else {\n            this.selectionService.selectRowById(this.key, clearSelection, event);\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('contextmenu', ['$event'])\n    public onContextMenu(event: MouseEvent) {\n        const cell = (event.target as HTMLElement).closest('.igx-grid__td');\n        this.grid.contextMenu.emit({\n            row: this,\n            cell: this.cells.find(c => c.nativeElement === cell),\n            event\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('mouseenter')\n    public showActionStrip() {\n        if (this.grid.actionStrip) {\n            this.grid.actionStrip.show(this);\n        }\n        this.grid.hoverIndex = this.index;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('mouseleave')\n    public hideActionStrip() {\n        if (this.grid.actionStrip && this.grid.actionStrip.hideOnRowLeave) {\n            this.grid.actionStrip.hide();\n        }\n        this.grid.hoverIndex = null;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        // If the template of the row changes, the forOf in it is recreated and is not detected by the grid and rows can't be scrolled.\n        this._virtDirRow.changes.pipe(takeUntil(this.destroy$)).subscribe(() => this.grid.resetHorizontalVirtualization());\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy() {\n        // if action strip is shown here but row is about to be destroyed, hide it.\n        if (this.grid.actionStrip && this.grid.actionStrip.context === this) {\n            this.grid.actionStrip.hide();\n        }\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public onRowSelectorClick(event) {\n        event.stopPropagation();\n        if (event.shiftKey && this.grid.isMultiRowSelectionEnabled) {\n            this.selectionService.selectMultipleRows(this.key, this.data, event);\n            return;\n        }\n        if (this.selected) {\n            this.selectionService.deselectRow(this.key, event);\n        } else {\n            this.selectionService.selectRowById(this.key, false, event);\n        }\n    }\n\n    /**\n     * Updates the specified row object and the data source record with the passed value.\n     *\n     * ```typescript\n     * // update the second selected row's value\n     * let newValue = \"Apple\";\n     * this.grid.selectedRows[1].update(newValue);\n     * ```\n     */\n    public update(value: any) {\n        const crudService = this.grid.crudService;\n        if (crudService.cellInEditMode && crudService.cell.id.key === this.key) {\n            this.grid.transactions.endPending(false);\n        }\n        const row = new IgxEditRow(this.key, this.index, this.data, this.grid);\n        this.grid.gridAPI.update_row(row, value);\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * Removes the specified row from the grid's data source.\n     * This method emits `rowDeleted` event.\n     *\n     * ```typescript\n     * // delete the third selected row from the grid\n     * this.grid.selectedRows[2].delete();\n     * ```\n     */\n    public delete() {\n        this.grid.deleteRowById(this.key);\n    }\n\n    public isCellActive(visibleColumnIndex) {\n        const node = this.grid.navigation.activeNode;\n        const field = this.grid.visibleColumns[visibleColumnIndex]?.field;\n        const rowSpan = this.metaData?.cellMergeMeta?.get(field)?.rowSpan;\n        if (rowSpan > 1) {\n            return node ? (node.row >= this.index && node.row < this.index + rowSpan)\n                && node.column === visibleColumnIndex : false;\n        }\n        return node ? node.row === this.index && node.column === visibleColumnIndex : false;\n    }\n\n    /**\n     * Pins the specified row.\n     * This method emits `rowPinning`\\`rowPinned` event.\n     *\n     * ```typescript\n     * // pin the selected row from the grid\n     * this.grid.selectedRows[0].pin();\n     * ```\n     */\n    public pin() {\n        return this.grid.pinRow(this.key);\n    }\n\n    /**\n     * Unpins the specified row.\n     * This method emits `rowPinning`\\`rowPinned` event.\n     *\n     * ```typescript\n     * // unpin the selected row from the grid\n     * this.grid.selectedRows[0].unpin();\n     * ```\n     */\n    public unpin() {\n        return this.grid.unpinRow(this.key);\n    }\n\n    /**\n     * @hidden\n     */\n    public get rowCheckboxAriaLabel() {\n        return this.grid.primaryKey ?\n            this.selected ? 'Deselect row with key ' + this.key : 'Select row with key ' + this.key :\n            this.selected ? 'Deselect row' : 'Select row';\n    }\n\n    /**\n     * @hidden\n     */\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden\n     */\n    public shouldDisplayPinnedChip(col: ColumnType): boolean {\n        return this.pinned && this.disabled && col.visibleIndex === 0 && !this.metaData?.cellMergeMeta?.get(col.field)?.root;\n    }\n\n    /**\n     * Spawns the add row UI for the specific row.\n     *\n     * @example\n     * ```typescript\n     * const row = this.grid1.getRowByIndex(1);\n     * row.beginAddRow();\n     * ```\n     */\n    public beginAddRow() {\n        this.grid.crudService.enterAddRowMode(this);\n    }\n\n    /**\n     * @hidden\n     */\n    public triggerAddAnimation() {\n        this.triggerAddAnimationClass = true;\n    }\n\n    /**\n     * @hidden\n     */\n    public animationEndHandler() {\n        this.triggerAddAnimationClass = false;\n        this.addAnimationEnd.emit(this);\n    }\n\n    protected getMergeCellSpan(col: ColumnType) {\n        if ((this.grid as any).shouldResize) {\n            return null;\n        }\n        const rowCount = this.metaData.cellMergeMeta.get(col.field).rowSpan;\n        let sizeSpans = \"\";\n        const isPinned = this.pinned && !this.disabled;\n        const indexInData = this.grid.isRowPinningToTop && !isPinned ? this.index - this.grid.pinnedRecordsCount : this.index;\n        for (let index = indexInData; index < indexInData + rowCount; index++) {\n            const size = this.grid.verticalScrollContainer.getSizeAt(index);\n            sizeSpans += size + 'px ';\n        }\n        return `${sizeSpans}`;\n    }\n\n    protected isSelectionRoot(col: ColumnType) {\n        const mergeMeta = this.metaData?.cellMergeMeta;\n        const rowCount = mergeMeta?.get(col.field)?.rowSpan;\n        if (mergeMeta && rowCount > 1) {\n            const isPinned = this.pinned && !this.disabled;\n            const indexInData = this.grid.isRowPinningToTop && !isPinned ? this.index - this.grid.pinnedRecordsCount : this.index;\n            const range = isPinned ? this.grid.pinnedDataView.slice(indexInData, indexInData + rowCount) : this.grid.verticalScrollContainer.igxForOf.slice(indexInData, indexInData + rowCount);\n            const inRange = range.filter(x => this.selectionService.isRowSelected(this.extractRecordKey(x))).length > 0;\n            return inRange;\n        }\n        return false;\n    }\n\n    protected isHoveredRoot(col: ColumnType) {\n        const mergeMeta = this.metaData?.cellMergeMeta;\n        const rowCount = mergeMeta?.get(col.field)?.rowSpan;\n        if (mergeMeta && rowCount > 1 && this.grid.hoverIndex !== null && this.grid.hoverIndex !== undefined) {\n            const indexInData = this.index;\n            const hoveredIndex = this.grid.hoverIndex;\n            return indexInData <= hoveredIndex && indexInData + rowCount > hoveredIndex;\n        }\n        return false;\n    }\n\n    protected extractRecordKey(rec: any) {\n        let recData = rec;\n        if (this.grid.isRecordMerged(recData)) {\n            recData = rec.recordRef;\n        }\n\n        if (this.grid.isTreeRow && this.grid.isTreeRow(recData)) {\n            recData = recData.data;\n        }\n        return this.grid.primaryKey ? recData[this.grid.primaryKey] : recData;\n    }\n\n    protected getRowHeight() {\n        if ((this.grid as any).shouldResize) {\n            return null;\n        }\n        const isPinned = this.pinned && !this.disabled;\n        const indexInData = this.grid.isRowPinningToTop && !isPinned ? this.index - this.grid.pinnedRecordsCount : this.index;\n        if ((this.grid as any)._cdrRequests) {\n            // recalc size if repaint is requested.\n            this.grid.verticalScrollContainer.recalcUpdateSizes();\n        }\n        const size = this.grid.verticalScrollContainer.getSizeAt(indexInData);\n        return size || this.grid.rowHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    public get resolveDragIndicatorClasses(): string {\n        const defaultDragIndicatorCssClass = 'igx-grid__drag-indicator';\n        const dragIndicatorOff = this.grid.rowDragging && !this.dragging ? 'igx-grid__drag-indicator--off' : '';\n        return `${defaultDragIndicatorCssClass} ${dragIndicatorOff}`;\n    }\n\n    /**\n     * - state persistence switching all pinned columns resets collection\n     * - MRL unpinnedColumns igxFor modes entire child loop on unpin\n     */\n    protected trackPinnedColumn = trackByIdentity;\n}\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { IgxCellTemplateContext, IgxColumnTemplateContext, IgxSummaryTemplateContext } from '../common/grid.interface';\n\n@Directive({\n    selector: '[igxFilterCellTemplate]',\n    standalone: true\n})\nexport class IgxFilterCellTemplateDirective {\n    public template = inject<TemplateRef<IgxColumnTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxFilterCellTemplateDirective,\n        context: unknown): context is IgxColumnTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxCell]',\n    standalone: true\n})\nexport class IgxCellTemplateDirective {\n    public template = inject<TemplateRef<IgxCellTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxCellTemplateDirective,\n        context: unknown): context is IgxCellTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxCellValidationError]',\n    standalone: true\n})\nexport class IgxCellValidationErrorDirective {\n    public template = inject<TemplateRef<IgxCellTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxCellValidationErrorDirective,\n        context: unknown): context is IgxCellTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxHeader]',\n    standalone: true\n})\nexport class IgxCellHeaderTemplateDirective {\n    public template = inject<TemplateRef<IgxColumnTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxCellHeaderTemplateDirective,\n        context: unknown): context is IgxColumnTemplateContext {\n        return true;\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxFooter]',\n    standalone: true\n})\nexport class IgxCellFooterTemplateDirective {\n    public template = inject<TemplateRef<any>>(TemplateRef);\n}\n\n@Directive({\n    selector: '[igxCellEditor]',\n    standalone: true\n})\nexport class IgxCellEditorTemplateDirective {\n    public template = inject<TemplateRef<IgxCellTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxCellEditorTemplateDirective,\n        context: unknown): context is IgxCellTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxCollapsibleIndicator]',\n    standalone: true\n})\nexport class IgxCollapsibleIndicatorTemplateDirective {\n    public template = inject<TemplateRef<IgxColumnTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxCollapsibleIndicatorTemplateDirective,\n        context: unknown): context is IgxColumnTemplateContext {\n        return true;\n    }\n}\n\n@Directive({\n    selector: '[igxSummary]',\n    standalone: true\n})\nexport class IgxSummaryTemplateDirective {\n    public template = inject<TemplateRef<IgxSummaryTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxSummaryTemplateDirective,\n        context: unknown): context is IgxSummaryTemplateContext {\n        return true;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ColumnType } from 'igniteui-angular/core';\n\n/* mustCoerceToInt */\n/**\n * This enumeration is used to configure whether the drop position is set before or after\n * the target.\n */\nexport enum DropPosition {\n    BeforeDropTarget,\n    AfterDropTarget\n}\n\n\n/**\n * @hidden\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class IgxColumnMovingService {\n    public cancelDrop: boolean;\n    public icon: HTMLElement;\n    public column: ColumnType;\n}\n","import type { CellType, GridType, IGridValidationState, RowType, ValidationStatus } from './common/grid.interface';\nimport type { ISelectionNode } from './common/types';\nimport { columnFieldPath, type ColumnType, resolveNestedPath } from 'igniteui-angular/core';\n\nexport class IgxGridCell implements CellType {\n\n    \n\n    /**\n     * Returns the grid containing the cell.\n     *\n     * @memberof IgxGridCell\n     */\n    public grid: GridType;\n    private _row: RowType;\n    private _rowIndex: number;\n    private _column: ColumnType;\n\n    /**\n     * @hidden\n     */\n    constructor(\n        grid: GridType,\n        row: number | RowType,\n        column: ColumnType) {\n        this.grid = grid;\n        if (typeof row === 'number') {\n            this._rowIndex = row;\n        } else {\n            this._row = row;\n            this._rowIndex = row.index;\n        }\n        this._column = column;\n    }\n\n    /**\n     * Returns the row containing the cell.\n     * ```typescript\n     * let row = this.cell.row;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get row(): RowType {\n        return this._row || this.grid.createRow(this._rowIndex);\n    }\n\n    /**\n     * Returns the column of the cell.\n     * ```typescript\n     * let column = this.cell.column;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get column(): ColumnType {\n        return this._column;\n    }\n\n    /**\n     * Gets the current edit value while a cell is in edit mode.\n     * ```typescript\n     * let editValue = this.cell.editValue;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get editValue(): any {\n        if (this.isCellInEditMode()) {\n            return this.grid.crudService.cell.editValue;\n        }\n    }\n\n    /**\n     * Sets the current edit value while a cell is in edit mode.\n     * Only for cell editing mode.\n     * ```typescript\n     * this.cell.editValue = value;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public set editValue(value: any) {\n        if (this.isCellInEditMode()) {\n            this.grid.crudService.cell.editValue = value;\n        }\n    }\n\n    /**\n     * Gets the validation status and errors, if any.\n     * ```typescript\n     * let validation = this.cell.validation;\n     * let errors = validation.errors;\n     * ```\n     */\n\n    public get validation(): IGridValidationState {\n        const form = this.grid.validation.getFormControl(this.row.key, this.column.field);\n        return { status: form?.status as ValidationStatus || 'VALID', errors: form?.errors } as const;\n    }\n\n    /**\n     * Returns whether the cell is editable..\n     *\n     * @memberof IgxGridCell\n     */\n    public get editable(): boolean {\n        return this.column.editable && !this.row?.disabled;\n    }\n\n    /**\n     * Gets the width of the cell.\n     * ```typescript\n     * let cellWidth = this.cell.width;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get width(): string {\n        return this.column.width;\n    }\n\n    /**\n     * Returns the cell value.\n     *\n     * @memberof IgxGridCell\n     */\n    public get value(): any {\n        // will return undefined for a column layout, because getCellByColumnVisibleIndex may return the column layout at that index.\n        // getCellByColumnVisibleIndex is deprecated and will be removed in future version\n        return this.column.field ?\n            this.column.hasNestedPath ? resolveNestedPath(this.row?.data, columnFieldPath(this.column.field)) : this.row?.data[this.column.field]\n            : undefined;\n    }\n\n    /**\n     * Updates the cell value.\n     *\n     * @memberof IgxGridCell\n     */\n    public set value(val: any) {\n        this.update(val);\n    }\n\n    /**\n     * Gets the cell id.\n     * A cell in the grid is identified by:\n     * - rowID - primaryKey data value or the whole rowData, if the primaryKey is omitted.\n     * - rowIndex - the row index\n     * - columnID - column index\n     *\n     * ```typescript\n     * let cellID = cell.id;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public get id(): any {\n        const primaryKey = this.grid.primaryKey;\n        const rowID = primaryKey ? this.row?.data[primaryKey] : this.row?.data;\n        return { rowID, columnID: this.column.index, rowIndex: this._rowIndex || this.row?.index };\n    }\n\n    /**\n     * Returns if the row is currently in edit mode.\n     *\n     * @memberof IgxGridCell\n     */\n    public get editMode(): boolean {\n        return this.isCellInEditMode();\n    }\n\n    /**\n     * Starts/ends edit mode for the cell.\n     *\n     * ```typescript\n     * cell.editMode  = !cell.editMode;\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public set editMode(value: boolean) {\n        const isInEditMode = this.isCellInEditMode();\n        if (!this.row || this.row?.deleted || isInEditMode === value) {\n            return;\n        }\n        if (this.editable && value) {\n            this.endEdit();\n            // TODO possibly define similar method in gridAPI, which does not emit event\n            this.grid.crudService.enterEditMode(this);\n        } else {\n            this.grid.crudService.endCellEdit(true);\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Gets whether the cell is selected.\n     * ```typescript\n     * let isSelected = this.cell.selected;\n     * ```\n     *\n     *\n     * @memberof IgxGridCell\n     */\n    public get selected(): boolean {\n        return this.grid.selectionService.selected(this.selectionNode);\n    }\n\n    /**\n     * Selects/deselects the cell.\n     * ```typescript\n     * this.cell.selected = true.\n     * ```\n     *\n     *\n     * @memberof IgxGridCell\n     */\n    public set selected(val: boolean) {\n        const node = this.selectionNode;\n        if (val) {\n            this.grid.selectionService.add(node);\n        } else {\n            this.grid.selectionService.remove(node);\n        }\n        this.grid.notifyChanges();\n    }\n\n    public get active() {\n        const node = this.grid.navigation.activeNode;\n        return node ? node.row === this.row?.index && node.column === this.column.visibleIndex : false;\n    }\n\n\n    /**\n     * Updates the cell value.\n     *\n     * ```typescript\n     * cell.update(newValue);\n     * ```\n     *\n     * @memberof IgxGridCell\n     */\n    public update(val: any): void {\n        if (this.row?.deleted) {\n            return;\n        }\n\n        this.endEdit();\n\n        const cell = this.isCellInEditMode() ? this.grid.crudService.cell : this.grid.crudService.createCell(this);\n        cell.editValue = val;\n        this.grid.gridAPI.update_cell(cell);\n        this.grid.crudService.endCellEdit();\n        this.grid.notifyChanges();\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.row?.index,\n            column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.column.visibleIndex,\n            layout: this.column.columnLayoutChild ? {\n                rowStart: this.column.rowStart,\n                colStart: this.column.colStart,\n                rowEnd: this.column.rowEnd,\n                colEnd: this.column.colEnd,\n                columnVisibleIndex: this.column.visibleIndex\n            } : null\n        };\n    }\n\n    private isCellInEditMode(): boolean {\n        if (this.grid.crudService.cellInEditMode) {\n            const cellInEditMode = this.grid.crudService.cell.id;\n            const isCurrentCell = cellInEditMode.rowID === this.id.rowID &&\n                cellInEditMode.rowIndex === this.id.rowIndex &&\n                cellInEditMode.columnID === this.id.columnID;\n            return isCurrentCell;\n        }\n        return false;\n    }\n\n    private endEdit(): void {\n        if (!this.isCellInEditMode()) {\n            this.grid.gridAPI.update_cell(this.grid.crudService.cell);\n            this.grid.crudService.endCellEdit();\n        }\n    }\n}\n","import { Subject } from 'rxjs';\nimport { isEqual } from 'lodash-es';\nimport { AfterContentInit, ChangeDetectorRef, ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Input, QueryList, TemplateRef, Output, EventEmitter, OnDestroy, booleanAttribute, inject } from '@angular/core';\nimport { notifyChanges } from '../watch-changes';\nimport { WatchColumnChanges } from '../watch-changes';\nimport { IgxRowDirective } from '../row.directive';\nimport { CellType, GridType, IgxCellTemplateContext, IgxColumnTemplateContext, IgxSummaryTemplateContext, IGX_GRID_BASE } from '../common/grid.interface';\nimport { IgxGridHeaderComponent } from '../headers/grid-header.component';\nimport { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component';\nimport { IgxGridHeaderGroupComponent } from '../headers/grid-header-group.component';\nimport {\n    IgxSummaryOperand, IgxNumberSummaryOperand, IgxDateSummaryOperand, IgxTimeSummaryOperand\n} from '../summaries/grid-summary';\nimport {\n    IgxCellTemplateDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellValidationErrorDirective\n} from './templates.directive';\nimport { DropPosition } from '../moving/moving.service';\nimport { IColumnVisibilityChangingEventArgs, IPinColumnCancellableEventArgs, IPinColumnEventArgs } from '../common/events';\nimport { IgxGridCell } from '../grid-public-cell';\nimport { NG_VALIDATORS, Validator } from '@angular/forms';\nimport { ColumnPinningPosition, ColumnType, DefaultSortingStrategy, ExpressionsTreeUtil, FilteringExpressionsTree, GridColumnDataType, IColumnEditorOptions, IColumnPipeArgs, IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxDateTimeFilteringOperand, IgxFilteringOperand, IgxNumberFilteringOperand, IgxStringFilteringOperand, IgxSummaryResult, IgxTimeFilteringOperand, isConstructor, ISortingStrategy, MRLColumnSizeInfo, MRLResizeColumnInfo, PlatformUtil, ɵSize } from 'igniteui-angular/core';\nimport type { IgxColumnLayoutComponent } from './column-layout.component';\n\nconst DEFAULT_DATE_FORMAT = 'mediumDate';\nconst DEFAULT_TIME_FORMAT = 'mediumTime';\nconst DEFAULT_DATE_TIME_FORMAT = 'medium';\nconst DEFAULT_DIGITS_INFO = '1.0-3';\n\n/* blazorElement */\n/* contentParent: ColumnGroup */\n/* wcElementTag: igc-column */\n/* additionalIdentifier: Field */\n/* blazorIndirectRender */\n/**\n * **Ignite UI for Angular Column** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/grid/grid#columns-configuration)\n *\n * The Ignite UI Column is used within an `igx-grid` element to define what data the column will show. Features such as sorting,\n * filtering & editing are enabled at the column level.  You can also provide a template containing custom content inside\n * the column using `ng-template` which will be used for all cells within the column.\n *\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxPivotGridComponent, IgxRowIslandComponent, IgxColumnGroupComponent, IgxColumnLayoutComponent\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-column',\n    template: ``,\n    styles: `:host { display: none }`,\n    standalone: true\n})\nexport class IgxColumnComponent implements AfterContentInit, OnDestroy, ColumnType {\n    /* blazorSuppress */\n    public grid = inject<GridType>(IGX_GRID_BASE);\n    private _validators = inject<Validator[]>(NG_VALIDATORS, { optional: true, self: true });\n\n    /** @hidden @internal **/\n    public cdr = inject(ChangeDetectorRef);\n    protected platform = inject(PlatformUtil);\n\n    /**\n     * Sets/gets the `field` value.\n     * ```typescript\n     * let columnField = this.column.field;\n     * ```\n     * ```html\n     * <igx-column [field] = \"'ID'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public set field(value: string) {\n        this._field = value;\n        this.hasNestedPath = value?.includes('.');\n    }\n    public get field(): string {\n        return this._field;\n    }\n\n    /**\n     * Sets/gets whether to merge cells in this column.\n     * ```html\n     * <igx-column [merge]=\"true\"></igx-column>\n     * ```\n     *\n     */\n    @Input()\n    public get merge() {\n        return this._merge;\n    }\n\n    public set merge(value) {\n        if (this.grid.hasColumnLayouts) {\n            console.warn('Merging is not supported with multi-row layouts.');\n            return;\n        }\n        if (value !== this._merge) {\n            this._merge = value;\n            if (this.grid) {\n                this.grid.resetColumnCollections();\n                this.grid.notifyChanges();\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public validators: Validator[] = this._validators;\n\n    /**\n     * Sets/gets the `header` value.\n     * ```typescript\n     * let columnHeader = this.column.header;\n     * ```\n     * ```html\n     * <igx-column [header] = \"'ID'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public header = '';\n    /**\n     * Sets/gets the `title` value.\n     * ```typescript\n     * let title = this.column.title;\n     * ```\n     * ```html\n     * <igx-column [title] = \"'Some column tooltip'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public title = '';\n    /**\n     * Sets/gets whether the column is sortable.\n     * Default value is `false`.\n     * ```typescript\n     * let isSortable = this.column.sortable;\n     * ```\n     * ```html\n     * <igx-column [sortable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public sortable = false;\n    /**\n     * Returns if the column is selectable.\n     * ```typescript\n     * let columnSelectable = this.column.selectable;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input()\n    public get selectable(): boolean {\n        return this._selectable;\n    }\n\n    /**\n     * Sets if the column is selectable.\n     * Default value is `true`.\n     * ```html\n     * <igx-column [selectable] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set selectable(value: boolean) {\n        this._selectable = value;\n    }\n\n    /**\n     * Sets/gets whether the column is groupable.\n     * Default value is `false`.\n     * ```typescript\n     * let isGroupable = this.column.groupable;\n     * ```\n     * ```html\n     * <igx-column [groupable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get groupable(): boolean {\n        return this._groupable;\n    }\n    public set groupable(value: boolean) {\n        this._groupable = value;\n        this.grid.groupablePipeTrigger++;\n    }\n    /**\n     * Gets whether the column is editable.\n     * Default value is `false`.\n     * ```typescript\n     * let isEditable = this.column.editable;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get editable(): boolean {\n        // Updating the primary key when grid has transactions (incl. row edit)\n        // should not be allowed, as that can corrupt transaction state.\n        const rowEditable = this.grid && this.grid.rowEditable;\n        const hasTransactions = this.grid && this.grid.transactions.enabled;\n\n        if (this.isPrimaryColumn && (rowEditable || hasTransactions)) {\n            return false;\n        }\n\n        if (this._editable !== undefined) {\n            return this._editable;\n        } else {\n            return rowEditable;\n        }\n    }\n    /**\n     * Sets whether the column is editable.\n     * ```typescript\n     * this.column.editable = true;\n     * ```\n     * ```html\n     * <igx-column [editable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set editable(editable: boolean) {\n        this._editable = editable;\n    }\n    /**\n     * Sets/gets whether the column is filterable.\n     * Default value is `true`.\n     * ```typescript\n     * let isFilterable = this.column.filterable;\n     * ```\n     * ```html\n     * <igx-column [filterable] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public filterable = true;\n    /**\n     * Sets/gets whether the column is resizable.\n     * Default value is `false`.\n     * ```typescript\n     * let isResizable = this.column.resizable;\n     * ```\n     * ```html\n     * <igx-column [resizable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public resizable = false;\n\n    /**\n     * Sets/gets whether the column header is included in autosize logic.\n     * Useful when template for a column header is sized based on parent, for example a default `div`.\n     * Default value is `false`.\n     * ```typescript\n     * let isResizable = this.column.resizable;\n     * ```\n     * ```html\n     * <igx-column [resizable] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public autosizeHeader = true;\n\n    /**\n     * Gets a value indicating whether the summary for the column is enabled.\n     * ```typescript\n     * let hasSummary = this.column.hasSummary;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get hasSummary() {\n        return this._hasSummary;\n    }\n    /**\n     * Sets a value indicating whether the summary for the column is enabled.\n     * Default value is `false`.\n     * ```html\n     * <igx-column [hasSummary] = \"true\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set hasSummary(value) {\n        this._hasSummary = value;\n\n        if (this.grid) {\n            this.grid.summaryService.resetSummaryHeight();\n        }\n    }\n    /**\n     * Gets whether the column is hidden.\n     * ```typescript\n     * let isHidden = this.column.hidden;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get hidden(): boolean {\n        return this._hidden;\n    }\n    /**\n     * Sets the column hidden property.\n     * Default value is `false`.\n     * ```html\n     * <igx-column [hidden] = \"true\"></igx-column>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <igx-column [(hidden)] = \"model.isHidden\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set hidden(value: boolean) {\n        if (this._hidden !== value) {\n            this._hidden = value;\n            this.hiddenChange.emit(this._hidden);\n            if (this.columnLayoutChild && this.parent.hidden !== value) {\n                this.parent.hidden = value;\n                return;\n            }\n            if (this.grid) {\n                this.grid.crudService.endEdit(false);\n                this.grid.summaryService.resetSummaryHeight();\n                this.grid.filteringService.refreshExpressions();\n                this.grid.filteringService.hideFilteringRowOnColumnVisibilityChange(this);\n                this.grid.notifyChanges();\n            }\n        }\n    }\n\n    /**\n     * Returns if the column is selected.\n     * ```typescript\n     * let isSelected = this.column.selected;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get selected(): boolean {\n        return this.grid.selectionService.isColumnSelected(this.field);\n    }\n\n    /**\n     * Select/deselect a column.\n     * Default value is `false`.\n     * ```typescript\n     * this.column.selected = true;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set selected(value: boolean) {\n        if (this.selectable && value !== this.selected) {\n            if (value) {\n                this.grid.selectionService.selectColumnsWithNoEvent([this.field]);\n            } else {\n                this.grid.selectionService.deselectColumnsWithNoEvent([this.field]);\n            }\n            this.grid.notifyChanges();\n        }\n    }\n\n    /**\n     * Emitted when the column is hidden or shown.\n     *\n     * ```html\n     * <igx-column (hiddenChange)=\"hiddenChange($event)\">\n     * </igx-column>\n     * ```\n     *\n     */\n    @Output()\n    public hiddenChange = new EventEmitter<boolean>();\n\n    /**\n     * Emitted when the column expanded or collapsed.\n     *\n     * ```html\n     * <igx-column (expandedChange)=\"expandedChange($event)\">\n     * </igx-column>\n     * ```\n     *\n     */\n    @Output()\n    public expandedChange = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @Output()\n    public collapsibleChange = new EventEmitter<boolean>();\n\n    /** @hidden */\n    @Output()\n    public visibleWhenCollapsedChange = new EventEmitter<boolean>();\n\n    /** @hidden @internal */\n    @Output()\n    public columnChange = new EventEmitter<void>();\n\n    /**\n     * Gets whether the hiding is disabled.\n     * ```typescript\n     * let isHidingDisabled =  this.column.disableHiding;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public disableHiding = false;\n    /**\n     * Gets whether the pinning is disabled.\n     * ```typescript\n     * let isPinningDisabled =  this.column.disablePinning;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public disablePinning = false;\n\n    /**\n     * Gets the `width` of the column.\n     * ```typescript\n     * let columnWidth = this.column.width;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input()\n    public get width(): string {\n        const isAutoWidth = this._width && typeof this._width === 'string' && this._width === 'auto';\n        if (isAutoWidth) {\n            if (!this.autoSize) {\n                return 'fit-content';\n            } else {\n                return this.autoSize + 'px';\n            }\n\n        }\n        return this.widthSetByUser ? this._width : this.defaultWidth;\n    }\n\n    /**\n     * Sets the `width` of the column.\n     * ```html\n     * <igx-column [width] = \"'25%'\"></igx-column>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <igx-column [(width)]=\"model.columns[0].width\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set width(value: string) {\n        if (value) {\n            this._calcWidth = null;\n            this.calcPixelWidth = NaN;\n            this.widthSetByUser = true;\n            // width could be passed as number from the template\n            // host bindings are not px affixed so we need to ensure we affix simple number strings\n            if (typeof (value) === 'number' || value.match(/^[0-9]*$/)) {\n                value = value + 'px';\n            }\n            if (value === 'fit-content') {\n                value = 'auto';\n            }\n            this._width = value;\n            if (this.grid) {\n                this.cacheCalcWidth();\n            }\n            this.widthChange.emit(this._width);\n        }\n    }\n\n    /** @hidden @internal **/\n    public autoSize: number;\n\n    /**\n     * Sets/gets the maximum `width` of the column.\n     * ```typescript\n     * let columnMaxWidth = this.column.width;\n     * ```\n     * ```html\n     * <igx-column [maxWidth] = \"'150px'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input()\n    public set maxWidth(value: string) {\n        this._maxWidth = value;\n\n        this.grid.notifyChanges(true);\n    }\n    public get maxWidth(): string {\n        return this._maxWidth;\n    }\n    /**\n     * Sets/gets the class selector of the column header.\n     * ```typescript\n     * let columnHeaderClass = this.column.headerClasses;\n     * ```\n     * ```html\n     * <igx-column [headerClasses] = \"'column-header'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerClasses = '';\n\n    /**\n     * Sets conditional style properties on the column header.\n     * Similar to `ngStyle` it accepts an object literal where the keys are\n     * the style properties and the value is the expression to be evaluated.\n     * ```typescript\n     * styles = {\n     *  background: 'royalblue',\n     *  color: (column) => column.pinned ? 'red': 'inherit'\n     * }\n     * ```\n     * ```html\n     * <igx-column [headerStyles]=\"styles\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerStyles = null;\n\n    /**\n     * Sets/gets the class selector of the column group header.\n     * ```typescript\n     * let columnHeaderClass = this.column.headerGroupClasses;\n     * ```\n     * ```html\n     * <igx-column [headerGroupClasses] = \"'column-group-header'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerGroupClasses = '';\n\n    /**\n     * Sets conditional style properties on the column header group wrapper.\n     * Similar to `ngStyle` it accepts an object literal where the keys are\n     * the style properties and the value is the expression to be evaluated.\n     * ```typescript\n     * styles = {\n     *  background: 'royalblue',\n     *  color: (column) => column.pinned ? 'red': 'inherit'\n     * }\n     * ```\n     * ```html\n     * <igx-column [headerGroupStyles]=\"styles\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public headerGroupStyles = null;\n\n    /* treatAsRef */\n    /**\n     * Sets a conditional class selector of the column cells.\n     * Accepts an object literal, containing key-value pairs,\n     * where the key is the name of the CSS class, while the\n     * value is either a callback function that returns a boolean,\n     * or boolean, like so:\n     * ```typescript\n     * callback = (rowData, columnKey, cellValue, rowIndex) => { return rowData[columnKey] > 6; }\n     * cellClasses = { 'className' : this.callback };\n     * ```\n     * ```html\n     * <igx-column [cellClasses] = \"cellClasses\"></igx-column>\n     * <igx-column [cellClasses] = \"{'class1' : true }\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public cellClasses: any;\n\n    /* treatAsRef */\n    /**\n     * Sets conditional style properties on the column cells.\n     * Similar to `ngStyle` it accepts an object literal where the keys are\n     * the style properties and the value is the expression to be evaluated.\n     * As with `cellClasses` it accepts a callback function.\n     * ```typescript\n     * styles = {\n     *  background: 'royalblue',\n     *  color: (rowData, columnKey, cellValue, rowIndex) => value.startsWith('Important') ? 'red': 'inherit'\n     * }\n     * ```\n     * ```html\n     * <igx-column [cellStyles]=\"styles\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public cellStyles = null;\n\n    /* blazorAlternateType: CellValueFormatterEventHandler */\n    /* blazorOnlyScript */\n    /**\n     * Applies display format to cell values in the column. Does not modify the underlying data.\n     *\n     * @remarks\n     * Note: As the formatter is used in places like the Excel style filtering dialog, in certain\n     * scenarios (remote filtering for example), the row data argument can be `undefined`.\n     *\n     *\n     * In this example, we check to see if the column name is Salary, and then provide a method as the column formatter\n     * to format the value into a currency string.\n     *\n     * @example\n     * ```typescript\n     * columnInit(column: IgxColumnComponent) {\n     *   if (column.field == \"Salary\") {\n     *     column.formatter = (salary => this.format(salary));\n     *   }\n     * }\n     *\n     * format(value: number) : string {\n     *   return formatCurrency(value, \"en-us\", \"$\");\n     * }\n     * ```\n     *\n     * @example\n     * ```typescript\n     * const column = this.grid.getColumnByName('Address');\n     * const addressFormatter = (address: string, rowData: any) => data.privacyEnabled ? 'unknown' : address;\n     * column.formatter = addressFormatter;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public formatter: (value: any, rowData?: any) => any;\n\n    /* blazorAlternateType: SummaryValueFormatterEventHandler */\n    /* blazorOnlyScript */\n    /* forceCastDelegate */\n    /**\n     * The summaryFormatter is used to format the display of the column summaries.\n     *\n     * In this example, we check to see if the column name is OrderDate, and then provide a method as the summaryFormatter\n     * to change the locale for the dates to 'fr-FR'. The summaries with the count key are skipped so they are displayed as numbers.\n     *\n     * ```typescript\n     * columnInit(column: IgxColumnComponent) {\n     *   if (column.field == \"OrderDate\") {\n     *     column.summaryFormatter = this.summaryFormat;\n     *   }\n     * }\n     *\n     * summaryFormat(summary: IgxSummaryResult, summaryOperand: IgxSummaryOperand): string {\n     *   const result = summary.summaryResult;\n     *   if(summaryResult.key !== 'count' && result !== null && result !== undefined) {\n     *      const pipe = new DatePipe('fr-FR');\n     *      return pipe.transform(result,'mediumDate');\n     *   }\n     *   return result;\n     * }\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public summaryFormatter: (summary: IgxSummaryResult, summaryOperand: IgxSummaryOperand) => any;\n\n    /**\n     * Sets/gets whether the column filtering should be case sensitive.\n     * Default value is `true`.\n     * ```typescript\n     * let filteringIgnoreCase = this.column.filteringIgnoreCase;\n     * ```\n     * ```html\n     * <igx-column [filteringIgnoreCase] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public filteringIgnoreCase = true;\n    /**\n     * Sets/gets whether the column sorting should be case sensitive.\n     * Default value is `true`.\n     * ```typescript\n     * let sortingIgnoreCase = this.column.sortingIgnoreCase;\n     * ```\n     * ```html\n     * <igx-column [sortingIgnoreCase] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public sortingIgnoreCase = true;\n    /**\n     * Sets/gets whether the column is `searchable`.\n     * Default value is `true`.\n     * ```typescript\n     * let isSearchable =  this.column.searchable';\n     * ```\n     * ```html\n     *  <igx-column [searchable] = \"false\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public searchable = true;\n    /**\n     * Sets/gets the data type of the column values.\n     * Default value is `string`.\n     * ```typescript\n     * let columnDataType = this.column.dataType;\n     * ```\n     * ```html\n     * <igx-column [dataType] = \"'number'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public dataType: GridColumnDataType = GridColumnDataType.String;\n\n    /** @hidden */\n    @Input()\n    public collapsibleIndicatorTemplate: TemplateRef<IgxColumnTemplateContext>;\n\n    /**\n     * Row index where the current field should end.\n     * The amount of rows between rowStart and rowEnd will determine the amount of spanning rows to that field\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [rowEnd]=\"2\" [rowStart]=\"1\" [colStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowEnd: number;\n\n    /**\n     * Column index where the current field should end.\n     * The amount of columns between colStart and colEnd will determine the amount of spanning columns to that field\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [colEnd]=\"3\" [rowStart]=\"1\" [colStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public colEnd: number;\n\n    /**\n     * Row index from which the field is starting.\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [rowStart]=\"1\" [colStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public rowStart: number;\n\n    /**\n     * Column index from which the field is starting.\n     * ```html\n     * <igx-column-layout>\n     *   <igx-column [colStart]=\"1\" [rowStart]=\"1\"></igx-column>\n     * </igx-column-layout>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public colStart: number;\n\n    /**\n     * Sets/gets custom properties provided in additional template context.\n     *\n     * ```html\n     * <igx-column [additionalTemplateContext]=\"contextObject\">\n     *   <ng-template igxCell let-cell=\"cell\" let-props=\"additionalTemplateContext\">\n     *      {{ props }}\n     *   </ng-template>\n     * </igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public additionalTemplateContext: any;\n\n    /**\n     * Emitted when the column width changes.\n     *\n     * ```html\n     * <igx-column (widthChange)=\"widthChange($event)\">\n     * </igx-column>\n     * ```\n     *\n     */\n    @Output()\n    public widthChange = new EventEmitter<string>();\n\n    /**\n     * Emitted when the column is pinned/unpinned.\n     *\n     * ```html\n     * <igx-column (pinnedChange)=\"pinnedChange($event)\">\n     * </igx-column>\n     * ```\n     *\n     */\n    @Output()\n    public pinnedChange = new EventEmitter<boolean>();\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxFilterCellTemplateDirective, { read: IgxFilterCellTemplateDirective })\n    public filterCellTemplateDirective: IgxFilterCellTemplateDirective;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxSummaryTemplateDirective, { read: IgxSummaryTemplateDirective })\n    protected summaryTemplateDirective: IgxSummaryTemplateDirective;\n    /**\n     * @hidden\n     * @see {@link bodyTemplate}\n     */\n    @ContentChild(IgxCellTemplateDirective, { read: IgxCellTemplateDirective })\n    protected cellTemplate: IgxCellTemplateDirective;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxCellValidationErrorDirective, { read: IgxCellValidationErrorDirective })\n    protected cellValidationErrorTemplate: IgxCellValidationErrorDirective;\n    /**\n     * @hidden\n     */\n    @ContentChildren(IgxCellHeaderTemplateDirective, { read: IgxCellHeaderTemplateDirective, descendants: false })\n    protected headTemplate: QueryList<IgxCellHeaderTemplateDirective>;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxCellEditorTemplateDirective, { read: IgxCellEditorTemplateDirective })\n    protected editorTemplate: IgxCellEditorTemplateDirective;\n    /**\n     * @hidden\n     */\n    @ContentChild(IgxCollapsibleIndicatorTemplateDirective, { read: IgxCollapsibleIndicatorTemplateDirective, static: false })\n    protected collapseIndicatorTemplate: IgxCollapsibleIndicatorTemplateDirective;\n    /**\n     * @hidden\n     */\n    public get calcWidth(): any {\n        return this.getCalcWidth();\n    }\n\n    /** @hidden @internal **/\n    public calcPixelWidth: number;\n\n    /**\n     * @hidden\n     */\n    public get maxWidthPx() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(this.maxWidth) / 100 * gridAvailableSize : parseFloat(this.maxWidth);\n    }\n\n    /**\n     * @hidden\n     */\n    public get maxWidthPercent() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const isPercentageWidth = this.maxWidth && typeof this.maxWidth === 'string' && this.maxWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(this.maxWidth) : parseFloat(this.maxWidth) / gridAvailableSize * 100;\n    }\n\n    /**\n     * @hidden\n     */\n    public get minWidthPx() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const minWidth = this.minWidth || this.defaultMinWidth;\n        const isPercentageWidth = minWidth && typeof minWidth === 'string' && minWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(minWidth) / 100 * gridAvailableSize : parseFloat(minWidth);\n    }\n\n    /**\n     * @hidden\n     */\n    public get userSetMinWidthPx() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const isPercentageWidth = this._defaultMinWidth && typeof this._defaultMinWidth === 'string' && this._defaultMinWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(this._defaultMinWidth) / 100 * gridAvailableSize : parseFloat(this._defaultMinWidth);\n    }\n\n    /**\n     * @hidden\n     */\n    public get minWidthPercent() {\n        const gridAvailableSize = this.grid.calcWidth;\n        const minWidth = this.minWidth || this.defaultMinWidth;\n        const isPercentageWidth = minWidth && typeof minWidth === 'string' && minWidth.indexOf('%') !== -1;\n        return isPercentageWidth ? parseFloat(minWidth) : parseFloat(minWidth) / gridAvailableSize * 100;\n    }\n\n\n    /**\n     * Sets/gets the minimum `width` of the column.\n     * Default value is `88`;\n     * ```typescript\n     * let columnMinWidth = this.column.minWidth;\n     * ```\n     * ```html\n     * <igx-column [minWidth] = \"'100px'\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public set minWidth(value: string) {\n        const minVal = parseFloat(value);\n        if (Number.isNaN(minVal)) {\n            return;\n        }\n        this._defaultMinWidth = value;\n        this.grid.notifyChanges(true);\n    }\n    public get minWidth(): string {\n        return this._defaultMinWidth;\n    }\n\n    /** @hidden @internal **/\n    public get resolvedWidth(): string {\n        if (this.columnLayoutChild) {\n            return '';\n        }\n        const isAutoWidth = this._width && typeof this._width === 'string' && this._width === 'auto';\n        return isAutoWidth ? this.width : this.calcPixelWidth + 'px';\n    }\n\n    /**\n     * Gets the column index.\n     * ```typescript\n     * let columnIndex = this.column.index;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get index(): number {\n        return (this.grid as any)._columns.indexOf(this);\n    }\n\n    /* mustCoerceToInt */\n    /**\n     * Gets the pinning position of the column.\n     * ```typescript\n     * let pinningPosition = this.column.pinningPosition;\n     */\n    @WatchColumnChanges()\n    @Input()\n    public get pinningPosition(): ColumnPinningPosition {\n        const userSet = this._pinningPosition !== null && this._pinningPosition !== undefined;\n        return userSet ? this._pinningPosition : this.grid.pinning.columns;\n    }\n\n    /**\n     * Sets the pinning position of the column.\n     *```html\n     * <igx-column [pinningPosition]=\"1\"></igx-column>\n     * ```\n     */\n    public set pinningPosition(value: ColumnPinningPosition) {\n        this._pinningPosition = value;\n    }\n\n    /**\n     * Gets whether the column is `pinned`.\n     * ```typescript\n     * let isPinned = this.column.pinned;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input({ transform: booleanAttribute })\n    public get pinned(): boolean {\n        return this._pinned;\n    }\n    /**\n     * Sets whether the column is pinned.\n     * Default value is `false`.\n     * ```html\n     * <igx-column [pinned] = \"true\"></igx-column>\n     * ```\n     *\n     * Two-way data binding.\n     * ```html\n     * <igx-column [(pinned)] = \"model.columns[0].isPinned\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set pinned(value: boolean) {\n        if (this._pinned !== value) {\n            const isAutoWidth = this.width && typeof this.width === 'string' && this.width === 'fit-content';\n            if (this.grid && this.width && (isAutoWidth || !isNaN(parseInt(this.width, 10)))) {\n                if (value) {\n                    this.pin();\n                } else {\n                    this.unpin();\n                }\n                return;\n            }\n            /* No grid/width available at initialization. `initPinning` in the grid\n               will re-init the group (if present)\n            */\n            this._pinned = value;\n            this.pinnedChange.emit(this._pinned);\n        }\n    }\n\n    /* treatAsRef */\n    /**\n     * Gets the column `summaries`.\n     * ```typescript\n     * let columnSummaries = this.column.summaries;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @WatchColumnChanges()\n    @Input()\n    public get summaries(): any {\n        return this._summaries;\n    }\n\n    /* treatAsRef */\n    /**\n     * Sets the column `summaries`.\n     * ```typescript\n     * this.column.summaries = IgxNumberSummaryOperand;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set summaries(classRef: any) {\n        if (isConstructor(classRef)) {\n            this._summaries = new classRef();\n        }\n\n        if (this.grid) {\n            this.grid.summaryService.removeSummariesCachePerColumn(this.field);\n            this.grid.summaryPipeTrigger++;\n            this.grid.summaryService.resetSummaryHeight();\n        }\n    }\n\n    /**\n     * Sets/gets the summary operands to exclude from display.\n     * Accepts an array of string keys representing the summary types to disable, such as 'Min', 'Max', 'Count' etc.\n     * ```typescript\n     * let disabledSummaries = this.column.disabledSummaries;\n     * ```\n     * ```html\n     * <igx-column [disabledSummaries]=\"['min', 'max', 'average']\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @WatchColumnChanges()\n    @Input()\n    public get disabledSummaries(): string[] {\n        return this._disabledSummaries;\n    }\n\n    public set disabledSummaries(value: string[]) {\n        if (isEqual(this._disabledSummaries, value)) {\n            return;\n        }\n        this._disabledSummaries = value;\n        if (this.grid) {\n            this.grid.summaryService.removeSummariesCachePerColumn(this.field);\n            this.grid.summaryPipeTrigger++;\n            this.grid.summaryService.resetSummaryHeight();\n        }\n    }\n\n    /**\n     * Gets the column `filters`.\n     * ```typescript\n     * let columnFilters = this.column.filters'\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public get filters(): IgxFilteringOperand {\n        return this._filters;\n    }\n    /**\n     * Sets the column `filters`.\n     * ```typescript\n     * this.column.filters = IgxBooleanFilteringOperand.instance().\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set filters(instance: IgxFilteringOperand) {\n        this._filters = instance;\n    }\n    /**\n     * Gets the column `sortStrategy`.\n     * ```typescript\n     * let sortStrategy = this.column.sortStrategy\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public get sortStrategy(): ISortingStrategy {\n        return this._sortStrategy;\n    }\n    /**\n     * Sets the column `sortStrategy`.\n     * ```typescript\n     * this.column.sortStrategy = new CustomSortingStrategy().\n     * class CustomSortingStrategy extends SortingStrategy {...}\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set sortStrategy(classRef: ISortingStrategy) {\n        this._sortStrategy = classRef;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Gets the function that compares values for merging.\n     * ```typescript\n     * let mergingComparer = this.column.mergingComparer'\n     * ```\n     */\n    @Input()\n    public get mergingComparer(): (prevRecord: any, record: any, field: string) => boolean {\n        return this._mergingComparer;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Sets a custom function to compare values for merging.\n     * ```typescript\n     * this.column.mergingComparer = (prevRecord: any, record: any, field: string) => { return prevRecord[field] === record[field]; }\n     * ```\n     */\n    public set mergingComparer(funcRef: (prevRecord: any, record: any, field: string) => boolean) {\n        this._mergingComparer = funcRef;\n    }\n\n\n    /* blazorSuppress */\n    /**\n     * Gets the function that compares values for grouping.\n     * ```typescript\n     * let groupingComparer = this.column.groupingComparer'\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @Input()\n    public get groupingComparer(): (a: any, b: any, currRec?: any, groupRec?: any) => number {\n        return this._groupingComparer;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Sets a custom function to compare values for grouping.\n     * Subsequent values in the sorted data that the function returns 0 for are grouped.\n     * ```typescript\n     * this.column.groupingComparer = (a: any, b: any, currRec?: any, groupRec?: any) => { return a === b ? 0 : -1; }\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set groupingComparer(funcRef: (a: any, b: any, currRec?: any, groupRec?: any) => number) {\n        this._groupingComparer = funcRef;\n    }\n    /**\n     * @hidden @internal\n     */\n    public get defaultMinWidth(): string {\n        if (!this.grid) {\n            return '80';\n        }\n        switch (this.grid.gridSize) {\n            case ɵSize.Medium:\n                return '64';\n            case ɵSize.Small:\n                return '56';\n            default:\n                return '80';\n        }\n    }\n    /**\n     * Returns a reference to the `summaryTemplate`.\n     * ```typescript\n     * let summaryTemplate = this.column.summaryTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public get summaryTemplate(): TemplateRef<IgxSummaryTemplateContext> {\n        return this._summaryTemplate;\n    }\n    /**\n     * Sets the summary template.\n     * ```html\n     * <ng-template #summaryTemplate igxSummary let-summaryResults>\n     *    <p>{{ summaryResults[0].label }}: {{ summaryResults[0].summaryResult }}</p>\n     *    <p>{{ summaryResults[1].label }}: {{ summaryResults[1].summaryResult }}</p>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'summaryTemplate'\", {read: TemplateRef })\n     * public summaryTemplate: TemplateRef<any>;\n     * this.column.summaryTemplate = this.summaryTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set summaryTemplate(template: TemplateRef<IgxSummaryTemplateContext>) {\n        this._summaryTemplate = template;\n    }\n\n    /**\n     * Returns a reference to the `bodyTemplate`.\n     * ```typescript\n     * let bodyTemplate = this.column.bodyTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('cellTemplate')\n    public get bodyTemplate(): TemplateRef<IgxCellTemplateContext> {\n        return this._bodyTemplate;\n    }\n    /**\n     * Sets the body template.\n     * ```html\n     * <ng-template #bodyTemplate igxCell let-val>\n     *    <div style = \"background-color: yellowgreen\" (click) = \"changeColor(val)\">\n     *       <span> {{val}} </span>\n     *    </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'bodyTemplate'\", {read: TemplateRef })\n     * public bodyTemplate: TemplateRef<any>;\n     * this.column.bodyTemplate = this.bodyTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set bodyTemplate(template: TemplateRef<IgxCellTemplateContext>) {\n        this._bodyTemplate = template;\n    }\n    /**\n     * Returns a reference to the header template.\n     * ```typescript\n     * let headerTemplate = this.column.headerTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public get headerTemplate(): TemplateRef<IgxColumnTemplateContext> {\n        return this._headerTemplate;\n    }\n    /**\n     * Sets the header template.\n     * Note that the column header height is fixed and any content bigger than it will be cut off.\n     * ```html\n     * <ng-template #headerTemplate>\n     *   <div style = \"background-color:black\" (click) = \"changeColor(val)\">\n     *       <span style=\"color:red\" >{{column.field}}</span>\n     *   </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'headerTemplate'\", {read: TemplateRef })\n     * public headerTemplate: TemplateRef<any>;\n     * this.column.headerTemplate = this.headerTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set headerTemplate(template: TemplateRef<IgxColumnTemplateContext>) {\n        this._headerTemplate = template;\n    }\n    /**\n     * Returns a reference to the inline editor template.\n     * ```typescript\n     * let inlineEditorTemplate = this.column.inlineEditorTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('cellEditorTemplate')\n    public get inlineEditorTemplate(): TemplateRef<IgxCellTemplateContext> {\n        return this._inlineEditorTemplate;\n    }\n    /**\n     * Sets the inline editor template.\n     * ```html\n     * <ng-template #inlineEditorTemplate igxCellEditor let-cell=\"cell\">\n     *     <input type=\"string\" [(ngModel)]=\"cell.value\"/>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'inlineEditorTemplate'\", {read: TemplateRef })\n     * public inlineEditorTemplate: TemplateRef<any>;\n     * this.column.inlineEditorTemplate = this.inlineEditorTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set inlineEditorTemplate(template: TemplateRef<IgxCellTemplateContext>) {\n        this._inlineEditorTemplate = template;\n    }\n\n    /**\n     * Returns a reference to the validation error template.\n     * ```typescript\n     * let errorTemplate = this.column.errorTemplate;\n     * ```\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('errorTemplate')\n    public get errorTemplate(): TemplateRef<IgxCellTemplateContext> {\n        return this._errorTemplate;\n    }\n    /**\n     * Sets the error template.\n     * ```html\n     * <ng-template igxCellValidationError let-cell=\"cell\" #errorTemplate >\n     *     <div *ngIf=\"cell.validation.errors?.['forbiddenName']\">\n     *      This name is forbidden.\n     *     </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'errorTemplate'\", {read: TemplateRef })\n     * public errorTemplate: TemplateRef<any>;\n     * this.column.errorTemplate = this.errorTemplate;\n     * ```\n     */\n    public set errorTemplate(template: TemplateRef<IgxCellTemplateContext>) {\n        this._errorTemplate = template;\n    }\n\n    /**\n     * Returns a reference to the `filterCellTemplate`.\n     * ```typescript\n     * let filterCellTemplate = this.column.filterCellTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input('filterCellTemplate')\n    public get filterCellTemplate(): TemplateRef<IgxColumnTemplateContext> {\n        return this._filterCellTemplate;\n    }\n    /**\n     * Sets the quick filter template.\n     * ```html\n     * <ng-template #filterCellTemplate IgxFilterCellTemplate let-column=\"column\">\n     *    <input (input)=\"onInput()\">\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild(\"'filterCellTemplate'\", {read: TemplateRef })\n     * public filterCellTemplate: TemplateRef<any>;\n     * this.column.filterCellTemplate = this.filterCellTemplate;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public set filterCellTemplate(template: TemplateRef<IgxColumnTemplateContext>) {\n        this._filterCellTemplate = template;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get cells(): CellType[] {\n        return this.grid.dataView\n            .map((rec, index) => {\n                if (!this.grid.isGroupByRecord(rec) && !this.grid.isSummaryRow(rec)) {\n                    this.grid.pagingMode === 'remote' && this.grid.page !== 0 ?\n                        index = index + this.grid.perPage * this.grid.page : index = this.grid.dataRowList.first.index + index;\n                    const cell = new IgxGridCell(this.grid as any, index, this);\n                    return cell;\n                }\n            }).filter(cell => cell);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public get _cells(): CellType[] {\n        return this.grid.rowList.filter((row) => row instanceof IgxRowDirective)\n            .map((row) => {\n                if (row._cells) {\n                    return row._cells.filter((cell) => cell.columnIndex === this.index);\n                }\n            }).reduce((a, b) => a.concat(b), []);\n    }\n\n    /**\n     * Gets the column visible index.\n     * If the column is not visible, returns `-1`.\n     * ```typescript\n     * let visibleColumnIndex =  this.column.visibleIndex;\n     * ```\n     */\n    public get visibleIndex(): number {\n        if (!isNaN(this._vIndex)) {\n            return this._vIndex;\n        }\n        const unpinnedColumns = this.grid.unpinnedColumns.filter(c => !c.columnGroup);\n        const pinnedStartColumns = this.grid.pinnedStartColumns.filter(c => !c.columnGroup);\n        const pinnedEndColumns = this.grid.pinnedEndColumns.filter(c => !c.columnGroup);\n\n        let col = this;\n        let vIndex = -1;\n\n        if (this.columnGroup) {\n            col = this.allChildren.filter(c => !c.columnGroup && !c.hidden)[0] as any;\n        }\n        if (this.columnLayoutChild) {\n            // TODO: Refactor/redo/remove this\n            return (this.parent as IgxColumnLayoutComponent).childrenVisibleIndexes.find(x => x.column === this).index;\n        }\n\n        if (!this.pinned) {\n            const indexInCollection = unpinnedColumns.indexOf(col);\n            vIndex = indexInCollection === -1 ?\n                -1 : pinnedStartColumns.length + indexInCollection;\n        } else {\n            const indexInCollection = this.pinningPosition === ColumnPinningPosition.Start ?\n            pinnedStartColumns.indexOf(col) : pinnedEndColumns.indexOf(col);\n            vIndex = this.pinningPosition === ColumnPinningPosition.Start ?\n                indexInCollection :\n                pinnedStartColumns.length + unpinnedColumns.length + indexInCollection;\n        }\n        this._vIndex = vIndex;\n        return vIndex;\n    }\n\n    /* blazorCSSuppress - Blazor doesn't carry over the ColumnType interface + should translate as static bool value */\n    /**\n     * Returns a boolean indicating if the column is a `ColumnGroup`.\n     * ```typescript\n     * let columnGroup =  this.column.columnGroup;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get columnGroup() {\n        return false;\n    }\n\n    /* blazorCSSuppress - Blazor doesn't carry over the ColumnType interface + should translate as static bool value */\n    /**\n     * Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout.\n     * ```typescript\n     * let columnGroup =  this.column.columnGroup;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get columnLayout() {\n        return false;\n    }\n\n    /**\n     * Returns a boolean indicating if the column is a child of a `ColumnLayout` for multi-row layout.\n     * ```typescript\n     * let columnLayoutChild =  this.column.columnLayoutChild;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get columnLayoutChild(): boolean {\n        return this.parent && this.parent.columnLayout;\n    }\n\n    /**\n     * A list containing all the child columns under this column (if any).\n     * Empty without children or if this column is not Group or Layout.\n     */\n    public get childColumns(): ColumnType[] {\n        return [];\n    }\n\n    /** @hidden @internal **/\n    public get allChildren(): IgxColumnComponent[] {\n        return [];\n    }\n    /**\n     * Returns the level of the column in a column group.\n     * Returns `0` if the column doesn't have a `parent`.\n     * ```typescript\n     * let columnLevel =  this.column.level;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get level() {\n        let ptr = this.parent;\n        let lvl = 0;\n\n        while (ptr) {\n            lvl++;\n            ptr = ptr.parent;\n        }\n        return lvl;\n    }\n\n    /** @hidden @internal **/\n    public get isLastPinned(): boolean {\n        return this.pinningPosition === ColumnPinningPosition.Start &&\n            this.grid.pinnedStartColumns[this.grid.pinnedStartColumns.length - 1] === this;\n    }\n\n    /** @hidden @internal **/\n    public get isFirstPinned(): boolean {\n        const pinnedCols = this.grid.pinnedEndColumns.filter(x => !x.columnGroup);\n        return this.pinningPosition === ColumnPinningPosition.End && pinnedCols[0] === this;\n    }\n\n    /** @hidden @internal **/\n    public get gridRowSpan(): number {\n        return this.rowEnd && this.rowStart ? this.rowEnd - this.rowStart : 1;\n    }\n    /** @hidden @internal **/\n    public get gridColumnSpan(): number {\n        return this.colEnd && this.colStart ? this.colEnd - this.colStart : 1;\n    }\n\n    /**\n     * Indicates whether the column will be visible when its parent is collapsed.\n     * ```html\n     * <igx-column-group>\n     *   <igx-column [visibleWhenCollapsed]=\"true\"></igx-column>\n     * </igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges(true)\n    @Input({ transform: booleanAttribute })\n    public set visibleWhenCollapsed(value: boolean) {\n        this._visibleWhenCollapsed = value;\n        this.visibleWhenCollapsedChange.emit(this._visibleWhenCollapsed);\n        if (this.parent) {\n            // TODO: Refactor/redo/remove this\n            (this.parent as IgxColumnLayoutComponent)?.setExpandCollapseState?.();\n        }\n    }\n\n    public get visibleWhenCollapsed(): boolean {\n        return this._visibleWhenCollapsed;\n    }\n\n    /* mustSetInCodePlatforms: WebComponents;Blazor;React */\n    /**\n     * @remarks\n     * Pass optional parameters for DatePipe and/or DecimalPipe to format the display value for date and numeric columns.\n     * Accepts an `IColumnPipeArgs` object with any of the `format`, `timezone` and `digitsInfo` properties.\n     * For more details see https://angular.io/api/common/DatePipe and https://angular.io/api/common/DecimalPipe\n     * @example\n     * ```typescript\n     * const pipeArgs: IColumnPipeArgs = {\n     *      format: 'longDate',\n     *      timezone: 'UTC',\n     *      digitsInfo: '1.1-2'\n     * }\n     * ```\n     * ```html\n     * <igx-column dataType=\"date\" [pipeArgs]=\"pipeArgs\"></igx-column>\n     * <igx-column dataType=\"number\" [pipeArgs]=\"pipeArgs\"></igx-column>\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public set pipeArgs(value: IColumnPipeArgs) {\n        this._columnPipeArgs = Object.assign(this._columnPipeArgs, value);\n        this.grid.summaryService.clearSummaryCache();\n        this.grid.pipeTrigger++;\n    }\n    /* mustSetInCodePlatforms: WebComponents;Blazor */\n    public get pipeArgs(): IColumnPipeArgs {\n        return this._columnPipeArgs;\n    }\n\n    /**\n     * Pass optional properties for the default column editors.\n     * @remarks\n     * Options may be applicable only to specific column type editors.\n     * @example\n     * ```typescript\n     * const editorOptions: IColumnEditorOptions = {\n     *      dateTimeFormat: 'MM/dd/YYYY',\n     * }\n     * ```\n     * ```html\n     * <igx-column dataType=\"date\" [editorOptions]=\"editorOptions\"></igx-column>\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    @notifyChanges()\n    @WatchColumnChanges()\n    @Input()\n    public set editorOptions(value: IColumnEditorOptions) {\n        this._editorOptions = value;\n    }\n    public get editorOptions(): IColumnEditorOptions {\n        return this._editorOptions;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get collapsible() {\n        return false;\n    }\n    public set collapsible(_value: boolean) { }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get expanded() {\n        return true;\n    }\n    public set expanded(_value: boolean) { }\n\n    /**\n     * @hidden\n     */\n    public defaultWidth: string;\n\n    /**\n     * @hidden\n     */\n    public widthSetByUser: boolean;\n\n    /**\n     * @hidden\n     */\n    public hasNestedPath: boolean;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public defaultTimeFormat = 'hh:mm:ss a';\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public defaultDateTimeFormat = 'dd/MM/yyyy HH:mm:ss a';\n\n\n    /**\n     * Returns the filteringExpressionsTree of the column.\n     * ```typescript\n     * let tree =  this.column.filteringExpressionsTree;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public get filteringExpressionsTree(): FilteringExpressionsTree {\n        return ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, this.field) as FilteringExpressionsTree;\n    }\n\n    /* alternateName: parentColumn */\n    /* blazorAlternateType: object */\n    // We need that because Blazor cannot handle the type correctly.\n    /**\n     * Sets/gets the parent column.\n     * ```typescript\n     * let parentColumn = this.column.parent;\n     * ```\n     * ```typescript\n     * this.column.parent = higherLevelColumn;\n     * ```\n     */\n    public parent: ColumnType | null = null;\n\n    /* blazorSuppress */\n    /**\n     * Sets/gets the children columns.\n     * ```typescript\n     * let columnChildren = this.column.children;\n     * ```\n     *\n     * @deprecated in version 18.1.0. Use the `childColumns` property instead.\n     */\n    public children: QueryList<IgxColumnComponent>;\n    /**\n     * @hidden\n     */\n    public destroy$ = new Subject<any>();\n\n    /**\n     * @hidden\n     */\n    public widthConstrained = false;\n\n    /**\n     * @hidden\n     */\n    protected _applySelectableClass = false;\n\n    protected _vIndex = NaN;\n    protected _pinningPosition = null;\n    /**\n     * @hidden\n     */\n    protected _pinned = false;\n    /**\n     * @hidden\n     */\n    protected _bodyTemplate: TemplateRef<IgxCellTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _errorTemplate: TemplateRef<IgxCellTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _headerTemplate: TemplateRef<IgxColumnTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _summaryTemplate: TemplateRef<IgxSummaryTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _inlineEditorTemplate: TemplateRef<IgxCellTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _filterCellTemplate: TemplateRef<IgxColumnTemplateContext>;\n    /**\n     * @hidden\n     */\n    protected _summaries = null;\n    /**\n     * @hidden\n     */\n    private _disabledSummaries: string[] = [];\n    /**\n     * @hidden\n     */\n    protected _filters = null;\n    /**\n     * @hidden\n     */\n    protected _sortStrategy: ISortingStrategy = DefaultSortingStrategy.instance();\n    /**\n     * @hidden\n     */\n    protected _groupingComparer: (a: any, b: any, currRec?: any, groupRec?: any) => number;\n\n    protected _mergingComparer: (prevRecord: any, record: any, field: string) => boolean;\n    /**\n     * @hidden\n     */\n    protected _hidden = false;\n    /**\n     * @hidden\n     */\n    protected _index: number;\n    /**\n     * @hidden\n     */\n    protected _disablePinning = false;\n    /**\n     * @hidden\n     */\n    protected _width: string;\n    /**\n     * @hidden\n     */\n    protected _defaultMinWidth = '';\n    /**\n     * @hidden\n     */\n    protected _maxWidth;\n    /**\n     * @hidden\n     */\n    protected _hasSummary = false;\n    /**\n     * @hidden\n     */\n    protected _editable: boolean;\n    /**\n     * @hidden\n     */\n    protected _groupable = false;\n    /**\n     * @hidden\n     */\n    protected _merge = false;\n    /**\n     *  @hidden\n     */\n    protected _visibleWhenCollapsed;\n    /**\n     * @hidden\n     */\n    protected _collapsible = false;\n    /**\n     * @hidden\n     */\n    protected _expanded = true;\n    /**\n     * @hidden\n     */\n    protected _selectable = true;\n    /**\n     * @hidden\n     */\n    protected get isPrimaryColumn(): boolean {\n        return this.field !== undefined && this.grid !== undefined && this.field === this.grid.primaryKey;\n    }\n\n    private _field: string;\n    private _calcWidth = null;\n    private _columnPipeArgs: IColumnPipeArgs = { digitsInfo: DEFAULT_DIGITS_INFO };\n    private _editorOptions: IColumnEditorOptions = { };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public resetCaches() {\n        this._vIndex = NaN;\n        if (this.grid) {\n            this.cacheCalcWidth();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n    /**\n     * @hidden\n     */\n    public ngAfterContentInit(): void {\n        if (this.summaryTemplateDirective) {\n            this._summaryTemplate = this.summaryTemplateDirective.template;\n        }\n        if (this.cellTemplate) {\n            this._bodyTemplate = this.cellTemplate.template;\n        }\n        if (this.cellValidationErrorTemplate) {\n            this._errorTemplate = this.cellValidationErrorTemplate.template;\n        }\n        if (this.headTemplate && this.headTemplate.length) {\n            this._headerTemplate = this.headTemplate.toArray()[0].template;\n        }\n        if (this.editorTemplate) {\n            this._inlineEditorTemplate = this.editorTemplate.template;\n        }\n        if (this.filterCellTemplateDirective) {\n            this._filterCellTemplate = this.filterCellTemplateDirective.template;\n        }\n        if (!this._columnPipeArgs.format) {\n            this._columnPipeArgs.format = this.dataType === GridColumnDataType.Time ?\n                DEFAULT_TIME_FORMAT : this.dataType === GridColumnDataType.DateTime ?\n                    DEFAULT_DATE_TIME_FORMAT : DEFAULT_DATE_FORMAT;\n        }\n        if (!this.summaries) {\n            switch (this.dataType) {\n                case GridColumnDataType.Number:\n                case GridColumnDataType.Currency:\n                case GridColumnDataType.Percent:\n                    this.summaries = IgxNumberSummaryOperand;\n                    break;\n                case GridColumnDataType.Date:\n                case GridColumnDataType.DateTime:\n                    this.summaries = IgxDateSummaryOperand;\n                    break;\n                case GridColumnDataType.Time:\n                    this.summaries = IgxTimeSummaryOperand;\n                    break;\n\n                case GridColumnDataType.String:\n                case GridColumnDataType.Boolean:\n                default:\n                    this.summaries = IgxSummaryOperand;\n                    break;\n            }\n        }\n        if (!this.filters) {\n            switch (this.dataType) {\n                case GridColumnDataType.Boolean:\n                    this.filters = IgxBooleanFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Number:\n                case GridColumnDataType.Currency:\n                case GridColumnDataType.Percent:\n                    this.filters = IgxNumberFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Date:\n                    this.filters = IgxDateFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Time:\n                    this.filters = IgxTimeFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.DateTime:\n                    this.filters = IgxDateTimeFilteringOperand.instance();\n                    break;\n                case GridColumnDataType.Image:\n                    this.filterable = false;\n                    break;\n                case GridColumnDataType.String:\n                default:\n                    this.filters = IgxStringFilteringOperand.instance();\n                    break;\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getGridTemplate(isRow: boolean): string {\n        if (isRow) {\n            const rowsCount = this.grid.type !== 'pivot' ? this.grid.multiRowLayoutRowSize : this.children.length - 1;\n            return `repeat(${rowsCount},1fr)`;\n        } else {\n            return this.getColumnSizesString(this.children);\n        }\n    }\n\n    /** @hidden @internal **/\n    public getInitialChildColumnSizes(children: QueryList<IgxColumnComponent>): Array<MRLColumnSizeInfo> {\n        const columnSizes: MRLColumnSizeInfo[] = [];\n        // find the smallest col spans\n        children.forEach(col => {\n            if (!col.colStart) {\n                return;\n            }\n            const newWidthSet = col.widthSetByUser && columnSizes[col.colStart - 1] && !columnSizes[col.colStart - 1].widthSetByUser;\n            const newSpanSmaller = columnSizes[col.colStart - 1] && columnSizes[col.colStart - 1].colSpan > col.gridColumnSpan;\n            const bothWidthsSet = col.widthSetByUser && columnSizes[col.colStart - 1] && columnSizes[col.colStart - 1].widthSetByUser;\n            const bothWidthsNotSet = !col.widthSetByUser && columnSizes[col.colStart - 1] && !columnSizes[col.colStart - 1].widthSetByUser;\n\n            if (columnSizes[col.colStart - 1] === undefined) {\n                // If nothing is defined yet take any column at first\n                // We use colEnd to know where the column actually ends, because not always it starts where we have it set in columnSizes.\n                columnSizes[col.colStart - 1] = {\n                    ref: col,\n                    width: col.width === 'fit-content' ? col.autoSize :\n                        col.widthSetByUser || this.grid.columnWidthSetByUser ? parseFloat(col.calcWidth) : null,\n                    colSpan: col.gridColumnSpan,\n                    colEnd: col.colStart + col.gridColumnSpan,\n                    widthSetByUser: col.widthSetByUser\n                };\n            } else if (newWidthSet || (newSpanSmaller && ((bothWidthsSet) || (bothWidthsNotSet)))) {\n                // If a column is set already it should either not have width defined or have width with bigger span than the new one.\n\n                /**\n                 *  If replaced column has bigger span, we want to fill the remaining columns\n                 *  that the replacing column does not fill with the old one.\n                 */\n                if (bothWidthsSet && newSpanSmaller) {\n                    // Start from where the new column set would end and apply the old column to the rest depending on how much it spans.\n                    // We have not yet replaced it so we can use it directly from the columnSizes collection.\n                    // This is where colEnd is used because the colStart of the old column is not actually i + 1.\n                    for (let i = col.colStart - 1 + col.gridColumnSpan; i < columnSizes[col.colStart - 1].colEnd - 1; i++) {\n                        if (!columnSizes[i] || !columnSizes[i].widthSetByUser) {\n                            columnSizes[i] = columnSizes[col.colStart - 1];\n                        } else {\n                            break;\n                        }\n                    }\n                }\n\n                // Replace the old column with the new one.\n                columnSizes[col.colStart - 1] = {\n                    ref: col,\n                    width: col.width === 'fit-content' ? col.autoSize :\n                        col.widthSetByUser || this.grid.columnWidthSetByUser ? parseFloat(col.calcWidth) : null,\n                    colSpan: col.gridColumnSpan,\n                    colEnd: col.colStart + col.gridColumnSpan,\n                    widthSetByUser: col.widthSetByUser\n                };\n            } else if (bothWidthsSet && columnSizes[col.colStart - 1].colSpan < col.gridColumnSpan) {\n                // If the column already in the columnSizes has smaller span, we still need to fill any empty places with the current col.\n                // Start from where the smaller column set would end and apply the bigger column to the rest depending on how much it spans.\n                // Since here we do not have it in columnSizes we set it as a new column keeping the same colSpan.\n                for (let i = col.colStart - 1 + columnSizes[col.colStart - 1].colSpan; i < col.colStart - 1 + col.gridColumnSpan; i++) {\n                    if (!columnSizes[i] || !columnSizes[i].widthSetByUser) {\n                        columnSizes[i] = {\n                            ref: col,\n                            width: col.width === 'fit-content' ? col.autoSize :\n                                col.widthSetByUser || this.grid.columnWidthSetByUser ? parseFloat(col.calcWidth) : null,\n                            colSpan: col.gridColumnSpan,\n                            colEnd: col.colStart + col.gridColumnSpan,\n                            widthSetByUser: col.widthSetByUser\n                        };\n                    } else {\n                        break;\n                    }\n                }\n            }\n        });\n\n        // Flatten columnSizes so there are not columns with colSpan > 1\n        for (let i = 0; i < columnSizes.length; i++) {\n            if (columnSizes[i] && columnSizes[i].colSpan > 1) {\n                let j = 1;\n\n                // Replace all empty places depending on how much the current column spans starting from next col.\n                for (; j < columnSizes[i].colSpan && i + j + 1 < columnSizes[i].colEnd; j++) {\n                    if (columnSizes[i + j] &&\n                        ((!columnSizes[i].width && columnSizes[i + j].width) ||\n                            (!columnSizes[i].width && !columnSizes[i + j].width && columnSizes[i + j].colSpan <= columnSizes[i].colSpan) ||\n                            (!!columnSizes[i + j].width && columnSizes[i + j].colSpan <= columnSizes[i].colSpan))) {\n                        // If we reach an already defined column that has width and the current doesn't have or\n                        // if the reached column has bigger colSpan we stop.\n                        break;\n                    } else {\n                        const width = columnSizes[i].widthSetByUser ?\n                            columnSizes[i].width / columnSizes[i].colSpan :\n                            columnSizes[i].width;\n                        columnSizes[i + j] = {\n                            ref: columnSizes[i].ref,\n                            width,\n                            colSpan: 1,\n                            colEnd: columnSizes[i].colEnd,\n                            widthSetByUser: columnSizes[i].widthSetByUser\n                        };\n                    }\n                }\n\n                // Update the current column width so it is divided between all columns it spans and set it to 1.\n                columnSizes[i].width = columnSizes[i].widthSetByUser ?\n                    columnSizes[i].width / columnSizes[i].colSpan :\n                    columnSizes[i].width;\n                columnSizes[i].colSpan = 1;\n\n                // Update the index based on how much we have replaced. Subtract 1 because we started from 1.\n                i += j - 1;\n            }\n        }\n\n        return columnSizes;\n    }\n\n    /** @hidden @internal **/\n    public getFilledChildColumnSizes(children: QueryList<IgxColumnComponent>): Array<string> {\n        const columnSizes = this.getInitialChildColumnSizes(children);\n\n        // fill the gaps if there are any\n        const result: string[] = [];\n        for (const size of columnSizes) {\n            if (size && !!size.width) {\n                result.push(size.width + 'px');\n            } else {\n                const currentWidth = parseFloat(this.grid.getPossibleColumnWidth());\n                result.push((this.getConstrainedSizePx(currentWidth)) + 'px');\n            }\n        }\n        return result;\n    }\n\n    /** @hidden @internal **/\n    public getResizableColUnderEnd(): MRLResizeColumnInfo[] {\n        if (this.columnLayout || !this.columnLayoutChild || this.columnGroup) {\n            return [{ target: this, spanUsed: 1 }];\n        }\n\n        const columnSized = this.getInitialChildColumnSizes(this.parent.children as QueryList<IgxColumnComponent>);\n        const targets: MRLResizeColumnInfo[] = [];\n        const colEnd = this.colEnd ? this.colEnd : this.colStart + 1;\n\n        for (let i = 0; i < columnSized.length; i++) {\n            if (this.colStart <= i + 1 && i + 1 < colEnd) {\n                targets.push({ target: columnSized[i].ref, spanUsed: 1 });\n            }\n        }\n\n        const targetsSquashed: MRLResizeColumnInfo[] = [];\n        for (const target of targets) {\n            if (targetsSquashed.length && targetsSquashed[targetsSquashed.length - 1].target.field === target.target.field) {\n                targetsSquashed[targetsSquashed.length - 1].spanUsed++;\n            } else {\n                targetsSquashed.push(target);\n            }\n        }\n\n        return targetsSquashed;\n    }\n\n    /**\n     * Pins the column in the specified position at the provided index in that pinned area.\n     * Defaults to index `0` if not provided, or to the initial index in the pinned area.\n     * Returns `true` if the column is successfully pinned. Returns `false` if the column cannot be pinned.\n     * Column cannot be pinned if:\n     * - Is already pinned\n     * - index argument is out of range\n     * ```typescript\n     * let success = this.column.pin();\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public pin(index?: number, pinningPosition?: ColumnPinningPosition): boolean {\n        // TODO: Probably should the return type of the old functions\n        // should be moved as a event parameter.\n        const grid = (this.grid as any);\n        if (this._pinned) {\n            return false;\n        }\n\n        if (this.parent && !this.parent.pinned) {\n            return this.topLevelParent.pin(index, pinningPosition);\n        }\n        const targetPinPosition = pinningPosition !== null && pinningPosition !== undefined ?  pinningPosition : this.pinningPosition;\n        const pinningVisibleCollection = targetPinPosition === ColumnPinningPosition.Start ?\n        grid.pinnedStartColumns : grid.pinnedEndColumns;\n        const pinningCollection = targetPinPosition === ColumnPinningPosition.Start ?\n        grid._pinnedStartColumns : grid._pinnedEndColumns;\n        const hasIndex = index !== undefined && index !== null;\n        if (hasIndex && (index < 0 || index > pinningVisibleCollection.length)) {\n            return false;\n        }\n\n        if (!this.parent && !this.pinnable) {\n            return false;\n        }\n\n        const rootPinnedCols = pinningCollection.filter((c) => c.level === 0);\n        index = hasIndex ? index : rootPinnedCols.length;\n        const args: IPinColumnCancellableEventArgs = { column: this, insertAtIndex: index, isPinned: false, cancel: false };\n        this.grid.columnPin.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        this.grid.crudService.endEdit(false);\n\n        this._pinned = true;\n        if (pinningPosition !== null && pinningPosition !== undefined) {\n            // if user has set some position in the params, overwrite the column's position.\n            this._pinningPosition = pinningPosition;\n        }\n\n        this.pinnedChange.emit(this._pinned);\n        // it is possible that index is the last position, so will need to find target column by [index-1]\n        const targetColumn = args.insertAtIndex === pinningCollection.length ?\n        pinningCollection[args.insertAtIndex - 1] : pinningCollection[args.insertAtIndex];\n\n        if (pinningCollection.indexOf(this) === -1) {\n            if (!grid.hasColumnGroups) {\n                pinningCollection.splice(args.insertAtIndex, 0, this);\n                grid._pinnedColumns = grid._pinnedStartColumns.concat(grid._pinnedEndColumns);\n            } else {\n                // insert based only on root collection\n                if (this.level === 0) {\n                    rootPinnedCols.splice(args.insertAtIndex, 0, this);\n                }\n                let allPinned = [];\n                // FIX: this is duplicated on every step in the hierarchy....\n                // re-create hierarchy\n                rootPinnedCols.forEach(group => {\n                    allPinned.push(group);\n                    allPinned = allPinned.concat(group.allChildren);\n                });\n                grid._pinnedColumns = allPinned;\n                if (this.pinningPosition === ColumnPinningPosition.Start) {\n                    grid._pinnedStartColumns = allPinned;\n                } else {\n                    grid._pinnedEndColumns = allPinned;\n                }\n            }\n\n            if (grid._unpinnedColumns.indexOf(this) !== -1) {\n                const childrenCount = this.allChildren.length;\n                grid._unpinnedColumns.splice(grid._unpinnedColumns.indexOf(this), 1 + childrenCount);\n            }\n        }\n\n        if (hasIndex) {\n            index === pinningCollection.length - 1 ?\n                grid._moveColumns(this, targetColumn, DropPosition.AfterDropTarget) : grid._moveColumns(this, targetColumn, DropPosition.BeforeDropTarget);\n        }\n\n        if (this.columnGroup) {\n            this.allChildren.forEach(child => child.pin(null, targetPinPosition));\n            grid.reinitPinStates();\n        }\n\n        grid.resetCaches();\n        grid.notifyChanges();\n        if (this.columnLayoutChild) {\n            this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n        this.grid.filteringService.refreshExpressions();\n        const eventArgs: IPinColumnEventArgs = { column: this, insertAtIndex: index, isPinned: true };\n        this.grid.columnPinned.emit(eventArgs);\n        return true;\n    }\n    /**\n     * Unpins the column and place it at the provided index in the unpinned area.\n     * Defaults to index `0` if not provided, or to the initial index in the unpinned area.\n     * Returns `true` if the column is successfully unpinned. Returns `false` if the column cannot be unpinned.\n     * Column cannot be unpinned if:\n     * - Is already unpinned\n     * - index argument is out of range\n     * ```typescript\n     * let success = this.column.unpin();\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public unpin(index?: number): boolean {\n        const grid = (this.grid as any);\n        if (!this._pinned) {\n            return false;\n        }\n\n        if (this.parent && this.parent.pinned) {\n            return this.topLevelParent.unpin(index);\n        }\n        const hasIndex = index !== undefined && index !== null;\n        if (hasIndex && (index < 0 || index > grid._unpinnedColumns.length)) {\n            return false;\n        }\n\n        // estimate the exact index at which column will be inserted\n        // takes into account initial unpinned index of the column\n        if (!hasIndex) {\n            const indices = grid._unpinnedColumns.map(col => col.index);\n            indices.push(this.index);\n            indices.sort((a, b) => a - b);\n            index = indices.indexOf(this.index);\n        }\n\n        const args: IPinColumnCancellableEventArgs = { column: this, insertAtIndex: index, isPinned: true, cancel: false };\n        this.grid.columnPin.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        this.grid.crudService.endEdit(false);\n\n        this._pinned = false;\n        this.pinnedChange.emit(this._pinned);\n\n        // it is possible that index is the last position, so will need to find target column by [index-1]\n        const targetColumn = args.insertAtIndex === grid._unpinnedColumns.length ?\n            grid._unpinnedColumns[args.insertAtIndex - 1] : grid._unpinnedColumns[args.insertAtIndex];\n\n        if (!hasIndex) {\n            grid._unpinnedColumns.splice(index, 0, this);\n            if (grid._pinnedColumns.indexOf(this) !== -1) {\n                grid._pinnedColumns.splice(grid._pinnedColumns.indexOf(this), 1);\n            }\n            if (this.pinningPosition === ColumnPinningPosition.Start && grid._pinnedStartColumns.indexOf(this) !== -1) {\n                grid._pinnedStartColumns.splice(grid._pinnedStartColumns.indexOf(this), 1);\n            }\n            if (this.pinningPosition === ColumnPinningPosition.End && grid._pinnedEndColumns.indexOf(this) !== -1) {\n                grid._pinnedEndColumns.splice(grid._pinnedEndColumns.indexOf(this), 1);\n            }\n        }\n\n        if (hasIndex) {\n            grid.moveColumn(this, targetColumn);\n        }\n\n        if (this.columnGroup) {\n            this.allChildren.forEach(child => child.unpin());\n        }\n\n        grid.reinitPinStates();\n        grid.resetCaches();\n\n        grid.notifyChanges();\n        if (this.columnLayoutChild) {\n            this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n        this.grid.filteringService.refreshExpressions();\n\n        this.grid.columnPinned.emit({ column: this, insertAtIndex: index, isPinned: false });\n\n        return true;\n    }\n\n    /**\n     * Moves a column to the specified visible index.\n     * If passed index is invalid, or if column would receive a different visible index after moving, moving is not performed.\n     * If passed index would move the column to a different column group. moving is not performed.\n     *\n     * @example\n     * ```typescript\n     * column.move(index);\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    public move(index: number) {\n        let target;\n        let columns = this.grid.columns.filter(c => c.visibleIndex > -1);\n        // grid last visible index\n        const li = columns.map(c => c.visibleIndex).reduce((a, b) => Math.max(a, b));\n        const parent = this.parent;\n        const isPreceding = this.visibleIndex < index;\n\n        if (index === this.visibleIndex || index < 0 || index > li) {\n            return;\n        }\n\n        if (parent) {\n            columns = columns.filter(c => c.level >= this.level && c !== this && c.parent !== this &&\n                c.topLevelParent === this.topLevelParent);\n        }\n\n        // If isPreceding, find a target such that when the current column is placed after it, current colummn will receive a visibleIndex === index. This takes into account visible children of the columns.\n        // If !isPreceding, finds a column of the same level and visible index that equals the passed index agument (c.visibleIndex === index). No need to consider the children here.\n\n        if (isPreceding) {\n            columns = columns.filter(c => c.visibleIndex > this.visibleIndex);\n            target = columns.find(c => c.level === this.level && c.visibleIndex + (c as any).calcChildren() - this.calcChildren() === index);\n        } else {\n            columns = columns.filter(c => c.visibleIndex < this.visibleIndex);\n            target = columns.find(c => c.level === this.level && c.visibleIndex === index);\n        }\n\n        if (!target || (target.pinned && this.disablePinning)) {\n            return;\n        }\n\n        const pos = isPreceding ? DropPosition.AfterDropTarget : DropPosition.BeforeDropTarget;\n        this.grid.moveColumn(this, target as IgxColumnComponent, pos);\n    }\n\n    /**\n     * No children for the column, so will returns 1 or 0, if the column is hidden.\n     *\n     * @hidden\n     */\n    public calcChildren(): number {\n        const children = this.hidden ? 0 : 1;\n        return children;\n    }\n\n    /**\n     * Toggles column vibisility and emits the respective event.\n     *\n     * @hidden\n     */\n    public toggleVisibility(value?: boolean) {\n        const newValue = value ?? !this.hidden;\n        const eventArgs: IColumnVisibilityChangingEventArgs = { column: this, newValue, cancel: false };\n        this.grid.columnVisibilityChanging.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        this.hidden = newValue;\n        this.grid.columnVisibilityChanged.emit({ column: this, newValue });\n    }\n\n    /**\n     * Returns a reference to the top level parent column.\n     * ```typescript\n     * let topLevelParent =  this.column.topLevelParent;\n     * ```\n     */\n    public get topLevelParent(): ColumnType | undefined {\n        let parent = this.parent;\n        while (parent && parent.parent) {\n            parent = parent.parent;\n        }\n        return parent ?? undefined;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get headerCell(): IgxGridHeaderComponent {\n        return this.grid.headerCellList.find((header) => header.column === this);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get filterCell(): IgxGridFilteringCellComponent {\n        return this.grid.filterCellList.find((filterCell) => filterCell.column === this);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get headerGroup(): IgxGridHeaderGroupComponent {\n        return this.grid.headerGroupsList.find(group => group.column === this);\n    }\n\n    /**\n     * Autosize the column to the longest currently visible cell value, including the header cell.\n     * ```typescript\n     * @ViewChild('grid') grid: IgxGridComponent;\n     * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n     * column.autosize();\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     * @param byHeaderOnly Set if column should be autosized based only on the header content.\n     */\n    public autosize(byHeaderOnly = false) {\n        if (!this.columnGroup) {\n            this.width = this.getAutoSize(byHeaderOnly);\n            this.grid.reflow();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getAutoSize(byHeader = false): string {\n        const size = !byHeader ? this.getLargestCellWidth() :\n            (Object.values(this.getHeaderCellWidths()).reduce((a, b) => a + b) + 'px');\n        const isPercentageWidth = this.width && typeof this.width === 'string' && this.width.indexOf('%') !== -1;\n\n        let newWidth;\n        if (isPercentageWidth) {\n            const gridAvailableSize = this.grid.calcWidth;\n            const percentageSize = parseFloat(size) / gridAvailableSize * 100;\n            newWidth = percentageSize + '%';\n        } else {\n            newWidth = size;\n        }\n\n        const maxWidth = isPercentageWidth ? this.maxWidthPercent : this.maxWidthPx;\n        const minWidth = isPercentageWidth ? this.minWidthPercent : this.minWidthPx;\n        if (this.maxWidth && (parseFloat(newWidth) > maxWidth)) {\n            newWidth = isPercentageWidth ? maxWidth + '%' : maxWidth + 'px';\n        } else if (parseFloat(newWidth) < minWidth) {\n            newWidth = isPercentageWidth ? minWidth + '%' : minWidth + 'px';\n        }\n\n        return newWidth;\n    }\n\n    /**\n     * @hidden\n     */\n    public getCalcWidth(): any {\n        if (this._calcWidth && !isNaN(this.calcPixelWidth)) {\n            return this._calcWidth;\n        }\n        this.cacheCalcWidth();\n        return this._calcWidth;\n    }\n\n\n    /**\n     * @hidden\n     * Returns the width and padding of a header cell.\n     */\n    public getHeaderCellWidths() {\n        return this.grid.getHeaderCellWidth(this.headerCell.nativeElement);\n    }\n\n    /**\n     * @hidden\n     * Returns the size (in pixels) of the longest currently visible cell, including the header cell.\n     * ```typescript\n     * @ViewChild('grid') grid: IgxGridComponent;\n     *\n     * let column = this.grid.columnList.filter(c => c.field === 'ID')[0];\n     * let size = column.getLargestCellWidth();\n     * ```\n     * @memberof IgxColumnComponent\n     */\n    public getLargestCellWidth(): string {\n        const range = this.grid.document.createRange();\n        const largest = new Map<number, number>();\n\n        if (this._cells.length > 0) {\n            const cellsContentWidths = [];\n            this._cells.forEach((cell) => cellsContentWidths.push(cell.calculateSizeToFit(range)));\n\n            const index = cellsContentWidths.indexOf(Math.max(...cellsContentWidths));\n            const cellStyle = this.grid.document.defaultView.getComputedStyle(this._cells[index].nativeElement);\n            const cellPadding = parseFloat(cellStyle.paddingLeft) + parseFloat(cellStyle.paddingRight) +\n                parseFloat(cellStyle.borderLeftWidth) + parseFloat(cellStyle.borderRightWidth);\n\n            largest.set(Math.max(...cellsContentWidths), cellPadding);\n        }\n\n        if (this.headerCell && this.autosizeHeader) {\n            const headerCellWidths = this.getHeaderCellWidths();\n            largest.set(headerCellWidths.width, headerCellWidths.padding);\n        }\n\n        const largestCell = Math.max(...Array.from(largest.keys()));\n        const width = Math.ceil(largestCell + largest.get(largestCell));\n\n        if (Number.isNaN(width)) {\n            return this.width;\n        } else {\n            return width + 'px';\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public getCellWidth() {\n        const colWidth = this.width;\n        const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n\n        if (this.columnLayoutChild) {\n            return '';\n        }\n\n        if (colWidth && !isPercentageWidth) {\n\n            let cellWidth = colWidth;\n            if (typeof cellWidth !== 'string' || cellWidth.endsWith('px') === false) {\n                cellWidth += 'px';\n            }\n\n            return cellWidth;\n        } else {\n            return colWidth;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public populateVisibleIndexes() { }\n\n    protected getColumnSizesString(children: QueryList<IgxColumnComponent>): string {\n        const res = this.getFilledChildColumnSizes(children);\n        return res.join(' ');\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getConstrainedSizePx(newSize) {\n        if (this.maxWidth && newSize >= this.maxWidthPx) {\n            this.widthConstrained = true;\n            return this.maxWidthPx;\n        } else if (this.minWidth && newSize <= this.userSetMinWidthPx) {\n            this.widthConstrained = true;\n            return this.userSetMinWidthPx;\n        } else if (!this.minWidth && (!this.widthSetByUser || this.width === 'fit-content') && !this.grid.columnWidthSetByUser && (!newSize || newSize <= this.grid.minColumnWidth)) {\n            return this.grid.minColumnWidth;\n        } else {\n            this.widthConstrained = false;\n            return newSize;\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected cacheCalcWidth(): any {\n        const colWidth = this.width;\n        const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n        const isAutoWidth = colWidth && typeof colWidth === 'string' && colWidth === 'fit-content';\n        if (isPercentageWidth && this.grid.isColumnWidthSum) {\n            this._calcWidth = this.userSetMinWidthPx ? this.userSetMinWidthPx : this.grid.minColumnWidth;\n        } else if (isPercentageWidth) {\n            const currentCalcWidth = parseFloat(colWidth) / 100 * this.grid.calcWidth;\n            this._calcWidth = this.grid.calcWidth ? this.getConstrainedSizePx(currentCalcWidth) : 0;\n        } else if (!colWidth || isAutoWidth && !this.autoSize) {\n            // no width\n            const currentCalcWidth = this.defaultWidth || this.grid.getPossibleColumnWidth();\n            this._calcWidth = this.getConstrainedSizePx(parseFloat(currentCalcWidth));\n        } else {\n            let possibleColumnWidth = '';\n            if (!this.widthSetByUser && this.userSetMinWidthPx && this.userSetMinWidthPx < this.grid.minColumnWidth) {\n                possibleColumnWidth = this.defaultWidth = this.grid.getPossibleColumnWidth();\n            } else {\n                possibleColumnWidth = this.width;\n            }\n\n            const currentCalcWidth = parseFloat(possibleColumnWidth);\n            this._calcWidth = this.getConstrainedSizePx(currentCalcWidth);\n        }\n        this.calcPixelWidth = parseFloat(this._calcWidth);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected setExpandCollapseState() {\n        this.children.filter(col => (col.visibleWhenCollapsed !== undefined)).forEach(c => {\n            if (!this.collapsible) {\n                c.hidden = this.hidden; return;\n            }\n            c.hidden = this._expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed;\n        });\n    }\n    /**\n     * @hidden\n     * @internal\n     */\n    protected checkCollapsibleState() {\n        if (!this.children) {\n            return false;\n        }\n        const cols = this.children.map(child => child.visibleWhenCollapsed);\n        return (cols.some(c => c === true) && cols.some(c => c === false));\n    }\n\n    /**\n     * @hidden\n     */\n    public get pinnable() {\n        return (this.grid as any)._init || !this.pinned;\n    }\n\n    /**\n     * @hidden\n     */\n    public get applySelectableClass(): boolean {\n        return this._applySelectableClass;\n    }\n\n    /**\n     * @hidden\n     */\n    public set applySelectableClass(value: boolean) {\n        if (this.selectable) {\n            this._applySelectableClass = value;\n        }\n    }\n}\n","import {\n    AfterContentInit,\n    Component,\n    ContentChildren,\n    ChangeDetectionStrategy,\n    Input,\n    forwardRef,\n    QueryList,\n    TemplateRef,\n    booleanAttribute\n} from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { IgxColumnComponent } from './column.component';\nimport { ColumnType, flatten } from 'igniteui-angular/core';\nimport { CellType, IgxColumnTemplateContext } from '../common/grid.interface';\n\n/* blazorElement */\n/* omitModule */\n/* wcElementTag: igc-column-group */\n/* additionalIdentifier: Children.Field */\n/* jsonAPIManageCollectionInMarkup */\n/* blazorIndirectRender */\n/**\n * **Ignite UI for Angular Column Group**\n *\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxColumnGroupComponent, IgxRowIslandComponent\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnGroupComponent) }],\n    selector: 'igx-column-group',\n    template: `@if (platform.isElements) {\n        <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group\"></ng-content>\n    }`,\n    styles: `:host { display: none }`,\n    standalone: true\n})\nexport class IgxColumnGroupComponent extends IgxColumnComponent implements AfterContentInit {\n\n    /* blazorInclude */\n    /* contentChildren */\n    /* blazorTreatAsCollection */\n    /* blazorCollectionName: ColumnCollection */\n    /* blazorCollectionItemName: Column */\n    /* alternateType: HTMLCollection */\n    /**\n     * @deprecated in version 18.1.0. Use the `childColumns` property instead.\n     */\n    @ContentChildren(IgxColumnComponent, { read: IgxColumnComponent,  })\n    public override children = new QueryList<IgxColumnComponent>();\n\n    /**\n     * Set if the column group is collapsible.\n     * Default value is `false`\n     * ```html\n     *  <igx-column-group [collapsible] = \"true\"></igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override set collapsible(value: boolean) {\n        this._collapsible = value;\n        this.collapsibleChange.emit(this._collapsible);\n        if (this.children && !this.hidden) {\n            if (this._collapsible) {\n                this.setExpandCollapseState();\n            } else {\n                this.children.forEach(child => child.hidden = false);\n            }\n        }\n    }\n    public override get collapsible() {\n        return this._collapsible && this.checkCollapsibleState();\n    }\n\n    /**\n     * Set whether the group is expanded or collapsed initially.\n     * Applied only if the collapsible property is set to `true`\n     * Default value is `true`\n     * ```html\n     *  const state = false\n     *  <igx-column-group [(expand)] = \"state\"></igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override set expanded(value: boolean) {\n        this._expanded = value;\n        this.expandedChange.emit(this._expanded);\n        if (!this.collapsible) {\n            return;\n        }\n        if (!this.hidden && this.children) {\n            this.setExpandCollapseState();\n        }\n    }\n    public override get expanded() {\n        return this._expanded;\n    }\n\n    /**\n     * Gets the column group `summaries`.\n     * ```typescript\n     * let columnGroupSummaries = this.columnGroup.summaries;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input()\n    public override get summaries(): any {\n        return this._summaries;\n    }\n\n     /* blazorSuppress */\n    /**\n     * Sets the column group `summaries`.\n     * ```typescript\n     * this.columnGroup.summaries = IgxNumberSummaryOperand;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set summaries(classRef: any) { }\n\n     /* blazorSuppress */\n    /**\n     * Sets/gets whether the column group is `searchable`.\n     * Default value is `true`.\n     * ```typescript\n     * let isSearchable =  this.columnGroup.searchable;\n     * ```\n     * ```html\n     *  <igx-column-group [searchable] = \"false\"></igx-column-group>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override searchable = true;\n    /**\n     * Gets the column group `filters`.\n     * ```typescript\n     * let columnGroupFilters = this.columnGroup.filters;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input()\n    public override get filters(): any {\n        return this._filters;\n    }\n\n     /* blazorSuppress */\n    /**\n     * Sets the column group `filters`.\n     * ```typescript\n     * this.columnGroup.filters = IgxStringFilteringOperand;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set filters(classRef: any) { }\n\n    /**\n     * Returns if the column group is selectable\n     * ```typescript\n     * let columnGroupSelectable = this.columnGroup.selectable;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get selectable(): boolean {\n        return this.children && this.children.some(child => child.selectable);\n    }\n\n    /**\n     * @hidden\n     */\n    public override set selectable(value: boolean) { }\n\n    /**\n     * @hidden\n     */\n    public override get bodyTemplate(): TemplateRef<any> {\n        return this._bodyTemplate;\n    }\n    /**\n     * @hidden\n     */\n    public override set bodyTemplate(template: TemplateRef<any>) { }\n\n    /**\n     * Allows you to define a custom template for expand/collapse indicator\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input()\n    public override collapsibleIndicatorTemplate: TemplateRef<IgxColumnTemplateContext>;\n\n    /**\n     * @hidden\n     */\n    public override get inlineEditorTemplate(): TemplateRef<any> {\n        return this._inlineEditorTemplate;\n    }\n    /**\n     * @hidden\n     */\n    public override set inlineEditorTemplate(template: TemplateRef<any>) { }\n    /**\n     * @hidden @internal\n     */\n    public override get cells(): CellType[] {\n        return [];\n    }\n    /**\n     * Gets whether the column group is hidden.\n     * ```typescript\n     * let isHidden = this.columnGroup.hidden;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override get hidden() {\n        return this.allChildren.every(c => c.hidden);\n    }\n\n    /* blazorSuppress */\n    /**\n     * Sets the column group hidden property.\n     * ```html\n     * <igx-column [hidden] = \"true\"></igx-column>\n     * ```\n     *\n     * Two-way data binding\n     * ```html\n     * <igx-column [(hidden)] = \"model.columns[0].isHidden\"></igx-column>\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set hidden(value: boolean) {\n        this._hidden = value;\n        this.hiddenChange.emit(this._hidden);\n        if (this._hidden || !this.collapsible) {\n            this.children.forEach(child => child.hidden = this._hidden);\n        } else {\n            this.children.forEach(c => {\n                if (c.visibleWhenCollapsed === undefined) {\n                    c.hidden = false; return;\n                }\n                c.hidden = this.expanded ? c.visibleWhenCollapsed : !c.visibleWhenCollapsed;\n            });\n        }\n    }\n\n    /**\n     * Returns if the column group is selected.\n     * ```typescript\n     * let isSelected = this.columnGroup.selected;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get selected(): boolean {\n        const selectableChildren = this.allChildren.filter(c => !c.columnGroup && c.selectable && !c.hidden);\n        return selectableChildren.length > 0 && selectableChildren.every(c => c.selected);\n    }\n\n     /* blazorSuppress */\n    /**\n     * Select/deselect the column group.\n     * ```typescript\n     * this.columnGroup.selected = true;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set selected(value: boolean) {\n        if (this.selectable) {\n            this.children.forEach(c => {\n                c.selected = value;\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        /*\n            @ContentChildren with descendants still returns the `parent`\n            component in the query list.\n        */\n        if (this.headTemplate && this.headTemplate.length) {\n            this._headerTemplate = this.headTemplate.toArray()[0].template;\n        }\n        if (this.collapseIndicatorTemplate) {\n            this.collapsibleIndicatorTemplate = this.collapseIndicatorTemplate.template;\n        }\n        // currently only ivy fixes the issue, we have to slice only if the first child is group\n        if (this.children.first === this) {\n            this.children.reset(this.children.toArray().slice(1));\n        }\n        this.children.forEach(child => {\n            child.parent = this;\n            if (this.pinned) {\n                child.pinned = this.pinned;\n            }\n            if (this._hidden) {\n                child.hidden = this._hidden;\n            }\n        });\n        if (this.collapsible) {\n            this.setExpandCollapseState();\n        }\n\n        this.children.changes\n            .pipe(takeUntil(this.destroy$))\n            .subscribe((change: QueryList<IgxColumnComponent>) => {\n                let shouldReinitPinning = false;\n                change.forEach(x => {\n                    x.parent = this;\n                    if (this.pinned && x.pinned !== this.pinned) {\n                        shouldReinitPinning = true;\n                        x.pinned = this.pinned;\n                    }\n                });\n                if (this.collapsible) {\n                    this.setExpandCollapseState();\n                }\n                if (shouldReinitPinning) {\n                    (this.grid as any).initPinning();\n                }\n            });\n\n    }\n\n    /**\n     * A list containing all the child columns under this column (if any).\n     * Empty without children or if this column is not Group or Layout.\n     */\n    public override get childColumns(): ColumnType[] {\n        return this.children.toArray();\n    }\n\n    /** @hidden @internal **/\n    public override get allChildren(): IgxColumnComponent[] {\n        return flatten(this.children.toArray());\n    }\n    /**\n     * Returns a boolean indicating if the column is a `ColumnGroup`.\n     * ```typescript\n     * let isColumnGroup =  this.columnGroup.columnGroup\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get columnGroup() {\n        return true;\n    }\n    /**\n     * Returns a boolean indicating if the column is a `ColumnLayout` for multi-row layout.\n     * ```typescript\n     * let columnGroup =  this.column.columnGroup;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public override get columnLayout() {\n        return false;\n    }\n    /**\n     * Gets the width of the column group.\n     * ```typescript\n     * let columnGroupWidth = this.columnGroup.width;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get width() {\n        const width = `${this.children.reduce((acc, val) => {\n            if (val.hidden) {\n                return acc;\n            }\n            return acc + parseFloat(val.calcWidth);\n        }, 0)}`;\n        return width + 'px';\n    }\n\n     /* blazorSuppress */\n    public override set width(val) { }\n\n    /** @hidden @internal **/\n    public override get resolvedWidth() {\n        return this.width;\n    }\n\n    /**\n     * @hidden\n     */\n    public override get applySelectableClass(): boolean {\n        return this._applySelectableClass;\n    }\n\n    /**\n     * @hidden\n     */\n    public override set applySelectableClass(value: boolean) {\n        if (this.selectable) {\n            this._applySelectableClass = value;\n            this.children.forEach(c => {\n                c.applySelectableClass = value;\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     * Calculates the number of visible columns, based on indexes of first and last visible columns.\n     */\n    public override calcChildren(): number {\n        const visibleChildren = this.allChildren.filter(c => c.visibleIndex > -1);\n        const fi = visibleChildren[0].visibleIndex;\n        const li = visibleChildren[visibleChildren.length - 1].visibleIndex;\n        return li - fi + 1;\n    }\n}\n","import {\n    AfterContentInit,\n    Component,\n    ChangeDetectionStrategy,\n    forwardRef,\n    Input,\n    booleanAttribute\n} from '@angular/core';\nimport { IgxColumnComponent } from './column.component';\nimport { IgxColumnGroupComponent } from './column-group.component';\n\n/* blazorIndirectRender */\n/* blazorElement */\n/* omitModule */\n/* wcElementTag: igc-column-layout */\n/* additionalIdentifier: Children.Field */\n/* jsonAPIManageCollectionInMarkup */\n/**\n * Column layout for declaration of Multi-row Layout\n *\n * @igxParent IgxGridComponent\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: IgxColumnComponent, useExisting: forwardRef(() => IgxColumnLayoutComponent) }],\n    selector: 'igx-column-layout',\n    template: `@if (platform.isElements) {\n        <ng-content select=\"igx-column,igc-column\"></ng-content>\n    }`,\n    styles: `:host { display: none }`,\n    standalone: true\n})\nexport class IgxColumnLayoutComponent extends IgxColumnGroupComponent implements AfterContentInit {\n    /** @hidden @internal **/\n    public childrenVisibleIndexes = [];\n    /**\n     * Gets the width of the column layout.\n     * ```typescript\n     * let columnGroupWidth = this.columnGroup.width;\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override get width(): any {\n        const width = this.getFilledChildColumnSizes(this.children).reduce((acc, val) => acc + parseFloat(val), 0);\n        return width;\n    }\n\n    /* blazorSuppress */\n    public override set width(val: any) { }\n\n    public override get columnLayout() {\n        return true;\n    }\n\n    /**\n     * @hidden\n     */\n    public override getCalcWidth(): any {\n        let borderWidth = 0;\n\n        if (this.headerGroup && this.headerGroup.hasLastPinnedChildColumn) {\n            const headerStyles = this.grid.document.defaultView.getComputedStyle(this.headerGroup.nativeElement.children[0]);\n            borderWidth = parseFloat(headerStyles.borderRightWidth);\n        }\n\n        return super.getCalcWidth() + borderWidth;\n    }\n\n    /**\n     * Gets the column visible index.\n     * If the column is not visible, returns `-1`.\n     * ```typescript\n     * let visibleColumnIndex =  this.column.visibleIndex;\n     * ```\n     *\n     * @memberof IgxColumnComponent\n     */\n    public override get visibleIndex(): number {\n        if (!isNaN(this._vIndex)) {\n            return this._vIndex;\n        }\n\n        const unpinnedColumns = this.grid.unpinnedColumns.filter(c => c.columnLayout && !c.hidden);\n        const pinnedStart = this.grid.pinnedStartColumns.filter(c => c.columnLayout && !c.hidden);\n        const pinnedEndColumns = this.grid.pinnedEndColumns.filter(c => c.columnLayout && !c.hidden);\n        const ordered = pinnedStart.concat(unpinnedColumns, pinnedEndColumns);\n        const vIndex = ordered.indexOf(this);\n        this._vIndex = vIndex;\n        return vIndex;\n    }\n\n    /*\n     * Gets whether the column layout is hidden.\n     * ```typescript\n     * let isHidden = this.columnGroup.hidden;\n     * ```\n     * @memberof IgxColumnGroupComponent\n     */\n    @Input({ transform: booleanAttribute })\n    public override get hidden() {\n        return this._hidden;\n    }\n\n     /* blazorSuppress */\n    /**\n     * Sets the column layout hidden property.\n     * ```typescript\n     * <igx-column-layout [hidden] = \"true\"></igx-column->\n     * ```\n     *\n     * @memberof IgxColumnGroupComponent\n     */\n    public override set hidden(value: boolean) {\n        this._hidden = value;\n        this.children.forEach(child => child.hidden = value);\n        if (this.grid && this.grid.columns && this.grid.columns.length > 0) {\n            // reset indexes in case columns are hidden/shown runtime\n            const columns = this.grid && this.grid.pinnedColumns && this.grid.unpinnedColumns ?\n                this.grid.pinnedColumns.concat(this.grid.unpinnedColumns) : [];\n            if (!this._hidden && !columns.find(c => c.field === this.field)) {\n                this.grid.resetColumnCollections();\n            }\n            this.grid.columns.filter(x => x.columnLayout).forEach(x => x.populateVisibleIndexes());\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public override ngAfterContentInit() {\n        super.ngAfterContentInit();\n        if (!this.hidden) {\n            this.hidden = this.allChildren.some(x => x.hidden);\n        } else {\n            this.children.forEach(child => child.hidden = this.hidden);\n        }\n    }\n\n    /** @hidden @internal **/\n    public get hasLastPinnedChildColumn() {\n        return this.children.some(child => child.isLastPinned);\n    }\n\n    /** @hidden @internal **/\n    public get hasFirstPinnedChildColumn() {\n        return this.children.some(child => child.isFirstPinned);\n    }\n\n    /**\n     * @hidden\n     */\n    public override populateVisibleIndexes() {\n        this.childrenVisibleIndexes = [];\n        const columns = this.grid?.pinnedColumns && this.grid?.unpinnedColumns\n            ? this.grid.pinnedStartColumns.concat(this.grid.unpinnedColumns, this.grid.pinnedEndColumns)\n            : [];\n        const orderedCols = columns\n            .filter(x => !x.columnGroup && !x.hidden)\n            .sort((a, b) => a.rowStart - b.rowStart || columns.indexOf(a.parent) - columns.indexOf(b.parent) || a.colStart - b.colStart);\n        this.children.forEach(child => {\n            const rs = child.rowStart || 1;\n            let vIndex = 0;\n            // filter out all cols with larger rowStart\n            const cols = orderedCols.filter(c =>\n                !c.columnGroup && (c.rowStart || 1) <= rs);\n            vIndex = cols.indexOf(child);\n            this.childrenVisibleIndexes.push({ column: child, index: vIndex });\n        });\n    }\n}\n","// import { IgxColumnGroupComponent } from './column-group.component';\n// import { IgxColumnLayoutComponent } from './column-layout.component';\n// import { IgxColumnComponent } from './column.component';\n// import {\n//     IgxCellEditorTemplateDirective,\n//     IgxCellFooterTemplateDirective,\n//     IgxCellHeaderTemplateDirective,\n//     IgxCellTemplateDirective,\n//     IgxCellValidationErrorDirective,\n//     IgxCollapsibleIndicatorTemplateDirective,\n//     IgxFilterCellTemplateDirective,\n//     IgxSummaryTemplateDirective\n// } from './templates.directive';\nimport {\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnPatternValidatorDirective\n} from './validators.directive';\n\nexport * from './column.component';\nexport * from './column-group.component';\nexport * from './column-layout.component';\nexport * from './templates.directive';\nexport * from './validators.directive';\n\n/* NOTE: Grid column validation directives collection for ease-of-use import in standalone components scenario */\nexport const IGX_GRID_VALIDATION_DIRECTIVES = [\n    IgxColumnRequiredValidatorDirective,\n    IgxColumnMinValidatorDirective,\n    IgxColumnMaxValidatorDirective,\n    IgxColumnEmailValidatorDirective,\n    IgxColumnMinLengthValidatorDirective,\n    IgxColumnMaxLengthValidatorDirective,\n    IgxColumnPatternValidatorDirective\n] as const;\n\n/* NOTE: Grid column validation directives collection for ease-of-use import in standalone components scenario */\n// export const 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// ] as const;\n","import { Component, Input, ViewChild, ChangeDetectorRef, AfterViewInit, OnDestroy, HostBinding, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IActiveNode } from '../../grid-navigation.service';\nimport { GridType } from '../../common/grid.interface';\nimport { NgClass } from '@angular/common';\nimport { IDragStartEventArgs, IgxButtonDirective, IgxDragDirective, IgxDragHandleDirective } from 'igniteui-angular/directives';\nimport { IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent } from 'igniteui-angular/query-builder';\nimport {\n    EntityType,\n    FieldType,\n    getCurrentResourceStrings,\n    onResourceChangeHandle,\n    GridResourceStringsEN,\n    IFilteringExpressionsTree,\n    IgxOverlayService,\n    PlatformUtil,\n    IQueryBuilderResourceStrings,\n    QueryBuilderResourceStringsEN\n} from 'igniteui-angular/core';\n\n/**\n * A component used for presenting advanced filtering UI for a Grid.\n * It is used internally in the Grid, but could also be hosted in a container outside of it.\n *\n * Example:\n * ```html\n * <igx-advanced-filtering-dialog\n *     [grid]=\"grid1\">\n * </igx-advanced-filtering-dialog>\n * ```\n */\n@Component({\n    selector: 'igx-advanced-filtering-dialog',\n    templateUrl: './advanced-filtering-dialog.component.html',\n    imports: [IgxDragDirective, NgClass, IgxQueryBuilderComponent, IgxQueryBuilderHeaderComponent, IgxDragHandleDirective, IgxButtonDirective]\n})\nexport class IgxAdvancedFilteringDialogComponent implements AfterViewInit, OnDestroy {\n    public cdr = inject(ChangeDetectorRef);\n    protected platform = inject(PlatformUtil);\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('queryBuilder', { read: IgxQueryBuilderComponent })\n    public queryBuilder: IgxQueryBuilderComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('style.display')\n    public display = 'block';\n\n    /**\n     * @hidden @internal\n     */\n    public inline = true;\n\n    /**\n     * @hidden @internal\n     */\n    public lastActiveNode = {} as IActiveNode;\n\n    /**\n     * @hidden @internal\n     */\n    public queryBuilderResourceStrings: IQueryBuilderResourceStrings;\n\n    private destroy$ = new Subject<any>();\n    private _overlayComponentId: string;\n    private _overlayService: IgxOverlayService;\n    private _grid: GridType;\n\n    constructor() {\n        onResourceChangeHandle(this.destroy$, () => {\n            this.assignResourceStrings(false);\n        }, this);\n    }\n    /**\n     * @hidden @internal\n     */\n    public ngAfterViewInit(): void {\n        this.queryBuilder.setPickerOutlet(this.grid.outlet);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * Assigns the grid instance corresponding to the advanced filtering dialog instance.\n     */\n    @Input()\n    public set grid(grid: GridType) {\n        this._grid = grid;\n\n        if (this._grid) {\n            this._grid.filteringService.registerSVGIcons();\n        }\n\n        this.assignResourceStrings();\n    }\n\n    /**\n     * Returns the grid.\n     */\n    public get grid(): GridType {\n        return this._grid;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get filterableFields(): FieldType[] {\n        return this.grid.columns.filter((column) => !column.columnGroup && column.filterable)\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public dragStart(dragArgs: IDragStartEventArgs) {\n        if (!this._overlayComponentId) {\n            dragArgs.cancel = true;\n            return;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onDragMove(e) {\n        const deltaX = e.nextPageX - e.pageX;\n        const deltaY = e.nextPageY - e.pageY;\n        e.cancel = true;\n        this._overlayService.setOffset(this._overlayComponentId, deltaX, deltaY);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        eventArgs.stopPropagation();\n        const key = eventArgs.key;\n        if (key === this.platform.KEYMAP.ESCAPE) {\n            this.closeDialog();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public initialize(grid: GridType, overlayService: IgxOverlayService,\n        overlayComponentId: string) {\n        this.inline = false;\n        this.grid = grid;\n        this._overlayService = overlayService;\n        this._overlayComponentId = overlayComponentId;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onClearButtonClick(event?: Event) {\n        this.grid.crudService.endEdit(false, event);\n        this.queryBuilder.expressionTree = this.grid.advancedFilteringExpressionsTree = null;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public closeDialog() {\n        if (this._overlayComponentId) {\n            this._overlayService.hide(this._overlayComponentId);\n        }\n        this.grid.navigation.activeNode = this.lastActiveNode;\n        if (this.grid.navigation.activeNode && this.grid.navigation.activeNode.row === -1) {\n            (this.grid as any).theadRow.nativeElement.focus();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public applyChanges(event?: Event) {\n        this.grid.crudService.endEdit(false, event);\n        this.queryBuilder.exitOperandEdit();\n        this.grid.advancedFilteringExpressionsTree = this.queryBuilder.expressionTree as IFilteringExpressionsTree;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancelChanges() {\n        this.closeDialog();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onApplyButtonClick(event?: Event) {\n        this.applyChanges(event);\n        this.closeDialog();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public generateEntity() {\n        if (this.queryBuilder?.entities) {\n            return this.queryBuilder?.entities;\n        } else if (this.grid.type === 'hierarchical') {\n            return this.grid.schema;\n        } else {\n            const entities: EntityType[] = [\n                {\n                    name: null,\n                    fields: this.filterableFields.map(f => ({\n                            field: f.field,\n                            dataType: f.dataType,\n                            label: f.label,\n                            header: f.header,\n                            editorOptions: f.editorOptions,\n                            filters: f.filters,\n                            pipeArgs: f.pipeArgs,\n                            defaultTimeFormat: f.defaultTimeFormat,\n                            defaultDateTimeFormat: f.defaultDateTimeFormat\n                        })) as FieldType[]\n                }\n            ];\n            return entities;\n        }\n    }\n\n    private assignResourceStrings(init = true) {\n        // If grid has custom resource strings set for the advanced filtering,\n        // they are passed to the query builder resource strings.\n        const gridRS = this.grid.resourceStrings;\n        if (gridRS !== GridResourceStringsEN) {\n            const queryBuilderRS = getCurrentResourceStrings(QueryBuilderResourceStringsEN, init);\n            Object.keys(gridRS).forEach((prop) => {\n                const reg = /^igx_grid_(advanced_)?filter_(row_)?/;\n                if (!reg.test(prop)) {\n                    return;\n                }\n                const affix = prop.replace(reg, '');\n                const filterProp = `igx_query_builder_filter_${affix}`;\n                const generalProp = `igx_query_builder_${affix}`\n                if (queryBuilderRS[filterProp] !== undefined) {\n                    queryBuilderRS[filterProp] = gridRS[prop];\n                } else if (queryBuilderRS[generalProp] !== undefined) {\n                    queryBuilderRS[generalProp] = gridRS[prop];\n                }\n            });\n\n            this.queryBuilderResourceStrings = queryBuilderRS;\n        }\n    }\n}\n","@if (grid) {\n    <article class=\"igx-advanced-filter\" igxDrag [ghost]=\"false\" [dragTolerance]=\"0\"\n        (dragStart)=\"dragStart($event)\" (dragMove)=\"onDragMove($event)\" (keydown)=\"onKeyDown($event)\"\n        [ngClass]=\"{\n            'igx-advanced-filter': true,\n            'igx-advanced-filter--inline': inline\n        }\">\n        <igx-query-builder #queryBuilder\n            [locale]=\"grid.locale\"\n            [entities]=\"generateEntity()\"\n            [resourceStrings]=\"queryBuilderResourceStrings\"\n            [expressionTree]=\"this.grid.advancedFilteringExpressionsTree\">\n            <igx-query-builder-header\n                [title]=\"grid.resourceStrings.igx_grid_advanced_filter_title\"\n                igxDragHandle>\n            </igx-query-builder-header>\n        </igx-query-builder>\n\n        <footer class=\"igx-excel-filter__secondary-footer\">\n            <div class=\"igx-excel-filter__clear\">\n                <button igxButton=\"flat\" type=\"button\"\n                    (click)=\"onClearButtonClick($event)\">\n                    {{ grid.resourceStrings.igx_grid_excel_custom_dialog_clear }}\n                </button>\n            </div>\n            <div class=\"igx-excel-filter__cancel\">\n                <button igxButton=\"outlined\" type=\"button\" (click)=\"cancelChanges()\">\n                    {{ grid.resourceStrings.igx_grid_excel_cancel }}\n                </button>\n            </div>\n            <div class=\"igx-excel-filter__apply\">\n                <button igxButton=\"contained\" type=\"button\"\n                    (click)=\"onApplyButtonClick($event)\">\n                    {{ grid.resourceStrings.igx_grid_excel_apply }}\n                </button>\n            </div>\n        </footer>\n    </article>\n}\n","import { ChangeDetectorRef, Directive, ElementRef, EventEmitter, inject } from '@angular/core';\nimport { ExpressionUI, FilterListItem } from './common';\nimport { IgxOverlayService, PlatformUtil } from 'igniteui-angular/core';\n\n\n\n@Directive()\nexport abstract class BaseFilteringComponent {\n    protected cdr = inject(ChangeDetectorRef);\n    public element = inject(ElementRef<HTMLElement>);\n    protected platform = inject(PlatformUtil);\n\n\n    public abstract column: any;\n    public abstract get grid(): any;\n\n    public abstract overlayComponentId: string;\n    public abstract mainDropdown: ElementRef<HTMLElement>;\n    public abstract expressionsList: ExpressionUI[];\n    public abstract listData: FilterListItem[];\n    public abstract isHierarchical: boolean;\n\n    public abstract loadingStart: EventEmitter<undefined>;\n    public abstract loadingEnd: EventEmitter<undefined>;\n    public abstract initialized: EventEmitter<undefined>;\n    public abstract columnChange: EventEmitter<any>;\n    public abstract sortingChanged: EventEmitter<undefined>;\n    public abstract listDataLoaded: EventEmitter<undefined>;\n    public abstract filterCleared: EventEmitter<undefined>;\n\n    public abstract initialize(column: any, overlayService: IgxOverlayService): void;\n    public abstract detectChanges(): void;\n    public abstract hide(): void;\n    public abstract closeDropdown(): void;\n    public abstract onSelect(): void;\n    public abstract onPin(): void;\n    public abstract onHideToggle(): void;\n    public abstract cancel(): void;\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { NgClass } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { PlatformUtil } from 'igniteui-angular/core';\n\n/**\n * A component used for presenting Excel style clear filters UI.\n */\n@Component({\n    selector: 'igx-excel-style-clear-filters',\n    templateUrl: './excel-style-clear-filters.component.html',\n    imports: [NgClass, IgxIconComponent]\n})\nexport class IgxExcelStyleClearFiltersComponent {\n    public esf = inject(BaseFilteringComponent);\n    protected platform = inject(PlatformUtil);\n\n\n    /**\n     * @hidden @internal\n     */\n    public clearFilterClass() {\n        if (this.esf.column.filteringExpressionsTree) {\n            return 'igx-excel-filter__actions-clear';\n        }\n\n        return 'igx-excel-filter__actions-clear--disabled';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public clearFilter() {\n        this.esf.grid.filteringService.clearFilter(this.esf.column.field);\n        this.esf.filterCleared.emit();\n        this.selectAllFilterItems();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onClearFilterKeyDown(eventArgs: KeyboardEvent) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            this.clearFilter();\n        }\n    }\n\n    private selectAllFilterItems() {\n        this.esf.listData.forEach(filterListItem => {\n            filterListItem.isSelected = true;\n            filterListItem.indeterminate = false;\n        });\n        this.esf.detectChanges();\n    }\n}\n","@if (esf.column) {\n    <div\n        tabindex=\"0\"\n        [ngClass]=\"clearFilterClass()\"\n        (keydown)=\"onClearFilterKeyDown($event)\"\n        (click)=\"clearFilter()\"\n        role=\"menuitem\"\n        [attr.aria-disabled]=\"!this.esf.column.filteringExpressionsTree\">\n        <span>{{ esf.grid.resourceStrings.igx_grid_excel_filter_clear }}</span>\n        <igx-icon family=\"default\" name=\"cancel\"></igx-icon>\n    </div>\n}\n","import { Component, AfterViewInit, Input, Output, EventEmitter, ChangeDetectorRef, ViewChild, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { ExpressionUI } from './common';\nimport { AbsoluteScrollStrategy, ColumnType, ConnectedPositioningStrategy, DataUtil, FilteringLogic, GridColumnDataType, IBaseEventArgs, IFilteringOperation, IgxOverlayOutletDirective, OverlaySettings, PlatformUtil } from 'igniteui-angular/core';\nimport { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective } from 'igniteui-angular/input-group';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxButtonDirective, IgxIconButtonDirective } from 'igniteui-angular/directives';\nimport { IgxButtonGroupComponent } from 'igniteui-angular/button-group';\n\n/**\n * @hidden\n */\nexport interface ILogicOperatorChangedArgs extends IBaseEventArgs {\n    target: ExpressionUI;\n    newValue: FilteringLogic;\n}\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-excel-style-default-expression',\n    templateUrl: './excel-style-default-expression.component.html',\n    imports: [FormsModule, IgxSelectComponent, IgxPrefixDirective, IgxIconComponent, IgxSelectItemComponent, IgxInputGroupComponent, IgxInputDirective, IgxButtonDirective, IgxButtonGroupComponent, IgxOverlayOutletDirective, IgxIconButtonDirective]\n})\nexport class IgxExcelStyleDefaultExpressionComponent implements AfterViewInit {\n    public cdr = inject(ChangeDetectorRef);\n    protected platform = inject(PlatformUtil);\n\n    @Input()\n    public column: ColumnType;\n\n    @Input()\n    public expressionUI: ExpressionUI;\n\n    @Input()\n    public expressionsList: Array<ExpressionUI>;\n\n    @Input()\n    public grid: any;\n\n    @Output()\n    public expressionRemoved = new EventEmitter<ExpressionUI>();\n\n    @Output()\n    public logicOperatorChanged = new EventEmitter<ILogicOperatorChangedArgs>();\n\n    @ViewChild('overlayOutlet', { read: IgxOverlayOutletDirective, static: true })\n    public overlayOutlet: IgxOverlayOutletDirective;\n\n    @ViewChild('dropdownConditions', { read: IgxSelectComponent, static: true })\n    protected dropdownConditions: IgxSelectComponent;\n\n    @ViewChild('logicOperatorButtonGroup', { read: IgxButtonGroupComponent })\n    protected logicOperatorButtonGroup: IgxButtonGroupComponent;\n\n    @ViewChild('inputValues', { read: IgxInputDirective, static: true })\n    protected inputValuesDirective: IgxInputDirective;\n\n    public dropDownOverlaySettings: OverlaySettings = {\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnOutsideClick: true\n    };\n\n    public get isLast(): boolean {\n        return this.expressionsList[this.expressionsList.length - 1] === this.expressionUI;\n    }\n\n    public get isSingle(): boolean {\n        return this.expressionsList.length === 1;\n    }\n\n    public get conditionsPlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_condition_placeholder'];\n    }\n\n    public get inputValuePlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_row_placeholder'];\n    }\n\n    public get type() {\n        switch (this.column.dataType) {\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n            case GridColumnDataType.Percent:\n                return 'number';\n            default:\n                return 'text';\n        }\n    }\n\n    public get conditions() {\n        return this.column.filters.conditionList();\n    }\n\n    protected get inputValuesElement() {\n        return this.inputValuesDirective.nativeElement;\n    }\n\n    public ngAfterViewInit(): void {\n        this.dropDownOverlaySettings.outlet = this.overlayOutlet;\n        this.dropDownOverlaySettings.target = this.dropdownConditions.inputGroup.element.nativeElement;\n        this.dropDownOverlaySettings.excludeFromOutsideClick = [this.dropdownConditions.inputGroup.element.nativeElement as HTMLElement];\n        this.dropDownOverlaySettings.positionStrategy = new ConnectedPositioningStrategy();\n    }\n\n    public focus() {\n        // use requestAnimationFrame to focus the values input because when initializing the component\n        // datepicker's input group is not yet fully initialized\n        requestAnimationFrame(() => this.inputValuesElement.focus());\n    }\n\n    public translateCondition(value: string): string {\n        return this.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n    }\n\n    public getIconName(): string {\n        if (this.column.dataType === GridColumnDataType.Boolean && this.expressionUI.expression.condition === null) {\n            return this.getCondition(this.conditions[0]).iconName;\n        } else if (!this.expressionUI.expression.condition) {\n            return 'filter_list';\n        } else {\n            return this.expressionUI.expression.condition.iconName;\n        }\n    }\n\n    public isConditionSelected(conditionName: string): boolean {\n        return this.expressionUI.expression.condition && this.expressionUI.expression.condition.name === conditionName;\n    }\n\n    public onConditionsChanged(eventArgs: any) {\n        const value = (eventArgs.newSelection as IgxSelectComponent).value;\n        this.expressionUI.expression.condition = this.getCondition(value);\n        this.expressionUI.expression.conditionName = value;\n\n        this.focus();\n    }\n\n    public getCondition(value: string): IFilteringOperation {\n        return this.column.filters.condition(value);\n    }\n\n    public getConditionFriendlyName(name: string): string {\n        return this.grid.resourceStrings[`igx_grid_filter_${name}`] || name;\n    }\n\n    public updateSearchValueOnBlur(eventArgs) {\n        this.expressionUI.expression.searchVal = DataUtil.parseValue(this.column.dataType, eventArgs.target.value);\n    }\n\n    public onLogicOperatorButtonClicked(eventArgs, buttonIndex: number) {\n        if (this.logicOperatorButtonGroup.selectedButtons.length === 0) {\n            eventArgs.stopPropagation();\n            this.logicOperatorButtonGroup.selectButton(buttonIndex);\n        } else {\n            this.logicOperatorChanged.emit({\n                target: this.expressionUI,\n                newValue: buttonIndex as FilteringLogic\n            });\n        }\n    }\n\n    public onLogicOperatorKeyDown(eventArgs: KeyboardEvent, buttonIndex: number) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            this.logicOperatorButtonGroup.selectButton(buttonIndex);\n            this.logicOperatorChanged.emit({\n                target: this.expressionUI,\n                newValue: buttonIndex as FilteringLogic\n            });\n        }\n    }\n\n    public onRemoveButtonClick() {\n        this.expressionRemoved.emit(this.expressionUI);\n    }\n\n    public onOutletPointerDown(event) {\n        event.preventDefault();\n    }\n}\n","<igx-select #dropdownConditions\n        type=\"box\"\n        [placeholder]=\"conditionsPlaceholder\"\n        (selectionChanging)=\"onConditionsChanged($event)\"\n        [overlaySettings]=\"dropDownOverlaySettings\">\n    <igx-prefix>\n        @if (expressionUI.expression.condition) {\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        }\n        @if (!expressionUI.expression.condition) {\n            <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n        }\n    </igx-prefix>\n    @for (condition of conditions; track condition) {\n        <igx-select-item [value]=\"condition\" [text]=\"getConditionFriendlyName(condition)\" [selected]=\"isConditionSelected(condition)\">\n            <div class=\"igx-grid__filtering-dropdown-items\">\n                <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n                <span class=\"igx-grid__filtering-dropdown-text\">{{translateCondition(condition)}}</span>\n            </div>\n        </igx-select-item>\n    }\n</igx-select>\n\n<igx-input-group #inputGroupValues type=\"box\">\n    <input\n        #inputValues\n        igxInput\n        [type]=\"type\"\n        tabindex=\"0\"\n        [placeholder]=\"inputValuePlaceholder\"\n        [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n        autocomplete=\"off\"\n        [(ngModel)]=\"expressionUI.expression.searchVal\"\n        (blur)=\"updateSearchValueOnBlur($event)\"\n    />\n</igx-input-group>\n\n@if (!isSingle) {\n    <button type=\"button\" (click)=\"onRemoveButtonClick()\" igxIconButton=\"flat\">\n        <igx-icon family=\"default\" name=\"remove\"></igx-icon>\n    </button>\n}\n\n@if (!isLast) {\n    <igx-buttongroup #logicOperatorButtonGroup>\n        <span igxButton\n            tabindex=\"0\"\n            #andButton\n            (keydown)=\"onLogicOperatorKeyDown($event, 0)\"\n            [selected]=\"expressionUI.afterOperator === 0\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 0)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_and }}\n        </span>\n        <span igxButton\n            tabindex=\"0\"\n            #orButton\n            (keydown)=\"onLogicOperatorKeyDown($event, 1)\"\n            [selected]=\"expressionUI.afterOperator === 1\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 1)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_or }}\n        </span>\n    </igx-buttongroup>\n}\n\n<div #overlayOutlet\n     igxOverlayOutlet\n     (pointerdown)=\"onOutletPointerDown($event)\">\n</div>\n","import { Component, inject, Input, ViewChild } from '@angular/core';\nimport { IgxExcelStyleDefaultExpressionComponent } from './excel-style-default-expression.component';\nimport { FormsModule } from '@angular/forms';\nimport { IgxSelectComponent, IgxSelectItemComponent } from 'igniteui-angular/select';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective } from 'igniteui-angular/input-group';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\nimport { IgxOverlayOutletDirective, IgxPickerClearComponent, IgxPickerToggleComponent, I18N_FORMATTER } from 'igniteui-angular/core';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\nimport { IgxButtonDirective, IgxDateTimeEditorDirective, IgxIconButtonDirective } from 'igniteui-angular/directives';\nimport { IgxButtonGroupComponent } from 'igniteui-angular/button-group';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-excel-style-date-expression',\n    templateUrl: './excel-style-date-expression.component.html',\n    imports: [IgxSelectComponent, IgxPrefixDirective, IgxIconComponent, IgxSelectItemComponent, IgxDatePickerComponent, IgxPickerToggleComponent, IgxPickerClearComponent, IgxTimePickerComponent, IgxInputGroupComponent, FormsModule, IgxInputDirective, IgxDateTimeEditorDirective, IgxButtonDirective, IgxButtonGroupComponent, IgxOverlayOutletDirective, IgxIconButtonDirective]\n})\nexport class IgxExcelStyleDateExpressionComponent extends IgxExcelStyleDefaultExpressionComponent {\n    protected i18nFormatter = inject(I18N_FORMATTER);\n\n    @ViewChild('input', { read: IgxInputDirective, static: false })\n    private input: IgxInputDirective;\n\n    @ViewChild('picker')\n    private picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n    @Input()\n    public get searchVal(): any {\n        return this.expressionUI.expression.searchVal;\n    }\n\n    public set searchVal(value: any) {\n        this.expressionUI.expression.searchVal = value ? new Date(Date.parse(value.toString())) : null;\n    }\n\n    protected override get inputValuesElement() {\n        return this.picker?.getEditElement() || this.input?.nativeElement;\n    }\n\n    public get inputDatePlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_row_date_placeholder'];\n    }\n\n    public get inputTimePlaceholder(): string {\n        return this.grid.resourceStrings['igx_grid_filter_row_time_placeholder'];\n    }\n\n    public get weekStart(): number {\n        return this.i18nFormatter.getLocaleFirstDayOfWeek(this.grid.locale);\n    }\n}\n","<igx-select #dropdownConditions\n        type=\"box\"\n        [placeholder]=\"conditionsPlaceholder\"\n        (selectionChanging)=\"onConditionsChanged($event)\"\n        [overlaySettings]=\"dropDownOverlaySettings\">\n    <igx-prefix>\n        @if (expressionUI.expression.condition) {\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        }\n        @if (!expressionUI.expression.condition) {\n            <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n        }\n    </igx-prefix>\n    @for (condition of conditions; track condition) {\n        <igx-select-item [value]=\"condition\" [text]=\"getConditionFriendlyName(condition)\" [selected]=\"isConditionSelected(condition)\">\n            <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n            <span>{{translateCondition(condition)}}</span>\n        </igx-select-item>\n    }\n</igx-select>\n\n@if (column.dataType === 'date') {\n    <igx-date-picker #picker\n        [weekStart]=\"column.pipeArgs.weekStart ?? weekStart\"\n        [(ngModel)]=\"searchVal\"\n        [locale]=\"grid.locale\"\n        [outlet]=\"grid.outlet\"\n        (click)=\"picker.open()\"\n        [placeholder]=\"inputDatePlaceholder\"\n        [formatter]=\"column.formatter\"\n        [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n        type=\"box\"\n    >\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-date-picker>\n}\n\n@if (column.dataType === 'time') {\n    <igx-time-picker #picker\n        [(ngModel)]=\"searchVal\"\n        [locale]=\"grid.locale\"\n        [outlet]=\"grid.outlet\"\n        (click)=\"picker.open()\"\n        [placeholder]=\"inputTimePlaceholder\"\n        [displayFormat]=\"column.pipeArgs.format\"\n        [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n        [formatter]=\"column.formatter\"\n        [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"\n        type=\"box\"\n    >\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-time-picker>\n}\n\n@if (column.dataType === 'dateTime') {\n    <igx-input-group #dropDownTarget #inputGroup type=\"box\">\n        <input #input igxInput tabindex=\"0\"\n            [placeholder]=\"inputDatePlaceholder\"\n            [locale]=\"column.grid.locale\"\n            [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n            [defaultFormatType]=\"column.dataType\"\n            [displayFormat]=\"column.pipeArgs.format\"\n            [(ngModel)]=\"searchVal\"\n            [disabled]=\"expressionUI.expression.condition && expressionUI.expression.condition.isUnary\"/>\n    </igx-input-group>\n}\n\n@if (!isSingle) {\n    <button type=\"button\" (click)=\"onRemoveButtonClick()\" igxIconButton=\"flat\" >\n        <igx-icon family=\"default\" name=\"remove\"></igx-icon>\n    </button>\n}\n\n@if (!isLast) {\n    <igx-buttongroup #logicOperatorButtonGroup>\n        <span igxButton\n            #andButton\n            (keydown)=\"onLogicOperatorKeyDown($event, 0)\"\n            tabindex=\"0\"\n            [selected]=\"expressionUI.afterOperator === 0\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 0)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_and }}\n        </span>\n        <span igxButton\n            #orButton\n            tabindex=\"0\"\n            (keydown)=\"onLogicOperatorKeyDown($event, 1)\"\n            [selected]=\"expressionUI.afterOperator === 1\"\n            type=\"button\"\n            (click)=\"onLogicOperatorButtonClicked($event, 1)\">\n            {{ grid.resourceStrings.igx_grid_filter_operator_or }}\n        </span>\n    </igx-buttongroup>\n}\n\n<div #overlayOutlet\n     igxOverlayOutlet\n     (pointerdown)=\"onOutletPointerDown($event)\">\n</div>\n","/**\n * Use the function to get a random UUID string when secure context is not guaranteed making crypto.randomUUID unavailable.\n * @returns A random UUID string.\n */\nexport function getUUID(): `${string}-${string}-${string}-${string}-${string}` {\n    if (typeof crypto.randomUUID === 'function') {\n        return crypto.randomUUID();\n    }\n    // Secure fallback using crypto.getRandomValues()\n    const bytes = new Uint8Array(16);\n    crypto.getRandomValues(bytes);\n\n    // Set version (4) and variant (RFC 4122)\n    bytes[6] = (bytes[6] & 0x0f) | 0x40; // Version 4\n    bytes[8] = (bytes[8] & 0x3f) | 0x80; // Variant 1\n\n    const a = [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');\n    return `${a.slice(0, 8)}-${a.slice(8, 12)}-${a.slice(12, 16)}-${a.slice(16, 20)}-${a.slice(20)}`;\n}\n","import { FilteringLogic, IFilteringExpression, IFilteringExpressionsTree, isTree } from 'igniteui-angular/core';\nimport { getUUID } from '../../common/random';\n\n/**\n * @hidden @internal\n */\nexport class FilterListItem {\n    public value: any;\n    public label: any;\n    public isSelected: boolean;\n    public indeterminate: boolean;\n    public isFiltered: boolean;\n    public isSpecial = false;\n    public isBlanks = false;\n    public children?: Array<FilterListItem>;\n    public parent?: FilterListItem;\n}\n\n/**\n * @hidden\n */\nexport class ExpressionUI {\n    public expressionId: string;\n    public expression: IFilteringExpression;\n    public beforeOperator: FilteringLogic;\n    public afterOperator: FilteringLogic;\n    public isSelected = false;\n    public isVisible = true;\n\n    constructor() {\n        // Use IDs to identify expressions clearly and use to track them in template @for cycles.\n        this.expressionId = getUUID();\n    }\n}\n\n/**\n * @hidden @internal\n */\nexport class ActiveElement {\n    public index: number;\n    public id: string;\n    public checked: boolean;\n}\n\nexport function generateExpressionsList(expressions: IFilteringExpressionsTree | IFilteringExpression,\n    operator: FilteringLogic,\n    expressionsUIs: ExpressionUI[]): void {\n    generateExpressionsListRecursive(expressions, operator, expressionsUIs);\n\n    // The beforeOperator of the first expression and the afterOperator of the last expression should be null\n    if (expressionsUIs.length) {\n        expressionsUIs[expressionsUIs.length - 1].afterOperator = null;\n    }\n}\n\n\nfunction generateExpressionsListRecursive(expressions: IFilteringExpressionsTree | IFilteringExpression,\n    operator: FilteringLogic,\n    expressionsUIs: ExpressionUI[]): void {\n    if (!expressions) {\n        return;\n    }\n\n    if (isTree(expressions)) {\n        for (const operand of expressions.filteringOperands) {\n            generateExpressionsListRecursive(operand, expressions.operator, expressionsUIs);\n        }\n        if (expressionsUIs.length) {\n            expressionsUIs[expressionsUIs.length - 1].afterOperator = operator;\n        }\n    } else {\n        const exprUI = new ExpressionUI();\n        exprUI.expression = expressions;\n        exprUI.afterOperator = operator;\n\n        const prevExprUI = expressionsUIs[expressionsUIs.length - 1];\n        if (prevExprUI) {\n            exprUI.beforeOperator = prevExprUI.afterOperator;\n        }\n\n        expressionsUIs.push(exprUI);\n    }\n}\n","import { Component, Input, ChangeDetectorRef, ViewChild, AfterViewInit, TemplateRef, ViewChildren, QueryList, ElementRef, inject } from '@angular/core';\nimport { IgxFilteringService } from '../grid-filtering.service';\nimport { ILogicOperatorChangedArgs, IgxExcelStyleDefaultExpressionComponent } from './excel-style-default-expression.component';\nimport { IgxExcelStyleDateExpressionComponent } from './excel-style-date-expression.component';\nimport { ExpressionUI } from './common';\nimport { NgClass } from '@angular/common';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxButtonDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { AbsoluteScrollStrategy, AutoPositionStrategy, ColumnType, FilteringLogic, GridColumnDataType, HorizontalAlignment, IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxDateTimeFilteringOperand, IgxNumberFilteringOperand, IgxOverlayService, IgxStringFilteringOperand, IgxTimeFilteringOperand, OverlaySettings, PlatformUtil, PositionSettings, VerticalAlignment } from 'igniteui-angular/core';\n\n/**\n * @hidden\n */\n@Component({\n    selector: 'igx-excel-style-custom-dialog',\n    templateUrl: './excel-style-custom-dialog.component.html',\n    imports: [IgxToggleDirective, NgClass, IgxExcelStyleDateExpressionComponent, IgxExcelStyleDefaultExpressionComponent, IgxButtonDirective, IgxIconComponent]\n})\nexport class IgxExcelStyleCustomDialogComponent implements AfterViewInit {\n    protected overlayService = inject(IgxOverlayService);\n    private cdr = inject(ChangeDetectorRef);\n    protected platform = inject(PlatformUtil);\n    public esf = inject(BaseFilteringComponent);\n\n    @Input()\n    public expressionsList = new Array<ExpressionUI>();\n\n    @Input()\n    public column: ColumnType;\n\n    @Input()\n    public selectedOperator: string;\n\n    @Input()\n    public filteringService: IgxFilteringService;\n\n    @Input()\n    public overlayComponentId: string;\n\n    @ViewChild('toggle', { read: IgxToggleDirective, static: true })\n    public toggle: IgxToggleDirective;\n\n    @ViewChild('defaultExpressionTemplate', { read: TemplateRef })\n    protected defaultExpressionTemplate: TemplateRef<any>;\n\n    @ViewChild('dateExpressionTemplate', { read: TemplateRef })\n    protected dateExpressionTemplate: TemplateRef<any>;\n\n    @ViewChild('expressionsContainer', { static: true })\n    protected expressionsContainer: ElementRef;\n\n    @ViewChildren(IgxExcelStyleDefaultExpressionComponent)\n    private expressionComponents: QueryList<IgxExcelStyleDefaultExpressionComponent>;\n\n    @ViewChildren(IgxExcelStyleDateExpressionComponent)\n    private expressionDateComponents: QueryList<IgxExcelStyleDateExpressionComponent>;\n\n    private _customDialogPositionSettings: PositionSettings = {\n        verticalDirection: VerticalAlignment.Middle,\n        horizontalDirection: HorizontalAlignment.Center,\n        horizontalStartPoint: HorizontalAlignment.Center,\n        verticalStartPoint: VerticalAlignment.Middle\n    };\n\n    private _customDialogOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new AutoPositionStrategy(this._customDialogPositionSettings),\n        scrollStrategy: new AbsoluteScrollStrategy()\n    };\n\n    public ngAfterViewInit(): void {\n        this._customDialogOverlaySettings.outlet = this.grid.outlet;\n    }\n\n    public get template(): TemplateRef<any> {\n        if (this.column.dataType === GridColumnDataType.Date) {\n            return this.dateExpressionTemplate;\n        }\n\n        return this.defaultExpressionTemplate;\n    }\n\n    public get grid(): any {\n        return this.filteringService.grid;\n    }\n\n    public onCustomDialogOpening() {\n        if (this.selectedOperator) {\n            this.createInitialExpressionUIElement();\n        }\n    }\n\n    public onCustomDialogOpened() {\n        if (this.expressionComponents.first) {\n            this.expressionComponents.first.focus();\n        }\n    }\n\n    public open(esf) {\n        this._customDialogOverlaySettings.target =\n            this.overlayComponentId ?\n                this.grid.rootGrid ? this.grid.rootGrid.nativeElement : this.grid.nativeElement :\n                esf;\n        this.toggle.open(this._customDialogOverlaySettings);\n        this.overlayComponentId = this.toggle.overlayId;\n    }\n\n    public onClearButtonClick() {\n        this.filteringService.clearFilter(this.column.field);\n        this.selectedOperator = null;\n        this.createInitialExpressionUIElement();\n        this.cdr.detectChanges();\n    }\n\n    public closeDialog() {\n        if (this.overlayComponentId) {\n            this.overlayService.hide(this.overlayComponentId);\n            this.overlayComponentId = null;\n        } else {\n            this.toggle.close();\n        }\n    }\n\n    public cancelDialog() {\n        this.esf.cancel();\n        this.closeDialog();\n    }\n\n    public onApplyButtonClick() {\n        this.expressionsList = this.expressionsList.filter(\n            element => element.expression.condition &&\n                (element.expression.searchVal || element.expression.searchVal === 0 || element.expression.condition.isUnary));\n\n        if (this.expressionsList.length > 0) {\n            this.expressionsList[0].beforeOperator = null;\n            this.expressionsList[this.expressionsList.length - 1].afterOperator = null;\n        }\n\n        this.filteringService.filterInternal(this.column.field, this.expressionsList);\n        this.closeDialog();\n    }\n\n    public onAddButtonClick() {\n        const exprUI = new ExpressionUI();\n        exprUI.expression = {\n            condition: null,\n            conditionName: null,\n            fieldName: this.column.field,\n            ignoreCase: this.column.filteringIgnoreCase,\n            searchVal: null\n        };\n\n        this.expressionsList[this.expressionsList.length - 1].afterOperator = FilteringLogic.And;\n        exprUI.beforeOperator = this.expressionsList[this.expressionsList.length - 1].afterOperator;\n\n        this.expressionsList.push(exprUI);\n\n        this.markChildrenForCheck();\n        this.scrollToBottom();\n    }\n\n    public onExpressionRemoved(event: ExpressionUI) {\n        const indexToRemove = this.expressionsList.indexOf(event);\n\n        if (indexToRemove === 0 && this.expressionsList.length > 1) {\n            this.expressionsList[1].beforeOperator = null;\n        } else if (indexToRemove === this.expressionsList.length - 1) {\n            this.expressionsList[indexToRemove - 1].afterOperator = null;\n        } else {\n            this.expressionsList[indexToRemove - 1].afterOperator = this.expressionsList[indexToRemove + 1].beforeOperator;\n            this.expressionsList[0].beforeOperator = null;\n            this.expressionsList[this.expressionsList.length - 1].afterOperator = null;\n        }\n\n        this.expressionsList.splice(indexToRemove, 1);\n\n        this.cdr.detectChanges();\n\n        this.markChildrenForCheck();\n    }\n\n    public onLogicOperatorChanged(event: ILogicOperatorChangedArgs) {\n        const index = this.expressionsList.indexOf(event.target);\n        event.target.afterOperator = event.newValue;\n        if (index + 1 < this.expressionsList.length) {\n            this.expressionsList[index + 1].beforeOperator = event.newValue;\n        }\n    }\n\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        eventArgs.stopPropagation();\n    }\n\n    public onApplyButtonKeyDown(eventArgs: KeyboardEvent) {\n        if (eventArgs.key === this.platform.KEYMAP.TAB && !eventArgs.shiftKey) {\n            eventArgs.stopPropagation();\n            eventArgs.preventDefault();\n        }\n    }\n\n    private createCondition(conditionName: string) {\n        switch (this.column.dataType) {\n            case GridColumnDataType.Boolean:\n                return IgxBooleanFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n            case GridColumnDataType.Percent:\n                return IgxNumberFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Date:\n                return IgxDateFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Time:\n                return IgxTimeFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.DateTime:\n                return IgxDateTimeFilteringOperand.instance().condition(conditionName);\n            default:\n                return IgxStringFilteringOperand.instance().condition(conditionName);\n        }\n    }\n\n    private markChildrenForCheck() {\n        this.expressionComponents.forEach(x => x.cdr.markForCheck());\n        this.expressionDateComponents.forEach(x => x.cdr.markForCheck());\n    }\n\n    private createInitialExpressionUIElement() {\n        let firstExprUI = new ExpressionUI();\n        if (this.expressionsList.length == 1 && this.expressionsList[0].expression.condition?.name === this.selectedOperator) {\n            firstExprUI = this.expressionsList.pop();\n        } else {\n            this.expressionsList = [];\n            const cond = this.createCondition(this.selectedOperator);\n            firstExprUI.expression = {\n                condition: cond,\n                conditionName: cond?.name,\n                fieldName: this.column.field,\n                ignoreCase: this.column.filteringIgnoreCase,\n                searchVal: null\n            };\n        }\n\n        firstExprUI.afterOperator = FilteringLogic.And;\n        this.expressionsList.push(firstExprUI);\n\n        const secondExprUI = new ExpressionUI();\n        secondExprUI.expression = {\n            condition: null,\n            conditionName: null,\n            fieldName: this.column.field,\n            ignoreCase: this.column.filteringIgnoreCase,\n            searchVal: null\n        };\n\n        secondExprUI.beforeOperator = FilteringLogic.And;\n\n        this.expressionsList.push(secondExprUI);\n    }\n\n    private scrollToBottom() {\n        requestAnimationFrame(() => {\n            this.expressionsContainer.nativeElement.scrollTop = this.expressionsContainer.nativeElement.scrollHeight;\n        });\n    }\n}\n","<article #toggle igxToggle\n    class=\"igx-excel-filter__secondary\"\n    [ngClass]=\"{\n        'igx-excel-filter__secondary--cosy': grid.gridSize === '2',\n        'igx-excel-filter__secondary--compact': grid.gridSize === '1'\n    }\"\n    (keydown)=\"onKeyDown($event)\"\n    (opening)=\"onCustomDialogOpening()\"\n    (opened)=\"onCustomDialogOpened()\">\n    <header class=\"igx-excel-filter__secondary-header\">\n        <h4 class=\"ig-typography__h6\">\n            {{ grid.resourceStrings.igx_grid_excel_custom_dialog_header }}{{ column.header || column.field }}\n        </h4>\n    </header>\n\n    <article #expressionsContainer class=\"igx-excel-filter__secondary-main\">\n        @if (column.dataType === 'date' || column.dataType === 'dateTime' || column.dataType === 'time') {\n            @for (expression of expressionsList; track expression.expressionId) {\n                <igx-excel-style-date-expression\n                    class=\"igx-excel-filter__condition\"\n                    [expressionUI]=\"expression\"\n                    [column]=\"column\"\n                    [grid]=\"grid\"\n                    [expressionsList]=\"expressionsList\"\n                    (expressionRemoved)=\"onExpressionRemoved($event)\"\n                    (logicOperatorChanged)=\"onLogicOperatorChanged($event)\">\n                </igx-excel-style-date-expression>\n            }\n        }\n\n        @if (column.dataType !== 'date' && column.dataType !== 'dateTime' && column.dataType !== 'time') {\n            @for (expression of expressionsList; track expression.expressionId) {\n                <igx-excel-style-default-expression\n                    class=\"igx-excel-filter__condition\"\n                    [expressionUI]=\"expression\"\n                    [column]=\"column\"\n                    [grid]=\"grid\"\n                    [expressionsList]=\"expressionsList\"\n                    (expressionRemoved)=\"onExpressionRemoved($event)\"\n                    (logicOperatorChanged)=\"onLogicOperatorChanged($event)\">\n                </igx-excel-style-default-expression>\n            }\n        }\n\n        <button type=\"button\" igxButton\n            class=\"igx-excel-filter__add-filter\"\n            (click)=\"onAddButtonClick()\">\n            <igx-icon family=\"default\" name=\"add\"></igx-icon>\n            <span>{{ grid.resourceStrings.igx_grid_excel_custom_dialog_add }}</span>\n        </button>\n    </article>\n\n    <footer class=\"igx-excel-filter__secondary-footer\">\n        <div class=\"igx-excel-filter__clear\">\n            <button type=\"button\"\n                igxButton=\"flat\"\n                (click)=\"onClearButtonClick()\">\n                    {{ grid.resourceStrings.igx_grid_excel_custom_dialog_clear }}\n            </button>\n        </div>\n        <div class=\"igx-excel-filter__cancel\">\n            <button type=\"button\"\n                igxButton=\"flat\"\n                (click)=\"cancelDialog()\">\n                    {{ grid.resourceStrings.igx_grid_excel_cancel }}\n            </button>\n        </div>\n        <div class=\"igx-excel-filter__apply\">\n            <button type=\"button\"\n                igxButton=\"contained\"\n                (click)=\"onApplyButtonClick()\"\n                (keydown)=\"onApplyButtonKeyDown($event)\">\n                {{ grid.resourceStrings.igx_grid_excel_apply }}\n            </button>\n        </div>\n    </footer>\n</article>\n","import { Component, OnDestroy, ViewChild, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxExcelStyleCustomDialogComponent } from './excel-style-custom-dialog.component';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { NgClass } from '@angular/common';\nimport { IgxDropDownComponent, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective, ISelectionEventArgs } from 'igniteui-angular/drop-down';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { AbsoluteScrollStrategy, AutoPositionStrategy, GridColumnDataType, HorizontalAlignment, IFilteringExpression, IFilteringOperation, OverlaySettings, PlatformUtil, VerticalAlignment } from 'igniteui-angular/core';\n\n\n/**\n * A component used for presenting Excel style conditional filter UI.\n */\n@Component({\n    selector: 'igx-excel-style-conditional-filter',\n    templateUrl: './excel-style-conditional-filter.component.html',\n    imports: [NgClass, IgxDropDownItemNavigationDirective, IgxIconComponent, IgxDropDownComponent, IgxDropDownItemComponent, IgxExcelStyleCustomDialogComponent]\n})\nexport class IgxExcelStyleConditionalFilterComponent implements OnDestroy {\n    public esf = inject(BaseFilteringComponent);\n    protected platform = inject(PlatformUtil);\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('customDialog', { read: IgxExcelStyleCustomDialogComponent })\n    public customDialog: IgxExcelStyleCustomDialogComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('subMenu', { read: IgxDropDownComponent })\n    public subMenu: IgxDropDownComponent;\n\n    protected get filterNumber() {\n        return this.esf.expressionsList.filter(e => e.expression.condition).length;\n    }\n\n    private shouldOpenSubMenu = true;\n    private destroy$ = new Subject<boolean>();\n\n    private _subMenuPositionSettings = {\n        verticalStartPoint: VerticalAlignment.Top\n    };\n\n    private _subMenuOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new AutoPositionStrategy(this._subMenuPositionSettings),\n        scrollStrategy: new AbsoluteScrollStrategy()\n    };\n\n    constructor() {\n        this.esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            if (this.esf.grid) {\n                this.shouldOpenSubMenu = true;\n                this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;\n            }\n        });\n\n        if (this.esf.grid) {\n            this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onTextFilterKeyDown(eventArgs: KeyboardEvent) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            this.onTextFilterClick(eventArgs);\n        } else if (eventArgs.key === this.platform.KEYMAP.TAB) {\n            this.subMenu.close();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onTextFilterClick(eventArgs) {\n        if (this.shouldOpenSubMenu) {\n            this._subMenuOverlaySettings.target = eventArgs.currentTarget;\n\n            const gridRect = this.esf.grid.nativeElement.getBoundingClientRect();\n            const dropdownRect = this.esf.mainDropdown.nativeElement.getBoundingClientRect();\n\n            let x = dropdownRect.left + dropdownRect.width;\n            let x1 = gridRect.left + gridRect.width;\n            x += window.pageXOffset;\n            x1 += window.pageXOffset;\n            if (Math.abs(x - x1) < 200) {\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Left;\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Left;\n            } else {\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalDirection = HorizontalAlignment.Right;\n                this._subMenuOverlaySettings.positionStrategy.settings.horizontalStartPoint = HorizontalAlignment.Right;\n            }\n\n            this.subMenu.open(this._subMenuOverlaySettings);\n            this.shouldOpenSubMenu = false;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public getCondition(value: string): IFilteringOperation {\n        return this.esf.column.filters.condition(value);\n    }\n\n    protected getSelectedCondition(condition: string): boolean {\n        const expressions = this.esf.expressionsList;\n        if (expressions.length < 1) {\n            return false;\n        }\n        return expressions.length === 1 ? expressions[0].expression.condition.name === condition : condition === 'custom';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public translateCondition(value: string): string {\n        return this.esf.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSubMenuSelection(eventArgs: ISelectionEventArgs) {\n        if (this.esf.expressionsList && this.esf.expressionsList.length &&\n            this.esf.expressionsList[0].expression.condition.name !== 'in') {\n            this.customDialog.expressionsList = this.esf.expressionsList;\n        } else {\n            this.customDialog.expressionsList = this.customDialog.expressionsList.filter(e => e.expression.fieldName === this.esf.column.field && e.expression.condition);\n        }\n\n        this.customDialog.selectedOperator = eventArgs.newSelection.value;\n        eventArgs.cancel = true;\n        if (this.esf.overlayComponentId) {\n            this.esf.hide();\n        }\n        this.subMenu.close();\n        this.customDialog.open(this.esf.mainDropdown.nativeElement);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSubMenuClosed() {\n        requestAnimationFrame(() => {\n            this.shouldOpenSubMenu = true;\n        });\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public showCustomFilterItem(): boolean {\n        const exprTree = this.esf.column.filteringExpressionsTree;\n        return exprTree && exprTree.filteringOperands && exprTree.filteringOperands.length &&\n            !((exprTree.filteringOperands[0] as IFilteringExpression).condition &&\n                (exprTree.filteringOperands[0] as IFilteringExpression).condition.name === 'in');\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get subMenuText() {\n        switch (this.esf.column.dataType) {\n            case GridColumnDataType.Boolean:\n                return this.esf.grid.resourceStrings.igx_grid_excel_boolean_filter;\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Percent:\n                return this.esf.grid.resourceStrings.igx_grid_excel_number_filter;\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return this.esf.grid.resourceStrings.igx_grid_excel_date_filter;\n            case GridColumnDataType.Currency:\n                return this.esf.grid.resourceStrings.igx_grid_excel_currency_filter;\n            default:\n                return this.esf.grid.resourceStrings.igx_grid_excel_text_filter;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get conditions() {\n        return this.esf.column.filters.conditionList();\n    }\n}\n","@if (esf.column) {\n    <div tabindex=\"0\"\n        class=\"igx-excel-filter__actions-filter\"\n        [ngClass]=\"filterNumber > 0 ? 'igx-excel-filter__actions-filter--active' : ''\"\n        (keydown)=\"onTextFilterKeyDown($event)\"\n        (click)=\"onTextFilterClick($event)\"\n        [igxDropDownItemNavigation]=\"subMenu\"\n        role=\"menuitem\"\n        aria-haspopup=\"true\"\n        [attr.aria-controls]=\"subMenu?.listId\"\n        [attr.aria-activedescendant]=\"!subMenu?.collapsed ? subMenu?.focusedItem?.id : null\">\n        <span class=\"igx-excel-filter__filter-number\">\n            {{ subMenuText }}\n            @if (filterNumber > 0) { ({{filterNumber}}) }\n        </span>\n        <igx-icon name=\"chevron_right\" family=\"default\"></igx-icon>\n    </div>\n\n    <igx-drop-down\n        #subMenu\n        [maxHeight]=\"'397px'\"\n        (selectionChanging)=\"onSubMenuSelection($event)\"\n        (closed)=\"onSubMenuClosed()\">\n        <div>\n            @for (condition of conditions; track condition) {\n                <igx-drop-down-item\n                    [selected]=\"getSelectedCondition(condition)\"\n                    [value]=\"condition\">\n                    <div class=\"igx-grid__filtering-dropdown-items\">\n                        <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n                        <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n                    </div>\n                </igx-drop-down-item>\n            }\n            @if (showCustomFilterItem()) {\n                <igx-drop-down-item\n                    [selected]=\"getSelectedCondition('custom')\" >\n                    <div class=\"igx-grid__filtering-dropdown-items\">\n                        <igx-icon name=\"filter_list\" family=\"default\"></igx-icon>\n                        <span class=\"igx-grid__filtering-dropdown-text\">{{ esf.grid.resourceStrings.igx_grid_excel_custom_filter }}</span>\n                    </div>\n                </igx-drop-down-item>\n            }\n        </div>\n    </igx-drop-down>\n\n    <igx-excel-style-custom-dialog\n        #customDialog\n        [column]=\"esf.column\"\n        [filteringService]=\"esf.grid.filteringService\"\n        [overlayComponentId]=\"esf.overlayComponentId\">\n    </igx-excel-style-custom-dialog>\n}\n","import { Component, Input, booleanAttribute, inject } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { NgClass } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxIconButtonDirective } from 'igniteui-angular/directives';\n\n/**\n * A component used for presenting Excel style header UI.\n */\n@Component({\n    selector: 'igx-excel-style-header',\n    templateUrl: './excel-style-header.component.html',\n    imports: [NgClass, IgxIconComponent, IgxIconButtonDirective]\n})\nexport class IgxExcelStyleHeaderComponent {\n    public esf = inject(BaseFilteringComponent);\n\n    /**\n     * Sets whether the column pinning icon should be shown in the header.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-excel-style-header [showPinning]=\"true\"></igx-excel-style-header>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showPinning: boolean;\n\n    /**\n     * Sets whether the column selecting icon should be shown in the header.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-excel-style-header [showSelecting]=\"true\"></igx-excel-style-header>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showSelecting: boolean;\n\n    /**\n     * Sets whether the column hiding icon should be shown in the header.\n     * Default value is `false`.\n     *\n     * @example\n     * ```html\n     * <igx-excel-style-header [showHiding]=\"true\"></igx-excel-style-header>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public showHiding: boolean;\n}\n","@if (esf.column) {\n    <header class=\"igx-excel-filter__menu-header\">\n        <h4>{{ esf.column.header || esf.column.field }}</h4>\n        <div class=\"igx-excel-filter__menu-header-actions\">\n            @if (showSelecting) {\n                <button\n                    type=\"button\"\n                    igxIconButton=\"flat\"\n                    (click)=\"esf.onSelect()\"\n                    [ngClass]=\"esf.column.selected ? 'igx-excel-filter__actions-selected' : 'igx-excel-filter__actions-select'\"\n                    [attr.aria-label]=\"esf.column.selected ? esf.grid.resourceStrings.igx_grid_excel_deselect : esf.grid.resourceStrings.igx_grid_excel_select\"\n                >\n                    <igx-icon family=\"default\" name=\"selected\"></igx-icon>\n                </button>\n            }\n            @if (showPinning) {\n                <button\n                    type=\"button\"\n                    igxIconButton=\"flat\"\n                    (click)=\"esf.onPin()\"\n                    [attr.aria-label]=\"esf.column.pinned ? esf.grid.resourceStrings.igx_grid_excel_unpin : esf.grid.resourceStrings.igx_grid_excel_pin\"\n                >\n                    <igx-icon family=\"default\" [name]=\"esf.column.pinned ? 'unpin' : 'pin'\"></igx-icon>\n                </button>\n            }\n            @if (showHiding) {\n                <button\n                    type=\"button\"\n                    igxIconButton=\"flat\"\n                    (click)=\"esf.onHideToggle()\"\n                    [attr.aria-label]=\"esf.column.hidden ? esf.grid.resourceStrings.igx_grid_excel_show : esf.grid.resourceStrings.igx_grid_excel_hide\"\n                >\n                    <igx-icon family=\"default\" [name]=\"esf.column.hidden ? 'show' : 'hide'\"></igx-icon>\n                </button>\n            }\n        </div>\n    </header>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\n\n/**\n * A component used for presenting Excel style column hiding UI.\n */\n@Component({\n    selector: 'igx-excel-style-hiding',\n    templateUrl: './excel-style-hiding.component.html',\n    imports: [IgxIconComponent]\n})\nexport class IgxExcelStyleHidingComponent {\n    public esf = inject(BaseFilteringComponent);\n}\n","@if (esf.column) {\n    <div\n        class=\"igx-excel-filter__actions-hide\"\n        tabindex=\"0\"\n        (click)=\"esf.onHideToggle()\"\n        role=\"menuitem\">\n        <span>{{ esf.column.hidden ? esf.grid.resourceStrings.igx_grid_excel_show : esf.grid.resourceStrings.igx_grid_excel_hide }}</span>\n        <igx-icon family=\"default\" [name]=\"esf.column.hidden ? 'show' : 'hide'\"></igx-icon>\n    </div>\n}\n","import { Component, HostBinding, inject } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxButtonGroupComponent } from 'igniteui-angular/button-group';\nimport { IgxButtonDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { ColumnPinningPosition, ColumnType } from 'igniteui-angular/core';\n\n/**\n * A component used for presenting Excel style column moving UI.\n */\n@Component({\n    selector: 'igx-excel-style-moving',\n    templateUrl: './excel-style-moving.component.html',\n    imports: [IgxButtonGroupComponent, IgxButtonDirective, IgxIconComponent]\n})\nexport class IgxExcelStyleMovingComponent {\n    public esf = inject(BaseFilteringComponent);\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter__move')\n    public defaultClass = true;\n\n    private get visibleColumns() {\n        return this.esf.grid.visibleColumns.filter(col => !col.columnGroup);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get canNotMoveLeft() {\n        return this.esf.column.visibleIndex === 0 ||\n            (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === 0 && this.esf.column.disablePinning) ||\n            (this.esf.column.level !== 0 && !this.findColumn(0, this.visibleColumns));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get canNotMoveRight() {\n        return this.esf.column.visibleIndex === this.visibleColumns.length - 1 ||\n            (this.esf.column.level !== 0 && !this.findColumn(1, this.visibleColumns));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onMoveButtonClicked(moveDirection) {\n        let targetColumn;\n        if (this.esf.column.pinned) {\n            if (this.esf.column.isLastPinned && moveDirection === 1 && this.esf.column.pinningPosition === ColumnPinningPosition.Start) {\n                targetColumn = this.esf.grid.unpinnedColumns[0];\n                moveDirection = 0;\n            } else if (this.esf.column.isFirstPinned && moveDirection === 0 && this.esf.column.pinningPosition === ColumnPinningPosition.End) {\n                targetColumn = this.esf.grid.unpinnedColumns[this.esf.grid.unpinnedColumns.length - 1];\n                moveDirection = 1;\n            } else {\n                targetColumn = this.findColumn(moveDirection, this.esf.grid.pinnedColumns);\n            }\n        } else if (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === 0 && moveDirection === 0) {\n            // moving first unpinned, left (into pin start area)\n            targetColumn = this.esf.grid.pinnedStartColumns[this.esf.grid.pinnedStartColumns.length - 1];\n            if (targetColumn.parent) {\n                targetColumn = targetColumn.topLevelParent;\n            }\n            moveDirection = 1;\n        } else if (this.esf.grid.unpinnedColumns.indexOf(this.esf.column) === this.esf.grid.unpinnedColumns.length - 1 &&\n            moveDirection === 1) {\n                // moving last unpinned, right (into pin end area)\n            targetColumn = this.esf.grid.pinnedEndColumns[0];\n            moveDirection = 0;\n        } else {\n            targetColumn = this.findColumn(moveDirection, this.esf.grid.unpinnedColumns);\n        }\n        this.esf.grid.moveColumn(this.esf.column, targetColumn, moveDirection);\n    }\n\n    protected get esfSize(): string {\n        const esf = this.esf as any;\n        return esf.size;\n    }\n\n    private findColumn(moveDirection: number, columns: ColumnType[]) {\n        let index = columns.indexOf(this.esf.column);\n        if (moveDirection === 0) {\n            while (index > 0) {\n                index--;\n                if (columns[index].level === this.esf.column.level && columns[index].parent === this.esf.column.parent) {\n                    return columns[index];\n                }\n            }\n            return columns[0];\n        } else {\n            while (index < columns.length - 1) {\n                index++;\n                if (columns[index].level === this.esf.column.level && columns[index].parent === this.esf.column.parent) {\n                    return columns[index];\n                }\n            }\n        }\n    }\n}\n","@if (esf.column) {\n    <header>\n        {{ esf.grid.resourceStrings.igx_grid_excel_filter_moving_header }}\n    </header>\n    <igx-buttongroup>\n        <button\n            type=\"button\"\n            igxButton\n            [disabled]=\"canNotMoveLeft\"\n            (click)=\"onMoveButtonClicked(0)\">\n            <igx-icon family=\"default\" name=\"arrow_back\"></igx-icon>\n            <span>\n                {{ esfSize === '1'?\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_left_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_left }}\n            </span>\n        </button>\n        <button\n            type=\"button\"\n            igxButton\n            [disabled]=\"canNotMoveRight\"\n            (click)=\"onMoveButtonClicked(1)\">\n            <span>\n                {{ esfSize === '1'?\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_right_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_moving_right }}\n            </span>\n            <igx-icon family=\"default\" name=\"arrow_forward\"></igx-icon>\n        </button>\n    </igx-buttongroup>\n}\n","import { Component, inject } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { NgClass } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\n\n/**\n * A component used for presenting Excel style column pinning UI.\n */\n@Component({\n    selector: 'igx-excel-style-pinning',\n    templateUrl: './excel-style-pinning.component.html',\n    imports: [NgClass, IgxIconComponent]\n})\nexport class IgxExcelStylePinningComponent {\n    public esf = inject(BaseFilteringComponent);\n}\n","@if (esf.column) {\n    <div\n        [ngClass]=\"esf.column.pinned ? 'igx-excel-filter__actions-unpin' : 'igx-excel-filter__actions-pin'\"\n        (click)=\"esf.onPin()\"\n        tabindex=\"0\"\n        role=\"menuitem\">\n        <span>{{ esf.column.pinned ? esf.grid.resourceStrings.igx_grid_excel_unpin : esf.grid.resourceStrings.igx_grid_excel_pin }}</span>\n        <igx-icon family=\"default\" [name]=\"esf.column.pinned ? 'unpin' : 'pin'\"></igx-icon>\n    </div>\n}\n","import { AfterViewInit, Component, ViewChild, ChangeDetectorRef, TemplateRef, Directive, OnDestroy, HostBinding, Input, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { IChangeCheckboxEventArgs, IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { takeUntil } from 'rxjs/operators';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { ActiveElement, ExpressionUI, FilterListItem } from './common';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxDataLoadingTemplateDirective, IgxEmptyListTemplateDirective, IgxListComponent, IgxListItemComponent } from 'igniteui-angular/list';\nimport { IgxButtonDirective, IgxForOfDirective } from 'igniteui-angular/directives';\nimport { IgxTreeComponent, IgxTreeNodeComponent, ITreeNodeSelectionEvent } from 'igniteui-angular/tree';\nimport { IgxCircularProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { cloneHierarchicalArray, columnFieldPath, FilteringExpressionsTree, FilteringLogic, GridColumnDataType, IgxBooleanFilteringOperand, IgxDateFilteringOperand, IgxDateTimeFilteringOperand, IgxNumberFilteringOperand, IgxStringFilteringOperand, IgxTimeFilteringOperand, PlatformUtil, resolveNestedPath, ɵSize } from 'igniteui-angular/core';\nimport { Navigate } from 'igniteui-angular/drop-down';\n\n@Directive({\n    selector: '[igxExcelStyleLoading]',\n    standalone: true\n})\nexport class IgxExcelStyleLoadingValuesTemplateDirective {\n    public template = inject<TemplateRef<undefined>>(TemplateRef);\n\n    public static ngTemplateContextGuard(_dir: IgxExcelStyleLoadingValuesTemplateDirective,\n        ctx: unknown): ctx is undefined {\n        return true\n    }\n}\n\nlet NEXT_ID = 0;\n/**\n * A component used for presenting Excel style search UI.\n */\n@Component({\n    selector: 'igx-excel-style-search',\n    templateUrl: './excel-style-search.component.html',\n    imports: [IgxInputGroupComponent, IgxIconComponent, IgxPrefixDirective, FormsModule, IgxInputDirective, IgxSuffixDirective, IgxListComponent, IgxForOfDirective, IgxListItemComponent, IgxCheckboxComponent, IgxDataLoadingTemplateDirective, NgTemplateOutlet, IgxEmptyListTemplateDirective, IgxTreeComponent, IgxTreeNodeComponent, IgxCircularProgressBarComponent, IgxButtonDirective]\n})\nexport class IgxExcelStyleSearchComponent implements AfterViewInit, OnDestroy {\n    public cdr = inject(ChangeDetectorRef);\n    public esf = inject(BaseFilteringComponent);\n    protected platform = inject(PlatformUtil);\n\n    private static readonly filterOptimizationThreshold = 2;\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter__menu-main')\n    public defaultClass = true;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('input', { read: IgxInputDirective, static: true })\n    public searchInput: IgxInputDirective;\n\n    @ViewChild('cancelButton', { read: IgxButtonDirective, static: true })\n    protected cancelButton: IgxButtonDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('list', { read: IgxListComponent, static: false })\n    public list: IgxListComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('selectAllCheckbox', { read: IgxCheckboxComponent, static: false })\n    public selectAllCheckbox: IgxCheckboxComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('addToCurrentFilterCheckbox', { read: IgxCheckboxComponent, static: false })\n    public addToCurrentFilterCheckbox: IgxCheckboxComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('tree', { read: IgxTreeComponent, static: false })\n    public tree: IgxTreeComponent;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild(IgxForOfDirective)\n    protected virtDir: IgxForOfDirective<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExcelStyleLoadingValuesTemplate', { read: TemplateRef })\n    protected defaultExcelStyleLoadingValuesTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    public get selectAllItem(): FilterListItem {\n        if (!this._selectAllItem) {\n            const selectAllItem = {\n                isSelected: false,\n                isFiltered: false,\n                indeterminate: false,\n                isSpecial: true,\n                isBlanks: false,\n                value: this.esf.grid.resourceStrings.igx_grid_excel_select_all,\n                label: this.esf.grid.resourceStrings.igx_grid_excel_select_all\n            };\n\n            this._selectAllItem = selectAllItem;\n        }\n\n        return this._selectAllItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get addToCurrentFilterItem(): FilterListItem {\n        if (!this._addToCurrentFilterItem) {\n            const addToCurrentFilterItem = {\n                isSelected: false,\n                isFiltered: false,\n                indeterminate: false,\n                isSpecial: true,\n                isBlanks: false,\n                value: this.esf.grid.resourceStrings.igx_grid_excel_add_to_filter,\n                label: this.esf.grid.resourceStrings.igx_grid_excel_add_to_filter\n            };\n\n            this._addToCurrentFilterItem = addToCurrentFilterItem;\n        }\n\n        return this._addToCurrentFilterItem;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get isLoading() {\n        return this._isLoading;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public set isLoading(value: boolean) {\n        this._isLoading = value;\n        if (!(this.cdr as any).destroyed) {\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public searchValue: any;\n\n    /**\n     * @hidden @internal\n     */\n    public displayedListData: FilterListItem[] = [];\n\n    /**\n     * @hidden @internal\n     */\n    public matchesCount: number;\n\n    /**\n     * @hidden @internal\n     */\n    public get valuesLoadingTemplate() {\n        if (this.esf.grid?.excelStyleLoadingValuesTemplateDirective) {\n            return this.esf.grid.excelStyleLoadingValuesTemplateDirective.template;\n        } else {\n            return this.defaultExcelStyleLoadingValuesTemplate;\n        }\n    }\n\n    protected activeDescendant = '';\n\n    private _id = `igx-excel-style-search-${NEXT_ID++}`;\n    private _isLoading = true;\n    private _addToCurrentFilterItem: FilterListItem;\n    private _selectAllItem: FilterListItem;\n    private _hierarchicalSelectedItems: FilterListItem[];\n    private _focusedItem: ActiveElement = null;\n    private destroy$ = new Subject<boolean>();\n\n    constructor() {\n        const esf = this.esf;\n\n        esf.loadingStart.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.displayedListData = [];\n            this.isLoading = true;\n        });\n        esf.loadingEnd.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.refreshSize();\n            this.isLoading = false;\n        });\n        esf.initialized.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            requestAnimationFrame(() => {\n                this.refreshSize();\n                this.searchInput.nativeElement.focus();\n            });\n        });\n        esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.virtDir?.resetScrollPosition();\n\n            if (this.virtDir) {\n                this.virtDir.state.startIndex = 0;\n            }\n        });\n\n        esf.listDataLoaded.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this._selectAllItem = this.esf.listData[0];\n            if (this.isHierarchical() && this.esf.listData[0].isSpecial) {\n                this.esf.listData.splice(0, 1);\n            }\n\n            if (this.searchValue) {\n                this.clearInput();\n            } else {\n                this.filterListData();\n            }\n\n            this.cdr.detectChanges();\n            requestAnimationFrame(() => {\n                this.refreshSize();\n                this.searchInput.nativeElement.focus();\n            });\n        });\n\n        esf.filterCleared.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.clearInput();\n        });\n    }\n\n    public ngAfterViewInit() {\n        if (this.platform.isBrowser) {\n            // SSR workaround\n            requestAnimationFrame(this.refreshSize);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public refreshSize = () => {\n        if (this.virtDir) {\n            this.virtDir.igxForContainerSize = this.containerSize;\n            this.virtDir.igxForItemSize = this.itemSize;\n            this.virtDir.recalcUpdateSizes();\n            this.cdr.detectChanges();\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public clearInput() {\n        this.searchValue = null;\n        this.filterListData();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onCheckboxChange(eventArgs: IChangeCheckboxEventArgs) {\n        const selectedIndex = this.displayedListData.indexOf(eventArgs.owner.value);\n        const selectAllBtn = this.displayedListData[0];\n\n        if (selectedIndex === 0) {\n            this.displayedListData.forEach(element => {\n                if (element === this.addToCurrentFilterItem) {\n                    return;\n                }\n                element.isSelected = eventArgs.checked;\n            });\n\n            selectAllBtn.indeterminate = false;\n        } else {\n            eventArgs.owner.value.isSelected = eventArgs.checked;\n            const indexToStartSlicing = this.displayedListData.indexOf(this.addToCurrentFilterItem) > -1 ? 2 : 1;\n\n            const slicedArray =\n                this.displayedListData.slice(indexToStartSlicing, this.displayedListData.length);\n\n            if (!slicedArray.find(el => el.isSelected === false)) {\n                selectAllBtn.indeterminate = false;\n                selectAllBtn.isSelected = true;\n            } else if (!slicedArray.find(el => el.isSelected === true)) {\n                selectAllBtn.indeterminate = false;\n                selectAllBtn.isSelected = false;\n            } else {\n                selectAllBtn.indeterminate = true;\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelectAllCheckboxChange(eventArgs: IChangeCheckboxEventArgs) {\n        this._selectAllItem.isSelected = eventArgs.checked;\n        this._selectAllItem.indeterminate = false;\n        const treeNodes = this.tree.nodes;\n        treeNodes.forEach(node => (node.data as FilterListItem).isSelected = eventArgs.checked);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onNodeSelectionChange(eventArgs: ITreeNodeSelectionEvent) {\n        eventArgs.added.forEach(node => {\n            (node.data as FilterListItem).isSelected = true;\n        });\n        eventArgs.removed.forEach(node => {\n            (node.data as FilterListItem).isSelected = false;\n        });\n\n        this._hierarchicalSelectedItems = eventArgs.newSelection.map(item => item.data as FilterListItem);\n        const selectAllBtn = this.selectAllItem;\n        if (this._hierarchicalSelectedItems.length === 0) {\n            selectAllBtn.indeterminate = false;\n            selectAllBtn.isSelected = false;\n        } else if (this._hierarchicalSelectedItems.length === this.tree.nodes.length) {\n            selectAllBtn.indeterminate = false;\n            selectAllBtn.isSelected = true;\n        } else {\n            selectAllBtn.indeterminate = true;\n            selectAllBtn.isSelected = false;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get itemSize() {\n        let itemSize = '40px';\n        const esf = this.esf as any;\n        switch (esf.size) {\n            case ɵSize.Medium: itemSize = '32px'; break;\n            case ɵSize.Small: itemSize = '24px'; break;\n            default: break;\n        }\n        return itemSize;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get containerSize() {\n        if (this.esf.listData.length) {\n            return this.list?.element.nativeElement.offsetHeight;\n        }\n\n        // GE Nov 1st, 2021 #10355 Return a numeric value, so the chunk size is calculated properly.\n        // If we skip this branch, on applying the filter the _calculateChunkSize() method off the ForOfDirective receives\n        // an igxForContainerSize = undefined, thus assigns the chunkSize to the igxForOf.length which leads to performance issues.\n        return 0;\n    }\n\n    @HostBinding('attr.id')\n    @Input()\n    protected get id(): string {\n        return this._id;\n    }\n    protected set id(value: string) {\n        this._id = value;\n    }\n\n    protected getItemId(index: number): string {\n        return `${this.id}-item-${index}`;\n    }\n\n    protected setActiveDescendant(): void {\n        this.activeDescendant = this.focusedItem?.id || '';\n    }\n\n    protected get focusedItem(): ActiveElement {\n        return this._focusedItem;\n    }\n\n    protected set focusedItem(val: ActiveElement) {\n        this._focusedItem = val;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get applyButtonDisabled(): boolean {\n        return ((this._selectAllItem && !this._selectAllItem.isSelected && !this._selectAllItem.indeterminate) ||\n            (this.displayedListData && this.displayedListData.length === 0)) && !this._addToCurrentFilterItem?.isSelected;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onInputKeyDown(event: KeyboardEvent): void {\n        switch (event.key) {\n            case this.platform.KEYMAP.ENTER:\n                event.preventDefault();\n                this.applyFilter();\n\n                return;\n            case this.platform.KEYMAP.ESCAPE:\n                if (this.searchValue) {\n                    event.stopPropagation();\n                    this.clearInput();\n                }\n\n                return;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public filterListData(): void {\n        if (this.esf.column?.dataType === GridColumnDataType.Number ||\n            this.esf.column?.dataType === GridColumnDataType.Currency ||\n            this.esf.column?.dataType === GridColumnDataType.Percent) {\n            this.rejectNonNumericalEntries();\n        }\n\n        if (!this.esf.listData || !this.esf.listData.length) {\n            this.displayedListData = [];\n\n            return;\n        }\n\n        let selectAllBtn;\n        if (this._selectAllItem) {\n            selectAllBtn = this._selectAllItem;\n        } else {\n            selectAllBtn = this.esf.listData[0];\n        }\n\n        if (!this.searchValue) {\n            let anyFiltered = this.esf.listData.some(i => i.isFiltered);\n            let anyUnfiltered = this.esf.listData.some(i => !i.isFiltered);\n            selectAllBtn.indeterminate = anyFiltered && anyUnfiltered;\n            if (this.isHierarchical() && this.tree) {\n                this._hierarchicalSelectedItems = this.tree.nodes.map(n => n.data as FilterListItem).filter(item => item.isFiltered);\n                this.tree.collapseAll();\n            }\n\n            this.esf.listData.forEach(i => i.isSelected = i.isFiltered);\n            if (this.displayedListData !== this.esf.listData) {\n                this.displayedListData = this.esf.listData;\n                if (this.isHierarchical()) {\n                    this.cdr.detectChanges();\n                    this.tree.nodes.forEach(n => {\n                        const item = n.data as FilterListItem;\n                        n.selected = item.isSelected || item.isFiltered;\n                        anyFiltered = anyFiltered || n.selected;\n                        anyUnfiltered = anyUnfiltered || !n.selected;\n                    });\n                    selectAllBtn.indeterminate = anyFiltered && anyUnfiltered;\n                }\n            }\n            selectAllBtn.label = this.esf.grid.resourceStrings.igx_grid_excel_select_all;\n            this.matchesCount = this.displayedListData.length - 1;\n            this.cdr.detectChanges();\n\n            return;\n        }\n\n        const searchVal = this.searchValue.toLowerCase();\n        if (this.isHierarchical()) {\n            this._hierarchicalSelectedItems = [];\n            this.esf.listData.forEach(i => i.isSelected = false);\n            const matchedData = cloneHierarchicalArray(this.esf.listData, 'children');\n            this.displayedListData = this.hierarchicalSelectMatches(matchedData, searchVal);\n            this.cdr.detectChanges();\n            this.tree.nodes.forEach(n => {\n                n.selected = true;\n                if ((n.data as FilterListItem).label.toString().toLowerCase().indexOf(searchVal) > -1) {\n                    this.expandAllParentNodes(n);\n                }\n            });\n        } else {\n            this.displayedListData = this.esf.listData.filter((it, i) => (i === 0 && it.isSpecial) ||\n                (it.label !== null && it.label !== undefined) &&\n                !it.isBlanks &&\n                it.label.toString().toLowerCase().indexOf(searchVal) > -1);\n\n            this.esf.listData.forEach(i => i.isSelected = false);\n            this.displayedListData.forEach(i => i.isSelected = true);\n            this.displayedListData.splice(1, 0, this.addToCurrentFilterItem);\n            if (this.displayedListData.length === 2) {\n                this.displayedListData = [];\n            }\n        }\n\n        if (this.displayedListData.length > 2) {\n            this.matchesCount = this.displayedListData.length - 2;\n        } else {\n            this.matchesCount = 0;\n        }\n\n        selectAllBtn.indeterminate = false;\n        selectAllBtn.isSelected = true;\n        selectAllBtn.label = this.esf.grid.resourceStrings.igx_grid_excel_select_all_search_results;\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public applyFilter() {\n        const filterTree = new FilteringExpressionsTree(FilteringLogic.Or, this.esf.column.field);\n\n        let selectedItems = [];\n        if (this.isHierarchical()) {\n            if (this.addToCurrentFilterCheckbox && this.addToCurrentFilterCheckbox.checked) {\n                this.addFilteredToSelectedItems(this.esf.listData);\n            }\n\n            selectedItems = this._hierarchicalSelectedItems;\n        } else {\n            const addToCurrentFilter = this._addToCurrentFilterItem?.isSelected;\n            const displayedSet = new Set(this.displayedListData);\n            const listData = this.esf.listData;\n\n            for (let i = 1; i < listData.length; i++) {\n                const el = listData[i];\n                const isDisplayed = displayedSet.has(el);\n\n                if (isDisplayed) {\n                    // Visible items: only include if selected\n                    if (el.isSelected) {\n                        selectedItems.push(el);\n                    }\n                } else if (addToCurrentFilter) {\n                    // Hidden items with \"add to current filter\": include if selected or filtered\n                    if (el.isSelected || el.isFiltered) {\n                        selectedItems.push(el);\n                    }\n                } else if (el.isSelected) {\n                    // Hidden items without \"add to current filter\": include if selected\n                    selectedItems.push(el);\n                }\n            }\n        }\n\n        let unselectedItem;\n        if (this.isHierarchical()) {\n            unselectedItem = this.esf.listData.find(el => el.isSelected === false);\n        } else {\n            unselectedItem = this.esf.listData.slice(1, this.esf.listData.length).find(el => el.isSelected === false);\n        }\n\n        if (unselectedItem) {\n            if (selectedItems.length <= IgxExcelStyleSearchComponent.filterOptimizationThreshold) {\n                selectedItems.forEach(element => {\n                    let condition = null;\n                    if (element.value !== null && element.value !== undefined) {\n                        if (this.esf.column.dataType === GridColumnDataType.Boolean) {\n                            condition = this.createCondition(element.value.toString());\n                        } else {\n                            const filterCondition = this.esf.column.dataType === GridColumnDataType.Time ? 'at' : 'equals';\n                            condition = this.createCondition(filterCondition);\n                        }\n                    } else {\n                        condition = this.createCondition('empty');\n                    }\n                    filterTree.filteringOperands.push({\n                        condition,\n                        conditionName: condition.name,\n                        fieldName: this.esf.column.field,\n                        ignoreCase: this.esf.column.filteringIgnoreCase,\n                        searchVal: element.value\n                    });\n                });\n            } else {\n                const blanksItemIndex = selectedItems.findIndex(e => e.value === null || e.value === undefined);\n                let blanksItem: any;\n                if (blanksItemIndex >= 0) {\n                    blanksItem = selectedItems[blanksItemIndex];\n                    selectedItems.splice(blanksItemIndex, 1);\n                }\n                let searchVal;\n                switch (this.esf.column.dataType) {\n                    case GridColumnDataType.Date:\n                        searchVal = new Set(selectedItems.map(d => d.value.toDateString()));\n                        break;\n                    case GridColumnDataType.DateTime:\n                        searchVal = new Set(selectedItems.map(d => d.value.toISOString()));\n                        break;\n                    case GridColumnDataType.Time:\n                        searchVal = new Set(selectedItems.map(e => e.value.toLocaleTimeString()));\n                        break;\n                    case GridColumnDataType.String:\n                        if (this.esf.column.filteringIgnoreCase && !this.isHierarchical()) {\n                            const selectedValues = new Set(selectedItems.map(item => item.value.toLowerCase()));\n                            searchVal = new Set();\n\n                            this.esf.grid.data.forEach(item => {\n                                const fieldPaths = columnFieldPath(this.esf.column.field)\n                                const itemValue = resolveNestedPath(item, fieldPaths);\n                                if (typeof itemValue === \"string\" && selectedValues.has(itemValue.toLowerCase())) {\n                                    searchVal.add(itemValue);\n                                }\n                            });\n                            break;\n                        }\n                    default:\n                        searchVal = new Set(selectedItems.map(e => e.value))\n                }\n                filterTree.filteringOperands.push({\n                    condition: this.createCondition('in'),\n                    conditionName: 'in',\n                    fieldName: this.esf.column.field,\n                    ignoreCase: this.esf.column.filteringIgnoreCase,\n                    searchVal\n                });\n\n                if (blanksItem) {\n                    filterTree.filteringOperands.push({\n                        condition: this.createCondition('empty'),\n                        conditionName: 'empty',\n                        fieldName: this.esf.column.field,\n                        ignoreCase: this.esf.column.filteringIgnoreCase,\n                        searchVal: blanksItem.value\n                    });\n                }\n            }\n            const grid = this.esf.grid;\n            const col = this.esf.column;\n            grid.filteringService.filterInternal(col.field, filterTree);\n            this.esf.expressionsList = new Array<ExpressionUI>();\n            grid.filteringService.generateExpressionsList(col.filteringExpressionsTree,\n                grid.filteringLogic, this.esf.expressionsList);\n        } else {\n            this.esf.grid.filteringService.clearFilter(this.esf.column.field);\n        }\n\n        this.esf.closeDropdown();\n    }\n\n    protected handleKeyDown(event: KeyboardEvent) {\n        if (event) {\n            const key = event.key.toLowerCase();\n            const navKeys = ['space', 'spacebar', ' ',\n                'arrowup', 'up', 'arrowdown', 'down', 'home', 'end'];\n            if (navKeys.indexOf(key) === -1) { // If key has appropriate function in DD\n                return;\n            }\n            event.preventDefault();\n            event.stopPropagation();\n            switch (key) {\n                case 'arrowup':\n                case 'up':\n                    this.onArrowUpKeyDown();\n                    break;\n                case 'arrowdown':\n                case 'down':\n                    this.onArrowDownKeyDown();\n                    break;\n                case 'home':\n                    this.onHomeKeyDown();\n                    break;\n                case 'end':\n                    this.onEndKeyDown();\n                    break;\n                case 'space':\n                case 'spacebar':\n                case ' ':\n                    this.onActionKeyDown();\n                    break;\n                default:\n                    return;\n            }\n        }\n    }\n\n    protected onFocus() {\n        const firstIndexInView = this.virtDir.state.startIndex;\n        if (this.virtDir.igxForOf.length > 0) {\n            this.focusedItem = {\n                id: this.getItemId(firstIndexInView),\n                index: firstIndexInView,\n                checked: this.virtDir.igxForOf[firstIndexInView].isSelected\n            };\n        }\n        this.setActiveDescendant();\n    }\n\n    protected onFocusOut() {\n        this.focusedItem = null;\n        this.setActiveDescendant();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isHierarchical() {\n        return this.esf.isHierarchical;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public isTreeEmpty() {\n        return this.esf.isHierarchical && this.displayedListData.length === 0;\n    }\n\n    private hierarchicalSelectMatches(data: FilterListItem[], searchVal: string) {\n        data.forEach(element => {\n            element.indeterminate = false;\n            element.isSelected = false;\n            const node = this.tree.nodes.filter(n => (n.data as FilterListItem).label === element.label)[0];\n            if (node) {\n                node.expanded = false;\n            }\n\n            if (element.label.toString().toLowerCase().indexOf(searchVal) > -1) {\n                element.isSelected = true;\n                this.hierarchicalSelectAllChildren(element);\n                this._hierarchicalSelectedItems.push(element);\n            } else if (element.children.length > 0) {\n                element.children = this.hierarchicalSelectMatches(element.children, searchVal);\n                if (element.children.length > 0) {\n                    element.isSelected = true;\n                    if (node) {\n                        node.expanded = true;\n                    }\n                }\n            }\n        });\n\n        return data.filter(element => element.isSelected === true);\n    }\n\n    private hierarchicalSelectAllChildren(element: FilterListItem) {\n        element.children.forEach(child => {\n            child.indeterminate = false;\n            child.isSelected = true;\n            this._hierarchicalSelectedItems.push(child);\n            if (child.children) {\n                this.hierarchicalSelectAllChildren(child);\n            }\n        })\n    }\n\n    private expandAllParentNodes(node: any) {\n        if (node.parentNode) {\n            node.parentNode.expanded = true;\n            this.expandAllParentNodes(node.parentNode);\n        }\n    }\n\n    private addFilteredToSelectedItems(records: FilterListItem[]) {\n        records.forEach(record => {\n            if (record.children) {\n                this.addFilteredToSelectedItems(record.children);\n            }\n\n            if (record.isFiltered && this._hierarchicalSelectedItems.indexOf(record) < 0) {\n                this._hierarchicalSelectedItems.push(record);\n            }\n        })\n    }\n\n    private createCondition(conditionName: string) {\n        switch (this.esf.column.dataType) {\n            case GridColumnDataType.Boolean:\n                return IgxBooleanFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n            case GridColumnDataType.Percent:\n                return IgxNumberFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Date:\n                return IgxDateFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.Time:\n                return IgxTimeFilteringOperand.instance().condition(conditionName);\n            case GridColumnDataType.DateTime:\n                return IgxDateTimeFilteringOperand.instance().condition(conditionName);\n            default:\n                return IgxStringFilteringOperand.instance().condition(conditionName);\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    private rejectNonNumericalEntries(): void {\n        const regExp = /[^0-9\\.,eE\\-]/g;\n        if (this.searchValue && regExp.test(this.searchValue)) {\n            this.searchInput.value = this.searchValue.replace(regExp, '');\n            this.searchValue = this.searchInput.value;\n        }\n    }\n\n    private onArrowUpKeyDown() {\n        if (this.focusedItem && this.focusedItem.index === 0 && this.virtDir.state.startIndex === 0) {\n            // on ArrowUp the focus stays on the same element if it is the first focused\n            return;\n        } else {\n            this.navigateItem(this.focusedItem ? this.focusedItem.index - 1 : 0);\n        }\n        this.setActiveDescendant();\n    }\n\n    private onArrowDownKeyDown() {\n        const lastIndex = this.virtDir.igxForOf.length - 1;\n        if (this.focusedItem && this.focusedItem.index === lastIndex) {\n            // on ArrowDown the focus stays on the same element if it is the last focused\n            return;\n        } else {\n            this.navigateItem(this.focusedItem ? this.focusedItem.index + 1 : 0);\n        }\n        this.setActiveDescendant();\n    }\n\n    private onHomeKeyDown() {\n        this.navigateItem(0);\n        this.setActiveDescendant();\n    }\n\n    private onEndKeyDown() {\n        this.navigateItem(this.virtDir.igxForOf.length - 1);\n        this.setActiveDescendant();\n    }\n\n    private onActionKeyDown() {\n        const dataItem = this.displayedListData[this.focusedItem.index];\n        const args: IChangeCheckboxEventArgs = {\n            checked: !dataItem.isSelected,\n            owner: {\n                value: dataItem\n            }\n        }\n        this.onCheckboxChange(args);\n    }\n\n    private navigateItem(index: number) {\n        if (index === -1 || index >= this.virtDir.igxForOf.length) {\n            return;\n        }\n        const direction = index > (this.focusedItem ? this.focusedItem.index : -1) ? Navigate.Down : Navigate.Up;\n        const scrollRequired = this.isIndexOutOfBounds(index, direction);\n        this.focusedItem = {\n            id: this.getItemId(index),\n            index: index,\n            checked: this.virtDir.igxForOf[index].isSelected\n        };\n        if (scrollRequired) {\n            this.virtDir.scrollTo(index);\n        }\n    }\n\n    private isIndexOutOfBounds(index: number, direction: Navigate) {\n        const virtState = this.virtDir.state;\n        const currentPosition = this.virtDir.getScroll().scrollTop;\n        const itemPosition = this.virtDir.getScrollForIndex(index, direction === Navigate.Down);\n        const indexOutOfChunk = index < virtState.startIndex || index > virtState.chunkSize + virtState.startIndex;\n        const scrollNeeded = direction === Navigate.Down ? currentPosition < itemPosition : currentPosition > itemPosition;\n        const subRequired = indexOutOfChunk || scrollNeeded;\n        return subRequired;\n    }\n}\n","<igx-input-group type=\"box\">\n    <igx-icon igxPrefix family=\"default\" name=\"search\"></igx-icon>\n    <input\n        #input\n        igxInput\n        tabindex=\"0\"\n        [(ngModel)]=\"searchValue\"\n        (ngModelChange)=\"filterListData()\"\n        (keydown)=\"onInputKeyDown($event)\"\n        [placeholder]=\"esf.column?.grid.resourceStrings.igx_grid_excel_search_placeholder\"\n        autocomplete=\"off\"/>\n        @if (searchValue || searchValue === 0) {\n            <igx-suffix>\n                <igx-icon\n                    family=\"default\"\n                    name=\"input_clear\"\n                    (click)=\"clearInput()\"\n                    tabindex=\"0\">\n                </igx-icon>\n            </igx-suffix>\n        }\n</igx-input-group>\n\n@if (!isHierarchical()) {\n    <igx-list #list role=\"listbox\" [isLoading]=\"isLoading\" (keydown)=\"handleKeyDown($event)\" tabindex=\"0\"\n        [attr.aria-activedescendant]=\"this.activeDescendant\" (focus)=\"onFocus()\" (focusout)=\"onFocusOut()\">\n        <div style=\"overflow: hidden; position: relative;\">\n            <igx-list-item [class.igx-list__item-base--active]=\"focusedItem?.id === this.getItemId(i)\" [attr.id]=\"getItemId(i)\" role=\"option\"\n                *igxFor=\"let item of displayedListData;index as i; scrollOrientation : 'vertical'; containerSize: containerSize; itemSize: itemSize\">\n                <igx-checkbox\n                    [value]=\"item\"\n                    [tabindex]=\"-1\"\n                    [checked]=\"item?.isSelected\"\n                    [disableRipple]=\"true\"\n                    [indeterminate]=\"item?.indeterminate\"\n                    [disableTransitions]=\"true\"\n                    (change)=\"onCheckboxChange($event)\">\n                    {{ item.label }}\n                </igx-checkbox>\n            </igx-list-item>\n        </div>\n        <ng-template igxDataLoading>\n            <div class=\"igx-excel-filter__loading\">\n                <ng-container *ngTemplateOutlet=\"valuesLoadingTemplate\">\n                </ng-container>\n            </div>\n        </ng-template>\n        <ng-template igxEmptyList>\n            <ng-container *ngTemplateOutlet=\"emptySearch\"></ng-container>\n        </ng-template>\n        <div class=\"igx-excel-filter__filter-results\" aria-live=\"polite\" aria-atomic=\"true\">\n            {{ esf.grid?.resourceStrings.igx_grid_excel_matches_count.replace('{0}', matchesCount) }}\n        </div>\n    </igx-list>\n}\n\n@if (isHierarchical()) {\n    <div class=\"igx-excel-filter__tree\">\n        @if (!isTreeEmpty()) {\n            <div class=\"igx-excel-filter__tree-alike\">\n                <div class=\"igx-excel-filter__tree-alike-item\">\n                    <igx-checkbox #selectAllCheckbox\n                        [value]=\"selectAllItem\"\n                        [checked]=\"selectAllItem?.isSelected\"\n                        [disableRipple]=\"true\"\n                        [indeterminate]=\"selectAllItem?.indeterminate\"\n                        [disableTransitions]=\"true\"\n                        (change)=\"onSelectAllCheckboxChange($event)\">\n                        {{ selectAllItem.label }}\n                    </igx-checkbox>\n                </div>\n                @if (searchValue) {\n                    <div class=\"igx-excel-filter__tree-alike-item\">\n                        <igx-checkbox #addToCurrentFilterCheckbox\n                            [value]=\"addToCurrentFilterItem\"\n                            [checked]=\"addToCurrentFilterItem.isSelected\"\n                            [disableRipple]=\"true\"\n                            [disableTransitions]=\"true\">\n                            {{ addToCurrentFilterItem.label }}\n                        </igx-checkbox>\n                    </div>\n                }\n            </div>\n        }\n        <igx-tree #tree selection=\"Cascading\"  (nodeSelection)=\"onNodeSelectionChange($event)\">\n            @for (item of displayedListData; track item.value) {\n                <igx-tree-node [data]=\"item\" [selected]=\"item.isSelected\">\n                    <div>{{item.label}}</div>\n                    @for (childLevel1 of item.children; track childLevel1.value) {\n                        <igx-tree-node [data]=\"childLevel1\" [selected]=\"childLevel1.isSelected\">\n                            <div>{{childLevel1.label}}</div>\n                            @for (childLevel2 of childLevel1.children; track childLevel2.value) {\n                                <igx-tree-node [data]=\"childLevel2\" [selected]=\"childLevel2.isSelected\">\n                                    <div>{{childLevel2.label}}</div>\n                                    @for (childLevel3 of childLevel2.children; track childLevel3.value) {\n                                        <igx-tree-node [data]=\"childLevel3\" [selected]=\"childLevel3.isSelected\">\n                                            <div>{{childLevel3.label}}</div>\n                                            @for (childLevel4 of childLevel3.children; track childLevel4.value) {\n                                                <igx-tree-node [data]=\"childLevel4\" [selected]=\"childLevel4.isSelected\">\n                                                    <div>{{childLevel4.label}}</div>\n                                                    @for (childLevel5 of childLevel4.children; track childLevel5.value) {\n                                                        <igx-tree-node [data]=\"childLevel5\" [selected]=\"childLevel5.isSelected\">\n                                                            <div>{{childLevel5.label}}</div>\n                                                            @for (childLevel6 of childLevel5.children; track childLevel6.value) {\n                                                                <igx-tree-node [data]=\"childLevel6\" [selected]=\"childLevel6.isSelected\">\n                                                                    <div>{{childLevel6.label}}</div>\n                                                                    @for (childLevel7 of childLevel6.children; track childLevel7.value) {\n                                                                        <igx-tree-node [data]=\"childLevel7\" [selected]=\"childLevel7.isSelected\">\n                                                                            <div>{{childLevel7.label}}</div>\n                                                                            @for (childLevel8 of childLevel7.children; track childLevel8.value) {\n                                                                                <igx-tree-node [data]=\"childLevel8\" [selected]=\"childLevel8.isSelected\">\n                                                                                    <div>{{childLevel8.label}}</div>\n                                                                                    @for (childLevel9 of childLevel8.children; track childLevel9.value) {\n                                                                                        <igx-tree-node [data]=\"childLevel9\" [selected]=\"childLevel9.isSelected\">\n                                                                                            <div>{{childLevel9.label}}</div>\n                                                                                        </igx-tree-node>\n                                                                                    }\n                                                                                </igx-tree-node>\n                                                                            }\n                                                                        </igx-tree-node>\n                                                                    }\n                                                                </igx-tree-node>\n                                                            }\n                                                        </igx-tree-node>\n                                                    }\n                                                </igx-tree-node>\n                                            }\n                                        </igx-tree-node>\n                                    }\n                                </igx-tree-node>\n                            }\n                        </igx-tree-node>\n                    }\n                </igx-tree-node>\n            }\n        </igx-tree>\n        <ng-template igxDataLoading>\n            <div class=\"igx-excel-filter__loading\">\n                <ng-container *ngTemplateOutlet=\"valuesLoadingTemplate\">\n                </ng-container>\n            </div>\n        </ng-template>\n        @if (isTreeEmpty()) {\n            <ng-container *ngTemplateOutlet=\"emptySearch\"></ng-container>\n        }\n    </div>\n}\n\n<ng-template #emptySearch>\n    <div class=\"igx-excel-filter__empty\">\n        {{esf.grid?.resourceStrings.igx_grid_excel_no_matches}}\n    </div>\n</ng-template>\n\n<ng-template #defaultExcelStyleLoadingValuesTemplate>\n    <igx-circular-bar [indeterminate]=\"true\">\n    </igx-circular-bar>\n</ng-template>\n\n<footer class=\"igx-excel-filter__menu-footer\">\n    <div class=\"igx-excel-filter__cancel\">\n        <button type=\"button\" #cancelButton\n            igxButton=\"flat\"\n            (click)=\"esf.cancel()\">\n                {{ esf.grid?.resourceStrings.igx_grid_excel_cancel }}\n        </button>\n    </div>\n    <div class=\"igx-excel-filter__apply\">\n        <button type=\"button\"\n            igxButton=\"contained\"\n            [disabled]=\"applyButtonDisabled\"\n            (click)=\"applyFilter()\">\n                {{ esf.grid?.resourceStrings.igx_grid_excel_apply }}\n        </button>\n    </div>\n</footer>\n","import { Component, inject } from '@angular/core';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { NgClass } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\n\n/**\n * A component used for presenting Excel style conditional filter UI.\n */\n@Component({\n    selector: 'igx-excel-style-selecting',\n    templateUrl: './excel-style-selecting.component.html',\n    imports: [NgClass, IgxIconComponent]\n})\nexport class IgxExcelStyleSelectingComponent {\n    public esf = inject(BaseFilteringComponent);\n}\n","@if (esf.column) {\n    <div\n        [ngClass]=\"esf.column.selected ? 'igx-excel-filter__actions-selected' : 'igx-excel-filter__actions-select'\"\n        tabindex=\"0\"\n        (click)=\"esf.onSelect()\"\n        role=\"button\"\n        [attr.aria-pressed]=\"esf.column.selected\">\n        <span>{{esf.grid.resourceStrings.igx_grid_excel_select }}</span>\n        <igx-icon family=\"default\" name=\"selected\"></igx-icon>\n    </div>\n}\n","import { Component, ViewChild, OnDestroy, HostBinding, ChangeDetectorRef, inject } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { IgxButtonGroupComponent } from 'igniteui-angular/button-group';\nimport { IgxButtonDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\n\n/**\n * A component used for presenting Excel style column sorting UI.\n */\n@Component({\n    selector: 'igx-excel-style-sorting',\n    templateUrl: './excel-style-sorting.component.html',\n    imports: [IgxButtonGroupComponent, IgxButtonDirective, IgxIconComponent]\n})\nexport class IgxExcelStyleSortingComponent implements OnDestroy {\n    public esf = inject(BaseFilteringComponent);\n    private cdr = inject(ChangeDetectorRef);\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter__sort')\n    public defaultClass = true;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('sortButtonGroup', { read: IgxButtonGroupComponent })\n    public sortButtonGroup: IgxButtonGroupComponent;\n\n    private destroy$ = new Subject<boolean>();\n\n    constructor() {\n        this.esf.sortingChanged.pipe(takeUntil(this.destroy$)).subscribe(() => {\n            this.updateSelectedButtons(this.esf.column.field);\n        });\n     }\n\n     public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSortButtonClicked(sortDirection) {\n        if (this.sortButtonGroup.buttons.filter(b => b.selected).length === 0) {\n            if (this.esf.grid.isColumnGrouped(this.esf.column.field)) {\n                this.sortButtonGroup.selectButton(sortDirection - 1);\n            } else {\n                this.esf.grid.clearSort(this.esf.column.field);\n            }\n        } else {\n            this.esf.grid.sort({ fieldName: this.esf.column.field, dir: sortDirection, ignoreCase: true });\n        }\n    }\n\n    protected get esfSize(): string {\n        const esf = this.esf as any;\n        return esf.size;\n    }\n\n    private updateSelectedButtons(fieldName: string) {\n        const sortIndex = this.esf.grid.sortingExpressions.findIndex(s => s.fieldName === fieldName);\n\n        this.cdr.detectChanges();\n        this.sortButtonGroup.buttons.forEach((b, i) => {\n            this.sortButtonGroup.deselectButton(i);\n        });\n\n        if (sortIndex !== -1 ) {\n            const sortDirection = this.esf.grid.sortingExpressions[sortIndex].dir;\n            this.sortButtonGroup.selectButton(sortDirection - 1);\n        }\n    }\n}\n","@if (esf.column) {\n    <header>\n        {{ esf.grid.resourceStrings.igx_grid_excel_filter_sorting_header }}\n    </header>\n    <igx-buttongroup #sortButtonGroup>\n        <button type=\"button\"\n            igxButton\n            [attr.data-togglable]=\"true\"\n            (buttonSelected)=\"onSortButtonClicked(1)\"\n            >\n            <igx-icon family=\"default\" name=\"sort_asc\"></igx-icon>\n            <span>\n                {{ esfSize === '1'?\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_asc_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_asc  }}\n            </span>\n        </button>\n        <button type=\"button\"\n            igxButton\n            [attr.data-togglable]=\"true\"\n            (buttonSelected)=\"onSortButtonClicked(2)\"\n            >\n            <igx-icon family=\"default\" name=\"sort_desc\"></igx-icon>\n            <span>\n                {{ esfSize === '1' ?\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_desc_short:\n                esf.grid.resourceStrings.igx_grid_excel_filter_sorting_desc\n                }}\n            </span>\n        </button>\n    </igx-buttongroup>\n}\n","import {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ContentChild,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    Input,\n    OnDestroy,\n    Output,\n    TemplateRef,\n    ViewChild,\n    ViewRef,\n    DOCUMENT,\n    inject\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { GridSelectionMode } from '../../common/enums';\nimport { NgClass } from '@angular/common';\nimport { BaseFilteringComponent } from './base-filtering.component';\nimport { ExpressionUI, FilterListItem, generateExpressionsList } from './common';\nimport { GridType, IGX_GRID_BASE } from '../../common/grid.interface';\nimport { IgxExcelStyleSearchComponent } from './excel-style-search.component';\nimport { IgxExcelStyleConditionalFilterComponent } from './excel-style-conditional-filter.component';\nimport { IgxExcelStyleClearFiltersComponent } from './excel-style-clear-filters.component';\nimport { IgxExcelStyleSelectingComponent } from './excel-style-selecting.component';\nimport { IgxExcelStyleHidingComponent } from './excel-style-hiding.component';\nimport { IgxExcelStylePinningComponent } from './excel-style-pinning.component';\nimport { IgxExcelStyleMovingComponent } from './excel-style-moving.component';\nimport { IgxExcelStyleSortingComponent } from './excel-style-sorting.component';\nimport { IgxExcelStyleHeaderComponent } from './excel-style-header.component';\nimport { ColumnType, FilteringExpressionsTree, GridColumnDataType, GridTypeBase, IFilteringExpressionsTree, IgxFilterItem, IgxOverlayService, isTree, SortingDirection } from 'igniteui-angular/core';\n\n@Directive({\n    selector: '[igxExcelStyleColumnOperations],igx-excel-style-column-operations',\n    standalone: true\n})\nexport class IgxExcelStyleColumnOperationsTemplateDirective { }\n\n@Directive({\n    selector: '[igxExcelStyleFilterOperations],igx-excel-style-filter-operations',\n    standalone: true\n})\nexport class IgxExcelStyleFilterOperationsTemplateDirective { }\n\n/**\n * A component used for presenting Excel style filtering UI for a specific column.\n * It is used internally in the Grid, but could also be hosted in a container outside of it.\n *\n * Example:\n * ```html\n * <igx-grid-excel-style-filtering\n *     [column]=\"grid1.columns[0]\">\n * </igx-grid-excel-style-filtering>\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    providers: [{ provide: BaseFilteringComponent, useExisting: forwardRef(() => IgxGridExcelStyleFilteringComponent) }],\n    selector: 'igx-grid-excel-style-filtering',\n    templateUrl: './excel-style-filtering.component.html',\n    imports: [IgxExcelStyleHeaderComponent, IgxExcelStyleSortingComponent, IgxExcelStyleMovingComponent, IgxExcelStylePinningComponent, IgxExcelStyleHidingComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleClearFiltersComponent, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleSearchComponent, NgClass]\n})\nexport class IgxGridExcelStyleFilteringComponent extends BaseFilteringComponent implements AfterViewInit, OnDestroy {\n    private document = inject(DOCUMENT);\n    protected gridAPI? = inject<GridType>(IGX_GRID_BASE, { host: true, optional: true });\n\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter')\n    public defaultClass = true;\n\n    @HostBinding('class.igx-excel-filter__sizing')\n    protected get shouldApplySizes(): boolean {\n        return !(this._minHeight || this._maxHeight);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    @HostBinding('class.igx-excel-filter--inline')\n    public inline = true;\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public loadingStart = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public loadingEnd = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public initialized = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public sortingChanged = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public columnChange = new EventEmitter<ColumnType>();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public listDataLoaded = new EventEmitter();\n\n    /**\n     * @hidden @internal\n     */\n    @Output()\n    public filterCleared = new EventEmitter();\n\n    @ViewChild('mainDropdown', { read: ElementRef })\n    public mainDropdown: ElementRef<HTMLElement>;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxExcelStyleColumnOperationsTemplateDirective, { read: IgxExcelStyleColumnOperationsTemplateDirective })\n    public excelColumnOperationsDirective: IgxExcelStyleColumnOperationsTemplateDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ContentChild(IgxExcelStyleFilterOperationsTemplateDirective, { read: IgxExcelStyleFilterOperationsTemplateDirective })\n    public excelFilterOperationsDirective: IgxExcelStyleFilterOperationsTemplateDirective;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExcelColumnOperations', { read: TemplateRef, static: true })\n    protected defaultExcelColumnOperations: TemplateRef<any>;\n\n    /**\n     * @hidden @internal\n     */\n    @ViewChild('defaultExcelFilterOperations', { read: TemplateRef, static: true })\n    protected defaultExcelFilterOperations: TemplateRef<any>;\n\n    /**\n     * Sets the column.\n     */\n    @Input()\n    public set column(value: ColumnType) {\n        if (value) {\n            this._column = value;\n            this.columnChange.emit(this._column);\n            if (this.inline) {\n                // In case external filtering\n                this.populateData();\n            }\n        }\n    }\n\n    /**\n     * Returns the current column.\n     */\n    public get column(): ColumnType {\n        return this._column;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public expressionsList = new Array<ExpressionUI>();\n    /**\n     * @hidden @internal\n     */\n    public listData = new Array<FilterListItem>();\n    /**\n     * @hidden @internal\n     */\n    public uniqueValues: IgxFilterItem[] = [];\n    /**\n     * @hidden @internal\n     */\n    public overlayService: IgxOverlayService;\n    /**\n     * @hidden @internal\n     */\n    public overlayComponentId: string;\n    /**\n     * @hidden @internal\n     */\n    public isHierarchical = false;\n\n    private _minHeight;\n\n    /**\n     * Gets the minimum height.\n     *\n     * Setting value in template:\n     * ```ts\n     * [minHeight]=\"'<number><unit (px|rem|etc..)>'\"\n     * ```\n     *\n     * Example for setting a value:\n     * ```ts\n     * [minHeight]=\"'700px'\"\n     * ```\n     */\n    @Input()\n    public get minHeight(): string {\n        if (this._minHeight || this._minHeight === 0) {\n            return this._minHeight;\n        }\n    }\n\n    /**\n     * Sets the minimum height.\n     */\n    public set minHeight(value: string) {\n        this._minHeight = value;\n    }\n\n\n    private _maxHeight: string;\n    private containsNullOrEmpty = false;\n    private selectAllSelected = true;\n    private selectAllIndeterminate = false;\n    private filterValues = new Set<any>();\n    private _column: ColumnType;\n    private subscriptions: Subscription;\n    private _originalDisplay: string;\n\n    /**\n     * Gets the maximum height.\n     *\n     * Setting value in template:\n     * ```ts\n     * [maxHeight]=\"'<number><unit (px|rem|etc..)>'\"\n     * ```\n     *\n     * Example for setting a value:\n     * ```ts\n     * [maxHeight]=\"'700px'\"\n     * ```\n     */\n    @Input()\n    @HostBinding('style.max-height')\n    public get maxHeight(): string {\n        if (this._maxHeight) {\n            return this._maxHeight;\n        }\n    }\n\n    /**\n     * Sets the maximum height.\n     */\n    public set maxHeight(value: string) {\n        this._maxHeight = value;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get grid(): GridTypeBase {\n        return this.column?.grid ?? this.gridAPI;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this.subscriptions?.unsubscribe();\n        delete this.overlayComponentId;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngAfterViewInit(): void {\n        this.computedStyles = this.document.defaultView.getComputedStyle(this.element.nativeElement);\n    }\n\n\n    /**\n     * @hidden @internal\n     */\n    public initialize(column: ColumnType, overlayService: IgxOverlayService) {\n        this.inline = false;\n        this.column = column;\n        this.overlayService = overlayService;\n\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public populateData() {\n        if (this.column) {\n            this.afterColumnChange();\n        }\n        if (this._originalDisplay) {\n            this.element.nativeElement.style.display = this._originalDisplay;\n        }\n\n        this.initialized.emit();\n        this.subscriptions.add(this.grid.columnMoving.subscribe(() => this.closeDropdown()));\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPin() {\n        this.closeDropdown();\n        this.column.pinned = !this.column.pinned;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSelect() {\n        if (!this.column.selected) {\n            this.grid.selectionService.selectColumn(this.column.field, this.grid.columnSelection === GridSelectionMode.single);\n        } else {\n            this.grid.selectionService.deselectColumn(this.column.field);\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public columnSelectable() {\n        return this.grid?.columnSelection !== GridSelectionMode.none && this.column?.selectable;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onHideToggle() {\n        this.column.toggleVisibility();\n        this.closeDropdown();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public cancel() {\n        if (!this.overlayComponentId) {\n            this.init();\n        }\n        this.closeDropdown();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public closeDropdown() {\n        if (this.overlayComponentId) {\n            this.overlayService.hide(this.overlayComponentId);\n            this.overlayComponentId = null;\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onKeyDown(eventArgs: KeyboardEvent) {\n        if (this.platform.isFilteringKeyCombo(eventArgs)) {\n            eventArgs.preventDefault();\n            this.closeDropdown();\n        }\n        eventArgs.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public hide() {\n        this._originalDisplay = this.computedStyles.display;\n        this.element.nativeElement.style.display = 'none';\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public detectChanges() {\n        this.cdr.detectChanges();\n    }\n\n    protected computedStyles;\n\n    protected get size(): string {\n        return this.computedStyles?.getPropertyValue('--component-size');\n    }\n\n    protected afterColumnChange() {\n        this.listData = new Array<FilterListItem>();\n        this.subscriptions?.unsubscribe();\n\n        if (this._column) {\n            this.grid.filteringService.registerSVGIcons();\n            this.init();\n            this.sortingChanged.emit();\n\n            this.subscriptions = this.grid.columnPin.subscribe(() => {\n                requestAnimationFrame(() => {\n                    if (!(this.cdr as ViewRef).destroyed) {\n                        this.cdr.detectChanges();\n                    }\n                });\n            });\n\n            this.subscriptions.add(this.grid.columnVisibilityChanged.subscribe(() => this.detectChanges()));\n            this.subscriptions.add(this.grid.sortingExpressionsChange.subscribe(() => this.sortingChanged.emit()));\n            this.subscriptions.add(this.grid.filteringExpressionsTreeChange.subscribe(() => {\n                this.expressionsList = new Array<ExpressionUI>();\n                generateExpressionsList(this.column.filteringExpressionsTree, this.grid.filteringLogic, this.expressionsList);\n                this.cdr.detectChanges();\n            }));\n            this.subscriptions.add(this.grid.columnMovingEnd.subscribe(() => this.cdr.markForCheck()));\n        }\n    }\n\n    private init() {\n        this.expressionsList = new Array<ExpressionUI>();\n        generateExpressionsList(this.column.filteringExpressionsTree, this.grid.filteringLogic, this.expressionsList);\n        this.populateColumnData();\n    }\n\n    private areExpressionsSelectable() {\n        if (this.expressionsList.length === 1 &&\n            (this.expressionsList[0].expression.condition.name === 'equals' ||\n                this.expressionsList[0].expression.condition.name === 'at' ||\n                this.expressionsList[0].expression.condition.name === 'true' ||\n                this.expressionsList[0].expression.condition.name === 'false' ||\n                this.expressionsList[0].expression.condition.name === 'empty' ||\n                this.expressionsList[0].expression.condition.name === 'in')) {\n            return true;\n        }\n\n        const selectableExpressionsCount = this.expressionsList.filter(exp =>\n            (exp.beforeOperator === 1 || exp.afterOperator === 1) &&\n            (exp.expression.condition.name === 'equals' ||\n                exp.expression.condition.name === 'at' ||\n                exp.expression.condition.name === 'true' ||\n                exp.expression.condition.name === 'false' ||\n                exp.expression.condition.name === 'empty' ||\n                exp.expression.condition.name === 'in')).length;\n\n        return selectableExpressionsCount === this.expressionsList.length;\n    }\n\n    private populateColumnData() {\n        this.cdr.detectChanges();\n\n        if (this.grid.uniqueColumnValuesStrategy) {\n            this.renderColumnValuesRemotely();\n        } else {\n            this.renderColumnValuesFromData();\n        }\n    }\n\n    private renderColumnValuesRemotely() {\n        this.loadingStart.emit();\n        const expressionsTree: FilteringExpressionsTree = this.getColumnFilterExpressionsTree();\n\n        const prevColumn = this.column;\n        this.grid.uniqueColumnValuesStrategy(this.column, expressionsTree, (values: any[]) => {\n            if (!this.column || this.column !== prevColumn) {\n                return;\n            }\n\n            const items = values.map(v => ({\n                value: v\n            }));\n\n            this.uniqueValues = this.column.sortStrategy.sort(items, 'value', SortingDirection.Asc, this.column.sortingIgnoreCase,\n                (obj, key) => {\n                    let resolvedValue = obj[key];\n                    if (this.column.dataType === GridColumnDataType.Time) {\n                        resolvedValue = new Date().setHours(\n                            resolvedValue.getHours(),\n                            resolvedValue.getMinutes(),\n                            resolvedValue.getSeconds(),\n                            resolvedValue.getMilliseconds());\n                    }\n\n                    return resolvedValue;\n                });\n\n            this.renderValues();\n            this.loadingEnd.emit();\n        });\n    }\n\n    private renderColumnValuesFromData() {\n        this.loadingStart.emit();\n\n        const expressionsTree = this.getColumnFilterExpressionsTree();\n        const promise = this.grid.filterStrategy.getFilterItems(this.column, expressionsTree);\n        promise.then((items) => {\n            this.isHierarchical = items.length > 0 && items.some(i => i.children && i.children.length > 0);\n            this.uniqueValues = items;\n            this.renderValues();\n            this.loadingEnd.emit();\n            this.sortingChanged.emit();\n        });\n    }\n\n    private renderValues() {\n        this.filterValues = this.generateFilterValues();\n        this.generateListData();\n    }\n\n    private generateFilterValues() {\n        const formatValue = (value: any): any => {\n            if (!value) return value;\n\n            switch (this.column.dataType) {\n                case GridColumnDataType.Date:\n                    return new Date(value).toDateString();\n                case GridColumnDataType.DateTime:\n                    return new Date(value).toISOString();\n                case GridColumnDataType.Time:\n                    return typeof value === 'string' ? value : new Date(value).toLocaleTimeString();\n                default:\n                    return value;\n            }\n        };\n\n        const processExpression = (arr: any[], e: any): any[] => {\n            if (e.expression.condition.name === 'in') {\n                return [...arr, ...Array.from((e.expression.searchVal as Set<any>).values()).map(v => formatValue(v))];\n            }\n            return [...arr, formatValue(e.expression.searchVal)];\n        };\n\n        const filterValues = new Set<any>(this.expressionsList.reduce(processExpression, []));\n\n        return filterValues;\n    }\n\n    private generateListData() {\n        this.listData = new Array<FilterListItem>();\n        const shouldUpdateSelection = this.areExpressionsSelectable();\n\n        if (this.column.dataType === GridColumnDataType.Boolean) {\n            this.addBooleanItems();\n        } else {\n            this.addItems(shouldUpdateSelection);\n        }\n\n        if (!this.isHierarchical && this.containsNullOrEmpty) {\n            const blanksItem = this.generateBlanksItem(shouldUpdateSelection);\n            this.listData.unshift(blanksItem);\n        }\n\n        if (this.listData.length > 0) {\n            this.addSelectAllItem();\n        }\n\n        if (!(this.cdr as any).destroyed) {\n            this.cdr.detectChanges();\n        }\n\n        this.listDataLoaded.emit();\n    }\n\n    private getColumnFilterExpressionsTree() {\n        const gridExpressionsTree: IFilteringExpressionsTree = this.grid.filteringExpressionsTree;\n        const expressionsTree = new FilteringExpressionsTree(gridExpressionsTree.operator, gridExpressionsTree.fieldName);\n\n        for (const operand of gridExpressionsTree.filteringOperands) {\n            if (isTree(operand)) {\n                const columnExprTree = operand as FilteringExpressionsTree;\n                if (columnExprTree.fieldName === this.column.field) {\n                    continue;\n                }\n            }\n            expressionsTree.filteringOperands.push(operand);\n        }\n\n        return expressionsTree;\n    }\n\n    private addBooleanItems() {\n        this.selectAllSelected = true;\n        this.selectAllIndeterminate = false;\n        this.uniqueValues.forEach(element => {\n            const value = element.value;\n            const filterListItem = new FilterListItem();\n            if (value !== undefined && value !== null && value !== '') {\n                if (this.column.filteringExpressionsTree) {\n                    if (value === true && this.expressionsList.find(exp => exp.expression.condition.name === 'true')) {\n                        filterListItem.isSelected = true;\n                        filterListItem.isFiltered = true;\n                        this.selectAllIndeterminate = true;\n                    } else if (value === false && this.expressionsList.find(exp => exp.expression.condition.name === 'false')) {\n                        filterListItem.isSelected = true;\n                        filterListItem.isFiltered = true;\n                        this.selectAllIndeterminate = true;\n                    } else {\n                        filterListItem.isSelected = false;\n                        filterListItem.isFiltered = false;\n                    }\n                } else {\n                    filterListItem.isSelected = true;\n                    filterListItem.isFiltered = true;\n                }\n                filterListItem.value = value;\n                filterListItem.label = value ?\n                    this.grid.resourceStrings.igx_grid_filter_true :\n                    this.grid.resourceStrings.igx_grid_filter_false;\n                filterListItem.indeterminate = false;\n                this.listData.push(filterListItem);\n            } else {\n                this.containsNullOrEmpty = true;\n            }\n        });\n    }\n\n    private addItems(shouldUpdateSelection: boolean) {\n        this.selectAllSelected = true;\n        this.selectAllIndeterminate = false;\n        this.containsNullOrEmpty = false;\n        this.listData = this.generateFilterListItems(this.uniqueValues, shouldUpdateSelection);\n        this.containsNullOrEmpty = this.uniqueValues.length > this.listData.length;\n    }\n\n    private generateFilterListItems(values: IgxFilterItem[], shouldUpdateSelection: boolean, parent?: FilterListItem) {\n        const filterListItems = [];\n        values?.forEach(element => {\n            const value = element.value;\n            const hasValue = value !== undefined && value !== null && value !== '';\n\n            if (hasValue) {\n                const filterListItem = new FilterListItem();\n                filterListItem.parent = parent;\n                filterListItem.value = value;\n                filterListItem.label = element.label !== undefined ?\n                    element.label :\n                    this.getFilterItemLabel(value);\n                filterListItem.indeterminate = false;\n                filterListItem.isSelected = true;\n                filterListItem.isFiltered = true;\n\n                if (this.column.filteringExpressionsTree) {\n                    filterListItem.isSelected = false;\n                    filterListItem.isFiltered = false;\n\n                    if (shouldUpdateSelection) {\n                        const exprValue = this.getExpressionValue(value);\n                        if (this.filterValues.has(exprValue)) {\n                            filterListItem.isSelected = true;\n                            filterListItem.isFiltered = true;\n                        }\n                        this.selectAllIndeterminate = true;\n                    } else {\n                        this.selectAllSelected = false;\n                    }\n                }\n\n                filterListItem.children = this.generateFilterListItems(element.children ?? element.value?.children, shouldUpdateSelection, filterListItem);\n                filterListItems.push(filterListItem);\n            }\n        });\n\n        return filterListItems;\n    }\n\n    private addSelectAllItem() {\n        const selectAll = new FilterListItem();\n        selectAll.isSelected = this.selectAllSelected;\n        selectAll.value = this.grid.resourceStrings.igx_grid_excel_select_all;\n        selectAll.label = this.grid.resourceStrings.igx_grid_excel_select_all;\n        selectAll.indeterminate = this.selectAllIndeterminate;\n        selectAll.isSpecial = true;\n        selectAll.isFiltered = this.selectAllSelected;\n        this.listData.unshift(selectAll);\n    }\n\n    private generateBlanksItem(shouldUpdateSelection) {\n        const blanks = new FilterListItem();\n        if (this.column.filteringExpressionsTree) {\n            if (shouldUpdateSelection) {\n                if (this.filterValues.has(null)) {\n                    blanks.isSelected = true;\n                    blanks.isFiltered = true;\n                } else {\n                    blanks.isSelected = false;\n                    blanks.isFiltered = false;\n                }\n            }\n        } else {\n            blanks.isSelected = true;\n            blanks.isFiltered = true;\n        }\n        blanks.value = null;\n        blanks.label = this.grid.resourceStrings.igx_grid_excel_blanks;\n        blanks.indeterminate = false;\n        blanks.isSpecial = true;\n        blanks.isBlanks = true;\n\n        return blanks;\n    }\n\n    private getFilterItemLabel(value: any, applyFormatter = true, data?: any) {\n        if (this.column.formatter) {\n            if (applyFormatter) {\n                return this.column.formatter(value, data);\n            }\n            return value;\n        }\n\n        const { display, format, digitsInfo, currencyCode, timezone } = this.column.pipeArgs;\n        const locale = this.grid.locale;\n        const i18nFormatter = this.grid.i18nFormatter;\n\n        switch (this.column.dataType) {\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return i18nFormatter.formatDate(value, format, locale, timezone);\n            case GridColumnDataType.Currency: {\n                const currencyCodeFinal = i18nFormatter.getCurrencyCode(locale, currencyCode);\n                return i18nFormatter.formatCurrency(value, locale, display, currencyCodeFinal, digitsInfo); }\n            case GridColumnDataType.Number:\n                return i18nFormatter.formatNumber(value, locale, digitsInfo);\n            case GridColumnDataType.Percent:\n                return i18nFormatter.formatPercent(value, locale, digitsInfo);\n            default:\n                return value;\n        }\n    }\n\n    private getExpressionValue(value: any): string {\n        if (this.column.dataType === GridColumnDataType.Date) {\n            value = value ? new Date(value).toDateString() : value;\n        } else if (this.column.dataType === GridColumnDataType.DateTime) {\n            value = value ? new Date(value).toISOString() : value;\n        } else if (this.column.dataType === GridColumnDataType.Time) {\n            value = value ? new Date(value).toLocaleTimeString() : value;\n        }\n\n        return value;\n    }\n}\n","<article #mainDropdown\n    class=\"igx-excel-filter__menu\"\n    [ngClass]=\"{\n        'igx-excel-filter__sizing': shouldApplySizes,\n        'igx-excel-filter__menu--cosy': size === '2',\n        'igx-excel-filter__menu--compact': size === '1'\n    }\"\n    [id]=\"overlayComponentId\"\n    (keydown)=\"onKeyDown($event)\"\n    [style.min-height]=\"minHeight\"\n    [style.max-height]=\"maxHeight\"\n    role=\"menu\">\n\n    @if (this.excelColumnOperationsDirective) {\n        <ng-content select=\"igx-excel-style-column-operations,[igxExcelStyleColumnOperations]\">\n        </ng-content>\n    } @else {\n        <igx-excel-style-header\n            [showHiding]=\"size !== '3' && !column?.disableHiding\"\n            [showPinning]=\"size !== '3' && !column?.disablePinning\"\n            [showSelecting]=\"size !== '3' && columnSelectable()\"\n        >\n        </igx-excel-style-header>\n        @if (column?.sortable) {\n            <igx-excel-style-sorting>\n            </igx-excel-style-sorting>\n        }\n        @if (grid?.moving) {\n            <igx-excel-style-moving></igx-excel-style-moving>\n        }\n        @if (!column?.disablePinning && size === '3') {\n            <igx-excel-style-pinning></igx-excel-style-pinning>\n        }\n        @if (!column?.disableHiding && size === '3') {\n            <igx-excel-style-hiding></igx-excel-style-hiding>\n        }\n        @if (columnSelectable() && size === '3') {\n            <igx-excel-style-selecting></igx-excel-style-selecting>\n        }\n    }\n\n    @if (this.excelFilterOperationsDirective) {\n        <ng-content select=\"igx-excel-style-filter-operations,[igxExcelStyleFilterOperations]\">\n        </ng-content>\n    } @else {\n        <igx-excel-style-clear-filters></igx-excel-style-clear-filters>\n        <igx-excel-style-conditional-filter></igx-excel-style-conditional-filter>\n        <igx-excel-style-search></igx-excel-style-search>\n    }\n</article>\n","// import { IgxExcelStyleClearFiltersComponent } from './excel-style-clear-filters.component';\n// import { IgxExcelStyleConditionalFilterComponent } from './excel-style-conditional-filter.component';\n// import { IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective, IgxGridExcelStyleFilteringComponent } from './excel-style-filtering.component';\n// import { IgxExcelStyleHeaderComponent } from './excel-style-header.component';\n// import { IgxExcelStyleHidingComponent } from './excel-style-hiding.component';\n// import { IgxExcelStyleMovingComponent } from './excel-style-moving.component';\n// import { IgxExcelStylePinningComponent } from './excel-style-pinning.component';\n// import { IgxExcelStyleLoadingValuesTemplateDirective, IgxExcelStyleSearchComponent } from './excel-style-search.component';\n// import { IgxExcelStyleSelectingComponent } from './excel-style-selecting.component';\n// import { IgxExcelStyleSortingComponent } from './excel-style-sorting.component';\n\nexport * from './excel-style-clear-filters.component';\nexport * from './excel-style-conditional-filter.component';\nexport * from './excel-style-header.component';\nexport * from './excel-style-hiding.component';\nexport * from './excel-style-moving.component';\nexport * from './excel-style-pinning.component';\nexport * from './excel-style-search.component';\nexport * from './excel-style-selecting.component';\nexport * from './excel-style-sorting.component';\nexport * from './excel-style-filtering.component';\nexport * from './excel-style-date-expression.component';\nexport * from './common';\n\n/* NOTE: Grid excel-style filtering directives collection for ease-of-use import in standalone components scenario */\n// export const 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// ] as const;\n","import { Component, Input, TemplateRef, ViewChild, Output, EventEmitter, ElementRef, booleanAttribute } from '@angular/core';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxRippleDirective } from 'igniteui-angular/directives';\nimport { IgxIconButtonDirective } from 'igniteui-angular/directives';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-action-button */\n/* blazorIndirectRender */\n@Component({\n    selector: 'igx-grid-action-button',\n    templateUrl: 'grid-action-button.component.html',\n    imports: [IgxRippleDirective, IgxIconComponent, IgxIconButtonDirective]\n})\nexport class IgxGridActionButtonComponent {\n\n    /* blazorSuppress */\n    @ViewChild('container')\n    public container: ElementRef;\n\n    /* blazorSuppress */\n    /**\n     * Event emitted when action button is clicked.\n     *\n     * @example\n     * ```html\n     *  <igx-grid-action-button (actionClick)=\"startEdit($event)\"></igx-grid-action-button>\n     * ```\n     */\n    @Output()\n    public actionClick = new EventEmitter<Event>();\n\n    /**\n     * Reference to the current template.\n     *\n     * @hidden\n     * @internal\n     */\n    @ViewChild('menuItemTemplate')\n    public templateRef: TemplateRef<any>;\n\n    /**\n     * Whether button action is rendered in menu and should container text label.\n     */\n    @Input({ transform: booleanAttribute })\n    public asMenuItem = false;\n\n    /**\n     * Name of the icon to display in the button.\n     */\n    @Input()\n    public iconName: string;\n\n    /**\n     * Additional Menu item container element classes.\n     */\n    @Input()\n    public classNames: string;\n\n    /** @hidden @internal */\n    public get containerClass(): string {\n        return 'igx-action-strip__menu-button ' + (this.classNames || '');\n    }\n\n    /**\n     * The name of the icon set. Used in case the icon is from a different icon set.\n     */\n    @Input()\n    public iconSet: string;\n\n    /**\n     * The text of the label.\n     */\n    @Input()\n    public labelText: string;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public handleClick(event) {\n        this.actionClick.emit(event);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public preventEvent(event) {\n        if (event) {\n            event.stopPropagation();\n            event.preventDefault();\n        }\n    }\n}\n","@if (!asMenuItem) {\n    <button type=\"button\" [title]=\"labelText\" igxIconButton=\"flat\" igxRipple (click)=\"handleClick($event)\" (mousedown)=\"preventEvent($event)\">\n        @if (iconSet) {\n            <igx-icon [family]=\"iconSet\" [name]=\"iconName\">{{iconName}}</igx-icon>\n        }\n        @if (!iconSet) {\n            <igx-icon>{{iconName}}</igx-icon>\n        }\n    </button>\n}\n\n<ng-template #menuItemTemplate>\n    @if (asMenuItem) {\n        <div #container [className]=\"containerClass\">\n            @if (iconSet) {\n                <igx-icon [family]=\"iconSet\" [name]=\"iconName\">{{iconName}}</igx-icon>\n            }\n            @if (!iconSet) {\n                <igx-icon>{{iconName}}</igx-icon>\n            }\n            <label igxLabel>{{labelText}}</label>\n        </div>\n    }\n</ng-template>\n","import { IgxGridActionButtonComponent } from './grid-action-button.component';\nimport { Directive, Input, AfterViewInit, QueryList, ViewChildren, IterableDiffers, booleanAttribute, inject } from '@angular/core';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { IgxRowDirective } from '../row.directive';\nimport { IgxActionStripToken } from 'igniteui-angular/core';\n\n/* blazorElement */\n/* contentParent: ActionStrip */\n/* wcElementTag: igc-grid-action-base-directive */\n/* jsonAPIManageCollectionInMarkup */\n/* blazorIndirectRender */\n@Directive({\n    selector: '[igxGridActionsBase]',\n    standalone: true\n})\nexport class IgxGridActionsBaseDirective implements AfterViewInit {\n    protected iconService = inject(IgxIconService);\n    protected differs = inject(IterableDiffers);\n\n    /** @hidden @internal **/\n    @ViewChildren(IgxGridActionButtonComponent)\n    public buttons: QueryList<IgxGridActionButtonComponent>;\n\n    /**\n     * Gets/Sets if the action buttons will be rendered as menu items. When in menu, items will be rendered with text label.\n     *\n     * @example\n     * ```html\n     *  <igx-grid-pinning-actions [asMenuItems]='true'></igx-grid-pinning-actions>\n     *  <igx-grid-editing-actions [asMenuItems]='true'></igx-grid-editing-actions>\n     * ```\n     */\n    @Input({ transform: booleanAttribute })\n    public asMenuItems = false;\n\n    /** @hidden @internal **/\n    public strip: IgxActionStripToken;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get grid() {\n        return this.strip.context.grid;\n    }\n\n    /**\n     * Getter to be used in template\n     *\n     * @hidden\n     * @internal\n     */\n    public get isRowContext(): boolean {\n        return this.isRow(this.strip?.context) && !this.strip.context.inEditMode;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngAfterViewInit() {\n        if (this.asMenuItems) {\n            this.buttons.changes.subscribe(() => {\n                this.strip.cdr.detectChanges();\n            });\n        }\n    }\n\n    /**\n     * Check if the param is a row from a grid\n     *\n     * @hidden\n     * @internal\n     * @param context\n     */\n    protected isRow(context): context is IgxRowDirective {\n        return context && context instanceof IgxRowDirective;\n    }\n}\n","import { Component, HostBinding, Input, booleanAttribute } from '@angular/core';\nimport { IgxGridActionsBaseDirective } from './grid-actions-base.directive';\nimport { addRow, addChild } from '@igniteui/material-icons-extended';\nimport { IgxGridActionButtonComponent } from './grid-action-button.component';\nimport { IgxActionStripActionsToken, showMessage } from 'igniteui-angular/core';\n\n\n/* blazorElement */\n/* wcElementTag: igc-grid-editing-actions */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/**\n * Grid Editing Actions for the Action Strip\n *\n * @igxParent IgxActionStripComponent\n */\n@Component({\n    selector: 'igx-grid-editing-actions',\n    templateUrl: 'grid-editing-actions.component.html',\n    providers: [{ provide: IgxActionStripActionsToken, useExisting: IgxGridEditingActionsComponent }],\n    imports: [IgxGridActionButtonComponent]\n})\nexport class IgxGridEditingActionsComponent extends IgxGridActionsBaseDirective {\n\n    /**\n     * Host `class.igx-action-strip` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-action-strip__editing-actions')\n    public cssClass = 'igx-action-strip__editing-actions';\n\n    /**\n     * An input to enable/disable action strip row adding button\n     */\n    @Input({ transform: booleanAttribute })\n    public set addRow(value: boolean) {\n        this._addRow = value;\n    }\n    public get addRow(): boolean {\n        if (!this.iconsRendered) {\n            this.registerIcons();\n            this.iconsRendered = true;\n        }\n        return this._addRow;\n    }\n\n    /**\n     * An input to enable/disable action strip row editing button\n     */\n    @Input({ transform: booleanAttribute })\n    public editRow = true;\n\n    /**\n    * An input to enable/disable action strip row deleting button\n    */\n    @Input({ transform: booleanAttribute })\n    public deleteRow = true;\n\n    /**\n     * Getter if the row is disabled\n     *\n     * @hidden\n     * @internal\n     */\n    public get disabled(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        return this.strip.context.disabled;\n    }\n\n    /**\n     * Getter if the row is root.\n     *\n     * @hidden\n     * @internal\n     */\n    public get isRootRow(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return false;\n        }\n        return this.strip.context.isRoot;\n    }\n\n    public get hasChildren(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return false;\n        }\n        return this.strip.context.hasChildren;\n    }\n\n    /**\n     * An input to enable/disable action strip child row adding button\n     */\n    @Input({ transform: booleanAttribute })\n    public addChild = false;\n\n    private isMessageShown = false;\n    private _addRow = false;\n    private iconsRendered = false;\n\n    /**\n     * Enter row or cell edit mode depending the grid rowEditable option\n     *\n     * @example\n     * ```typescript\n     * this.gridEditingActions.startEdit();\n     * ```\n     */\n    public startEdit(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const row = this.strip.context;\n        const firstEditable = row.cells.filter(cell => cell.editable)[0];\n        const grid = row.grid;\n        if (!grid.hasEditableColumns) {\n            this.isMessageShown = showMessage(\n                'The grid should be editable in order to use IgxGridEditingActionsComponent',\n                this.isMessageShown);\n            return;\n        }\n        // be sure row is in view\n        if (grid.rowList.filter(r => r === row).length !== 0) {\n            grid.gridAPI.crudService.enterEditMode(firstEditable, event);\n            if (!grid.gridAPI.crudService.nonEditable) {\n                firstEditable.activate(event);\n            }\n        }\n        this.strip.hide();\n    }\n\n    /** @hidden @internal **/\n    public deleteRowHandler(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        grid.deleteRow(context.key);\n\n        this.strip.hide();\n    }\n\n    /** @hidden @internal **/\n    public addRowHandler(event?, asChild?: boolean): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        if (!grid.rowEditable) {\n            console.warn('The grid must use row edit mode to perform row adding! Please set rowEditable to true.');\n            return;\n        }\n        grid.gridAPI.crudService.enterAddRowMode(context, asChild, event);\n        this.strip.hide();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private registerIcons() {\n        this.iconService.addSvgIconFromText(addRow.name, addRow.value, 'imx-icons', true,);\n        this.iconService.addSvgIconFromText(addChild.name, addChild.value, 'imx-icons', true);\n    }\n}\n","\n@if (isRowContext) {\n    @if (!disabled && editRow) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconName=\"edit\" [labelText]=\"grid.resourceStrings.igx_grid_actions_edit_label\" (actionClick)=\"startEdit($event)\"></igx-grid-action-button>\n    }\n    @if (addRow && isRootRow) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconName=\"add_row\" iconSet=\"default\" [labelText]=\"grid.resourceStrings.igx_grid_actions_add_label\" (actionClick)=\"addRowHandler($event)\"></igx-grid-action-button>\n    }\n    @if (addChild && hasChildren) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconName=\"add_child\" iconSet=\"default\" [labelText]=\"grid.resourceStrings.igx_grid_actions_add_child_label\" (actionClick)=\"addRowHandler($event, true)\"></igx-grid-action-button>\n    }\n    @if (!disabled && deleteRow) {\n        <igx-grid-action-button class=\"igx-action-strip__delete\" classNames=\"igx-action-strip__menu-item--danger\" [asMenuItem]=\"asMenuItems\" iconName=\"delete\" [labelText]=\"grid.resourceStrings.igx_grid_actions_delete_label\" (actionClick)=\"deleteRowHandler($event)\"></igx-grid-action-button>\n    }\n}\n\n","import { Component, HostBinding } from '@angular/core';\nimport { IgxGridActionsBaseDirective } from './grid-actions-base.directive';\nimport { pinLeft, unpinLeft, jumpDown, jumpUp } from '@igniteui/material-icons-extended';\nimport { IgxGridActionButtonComponent } from './grid-action-button.component';\nimport { IgxActionStripActionsToken } from 'igniteui-angular/core';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-pinning-actions */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/**\n * Grid Pinning Actions for the Action Strip\n *\n * @igxParent IgxActionStripComponent\n */\n@Component({\n    selector: 'igx-grid-pinning-actions',\n    templateUrl: 'grid-pinning-actions.component.html',\n    providers: [{ provide: IgxActionStripActionsToken, useExisting: IgxGridPinningActionsComponent }],\n    imports: [IgxGridActionButtonComponent]\n})\n\nexport class IgxGridPinningActionsComponent extends IgxGridActionsBaseDirective {\n    /**\n     * Host `class.igx-action-strip` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-action-strip__pinning-actions')\n    public cssClass = 'igx-action-strip__pinning-actions';\n\n    private iconsRendered = false;\n\n    /**\n     * Getter to know if the row is pinned\n     *\n     * @hidden\n     * @internal\n     */\n    public get pinned(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        if (context && !this.iconsRendered) {\n            this.registerSVGIcons();\n            this.iconsRendered = true;\n        }\n        return context && context.pinned;\n    }\n\n    /**\n     * Getter to know if the row is in pinned and ghost\n     *\n     * @hidden\n     * @internal\n     */\n    public get inPinnedArea(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        return this.pinned && !context.disabled;\n    }\n\n    /**\n     * Getter to know if the row pinning is set to top or bottom\n     *\n     * @hidden\n     * @internal\n     */\n    public get pinnedTop(): boolean {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        return this.strip.context.grid.isRowPinningToTop;\n    }\n\n    /**\n     * Pin the row according to the context.\n     *\n     * @example\n     * ```typescript\n     * this.gridPinningActions.pin();\n     * ```\n     */\n    public pin(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const row = this.strip.context;\n        const grid = row.grid;\n        grid.pinRow(row.key, grid.pinnedRecords.length);\n        this.strip.hide();\n    }\n\n    /**\n     * Unpin the row according to the context.\n     *\n     * @example\n     * ```typescript\n     * this.gridPinningActions.unpin();\n     * ```\n     */\n    public unpin(event?): void {\n        if (event) {\n            event.stopPropagation();\n        }\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const row = this.strip.context;\n        const grid = row.grid;\n        grid.unpinRow(row.key);\n        this.strip.hide();\n    }\n\n    public scrollToRow(event) {\n        if (event) {\n            event.stopPropagation();\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        grid.scrollTo(context.data, 0);\n        this.strip.hide();\n    }\n\n    private registerSVGIcons(): void {\n        if (!this.isRow(this.strip.context)) {\n            return;\n        }\n        const context = this.strip.context;\n        const grid = context.grid;\n        if (grid) {\n            this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons', true);\n            this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons', true);\n            this.iconService.addSvgIconFromText(jumpDown.name, jumpDown.value, 'imx-icons', true);\n            this.iconService.addSvgIconFromText(jumpUp.name, jumpUp.value, 'imx-icons', true);\n        }\n    }\n}\n","@if (isRowContext) {\n    @if (inPinnedArea && pinnedTop) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"jump_down\" [labelText]=\"grid.resourceStrings.igx_grid_actions_jumpDown_label\" (actionClick)=\"scrollToRow($event)\"></igx-grid-action-button>\n    }\n    @if (inPinnedArea && !pinnedTop) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"jump_up\" [labelText]=\"grid.resourceStrings.igx_grid_actions_jumpUp_label\" (actionClick)=\"scrollToRow($event)\"></igx-grid-action-button>\n    }\n    @if (!pinned) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"pin\" [labelText]=\"grid.resourceStrings.igx_grid_actions_pin_label\" (actionClick)=\"pin($event)\"></igx-grid-action-button>\n    }\n    @if (pinned) {\n        <igx-grid-action-button [asMenuItem]=\"asMenuItems\" iconSet=\"default\" iconName=\"unpin\" [labelText]=\"grid.resourceStrings.igx_grid_actions_unpin_label\" (actionClick)=\"unpin($event)\"></igx-grid-action-button>\n    }\n}\n","import { Component } from '@angular/core';\n\n@Component({\n    selector: 'igx-grid-footer',\n    template: '<ng-content></ng-content>',\n    standalone: true\n})\nexport class IgxGridFooterComponent {\n}\n","import { Directive, OnDestroy, Input, inject } from '@angular/core';\nimport { Subscription, fromEvent } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxColumnMovingService } from './moving.service';\nimport { IgxDragDirective } from 'igniteui-angular/directives';\nimport { ColumnType } from 'igniteui-angular/core';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxColumnMovingDrag]',\n    standalone: true\n})\nexport class IgxColumnMovingDragDirective extends IgxDragDirective implements OnDestroy {\n    private cms = inject(IgxColumnMovingService);\n\n\n    @Input('igxColumnMovingDrag')\n    public column: ColumnType;\n\n    public get draggable(): boolean {\n        return this.column && (this.column.grid.moving || (this.column.groupable && !this.column.columnGroup));\n    }\n\n    public get icon(): HTMLElement {\n        return this.cms.icon;\n    }\n\n    private subscription$: Subscription;\n    private _ghostClass = 'igx-grid__drag-ghost-image';\n    private ghostImgIconClass = 'igx-grid__drag-ghost-image-icon';\n    private ghostImgIconGroupClass = 'igx-grid__drag-ghost-image-icon-group';\n    private columnSelectedClass = 'igx-grid-th--selected';\n\n    constructor() {\n        super();\n        this.ghostClass = this._ghostClass;\n    }\n\n    public override ngOnDestroy() {\n        this._unsubscribe();\n        super.ngOnDestroy();\n    }\n\n    public onEscape(event: Event) {\n        this.cms.cancelDrop = true;\n        this.onPointerUp(event);\n    }\n\n    public override onPointerDown(event: Event) {\n        if (!this.draggable || (event.target as HTMLElement).getAttribute('draggable') === 'false') {\n            return;\n        }\n\n        super.onPointerDown(event);\n    }\n\n    public override onPointerMove(event: Event) {\n        if (this._clicked && !this._dragStarted) {\n            this._removeOnDestroy = false;\n            this.cms.column = this.column;\n            this.column.grid.cdr.detectChanges();\n\n            const movingStartArgs = {\n                source: this.column\n            };\n            this.column.grid.columnMovingStart.emit(movingStartArgs);\n            this.subscription$ = fromEvent(this.column.grid.document.defaultView, 'keydown').pipe(takeUntil(this._destroy)).subscribe((ev: KeyboardEvent) => {\n                if (ev.key === this.platformUtil.KEYMAP.ESCAPE) {\n                    this.onEscape(ev);\n                }\n            });\n        }\n\n        super.onPointerMove(event);\n        if (this._dragStarted && this.ghostElement && !this.cms.column) {\n            this.cms.column = this.column;\n            this.column.grid.cdr.detectChanges();\n        }\n\n        if (this.cms.column) {\n            const args = {\n                source: this.column,\n                cancel: false\n            };\n            this.column.grid.columnMoving.emit(args);\n\n            if (args.cancel) {\n                this.onEscape(event);\n            }\n        }\n    }\n\n    public override onPointerUp(event: Event) {\n        // Run it explicitly inside the zone because sometimes onPointerUp executes after the code below.\n        this.zone.run(() => {\n            super.onPointerUp(event);\n            this.cms.column = null;\n            this.column.grid.cdr.detectChanges();\n        });\n\n        this._unsubscribe();\n    }\n\n    protected override createGhost(pageX: number, pageY: number) {\n        super.createGhost(pageX, pageY);\n\n        this.ghostElement.style.height = null;\n        this.ghostElement.style.minWidth = null;\n        this.ghostElement.style.flexBasis = null;\n        this.ghostElement.style.position = null;\n\n        this.ghostElement.classList.remove(this.columnSelectedClass);\n\n        const icon = this.column?.grid.document.createElement('i');\n        const text = this.column?.grid.document.createTextNode('block');\n        icon.appendChild(text);\n\n        icon.classList.add('material-icons');\n        this.cms.icon = icon;\n\n        if (!this.column.columnGroup) {\n            icon.classList.add(this.ghostImgIconClass);\n\n            this.ghostElement.insertBefore(icon, this.ghostElement.firstElementChild);\n\n            this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);\n            this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);\n        } else {\n            this.ghostElement.insertBefore(icon, this.ghostElement.childNodes[0]);\n\n            icon.classList.add(this.ghostImgIconGroupClass);\n            this.ghostElement.children[0].style.paddingLeft = '0px';\n\n            this.ghostLeft = this._ghostStartX = pageX - ((this.ghostElement.getBoundingClientRect().width / 3) * 2);\n            this.ghostTop = this._ghostStartY = pageY - ((this.ghostElement.getBoundingClientRect().height / 3) * 2);\n        }\n    }\n\n    private _unsubscribe() {\n        if (this.subscription$) {\n            this.subscription$.unsubscribe();\n            this.subscription$ = null;\n        }\n    }\n}\n","import {\n    Directive,\n    ElementRef,\n    EventEmitter,\n    HostBinding,\n    inject,\n    Input,\n    Output,\n    Pipe,\n    PipeTransform,\n    QueryList,\n    TemplateRef,\n    ViewChildren\n} from '@angular/core';\nimport { IChipsAreaReorderEventArgs, IgxChipComponent } from 'igniteui-angular/chips';\nimport { FlatGridType, GridType } from '../common/grid.interface';\nimport { IgxColumnMovingDragDirective } from '../moving/moving.drag.directive';\nimport { IGroupingExpression, PlatformUtil, SortingDirection } from 'igniteui-angular/core';\n\n/**\n * An internal component representing a base group-by drop area.\n *\n * @hidden @internal\n */\n@Directive()\nexport abstract class IgxGroupByAreaDirective {\n    private ref = inject(ElementRef<HTMLElement>);\n    protected platform = inject(PlatformUtil);\n\n    /**\n     * The drop area template if provided by the parent grid.\n     * Otherwise, uses the default internal one.\n     */\n    @Input()\n    public dropAreaTemplate: TemplateRef<void>;\n\n    @HostBinding('class.igx-grid-grouparea')\n    public defaultClass = true;\n\n    /** The parent grid containing the component. */\n    @Input()\n    public grid: FlatGridType | GridType;\n\n    /**\n     * The group-by expressions provided by the parent grid.\n     */\n    @Input()\n    public get expressions(): IGroupingExpression[] {\n        return this._expressions;\n    }\n\n    public set expressions(value: IGroupingExpression[]) {\n        this._expressions = value;\n        this.chipExpressions = this._expressions;\n        this.expressionsChanged();\n        this.expressionsChange.emit(this._expressions);\n    }\n\n    /**\n     * The default message for the default drop area template.\n     * Obviously, if another template is provided, this is ignored.\n     */\n    @Input()\n    public get dropAreaMessage(): string {\n        return this._dropAreaMessage ?? this.grid.resourceStrings.igx_grid_groupByArea_message;\n    }\n\n    public set dropAreaMessage(value: string) {\n        this._dropAreaMessage = value;\n    }\n\n    @Output()\n    public expressionsChange = new EventEmitter<IGroupingExpression[]>();\n\n    @ViewChildren(IgxChipComponent)\n    public chips: QueryList<IgxChipComponent>;\n\n    public chipExpressions: IGroupingExpression[];\n\n    /** The native DOM element. Used in sizing calculations. */\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    private _expressions: IGroupingExpression[] = [];\n    private _dropAreaMessage: string;\n\n    public get dropAreaVisible(): boolean {\n        return (this.grid.columnInDrag && this.grid.columnInDrag.groupable) ||\n            !this.expressions.length;\n    }\n\n    public handleKeyDown(id: string, event: KeyboardEvent) {\n        if (this.platform.isActivationKey(event)) {\n            this.updateGroupSorting(id);\n        }\n    }\n\n    public handleClick(id: string) {\n        if (!this.grid.getColumnByName(id).groupable) {\n            return;\n        }\n        this.updateGroupSorting(id);\n    }\n\n    public onDragDrop(event) {\n        const drag: IgxColumnMovingDragDirective = event.detail.owner;\n        if (drag instanceof IgxColumnMovingDragDirective) {\n            const column = drag.column;\n            if (!this.grid.columns.find(c => c === column)) {\n                return;\n            }\n\n            const isGrouped = this.expressions.findIndex((item) => item.fieldName === column.field) !== -1;\n            if (column.groupable && !isGrouped && !column.columnGroup && !!column.field) {\n                const groupingExpression = {\n                    fieldName: column.field,\n                    dir: this.grid.sortingExpressions.find(expr => expr.fieldName === column.field)?.dir || SortingDirection.Asc,\n                    ignoreCase: column.sortingIgnoreCase,\n                    strategy: column.sortStrategy,\n                    groupingComparer: column.groupingComparer\n                };\n\n                this.groupBy(groupingExpression);\n            }\n        }\n    }\n\n    protected getReorderedExpressions(chipsArray: IgxChipComponent[]) {\n        const newExpressions = [];\n\n        chipsArray.forEach(chip => {\n            const expr = this.expressions.find(item => item.fieldName === chip.id);\n\n            // disallow changing order if there are columns with groupable: false\n            if (!this.grid.getColumnByName(expr.fieldName)?.groupable) {\n                return;\n            }\n\n            newExpressions.push(expr);\n        });\n\n        return newExpressions;\n    }\n\n    protected updateGroupSorting(id: string) {\n        const expr = this.expressions.find(e => e.fieldName === id);\n        expr.dir = 3 - expr.dir;\n        const expressionsChangeEvent = this.grid.groupingExpressionsChange || this.expressionsChange;\n        expressionsChangeEvent.emit(this.expressions);\n        this.grid.pipeTrigger++;\n        this.grid.notifyChanges();\n    }\n\n    protected expressionsChanged() {\n    }\n\n    public abstract handleReorder(event: IChipsAreaReorderEventArgs);\n\n    public abstract handleMoveEnd();\n\n    public abstract groupBy(expression: IGroupingExpression);\n\n    public abstract clearGrouping(name: string);\n\n}\n\n/**\n * A pipe to circumvent the use of getters/methods just to get some additional\n * information from the grouping expression and pass it to the chip representing\n * that expression.\n *\n * @hidden @internal\n */\n@Pipe({\n    name: 'igxGroupByMeta',\n    standalone: true\n})\nexport class IgxGroupByMetaPipe implements PipeTransform {\n\n    public transform(key: string, grid: GridType, _pipeTrigger?: number) {\n        const column = grid.getColumnByName(key);\n        return { groupable: !!column?.groupable, title: column?.header || key };\n    }\n}\n","import { Directive, HostBinding, TemplateRef, inject } from '@angular/core';\nimport { IgxDropDirective } from 'igniteui-angular/directives';\nimport { IgxColumnMovingDragDirective } from './moving/moving.drag.directive';\nimport { IgxGroupByAreaDirective } from './grouping/group-by-area.directive';\nimport {\n    IgxGridMasterDetailContext,\n    IgxGroupByRowTemplateContext,\n    IgxGridHeaderTemplateContext,\n    IgxGridRowTemplateContext,\n    IgxGridTemplateContext\n} from './common/grid.interface';\nimport { ColumnType } from 'igniteui-angular/core';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxGroupByRow]',\n    standalone: true\n})\nexport class IgxGroupByRowTemplateDirective {\n    public template = inject(TemplateRef<IgxGroupByRowTemplateContext>)\n    public static ngTemplateContextGuard(_dir: IgxGroupByRowTemplateDirective,\n        ctx: unknown): ctx is IgxGroupByRowTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxGridDetail]',\n    standalone: true\n})\nexport class IgxGridDetailTemplateDirective {\n    public static ngTemplateContextGuard(_dir: IgxGridDetailTemplateDirective,\n        ctx: unknown): ctx is IgxGridMasterDetailContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowExpandedIndicator]',\n    standalone: true\n})\nexport class IgxRowExpandedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowExpandedIndicatorDirective,\n            context: unknown): context is IgxGridRowTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowCollapsedIndicator]',\n    standalone: true\n})\nexport class IgxRowCollapsedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowCollapsedIndicatorDirective,\n        context: unknown): context is IgxGridRowTemplateContext {\n        return true\n    }\n}\n\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxHeaderExpandedIndicator]',\n    standalone: true\n})\nexport class IgxHeaderExpandedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxHeaderExpandedIndicatorDirective,\n        context: unknown): context is IgxGridTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxHeaderCollapsedIndicator]',\n    standalone: true\n})\nexport class IgxHeaderCollapsedIndicatorDirective {\n    public static ngTemplateContextGuard(_directive: IgxHeaderCollapsedIndicatorDirective,\n        context: unknown): context is IgxGridTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxExcelStyleHeaderIcon]',\n    standalone: true\n})\nexport class IgxExcelStyleHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxExcelStyleHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxSortHeaderIcon]',\n    standalone: true\n})\nexport class IgxSortHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxSortHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxSortAscendingHeaderIcon]',\n    standalone: true\n})\nexport class IgxSortAscendingHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxSortAscendingHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxSortDescendingHeaderIcon]',\n    standalone: true\n})\nexport class IgxSortDescendingHeaderIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxSortDescendingHeaderIconDirective,\n        context: unknown): context is IgxGridHeaderTemplateContext {\n        return true\n    }\n}\n\n/** @hidden */\n@Directive({\n    selector: '[igxGridLoading]',\n    standalone: true\n})\nexport class IgxGridLoadingTemplateDirective {\n    public static ngTemplateContextGuard(_directive: IgxGridLoadingTemplateDirective,\n        context: unknown): context is IgxGridTemplateContext {\n        return true\n    }\n}\n\n/** @hidden */\n@Directive({\n    selector: '[igxGridEmpty]',\n    standalone: true\n})\nexport class IgxGridEmptyTemplateDirective {\n    public static ngTemplateContextGuard(_directive: IgxGridEmptyTemplateDirective,\n        context: unknown): context is IgxGridTemplateContext {\n        return true\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxGroupAreaDrop]',\n    standalone: true\n})\nexport class IgxGroupAreaDropDirective extends IgxDropDirective {\n    private groupArea = inject(IgxGroupByAreaDirective);\n\n    @HostBinding('class.igx-drop-area--hover')\n    public hovered = false;\n\n    public override onDragEnter(event) {\n        const drag: IgxColumnMovingDragDirective = event.detail.owner;\n        const column: ColumnType = drag.column;\n        if (!this.columnBelongsToGrid(column)) {\n            return;\n        }\n\n        const isGrouped = this.groupArea.expressions\n            ? this.groupArea.expressions.findIndex((item) => item.fieldName === column.field) !== -1\n            : false;\n        if (column.groupable && !isGrouped && !column.columnGroup && !!column.field) {\n            drag.icon.innerText = 'group_work';\n            this.hovered = true;\n        } else {\n            drag.icon.innerText = 'block';\n            this.hovered = false;\n        }\n    }\n\n    public override onDragLeave(event) {\n        const drag: IgxColumnMovingDragDirective = event.detail.owner;\n        const column: ColumnType = drag.column;\n        if (!this.columnBelongsToGrid(column)) {\n            return;\n        }\n        event.detail.owner.icon.innerText = 'block';\n        this.hovered = false;\n    }\n\n    private closestParentByAttr(elem, attr) {\n        return elem.hasAttribute(attr) ?\n            elem :\n            this.closestParentByAttr(elem.parentElement, attr);\n    }\n\n    private columnBelongsToGrid(column: ColumnType) {\n        const elem = this.element.nativeElement;\n        const closestGridID = this.closestParentByAttr(elem, 'igxGroupAreaDrop').getAttribute('gridId');\n        if (!column) {\n            return false;\n        } else {\n            const grid = column.grid;\n            if (!grid || grid.id !== closestGridID) {\n                return false;\n            }\n            return true;\n        }\n    }\n}\n","import { inject, Injectable, NgZone } from '@angular/core';\nimport { ColumnType } from 'igniteui-angular/core';\n\n/**\n * @hidden\n * @internal\n */\n@Injectable()\nexport class IgxColumnResizingService {\n    private zone = inject(NgZone);\n\n\n    /**\n     * @hidden\n     */\n    public startResizePos: number;\n    /**\n     * Indicates that a column is currently being resized.\n     */\n    public isColumnResizing: boolean;\n    /**\n     * @hidden\n     */\n    public resizeCursor = 'col-resize';\n    /**\n     * @hidden\n     */\n     public showResizer = false;\n    /**\n     * The column being resized.\n     */\n    public column: ColumnType;\n\n    /**\n     * @hidden\n     */\n    public getColumnHeaderRenderedWidth() {\n        return parseFloat(window.getComputedStyle(this.column.headerCell.nativeElement).width);\n    }\n\n    /**\n     * @hidden\n     */\n    public get resizerHeight(): number {\n        let height = this.column.grid.getVisibleContentHeight();\n\n        // Column height multiplier in case there are Column Layouts. The resizer height need to take into account rowStart.\n        let columnHeightMultiplier = 1;\n        if (this.column.columnLayoutChild) {\n            columnHeightMultiplier = this.column.grid.multiRowLayoutRowSize - this.column.rowStart + 1;\n        }\n\n        if (this.column.level !== 0) {\n            height -= this.column.topLevelParent.headerGroup.height - this.column.headerGroup.height * columnHeightMultiplier;\n        }\n\n        return height;\n    }\n\n    /**\n     * Returns the minimal possible width to which the column can be resized.\n     */\n    public get restrictResizeMin(): number {\n        const actualWidth = this.getColumnHeaderRenderedWidth();\n        const minWidth = this.column.minWidthPx < actualWidth ? this.column.minWidthPx : actualWidth;\n\n        return actualWidth - minWidth;\n    }\n\n    /**\n     * Returns the maximal possible width to which the column can be resized.\n     */\n    public get restrictResizeMax(): number {\n        const actualWidth = this.getColumnHeaderRenderedWidth();\n        const maxWidth = this.column.maxWidthPx;\n        if (this.column.maxWidth) {\n            return maxWidth - actualWidth;\n        } else {\n            return Number.MAX_SAFE_INTEGER;\n        }\n    }\n\n    /**\n     * Autosizes the column to the longest currently visible cell value, including the header cell.\n     * If the column has a predifined maxWidth and the autosized column width will become bigger than it,\n     * then the column is sized to its maxWidth.\n     */\n    public autosizeColumnOnDblClick() {\n        const currentColWidth = this.getColumnHeaderRenderedWidth();\n        this.column.width = this.column.getAutoSize();\n\n        this.zone.run(() => { });\n\n        this.column.grid.columnResized.emit({\n            column: this.column,\n            prevWidth: currentColWidth.toString(),\n            newWidth: this.column.width\n        });\n    }\n\n    /**\n     * Resizes the column regaridng to the column minWidth and maxWidth.\n     */\n    public resizeColumn(event: MouseEvent, ratio: number = 1) {\n        this.showResizer = false;\n        const diff = (event.clientX - this.startResizePos) / ratio;\n\n        const colWidth = this.column.width;\n        const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n        let currentColWidth = parseFloat(colWidth);\n        const actualWidth = this.getColumnHeaderRenderedWidth();\n        currentColWidth = Number.isNaN(currentColWidth) ? parseFloat(actualWidth as any) : currentColWidth;\n\n        if (this.column.grid.hasColumnLayouts) {\n            this.resizeColumnLayoutFor(this.column, diff);\n        } else if (isPercentageWidth) {\n            this._handlePercentageResize(diff, this.column);\n        } else {\n            this._handlePixelResize(diff, this.column);\n        }\n\n\n        this.zone.run(() => { });\n\n        if (currentColWidth !== parseFloat(this.column.width)) {\n            this.column.grid.columnResized.emit({\n                column: this.column,\n                prevWidth: isPercentageWidth ? currentColWidth + '%' : currentColWidth + 'px',\n                newWidth: this.column.width\n            });\n        }\n\n        this.isColumnResizing = false;\n    }\n\n    protected _handlePixelResize(diff: number, column: ColumnType) {\n        const currentColWidth = parseFloat(column.width);\n        const colMinWidth = column.minWidthPx;\n        const colMaxWidth = column.maxWidthPx;\n        if (currentColWidth + diff < colMinWidth) {\n            column.width = colMinWidth + 'px';\n        } else if (colMaxWidth && (currentColWidth + diff > colMaxWidth)) {\n            column.width = colMaxWidth + 'px';\n        } else {\n            column.width = (currentColWidth + diff) + 'px';\n        }\n    }\n\n    protected _handlePercentageResize(diff: number, column: ColumnType) {\n        const currentPercentWidth = parseFloat(column.width);\n        const gridAvailableSize = column.grid.calcWidth;\n\n        const diffPercentage = (diff / gridAvailableSize) * 100;\n        const colMinWidth = column.minWidthPercent;\n        const colMaxWidth = column.maxWidthPercent;\n\n        if (currentPercentWidth + diffPercentage < colMinWidth) {\n            column.width = colMinWidth + '%';\n        } else if (colMaxWidth && (currentPercentWidth + diffPercentage > colMaxWidth)) {\n            column.width = colMaxWidth + '%';\n        } else {\n            column.width = (currentPercentWidth + diffPercentage) + '%';\n        }\n    }\n\n    protected getColMinWidth(column: ColumnType) {\n        let currentColWidth = parseFloat(column.width);\n        const actualWidth = column.headerCell.nativeElement.getBoundingClientRect().width;\n        currentColWidth = Number.isNaN(currentColWidth) || (currentColWidth < actualWidth) ? actualWidth : currentColWidth;\n\n        const actualMinWidth = parseFloat(column.minWidth);\n        return actualMinWidth < currentColWidth ? actualMinWidth : currentColWidth;\n    }\n\n    protected resizeColumnLayoutFor(column: ColumnType, diff: number) {\n        const relativeColumns = column.getResizableColUnderEnd();\n        const combinedSpan = relativeColumns.reduce((acc, col) => acc + col.spanUsed, 0);\n\n        // Resize first those who might reach min/max width\n        let columnsToResize = [...relativeColumns];\n        let updatedDiff = diff;\n        let updatedCombinedSpan = combinedSpan;\n        let setMinMaxCols = false;\n        do {\n            // Cycle them until there are not ones that reach min/max size, because the diff accumulates after each cycle.\n            // This is because we can have at first 2 cols reaching min width and then after\n            // recalculating the diff there might be 1 more that reaches min width.\n            setMinMaxCols = false;\n            let newCombinedSpan = updatedCombinedSpan;\n            const newColsToResize = [];\n            columnsToResize.forEach((col) => {\n                const currentResizeWidth = parseFloat(col.target.calcWidth);\n                const resizeScaled = (diff / updatedCombinedSpan) * col.target.gridColumnSpan;\n                const colWidth = col.target.width;\n                const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n\n                const minWidth = col.target.minWidthPx;\n                const maxWidth = col.target.maxWidthPx;\n                if (currentResizeWidth + resizeScaled < minWidth) {\n                    col.target.width = isPercentageWidth ? col.target.minWidthPercent + '%' : minWidth + 'px';\n                    updatedDiff += (currentResizeWidth - minWidth);\n                    newCombinedSpan -= col.spanUsed;\n                    setMinMaxCols = true;\n                } else if (maxWidth && (currentResizeWidth + resizeScaled > maxWidth)) {\n                    col.target.width = isPercentageWidth ? col.target.maxWidthPercent + '%' : col.target.maxWidthPx + 'px';\n                    updatedDiff -= (maxWidth - currentResizeWidth);\n                    newCombinedSpan -= col.spanUsed;\n                    setMinMaxCols = true;\n                } else {\n                    // Save new ones that can be resized\n                    newColsToResize.push(col);\n                }\n            });\n\n            updatedCombinedSpan = newCombinedSpan;\n            columnsToResize = newColsToResize;\n        } while (setMinMaxCols);\n\n        // Those left that don't reach min/max size resize them normally.\n        columnsToResize.forEach((col) => {\n            const resizeScaled = (updatedDiff / updatedCombinedSpan) * col.target.gridColumnSpan;\n            const colWidth = col.target.width;\n            const isPercentageWidth = colWidth && typeof colWidth === 'string' && colWidth.indexOf('%') !== -1;\n            if (isPercentageWidth) {\n                this._handlePercentageResize(resizeScaled, col.target);\n            } else {\n                this._handlePixelResize(resizeScaled, col.target);\n            }\n        });\n    }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { ColumnType, ISortingExpression } from 'igniteui-angular/core';\n\n\n@Pipe({\n    name: 'sortingIndex',\n    standalone: true\n})\nexport class SortingIndexPipe implements PipeTransform {\n    public transform(columnField: string, sortingExpressions: ISortingExpression[]): number {\n        let sortIndex = sortingExpressions.findIndex(expression => expression.fieldName === columnField);\n        return sortIndex !== -1 ? ++sortIndex : null;\n    }\n}\n\n@Pipe({\n    name: 'igxHeaderGroupStyle',\n    standalone: true\n})\nexport class IgxHeaderGroupStylePipe implements PipeTransform {\n\n    public transform(styles: { [prop: string]: any }, column: ColumnType, _: number): { [prop: string]: any } {\n        const css = {};\n\n        if (!styles) {\n            return css;\n        }\n\n        for (const prop of Object.keys(styles)) {\n            const res = styles[prop];\n            css[prop] = typeof res === 'function' ? res(column) : res;\n        }\n\n        return css;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    inject,\n    Input,\n    OnDestroy,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { Subject } from 'rxjs';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { GridSelectionMode } from '../common/enums';\nimport { SortingIndexPipe } from './pipes';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { ColumnType, ExpressionsTreeUtil, GridColumnDataType, SortingDirection } from 'igniteui-angular/core';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-header',\n    templateUrl: 'grid-header.component.html',\n    imports: [IgxIconComponent, NgTemplateOutlet, NgClass, SortingIndexPipe]\n})\nexport class IgxGridHeaderComponent implements DoCheck, OnDestroy {\n    public grid = inject<GridType>(IGX_GRID_BASE);\n    public colResizingService = inject(IgxColumnResizingService);\n    public cdr = inject(ChangeDetectorRef);\n    private ref = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    @Input()\n    public column: ColumnType;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultESFHeaderIconTemplate', { read: TemplateRef, static: true })\n    protected defaultESFHeaderIconTemplate: TemplateRef<any>;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('defaultSortHeaderIconTemplate', { read: TemplateRef, static: true })\n    protected defaultSortHeaderIconTemplate;\n\n    /**\n     * @hidden\n     */\n    @ViewChild('sortIconContainer', { read: ElementRef })\n    protected sortIconContainer: ElementRef;\n\n    @HostBinding('class.igx-grid-th--pinned')\n    public get pinnedCss() {\n        return this.isPinned;\n    }\n\n    @HostBinding('class.igx-grid-th--pinned-last')\n    public get pinnedLastCss() {\n        return this.isLastPinned;\n    }\n\n    @HostBinding('class.igx-grid-th--pinned-first')\n    public get pinnedFirstCSS() {\n        return this.isFirstPinned;\n    }\n\n    /**\n     * Gets whether the header group is stored in the last column in the pinned area.\n     */\n    public get isLastPinned(): boolean {\n        return !this.grid.hasColumnLayouts ? this.column.isLastPinned : false;\n    }\n\n    /**\n     * Gets whether the header group is stored in the first column of the right pinned area.\n     */\n    public get isFirstPinned(): boolean {\n        return !this.grid.hasColumnLayouts ? this.column.isFirstPinned : false;\n    }\n\n    /**\n     * Gets whether the header group is stored in a pinned column.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isPinned(): boolean {\n        return this.column.pinned;\n    }\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('attr.id')\n    public id: string;\n\n    /**\n     * Returns the `aria-selected` of the header.\n     */\n    @HostBinding('attr.aria-selected')\n    public get ariaSelected(): boolean {\n        return this.column.selected;\n    }\n\n    /**\n     * Returns the `aria-sort` of the header.\n     */\n    @HostBinding('attr.aria-sort')\n    public get ariaSort() {\n        return this.sortDirection === SortingDirection.Asc ? 'ascending'\n            : this.sortDirection === SortingDirection.Desc ? 'descending' : null;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.aria-colindex')\n    public get ariaColIndx() {\n        return this.column.index + 1;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('attr.aria-rowindex')\n    public get ariaRowIndx() {\n        return 1;\n    }\n\n    @HostBinding('class.igx-grid-th')\n    public get columnGroupStyle() {\n        return !this.column.columnGroup;\n    }\n\n    @HostBinding('class.asc')\n    public get sortAscendingStyle() {\n        return this.sortDirection === SortingDirection.Asc;\n    }\n\n    @HostBinding('class.desc')\n    public get sortDescendingStyle() {\n        return this.sortDirection === SortingDirection.Desc;\n    }\n\n    @HostBinding('class.igx-grid-th--number')\n    public get numberStyle() {\n        return this.column.dataType === GridColumnDataType.Number\n            || this.column.dataType === GridColumnDataType.Currency\n            || this.column.dataType === GridColumnDataType.Percent;\n    }\n\n    @HostBinding('class.igx-grid-th--sortable')\n    public get sortableStyle() {\n        return this.column.sortable;\n    }\n\n    @HostBinding('class.igx-grid-th--selectable')\n    public get selectableStyle() {\n        return this.selectable;\n    }\n\n    @HostBinding('class.igx-grid-th--filtrable')\n    public get filterableStyle() {\n        return this.column.filterable && this.grid.filteringService.isFilterRowVisible;\n    }\n\n    @HostBinding('class.igx-grid-th--sorted')\n    public get sortedStyle() {\n        return this.sorted;\n    }\n\n    @HostBinding('class.igx-grid-th--selected')\n    public get selectedStyle() {\n        return this.selected;\n    }\n\n    /**\n     * @hidden\n     */\n    public get esfIconTemplate() {\n        return this.grid.excelStyleHeaderIconTemplate || this.defaultESFHeaderIconTemplate;\n    }\n\n    /**\n     * @hidden\n     */\n    public get sortIconTemplate() {\n        if (this.sortDirection === SortingDirection.None && this.grid.sortHeaderIconTemplate) {\n            return this.grid.sortHeaderIconTemplate;\n        } else if (this.sortDirection === SortingDirection.Asc && this.grid.sortAscendingHeaderIconTemplate) {\n            return this.grid.sortAscendingHeaderIconTemplate;\n        } else if (this.sortDirection === SortingDirection.Desc && this.grid.sortDescendingHeaderIconTemplate) {\n            return this.grid.sortDescendingHeaderIconTemplate;\n        } else {\n            return this.defaultSortHeaderIconTemplate;\n        }\n    }\n    /**\n     * @hidden\n     */\n    public get disabled() {\n        const groupArea = this.grid.groupArea || this.grid.treeGroupArea;\n        if (groupArea?.expressions && groupArea.expressions.length && groupArea.expressions.map(g => g.fieldName).includes(this.column.field)) {\n            return true;\n        }\n        return false;\n    }\n\n    public get sorted() {\n        return this.sortDirection !== SortingDirection.None;\n    }\n\n    public get filterIconClassName() {\n        return this.column.filteringExpressionsTree || this.isAdvancedFilterApplied() ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';\n    }\n\n    public get selectable() {\n        return this.grid.columnSelection !== GridSelectionMode.none &&\n            this.column.applySelectableClass &&\n            !this.column.selected &&\n            !this.grid.filteringService.isFilterRowVisible;\n    }\n\n    public get selected() {\n        return this.column.selected\n            && (!this.grid.filteringService.isFilterRowVisible || this.grid.filteringService.filteredColumn !== this.column);\n    }\n\n    public get title() {\n        return this.column.title || this.column.header || this.column.field;\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    public sortDirection = SortingDirection.None;\n    protected _destroy$ = new Subject<boolean>();\n\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        if (!this.colResizingService.isColumnResizing) {\n\n            if (this.grid.filteringService.isFilterRowVisible) {\n                if (this.column.filterCellTemplate) {\n                    this.grid.filteringRow.close();\n                    return;\n                }\n\n                if (this.column.filterable && !this.column.columnGroup &&\n                    !this.grid.filteringService.isFilterComplex(this.column.field)) {\n                    this.grid.filteringService.filteredColumn = this.column;\n                }\n            } else if (this.grid.columnSelection !== GridSelectionMode.none && this.column.selectable) {\n                const clearSelection = this.grid.columnSelection === GridSelectionMode.single || !event.ctrlKey;\n                const rangeSelection = this.grid.columnSelection === GridSelectionMode.multiple && event.shiftKey;\n\n                if (!this.column.selected || (this.grid.selectionService.getSelectedColumns().length > 1 && clearSelection)) {\n                    this.grid.selectionService.selectColumn(this.column.field, clearSelection, rangeSelection, event);\n                } else {\n                    this.grid.selectionService.deselectColumn(this.column.field, event);\n                }\n            }\n        }\n        this.grid.theadRow.nativeElement.focus();\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('pointerenter')\n    public onPinterEnter() {\n        this.column.applySelectableClass = true;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('pointerleave')\n    public onPointerLeave() {\n        this.column.applySelectableClass = false;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        this.getSortDirection();\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public ngOnDestroy(): void {\n        this._destroy$.next(true);\n        this._destroy$.complete();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPointerDownIndicator(event) {\n        // Stop propagation of pointer events to now allow column dragging using the header indicators.\n        event.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onFilteringIconClick(event) {\n        event.stopPropagation();\n        this.grid.filteringService.toggleFilterDropdown(this.nativeElement, this.column);\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onSortingIconClick(event) {\n        event.stopPropagation();\n        this.triggerSort();\n    }\n\n    protected getSortDirection() {\n        const expr = this.grid.sortingExpressions.find((x) => x.fieldName === this.column.field);\n        this.sortDirection = expr ? expr.dir : SortingDirection.None;\n    }\n\n    protected isAdvancedFilterApplied() {\n        if (!this.grid.advancedFilteringExpressionsTree) {\n            return false;\n        }\n        return !!ExpressionsTreeUtil.find(this.grid.advancedFilteringExpressionsTree, this.column.field);\n    }\n\n    private triggerSort() {\n        const groupingExpr = this.grid.groupingExpressions ?\n            this.grid.groupingExpressions.find((expr) => expr.fieldName === this.column.field) :\n            this.grid.groupArea?.expressions ? this.grid.groupArea?.expressions.find((expr) => expr.fieldName === this.column.field) : null;\n        const sortDir = groupingExpr ?\n            this.sortDirection + 1 > SortingDirection.Desc ? SortingDirection.Asc : SortingDirection.Desc\n            : this.sortDirection + 1 > SortingDirection.Desc ? SortingDirection.None : this.sortDirection + 1;\n        this.sortDirection = sortDir;\n        this.grid.sort({\n            fieldName: this.column.field, dir: this.sortDirection, ignoreCase: this.column.sortingIgnoreCase,\n            strategy: this.column.sortStrategy\n        });\n    }\n}\n","<ng-template #defaultColumn>\n    <span [title]=\"title\">{{ column.header || column.field }}</span>\n</ng-template>\n\n<ng-template #defaultESFHeaderIconTemplate>\n    <igx-icon family=\"default\" name=\"more_vert\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultSortHeaderIconTemplate>\n    <igx-icon\n        family=\"default\"\n        [name]=\"sortDirection < 2 ? 'sort_asc' : 'sort_desc'\">\n    </igx-icon>\n</ng-template>\n\n<span class=\"igx-grid-th__title\">\n    <ng-container\n        *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n    </ng-container>\n</span>\n@if (!column.columnGroup) {\n    <div class=\"igx-grid-th__icons\">\n        @if (column.sortable && !disabled) {\n            <div #sortIconContainer class=\"sort-icon\"\n                [attr.data-sortIndex]=\"(grid.sortingOptions.mode === 'single' && grid.sortingExpressions.length <=1) ? null : column.field | sortingIndex:grid.sortingExpressions\"\n                (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"onSortingIconClick($event)\">\n                <ng-container *ngTemplateOutlet=\"sortIconTemplate; context: { $implicit:  this }\"></ng-container>\n            </div>\n        }\n        @if (grid.allowFiltering && column.filterable && grid.filterMode === 'excelStyleFilter') {\n            <div [ngClass]=\"filterIconClassName\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"onFilteringIconClick($event)\" >\n                <ng-container *ngTemplateOutlet=\"esfIconTemplate; context: { $implicit:  this }\"></ng-container>\n            </div>\n        }\n    </div>\n}\n","import { AutoPositionStrategy, ConnectedFit } from 'igniteui-angular/core';\n\n\n/** @hidden */\nexport class ExcelStylePositionStrategy extends AutoPositionStrategy {\n    protected override shouldFitInViewPort() {\n        return true;\n    }\n\n    protected override fitInViewport(element: HTMLElement, connectedFit: ConnectedFit) {\n        const heightOverflow = connectedFit.contentElementRect.height - connectedFit.viewPortRect.height;\n        if (heightOverflow > 0) {\n            element.style.width = 'auto';\n            element.style.height = `${connectedFit.viewPortRect.height}px`;\n        } else {\n            element.style.height = `${Math.max(\n                connectedFit.viewPortRect.height - connectedFit.targetRect.bottom - 1,\n                connectedFit.contentElementRect.height)}px`;\n        }\n\n        super.fitInViewport(element, connectedFit);\n    }\n}\n","import { Injectable, OnDestroy, inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, first } from 'rxjs/operators';\nimport { IColumnResizeEventArgs, IFilteringEventArgs } from '../common/events';\nimport { useAnimation } from '@angular/animations';\nimport { editor, pinLeft, unpinLeft } from '@igniteui/material-icons-extended';\nimport { ExpressionUI, generateExpressionsList } from './excel-style/common';\nimport { GridType } from '../common/grid.interface';\nimport { ExcelStylePositionStrategy } from './excel-style/excel-style-position-strategy';\nimport { fadeIn } from 'igniteui-angular/animations';\nimport { AbsoluteScrollStrategy, ColumnType, ExpressionsTreeUtil, FilteringExpressionsTree, FilteringLogic, IFilteringExpression, IFilteringExpressionsTree, IFilteringOperation, IgxOverlayService, isTree, OverlayCancelableEventArgs, OverlayEventArgs, OverlaySettings, VerticalAlignment } from 'igniteui-angular/core';\nimport { IgxIconService } from 'igniteui-angular/icon';\nimport { IForOfState } from 'igniteui-angular/directives';\n\n\n/**\n * @hidden\n */\n@Injectable()\nexport class IgxFilteringService implements OnDestroy {\n    private iconService = inject(IgxIconService);\n    protected _overlayService = inject(IgxOverlayService);\n\n    public isFilterRowVisible = false;\n    public filteredColumn: ColumnType = null;\n    public selectedExpression: IFilteringExpression = null;\n    public columnToMoreIconHidden = new Map<string, boolean>();\n    public activeFilterCell = 0;\n    public grid: GridType;\n\n    private columnsWithComplexFilter = new Set<string>();\n    private areEventsSubscribed = false;\n    protected destroy$ = new Subject<boolean>();\n    private isFiltering = false;\n    private columnToExpressionsMap = new Map<string, ExpressionUI[]>();\n    private columnStartIndex = -1;\n    protected _filterMenuOverlaySettings: OverlaySettings = {\n        closeOnEscape: true,\n        closeOnOutsideClick: true,\n        modal: false,\n        positionStrategy: new ExcelStylePositionStrategy({\n            verticalStartPoint: VerticalAlignment.Bottom,\n            openAnimation: useAnimation(fadeIn, { params: { duration: '250ms' } }),\n            closeAnimation: null\n        }),\n        scrollStrategy: new AbsoluteScrollStrategy()\n    };\n    protected lastActiveNode;\n\n    public ngOnDestroy(): void {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    public toggleFilterDropdown(element: HTMLElement, column: ColumnType) {\n\n        const filterIcon = column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';\n        const filterIconTarget = element.querySelector(`.${filterIcon}`) as HTMLElement || element;\n\n        const id = this.grid.createFilterDropdown(column, {\n            ...this._filterMenuOverlaySettings,\n            ...{ target: filterIconTarget }\n        });\n\n        this._overlayService.opening\n            .pipe(\n                first(overlay => overlay.id === id),\n                takeUntil(this.destroy$)\n            )\n            .subscribe((event: OverlayCancelableEventArgs) => {\n                if (event.componentRef) {\n                    event.componentRef.instance.initialize(column, this._overlayService);\n                    event.componentRef.instance.overlayComponentId = id;\n                }\n                this.lastActiveNode = this.grid.navigation.activeNode;\n            });\n\n        this._overlayService.opened.pipe(first(overlay => overlay.id === id), takeUntil(this.destroy$)).subscribe((event: OverlayEventArgs) => {\n            if (event.componentRef) {\n                event.componentRef.instance.populateData();\n            }\n        });\n\n        this._overlayService.closed\n            .pipe(\n                first(overlay => overlay.id === id),\n                takeUntil(this.destroy$)\n            )\n            .subscribe(() => {\n                this._overlayService.detach(id);\n                this.grid.navigation.activeNode = this.lastActiveNode;\n                this.grid.theadRow.nativeElement.focus();\n            });\n\n        this._overlayService.show(id);\n    }\n\n    /**\n     * Subscribe to grid's events.\n     */\n    public subscribeToEvents() {\n        if (!this.areEventsSubscribed) {\n            this.areEventsSubscribed = true;\n\n            this.grid.columnResized.pipe(takeUntil(this.destroy$)).subscribe((eventArgs: IColumnResizeEventArgs) => {\n                this.updateFilteringCell(eventArgs.column);\n            });\n\n            this.grid.parentVirtDir.chunkLoad.pipe(takeUntil(this.destroy$)).subscribe((eventArgs: IForOfState) => {\n                if (eventArgs.startIndex !== this.columnStartIndex) {\n                    this.columnStartIndex = eventArgs.startIndex;\n                    this.grid.filterCellList.forEach((filterCell) => {\n                        filterCell.updateFilterCellArea();\n                    });\n                }\n            });\n\n            this.grid.columnMovingEnd.pipe(takeUntil(this.destroy$)).subscribe(() => {\n                this.grid.filterCellList.forEach((filterCell) => {\n                    filterCell.updateFilterCellArea();\n                });\n            });\n        }\n    }\n\n    /**\n     * Close filtering row if a column is hidden.\n     */\n    public hideFilteringRowOnColumnVisibilityChange(col: ColumnType) {\n        const filteringRow = this.grid?.filteringRow;\n\n        if (filteringRow && filteringRow.column && filteringRow.column === col) {\n            filteringRow.close();\n        }\n    }\n\n    /**\n     * Internal method to create expressionsTree and filter grid used in both filter modes.\n     */\n    public filterInternal(field: string, expressions: FilteringExpressionsTree | Array<ExpressionUI> = null): void {\n        this.isFiltering = true;\n\n        let expressionsTree;\n        if (expressions && 'operator' in expressions) {\n            expressionsTree = expressions;\n        } else {\n            expressionsTree = this.createSimpleFilteringTree(field, expressions);\n        }\n\n        if (expressionsTree.filteringOperands.length === 0) {\n            this.clearFilter(field);\n        } else {\n            this.filter(field, null, expressionsTree);\n        }\n\n        this.isFiltering = false;\n    }\n\n    /**\n     * Execute filtering on the grid.\n     */\n    public filter(field: string, value: any, conditionOrExpressionTree?: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase?: boolean) {\n\n        const grid = this.grid;\n\n        const col = grid.getColumnByName(field);\n        const filteringIgnoreCase = ignoreCase || (col ? col.filteringIgnoreCase : false);\n\n        const filteringTree = grid.filteringExpressionsTree;\n        const columnFilteringExpressionsTree = ExpressionsTreeUtil.find(filteringTree, field) as IFilteringExpressionsTree;\n        conditionOrExpressionTree = conditionOrExpressionTree ?? columnFilteringExpressionsTree;\n        const fieldFilterIndex = ExpressionsTreeUtil.findIndex(filteringTree, field);\n\n        const newFilteringTree: FilteringExpressionsTree =\n            this.prepare_filtering_expression(filteringTree, field, value, conditionOrExpressionTree,\n                filteringIgnoreCase, fieldFilterIndex, true);\n\n        const eventArgs: IFilteringEventArgs = {\n            owner: grid,\n            filteringExpressions: ExpressionsTreeUtil.find(newFilteringTree, field) as FilteringExpressionsTree, cancel: false\n        };\n        this.grid.filtering.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        if (conditionOrExpressionTree) {\n            this.filter_internal(field, value, conditionOrExpressionTree, filteringIgnoreCase);\n        } else {\n            const expressionsTreeForColumn = ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, field);\n            if (!expressionsTreeForColumn) {\n                throw new Error('Invalid condition or Expression Tree!');\n            } else if (isTree(expressionsTreeForColumn)) {\n                this.filter_internal(field, value, expressionsTreeForColumn, filteringIgnoreCase);\n            } else {\n                this.filter_internal(field, value, expressionsTreeForColumn.condition, filteringIgnoreCase);\n            }\n        }\n        const doneEventArgs = ExpressionsTreeUtil.find(this.grid.filteringExpressionsTree, field) as FilteringExpressionsTree;\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.grid.filteringDone.emit(doneEventArgs));\n    }\n\n    public filter_global(term, condition, ignoreCase) {\n        if (!condition) {\n            return;\n        }\n\n        const filteringTree = this.grid.filteringExpressionsTree;\n        this.grid.crudService.endEdit(false);\n        this.grid.page = 0;\n\n        filteringTree.filteringOperands = [];\n        for (const column of this.grid.columns) {\n            this.prepare_filtering_expression(filteringTree, column.field, term,\n                condition, ignoreCase || column.filteringIgnoreCase);\n        }\n\n        this.grid.filteringExpressionsTree = filteringTree;\n    }\n\n    /**\n     * Clears the filter of a given column if name is provided. Otherwise clears the filters of all columns.\n     */\n    public clearFilter(field: string): void {\n        if (field) {\n            const column = this.grid.getColumnByName(field);\n            if (!column) {\n                return;\n            }\n        }\n\n        const emptyFilter = new FilteringExpressionsTree(null, field);\n        const onFilteringEventArgs: IFilteringEventArgs = {\n            owner: this.grid,\n            filteringExpressions: emptyFilter,\n            cancel: false\n        };\n\n        this.grid.filtering.emit(onFilteringEventArgs);\n\n        if (onFilteringEventArgs.cancel) {\n            return;\n        }\n\n        this.isFiltering = true;\n        this.clear_filter(field);\n\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.grid.filteringDone.emit(emptyFilter));\n\n        if (field) {\n            const expressions = this.getExpressions(field);\n            expressions.length = 0;\n        } else {\n            this.grid.columns.forEach(c => {\n                const expressions = this.getExpressions(c.field);\n                expressions.length = 0;\n            });\n        }\n\n        this.isFiltering = false;\n    }\n\n    public clear_filter(fieldName: string) {\n        const grid = this.grid;\n        grid.crudService.endEdit(false);\n        const filteringState = grid.filteringExpressionsTree;\n        const index = ExpressionsTreeUtil.findIndex(filteringState, fieldName);\n\n        if (index > -1) {\n            filteringState.filteringOperands.splice(index, 1);\n        } else if (!fieldName) {\n            filteringState.filteringOperands = [];\n        }\n\n        grid.filteringExpressionsTree = filteringState;\n    }\n\n    /**\n     * Filters all the `IgxColumnComponent` in the `IgxGridComponent` with the same condition.\n     * @deprecated in version 19.0.0.\n     */\n    public filterGlobal(value: any, condition, ignoreCase?) {\n        if (!condition) {\n            return;\n        }\n\n        const filteringTree = this.grid.filteringExpressionsTree;\n        const newFilteringTree = new FilteringExpressionsTree(filteringTree.operator, filteringTree.fieldName);\n\n        for (const column of this.grid.columns) {\n            this.prepare_filtering_expression(newFilteringTree, column.field, value, condition,\n                ignoreCase || column.filteringIgnoreCase);\n        }\n\n        const eventArgs: IFilteringEventArgs = { owner: this.grid, filteringExpressions: newFilteringTree, cancel: false };\n        this.grid.filtering.emit(eventArgs);\n        if (eventArgs.cancel) {\n            return;\n        }\n\n        this.grid.crudService.endEdit(false);\n        this.grid.page = 0;\n        this.grid.filteringExpressionsTree = newFilteringTree;\n\n        // Wait for the change detection to update filtered data through the pipes and then emit the event.\n        requestAnimationFrame(() => this.grid.filteringDone.emit(this.grid.filteringExpressionsTree));\n    }\n\n    /**\n     * Register filtering SVG icons in the icon service.\n     */\n    public registerSVGIcons(): void {\n        const editorIcons = editor as any[];\n        editorIcons.forEach(icon => {\n            this.iconService.addSvgIconFromText(icon.name, icon.value, 'imx-icons', true);\n        });\n        this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons', true);\n        this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons', true);\n    }\n\n    /**\n     * Returns the ExpressionUI array for a given column.\n     */\n    public getExpressions(columnId: string): ExpressionUI[] {\n        if (!this.columnToExpressionsMap.has(columnId)) {\n            const column = this.grid.columns.find((col) => col.field === columnId);\n            const expressionUIs = new Array<ExpressionUI>();\n            if (column) {\n                this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, expressionUIs);\n                this.columnToExpressionsMap.set(columnId, expressionUIs);\n            }\n            return expressionUIs;\n        }\n\n        return this.columnToExpressionsMap.get(columnId);\n    }\n\n    /**\n     * Recreates all ExpressionUIs for all columns. Executed after filtering to refresh the cache.\n     */\n    public refreshExpressions() {\n        if (!this.isFiltering) {\n            this.columnsWithComplexFilter.clear();\n\n            this.columnToExpressionsMap.forEach((value: ExpressionUI[], key: string) => {\n                const column = this.grid.columns.find((col) => col.field === key);\n                if (column) {\n                    value.length = 0;\n\n                    this.generateExpressionsList(column.filteringExpressionsTree, this.grid.filteringExpressionsTree.operator, value);\n\n                    const isComplex = this.isFilteringTreeComplex(column.filteringExpressionsTree);\n                    if (isComplex) {\n                        this.columnsWithComplexFilter.add(key);\n                    }\n\n                    this.updateFilteringCell(column);\n                } else {\n                    this.columnToExpressionsMap.delete(key);\n                }\n            });\n        }\n    }\n\n    /**\n     * Remove an ExpressionUI for a given column.\n     */\n    public removeExpression(columnId: string, indexToRemove: number) {\n        const expressionsList = this.getExpressions(columnId);\n\n        if (indexToRemove === 0 && expressionsList.length > 1) {\n            expressionsList[1].beforeOperator = null;\n        } else if (indexToRemove === expressionsList.length - 1) {\n            expressionsList[indexToRemove - 1].afterOperator = null;\n        } else {\n            expressionsList[indexToRemove - 1].afterOperator = expressionsList[indexToRemove + 1].beforeOperator;\n            expressionsList[0].beforeOperator = null;\n            expressionsList[expressionsList.length - 1].afterOperator = null;\n        }\n\n        expressionsList.splice(indexToRemove, 1);\n    }\n\n    /**\n     * Generate filtering tree for a given column from existing ExpressionUIs.\n     */\n    public createSimpleFilteringTree(columnId: string, expressionUIList = null): FilteringExpressionsTree {\n        const expressionsList = expressionUIList ? expressionUIList : this.getExpressions(columnId);\n        const expressionsTree = new FilteringExpressionsTree(FilteringLogic.Or, columnId);\n        let currAndBranch: FilteringExpressionsTree;\n\n        for (const currExpressionUI of expressionsList) {\n            if (!currExpressionUI.expression.condition.isUnary && currExpressionUI.expression.searchVal === null) {\n                if (currExpressionUI.afterOperator === FilteringLogic.And && !currAndBranch) {\n                    currAndBranch = new FilteringExpressionsTree(FilteringLogic.And, columnId);\n                    expressionsTree.filteringOperands.push(currAndBranch);\n                }\n                continue;\n            }\n\n            if ((currExpressionUI.beforeOperator === undefined || currExpressionUI.beforeOperator === null ||\n                currExpressionUI.beforeOperator === FilteringLogic.Or) &&\n                currExpressionUI.afterOperator === FilteringLogic.And) {\n\n                currAndBranch = new FilteringExpressionsTree(FilteringLogic.And, columnId);\n                expressionsTree.filteringOperands.push(currAndBranch);\n                currAndBranch.filteringOperands.push(currExpressionUI.expression);\n\n            } else if (currExpressionUI.beforeOperator === FilteringLogic.And) {\n                currAndBranch.filteringOperands.push(currExpressionUI.expression);\n            } else {\n                expressionsTree.filteringOperands.push(currExpressionUI.expression);\n                currAndBranch = null;\n            }\n        }\n\n        return expressionsTree;\n    }\n\n    /**\n     * Returns whether a complex filter is applied to a given column.\n     */\n    public isFilterComplex(columnId: string) {\n        if (this.columnsWithComplexFilter.has(columnId)) {\n            return true;\n        }\n\n        const column = this.grid.columns.find((col) => col.field === columnId);\n        const isComplex = column && this.isFilteringTreeComplex(column.filteringExpressionsTree);\n        if (isComplex) {\n            this.columnsWithComplexFilter.add(columnId);\n        }\n\n        return isComplex;\n    }\n\n    /**\n     * Returns the string representation of the FilteringLogic operator.\n     */\n    public getOperatorAsString(operator: FilteringLogic): any {\n        if (operator === 0) {\n            return this.grid.resourceStrings.igx_grid_filter_operator_and;\n        } else {\n            return this.grid.resourceStrings.igx_grid_filter_operator_or;\n        }\n    }\n\n    /**\n     * Generate the label of a chip from a given filtering expression.\n     */\n    public getChipLabel(expression: IFilteringExpression): any {\n        if (expression.condition.isUnary) {\n            return this.grid.resourceStrings[`igx_grid_filter_${expression.condition.name}`] || expression.condition.name;\n        } else if (expression.searchVal instanceof Date) {\n            const column = this.grid.getColumnByName(expression.fieldName);\n            const formatter = column.formatter;\n            if (formatter) {\n                return formatter(expression.searchVal, undefined);\n            }\n            const pipeArgs = column.pipeArgs;\n            return this.grid.i18nFormatter.formatDate(expression.searchVal, pipeArgs.format, this.grid.locale);\n        } else {\n            return expression.searchVal;\n        }\n    }\n\n    /**\n     * Updates the content of a filterCell.\n     */\n    public updateFilteringCell(column: ColumnType) {\n        const filterCell = column.filterCell;\n        if (filterCell) {\n            filterCell.updateFilterCellArea();\n        }\n    }\n\n    public generateExpressionsList(expressions: IFilteringExpressionsTree | IFilteringExpression,\n        operator: FilteringLogic,\n        expressionsUIs: ExpressionUI[]): void {\n        generateExpressionsList(expressions, operator, expressionsUIs);\n    }\n\n    public isFilteringExpressionsTreeEmpty(expressionTree: IFilteringExpressionsTree): boolean {\n        if (FilteringExpressionsTree.empty(expressionTree)) {\n            return true;\n        }\n\n        for (const expr of expressionTree.filteringOperands) {\n            if (isTree(expr)) {\n                if (expr.filteringOperands && expr.filteringOperands.length) {\n                    return false;\n                }\n            } else {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    protected filter_internal(fieldName: string, term, conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase: boolean) {\n        const filteringTree = this.grid.filteringExpressionsTree;\n        this.grid.crudService.endEdit(false);\n        this.grid.page = 0;\n\n        const fieldFilterIndex = ExpressionsTreeUtil.findIndex(filteringTree, fieldName);\n        this.prepare_filtering_expression(filteringTree, fieldName, term, conditionOrExpressionsTree, ignoreCase, fieldFilterIndex);\n        this.grid.filteringExpressionsTree = filteringTree;\n    }\n\n    /** Modifies the filteringState object to contain the newly added filtering conditions/expressions.\n     * If createNewTree is true, filteringState will not be modified (because it directly affects the grid.filteringExpressionsTree),\n     * but a new object is created and returned.\n     */\n    protected prepare_filtering_expression(\n        filteringState: IFilteringExpressionsTree,\n        fieldName: string,\n        searchVal,\n        conditionOrExpressionsTree: IFilteringOperation | IFilteringExpressionsTree,\n        ignoreCase: boolean,\n        insertAtIndex = -1,\n        createNewTree = false): FilteringExpressionsTree {\n\n        let expressionsTree = conditionOrExpressionsTree && 'operator' in conditionOrExpressionsTree ?\n            conditionOrExpressionsTree : null;\n        const condition = conditionOrExpressionsTree && 'operator' in conditionOrExpressionsTree ?\n            null : conditionOrExpressionsTree as IFilteringOperation;\n\n        let newExpressionsTree = filteringState as FilteringExpressionsTree;\n\n        if (createNewTree) {\n            newExpressionsTree = new FilteringExpressionsTree(filteringState.operator, filteringState.fieldName);\n            newExpressionsTree.filteringOperands = [...filteringState.filteringOperands];\n        }\n\n        if (condition) {\n            const newExpression: IFilteringExpression = { fieldName: fieldName, searchVal, condition, conditionName: condition.name, ignoreCase };\n            expressionsTree = new FilteringExpressionsTree(filteringState.operator, fieldName);\n            expressionsTree.filteringOperands.push(newExpression);\n        }\n\n        if (expressionsTree) {\n            if (insertAtIndex > -1) {\n                newExpressionsTree.filteringOperands[insertAtIndex] = expressionsTree;\n            } else {\n                newExpressionsTree.filteringOperands.push(expressionsTree);\n            }\n        }\n\n        return newExpressionsTree;\n    }\n\n\n    private isFilteringTreeComplex(expressions: IFilteringExpressionsTree | IFilteringExpression): boolean {\n        if (!expressions) {\n            return false;\n        }\n\n        if (isTree(expressions)) {\n            if (expressions.operator === FilteringLogic.Or) {\n                const andOperatorsCount = this.getChildAndOperatorsCount(expressions);\n\n                // having more than one 'And' operator in the sub-tree means that the filter could not be represented without parentheses.\n                return andOperatorsCount > 1;\n            }\n\n            let isComplex = false;\n            for (const operand of expressions.filteringOperands) {\n                isComplex = isComplex || this.isFilteringTreeComplex(operand);\n            }\n\n            return isComplex;\n        }\n\n        return false;\n    }\n\n    private getChildAndOperatorsCount(expressions: IFilteringExpressionsTree): number {\n        let count = 0;\n        let operand;\n        for (let i = 0; i < expressions.filteringOperands.length; i++) {\n            operand = expressions[i];\n            if (operand && isTree(operand)) {\n                if (operand.operator === FilteringLogic.And) {\n                    count++;\n                }\n\n                count = count + this.getChildAndOperatorsCount(operand as IFilteringExpressionsTree);\n            }\n        }\n\n        return count;\n    }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, DoCheck, ElementRef, HostBinding, Input, OnInit, TemplateRef, ViewChild, inject } from '@angular/core';\nimport { IgxFilteringService } from '../grid-filtering.service';\nimport { ExpressionUI } from '../excel-style/common';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { IBaseChipEventArgs, IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxPrefixDirective } from 'igniteui-angular/input-group';\nimport { IgxBadgeComponent } from 'igniteui-angular/badge';\nimport { ColumnType, IFilteringExpression, ɵSize } from 'igniteui-angular/core';\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-filtering-cell',\n    templateUrl: './grid-filtering-cell.component.html',\n    imports: [\n        IgxChipsAreaComponent,\n        IgxChipComponent,\n        IgxIconComponent,\n        IgxPrefixDirective,\n        NgClass,\n        IgxBadgeComponent,\n        NgTemplateOutlet\n    ]\n})\nexport class IgxGridFilteringCellComponent implements AfterViewInit, OnInit, DoCheck {\n    public cdr = inject(ChangeDetectorRef);\n    public filteringService = inject(IgxFilteringService);\n\n    @Input()\n    public column: ColumnType;\n\n    @ViewChild('emptyFilter', { read: TemplateRef, static: true })\n    protected emptyFilter: TemplateRef<any>;\n\n    @ViewChild('defaultFilter', { read: TemplateRef, static: true })\n    protected defaultFilter: TemplateRef<any>;\n\n    @ViewChild('complexFilter', { read: TemplateRef, static: true })\n    protected complexFilter: TemplateRef<any>;\n\n    @ViewChild('chipsArea', { read: IgxChipsAreaComponent })\n    protected chipsArea: IgxChipsAreaComponent;\n\n    @ViewChild('moreIcon', { read: ElementRef })\n    protected moreIcon: ElementRef;\n\n    @ViewChild('ghostChip', { read: IgxChipComponent })\n    protected ghostChip: IgxChipComponent;\n\n    @ViewChild('complexChip', { read: IgxChipComponent })\n    protected complexChip: IgxChipComponent;\n\n\n    @HostBinding('class')\n    public get styleClasses(): string {\n        return this.column && this.column.selected ?\n            'igx-grid__filtering-cell--selected' :\n            'igx-grid__filtering-cell';\n    }\n\n    public expressionsList: ExpressionUI[];\n    public moreFiltersCount = 0;\n\n    @HostBinding('class.igx-grid-th--pinned')\n    public get pinnedCss() {\n        return this.column.pinned;\n    }\n\n    @HostBinding('class.igx-grid-th--pinned-last')\n    public get pinnedLastCss() {\n        return !this.column.grid.hasColumnLayouts ? this.column.isLastPinned : false;\n    }\n\n    @HostBinding('class.igx-grid-th--pinned-first')\n    public get pinnedFirstCSS() {\n        return !this.column.grid.hasColumnLayouts ? this.column.isFirstPinned : false;;\n    }\n\n    private baseClass = 'igx-grid__filtering-cell-indicator';\n\n    constructor() {\n        this.filteringService.subscribeToEvents();\n    }\n\n    public ngOnInit(): void {\n        this.filteringService.columnToMoreIconHidden.set(this.column.field, true);\n    }\n\n    public ngAfterViewInit(): void {\n        this.updateFilterCellArea();\n    }\n\n    public ngDoCheck() {\n        this.updateFilterCellArea();\n    }\n\n    /**\n     * Returns whether a chip with a given index is visible or not.\n     */\n    public isChipVisible(index: number) {\n        const expression = this.expressionsList[index];\n        return !!(expression && expression.isVisible);\n    }\n\n    /**\n     * Updates the filtering cell area.\n     */\n    public updateFilterCellArea() {\n        this.expressionsList = this.filteringService.getExpressions(this.column.field);\n        this.updateVisibleFilters();\n    }\n\n    public get template(): TemplateRef<any> {\n        if (!this.column.filterable) {\n            return null;\n        }\n        if (this.column.filterCellTemplate) {\n            return this.column.filterCellTemplate;\n        }\n        const expressionTree = this.column.filteringExpressionsTree;\n        if (!expressionTree || expressionTree.filteringOperands.length === 0) {\n            return this.emptyFilter;\n        }\n        if (this.filteringService.isFilterComplex(this.column.field)) {\n            return this.complexFilter;\n        }\n        return this.defaultFilter;\n    }\n\n    /**\n     * Gets the context passed to the filter template.\n     *\n     * @memberof IgxGridFilteringCellComponent\n     */\n    public get context() {\n        return { $implicit: this.column, column: this.column};\n    }\n\n    /**\n     * Chip clicked event handler.\n     */\n    public onChipClicked(expression?: IFilteringExpression) {\n        if (expression) {\n            this.expressionsList.forEach((item) => {\n                item.isSelected = (item.expression === expression);\n            });\n        } else if (this.expressionsList.length > 0) {\n            this.expressionsList.forEach((item) => {\n                item.isSelected = false;\n            });\n            this.expressionsList[0].isSelected = true;\n        }\n        this.filteringService.grid.navigation.performHorizontalScrollToCell(this.column.visibleIndex);\n        this.filteringService.filteredColumn = this.column;\n        this.filteringService.isFilterRowVisible = true;\n        this.filteringService.selectedExpression = expression;\n    }\n\n    /**\n     * Chip removed event handler.\n     */\n    public onChipRemoved(eventArgs: IBaseChipEventArgs, item: ExpressionUI): void {\n        const indexToRemove = this.expressionsList.indexOf(item);\n        this.removeExpression(indexToRemove);\n        this.filteringService.grid.theadRow.nativeElement.focus();\n    }\n\n    /**\n     * Clears the filtering.\n     */\n    public clearFiltering(): void {\n        this.filteringService.clearFilter(this.column.field);\n        this.cdr.detectChanges();\n    }\n\n    /**\n     * Returns the filtering indicator class.\n     */\n    public filteringIndicatorClass() {\n        return {\n            [this.baseClass]: !this.isMoreIconHidden(),\n            [`${this.baseClass}--hidden`]: this.isMoreIconHidden()\n        };\n    }\n\n    protected get filteringElementsSize(): ɵSize {\n        return this.column.grid.gridSize === ɵSize.Large ? ɵSize.Medium : this.column.grid.gridSize;\n    }\n\n    private removeExpression(indexToRemove: number) {\n        if (indexToRemove === 0 && this.expressionsList.length === 1) {\n            this.clearFiltering();\n            return;\n        }\n\n        this.filteringService.removeExpression(this.column.field, indexToRemove);\n\n        this.updateVisibleFilters();\n        this.filteringService.filterInternal(this.column.field);\n    }\n\n    private isMoreIconHidden(): boolean {\n        return this.filteringService.columnToMoreIconHidden.get(this.column.field);\n    }\n\n    private updateVisibleFilters() {\n        this.expressionsList.forEach((ex) => ex.isVisible = true);\n\n        if (this.moreIcon) {\n            this.filteringService.columnToMoreIconHidden.set(this.column.field, true);\n        }\n        this.cdr.detectChanges();\n\n        if (this.chipsArea && this.expressionsList.length > 1) {\n            const areaWidth = this.chipsArea.element.nativeElement.offsetWidth;\n            let viewWidth = 0;\n            const chipsAreaElements = this.chipsArea.element.nativeElement.children;\n            let visibleChipsCount = 0;\n            const moreIconWidth = this.moreIcon.nativeElement.offsetWidth -\n                parseInt(this.column?.grid.document.defaultView.getComputedStyle(this.moreIcon.nativeElement)['margin-left'], 10);\n\n            for (let index = 0; index < chipsAreaElements.length - 1; index++) {\n                if (viewWidth + chipsAreaElements[index].offsetWidth < areaWidth) {\n                    viewWidth += chipsAreaElements[index].offsetWidth;\n                    if (index % 2 === 0) {\n                        visibleChipsCount++;\n                    } else {\n                        viewWidth += parseInt(this.column?.grid.document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-left'], 10);\n                        viewWidth += parseInt(this.column?.grid.document.defaultView.getComputedStyle(chipsAreaElements[index])['margin-right'], 10);\n                    }\n                } else {\n                    if (index % 2 !== 0 && viewWidth + moreIconWidth > areaWidth) {\n                        visibleChipsCount--;\n                    } else if (visibleChipsCount > 0 && viewWidth - chipsAreaElements[index - 1].offsetWidth + moreIconWidth > areaWidth) {\n                        visibleChipsCount--;\n                    }\n                    this.moreFiltersCount = this.expressionsList.length - visibleChipsCount;\n                    this.filteringService.columnToMoreIconHidden.set(this.column.field, false);\n                    break;\n                }\n            }\n\n            for (let i = visibleChipsCount; i < this.expressionsList.length; i++) {\n                this.expressionsList[i].isVisible = false;\n            }\n            this.cdr.detectChanges();\n        }\n    }\n}\n","<ng-template #emptyFilter>\n    <igx-chips-area [attr.draggable]=\"false\" class=\"igx-filtering-chips\">\n        <igx-chip #ghostChip [attr.draggable]=\"false\" (click)=\"onChipClicked()\" [tabIndex]=\"-1\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon\n                [attr.draggable]=\"false\"\n                igxPrefix\n                family=\"default\"\n                name=\"filter_list\"\n            ></igx-icon>\n            <span [attr.draggable]=\"false\">{{filteringService.grid.resourceStrings.igx_grid_filter}}</span>\n        </igx-chip>\n    </igx-chips-area>\n</ng-template>\n\n<ng-template #defaultFilter>\n    <igx-chips-area #chipsArea class=\"igx-filtering-chips\">\n        <!-- expressionsList items re-created on refreshExpressions(), track stable expression -->\n        @for (item of expressionsList; track item.expression; let last = $last; let index = $index) {\n            @if (isChipVisible(index)) {\n                <igx-chip\n                    [removable]=\"true\"\n                    [tabIndex]=\"-1\"\n                    [style.--ig-size]=\"filteringElementsSize\"\n                    (click)=\"onChipClicked(item.expression)\"\n                    (remove)=\"onChipRemoved($event, item)\">\n                    <igx-icon igxPrefix\n                        family=\"default\"\n                        [name]=\"item.expression.condition.iconName\">\n                    </igx-icon>\n                    <span #label>\n                        {{filteringService.getChipLabel(item.expression)}}\n                    </span>\n                </igx-chip>\n            }\n            @if (!last && isChipVisible(index + 1)) {\n                <span class=\"igx-filtering-chips__connector\">{{filteringService.getOperatorAsString(item.afterOperator)}}</span>\n            }\n        }\n        <div #moreIcon [ngClass]=\"filteringIndicatorClass()\" (click)=\"onChipClicked()\">\n            <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n            <igx-badge [value]=\"moreFiltersCount\"></igx-badge>\n        </div>\n    </igx-chips-area>\n</ng-template>\n\n<ng-template #complexFilter>\n    <igx-chip #complexChip [removable]=\"true\" (remove)=\"clearFiltering()\" [tabIndex]=\"-1\" [style.--ig-size]=\"filteringElementsSize\">\n        <igx-icon igxPrefix family=\"default\" name=\"filter_list\"></igx-icon>\n        <span>{{filteringService.grid.resourceStrings.igx_grid_complex_filter}}</span>\n    </igx-chip>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template; context: context\"></ng-container>\n","import { AfterViewInit, Directive, ElementRef, Input, NgZone, HostListener, OnDestroy, inject } from '@angular/core';\nimport { Subject, fromEvent } from 'rxjs';\nimport { debounceTime, map, takeUntil } from 'rxjs/operators';\nimport { IgxColumnResizingService } from './resizing.service';\nimport { ColumnType } from 'igniteui-angular/core';\n\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxResizeHandle]',\n    standalone: true\n})\nexport class IgxResizeHandleDirective implements AfterViewInit, OnDestroy {\n    protected zone = inject(NgZone);\n    protected element = inject(ElementRef);\n    public colResizingService = inject(IgxColumnResizingService);\n\n\n    /**\n     * @hidden\n     */\n    @Input('igxResizeHandle')\n    public column: ColumnType;\n\n    /**\n     * @hidden\n     */\n    protected _dblClick = false;\n\n    /**\n     * @hidden\n     */\n    private destroy$ = new Subject<boolean>();\n\n    private readonly DEBOUNCE_TIME = 200;\n\n    /**\n     * @hidden\n     */\n    @HostListener('dblclick')\n    public onDoubleClick() {\n        this._dblClick = true;\n        this.initResizeService();\n        this.colResizingService.autosizeColumnOnDblClick();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngOnDestroy() {\n        this.destroy$.next(true);\n        this.destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     */\n    public ngAfterViewInit() {\n        if (!this.column.columnGroup && this.column.resizable) {\n            this.zone.runOutsideAngular(() => {\n                fromEvent<MouseEvent>(this.element.nativeElement, 'mousedown').pipe(\n                    map((event) => ({\n                        event,\n                        // Preserves the original 'event.target' in a shadow DOM context.\n                        target: event.target as HTMLElement\n                    })),\n                    debounceTime(this.DEBOUNCE_TIME),\n                    takeUntil(this.destroy$)\n                ).subscribe(({ event, target }: { event: MouseEvent; target: HTMLElement }) => {\n                    if (this._dblClick) {\n                        this._dblClick = false;\n                        return;\n                    }\n\n                    if (event.button === 0) {\n                        this._onResizeAreaMouseDown(event);\n                        this.column.grid.resizeLine.resizer.onMousedown(event, target);\n                    }\n                });\n            });\n\n            fromEvent(this.element.nativeElement, 'mouseup').pipe(\n                debounceTime(this.DEBOUNCE_TIME),\n                takeUntil(this.destroy$)\n            ).subscribe(() => {\n                this.colResizingService.isColumnResizing = false;\n                this.colResizingService.showResizer = false;\n                this.column.grid.cdr.detectChanges();\n            });\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    private _onResizeAreaMouseDown(event) {\n        this.initResizeService(event);\n\n        this.colResizingService.showResizer = true;\n        this.column.grid.cdr.detectChanges();\n    }\n\n    /**\n     * @hidden\n     */\n    protected initResizeService(event = null) {\n        this.colResizingService.column = this.column;\n\n        if (event) {\n            this.colResizingService.isColumnResizing = true;\n            this.colResizingService.startResizePos = event.clientX;\n        }\n    }\n}\n","import { Directive, Input, OnDestroy, inject } from '@angular/core';\nimport { DropPosition, IgxColumnMovingService } from './moving.service';\nimport { Subject, interval, animationFrameScheduler } from 'rxjs';\nimport { IgxColumnMovingDragDirective } from './moving.drag.directive';\nimport { takeUntil } from 'rxjs/operators';\nimport { IgxDropDirective, IgxForOfDirective, IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { ColumnType } from 'igniteui-angular/core';\n\n@Directive({\n    selector: '[igxColumnMovingDrop]',\n    standalone: true\n})\nexport class IgxColumnMovingDropDirective extends IgxDropDirective implements OnDestroy {\n    private cms = inject(IgxColumnMovingService);\n\n\n    @Input('igxColumnMovingDrop')\n    public override set data(val: ColumnType | IgxForOfDirective<ColumnType, ColumnType[]>) {\n        if (val instanceof IgxGridForOfDirective) {\n            this._displayContainer = val;\n        } else {\n            this._column = val as ColumnType;\n        }\n\n    }\n\n    public get column() {\n        return this._column;\n    }\n\n    public get isDropTarget(): boolean {\n        return this.column && this.column.grid.moving &&\n            ((!this.column.pinned && this.cms.column?.disablePinning) || !this.cms.column?.disablePinning);\n    }\n\n    public get horizontalScroll() {\n        if (this._displayContainer) {\n            return this._displayContainer;\n        }\n    }\n\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    private _dropPos: DropPosition;\n    private _dropIndicator = null;\n    private _lastDropIndicator = null;\n    private _column: ColumnType;\n    private _displayContainer: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n    private _dragLeave = new Subject<boolean>();\n    private _dropIndicatorClass = 'igx-grid-th__drop-indicator--active';\n\n    constructor() {\n        super();\n    }\n\n    public override ngOnDestroy() {\n        this._dragLeave.next(true);\n        this._dragLeave.complete();\n        super.ngOnDestroy();\n    }\n\n    public override onDragOver(event) {\n        const drag = event.detail.owner;\n        if (!(drag instanceof IgxColumnMovingDragDirective)) {\n            return;\n        }\n\n        if (this.isDropTarget &&\n            this.cms.column !== this.column &&\n            this.cms.column.level === this.column.level &&\n            this.cms.column.parent === this.column.parent) {\n\n            if (this._lastDropIndicator) {\n                this._renderer.removeClass(this._dropIndicator, this._dropIndicatorClass);\n            }\n\n            const clientRect = this.nativeElement.getBoundingClientRect();\n            const pos = clientRect.left + clientRect.width / 2;\n\n            const parent = this.nativeElement.parentElement;\n            if (event.detail.pageX < pos) {\n                this._dropPos = DropPosition.BeforeDropTarget;\n                this._lastDropIndicator = this._dropIndicator = parent.firstElementChild;\n            } else {\n                this._dropPos = DropPosition.AfterDropTarget;\n                this._lastDropIndicator = this._dropIndicator = parent.lastElementChild;\n            }\n\n            if (this.cms.icon.innerText !== 'block') {\n                this._renderer.addClass(this._dropIndicator, this._dropIndicatorClass);\n            }\n        }\n    }\n\n    public override onDragEnter(event) {\n        const drag = event.detail.owner;\n        if (!(drag instanceof IgxColumnMovingDragDirective)) {\n            return;\n        }\n\n        if (this.column && this.cms.column.grid.id !== this.column.grid.id) {\n            this.cms.icon.innerText = 'block';\n            return;\n        }\n\n        if (this.isDropTarget &&\n            this.cms.column !== this.column &&\n            this.cms.column.level === this.column.level &&\n            this.cms.column.parent === this.column.parent) {\n\n            if (!this.column.pinned || (this.column.pinned && this.cms.column.pinned)) {\n                this.cms.icon.innerText = 'swap_horiz';\n            }\n\n            this.cms.icon.innerText = 'save_alt';\n        } else {\n            this.cms.icon.innerText = 'block';\n        }\n\n        if (this.horizontalScroll) {\n            this.cms.icon.innerText = event.target.id === 'right' ? 'arrow_forward' : 'arrow_back';\n\n            interval(0, animationFrameScheduler).pipe(takeUntil(this._dragLeave)).subscribe(() => {\n                if (event.target.id === 'right') {\n                    this.horizontalScroll.scrollPosition += 10;\n                } else {\n                    this.horizontalScroll.scrollPosition -= 10;\n                }\n            });\n        }\n    }\n\n    public override onDragLeave(event) {\n        const drag = event.detail.owner;\n        if (!(drag instanceof IgxColumnMovingDragDirective)) {\n            return;\n        }\n\n        this.cms.icon.innerText = 'block';\n\n        if (this._dropIndicator) {\n            this._renderer.removeClass(this._dropIndicator, this._dropIndicatorClass);\n        }\n\n        if (this.horizontalScroll) {\n            this._dragLeave.next(true);\n        }\n    }\n\n    public override onDragDrop(event) {\n        event.preventDefault();\n        const drag = event.detail.owner;\n        if (this.cms.cancelDrop || !(drag instanceof IgxColumnMovingDragDirective)) {\n            this.cms.cancelDrop = false;\n            return;\n        }\n\n        if (this.column && (this.cms.column.grid.id !== this.column.grid.id)) {\n            return;\n        }\n\n        if (this.horizontalScroll) {\n            this._dragLeave.next(true);\n        }\n\n        if (this.isDropTarget) {\n            this.column.grid.moveColumn(this.cms.column, this.column, this._dropPos);\n\n            this.cms.column = null;\n            this.column.grid.cdr.detectChanges();\n        }\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    forwardRef,\n    HostBinding,\n    HostListener,\n    inject,\n    Input,\n    QueryList,\n    ViewChild,\n    ViewChildren\n} from '@angular/core';\nimport { IgxFilteringService } from '../filtering/grid-filtering.service';\nimport { IgxColumnResizingService } from '../resizing/resizing.service';\nimport { IgxGridHeaderComponent } from './grid-header.component';\nimport { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { GridSelectionMode } from '../common/enums';\nimport { IgxHeaderGroupStylePipe } from './pipes';\nimport { IgxResizeHandleDirective } from '../resizing/resize-handle.directive';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { IgxColumnMovingDragDirective } from '../moving/moving.drag.directive';\nimport { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { ColumnType, PlatformUtil } from 'igniteui-angular/core';\n\nconst Z_INDEX = 9999;\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-header-group',\n    templateUrl: './grid-header-group.component.html',\n    imports: [NgClass, NgStyle, IgxColumnMovingDragDirective, IgxColumnMovingDropDirective, IgxIconComponent, NgTemplateOutlet, IgxGridHeaderComponent, IgxGridFilteringCellComponent, IgxResizeHandleDirective, IgxHeaderGroupStylePipe]\n})\nexport class IgxGridHeaderGroupComponent implements DoCheck {\n\n    private cdr = inject(ChangeDetectorRef);\n    public grid = inject<GridType>(IGX_GRID_BASE);\n    private ref = inject<ElementRef<HTMLElement>>(ElementRef);\n    public colResizingService = inject(IgxColumnResizingService);\n    public filteringService = inject(IgxFilteringService);\n    protected platform = inject(PlatformUtil);\n\n\n    @HostBinding('style.grid-row-end')\n    public get rowEnd(): number {\n        return this.column.rowEnd;\n    }\n\n    @HostBinding('style.grid-column-end')\n    public get colEnd(): number {\n        return this.column.colEnd;\n    }\n\n    @HostBinding('style.grid-row-start')\n    public get rowStart(): number {\n        return this.column.rowStart;\n    }\n\n    @HostBinding('style.grid-column-start')\n    public get colStart(): number {\n        return this.column.colStart;\n    }\n\n    @HostBinding('class.igx-grid-th--pinned')\n    public get pinnedCss() {\n        return this.column.pinned;\n    }\n\n    public get headerID() {\n        return `${this.grid.id}_-1_${this.column.level}_${this.column.visibleIndex}`;\n    }\n\n    /**\n     * Gets the column of the header group.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    @Input()\n    public column: ColumnType;\n\n    @HostBinding('class.igx-grid-th--active')\n    public get active() {\n        const node = this.grid.navigation.activeNode;\n        return node && !this.column.columnGroup ?\n            node.row === -1 && node.column === this.column.visibleIndex && node.level === this.column.level : false;\n    }\n\n    public get activeGroup() {\n        const node = this.grid.navigation.activeNode;\n        return node ? node.row === -1 && node.column === this.column.visibleIndex && node.level === this.column.level : false;\n    }\n\n    /**\n     * @hidden\n     */\n    @ViewChild(IgxGridHeaderComponent)\n    public header: IgxGridHeaderComponent;\n\n    /**\n     * @hidden\n     */\n    @ViewChild(IgxGridFilteringCellComponent)\n    public filter: IgxGridFilteringCellComponent;\n\n    /**\n     * @hidden\n     */\n    @ViewChildren(forwardRef(() => IgxGridHeaderGroupComponent), { read: IgxGridHeaderGroupComponent })\n    public children: QueryList<IgxGridHeaderGroupComponent>;\n\n    /**\n     * Gets the width of the header group.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get width() {\n        return this.grid.getHeaderGroupWidth(this.column);\n    }\n\n    @HostBinding('class.igx-grid-thead__item')\n    public defaultCss = true;\n\n    @HostBinding('class.igx-grid__drag-col-header')\n    public get headerDragCss() {\n        return this.isHeaderDragged;\n    }\n\n    @HostBinding('class.igx-grid-th--filtering')\n    public get filteringCss() {\n        return this.isFiltered;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostBinding('style.z-index')\n    public get zIndex() {\n        if (!this.column.pinned) {\n            return null;\n        }\n        return Z_INDEX - this.grid.pinnedColumns.indexOf(this.column);\n    }\n\n    /**\n     * @hidden\n     */\n    public get ariaHidden(): boolean {\n        return this.grid.hasColumnGroups && (this.column.hidden || this.grid.navigation.activeNode?.row !== -1);\n    }\n\n    /**\n     * Gets whether the header group belongs to a column that is filtered.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isFiltered(): boolean {\n        return this.filteringService.filteredColumn === this.column;\n    }\n\n    /**\n     * Gets whether the header group is stored in the last column in the pinned area.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isLastPinned(): boolean {\n        return !this.grid.hasColumnLayouts ? this.column.isLastPinned : false;\n    }\n\n    /**\n     * Gets whether the header group is stored in the first column of the right pinned area.\n     */\n    public get isFirstPinned(): boolean {\n        return !this.grid.hasColumnLayouts ? this.column.isFirstPinned : false;\n    }\n\n    @HostBinding('style.display')\n    public get groupDisplayStyle(): string {\n        return this.grid.hasColumnLayouts && this.column.children ? 'flex' : '';\n    }\n\n    /**\n     * Gets whether the header group is stored in a pinned column.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isPinned(): boolean {\n        return this.column.pinned;\n    }\n\n    /**\n     * Gets whether the header group belongs to a column that is moved.\n     *\n     * @memberof IgxGridHeaderGroupComponent\n     */\n    public get isHeaderDragged(): boolean {\n        return this.grid.columnInDrag === this.column;\n    }\n\n    /**\n     * @hidden\n     */\n    public get hasLastPinnedChildColumn(): boolean {\n        return this.column.allChildren.some(child => child.isLastPinned);\n    }\n\n    /**\n     * @hidden\n     */\n    public get hasFirstPinnedChildColumn(): boolean {\n        return this.column.allChildren.some(child => child.isFirstPinned);\n    }\n\n    /**\n     * @hidden\n     */\n    public get selectable() {\n        const selectableChildren = this.column.allChildren.filter(c => !c.hidden && c.selectable && !c.columnGroup);\n        return this.grid.columnSelection !== GridSelectionMode.none &&\n            this.column.applySelectableClass\n            && !this.selected && selectableChildren.length > 0\n            && !this.grid.filteringService.isFilterRowVisible;\n    }\n\n    /**\n     * @hidden\n     */\n    public get selected() {\n        return this.column.selected;\n    }\n\n    /**\n     * @hidden\n     */\n    public get height() {\n        return this.nativeElement.getBoundingClientRect().height;\n    }\n\n    /**\n     * @hidden\n     */\n    public get title() {\n        return this.column.title || this.column.header;\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    /**\n     * @hidden\n     */\n    @HostListener('mousedown', ['$event'])\n    public onMouseDown(event: MouseEvent): void {\n        if (!this.grid.allowFiltering ||\n            (event.composedPath().findIndex(el =>\n                (el as Element).tagName?.toLowerCase() === 'igx-grid-filtering-cell') < 1)) {\n                // Hack for preventing text selection in IE and Edge while dragging the resize element\n                event.preventDefault();\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    public groupClicked(event: MouseEvent): void {\n        const columnsToSelect = this.column.allChildren.filter(c => !c.hidden && c.selectable && !c.columnGroup).map(c => c.field);\n        if (this.grid.columnSelection !== GridSelectionMode.none\n            && columnsToSelect.length > 0 && !this.grid.filteringService.isFilterRowVisible) {\n            const clearSelection = this.grid.columnSelection === GridSelectionMode.single || !event.ctrlKey;\n            const rangeSelection = this.grid.columnSelection === GridSelectionMode.multiple && event.shiftKey;\n            if (!this.selected) {\n                this.grid.selectionService.selectColumns(columnsToSelect, clearSelection, rangeSelection, event);\n            } else {\n                const selectedFields = this.grid.selectionService.getSelectedColumns();\n                if ((selectedFields.length === columnsToSelect.length) && selectedFields.every(el => columnsToSelect.includes(el))\n                    || !clearSelection) {\n                    this.grid.selectionService.deselectColumns(columnsToSelect, event);\n                } else {\n                    this.grid.selectionService.selectColumns(columnsToSelect, clearSelection, rangeSelection, event);\n                }\n            }\n        }\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public onPointerDownIndicator(event) {\n        // Stop propagation of pointer events to now allow column dragging using the header indicators.\n        event.stopPropagation();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public toggleExpandState(event: MouseEvent): void {\n        event.stopPropagation();\n        this.column.expanded = !this.column.expanded;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public pointerdown(event: PointerEvent): void {\n        event.stopPropagation();\n        this.activate();\n        this.grid.theadRow.nativeElement.focus();\n    }\n\n    /*\n     * This method is necessary due to some specifics related with implementation of column moving\n     * @hidden\n     */\n    public activate() {\n        this.grid.navigation.setActiveNode(this.activeNode);\n        this.grid.theadRow.nativeElement.focus();\n    }\n\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n    /**\n     * @hidden\n     */\n    public onPinterEnter() {\n        this.column.applySelectableClass = true;\n    }\n\n    /**\n     * @hidden\n     */\n    public onPointerLeave() {\n        this.column.applySelectableClass = false;\n    }\n\n    protected get activeNode() {\n        return {\n            row: -1, column: this.column.visibleIndex, level: this.column.level,\n            mchCache: { level: this.column.level, visibleIndex: this.column.visibleIndex },\n            layout: this.column.columnLayoutChild ? {\n                rowStart: this.column.rowStart,\n                colStart: this.column.colStart,\n                rowEnd: this.column.rowEnd,\n                colEnd: this.column.colEnd,\n                columnVisibleIndex: this.column.visibleIndex\n            } : null\n        };\n    }\n}\n","@if (grid.hasColumnLayouts && column.columnGroup) {\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-left\"></span>\n    }\n    <div class=\"igx-grid-thead__group igx-grid__mrl-block\"\n     [ngClass]=\"{\n         'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n         'igx-grid-th--pinned-first': hasFirstPinnedChildColumn\n        }\"\n     [ngStyle]=\"{'grid-template-rows':column.getGridTemplate(true),\n     'grid-template-columns':column.getGridTemplate(false)}\">\n        @for (child of column.children; track child) {\n            @if (!child.hidden) {\n                <igx-grid-header-group class=\"igx-grid-thead__subgroup\"\n                    [ngClass]=\"child.headerGroupClasses\"\n                    [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n                    [column]=\"child\">\n                </igx-grid-header-group>\n            }\n        }\n    </div>\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-right\"></span>\n    }\n}\n\n\n<ng-template #defaultColumn>\n    <span class=\"igx-grid-th__group-title\" [title]=\"title\">{{column.header}}</span>\n</ng-template>\n\n<ng-template #defaultCollapseIndicator>\n    <igx-icon\n        family=\"default\"\n        [name]=\"column.expanded ? 'tree_collapse' : 'tree_expand'\">\n    </igx-icon>\n</ng-template>\n\n@if (!grid.hasColumnLayouts && column.columnGroup) {\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-left\"></span>\n    }\n    <div class=\"igx-grid-thead__title\"\n        role=\"columnheader\"\n        [id]=\"headerID\"\n        [attr.aria-hidden]=\"ariaHidden\"\n        [attr.aria-label]=\"column.header || column.field\"\n        [attr.aria-expanded]=\"column.expanded\"\n        [attr.aria-selected]=\"column.selected\"\n        [attr.aria-colindex]=\"column.index + 1\"\n        [attr.aria-colspan]=\"column.children.length\"\n        [attr.aria-rowindex]=\"1\"\n        [ngClass]=\"{\n            'igx-grid-th--pinned-last': hasLastPinnedChildColumn,\n            'igx-grid-th--pinned-first': hasFirstPinnedChildColumn,\n            'igx-grid-th--collapsible': column.collapsible,\n            'igx-grid-th--selectable': selectable,\n            'igx-grid-th--selected': selected,\n            'igx-grid-th--active': activeGroup}\"\n        [igxColumnMovingDrag]=\"column\"\n        [ghostHost]=\"grid.outlet.nativeElement\"\n        [attr.droppable]=\"true\"\n        [igxColumnMovingDrop]=\"column\"\n        (pointerdown)=\"pointerdown($event)\"\n        (click)=\"groupClicked($event)\"\n        (pointerenter)=\"onPinterEnter()\"\n        (pointerleave)=\"onPointerLeave()\"\n        [style.max-width]=\"column.resolvedWidth\"\n        [style.flex-basis]=\"column.resolvedWidth\"\n        >\n        @if (column.collapsible) {\n            <div class=\"igx-grid-th__expander\" (pointerdown)=\"onPointerDownIndicator($event)\" (click)=\"toggleExpandState($event)\">\n                <ng-container\n                    *ngTemplateOutlet=\"column.collapsibleIndicatorTemplate ? column.collapsibleIndicatorTemplate : defaultCollapseIndicator; context: {$implicit: column, column: column}\">\n                </ng-container>\n            </div>\n        }\n        <ng-container *ngTemplateOutlet=\"column.headerTemplate ? column.headerTemplate : defaultColumn; context: { $implicit: column, column: column}\">\n        </ng-container>\n    </div>\n    @if (grid.type !== 'pivot') {\n        <div class=\"igx-grid-thead__group\">\n            @for (child of column.children; track child) {\n                @if (!child.hidden) {\n                    <igx-grid-header-group class=\"igx-grid-thead__subgroup\"\n                        [ngClass]=\"child.headerGroupClasses\"\n                        [ngStyle]=\"child.headerGroupStyles | igxHeaderGroupStyle:child:grid.pipeTrigger\"\n                        [column]=\"child\">\n                    </igx-grid-header-group>\n                }\n            }\n        </div>\n    }\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-right\"></span>\n    }\n}\n\n@if (!column.columnGroup) {\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-left\"></span>\n    }\n    <igx-grid-header\n        role=\"columnheader\"\n        [attr.aria-hidden]=\"ariaHidden\"\n        class=\"igx-grid-th--fw\"\n        [id]=\"headerID\"\n        [ngClass]=\"column.headerClasses\"\n        [ngStyle]=\"column.headerStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n        [igxColumnMovingDrag]=\"column\"\n        [ghostHost]=\"grid.outlet.nativeElement\"\n        [attr.droppable]=\"true\"\n        (pointerdown)=\"activate()\"\n        [style.width]=\"column.resolvedWidth\"\n        [igxColumnMovingDrop]=\"column\"\n        [column]=\"column\"\n    >\n    </igx-grid-header>\n    @if (grid.allowFiltering && grid.filterMode === 'quickFilter') {\n        <igx-grid-filtering-cell [column]=\"column\" [attr.draggable]=\"false\" [style.width]=\"column.resolvedWidth\"></igx-grid-filtering-cell>\n    }\n    @if (!column.columnGroup && column.resizable) {\n        <span class=\"igx-grid-th__resize-handle\"\n            [igxResizeHandle]=\"column\"\n            [attr.draggable]=\"false\"\n            [style.cursor]=\"colResizingService.resizeCursor\">\n        </span>\n    }\n    @if (grid.moving) {\n        <span class=\"igx-grid-th__drop-indicator-right\"></span>\n    }\n}\n","import {\n    AfterViewInit,\n    ChangeDetectorRef,\n    Component,\n    Input,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    QueryList,\n    ElementRef,\n    HostBinding,\n    ChangeDetectionStrategy,\n    ViewRef,\n    HostListener,\n    OnDestroy,\n    InjectionToken,\n    inject,\n    OnInit} from '@angular/core';\nimport { IgxFilteringService } from '../grid-filtering.service';\nimport { Subject } from 'rxjs';\nimport { debounceTime, takeUntil } from 'rxjs/operators';\nimport { ExpressionUI } from '../excel-style/common';\nimport { NgTemplateOutlet, NgClass } from '@angular/common';\nimport { IgxDropDownComponent, IgxDropDownItemComponent, IgxDropDownItemNavigationDirective, ISelectionEventArgs } from 'igniteui-angular/drop-down';\nimport { IBaseChipEventArgs, IgxChipComponent, IgxChipsAreaComponent } from 'igniteui-angular/chips';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\nimport { AbsoluteScrollStrategy, ColumnType, ConnectedPositioningStrategy, DataUtil, FilteringLogic, GridColumnDataType, HorizontalAlignment, IFilteringExpression, IFilteringOperation, IgxPickerClearComponent, IgxPickerToggleComponent, isEqual, OverlaySettings, PlatformUtil, ɵSize, VerticalAlignment } from 'igniteui-angular/core';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\nimport { IgxButtonDirective, IgxDateTimeEditorDirective, IgxIconButtonDirective, IgxRippleDirective } from 'igniteui-angular/directives';\n\n/**\n * Injection token for setting the debounce time used in filtering row inputs.\n * @hidden\n */\nexport const INPUT_DEBOUNCE_TIME = /*@__PURE__*/new InjectionToken<number>('INPUT_DEBOUNCE_TIME', {\n    factory: () => 350\n});\n\n/**\n * @hidden\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-filtering-row',\n    templateUrl: './grid-filtering-row.component.html',\n    imports: [\n        IgxDropDownComponent,\n        IgxDropDownItemComponent,\n        IgxChipsAreaComponent,\n        IgxChipComponent,\n        IgxIconComponent,\n        IgxInputGroupComponent,\n        IgxPrefixDirective,\n        IgxDropDownItemNavigationDirective,\n        IgxInputDirective,\n        IgxSuffixDirective,\n        IgxDatePickerComponent,\n        IgxPickerToggleComponent,\n        IgxPickerClearComponent,\n        IgxTimePickerComponent,\n        IgxDateTimeEditorDirective,\n        NgTemplateOutlet,\n        IgxButtonDirective,\n        NgClass,\n        IgxRippleDirective,\n        IgxIconButtonDirective\n    ]\n})\nexport class IgxGridFilteringRowComponent implements OnInit, AfterViewInit, OnDestroy {\n    public filteringService = inject(IgxFilteringService);\n    public ref = inject<ElementRef<HTMLElement>>(ElementRef);\n    public cdr = inject(ChangeDetectorRef);\n    protected platform = inject(PlatformUtil);\n\n    @Input()\n    public get column(): ColumnType {\n        return this._column;\n    }\n\n    public set column(val) {\n        if (this._column) {\n            this.expressionsList.forEach(exp => exp.isSelected = false);\n        }\n        if (val) {\n            this._column = val;\n\n            this.expressionsList = this.filteringService.getExpressions(this._column.field);\n            this.resetExpression();\n\n            this.chipAreaScrollOffset = 0;\n            this.transform(this.chipAreaScrollOffset);\n        }\n    }\n\n    @Input()\n    public get value(): any {\n        return this._value;\n    }\n\n    public set value(val) {\n        if (!val && val !== 0 && (this.expression.searchVal || this.expression.searchVal === 0)) {\n            this.expression.searchVal = null;\n            this._value = null;\n            const index = this.expressionsList.findIndex(item => item.expression === this.expression);\n            if (index === 0 && this.expressionsList.length === 1 && !this.expression.condition.isUnary) {\n                this.filteringService.clearFilter(this.column.field);\n            }\n        } else {\n            if (val === '') {\n                return;\n            }\n            const oldValue = this.expression.searchVal;\n            if (isEqual(oldValue, val)) {\n                return;\n            }\n\n            this._value = val;\n            this.expression.searchVal = DataUtil.parseValue(this.column.dataType, val);\n            if (this.expressionsList.find(item => item.expression === this.expression) === undefined) {\n                this.addExpression(true);\n            }\n            this.filter();\n        }\n    }\n\n    protected get filteringElementsSize(): ɵSize {\n        // needed because we want the size of the chips to be either Medium or Small\n        return this.column.grid.gridSize === ɵSize.Large ? ɵSize.Medium : this.column.grid.gridSize;\n    }\n\n    @HostBinding('class.igx-grid__filtering-row')\n    public defaultCSSClass = true;\n\n    @ViewChild('defaultFilterUI', { read: TemplateRef, static: true })\n    protected defaultFilterUI: TemplateRef<any>;\n\n    @ViewChild('defaultDateUI', { read: TemplateRef, static: true })\n    protected defaultDateUI: TemplateRef<any>;\n\n    @ViewChild('defaultTimeUI', { read: TemplateRef, static: true })\n    protected defaultTimeUI: TemplateRef<any>;\n\n    @ViewChild('defaultDateTimeUI', { read: TemplateRef, static: true })\n    protected defaultDateTimeUI: TemplateRef<any>;\n\n    @ViewChild('input', { read: ElementRef })\n    protected input: ElementRef<HTMLInputElement>;\n\n    @ViewChild('inputGroupConditions', { read: IgxDropDownComponent, static: true })\n    protected dropDownConditions: IgxDropDownComponent;\n\n    @ViewChild('chipsArea', { read: IgxChipsAreaComponent, static: true })\n    protected chipsArea: IgxChipsAreaComponent;\n\n    @ViewChildren('operators', { read: IgxDropDownComponent })\n    protected dropDownOperators: QueryList<IgxDropDownComponent>;\n\n    @ViewChild('inputGroup', { read: ElementRef })\n    protected inputGroup: ElementRef<HTMLElement>;\n\n    @ViewChild('picker')\n    protected picker: IgxDatePickerComponent | IgxTimePickerComponent;\n\n    @ViewChild('inputGroupPrefix', { read: ElementRef })\n    protected inputGroupPrefix: ElementRef<HTMLElement>;\n\n    @ViewChild('container', { static: true })\n    protected container: ElementRef<HTMLElement>;\n\n    @ViewChild('operand')\n    protected operand: ElementRef<HTMLElement>;\n\n    @ViewChild('closeButton', { static: true })\n    protected closeButton: ElementRef<HTMLElement>;\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    public showArrows: boolean;\n    public expression: IFilteringExpression;\n    public expressionsList: Array<ExpressionUI>;\n\n    private _positionSettings = {\n        horizontalStartPoint: HorizontalAlignment.Left,\n        verticalStartPoint: VerticalAlignment.Bottom\n    };\n\n    private _conditionsOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        positionStrategy: new ConnectedPositioningStrategy(this._positionSettings)\n    };\n\n    private _operatorsOverlaySettings: OverlaySettings = {\n        closeOnOutsideClick: true,\n        modal: false,\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        positionStrategy: new ConnectedPositioningStrategy(this._positionSettings)\n    };\n\n    private chipsAreaWidth: number;\n    private chipAreaScrollOffset = 0;\n    private _column = null;\n    private isKeyPressed = false;\n    private isComposing = false;\n    private _cancelChipClick = false;\n    private _value = null;\n\n    /** switch to icon buttons when width is below 432px */\n    private readonly NARROW_WIDTH_THRESHOLD = 432;\n\n    private inputSubject: Subject<KeyboardEvent> = new Subject<KeyboardEvent>();\n\n    private $destroyer = new Subject<void>();\n    private readonly DEBOUNCE_TIME = inject(INPUT_DEBOUNCE_TIME);\n\n    public ngOnInit(): void {\n        this.inputSubject.pipe(\n            debounceTime(this.DEBOUNCE_TIME),\n            takeUntil(this.$destroyer)\n        ).subscribe(event => {\n            this.handleInputChange(event);\n            this.cdr.markForCheck(); // ChangeDetectionStrategy.OnPush is not picking the latest changes of the updated value because of the async pipe + debounce.\n        });\n    }\n\n    @HostListener('keydown', ['$event'])\n    public onKeydownHandler(evt: KeyboardEvent) {\n        if (this.platform.isFilteringKeyCombo(evt)) {\n            evt.preventDefault();\n            evt.stopPropagation();\n            this.close();\n        }\n    }\n\n    public ngAfterViewInit() {\n        this._conditionsOverlaySettings.outlet = this.column.grid.outlet;\n        this._operatorsOverlaySettings.outlet = this.column.grid.outlet;\n\n        const selectedItem = this.expressionsList.find(expr => expr.isSelected === true);\n        if (selectedItem) {\n            this.expression = selectedItem.expression;\n            this._value = this.expression.searchVal;\n        }\n\n        this.filteringService.grid.localeChange\n            .pipe(takeUntil(this.$destroyer))\n            .subscribe(() => {\n                this.cdr.markForCheck();\n            });\n\n        requestAnimationFrame(() => this.focusEditElement());\n    }\n\n    public get disabled(): boolean {\n        return !(this.column.filteringExpressionsTree && this.column.filteringExpressionsTree.filteringOperands.length > 0);\n    }\n\n    public get template(): TemplateRef<any> {\n        if (this.column.dataType === GridColumnDataType.Date) {\n            return this.defaultDateUI;\n        }\n        if (this.column.dataType === GridColumnDataType.Time) {\n            return this.defaultTimeUI;\n        }\n        if (this.column.dataType === GridColumnDataType.DateTime) {\n            return this.defaultDateTimeUI;\n        }\n        return this.defaultFilterUI;\n    }\n\n    public get type() {\n        switch (this.column.dataType) {\n            case GridColumnDataType.String:\n            case GridColumnDataType.Boolean:\n                return 'text';\n            case GridColumnDataType.Number:\n            case GridColumnDataType.Currency:\n                return 'number';\n        }\n    }\n\n    public get conditions(): any {\n        return this.column.filters.conditionList();\n    }\n\n    public get isUnaryCondition(): boolean {\n        if (this.expression.condition) {\n            return this.expression.condition.isUnary;\n        } else {\n            return true;\n        }\n    }\n\n    public get placeholder(): string {\n        if (this.expression.condition && this.expression.condition.isUnary) {\n            return this.filteringService.getChipLabel(this.expression);\n        } else if (this.column.dataType === GridColumnDataType.Date) {\n            return this.filteringService.grid.resourceStrings.igx_grid_filter_row_date_placeholder;\n        } else if (this.column.dataType === GridColumnDataType.Boolean) {\n            return this.filteringService.grid.resourceStrings.igx_grid_filter_row_boolean_placeholder;\n        } else {\n            return this.filteringService.grid.resourceStrings.igx_grid_filter_row_placeholder;\n        }\n    }\n\n    /**\n     * Event handler for keydown on the input group's prefix.\n     */\n    public onPrefixKeyDown(event: KeyboardEvent) {\n        if (this.platform.isActivationKey(event) && this.dropDownConditions.collapsed) {\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n            event.stopImmediatePropagation();\n        } else if (event.key === this.platform.KEYMAP.TAB && !this.dropDownConditions.collapsed) {\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n        }\n    }\n\n    /**\n     * Event handler for keydown on the input.\n     */\n    public onInputKeyDown(event: KeyboardEvent) {\n        this.isKeyPressed = true;\n        event.stopPropagation();\n        if (this.column.dataType === GridColumnDataType.Boolean) {\n            if (this.platform.isActivationKey(event)) {\n                this.inputGroupPrefix.nativeElement.focus();\n                this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n                return;\n            }\n        }\n        if (event.key === this.platform.KEYMAP.ENTER) {\n            if (this.isComposing) {\n                return;\n            }\n            this.commitInput();\n        } else if (event.altKey && (event.key === this.platform.KEYMAP.ARROW_DOWN)) {\n            this.inputGroupPrefix.nativeElement.focus();\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n        } else if (this.platform.isFilteringKeyCombo(event)) {\n            event.preventDefault();\n            this.close();\n        }\n    }\n\n    /**\n     * Event handler for keyup on the input.\n     */\n    public onInputKeyUp() {\n        this.isKeyPressed = false;\n    }\n\n    /**\n     * Event handler for input on the input.\n     */\n    public onInput(eventArgs) {\n        this.inputSubject.next(eventArgs);\n    }\n\n    private handleInputChange(eventArgs) {\n        if (!eventArgs) {\n            return;\n        }\n\n        // The 'iskeyPressed' flag is needed for a case in IE, because the input event is fired on focus and for some reason,\n        // when you have a japanese character as a placeholder, on init the value here is empty string .\n        const target = eventArgs.target;\n        if (this.column.dataType === GridColumnDataType.DateTime) {\n            this.value = eventArgs;\n            return;\n        }\n        if (this.platform.isEdge && target.type !== 'number'\n            || this.isKeyPressed || target.value || target.checkValidity()) {\n            this.value = target.value;\n        }\n    }\n\n    /**\n     * Event handler for compositionstart on the input.\n     */\n    public onCompositionStart() {\n        this.isComposing = true;\n    }\n\n    /**\n     * Event handler for compositionend on the input.\n     */\n    public onCompositionEnd() {\n        this.isComposing = false;\n    }\n\n    /**\n     * Event handler for input click event.\n     */\n    public onInputClick() {\n        if (this.column.dataType === GridColumnDataType.Boolean && this.dropDownConditions.collapsed) {\n            this.inputGroupPrefix.nativeElement.focus();\n            this.toggleConditionsDropDown(this.inputGroupPrefix.nativeElement);\n        }\n    }\n\n    /**\n     * Returns the filtering operation condition for a given value.\n     */\n    public getCondition(value: string): IFilteringOperation {\n        return this.column.filters.condition(value);\n    }\n\n    /**\n     * Returns the translated condition name for a given value.\n     */\n    public translateCondition(value: string): string {\n        return this.filteringService.grid.resourceStrings[`igx_grid_filter_${this.getCondition(value).name}`] || value;\n    }\n\n    /**\n     * Returns the icon name of the current condition.\n     */\n    public getIconName(): string {\n        if (this.column.dataType === GridColumnDataType.Boolean && this.expression.condition === null) {\n            return this.getCondition(this.conditions[0]).iconName;\n        } else {\n            return this.expression.condition.iconName;\n        }\n    }\n\n    /**\n     * Returns whether a given condition is selected in dropdown.\n     */\n    public isConditionSelected(conditionName: string): boolean {\n        if (this.expression.condition) {\n            return this.expression.condition.name === conditionName;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Clears the current filtering.\n     */\n    public clearFiltering() {\n        this.filteringService.clearFilter(this.column.field);\n        this.resetExpression();\n        if (this.input) {\n            this.input.nativeElement.focus();\n        }\n        this.cdr.detectChanges();\n\n        this.chipAreaScrollOffset = 0;\n        this.transform(this.chipAreaScrollOffset);\n    }\n\n    /**\n     * Commits the value of the input.\n     */\n    public commitInput() {\n        const selectedItem = this.expressionsList.filter(ex => ex.isSelected === true);\n        selectedItem.forEach(e => e.isSelected = false);\n\n        let indexToDeselect = -1;\n        for (let index = 0; index < this.expressionsList.length; index++) {\n            const expression = this.expressionsList[index].expression;\n            if (expression.searchVal === null && !expression.condition.isUnary) {\n                indexToDeselect = index;\n            }\n        }\n        if (indexToDeselect !== -1) {\n            this.removeExpression(indexToDeselect, this.expression);\n        }\n        this.resetExpression();\n        this._value = this.expression.searchVal;\n        this.scrollChipsWhenAddingExpression();\n    }\n\n    /**\n     * Clears the value of the input.\n     */\n    public clearInput(event?: MouseEvent) {\n        event?.stopPropagation();\n        this.value = null;\n    }\n\n    /**\n     * Event handler for keydown on clear button.\n     */\n    public onClearKeyDown(eventArgs: KeyboardEvent) {\n        if (this.platform.isActivationKey(eventArgs)) {\n            eventArgs.preventDefault();\n            this.clearInput();\n            this.focusEditElement();\n        }\n    }\n\n    /**\n     * Event handler for click on clear button.\n     */\n    public onClearClick() {\n        this.clearInput();\n        this.focusEditElement();\n    }\n\n    /**\n     * Event handler for keydown on commit button.\n     */\n    public onCommitKeyDown(eventArgs: KeyboardEvent) {\n        if (this.platform.isActivationKey(eventArgs)) {\n            eventArgs.preventDefault();\n            this.commitInput();\n            this.focusEditElement();\n        }\n    }\n\n    /**\n     * Event handler for click on commit button.\n     */\n    public onCommitClick(event?: MouseEvent) {\n        event?.stopPropagation();\n        this.commitInput();\n        this.focusEditElement();\n    }\n\n    /**\n     * Event handler for focusout on the input group.\n     */\n    public onInputGroupFocusout() {\n        if (!this.value && this.value !== 0 &&\n            this.expression.condition && !this.expression.condition.isUnary) {\n            return;\n        }\n        requestAnimationFrame(() => {\n            const focusedElement = this.column?.grid.document.activeElement;\n\n            if (focusedElement.classList.contains('igx-chip__remove')) {\n                return;\n            }\n\n            if (!(focusedElement && this.editorFocused(focusedElement))\n                && this.dropDownConditions.collapsed) {\n                this.commitInput();\n            }\n        });\n    }\n\n    /**\n     * Closes the filtering edit row.\n     */\n    public close() {\n        if (this.expressionsList.length === 1 &&\n            this.expressionsList[0].expression.searchVal === null &&\n            this.expressionsList[0].expression.condition.isUnary === false) {\n            this.filteringService.getExpressions(this.column.field).pop();\n\n            this.filter();\n        } else {\n            const condToRemove = this.expressionsList.filter(ex => ex.expression.searchVal === null && !ex.expression.condition.isUnary);\n            if (condToRemove && condToRemove.length > 0) {\n                condToRemove.forEach(c => this.filteringService.removeExpression(this.column.field, this.expressionsList.indexOf(c)));\n                this.filter();\n            }\n        }\n\n        this.filteringService.isFilterRowVisible = false;\n        this.filteringService.updateFilteringCell(this.column);\n        this.filteringService.filteredColumn = null;\n        this.filteringService.selectedExpression = null;\n        this.filteringService.grid.theadRow.nativeElement.focus();\n\n        this.chipAreaScrollOffset = 0;\n        this.transform(this.chipAreaScrollOffset);\n    }\n\n    /**\n     *  Event handler for date picker's selection.\n     */\n    public onDateSelected(value: Date) {\n        this.value = value;\n    }\n\n    /** @hidden @internal */\n    public inputGroupPrefixClick(event: MouseEvent) {\n        event.stopPropagation();\n        (event.currentTarget as HTMLElement).focus();\n        this.toggleConditionsDropDown(event.currentTarget);\n    }\n\n    /**\n     * Opens the conditions dropdown.\n     */\n    public toggleConditionsDropDown(target: any) {\n        this._conditionsOverlaySettings.target = target;\n        this._conditionsOverlaySettings.excludeFromOutsideClick = [target as HTMLElement];\n        this.dropDownConditions.toggle(this._conditionsOverlaySettings);\n    }\n\n    /**\n     * Opens the logic operators dropdown.\n     */\n    public toggleOperatorsDropDown(eventArgs, index) {\n        this._operatorsOverlaySettings.target = eventArgs.target.parentElement;\n        this._operatorsOverlaySettings.excludeFromOutsideClick = [eventArgs.target.parentElement as HTMLElement];\n        this.dropDownOperators.toArray()[index].toggle(this._operatorsOverlaySettings);\n    }\n\n    /**\n     * Event handler for change event in conditions dropdown.\n     */\n    public onConditionsChanged(eventArgs) {\n        const value = (eventArgs.newSelection as IgxDropDownItemComponent).value;\n        this.expression.condition = this.getCondition(value);\n        this.expression.conditionName = value;\n        if (this.expression.condition.isUnary) {\n            // update grid's filtering on the next cycle to ensure the drop-down is closed\n            // if the drop-down is not closed this event handler will be invoked multiple times\n            requestAnimationFrame(() => this.unaryConditionChangedCallback());\n        } else {\n            requestAnimationFrame(() => this.conditionChangedCallback());\n        }\n\n        // Add requestAnimationFrame because of an issue in IE, where you are still able to write in the input,\n        // if it has been focused and then set to readonly.\n        requestAnimationFrame(() => this.focusEditElement());\n    }\n\n\n    public onChipPointerdown(args, chip: IgxChipComponent) {\n        const activeElement = this.column?.grid.document.activeElement;\n        this._cancelChipClick = chip.selected\n            && activeElement && this.editorFocused(activeElement);\n    }\n\n    public onChipClick(args, item: ExpressionUI) {\n        if (this._cancelChipClick) {\n            this._cancelChipClick = false;\n            return;\n        }\n\n        this.expressionsList.forEach(ex => ex.isSelected = false);\n\n        this.toggleChip(item);\n    }\n\n    public toggleChip(item: ExpressionUI) {\n        item.isSelected = !item.isSelected;\n        if (item.isSelected) {\n            this.expression = item.expression;\n            this._value = this.expression.searchVal;\n            this.focusEditElement();\n        }\n    }\n\n    /**\n     * Event handler for chip keydown event.\n     */\n    public onChipKeyDown(eventArgs: KeyboardEvent, item: ExpressionUI) {\n        if (eventArgs.key === this.platform.KEYMAP.ENTER) {\n            eventArgs.preventDefault();\n\n            this.toggleChip(item);\n        }\n    }\n\n    /**\n     * Scrolls the first chip into view if the tab key is pressed on the left arrow.\n     */\n    public onLeftArrowKeyDown(event: KeyboardEvent) {\n        if (event.key === this.platform.KEYMAP.TAB) {\n            this.chipAreaScrollOffset = 0;\n            this.transform(this.chipAreaScrollOffset);\n        }\n    }\n\n    /**\n     * Event handler for chip removed event.\n     */\n    public onChipRemoved(eventArgs: IBaseChipEventArgs, item: ExpressionUI) {\n        const indexToRemove = this.expressionsList.indexOf(item);\n        this.removeExpression(indexToRemove, item.expression);\n\n        this.scrollChipsOnRemove();\n    }\n\n    /**\n     * Event handler for logic operator changed event.\n     */\n    public onLogicOperatorChanged(eventArgs: ISelectionEventArgs, expression: ExpressionUI) {\n        if (eventArgs.oldSelection) {\n            expression.afterOperator = (eventArgs.newSelection as IgxDropDownItemComponent).value;\n            this.expressionsList[this.expressionsList.indexOf(expression) + 1].beforeOperator = expression.afterOperator;\n\n            // update grid's filtering on the next cycle to ensure the drop-down is closed\n            // if the drop-down is not closed this event handler will be invoked multiple times\n            requestAnimationFrame(() => this.filter());\n        }\n    }\n\n    /**\n     * Scrolls the chips into the chip area when left or right arrows are pressed.\n     */\n    public scrollChipsOnArrowPress(arrowPosition: string) {\n        let count = 0;\n        const chipAraeChildren = this.chipsArea.element.nativeElement.children;\n        const containerRect = this.container.nativeElement.getBoundingClientRect();\n\n        if (arrowPosition === 'right') {\n            for (const chip of chipAraeChildren) {\n                if (Math.ceil(chip.getBoundingClientRect().right) < Math.ceil(containerRect.right)) {\n                    count++;\n                }\n            }\n\n            if (count < chipAraeChildren.length) {\n                this.chipAreaScrollOffset -= Math.ceil(chipAraeChildren[count].getBoundingClientRect().right) -\n                    Math.ceil(containerRect.right) + 1;\n                this.transform(this.chipAreaScrollOffset);\n            }\n        }\n\n        if (arrowPosition === 'left') {\n            for (const chip of chipAraeChildren) {\n                if (Math.ceil(chip.getBoundingClientRect().left) < Math.ceil(containerRect.left)) {\n                    count++;\n                }\n            }\n\n            if (count > 0) {\n                this.chipAreaScrollOffset += Math.ceil(containerRect.left) -\n                    Math.ceil(chipAraeChildren[count - 1].getBoundingClientRect().left) + 1;\n                this.transform(this.chipAreaScrollOffset);\n            }\n        }\n    }\n\n    /**\n     * @hidden\n     * Resets the chips area\n     * @memberof IgxGridFilteringRowComponent\n     */\n    public resetChipsArea() {\n        this.chipAreaScrollOffset = 0;\n        this.transform(this.chipAreaScrollOffset);\n        this.showHideArrowButtons();\n    }\n\n    /** @hidden @internal */\n    public focusEditElement() {\n        if (this.input) {\n            this.input.nativeElement.focus();\n        } else if (this.picker) {\n            this.picker.getEditElement().focus();\n        }\n    }\n\n    public ngOnDestroy() {\n        this.$destroyer.next();\n    }\n\n    private showHideArrowButtons() {\n        requestAnimationFrame(() => {\n            if (this.filteringService.isFilterRowVisible) {\n                const containerWidth = this.container.nativeElement.getBoundingClientRect().width;\n                this.chipsAreaWidth = this.chipsArea.element.nativeElement.getBoundingClientRect().width;\n\n                this.showArrows = this.chipsAreaWidth >= containerWidth && this.isColumnFiltered;\n\n                // TODO: revise the cdr.detectChanges() usage here\n                if (!(this.cdr as ViewRef).destroyed) {\n                    this.cdr.detectChanges();\n                }\n            }\n        });\n    }\n\n    private addExpression(isSelected: boolean) {\n        const exprUI = new ExpressionUI();\n        exprUI.expression = this.expression;\n        exprUI.beforeOperator = this.expressionsList.length > 0 ? FilteringLogic.And : null;\n        exprUI.isSelected = isSelected;\n\n        this.expressionsList.push(exprUI);\n\n        const length = this.expressionsList.length;\n        if (this.expressionsList[length - 2]) {\n            this.expressionsList[length - 2].afterOperator = this.expressionsList[length - 1].beforeOperator;\n        }\n\n        this.showHideArrowButtons();\n    }\n\n    private removeExpression(indexToRemove: number, expression: IFilteringExpression) {\n        if (indexToRemove === 0 && this.expressionsList.length === 1) {\n            this.clearFiltering();\n            return;\n        }\n\n        this.filteringService.removeExpression(this.column.field, indexToRemove);\n\n        this.filter();\n\n        if (this.expression === expression) {\n            this.resetExpression();\n        }\n\n        this.showHideArrowButtons();\n    }\n\n    private resetExpression(condition?: string) {\n        this.expression = {\n            fieldName: this.column.field,\n            condition: null,\n            conditionName: null,\n            searchVal: null,\n            ignoreCase: this.column.filteringIgnoreCase\n        };\n\n        if (this.column.dataType !== GridColumnDataType.Boolean) {\n            this.expression.condition = this.getCondition(condition ?? this.conditions[0]);\n        }\n\n        if (this.column.dataType === GridColumnDataType.Date && this.input) {\n            this.input.nativeElement.value = null;\n        }\n\n        this.showHideArrowButtons();\n    }\n\n    private scrollChipsWhenAddingExpression() {\n        const chipAraeChildren = this.chipsArea.element.nativeElement.children;\n        if (!chipAraeChildren || chipAraeChildren.length === 0) {\n            return;\n        }\n\n        const chipsContainerWidth = this.container.nativeElement.offsetWidth;\n        const chipsAreaWidth = this.chipsArea.element.nativeElement.offsetWidth;\n\n        if (chipsAreaWidth > chipsContainerWidth) {\n            this.chipAreaScrollOffset = chipsContainerWidth - chipsAreaWidth;\n            this.transform(this.chipAreaScrollOffset);\n        }\n    }\n\n    private transform(offset: number) {\n        requestAnimationFrame(() => {\n            this.chipsArea.element.nativeElement.style.transform = `translate(${offset}px)`;\n        });\n    }\n\n    private scrollChipsOnRemove() {\n        let count = 0;\n        const chipAraeChildren = this.chipsArea.element.nativeElement.children;\n        const containerRect = this.container.nativeElement.getBoundingClientRect();\n\n        for (const chip of chipAraeChildren) {\n            if (Math.ceil(chip.getBoundingClientRect().right) < Math.ceil(containerRect.left)) {\n                count++;\n            }\n        }\n\n        if (count <= 2) {\n            this.chipAreaScrollOffset = 0;\n        } else {\n            const dif = chipAraeChildren[count].id === 'chip' ? count - 2 : count - 1;\n            this.chipAreaScrollOffset += Math.ceil(containerRect.left) - Math.ceil(chipAraeChildren[dif].getBoundingClientRect().left) + 1;\n        }\n\n        this.transform(this.chipAreaScrollOffset);\n    }\n\n    private conditionChangedCallback() {\n        if (!!this.expression.searchVal || this.expression.searchVal === 0) {\n            this.filter();\n        } else if (this.value) {\n            this.value = null;\n        }\n    }\n\n    private unaryConditionChangedCallback() {\n        if (this.value) {\n            this.value = null;\n        }\n        if (this.expressionsList.find(item => item.expression === this.expression) === undefined) {\n            this.addExpression(true);\n        }\n        this.filter();\n    }\n\n    private filter() {\n        this.filteringService.filterInternal(this.column.field);\n    }\n\n    private editorFocused(activeElement: Element): boolean {\n        // if the first check is false and the second is undefined this will return undefined\n        // make sure it always returns boolean\n        return !!(this.inputGroup && this.inputGroup.nativeElement.contains(activeElement)\n            || this.picker && this.picker.isFocused);\n    }\n\n    private get isColumnFiltered() {\n        return this.column.filteringExpressionsTree && this.column.filteringExpressionsTree.filteringOperands.length > 0;\n    }\n\n    public get isNarrowWidth(): boolean {\n        return this.nativeElement.offsetWidth < this.NARROW_WIDTH_THRESHOLD;\n    }\n}\n","<!-- Have to apply styles inline because of the overlay outlet ... -->\n<igx-drop-down #inputGroupConditions [style.--ig-size]=\"filteringElementsSize\" [height]=\"'200px'\" (selectionChanging)=\"onConditionsChanged($event)\">\n    @for (condition of conditions; track condition) {\n        <igx-drop-down-item\n            [value]=\"condition\"\n            [selected]=\"isConditionSelected(condition)\">\n            <div class=\"igx-grid__filtering-dropdown-items\">\n                <igx-icon family=\"default\" [name]=\"getCondition(condition).iconName\"></igx-icon>\n                <span class=\"igx-grid__filtering-dropdown-text\">{{ translateCondition(condition) }}</span>\n            </div>\n        </igx-drop-down-item>\n    }\n</igx-drop-down>\n\n<ng-template #defaultFilterUI>\n    <igx-input-group #inputGroup type=\"box\" (focusout)=\"onInputGroupFocusout()\" [style.--ig-size]=\"filteringElementsSize\">\n        <igx-prefix #inputGroupPrefix\n                    (click)=\"inputGroupPrefixClick($event)\"\n                    (keydown)=\"onPrefixKeyDown($event)\"\n                    tabindex=\"0\"\n                    [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        </igx-prefix>\n        <input\n            #input\n            igxInput\n            tabindex=\"0\"\n            [placeholder]=\"placeholder\"\n            autocomplete=\"off\"\n            [value]=\"value\"\n            (input)=\"onInput($event)\"\n            [type]=\"type\"\n            [readonly]=\"isUnaryCondition\"\n            (click)=\"onInputClick()\"\n            (compositionstart)=\"onCompositionStart()\"\n            (compositionend)=\"onCompositionEnd()\"\n            (keydown)=\"onInputKeyDown($event)\"\n            (keyup)=\"onInputKeyUp()\"/>\n        @if (value || value === 0) {\n            <igx-suffix>\n                <igx-icon\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"onClearClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n    </igx-input-group>\n</ng-template>\n\n<ng-template #defaultDateUI>\n    <igx-date-picker #picker\n        [(value)]=\"value\"\n        [outlet]=\"filteringService.grid.outlet\"\n        [locale]=\"filteringService.grid.locale\"\n        (click)=\"expression.condition.isUnary ? null : picker.open()\"\n        type=\"box\"\n        [displayFormat]=\"column.pipeArgs.format\"\n        [formatter]=\"column.formatter\"\n        [placeholder]=\"placeholder\"\n        [weekStart]=\"column.pipeArgs.weekStart\"\n        (keydown)=\"onInputKeyDown($event)\"\n        (focusout)=\"onInputGroupFocusout()\"\n        (closed)=\"focusEditElement()\">\n        <igx-prefix #inputGroupPrefix\n            tabindex=\"0\"\n            (click)=\"inputGroupPrefixClick($event)\"\n            (keydown)=\"onPrefixKeyDown($event)\"\n            [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"expression.condition.iconName\"></igx-icon>\n        </igx-prefix>\n        @if (value) {\n            <igx-suffix>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick($event)\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"clearInput($event)\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-date-picker>\n</ng-template>\n\n<ng-template #defaultTimeUI>\n    <igx-time-picker #picker\n        [(value)]=\"value\"\n        [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n        [displayFormat]=\"column.pipeArgs.format\"\n        [locale]=\"filteringService.grid.locale\"\n        [formatter]=\"column.formatter\"\n        [outlet]=\"filteringService.grid.outlet\"\n        type=\"box\"\n        [style.--ig-size]=\"filteringElementsSize\"\n        [placeholder]=\"placeholder\"\n        (closed)=\"focusEditElement()\"\n        (focusout)=\"onInputGroupFocusout()\"\n        (keydown)=\"onInputKeyDown($event)\"\n        (click)=\"expression.condition.isUnary ? null : picker.open()\">\n        <igx-prefix #inputGroupPrefix\n            tabindex=\"0\"\n            (click)=\"inputGroupPrefixClick($event)\"\n            (keydown)=\"onPrefixKeyDown($event)\"\n            [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"expression.condition.iconName\"></igx-icon>\n        </igx-prefix>\n        @if (value) {\n            <igx-suffix>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick($event)\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    tabindex=\"0\"\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"clearInput($event)\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n        <!-- disable default icons -->\n        <igx-picker-toggle></igx-picker-toggle>\n        <igx-picker-clear></igx-picker-clear>\n    </igx-time-picker>\n</ng-template>\n\n<ng-template #defaultDateTimeUI>\n    <igx-input-group #inputGroup type=\"box\" (focusout)=\"onInputGroupFocusout()\" [style.--ig-size]=\"filteringElementsSize\">\n        <igx-prefix #inputGroupPrefix\n                    (click)=\"inputGroupPrefixClick($event)\"\n                    (keydown)=\"onPrefixKeyDown($event)\"\n                    tabindex=\"0\"\n                    [igxDropDownItemNavigation]=\"inputGroupConditions\">\n            <igx-icon family=\"default\" [name]=\"getIconName()\"></igx-icon>\n        </igx-prefix>\n        <input\n            #input\n            igxInput\n            tabindex=\"0\"\n            [placeholder]=\"placeholder\"\n            [locale]=\"filteringService.grid.locale\"\n            [displayFormat]=\"column.pipeArgs.format\"\n            [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat\"\n            defaultFormatType=\"dateTime\"\n            [value]=\"value\"\n            (valueChange)=\"onInput($event)\"\n            [readonly]=\"isUnaryCondition\"\n            (click)=\"onInputClick()\"\n            (keydown)=\"onInputKeyDown($event)\"\n            (keyup)=\"onInputKeyUp()\"/>\n        @if (value || value === 0) {\n            <igx-suffix>\n                <igx-icon\n                    (keydown)=\"onCommitKeyDown($event)\"\n                    (click)=\"onCommitClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"confirm\">\n                </igx-icon>\n                <igx-icon\n                    (keydown)=\"onClearKeyDown($event)\"\n                    (click)=\"onClearClick()\"\n                    tabindex=\"0\"\n                    family=\"default\"\n                    name=\"input_clear\">\n                </igx-icon>\n            </igx-suffix>\n        }\n    </igx-input-group>\n</ng-template>\n\n<ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n\n@if (showArrows) {\n    <button igxIconButton=\"flat\" type=\"button\" class=\"igx-grid__filtering-row-scroll-start\" (keydown)=\"onLeftArrowKeyDown($event)\" (click)=\"scrollChipsOnArrowPress('left')\">\n        <igx-icon family=\"default\" name=\"prev\"></igx-icon>\n    </button>\n}\n\n<div #container class=\"igx-grid__filtering-row-main\">\n    <div>\n        <igx-chips-area #chipsArea>\n            <!-- expressionsList items re-created on refreshExpressions(), track stable expression -->\n            @for (item of expressionsList; track item.expression; let i = $index; let last = $last) {\n                <ng-container tabindex=\"0\">\n                    <igx-chip #chip id=\"chip\"\n                        (pointerdown)=\"onChipPointerdown($event, chip)\"\n                        (click)=\"onChipClick($event, item)\"\n                        (keydown)=\"onChipKeyDown($event, item)\"\n                        (remove)=\"onChipRemoved($event, item)\"\n                        [selectable]=\"false\"\n                        [selected]=\"item.isSelected\"\n                        [style.--ig-size]=\"filteringElementsSize\"\n                        [removable]=\"true\">\n                        <igx-icon\n                            igxPrefix\n                            family=\"default\"\n                            [name]=\"item.expression.condition.iconName\">\n                        </igx-icon>\n                        <span>{{filteringService.getChipLabel(item.expression)}}</span>\n                    </igx-chip>\n                    @if (!last) {\n                        <span id=\"operand\">\n                            <button\n                                igxButton\n                                type=\"button\"\n                                (click)=\"toggleOperatorsDropDown($event, i)\"\n                                [igxDropDownItemNavigation]=\"operators\"\n                                [style.--ig-size]=\"filteringElementsSize\">\n                                <igx-icon family=\"default\" name=\"expand_more\"></igx-icon>\n                                <span>{{filteringService.getOperatorAsString(item.afterOperator)}}</span>\n                            </button>\n                            <igx-drop-down #operators (selectionChanging)=\"onLogicOperatorChanged($event, item)\">\n                                <igx-drop-down-item [value]=\"0\" [selected]=\"item.afterOperator === 0\">{{filteringService.grid.resourceStrings.igx_grid_filter_operator_and}}</igx-drop-down-item>\n                                <igx-drop-down-item [value]=\"1\" [selected]=\"item.afterOperator === 1\">{{filteringService.grid.resourceStrings.igx_grid_filter_operator_or}}</igx-drop-down-item>\n                            </igx-drop-down>\n                        </span>\n                    }\n                </ng-container>\n            }\n        </igx-chips-area>\n    </div>\n</div>\n\n@if (showArrows) {\n    <button igxIconButton=\"flat\" type=\"button\" class=\"igx-grid__filtering-row-scroll-end\" (click)=\"scrollChipsOnArrowPress('right')\">\n        <igx-icon family=\"default\" name=\"next\"></igx-icon>\n    </button>\n}\n\n<div #buttonsContainer [ngClass]=\"isNarrowWidth ? 'igx-grid__filtering-row-editing-buttons--small' : 'igx-grid__filtering-row-editing-buttons'\">\n    @if (!isNarrowWidth) {\n        <button igxButton=\"flat\" type=\"button\" igxRipple (click)=\"clearFiltering()\" [disabled]=\"disabled\" [tabindex]=\"disabled\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"refresh\"></igx-icon>\n            <span>{{ filteringService.grid.resourceStrings.igx_grid_filter_row_reset }}</span>\n        </button>\n        <button #closeButton igxButton=\"flat\" type=\"button\" igxRipple (click)=\"close()\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"close\"></igx-icon>\n            <span>{{ filteringService.grid.resourceStrings.igx_grid_filter_row_close }}</span>\n        </button>\n    }\n    @if (isNarrowWidth) {\n        <button igxIconButton=\"flat\" type=\"button\" igxRipple (click)=\"clearFiltering()\" [disabled]=\"disabled\" [tabindex]=\"disabled\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"refresh\"></igx-icon>\n        </button>\n        <button #closeButton igxIconButton=\"flat\" type=\"button\" igxRipple (click)=\"close()\" [style.--ig-size]=\"filteringElementsSize\">\n            <igx-icon family=\"default\" name=\"close\"></igx-icon>\n        </button>\n    }\n</div>\n","import { IgxEditRow } from './common/crud.service';\nimport { GridSummaryPosition } from './common/enums';\nimport { IgxGridCell } from './grid-public-cell';\nimport { mergeWith } from 'lodash-es';\nimport { CellType, GridServiceType, GridType, IGridValidationState, RowType, ValidationStatus } from './common/grid.interface';\nimport { GridSummaryCalculationMode, IGroupByRecord, IgxSummaryResult, ITreeGridRecord } from 'igniteui-angular/core';\n\nabstract class BaseRow implements RowType {\n    public index: number;\n    /**\n     * The grid that contains the row.\n     */\n    public grid: GridType;\n    protected _data?: any;\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public get viewIndex(): number {\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * Gets the row key.\n     * A row in the grid is identified either by:\n     * - primaryKey data value,\n     * - the whole rowData, if the primaryKey is omitted.\n     *\n     * ```typescript\n     * let rowKey = row.key;\n     * ```\n     */\n    public get key(): any {\n        const data = this._data ?? this.grid.dataView[this.index];\n        const primaryKey = this.grid.primaryKey;\n        return primaryKey ? data[primaryKey] : data;\n    }\n\n    /**\n     * Gets if this represents add row UI\n     *\n     * ```typescript\n     * let isAddRow = row.addRowUI;\n     * ```\n     */\n    public get addRowUI(): boolean {\n        return !!this.grid.crudService.row &&\n            this.grid.crudService.row.isAddRow &&\n            this.grid.crudService.row.id === this.key;\n    }\n\n    /** Gets the validation status and errors, if any.\n    * ```typescript\n    * let validation = row.validation;\n    * let errors = validation.errors;\n    * ```\n    */\n    public get validation(): IGridValidationState {\n        const formGroup = this.grid.validation.getFormGroup(this.key);\n        return { status: formGroup?.status as ValidationStatus || 'VALID', errors: formGroup?.errors } as const;\n    }\n\n    /**\n     * The data record that populates the row.\n     *\n     * ```typescript\n     * let rowData = row.data;\n     * ```\n     */\n    public get data(): any {\n        if (this.inEditMode) {\n            return mergeWith(this.grid.dataCloneStrategy.clone(this._data ?? this.grid.dataView[this.index]),\n                this.grid.transactions.getAggregatedValue(this.key, false),\n                (objValue, srcValue) => {\n                    if (Array.isArray(srcValue)) {\n                        return objValue = srcValue;\n                    }\n                });\n        }\n        return this._data ?? this.grid.dataView[this.index];\n    }\n\n    /**\n     * Returns if the row is currently in edit mode.\n     */\n    public get inEditMode(): boolean {\n        if (this.grid.rowEditable) {\n            const editRowState = this.grid.crudService.row;\n            return (editRowState && editRowState.id === this.key) || false;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * Gets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * const isPinned = row.pinned;\n     * ```\n     */\n    public get pinned(): boolean {\n        return this.grid.isRecordPinned(this.data);\n    }\n\n    /**\n     * Sets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * row.pinned = !row.pinned;\n     * ```\n     */\n    public set pinned(val: boolean) {\n        if (val) {\n            this.pin();\n        } else {\n            this.unpin();\n        }\n    }\n\n    /**\n     * Gets the row expanded/collapsed state.\n     *\n     * ```typescript\n     * const isExpanded = row.expanded;\n     * ```\n     */\n    public get expanded(): boolean {\n        return this.grid.gridAPI.get_row_expansion_state(this.data);\n    }\n\n    /**\n     * Expands/collapses the row.\n     *\n     * ```typescript\n     * row.expanded = true;\n     * ```\n     */\n    public set expanded(val: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this.key, val);\n    }\n\n    /**\n     * Gets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = true;\n     * ```\n     */\n    public get selected(): boolean {\n        return this.grid.selectionService.isRowSelected(this.key);\n    }\n\n    /**\n     * Sets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = !row.selected;\n     * ```\n     */\n    public set selected(val: boolean) {\n        if (val) {\n            this.grid.selectionService.selectRowsWithNoEvent([this.key]);\n        } else {\n            this.grid.selectionService.deselectRowsWithNoEvent([this.key]);\n        }\n        this.grid.cdr.markForCheck();\n    }\n\n    /**\n     * Returns if the row is in delete state.\n     */\n    public get deleted(): boolean {\n        return this.grid.gridAPI.row_deleted_transaction(this.key);\n    }\n\n    /**\n     * Returns if the row has child rows. Always return false for IgxGridRow.\n     */\n    public get hasChildren(): boolean {\n        return false;\n    }\n\n    /**\n     * Gets whether the row is disabled.\n     * A disabled row represents a ghost placeholder created by row pinning.\n     */\n    public get disabled(): boolean {\n        return this.grid.isGhostRecordAtIndex(this.index);\n    }\n\n    /**\n     * Gets the rendered cells in the row component.\n     */\n    public get cells(): CellType[] {\n        const res: CellType[] = [];\n        this.grid.columns.forEach(col => {\n            const cell: CellType = new IgxGridCell(this.grid, this.index, col);\n            res.push(cell);\n        });\n        return res;\n    }\n\n    /**\n     * Pins the specified row.\n     * This method emits `onRowPinning` event.\n     *\n     * ```typescript\n     * // pin the selected row from the grid\n     * this.grid.selectedRows[0].pin();\n     * ```\n     */\n    public pin(): boolean {\n        return this.grid.pinRow(this.key, this.index);\n    }\n\n    /**\n     * Unpins the specified row.\n     * This method emits `onRowPinning` event.\n     *\n     * ```typescript\n     * // unpin the selected row from the grid\n     * this.grid.selectedRows[0].unpin();\n     * ```\n     */\n    public unpin(): boolean {\n        return this.grid.unpinRow(this.key);\n    }\n\n    /**\n     * Updates the specified row object and the data source record with the passed value.\n     *\n     * ```typescript\n     * // update the second selected row's value\n     * let newValue = \"Apple\";\n     * this.grid.selectedRows[1].update(newValue);\n     * ```\n     */\n    public update(value: any): void {\n        const crudService = this.grid.crudService;\n        if (crudService.cellInEditMode && crudService.cell.id.rowID === this.key) {\n            this.grid.transactions.endPending(false);\n        }\n        const row = new IgxEditRow(this.key, this.index, this.data, this.grid);\n        this.grid.gridAPI.update_row(row, value);\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Removes the specified row from the grid's data source.\n     * This method emits `onRowDeleted` event.\n     *\n     * ```typescript\n     * // delete the third selected row from the grid\n     * this.grid.selectedRows[2].delete();\n     * ```\n     */\n    public delete(): void {\n        this.grid.deleteRowById(this.key);\n    }\n}\n\nexport class IgxGridRow extends BaseRow implements RowType {\n    /**\n     * @hidden\n     */\n    constructor(\n        public override grid: GridType,\n        public override index: number, data?: any\n    ) {\n        super();\n        this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public override get viewIndex(): number {\n        if (this.grid.paginator) {\n            const precedingDetailRows = [];\n            const precedingGroupRows = [];\n            const firstRow = this.grid.dataView[0];\n            const hasDetailRows = this.grid.expansionStates.size;\n            const hasGroupedRows = this.grid.groupingExpressions.length;\n            let precedingSummaryRows = 0;\n            const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n\n            // from groupingFlatResult, resolve two other collections:\n            // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n            // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n            if (hasDetailRows || hasGroupedRows) {\n                this.grid.groupingFlatResult.forEach((r, ind) => {\n                    const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n                    if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n                        precedingGroupRows.push(r);\n                    }\n                    if (this.grid.expansionStates.get(rowID) && ind < firstRowInd && !this.grid.isGroupByRecord(r)) {\n                        precedingDetailRows.push(r);\n                    }\n                });\n            }\n\n            if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                // if firstRow is a child of the last item in precedingGroupRows,\n                // then summaryRow for this given groupedRecord is rendered after firstRow,\n                // i.e. need to decrease firstRowInd to account for the above.\n                precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n                if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n                    precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n                    precedingSummaryRows += -1;\n                }\n            }\n\n            return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n        } else {\n            return this.index;\n        }\n    }\n\n    /**\n     * Returns the parent row, if grid is grouped.\n     */\n    public get parent(): RowType {\n        let parent: IgxGroupByRow;\n        if (!this.grid.groupingExpressions.length) {\n            return undefined;\n        }\n\n        let i = this.index - 1;\n        while (i >= 0 && !parent) {\n            const rec = this.grid.dataView[i];\n            if (this.grid.isGroupByRecord(rec)) {\n                parent = new IgxGroupByRow(this.grid, i, rec);\n            }\n            i--;\n        }\n        return parent;\n    }\n}\n\nexport class IgxTreeGridRow extends BaseRow implements RowType {\n    /**\n     * @hidden\n     */\n    constructor(\n        public override grid: GridType,\n        public override index: number, data?: any, private _treeRow?: ITreeGridRecord\n    ) {\n        super();\n        this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public override get viewIndex(): number {\n        if (this.grid.hasSummarizedColumns && this.grid.page > 0) {\n            if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                const firstRowIndex = this.grid.processedExpandedFlatData.indexOf(this.grid.dataView[0].data);\n                // firstRowIndex is based on data result after all pipes triggered, excluding summary pipe\n                const precedingSummaryRows = this.grid.summaryPosition === GridSummaryPosition.bottom ?\n                    this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) :\n                    this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) + 1;\n                // there is a summary row for each root record, so we calculate how many root records are rendered before the current row\n                return firstRowIndex + precedingSummaryRows + this.index;\n            }\n        }\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     *  The data passed to the row component.\n     *\n     * ```typescript\n     * let selectedRowData = this.grid.selectedRows[0].data;\n     * ```\n     */\n    public override get data(): any {\n        if (this.inEditMode) {\n            return mergeWith(this.grid.dataCloneStrategy.clone(this._data ?? this.grid.dataView[this.index]),\n                this.grid.transactions.getAggregatedValue(this.key, false),\n                (objValue, srcValue) => {\n                    if (Array.isArray(srcValue)) {\n                        return objValue = srcValue;\n                    }\n                });\n        }\n        const rec = this.grid.dataView[this.index];\n        return this._data ? this._data : this.grid.isTreeRow(rec) ? rec.data : rec;\n    }\n\n    /**\n     * Returns the child rows.\n     */\n    public get children(): RowType[] {\n        const children: IgxTreeGridRow[] = [];\n        if (this.treeRow.expanded) {\n            this.treeRow.children.forEach((rec, i) => {\n                const row = new IgxTreeGridRow(this.grid, this.index + 1 + i, rec.data);\n                children.push(row);\n            });\n        }\n        return children;\n    }\n\n    /**\n     * Returns the parent row.\n     */\n    public get parent(): RowType {\n        const row = this.grid.getRowByKey(this.treeRow.parent?.key);\n        return row;\n    }\n\n    /**\n     * Returns true if child rows exist. Always return false for IgxGridRow.\n     */\n    public override get hasChildren(): boolean {\n        if (this.treeRow.children) {\n            return this.treeRow.children.length > 0;\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * The `ITreeGridRecord` with metadata about the row in the context of the tree grid.\n     *\n     * ```typescript\n     * const rowParent = this.treeGrid.getRowByKey(1).treeRow.parent;\n     * ```\n     */\n    public get treeRow(): ITreeGridRecord {\n        return this._treeRow ?? this.grid.records.get(this.key);\n    }\n\n    /**\n     * Gets whether the row is pinned.\n     *\n     * ```typescript\n     * let isPinned = row.pinned;\n     * ```\n     */\n    public override get pinned(): boolean {\n        return this.grid.isRecordPinned(this);\n    }\n\n    /**\n     * Sets whether the row is pinned.\n     * Default value is `false`.\n     * ```typescript\n     * row.pinned = !row.pinned;\n     * ```\n     */\n    public override set pinned(val: boolean) {\n        if (val) {\n            this.pin();\n        } else {\n            this.unpin();\n        }\n    }\n\n    /**\n     * Gets whether the row is expanded.\n     *\n     * ```typescript\n     * let esExpanded = row.expanded;\n     * ```\n     */\n    public override get expanded(): boolean {\n        return this.grid.gridAPI.get_row_expansion_state(this.treeRow);\n    }\n\n    /**\n     * Expands/collapses the row.\n     *\n     * ```typescript\n     * row.expanded = true;\n     * ```\n     */\n    public override set expanded(val: boolean) {\n        this.grid.gridAPI.set_row_expansion_state(this.key, val);\n    }\n\n    public override get disabled(): boolean {\n        // TODO cell\n        return this.grid.isGhostRecord(this.data) ? this.treeRow.isFilteredOutParent === undefined : false;\n    }\n\n    private getRootParent(row: ITreeGridRecord): ITreeGridRecord {\n        while (row.parent) {\n            row = row.parent;\n        }\n        return row;\n    }\n}\n\nexport class IgxHierarchicalGridRow extends BaseRow implements RowType {\n    /**\n     * @hidden\n     */\n    constructor(\n        public override grid: GridType,\n        public override index: number, data?: any\n    ) {\n        super();\n        this._data = data && data.addRow && data.recordRef ? data.recordRef : data;\n    }\n\n    /**\n     * Returns true if row islands exist.\n     */\n    public override get hasChildren(): boolean {\n        return !!this.grid.childLayoutKeys.length;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public override get viewIndex() {\n        const firstRowInd = this.grid.filteredSortedData.indexOf(this.grid.dataView[0]);\n        const expandedRows = this.grid.filteredSortedData.filter((rec, ind) => {\n            const rowID = this.grid.primaryKey ? rec[this.grid.primaryKey] : rec;\n            return this.grid.expansionStates.get(rowID) && ind < firstRowInd;\n        });\n        return firstRowInd + expandedRows.length + this.index;\n    }\n\n    /**\n     * Gets the rendered cells in the row component.\n     */\n    public override get cells(): CellType[] {\n        const res: CellType[] = [];\n        this.grid.columns.forEach(col => {\n            const cell: CellType = new IgxGridCell(this.grid, this.index, col);\n            res.push(cell);\n        });\n        return res;\n    }\n}\n\nexport class IgxGroupByRow implements RowType {\n    /**\n     * Returns the row index.\n     */\n    public index: number;\n\n    /**\n     * The grid that contains the row.\n     */\n    public grid: GridType;\n\n    /**\n     * Returns always true, because this is in instance of an IgxGroupByRow.\n     */\n    public isGroupByRow: boolean;\n\n    /**\n     * The IGroupByRecord object, representing the group record, if the row is a GroupByRow.\n     */\n    public get groupRow(): IGroupByRecord {\n        return this._groupRow ? this._groupRow : this.grid.dataView[this.index];\n    }\n\n    /**\n     * Returns the child rows.\n     */\n    public get children(): RowType[] {\n        const children: IgxGridRow[] = [];\n        this.groupRow.records.forEach((rec, i) => {\n            const row = new IgxGridRow(this.grid, this.index + 1 + i, rec);\n            children.push(row);\n        });\n        return children;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public get viewIndex(): number {\n        if (this.grid.page) {\n            const precedingDetailRows = [];\n            const precedingGroupRows = [];\n            const firstRow = this.grid.dataView[0];\n            const hasDetailRows = this.grid.expansionStates.size;\n            const hasGroupedRows = this.grid.groupingExpressions.length;\n            let precedingSummaryRows = 0;\n            const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n\n            // from groupingFlatResult, resolve two other collections:\n            // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n            // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n            if (hasDetailRows || hasGroupedRows) {\n                this.grid.groupingFlatResult.forEach((r, ind) => {\n                    const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n                    if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n                        precedingGroupRows.push(r);\n                    }\n                    if (this.grid.expansionStates.get(rowID) && ind < firstRowInd && !this.grid.isGroupByRecord(r)) {\n                        precedingDetailRows.push(r);\n                    }\n                });\n            }\n\n            if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                // if firstRow is a child of the last item in precedingGroupRows,\n                // then summaryRow for this given groupedRecord is rendered after firstRow,\n                // i.e. need to decrease firstRowInd to account for the above.\n                precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n                if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n                    precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n                    precedingSummaryRows += -1;\n                }\n            }\n\n            return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n        } else {\n            return this.index;\n        }\n    }\n\n    /**\n     * @hidden\n     */\n    constructor(grid: GridType, index: number, private _groupRow?: IGroupByRecord) {\n        this.grid = grid;\n        this.index = index;\n        this.isGroupByRow = true;\n    }\n\n    /**\n     * Gets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = true;\n     * ```\n     */\n    public get selected(): boolean {\n        return this.children.every(row => row.selected);\n    }\n\n    /**\n     * Sets whether the row is selected.\n     * Default value is `false`.\n     * ```typescript\n     * row.selected = !row.selected;\n     * ```\n     */\n    public set selected(val: boolean) {\n        if (val) {\n            this.children.forEach(row => {\n                this.grid.selectionService.selectRowsWithNoEvent([row.key]);\n            });\n        } else {\n            this.children.forEach(row => {\n                this.grid.selectionService.deselectRowsWithNoEvent([row.key]);\n            });\n        }\n        this.grid.cdr.markForCheck();\n    }\n\n    /**\n     * Gets/sets whether the group row is expanded.\n     * ```typescript\n     * const groupRowExpanded = groupRow.expanded;\n     * ```\n     */\n    public get expanded(): boolean {\n        return this.grid.isExpandedGroup(this.groupRow);\n    }\n\n    public set expanded(value: boolean) {\n        this.gridAPI.set_grouprow_expansion_state(this.groupRow, value);\n    }\n\n    public isActive(): boolean {\n        return this.grid.navigation.activeNode ? this.grid.navigation.activeNode.row === this.index : false;\n    }\n\n    /**\n     * Toggles the group row expanded/collapsed state.\n     * ```typescript\n     * groupRow.toggle()\n     * ```\n     */\n    public toggle(): void {\n        this.grid.toggleGroup(this.groupRow);\n    }\n\n    private get gridAPI(): GridServiceType {\n        return this.grid.gridAPI as GridServiceType;\n    }\n}\n\nexport class IgxSummaryRow implements RowType {\n    /**\n     * Returns the row index.\n     */\n    public index: number;\n\n    /**\n     * The grid that contains the row.\n     */\n    public grid: GridType;\n\n    /**\n     * Returns always true, because this is in instance of an IgxGroupByRow.\n     */\n    public isSummaryRow: boolean;\n\n    /**\n     * The IGroupByRecord object, representing the group record, if the row is a GroupByRow.\n     */\n    public get summaries(): Map<string, IgxSummaryResult[]> {\n        return this._summaries ? this._summaries : this.grid.dataView[this.index].summaries;\n    }\n\n    /**\n     * Returns the view index calculated per the grid page.\n     */\n    public get viewIndex(): number {\n        if (this.grid.hasSummarizedColumns && this.grid.page > 0) {\n            if (this.grid.type === 'flat') {\n                if (this.grid.page) {\n                    const precedingDetailRows = [];\n                    const precedingGroupRows = [];\n                    const firstRow = this.grid.dataView[0];\n                    const hasDetailRows = this.grid.expansionStates.size;\n                    const hasGroupedRows = this.grid.groupingExpressions.length;\n                    let precedingSummaryRows = 0;\n                    const firstRowInd = this.grid.groupingFlatResult.indexOf(firstRow);\n\n                    // from groupingFlatResult, resolve two other collections:\n                    // precedingGroupedRows -> use it to resolve summaryRow for each group in previous pages\n                    // precedingDetailRows -> ise it to resolve the detail row for each expanded grid row in previous pages\n                    if (hasDetailRows || hasGroupedRows) {\n                        this.grid.groupingFlatResult.forEach((r, ind) => {\n                            const rowID = this.grid.primaryKey ? r[this.grid.primaryKey] : r;\n                            if (hasGroupedRows && ind < firstRowInd && this.grid.isGroupByRecord(r)) {\n                                precedingGroupRows.push(r);\n                            }\n                            if (this.grid.expansionStates.get(rowID) && ind < firstRowInd &&\n                                !this.grid.isGroupByRecord(r)) {\n                                precedingDetailRows.push(r);\n                            }\n                        });\n                    }\n\n                    if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                        // if firstRow is a child of the last item in precedingGroupRows,\n                        // then summaryRow for this given groupedRecord is rendered after firstRow,\n                        // i.e. need to decrease firstRowInd to account for the above.\n                        precedingSummaryRows = precedingGroupRows.filter(gr => this.grid.isExpandedGroup(gr)).length;\n                        if (this.grid.summaryPosition === GridSummaryPosition.bottom && precedingGroupRows.length &&\n                            precedingGroupRows[precedingGroupRows.length - 1].records.indexOf(firstRow) > -1) {\n                            precedingSummaryRows += -1;\n                        }\n                    }\n\n                    return precedingDetailRows.length + precedingSummaryRows + firstRowInd + this.index;\n                } else {\n                    return this.index;\n                }\n            } else if (this.grid.type === 'tree') {\n                if (this.grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly) {\n                    const firstRowIndex = this.grid.processedExpandedFlatData.indexOf(this.grid.dataView[0].data);\n                    const precedingSummaryRows = this.grid.summaryPosition === GridSummaryPosition.bottom ?\n                        this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) :\n                        this.grid.rootRecords.indexOf(this.getRootParent(this.grid.dataView[0])) + 1;\n                    return firstRowIndex + precedingSummaryRows + this.index;\n                }\n            }\n        }\n\n        return this.index + this.grid.page * this.grid.perPage;\n    }\n\n    /**\n     * @hidden\n     */\n    constructor(\n        grid: GridType,\n        index: number, private _summaries?: Map<string, IgxSummaryResult[]>,\n    ) {\n        this.grid = grid;\n        this.index = index;\n        this.isSummaryRow = true;\n    }\n\n    private getRootParent(row: ITreeGridRecord): ITreeGridRecord {\n        while (row.parent) {\n            row = row.parent;\n        }\n        return row;\n    }\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE, RowType } from './grid.interface';\nimport { IgxAddRow } from './crud.service';\nimport { IgxSummaryOperand } from '../summaries/grid-summary';\nimport { IgxGridRow } from '../grid-public-row';\nimport { cloneArray, columnFieldPath, DataUtil, IgxSummaryResult, resolveNestedPath } from 'igniteui-angular/core';\n\ninterface GridStyleCSSProperty {\n    [prop: string]: any;\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxCellStyleClasses',\n    standalone: true\n})\nexport class IgxGridCellStyleClassesPipe implements PipeTransform {\n\n    public transform(cssClasses: GridStyleCSSProperty, _: any, data: any, field: string, index: number, __: number): string {\n        if (!cssClasses) {\n            return '';\n        }\n\n        const result = [];\n        const pathParts = columnFieldPath(field);\n\n        for (const cssClass of Object.keys(cssClasses)) {\n            const callbackOrValue = cssClasses[cssClass];\n            const apply = typeof callbackOrValue === 'function' ?\n                callbackOrValue(data, field, resolveNestedPath(data, pathParts), index) : callbackOrValue;\n            if (apply) {\n                result.push(cssClass);\n            }\n        }\n\n        return result.join(' ');\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxCellStyles',\n    standalone: true\n})\nexport class IgxGridCellStylesPipe implements PipeTransform {\n\n    public transform(styles: GridStyleCSSProperty, _: any, data: any, field: string, index: number, __: number):\n        GridStyleCSSProperty {\n        const css = {};\n        if (!styles) {\n            return css;\n        }\n\n        const pathParts = columnFieldPath(field);\n\n        for (const prop of Object.keys(styles)) {\n            const res = styles[prop];\n            css[prop] = typeof res === 'function' ? res(data, field, resolveNestedPath(data, pathParts), index) : res;\n        }\n\n        return css;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxCellImageAlt',\n    standalone: true\n})\nexport class IgxGridCellImageAltPipe implements PipeTransform {\n\n    public transform(value: string): string {\n        if (value) {\n            const val = value.split('/');\n            const imagename = val[val.length - 1].split('.');\n            return imagename.length ? imagename[0] : '';\n        }\n        return value;\n    }\n}\n\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxGridRowClasses',\n    standalone: true\n})\nexport class IgxGridRowClassesPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n    public row: RowType;\n\n    constructor() {\n        this.row = new IgxGridRow(this.grid as any, -1, {});\n    }\n\n    public transform(\n        cssClasses: GridStyleCSSProperty,\n        row: RowType,\n        editMode: boolean,\n        selected: boolean,\n        dirty: boolean,\n        deleted: boolean,\n        dragging: boolean,\n        index: number,\n        mrl: boolean,\n        merged: boolean,\n        filteredOut: boolean,\n        _rowData: any,\n        _: number\n    ) {\n        const result = new Set(['igx-grid__tr', index % 2 ? 'igx-grid__tr--even' : 'igx-grid__tr--odd']);\n        const mapping = [\n            [selected, 'igx-grid__tr--selected'],\n            [editMode, 'igx-grid__tr--edit'],\n            [dirty, 'igx-grid__tr--edited'],\n            [deleted, 'igx-grid__tr--deleted'],\n            [dragging, 'igx-grid__tr--drag'],\n            [mrl || merged, 'igx-grid__tr--mrl'],\n            [merged, 'igx-grid__tr--merged'],\n            // Tree grid only\n            [filteredOut, 'igx-grid__tr--filtered']\n        ];\n\n        for (const [state, _class] of mapping) {\n            if (state) {\n                result.add(_class as string);\n            }\n        }\n\n        for (const cssClass of Object.keys(cssClasses ?? {})) {\n            const callbackOrValue = cssClasses[cssClass];\n            this.row.index = index;\n            (this.row as any)._data = row.data;\n            const apply = typeof callbackOrValue === 'function' ? callbackOrValue(this.row) : callbackOrValue;\n            if (apply) {\n                result.add(cssClass);\n            }\n        }\n        return result;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxGridRowStyles',\n    standalone: true\n})\nexport class IgxGridRowStylesPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(styles: GridStyleCSSProperty, rowData: any, index: number, __: number): GridStyleCSSProperty {\n        const css = {};\n        if (!styles) {\n            return css;\n        }\n        for (const prop of Object.keys(styles)) {\n            const cb = styles[prop];\n            const data = this.grid.isTreeRow && this.grid.isTreeRow(rowData) ? rowData.data : rowData;\n            const row = new IgxGridRow((this.grid as any), index, data);\n            css[prop] = typeof cb === 'function' ? cb(row) : cb;\n        }\n        return css;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxNotGrouped',\n    standalone: true\n})\nexport class IgxGridNotGroupedPipe implements PipeTransform {\n\n    public transform(value: any[]): any[] {\n        return value.filter(item => !item.columnGroup);\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'igxTopLevel',\n    standalone: true\n})\nexport class IgxGridTopLevelColumns implements PipeTransform {\n\n    public transform(value: any[]): any[] {\n        return value.filter(item => item.level === 0);\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'filterCondition',\n    pure: true,\n    standalone: true\n})\nexport class IgxGridFilterConditionPipe implements PipeTransform {\n\n    public transform(value: string): string {\n        return value.split(/(?=[A-Z])/).join(' ');\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'gridTransaction',\n    standalone: true\n})\nexport class IgxGridTransactionPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    public transform(collection: any[], _id: string, _pipeTrigger: number) {\n\n        if (this.grid.transactions.enabled) {\n            const result = DataUtil.mergeTransactions(\n                cloneArray(collection),\n                this.grid.transactions.getAggregatedChanges(true),\n                this.grid.primaryKey,\n                this.grid.dataCloneStrategy);\n            return result;\n        }\n        return collection;\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'paginatorOptions',\n    standalone: true\n})\nexport class IgxGridPaginatorOptionsPipe implements PipeTransform {\n    public transform(values: Array<number>) {\n        return Array.from(new Set([...values])).sort((a, b) => a - b);\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Pipe({\n    name: 'visibleColumns',\n    standalone: true\n})\nexport class IgxHasVisibleColumnsPipe implements PipeTransform {\n    public transform(values: any[], hasVisibleColumns) {\n        if (!(values && values.length)) {\n            return values;\n        }\n        return hasVisibleColumns ? values : [];\n    }\n\n}\n\n/** @hidden @internal */\nfunction buildDataView(): MethodDecorator {\n    return function (_target: unknown, _propertyKey: string, descriptor: PropertyDescriptor) {\n        const original = descriptor.value;\n        descriptor.value = function (...args: unknown[]) {\n            const result = original.apply(this, args);\n            this.grid.buildDataView();\n            return result;\n        }\n        return descriptor;\n    }\n}\n\n/**\n * @hidden\n */\n@Pipe({\n    name: 'gridRowPinning',\n    standalone: true\n})\nexport class IgxGridRowPinningPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    @buildDataView()\n    public transform(collection: any[], id: string, isPinned = false, _pipeTrigger: number) {\n\n        if (this.grid.hasPinnedRecords && isPinned) {\n            const result = collection.filter(rec => !this.grid.isSummaryRow(rec) && this.grid.isRecordPinned(rec));\n            result.sort((rec1, rec2) => this.grid.getInitialPinnedIndex(rec1) - this.grid.getInitialPinnedIndex(rec2));\n            return result;\n        }\n\n        this.grid.unpinnedRecords = collection;\n        if (!this.grid.hasPinnedRecords) {\n            this.grid.pinnedRecords = [];\n            return isPinned ? [] : collection;\n        }\n\n        return collection.map((rec) => !this.grid.isSummaryRow(rec) &&\n            this.grid.isRecordPinned(rec) ? { recordRef: rec, ghostRecord: true } : rec);\n    }\n}\n\n@Pipe({\n    name: 'dataMapper',\n    standalone: true\n})\nexport class IgxGridDataMapperPipe implements PipeTransform {\n\n    public transform(data: any[], field: string, _: number, val: any, isNestedPath: boolean) {\n        return isNestedPath ? resolveNestedPath(data, columnFieldPath(field)) : val;\n    }\n}\n\n@Pipe({\n    name: 'igxStringReplace',\n    standalone: true\n})\nexport class IgxStringReplacePipe implements PipeTransform {\n\n    public transform(value: string, search: string | RegExp, replacement: string): string {\n        return value.replace(search, replacement);\n    }\n}\n\n@Pipe({\n    name: 'transactionState',\n    standalone: true\n})\nexport class IgxGridTransactionStatePipe implements PipeTransform {\n\n    public transform(row_id: any, field: string, rowEditable: boolean, transactions: any, _: any, __: any, ___: any) {\n        if (rowEditable) {\n            const rowCurrentState = transactions.getAggregatedValue(row_id, false);\n            if (rowCurrentState) {\n                const value = resolveNestedPath(rowCurrentState, columnFieldPath(field));\n                return value !== undefined && value !== null;\n            }\n        } else {\n            const transaction = transactions.getState(row_id);\n            const value = resolveNestedPath(transaction?.value ?? {}, columnFieldPath(field));\n            return transaction?.value && (value || value === 0 || value === false);\n        }\n    }\n}\n\n@Pipe({\n    name: 'columnFormatter',\n    standalone: true\n})\nexport class IgxColumnFormatterPipe implements PipeTransform {\n\n    public transform(value: any, formatter: (v: any, data: any, columnData?: any) => any, rowData: any, columnData?: any) {\n        return formatter(value, rowData, columnData);\n    }\n}\n\n@Pipe({\n    name: 'summaryFormatter',\n    standalone: true\n})\nexport class IgxSummaryFormatterPipe implements PipeTransform {\n\n    public transform(summaryResult: IgxSummaryResult, summaryOperand: IgxSummaryOperand,\n        summaryFormatter: (s: IgxSummaryResult, o: IgxSummaryOperand) => any) {\n        return summaryFormatter(summaryResult, summaryOperand);\n    }\n}\n\n@Pipe({\n    name: 'gridAddRow',\n    standalone: true\n})\nexport class IgxGridAddRowPipe 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.crudService.addRowParent || isPinned !== this.grid.crudService.addRowParent.isPinned) {\n            return collection;\n        }\n        const copy = collection.slice(0);\n        const rec = (this.grid.crudService.row as IgxAddRow).recordRef;\n        copy.splice(this.grid.crudService.row.index, 0, rec);\n        return copy;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    DoCheck,\n    ElementRef,\n    HostBinding,\n    Input,\n    QueryList,\n    TemplateRef,\n    ViewChild,\n    ViewChildren,\n    booleanAttribute,\n    inject\n} from '@angular/core';\nimport { GridType, IgxHeadSelectorTemplateContext } from '../common/grid.interface';\nimport { IgxGridFilteringCellComponent } from '../filtering/base/grid-filtering-cell.component';\nimport { IgxGridFilteringRowComponent } from '../filtering/base/grid-filtering-row.component';\nimport { IgxGridHeaderGroupComponent } from './grid-header-group.component';\nimport { IgxGridHeaderComponent } from './grid-header.component';\nimport { IgxHeaderGroupStylePipe } from './pipes';\nimport { IgxGridTopLevelColumns } from '../common/pipes';\nimport { IgxColumnMovingDropDirective } from '../moving/moving.drop.directive';\nimport { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';\nimport { IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { ColumnType, flatten, trackByIdentity } from 'igniteui-angular/core';\n\n/**\n *\n * For all intents & purposes treat this component as what a <thead> usually is in the default <table> element.\n *\n * This container holds the grid header elements and their behavior/interactions.\n *\n * @hidden @internal\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-header-row',\n    templateUrl: './grid-header-row.component.html',\n    imports: [IgxColumnMovingDropDirective, NgTemplateOutlet, NgClass, IgxGridHeaderGroupComponent, NgStyle, IgxGridForOfDirective, IgxGridFilteringRowComponent, IgxCheckboxComponent, IgxGridTopLevelColumns, IgxHeaderGroupStylePipe]\n})\nexport class IgxGridHeaderRowComponent implements DoCheck {\n    protected ref = inject<ElementRef<HTMLElement>>(ElementRef);\n    protected cdr = inject(ChangeDetectorRef);\n\n\n    /** The grid component containing this element. */\n    @Input()\n    public grid: GridType;\n\n    /** Pinned columns of the grid at start. */\n    @Input()\n    public pinnedStartColumnCollection: ColumnType[] = [];\n\n    /** Pinned columns of the grid at end. */\n    @Input()\n    public pinnedEndColumnCollection: ColumnType[] = [];\n\n\n    /** Unpinned columns of the grid. */\n    @Input()\n    public unpinnedColumnCollection: ColumnType[] = [];\n\n    @HostBinding('attr.aria-activedescendant')\n    public get activeDescendant() {\n        const activeElem = this.navigation.activeNode;\n\n        if (!activeElem || !Object.keys(activeElem).length || activeElem.row >= 0) {\n            return null;\n        }\n        return `${this.grid.id}_${activeElem.row}_${activeElem.level}_${activeElem.column}`;\n    }\n\n    @Input({ transform: booleanAttribute })\n    public hasMRL: boolean;\n\n    @Input()\n    public width: number;\n\n    /**\n     * Header groups inside the header row.\n     *\n     * @remarks\n     * Note: These are only the top level header groups in case there are multi-column headers\n     * or a specific column layout. If you want to get the flattened collection use the `groups`\n     * property below.\n     *\n     * @hidden @internal\n     * */\n    @ViewChildren(IgxGridHeaderGroupComponent)\n    public _groups: QueryList<IgxGridHeaderGroupComponent>;\n\n    /**\n     * The flattened header groups collection.\n     *\n     * @hidden @internal\n     */\n    public get groups(): IgxGridHeaderGroupComponent[] {\n        return flatten(this._groups?.toArray() ?? []);\n    }\n\n    /** Header components in the header row. */\n    public get headers(): IgxGridHeaderComponent[] {\n        return this.groups.map(group => group.header);\n    }\n\n    /** Filtering cell components in the header row. */\n    public get filters(): IgxGridFilteringCellComponent[] {\n        return this.groups.map(group => group.filter);\n    }\n\n    /**\n     * Gets a list of all visible leaf columns in the grid.\n     *\n     * @hidden @internal\n     */\n    public get visibleLeafColumns(): ColumnType[] {\n        const row = this.grid.gridAPI.get_row_by_index(this.grid.rowList.first?.index || 0);\n        if (row && row.cells) {\n            return row.cells.map(cell => cell.column);\n        }\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    public get isLeafHeaderAriaHidden(): boolean {\n        return this.grid.navigation.activeNode?.row === -1;\n    }\n\n    /** The virtualized part of the header row containing the unpinned header groups. */\n    @ViewChild('headerVirtualContainer', { read: IgxGridForOfDirective, static: true })\n    public headerContainer: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n\n    public get headerForOf() {\n        return this.headerContainer;\n    }\n\n    @ViewChild('headerDragContainer')\n    public headerDragContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('headerSelectorContainer')\n    public headerSelectorContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('headerGroupContainer')\n    public headerGroupContainer: ElementRef<HTMLElement>;\n\n    @ViewChild('headSelectorBaseTemplate')\n    public headSelectorBaseTemplate: TemplateRef<IgxHeadSelectorTemplateContext>;\n\n    @ViewChild(IgxGridFilteringRowComponent)\n    public filterRow: IgxGridFilteringRowComponent;\n\n    /**\n     * Expand/collapse all child grids area in a hierarchical grid.\n     * `undefined` in the base and tree grids.\n     *\n     * @internal @hidden\n     */\n    @ViewChild('headerHierarchyExpander')\n    public headerHierarchyExpander: ElementRef<HTMLElement>;\n\n    public get navigation() {\n        return this.grid.navigation;\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    /**\n     * Returns whether the current grid instance is a hierarchical grid.\n     * as only hierarchical grids have the `isHierarchicalRecord` method.\n     *\n     * @hidden @internal\n     */\n    public get isHierarchicalGrid() {\n        return !!this.grid.isHierarchicalRecord;\n    }\n\n    public get indentationCSSClasses() {\n        return `igx-grid__header-indentation igx-grid__row-indentation--level-${this.grid.groupingExpressions.length}`;\n    }\n\n    public get rowSelectorsContext(): IgxHeadSelectorTemplateContext {\n        const ctx = {\n            $implicit: {\n                selectedCount: this.grid.selectionService.filteredSelectedRowIds.length as number,\n                totalCount: this.grid.totalRowsCountAfterFilter as number\n            }\n        } as IgxHeadSelectorTemplateContext;\n\n        if (this.isHierarchicalGrid) {\n            ctx.$implicit.selectAll = () => this.grid.selectAllRows();\n            ctx.$implicit.deselectAll = () => this.grid.deselectAllRows();\n        }\n\n        return ctx;\n    }\n\n    /**\n     * This hook exists as a workaround for the unfortunate fact\n     * that when we have pinned columns in the grid, the unpinned columns headers\n     * are affected by a delayed change detection cycle after a horizontal scroll :(\n     * Thus, we tell the parent grid change detector to check us at each cycle.\n     *\n     * @hidden @internal\n     */\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public scroll(event: Event) {\n        this.grid.preventHeaderScroll(event);\n    }\n\n    public headerRowSelection(event: MouseEvent) {\n        if (!this.grid.isMultiRowSelectionEnabled) {\n            return;\n        }\n\n        if (this.grid.selectionService.areAllRowSelected()) {\n            this.grid.selectionService.clearRowSelection(event);\n        } else {\n            this.grid.selectionService.selectAllRows(event);\n        }\n    }\n\n    /** state persistence switching all pinned columns resets collection */\n    protected trackPinnedColumn = trackByIdentity;\n}\n","<div role=\"rowgroup\" class=\"igx-grid-thead__wrapper\" (scroll)=\"scroll($event)\" [style.width.px]=\"width\"\n    [class.igx-grid__tr--mrl]=\"hasMRL\">\n\n    <!-- Column headers area -->\n    <div class=\"igx-grid__tr\" role=\"row\" [attr.aria-rowindex]=\"1\" [style.width.px]=\"width\">\n\n        <!-- Left column moving area -->\n        @if (grid.moving && grid.columnInDrag && pinnedStartColumnCollection.length <= 0) {\n            <span id=\"left\" class=\"igx-grid__scroll-on-drag-left\" droppable=\"true\" [style.left.px]=\"grid.pinnedStartWidth\"\n                [igxColumnMovingDrop]=\"headerContainer\"></span>\n        }\n        @if (grid.moving && grid.columnInDrag && pinnedStartColumnCollection.length > 0) {\n            <span id=\"left\" class=\"igx-grid__scroll-on-drag-pinned\" droppable=\"true\" [style.left.px]=\"grid.pinnedStartWidth\"\n                [igxColumnMovingDrop]=\"headerContainer\"></span>\n        }\n\n        <!-- Row dragging area -->\n        @if (grid.rowDraggable) {\n            <div #headerDragContainer class=\"igx-grid__drag-indicator igx-grid__tr-action\" (pointerdown)=\"$event.preventDefault()\" [class.igx-grid__drag-indicator--header]=\"!grid.isRowSelectable\">\n                <div style=\"visibility: hidden;\">\n                    <ng-container *ngTemplateOutlet=\"grid.dragIndicatorIconTemplate || grid.dragIndicatorIconBase\"></ng-container>\n                </div>\n            </div>\n        }\n\n        <!-- Row selectors area -->\n        @if (grid.showRowSelectors) {\n            <div #headerSelectorContainer class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n                [class.igx-grid__cbx-selection--push]=\"grid.filteringService.isFilterRowVisible\"\n                (click)=\"headerRowSelection($event)\"\n                (pointerdown)=\"$event.preventDefault()\">\n                <ng-container #headSelector\n                    *ngTemplateOutlet=\"grid.headSelectorTemplate || headSelectorBaseTemplate; context: rowSelectorsContext\">\n                </ng-container>\n            </div>\n        }\n\n        <!-- Hierarchical grids expand all area -->\n        @if (isHierarchicalGrid) {\n            <div #headerHierarchyExpander\n                (click)=\"grid.toggleAll()\"\n                (pointerdown)=\"$event.preventDefault()\"\n                [hidden]=\"!grid.hasExpandableChildren || !grid.hasVisibleColumns\"\n                [ngClass]=\"{\n                    'igx-grid__hierarchical-expander igx-grid__hierarchical-expander--header igx-grid__tr-action': grid.hasExpandableChildren,\n                    'igx-grid__hierarchical-expander--push': grid.filteringService.isFilterRowVisible,\n                    'igx-grid__hierarchical-expander--no-border': grid.isRowSelectable || grid.rowDraggable\n                }\">\n                <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n            </div>\n        }\n\n\n        <!-- Grouping icon toggle area -->\n        @if (grid?.groupingExpressions?.length) {\n            <div #headerGroupContainer class=\"{{ indentationCSSClasses }}\"\n                (click)=\"grid.toggleAllGroupRows()\"\n                (pointerdown)=\"$event.preventDefault()\">\n                <ng-container *ngTemplateOutlet=\"grid.iconTemplate; context: { $implicit: grid }\"></ng-container>\n            </div>\n        }\n\n        <!-- Pinned columns collection from the start -->\n        @if (pinnedStartColumnCollection.length) {\n            @for (column of pinnedStartColumnCollection | igxTopLevel; track trackPinnedColumn(column)) {\n                <igx-grid-header-group\n                    [ngClass]=\"column.headerGroupClasses\"\n                    [ngStyle]=\"column.headerGroupStyles | igxHeaderGroupStyle:column:grid.pipeTrigger\"\n                    [column]=\"column\">\n                </igx-grid-header-group>\n            }\n        }\n\n        <!-- Unpinned columns collection -->\n        <ng-template igxGridFor #headerVirtualContainer let-column\n            [igxGridForOf]=\"unpinnedColumnCollection | igxTopLevel\"\n            [igxForScrollContainer]=\"grid.parentVirtDir\"\n            [igxForContainerSize]=\"grid.unpinnedWidth\"\n            [igxForTrackBy]=\"grid.trackColumnChanges\"\n            [igxForSizePropName]=\"'calcPixelWidth'\"\n            [igxForScrollOrientation]=\"'horizontal'\"\n        >\n            <igx-grid-header-group\n                [ngClass]=\"column.headerGroupClasses\"\n                [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n                [column]=\"column\">\n            </igx-grid-header-group>\n        </ng-template>\n\n        <!-- Pinned columns collection at the end -->\n        @if (pinnedEndColumnCollection.length) {\n            @for (column of pinnedEndColumnCollection | igxTopLevel; track trackPinnedColumn(column)) {\n                <igx-grid-header-group\n                    [ngClass]=\"column.headerGroupClasses\"\n                    [ngStyle]=\"column.headerGroupStyles |igxHeaderGroupStyle:column:grid.pipeTrigger\"\n                    [column]=\"column\">\n                </igx-grid-header-group>\n            }\n        }\n    </div>\n\n    <!-- Render a hidden row of the leaf column headers for accessibility purposes -->\n    @if (grid.hasColumnGroups) {\n        <div role=\"row\" style=\"width: 0; height: 0; position: absolute; top: -10000px;\">\n            @for (column of visibleLeafColumns; track column.index) {\n                <div role=\"columnheader\" [attr.aria-hidden]=\"isLeafHeaderAriaHidden\">{{ column.header || column.field }}</div>\n            }\n        </div>\n    }\n\n    <!-- Filter row area -->\n    @if (grid.filteringService.isFilterRowVisible) {\n        <igx-grid-filtering-row #filteringRow\n            [column]=\"grid.filteringService.filteredColumn\"\n            [style.width.px]=\"width\">\n        </igx-grid-filtering-row>\n    }\n\n    <!-- Right column moving area -->\n    @if (grid.moving && grid.columnInDrag) {\n        <span id=\"right\" class=\"igx-grid__scroll-on-drag-right\" droppable=\"true\" [igxColumnMovingDrop]=\"headerContainer\"></span>\n    }\n</div>\n\n<!-- Header thumb area -->\n<div class=\"igx-grid-thead__thumb\" [hidden]=\"!grid.hasVerticalScroll()\" [style.width.px]=\"grid.scrollSize\"></div>\n\n<!-- Default row selection header checkbox template -->\n<ng-template #headSelectorBaseTemplate igxHeadSelector let-context>\n    <div class=\"igx-grid__cbx-padding\">\n        <igx-checkbox\n            [tabindex]=\"-1\"\n            [readonly]=\"true\"\n            [checked]=\"context.selectedCount > 0 && grid.selectionService.areAllRowSelected()\"\n            [disableRipple]=\"true\"\n            [ngStyle]=\"{'visibility': grid.isMultiRowSelectionEnabled? 'visible' : 'hidden' }\"\n            [indeterminate]=\"context.selectedCount > 0 && grid.selectionService.hasSomeRowSelected()\"\n            [aria-label]=\"grid.headSelectorBaseAriaLabel\"\n            #headerCheckbox>\n        </igx-checkbox>\n    </div>\n</ng-template>\n","// import { IgxGridHeaderGroupComponent } from './grid-header-group.component';\n// import { IgxGridHeaderRowComponent } from './grid-header-row.component';\n// import { IgxGridHeaderComponent } from './grid-header.component';\n\nexport { IgxGridHeaderComponent } from './grid-header.component';\nexport { IgxGridHeaderGroupComponent } from './grid-header-group.component';\nexport { IgxGridHeaderRowComponent } from './grid-header-row.component';\nexport * from './pipes';\n\n/* NOTE: Grid headers directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_HEADERS_DIRECTIVES = [\n//     IgxGridHeaderComponent,\n//     IgxGridHeaderGroupComponent,\n//     IgxGridHeaderRowComponent\n// ] as const;\n","import { Directive, Input, OnDestroy, TemplateRef, inject } from '@angular/core';\nimport { fromEvent, Subscription } from 'rxjs';\nimport { IgxDragDirective } from 'igniteui-angular/directives';\nimport { IRowDragStartEventArgs, IRowDragEndEventArgs } from './common/events';\nimport { IgxGridEmptyTemplateContext, IgxGridRowDragGhostContext, RowType } from './common/grid.interface';\n\n\nconst ghostBackgroundClass = 'igx-grid__tr--ghost';\nconst gridCellClass = 'igx-grid__td';\nconst rowSelectedClass = 'igx-grid__tr--selected';\nconst cellSelectedClass = 'igx-grid__td--selected';\nconst cellActiveClass = 'igx-grid__td--active';\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowDrag]',\n    standalone: true\n})\nexport class IgxRowDragDirective extends IgxDragDirective implements OnDestroy {\n\n    @Input('igxRowDrag')\n    public override set data(value: any) {\n        this._data = value;\n    }\n\n    public override get data(): any {\n        return this._data.grid.createRow(this._data.index, this._data.data);\n    }\n\n    private subscription$: Subscription;\n    private _rowDragStarted = false;\n\n    private get row(): RowType {\n        return this._data;\n    }\n\n    public override onPointerDown(event) {\n        event.preventDefault();\n        this._rowDragStarted = false;\n        this._removeOnDestroy = false;\n        super.onPointerDown(event);\n    }\n\n    public override onPointerMove(event) {\n        super.onPointerMove(event);\n        if (this._dragStarted && !this._rowDragStarted) {\n            this._rowDragStarted = true;\n            const args: IRowDragStartEventArgs = {\n                dragDirective: this,\n                dragData: this.data,\n                dragElement: this.row.nativeElement,\n                cancel: false,\n                owner: this.row.grid\n            };\n\n            this.row.grid.rowDragStart.emit(args);\n            if (args.cancel) {\n                this.ghostElement.parentNode.removeChild(this.ghostElement);\n                this.ghostElement = null;\n                this._dragStarted = false;\n                this._clicked = false;\n                return;\n            }\n            this.row.grid.dragRowID = this.row.key;\n            this.row.grid.rowDragging = true;\n            this.row.grid.cdr.detectChanges();\n\n            this.subscription$ = fromEvent(this.row.grid.document.defaultView, 'keydown').subscribe((ev: KeyboardEvent) => {\n                if (ev.key === this.platformUtil.KEYMAP.ESCAPE) {\n                    this._lastDropArea = false;\n                    this.onPointerUp(event);\n                }\n            });\n        }\n    }\n\n    public override onPointerUp(event) {\n\n        if (!this._clicked) {\n            return;\n        }\n\n        const args: IRowDragEndEventArgs = {\n            dragDirective: this,\n            dragData: this.data,\n            dragElement: this.row.nativeElement,\n            animation: false,\n            owner: this.row.grid\n        };\n        this.zone.run(() => {\n            this.row.grid.rowDragEnd.emit(args);\n        });\n\n        const dropArea = this._lastDropArea;\n        super.onPointerUp(event);\n        if (!dropArea && this.ghostElement) {\n            this.ghostElement.addEventListener('transitionend', this.transitionEndEvent, false);\n        } else {\n            this.endDragging();\n        }\n    }\n\n    protected override createGhost(pageX, pageY) {\n        this.row.grid.gridAPI.crudService.endEdit(false);\n        this.row.grid.cdr.detectChanges();\n        this.ghostContext = {\n            $implicit: this.row.data,\n            data: this.row.data,\n            grid: this.row.grid\n        };\n        super.createGhost(pageX, pageY, this.row.nativeElement);\n\n        // check if there is an expander icon and create the ghost at the corresponding position\n        if (this.isHierarchicalGrid) {\n            const row = this.row as any;\n            if (row.expander) {\n                const expanderWidth = row.expander.nativeElement.getBoundingClientRect().width;\n                this._ghostHostX += expanderWidth;\n            }\n        }\n\n        const ghost = this.ghostElement;\n\n        const gridRect = this.row.grid.nativeElement.getBoundingClientRect();\n        const rowRect = this.row.nativeElement.getBoundingClientRect();\n        ghost.style.overflow = 'hidden';\n        ghost.style.width = gridRect.width + 'px';\n        ghost.style.height = rowRect.height + 'px';\n\n        ghost.classList.add(ghostBackgroundClass);\n        ghost.classList.remove(rowSelectedClass);\n\n        const ghostCells = ghost.getElementsByClassName(gridCellClass);\n        for (const cell of ghostCells) {\n            cell.classList.remove(cellSelectedClass);\n            cell.classList.remove(cellActiveClass);\n        }\n    }\n\n    private _unsubscribe() {\n        if (this.subscription$ && !this.subscription$.closed) {\n            this.subscription$.unsubscribe();\n        }\n    }\n\n    private endDragging() {\n        this.onTransitionEnd(null);\n        this.row.grid.dragRowID = null;\n        this.row.grid.rowDragging = false;\n        this.row.grid.cdr.detectChanges();\n        this._unsubscribe();\n    }\n\n    private transitionEndEvent = () => {\n        if (this.ghostElement) {\n            this.ghostElement.removeEventListener('transitionend', this.transitionEndEvent, false);\n        }\n        this.endDragging();\n    };\n\n    private get isHierarchicalGrid() {\n        return this.row.grid.type === 'hierarchical';\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxDragIndicatorIcon]',\n    standalone: true\n})\n\nexport class IgxDragIndicatorIconDirective {\n    public static ngTemplateContextGuard(_directive: IgxDragIndicatorIconDirective,\n        context: unknown): context is IgxGridEmptyTemplateContext {\n        return true;\n    }\n}\n\n/**\n * @hidden\n */\n@Directive({\n    selector: '[igxRowDragGhost]',\n    standalone: true\n})\nexport class IgxRowDragGhostDirective {\n    public templateRef = inject<TemplateRef<IgxGridRowDragGhostContext>>(TemplateRef);\n\n    public static ngTemplateContextGuard(_directive: IgxRowDragGhostDirective,\n        context: unknown): context is IgxGridRowDragGhostContext {\n        return true;\n    }\n}\n\n\n","import { Directive, TemplateRef, inject } from '@angular/core';\nimport { IgxHeadSelectorTemplateContext, IgxGroupByRowSelectorTemplateContext, IgxRowSelectorTemplateContext } from '../common/grid.interface';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxRowSelector]',\n    standalone: true\n})\nexport class IgxRowSelectorDirective {\n    public templateRef = inject<TemplateRef<IgxRowSelectorTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxRowSelectorDirective,\n        context: unknown): context is IgxRowSelectorTemplateContext { \n        return true\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxGroupByRowSelector]',\n    standalone: true\n})\nexport class IgxGroupByRowSelectorDirective {\n    public templateRef = inject<TemplateRef<IgxGroupByRowSelectorTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxGroupByRowSelectorDirective,\n        context: unknown): context is IgxGroupByRowSelectorTemplateContext { \n        return true\n    }\n}\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxHeadSelector]',\n    standalone: true\n})\nexport class IgxHeadSelectorDirective {\n    public templateRef = inject<TemplateRef<IgxHeadSelectorTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_directive: IgxHeadSelectorDirective,\n        context: unknown): context is IgxHeadSelectorTemplateContext { \n        return true\n    }\n}\n","import { Directive, Input, Output, EventEmitter, ElementRef, OnDestroy, NgZone, OnInit, booleanAttribute, inject } from '@angular/core';\nimport { interval, Observable, Subscription, Subject, animationFrameScheduler } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nenum DragScrollDirection {\n    NONE,\n    LEFT,\n    TOP,\n    RIGHT,\n    BOTTOM,\n    TOPLEFT,\n    TOPRIGHT,\n    BOTTOMLEFT,\n    BOTTOMRIGHT\n}\n\n/**\n * An internal directive encapsulating the drag scroll behavior in the grid.\n *\n * @hidden @internal\n */\n@Directive({\n    selector: '[igxGridDragSelect]',\n    standalone: true\n})\nexport class IgxGridDragSelectDirective implements OnInit, OnDestroy {\n    private ref = inject<ElementRef<HTMLElement>>(ElementRef);\n    private zone = inject(NgZone);\n\n\n    @Output()\n    public dragStop = new EventEmitter<boolean>();\n\n    @Output()\n    public dragScroll = new EventEmitter<{ left: number; top: number }>();\n\n    @Input({ alias: 'igxGridDragSelect', transform: booleanAttribute })\n    public get activeDrag(): boolean {\n        return this._activeDrag;\n    }\n\n    public set activeDrag(val: boolean) {\n        if (val !== this._activeDrag) {\n            this.unsubscribe();\n            this._activeDrag = val;\n        }\n    }\n\n    public get nativeElement() {\n        return this.ref.nativeElement;\n    }\n\n    protected end$ = new Subject<any>();\n    protected lastDirection = DragScrollDirection.NONE;\n    protected _interval$: Observable<any>;\n    protected _sub: Subscription;\n\n    private _activeDrag: boolean;\n\n    constructor() {\n        this._interval$ = interval(0, animationFrameScheduler).pipe(\n            takeUntil(this.end$),\n            filter(() => this.activeDrag)\n        );\n    }\n\n    public ngOnInit() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.addEventListener('pointerover', this.startDragSelection);\n            this.nativeElement.addEventListener('pointerleave', this.stopDragSelection);\n        });\n    }\n\n    public ngOnDestroy() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.removeEventListener('pointerover', this.startDragSelection);\n            this.nativeElement.removeEventListener('pointerleave', this.stopDragSelection);\n        });\n        this.unsubscribe();\n        this.end$.complete();\n    }\n\n\n    protected startDragSelection = (ev: PointerEvent) => {\n        if (!this.activeDrag) {\n            return;\n        }\n\n        const x = ev.clientX;\n        const y = ev.clientY;\n        const { direction, delta } = this._measureDimensions(x, y);\n\n        if (direction === this.lastDirection) {\n            return;\n        }\n\n        this.unsubscribe();\n        this._sub = this._interval$.subscribe(() => this.dragScroll.emit(delta));\n        this.lastDirection = direction;\n    };\n\n    protected stopDragSelection = () => {\n        if (!this.activeDrag) {\n            return;\n        }\n\n        this.dragStop.emit(false);\n        this.unsubscribe();\n        this.lastDirection = DragScrollDirection.NONE;\n    };\n\n    protected _measureDimensions(x: number, y: number): { direction: DragScrollDirection; delta: { left: number; top: number } } {\n        let direction: DragScrollDirection;\n        let delta = { left: 0, top: 0 };\n        const { left, top, width, height } = this.nativeElement.getBoundingClientRect();\n        const RATIO = 0.15;\n\n        const offsetX = Math.trunc(x - left);\n        const offsetY = Math.trunc(y - top);\n\n        const leftDirection = offsetX <= width * RATIO;\n        const rightDirection = offsetX >= width * (1 - RATIO);\n        const topDirection = offsetY <= height * RATIO;\n        const bottomDirection = offsetY >= height * (1 - RATIO);\n\n        if (topDirection && leftDirection) {\n            direction = DragScrollDirection.TOPLEFT;\n            delta = { left: -1, top: -1 };\n        } else if (topDirection && rightDirection) {\n            direction = DragScrollDirection.TOPRIGHT;\n            delta = { left: 1, top: -1 };\n        } else if (bottomDirection && leftDirection) {\n            direction = DragScrollDirection.BOTTOMLEFT;\n            delta = { left: -1, top: 1 };\n        } else if (bottomDirection && rightDirection) {\n            direction = DragScrollDirection.BOTTOMRIGHT;\n            delta = { top: 1, left: 1 };\n        } else if (topDirection) {\n            direction = DragScrollDirection.TOP;\n            delta.top = -1;\n        } else if (bottomDirection) {\n            direction = DragScrollDirection.BOTTOM;\n            delta.top = 1;\n        } else if (leftDirection) {\n            direction = DragScrollDirection.LEFT;\n            delta.left = -1;\n        } else if (rightDirection) {\n            direction = DragScrollDirection.RIGHT;\n            delta.left = 1;\n        } else {\n            direction = DragScrollDirection.NONE;\n        }\n\n        return { direction, delta };\n\n    }\n\n    protected unsubscribe() {\n        if (this._sub) {\n            this._sub.unsubscribe();\n        }\n    }\n}\n","// import { IgxGroupByRowSelectorDirective, IgxHeadSelectorDirective, IgxRowSelectorDirective } from './row-selectors';\n\nexport * from './row-selectors';\nexport * from './selection.service';\nexport * from './drag-select.directive';\n\n/* NOTE: Grid selection directives collection for ease-of-use import in standalone components scenario */\n// export const IGX_GRID_SELECTION_DIRECTIVES = [\n//     IgxRowSelectorDirective,\n//     IgxGroupByRowSelectorDirective,\n//     IgxHeadSelectorDirective\n// ] as const;\n","import { getCurrentResourceStrings, GridColumnDataType, GridResourceStringsEN, IGridResourceStrings } from 'igniteui-angular/core';\nimport { IPivotDimension } from './pivot-grid.interface';\nimport { PivotUtil } from './pivot-util';\nimport { getDateFormatter } from 'igniteui-i18n-core';\n\nexport interface IPivotDateDimensionOptions {\n    /** Enables/Disables total value of all periods. */\n    total?: boolean;\n    /** Enables/Disables dimensions per year from provided periods. */\n    years?: boolean;\n    /*/** Enables/Disables dimensions per quarter from provided periods. */\n    quarters?: boolean;\n    /** Enables/Disables dimensions per month from provided periods. */\n    months?: boolean;\n    /** Enabled/Disables dimensions for the full date provided */\n    fullDate?: boolean;\n}\n\n/* blazorAlternateBaseType: PivotDimension */\n/* alternateBaseType: PivotDimension */\n// Equals to pretty much this configuration:\n// {\n//     member: () => 'All Periods',\n//     enabled: true,\n//     fieldName: 'AllPeriods',\n//     childLevel: {\n//         fieldName: 'Years',\n//         member: (rec) => {\n//             const recordValue = rec['Date'];\n//             return recordValue ? (new Date(recordValue)).getFullYear().toString() : rec['Years'];\n//         },\n//         enabled: true,\n//         childLevel: {\n//                 member: (rec) => {\n//                     const recordValue = rec['Date'];\n//                     return recordValue ? new Date(recordValue).toLocaleString('default', { month: 'long' }) : rec['Months'];\n//                 },\n//                 enabled: true,\n//                 fieldName: 'Months',\n//                 childLevel: {\n//                         member: 'Date',\n//                         fieldName:'Date',\n//                         enabled: true\n//                     }\n//             }\n//     }\n// },\nexport class IgxPivotDateDimension implements IPivotDimension {\n    /** Enables/Disables a particular dimension from pivot structure. */\n    public enabled = true;\n\n    /**\n     * Gets/Sets data type\n     */\n    public dataType?: GridColumnDataType;\n\n    /* blazorSuppress */\n    /** Default options. */\n    public defaultOptions = {\n        total: true,\n        years: true,\n        months: true,\n        fullDate: true\n    };\n\n    /**\n     * Gets/Sets the resource strings.\n     *\n     * @remarks\n     * By default it uses EN resources.\n     */\n    public set resourceStrings(value: IGridResourceStrings) {\n        this._resourceStrings = Object.assign({}, this._resourceStrings, value);\n    }\n\n    public get resourceStrings(): IGridResourceStrings {\n        return this._resourceStrings || getCurrentResourceStrings(GridResourceStringsEN, false);\n    }\n\n    /**\n     * Gets/Sets the base dimension that is used by this class to determine the other dimensions and their values.\n     * Having base dimension set is required in order for the Date Dimensions to show.\n     */\n    public get baseDimension(): IPivotDimension {\n        return this._baseDimension;\n    }\n    public set baseDimension(value: IPivotDimension) {\n        this._baseDimension = value;\n        this.initialize(this.baseDimension, this.options);\n    }\n\n    /**\n     * Gets/Sets the options for the predefined date dimensions whether to show quarter, years and etc.\n     */\n    public get options(): IPivotDateDimensionOptions {\n        return this._options;\n    }\n    public set options(value: IPivotDateDimensionOptions) {\n        this._options = value;\n        if (this.baseDimension) {\n            this.initialize(this.baseDimension, this.options);\n        }\n    }\n\n    /** @hidden @internal */\n    public childLevel?: IPivotDimension;\n    /** @hidden @internal */\n    public memberName = 'AllPeriods';\n    public displayName: string;\n    private _resourceStrings: IGridResourceStrings = null;\n    private _baseDimension: IPivotDimension;\n    private _options: IPivotDateDimensionOptions = {};\n\n    /**\n     * Creates additional pivot date dimensions based on a provided dimension describing date data:\n     *\n     * @param inDateDimension Base dimension that is used by this class to determine the other dimensions and their values.\n     * @param inOptions Options for the predefined date dimensions whether to show quarter, years and etc.\n     * @example\n     * ```typescript\n     * // Displays only years as parent dimension to the base dimension provided.\n     * new IgxPivotDateDimension({ memberName: 'Date', enabled: true }, { total: false, months: false });\n     * ```\n     */\n    constructor(inBaseDimension: IPivotDimension = null, inOptions: IPivotDateDimensionOptions = {}) {\n        this._baseDimension = inBaseDimension;\n        this._options = inOptions;\n        if (this.baseDimension && this.options) {\n            this.initialize(this.baseDimension, this.options);\n        }\n    }\n\n    protected initialize(inBaseDimension, inOptions) {\n        const options = { ...this.defaultOptions, ...inOptions };\n\n        this.dataType = GridColumnDataType.Date;\n        inBaseDimension.dataType = GridColumnDataType.Date;\n\n        this.enabled = inBaseDimension.enabled;\n        this.displayName = inBaseDimension.displayName || this.resourceStrings.igx_grid_pivot_date_dimension_total;\n\n        const baseDimension = options.fullDate ? inBaseDimension : null;\n        const monthDimensionDef: IPivotDimension = {\n            memberName: 'Months',\n            memberFunction: (rec) => {\n                const recordValue = PivotUtil.extractValueFromDimension(inBaseDimension, rec);\n                const dateValue = recordValue ? getDateFormatter().createDateFromValue(recordValue) : null;\n                return recordValue ? getDateFormatter().formatDateTime(dateValue, undefined, { month: 'long'}) : rec['Months'];\n            },\n            enabled: true,\n            childLevel: baseDimension\n        };\n        const monthDimension = options.months ? monthDimensionDef : baseDimension;\n\n        const quarterDimensionDef: IPivotDimension = {\n            memberName: 'Quarters',\n            memberFunction: (rec) => {\n                const recordValue = PivotUtil.extractValueFromDimension(inBaseDimension, rec);\n                const dateValue = recordValue ? getDateFormatter().createDateFromValue(recordValue) : null;\n                return recordValue ? `Q` + Math.ceil((dateValue.getMonth() + 1) / 3) : rec['Quarters'];\n            },\n            enabled: true,\n            childLevel: monthDimension\n        };\n        const quarterDimension = options.quarters ? quarterDimensionDef : monthDimension;\n\n        const yearsDimensionDef: IPivotDimension = {\n            memberName: 'Years',\n            memberFunction: (rec) => {\n                const recordValue = PivotUtil.extractValueFromDimension(inBaseDimension, rec);\n                const dateValue = recordValue ? getDateFormatter().createDateFromValue(recordValue) : null;\n                return recordValue ? dateValue.getFullYear().toString() : rec['Years'];\n            },\n            enabled: true,\n            childLevel: quarterDimension\n        };\n        const yearsDimension = options.years ? yearsDimensionDef : quarterDimension;\n        this.childLevel = yearsDimension;\n\n        if (!options.total) {\n            this.memberName = yearsDimension.memberName;\n            this.memberFunction = yearsDimension.memberFunction;\n            this.childLevel = yearsDimension.childLevel;\n            this.displayName = yearsDimension.displayName;\n        }\n    }\n\n    /** @hidden @internal */\n    public memberFunction = (_data) => this.resourceStrings.igx_grid_pivot_date_dimension_total;\n}\n","import { Directive, Input, ViewContainerRef, createComponent, EnvironmentInjector, Injector, inject } from '@angular/core';\nimport { IgxColumnComponent } from './columns/column.component';\nimport { IgxColumnGroupComponent } from './columns/column-group.component';\nimport { GridSelectionRange } from './common/types';\nimport { GridType, IGX_GRID_BASE, IPinningConfig, PivotGridType } from './common/grid.interface';\nimport { cloneArray, cloneValue, ColumnType, FieldType, GridColumnDataType, IExpressionTree, IFilteringExpressionsTree, IGroupByExpandState, IGroupingExpression, IGroupingState, IPagingState, ISortingExpression, recreateTreeFromFields } from 'igniteui-angular/core';\nimport { IgxColumnLayoutComponent } from './columns/column-layout.component';\nimport { IPivotConfiguration, IPivotDimension } from './pivot-grid.interface';\nimport { PivotUtil } from './pivot-util';\nimport { IgxPivotDateDimension } from './pivot-grid-dimensions';\n\nexport interface IGridState {\n    columns?: IColumnState[];\n    filtering?: IFilteringExpressionsTree;\n    advancedFiltering?: IFilteringExpressionsTree;\n    paging?: IPagingState;\n    moving?: boolean;\n    sorting?: ISortingExpression[];\n    groupBy?: IGroupingState;\n    cellSelection?: GridSelectionRange[];\n    /* blazorPrimitiveValue */\n    rowSelection?: any[];\n    columnSelection?: string[];\n    /* blazorPrimitiveValue */\n    rowPinning?: any[];\n    pinningConfig?: IPinningConfig;\n    /* blazorPrimitiveValue */\n    expansion?: any[];\n    rowIslands?: IGridStateCollection[];\n    id?: string;\n    pivotConfiguration?: IPivotConfiguration;\n}\n\n/* marshalByValue */\nexport interface IGridStateCollection {\n    id: string;\n    parentRowID: any;\n    state: IGridState;\n}\n\nexport interface IGridStateOptions {\n    columns?: boolean;\n    filtering?: boolean;\n    advancedFiltering?: boolean;\n    sorting?: boolean;\n    groupBy?: boolean;\n    paging?: boolean;\n    cellSelection?: boolean;\n    rowSelection?: boolean;\n    columnSelection?: boolean;\n    rowPinning?: boolean;\n    pinningConfig?: boolean;\n    expansion?: boolean;\n    rowIslands?: boolean;\n    moving?: boolean;\n    pivotConfiguration?: boolean;\n}\n\n/* marshalByValue */\n/* tsPlainInterface */\nexport interface IColumnState {\n    pinned: boolean;\n    sortable: boolean;\n    filterable: boolean;\n    editable: boolean;\n    sortingIgnoreCase: boolean;\n    filteringIgnoreCase: boolean;\n    headerClasses: string;\n    headerGroupClasses: string;\n    maxWidth: string;\n    groupable: boolean;\n    hidden: boolean;\n    dataType: GridColumnDataType;\n    hasSummary: boolean;\n    field: string;\n    width: any;\n    header: string;\n    resizable: boolean;\n    searchable: boolean;\n    columnGroup: boolean;\n    // mrl props\n    columnLayout?: boolean;\n    rowStart?: number,\n    rowEnd?: number,\n    colStart?: number;\n    colEnd?: number,\n    /**\n     * @deprecated\n     */\n    parent?: any;\n    key: string;\n    parentKey: string;\n    disableHiding: boolean;\n    disablePinning: boolean;\n    collapsible?: boolean;\n    expanded?: boolean;\n    visibleWhenCollapsed?: boolean;\n}\n\nexport type GridFeatures = keyof IGridStateOptions;\n\ninterface Feature {\n    getFeatureState: (context: IgxGridStateBaseDirective) => IGridState;\n    restoreFeatureState: (context: IgxGridStateBaseDirective, state: IColumnState[] | IPagingState | boolean | ISortingExpression[] |\n        IGroupingState | IFilteringExpressionsTree | GridSelectionRange[] | IPinningConfig | IPivotConfiguration | any[]) => void;\n}\n\n/* blazorElement */\n/* wcElementTag: igc-grid-state-base-directive */\n/* blazorIndirectRender */\n@Directive()\nexport class IgxGridStateBaseDirective {\n    /* blazorSuppress */\n    public grid = inject<GridType>(IGX_GRID_BASE, { host: true, optional: true });\n    protected viewRef = inject(ViewContainerRef);\n    protected envInjector = inject(EnvironmentInjector);\n    protected injector = inject(Injector);\n\n\n    private featureKeys: GridFeatures[] = [];\n    private state: IGridState;\n    private currGrid: GridType;\n    protected _options: IGridStateOptions = {\n        columns: true,\n        filtering: true,\n        advancedFiltering: true,\n        sorting: true,\n        groupBy: true,\n        paging: true,\n        cellSelection: true,\n        rowSelection: true,\n        columnSelection: true,\n        rowPinning: true,\n        expansion: true,\n        moving: true,\n        rowIslands: true,\n        pivotConfiguration: true\n    };\n    private FEATURES = {\n        sorting:  {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const sortingState = context.currGrid.sortingExpressions;\n                sortingState.forEach(s => {\n                    delete s.strategy;\n                    delete s.owner;\n                });\n                return { sorting: sortingState };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: ISortingExpression[]): void => {\n                context.currGrid.sortingExpressions = state;\n            }\n        },\n        filtering: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const filteringState = context.currGrid.filteringExpressionsTree;\n                if (filteringState) {\n                    delete filteringState.owner;\n                    for (const item of filteringState.filteringOperands) {\n                        delete (item as IFilteringExpressionsTree).owner;\n                    }\n                }\n                return { filtering: filteringState };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IFilteringExpressionsTree): void => {\n                const filterTree = context.createExpressionsTreeFromObject(state);\n                context.currGrid.filteringExpressionsTree = filterTree as IFilteringExpressionsTree;\n            }\n        },\n        advancedFiltering: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const filteringState = context.currGrid.advancedFilteringExpressionsTree;\n                let advancedFiltering: any;\n                if (filteringState) {\n                    delete filteringState.owner;\n                    for (const item of filteringState.filteringOperands) {\n                        delete (item as IFilteringExpressionsTree).owner;\n                    }\n                    advancedFiltering = filteringState;\n                } else {\n                    advancedFiltering = {};\n                }\n                return { advancedFiltering };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IFilteringExpressionsTree): void => {\n                const filterTree = context.createExpressionsTreeFromObject(state);\n                context.currGrid.advancedFilteringExpressionsTree = filterTree as IFilteringExpressionsTree;\n            }\n        },\n        columns: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const gridColumns: IColumnState[] = context.currGrid.columns.map((c) => ({\n                    pinned: c.pinned,\n                    sortable: c.sortable,\n                    filterable: c.filterable,\n                    editable: c.editable,\n                    sortingIgnoreCase: c.sortingIgnoreCase,\n                    filteringIgnoreCase: c.filteringIgnoreCase,\n                    headerClasses: c.headerClasses,\n                    headerGroupClasses: c.headerGroupClasses,\n                    maxWidth: c.maxWidth,\n                    groupable: c.groupable,\n                    hidden: c.hidden,\n                    dataType: c.dataType,\n                    hasSummary: c.hasSummary,\n                    field: c.field,\n                    width: ((c as IgxColumnComponent).widthSetByUser || context.currGrid.columnWidthSetByUser) ? c.width : undefined,\n                    header: c.header,\n                    resizable: c.resizable,\n                    searchable: c.searchable,\n                    selectable: c.selectable,\n                    key: c.columnGroup ? this.getColumnGroupKey(c) : c.field,\n                    parentKey: c.parent ? this.getColumnGroupKey(c.parent) : undefined,\n                    columnGroup: c.columnGroup,\n                    columnLayout: c.columnLayout || undefined,\n                    rowStart: c.parent?.columnLayout ? c.rowStart : undefined,\n                    rowEnd: c.parent?.columnLayout ? c.rowEnd : undefined,\n                    colStart: c.parent?.columnLayout ? c.colStart : undefined,\n                    colEnd: c.parent?.columnLayout ? c.colEnd : undefined,\n                    disableHiding: c.disableHiding,\n                    disablePinning: c.disablePinning,\n                    collapsible: c.columnGroup ? c.collapsible : undefined,\n                    expanded: c.columnGroup ? c.expanded : undefined,\n                    visibleWhenCollapsed: c.parent?.columnGroup ? (c as IgxColumnComponent).visibleWhenCollapsed : undefined\n                }));\n                return { columns: gridColumns };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IColumnState[]): void => {\n                const newColumns = [];\n                \n                // Helper to restore column state without auto-persisting widths\n                const restoreColumnState = (column: IgxColumnComponent | IgxColumnGroupComponent, colState: IColumnState) => {\n                    // Extract width to handle it separately\n                    const width = colState.width;\n                    delete colState.width;\n                    \n                    Object.assign(column, colState);\n                    \n                    // Only restore width if it was explicitly set by the user (not undefined)\n                    if (width !== undefined) {\n                        column.width = width;\n                    }\n                };\n                \n                state.forEach((colState) => {\n                    const hasColumnGroup = colState.columnGroup;\n                    const hasColumnLayouts = colState.columnLayout;\n                    delete colState.columnGroup;\n                    delete colState.columnLayout;\n                    if (hasColumnGroup) {\n                        let ref1: IgxColumnGroupComponent = context.currGrid.columns.find(x => x.columnGroup && (colState.key ? this.getColumnGroupKey(x) === colState.key : x.header === colState.header)) as IgxColumnGroupComponent;\n                        if (!ref1) {\n                            const component = hasColumnLayouts ?\n                            createComponent(IgxColumnLayoutComponent, { environmentInjector: this.envInjector, elementInjector: this.injector }) :\n                            createComponent(IgxColumnGroupComponent, { environmentInjector: this.envInjector, elementInjector: this.injector });\n                            ref1 = component.instance;\n                            component.changeDetectorRef.detectChanges();\n                        } else {\n                            ref1.children.reset([]);\n                        }\n                        \n                        restoreColumnState(ref1, colState);\n                        \n                        ref1.grid = context.currGrid;\n                        if (colState.parent || colState.parentKey) {\n                            const columnGroup: IgxColumnGroupComponent = newColumns.find(e => e.columnGroup && (e.key ? e.key === colState.parentKey : e.header === ref1.parent));\n                            columnGroup.children.reset([...columnGroup.children.toArray(), ref1]);\n                            ref1.parent = columnGroup;\n                        }\n                        ref1.cdr.detectChanges();\n                        newColumns.push(ref1);\n                    } else {\n                        let ref: IgxColumnComponent = context.currGrid.columns.find(x => !x.columnGroup && x.field === colState.field) as IgxColumnComponent;\n                        if (!ref) {\n                            const component = createComponent(IgxColumnComponent, { environmentInjector: this.envInjector, elementInjector: this.injector});\n                            ref = component.instance;\n                            component.changeDetectorRef.detectChanges();\n                        }\n\n                        restoreColumnState(ref, colState);\n                        \n                        ref.grid = context.currGrid;\n                        if (colState.parent || colState.parentKey) {\n                            const columnGroup: IgxColumnGroupComponent = newColumns.find(e =>  e.columnGroup && (e.key ? e.key === colState.parentKey : e.header === ref.parent));\n                            if (columnGroup) {\n                                ref.parent = columnGroup;\n                                columnGroup.children.reset([...columnGroup.children.toArray(), ref]);\n                            }\n                        }\n                        ref.cdr.detectChanges();\n                        newColumns.push(ref);\n                    }\n                });\n                context.currGrid.updateColumns(newColumns);\n                newColumns.forEach(col => {\n                    (context.currGrid as any).columnInit.emit(col);\n                });\n            }\n        },\n        groupBy: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const grid = context.currGrid;\n                const groupingExpressions = grid.groupingExpressions;\n                groupingExpressions.forEach(expr => {\n                    delete expr.strategy;\n                });\n                const expansionState = grid.groupingExpansionState;\n                const groupsExpanded = grid.groupsExpanded;\n\n                return { groupBy: { expressions: groupingExpressions, expansion: expansionState, defaultExpanded: groupsExpanded}  };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IGroupingState): void => {\n                const grid = context.currGrid;\n                grid.groupingExpressions = state.expressions as IGroupingExpression[];\n                state.expansion.forEach(exp => {\n                    exp.hierarchy.forEach(h => {\n                        const dataType = grid.columns.find(c => c.field === h.fieldName).dataType;\n                        if (dataType.includes(GridColumnDataType.Date) || dataType.includes(GridColumnDataType.Time)) {\n                            h.value = h.value ? new Date(Date.parse(h.value)) : h.value;\n                        }\n                    });\n                });\n                if (grid.groupsExpanded !== state.defaultExpanded) {\n                    grid.toggleAllGroupRows();\n                }\n                grid.groupingExpansionState = state.expansion as IGroupByExpandState[];\n            }\n        },\n        paging: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const pagingState = context.currGrid.pagingState;\n                return { paging: pagingState };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IPagingState): void => {\n                if (!context.currGrid.paginator) {\n                    return;\n                }\n                if (context.currGrid.perPage !== state.recordsPerPage) {\n                    context.currGrid.perPage = state.recordsPerPage;\n                    context.currGrid.cdr.detectChanges();\n                }\n                context.currGrid.page = state.index;\n            }\n        },\n        moving: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                return { moving: context.currGrid.moving };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: boolean): void => {\n                context.currGrid.moving = state;\n            }\n        },\n        rowSelection: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const selection = context.currGrid.selectionService.getSelectedRows();\n                return { rowSelection: selection };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: any[]): void => {\n                context.currGrid.selectRows(state, true);\n            }\n        },\n        cellSelection: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const selection = context.currGrid.getSelectedRanges().map(range =>\n                    ({ rowStart: range.rowStart, rowEnd: range.rowEnd, columnStart: range.columnStart, columnEnd: range.columnEnd }));\n                return { cellSelection: selection };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: GridSelectionRange[]): void => {\n                state.forEach(r => {\n                    const range = { rowStart: r.rowStart, rowEnd: r.rowEnd, columnStart: r.columnStart, columnEnd: r.columnEnd};\n                    context.currGrid.selectRange(range);\n                });\n            }\n        },\n        columnSelection: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const selection = context.currGrid.selectedColumns().map(c => c.field);\n                return { columnSelection: selection };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: string[]): void => {\n                context.currGrid.deselectAllColumns();\n                context.currGrid.selectColumns(state);\n            }\n        },\n        rowPinning: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const pinned = context.currGrid.pinnedRows?.map(x => x.key);\n                return { rowPinning: pinned };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: any[]): void => {\n                // clear current state.\n                context.currGrid.pinnedRows.forEach(row => row.unpin());\n                state.forEach(rowID => context.currGrid.pinRow(rowID));\n            }\n        },\n        pinningConfig: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => ({ pinningConfig: context.currGrid.pinning }),\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: IPinningConfig): void => {\n                context.currGrid.pinning = state;\n            }\n        },\n        expansion: {\n            getFeatureState: (context: IgxGridStateBaseDirective): IGridState => {\n                const expansionStates = Array.from(context.currGrid.expansionStates);\n                return { expansion: expansionStates };\n            },\n            restoreFeatureState: (context: IgxGridStateBaseDirective, state: any[]): void => {\n                const expansionStates = new Map<any, boolean>(state);\n                context.currGrid.expansionStates = expansionStates;\n            }\n        },\n        rowIslands: {\n            getFeatureState(context: IgxGridStateBaseDirective): IGridState {\n                const childGridStates: IGridStateCollection[] = [];\n                const rowIslands = (context.currGrid as any).allLayoutList;\n                if (rowIslands) {\n                    rowIslands.forEach(rowIsland => {\n                        const childGrids = rowIsland.rowIslandAPI.getChildGrids();\n                        childGrids.forEach(chGrid => {\n                            const parentRowID = this.getParentRowID(chGrid);\n                            context.currGrid = chGrid;\n                            if (context.currGrid) {\n                                const childGridState = context.buildState(context.featureKeys) as IGridState;\n                                childGridStates.push({ id: `${rowIsland.id}`, parentRowID, state: childGridState });\n                            }\n                        });\n                    });\n                }\n                context.currGrid = context.grid;\n                return { rowIslands: childGridStates };\n            },\n            restoreFeatureState(context: IgxGridStateBaseDirective, state: any): void {\n                const rowIslands = context.currGrid.allLayoutList;\n                if (rowIslands) {\n                    rowIslands.forEach(rowIsland => {\n                        const childGrids = rowIsland.rowIslandAPI.getChildGrids();\n                        childGrids.forEach(chGrid => {\n                            const parentRowID = this.getParentRowID(chGrid);\n                            context.currGrid = chGrid;\n                            const childGridState = state.find(st => st.id === rowIsland.id && st.parentRowID === parentRowID);\n                            if (childGridState && context.currGrid) {\n                                context.restoreGridState(childGridState.state, context.featureKeys);\n                            }\n                        });\n                    });\n                }\n                context.currGrid = context.grid;\n            },\n            /**\n             * Traverses the hierarchy up to the root grid to return the ID of the expanded row.\n             */\n            getParentRowID: (grid: GridType) => {\n                let childGrid;\n                while (grid.parent) {\n                    childGrid = grid;\n                    grid = grid.parent;\n                }\n                return grid.gridAPI.getParentRowId(childGrid);\n            }\n        },\n        pivotConfiguration: {\n            getFeatureState(context: IgxGridStateBaseDirective): IGridState {\n                const config = context.currGrid.pivotConfiguration;\n                if (!config || context.currGrid.type !== 'pivot') {\n                    return { pivotConfiguration: undefined };\n                }\n                const configCopy = cloneValue(config);\n                configCopy.rows = cloneArray(config.rows, true);\n                configCopy.columns = cloneArray(config.columns, true);\n                configCopy.filters = cloneArray(config.filters, true);\n                const dims =  [...(configCopy.rows || []), ...(configCopy.columns || []), ...(configCopy.filters || [])];\n                const dateDimensions = dims.filter(x => context.isDateDimension(x));\n                dateDimensions?.forEach(dim => {\n                    // do not serialize the grid resource strings. This would pollute the object with unnecessary data.\n                    dim.resourceStrings = {};\n                });\n                return { pivotConfiguration: configCopy };\n            },\n            restoreFeatureState(context: IgxGridStateBaseDirective, state: any): void {\n                const config: IPivotConfiguration = state;\n                if (!config || context.currGrid.type !== 'pivot') {\n                    return;\n                }\n                context.restoreValues(config, context.currGrid as PivotGridType);\n                context.restoreDimensions(config);\n                context.currGrid.pivotConfiguration = config;\n            },\n\n\n        }\n    };\n\n    /**\n     *  An object with options determining if a certain feature state should be saved.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * public options = {selection: false, advancedFiltering: false};\n     * ```\n     */\n    @Input()\n    public get options(): IGridStateOptions {\n       return this._options;\n    }\n\n    public set options(value: IGridStateOptions) {\n        Object.assign(this._options, value);\n        if (this.grid.type !== 'flat') {\n            delete this._options.groupBy;\n        } else {\n            delete this._options.rowIslands;\n        }\n    }\n\n    /**\n     * Gets the state of a feature or states of all grid features, unless a certain feature is disabled through the `options` property.\n     *\n     * @param `serialize` determines whether the returned object will be serialized to JSON string. Default value is true.\n     * @param `feature` string or array of strings determining the features to be added in the state. If skipped, all features are added.\n     * @returns Returns the serialized to JSON string IGridState object, or the non-serialized IGridState object.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * let state = this.state.getState(); // returns string\n     * let state = this.state(false) // returns `IGridState` object\n     * ```\n     */\n    protected getStateInternal(serialize = true, features?: GridFeatures | GridFeatures[]): IGridState | string  {\n        let state: IGridState | string;\n        this.currGrid = this.grid;\n        this.state = state = this.buildState(features) as IGridState;\n        if (serialize) {\n            state = JSON.stringify(state, this.stringifyCallback) as string;\n        }\n        return state;\n    }\n\n    /* blazorSuppress */\n    /**\n     * Restores grid features' state based on the IGridState object passed as an argument.\n     *\n     * @param IGridState object to restore state from.\n     * @returns\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * this.state.setState(gridState);\n     * ```\n     */\n    protected setStateInternal(state: IGridState, features?: GridFeatures | GridFeatures[]) {\n        this.state = state;\n        this.currGrid = this.grid;\n        this.restoreGridState(state, features);\n        this.grid.cdr.detectChanges(); // TODO\n    }\n\n    /**\n     * Builds an IGridState object.\n     */\n    private buildState(keys?: GridFeatures | GridFeatures[]): IGridState {\n        this.applyFeatures(keys);\n        let gridState = {} as IGridState;\n        this.featureKeys.forEach(f => {\n            if (this.options[f]) {\n                if (this.grid.type !== 'flat' && f === 'groupBy') {\n                    return;\n                }\n                const feature = this.getFeature(f);\n                const featureState: IGridState = feature?.getFeatureState(this);\n                gridState = Object.assign(gridState, featureState);\n            }\n        });\n        return gridState;\n    }\n\n    /**\n     * The method that calls corresponding methods to restore features from the passed IGridState object.\n     */\n    private restoreGridState(state: IGridState, features?: GridFeatures | GridFeatures[]) {\n        this.applyFeatures(features);\n        this.restoreFeatures(state);\n    }\n\n    private restoreFeatures(state: IGridState) {\n        this.featureKeys.forEach(f => {\n            if (this.options[f]) {\n                const featureState = state[f];\n                if (f === 'moving' || featureState) {\n                    const feature = this.getFeature(f);\n                    feature.restoreFeatureState(this, featureState);\n                }\n            }\n        });\n    }\n\n    /**\n     * Returns a collection of all grid features.\n     */\n    private applyFeatures(keys?: GridFeatures | GridFeatures[]) {\n        this.featureKeys = [];\n        if (!keys) {\n            for (const key of Object.keys(this.options)) {\n                this.featureKeys.push(key as GridFeatures);\n            }\n        } else if (Array.isArray(keys)) {\n            this.featureKeys = [...keys as GridFeatures[]];\n        } else {\n            this.featureKeys.push(keys);\n        }\n    }\n\n    /**\n     * This method restores complex objects in the pivot dimensions\n     * Like the IgxPivotDateDimension and filters.\n     */\n    private restoreDimensions(config: IPivotConfiguration) {\n        const collections = [config.rows, config.columns, config.filters];\n        for (const collection of collections) {\n            for (let index = 0; index < collection?.length; index++) {\n                const dim = collection[index];\n                if (this.isDateDimension(dim)) {\n                   this.restoreDateDimension(dim as IgxPivotDateDimension);\n                }\n                // restore complex filters\n                if (dim.filter) {\n                    dim.filter = this.createExpressionsTreeFromObject(dim.filter) as IFilteringExpressionsTree;\n                }\n            }\n        }\n    }\n\n\n    /**\n     * This method restores the IgxPivotDateDimension with its default functions and resource strings.\n     */\n    private restoreDateDimension(dim: IgxPivotDateDimension) {\n        const dateDim = new IgxPivotDateDimension((dim as any)._baseDimension, (dim as any)._options);\n        // restore functions and resource strings\n        dim.resourceStrings = dateDim.resourceStrings;\n        dim.memberFunction = dateDim.memberFunction;\n        let currDim: IPivotDimension = dim;\n        let originDim: IPivotDimension = dateDim;\n        while (currDim.childLevel) {\n            currDim = currDim.childLevel;\n            originDim = originDim.childLevel;\n            currDim.memberFunction = originDim.memberFunction;\n        }\n    }\n\n    /**\n     * Returns if this is a IgxPivotDateDimension.\n     */\n    private isDateDimension(dim: IPivotDimension) {\n        return (dim as any)._baseDimension;\n    }\n\n    /**\n     * This method restores complex objects in the pivot values.\n     * Like the default aggregator methods.\n     */\n    private restoreValues(config: IPivotConfiguration, grid: PivotGridType) {\n        // restore aggregator func if it matches the default aggregators key and label\n        const values = config.values;\n        for (const value of values) {\n            const aggregateList = value.aggregateList;\n            const aggregators = PivotUtil.getAggregatorsForValue(value, grid);\n            value.aggregate.aggregator = aggregators.find(x => x.key === value.aggregate.key && x.label === value.aggregate.label)?.aggregator;\n            if (aggregateList) {\n                for (const ag of aggregateList) {\n                    ag.aggregator = aggregators.find(x => x.key === ag.key && x.label === ag.label)?.aggregator;\n                }\n            }\n        }\n    }\n\n    /**\n     * This method builds a rehydrated IExpressionTree from a provided object.\n     */\n    private createExpressionsTreeFromObject(exprTreeObject: IExpressionTree): IExpressionTree {\n        if (!exprTreeObject || !exprTreeObject.filteringOperands) {\n            return null;\n        }\n\n        if (this.currGrid.type === 'pivot') {\n            return recreateTreeFromFields(exprTreeObject, this.currGrid.allDimensions.map(d => ({ dataType: d.dataType, field: d.memberName })) as FieldType[]) as IExpressionTree;\n        }\n\n        return recreateTreeFromFields(exprTreeObject, this.currGrid.columns) as IExpressionTree;\n    }\n\n    protected stringifyCallback(key: string, val: any) {\n        if (key === 'searchVal' && val instanceof Set) {\n            return Array.from(val);\n        }\n        return val;\n    }\n\n    private getColumnGroupKey(columnGroup: ColumnType) : string {\n        return columnGroup.childColumns.map(x => x.columnGroup ? x.level + \"_\" + this.getColumnGroupKey(x) : x.field).sort().join(\"_\");\n    }\n\n    private getFeature(key: string): Feature {\n        const feature: Feature = this.FEATURES[key];\n        return feature;\n    }\n}\n","import { Directive, EventEmitter, Input, Output } from '@angular/core';\nimport { GridFeatures, IGridState, IGridStateOptions, IgxGridStateBaseDirective } from './state-base.directive';\n\n@Directive({\n    selector: '[igxGridState]',\n    standalone: true\n})\nexport class IgxGridStateDirective extends IgxGridStateBaseDirective {\n    private static ngAcceptInputType_options: IGridStateOptions | '';\n\n    /**\n     *  An object with options determining if a certain feature state should be saved.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * public options = {selection: false, advancedFiltering: false};\n     * ```\n     */\n    @Input('igxGridState')\n    public override get options(): IGridStateOptions {\n        return super.options;\n    }\n\n    public override set options(value: IGridStateOptions) {\n        super.options = value;\n    }\n\n    /**\n     * Gets the state of a feature or states of all grid features, unless a certain feature is disabled through the `options` property.\n     *\n     * @param `serialize` determines whether the returned object will be serialized to JSON string. Default value is true.\n     * @param `feature` string or array of strings determining the features to be added in the state. If skipped, all features are added.\n     * @returns Returns the serialized to JSON string IGridState object, or the non-serialized IGridState object.\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * let state = this.state.getState(); // returns string\n     * let state = this.state(false) // returns `IGridState` object\n     * ```\n     */\n    public getState(serialize = true, features?: GridFeatures | GridFeatures[]): IGridState | string  {\n        return super.getStateInternal(serialize, features);\n    }\n\n    /* blazorSuppress */\n    /**\n     * Restores grid features' state based on the IGridState object passed as an argument.\n     *\n     * @param IGridState object to restore state from.\n     * @returns\n     * ```html\n     * <igx-grid [igxGridState]=\"options\"></igx-grid>\n     * ```\n     * ```typescript\n     * @ViewChild(IgxGridStateDirective, { static: true }) public state;\n     * this.state.setState(gridState);\n     * ```\n     */\n    public setState(state: IGridState | string, features?: GridFeatures | GridFeatures[]) {\n        if (typeof state === 'string') {\n            state = JSON.parse(state) as IGridState;\n            this.stateParsed.emit(state)\n        }\n        return super.setStateInternal(state, features);\n    }\n\n    /**\n     *  Event emitted when set state is called with a string.\n     * Returns the parsed state object so that it can be further modified before applying to the grid.\n     * ```typescript\n     * this.state.stateParsed.subscribe(parsedState => parsedState.sorting.forEach(x => x.strategy = NoopSortingStrategy.instance()});\n     * ```\n     */\n    @Output()\n    public stateParsed = new EventEmitter<IGridState>();\n}\n","import { Component, Directive, HostBinding, TemplateRef, inject } from '@angular/core';\nimport { GridType } from '../common/grid.interface';\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: '[excelText],excel-text',\n    standalone: true\n})\nexport class IgxExcelTextDirective { }\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: '[csvText],csv-text',\n    standalone: true\n})\nexport class IgxCSVTextDirective { }\n\n@Directive({\n    // eslint-disable-next-line @angular-eslint/directive-selector\n    selector: '[pdfText],pdf-text',\n    standalone: true\n})\nexport class IgxPdfTextDirective { }\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-title */\n/* blazorAlternateBaseType: GridToolbarContent */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/**\n * Provides a way to template the title portion of the toolbar in the grid.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * <igx-grid-toolbar-title>My custom title</igx-grid-toolbar-title>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-title', template: '<ng-content></ng-content>',\n    standalone: true\n})\nexport class IgxGridToolbarTitleComponent {\n    /**\n     * Host `class.igx-grid-toolbar__title` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid-toolbar__title')\n    public cssClass = 'igx-grid-toolbar__title';\n}\n\n/* blazorElement */\n/* blazorIndirectRender */\n/* blazorAlternateBaseType: GridToolbarContent */\n/* wcElementTag: igc-grid-toolbar-actions */\n/* singleInstanceIdentifier */\n/**\n * Provides a way to template the action portion of the toolbar in the grid.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent\n *\n * @example\n * ```html\n * <igx-grid-toolbar-actions>\n *  <some-toolbar-action-here />\n * </igx-grid-toolbar-actions>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-actions', template: '<ng-content></ng-content>',\n    standalone: true\n})\nexport class IgxGridToolbarActionsComponent {\n    /**\n     * Host `class.igx-grid-toolbar__actions` binding.\n     *\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid-toolbar__actions')\n    public cssClass = 'igx-grid-toolbar__actions';\n }\n\nexport interface IgxGridToolbarTemplateContext {\n    $implicit: GridType;\n}\n\n@Directive({\n    selector: '[igxGridToolbar]',\n    standalone: true\n})\nexport class IgxGridToolbarDirective {\n    public template = inject<TemplateRef<IgxGridToolbarTemplateContext>>(TemplateRef);\n\n\n    public static ngTemplateContextGuard(_dir: IgxGridToolbarDirective,\n        ctx: unknown): ctx is IgxGridToolbarTemplateContext {\n        return true\n    }\n}\n","import { GridType } from '../common/grid.interface';\n\n/** @hidden @internal */\nexport abstract class IgxToolbarToken {\n\n    public abstract grid: GridType;\n    public abstract showProgress: boolean;\n}\n","import { Component, Input, OnInit, inject } from '@angular/core';\nimport { IgxToolbarToken } from './token';\nimport { IgxButtonDirective, IgxRippleDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IFilteringExpressionsTree, isTree, OverlaySettings } from 'igniteui-angular/core';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-advanced-filtering */\n/* blazorIndirectRender */\n/* blazorAlternateBaseType: GridToolbarBaseAction */\n/* jsonAPIManageItemInMarkup */\n/* singleInstanceIdentifier */\n/**\n * Provides a pre-configured button to open the advanced filtering dialog of the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent, IgxGridToolbarActionsComponent\n *\n * @example\n * ```html\n * <igx-grid-toolbar-advanced-filtering></igx-grid-toolbar-advanced-filtering>\n * <igx-grid-toolbar-advanced-filtering>Custom text</igx-grid-toolbar-advanced-filtering>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-advanced-filtering',\n    templateUrl: './grid-toolbar-advanced-filtering.component.html',\n    imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent]\n})\nexport class IgxGridToolbarAdvancedFilteringComponent implements OnInit {\n    private toolbar = inject<IgxToolbarToken>(IgxToolbarToken);\n\n    protected numberOfColumns: number;\n    /**\n     * Returns the grid containing this component.\n     * @hidden @internal\n     */\n    public get grid() {\n        return this.toolbar.grid;\n    }\n\n    @Input()\n    public overlaySettings: OverlaySettings;\n\n    /**\n     * @hidden\n     */\n    public ngOnInit(): void {\n        // Initial value\n        this.numberOfColumns = this.grid?.advancedFilteringExpressionsTree ? this.extractUniqueFieldNamesFromFilterTree(this.grid?.advancedFilteringExpressionsTree).length : 0;\n\n        // Subscribing for future updates\n        this.grid?.advancedFilteringExpressionsTreeChange.subscribe(filteringTree => {\n            this.numberOfColumns = this.extractUniqueFieldNamesFromFilterTree(filteringTree).length;\n        });\n    }\n\n    protected extractUniqueFieldNamesFromFilterTree(filteringTree?: IFilteringExpressionsTree) : string[] {\n        const columnNames = [];\n        if (!filteringTree) return columnNames;\n        filteringTree.filteringOperands.forEach((expr) => {\n            if (isTree(expr)) {\n                columnNames.push(...this.extractUniqueFieldNamesFromFilterTree(expr));\n            } else {\n                columnNames.push(expr.fieldName);\n            }\n        });\n        return [...new Set(columnNames)];\n    }\n}\n","<button igxButton=\"outlined\" type=\"button\" name=\"btnAdvancedFiltering\" igxRipple\n    [title]=\"grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_tooltip\"\n    (click)=\"grid.openAdvancedFilteringDialog(overlaySettings)\"\n    class=\"igx-grid-toolbar__adv-filter\">\n    <igx-icon family=\"default\" name=\"filter_list\"></igx-icon>\n    <span #ref>\n        <ng-content></ng-content>\n    </span>\n    <!-- D.P. fix(elements): Angular trims child nodes, native doesn't leaving white space when other items project\n    textContent (avoids layout trash of innerText) should avoid wiping the default text without user set one -->\n    @if (!ref.textContent.trim()) {\n        <span>{{ grid?.resourceStrings.igx_grid_toolbar_advanced_filtering_button_label }}</span>\n    }\n    @if (grid?.advancedFilteringExpressionsTree) {\n        <span class=\"igx-adv-filter--column-number\"> ({{ numberOfColumns }}) </span>\n    }\n</button>\n","import { Component, ContentChild, ElementRef, HostBinding, Input, OnDestroy, booleanAttribute, inject } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { pinLeft, unpinLeft } from '@igniteui/material-icons-extended';\nimport { IgxGridToolbarActionsComponent } from './common';\nimport { GridServiceType, GridType, IGX_GRID_SERVICE_BASE } from '../common/grid.interface';\nimport { IgxToolbarToken } from './token';\nimport { IgxGridToolbarAdvancedFilteringComponent } from './grid-toolbar-advanced-filtering.component';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxLinearProgressBarComponent } from 'igniteui-angular/progressbar';\nimport { IgxIconService } from 'igniteui-angular/icon';\n\n/* blazorElement */\n/* mustUseNGParentAnchor */\n/* wcElementTag: igc-grid-toolbar */\n/* blazorIndirectRender */\n/* singleInstanceIdentifier */\n/* contentParent: GridBaseDirective */\n/* contentParent: RowIsland */\n/* contentParent: HierarchicalGrid */\n/* jsonAPIManageItemInMarkup */\n/**\n * Provides a context-aware container component for UI operations for the grid components.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridComponent, IgxTreeGridComponent, IgxHierarchicalGridComponent, IgxPivotGridComponent\n *\n */\n@Component({\n    selector: 'igx-grid-toolbar',\n    templateUrl: './grid-toolbar.component.html',\n    providers: [{ provide: IgxToolbarToken, useExisting: IgxGridToolbarComponent }],\n    imports: [IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent, NgTemplateOutlet, IgxLinearProgressBarComponent]\n})\nexport class IgxGridToolbarComponent implements OnDestroy {\n    private api = inject<GridServiceType>(IGX_GRID_SERVICE_BASE);\n    private iconService = inject(IgxIconService);\n    private element = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\n    /**\n     * When enabled, shows the indeterminate progress bar.\n     *\n     * @remarks\n     * By default this will be toggled, when the default exporter component is present\n     * and an exporting is in progress.\n     */\n    @Input({ transform: booleanAttribute })\n    public showProgress = false;\n\n    /**\n     * Gets/sets the grid component for the toolbar component.\n     *\n     * @deprecated since version 17.1.0. No longer required to be set for the Hierarchical Grid child grid template\n     *\n     * @remarks\n     * Usually you should not set this property in the context of the default grid/tree grid.\n     * The only grids that demands this to be set are the hierarchical child grids. For additional\n     * information check the toolbar topic.\n     */\n    @Input()\n    public get grid() {\n        if (this._grid) {\n            return this._grid;\n        }\n        return this.api.grid;\n    }\n\n    public set grid(value: GridType) {\n        this._grid = value;\n    }\n\n    /** Returns the native DOM element of the toolbar component */\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ContentChild(IgxGridToolbarActionsComponent)\n    public hasActions: IgxGridToolbarActionsComponent;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid-toolbar')\n    public defaultStyle = true;\n\n    protected _grid: GridType;\n    protected sub: Subscription;\n\n    constructor() {\n        this.iconService.addSvgIconFromText(pinLeft.name, pinLeft.value, 'imx-icons', true);\n        this.iconService.addSvgIconFromText(unpinLeft.name, unpinLeft.value, 'imx-icons', true);\n    }\n\n    /** @hidden @internal */\n    public ngOnDestroy() {\n        this.sub?.unsubscribe();\n    }\n}\n","<ng-content select=\"[igxGridToolbarTitle],igx-grid-toolbar-title,igc-grid-toolbar-title\"></ng-content>\n\n<div class=\"igx-grid-toolbar__custom-content\">\n    <ng-content></ng-content>\n</div>\n\n<ng-template #actions>\n    <ng-content select=\"[igxGridToolbarActions],igx-grid-toolbar-actions,igc-grid-toolbar-actions\"></ng-content>\n</ng-template>\n@if (!hasActions) {\n    <igx-grid-toolbar-actions>\n        @if (grid?.allowAdvancedFiltering) {\n            <igx-grid-toolbar-advanced-filtering></igx-grid-toolbar-advanced-filtering>\n        }\n    </igx-grid-toolbar-actions>\n}\n<ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n@if (showProgress) {\n    <div class=\"igx-grid-toolbar__progress-bar\">\n        <igx-linear-bar [indeterminate]=\"true\"></igx-linear-bar>\n    </div>\n}\n","import { Directive, Input, EventEmitter, OnDestroy, Output, booleanAttribute, inject } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { first, takeUntil } from 'rxjs/operators';\n\nimport { ColumnDisplayOrder } from '../common/enums';\nimport { IColumnToggledEventArgs } from '../common/events';\nimport { IgxColumnActionsComponent } from '../column-actions/column-actions.component';\nimport { IgxToolbarToken } from './token';\nimport { AbsoluteScrollStrategy, AutoPositionStrategy, HorizontalAlignment, OverlaySettings, VerticalAlignment } from 'igniteui-angular/core';\nimport { IgxToggleDirective, ToggleViewCancelableEventArgs, ToggleViewEventArgs } from 'igniteui-angular/directives';\n\n/* blazorInclude */\n/* blazorElement */\n/* blazorIndirectRender */\n/* blazorAlternateBaseType: GridToolbarBaseAction */\n/**\n * Base class for the pinning/hiding column and exporter actions.\n *\n * @hidden @internal\n */\n@Directive()\nexport abstract class BaseToolbarDirective implements OnDestroy {\n    protected toolbar = inject(IgxToolbarToken);\n\n    /**\n     * Sets the height of the column list in the dropdown.\n     */\n    @Input()\n    public columnListHeight: string;\n\n    /**\n     * Title text for the column action component\n     */\n    @Input()\n    public title: string;\n\n    /**\n     * The placeholder text for the search input.\n     */\n    @Input()\n    public prompt: string;\n\n    /**\n     * Sets overlay settings\n     */\n    @Input()\n    public set overlaySettings(overlaySettings: OverlaySettings) {\n        this._overlaySettings = overlaySettings;\n    }\n\n    /**\n     * Returns overlay settings\n     */\n    public get overlaySettings(): OverlaySettings {\n        return this._overlaySettings;\n    }\n    /**\n     * Emits an event before the toggle container is opened.\n     */\n    @Output()\n    public opening = new EventEmitter<ToggleViewCancelableEventArgs>();\n    /**\n     * Emits an event after the toggle container is opened.\n     */\n\n    @Output()\n    public opened = new EventEmitter<ToggleViewEventArgs>();\n    /**\n     * Emits an event before the toggle container is closed.\n     */\n\n    @Output()\n    public closing = new EventEmitter<ToggleViewEventArgs>();\n    /**\n     * Emits an event after the toggle container is closed.\n     */\n\n    @Output()\n    public closed = new EventEmitter<ToggleViewEventArgs>();\n\n    /**\n     * Emits when after a column's checked state is changed\n     */\n    @Output()\n    public columnToggle = new EventEmitter<IColumnToggledEventArgs>();\n\n    private $destroy = new Subject<void>();\n    private $sub: Subscription;\n\n    private _overlaySettings: OverlaySettings = {\n        positionStrategy: new AutoPositionStrategy({\n            horizontalDirection: HorizontalAlignment.Left,\n            horizontalStartPoint: HorizontalAlignment.Right,\n            verticalDirection: VerticalAlignment.Bottom,\n            verticalStartPoint: VerticalAlignment.Bottom\n        }),\n        scrollStrategy: new AbsoluteScrollStrategy(),\n        modal: false,\n        closeOnEscape: true,\n        closeOnOutsideClick: true\n    };\n\n    /**\n     * Returns the grid containing this component.\n     * @hidden @internal\n     */\n    public get grid() {\n        return this.toolbar.grid;\n    }\n\n    /** @hidden @internal **/\n    public ngOnDestroy() {\n        this.$destroy.next();\n        this.$destroy.complete();\n    }\n\n    /** @hidden @internal */\n    public toggle(anchorElement: HTMLElement, toggleRef: IgxToggleDirective, actions?: IgxColumnActionsComponent): void {\n        if (actions) {\n            this._setupListeners(toggleRef, actions);\n            const setHeight = () =>\n                actions.columnsAreaMaxHeight = actions.columnsAreaMaxHeight !== '100%'\n                    ? actions.columnsAreaMaxHeight :\n                    this.columnListHeight ??\n                    `${Math.max(this.grid.calcHeight * 0.5, 200)}px`;\n            toggleRef.opening.pipe(first()).subscribe(setHeight);\n        }\n        toggleRef.toggle({\n            ...this.overlaySettings, ...{\n                target: anchorElement, outlet: this.grid.outlet,\n                excludeFromOutsideClick: [anchorElement]\n            }\n        });\n\n    }\n\n    /** @hidden @internal */\n    public focusSearch(columnActions: HTMLElement) {\n        columnActions.querySelector('input')?.focus();\n    }\n\n    private _setupListeners(toggleRef: IgxToggleDirective, actions?: IgxColumnActionsComponent) {\n        if (actions) {\n            if (!this.$sub || this.$sub.closed) {\n                this.$sub = actions.columnToggled.pipe(takeUntil(this.$destroy)).subscribe((event) => this.columnToggle.emit(event));\n            }\n        }\n        /** The if statement prevents emitting open and close events twice  */\n        if (toggleRef.collapsed) {\n            toggleRef.opening.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.opening.emit(event));\n            toggleRef.opened.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.opened.emit(event));\n        } else {\n            toggleRef.closing.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.closing.emit(event));\n            toggleRef.closed.pipe(first(), takeUntil(this.$destroy)).subscribe((event) => this.closed.emit(event));\n        }\n    }\n}\n\n/* blazorElement */\n/* blazorIndirectRender */\n/**\n * @hidden @internal\n * Base class for pinning/hiding column actions\n */\n@Directive()\nexport abstract class BaseToolbarColumnActionsDirective extends BaseToolbarDirective {\n    @Input({ transform: booleanAttribute })\n    public hideFilter = false;\n\n    @Input()\n    public filterCriteria = '';\n\n    @Input()\n    public columnDisplayOrder: ColumnDisplayOrder = ColumnDisplayOrder.DisplayOrder;\n\n    @Input()\n    public columnsAreaMaxHeight = '100%';\n\n    @Input()\n    public uncheckAllText: string;\n\n    @Input()\n    public checkAllText: string;\n\n    @Input()\n    public indentetion = 30;\n\n    @Input()\n    public buttonText: string;\n\n    protected columnActionsUI: IgxColumnActionsComponent;\n\n    public checkAll() {\n        this.columnActionsUI.checkAllColumns();\n    }\n\n    public uncheckAll() {\n        this.columnActionsUI.uncheckAllColumns();\n    }\n}\n","export abstract class IgxExporterOptionsBase {\n    /**\n     * Specifies whether hidden columns should be exported.\n     * ```typescript\n     * let ignoreColumnsVisibility = this.exportOptions.ignoreColumnsVisibility;\n     * this.exportOptions.ignoreColumnsVisibility = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreColumnsVisibility = false;\n\n    /**\n     * Specifies whether filtered out rows should be exported.\n     * ```typescript\n     * let ignoreFiltering = this.exportOptions.ignoreFiltering;\n     * this.exportOptions.ignoreFiltering = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreFiltering = false;\n\n    /**\n     * Specifies if the exporter should ignore the current column order in the IgxGrid.\n     * ```typescript\n     * let ignoreColumnsOrder = this.exportOptions.ignoreColumnsOrder;\n     * this.exportOptions.ignoreColumnsOrder = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreColumnsOrder = false;\n\n    /**\n     * Specifies whether the exported data should be sorted as in the provided IgxGrid.\n     * When you export grouped data, setting ignoreSorting to true will cause\n     * the grouping to fail because it relies on the sorting of the records.\n     * ```typescript\n     * let ignoreSorting = this.exportOptions.ignoreSorting;\n     * this.exportOptions.ignoreSorting = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreSorting = false;\n\n    /**\n     * Specifies whether the exported data should be grouped as in the provided IgxGrid.\n     * ```typescript\n     * let ignoreGrouping = this.exportOptions.ignoreGrouping;\n     * this.exportOptions.ignoreGrouping = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreGrouping = false;\n\n    /**\n     * Specifies whether the exported data should include multi column headers as in the provided IgxGrid.\n     * ```typescript\n     * let ignoreMultiColumnHeaders = this.exportOptions.ignoreMultiColumnHeaders;\n     * this.exportOptions.ignoreMultiColumnHeaders = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public ignoreMultiColumnHeaders = false;\n\n    /**\n     * Specifies whether the exported data should include column summaries.\n     * ```typescript\n     * let exportSummaries = this.exportOptions.exportSummaries;\n     * this.exportOptions.exportSummaries = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public exportSummaries = true;\n\n    /**\n     * Specifies whether the exported data should have frozen headers.\n     * ```typescript\n     * let freezeHeaders = this.exportOptions.freezeHeaders;\n     * this.exportOptions.freezeHeaders = true;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public freezeHeaders = false;\n\n    /**\n     * Specifies whether the headers should be exported if there is no data.\n     * ```typescript\n     * let alwaysExportHeaders = this.exportOptions.alwaysExportHeaders;\n     * this.exportOptions.alwaysExportHeaders = false;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n     public alwaysExportHeaders = true;\n\n    private _fileName: string;\n\n    constructor(fileName: string, protected _fileExtension: string) {\n        this.setFileName(fileName);\n    }\n\n    private setFileName(fileName: string): void {\n        this._fileName = fileName + (fileName.endsWith(this._fileExtension) === false ? this._fileExtension : '');\n    }\n\n    /**\n     * Gets the file name which will be used for the exporting operation.\n     * ```typescript\n     * let fileName = this.exportOptions.fileName;\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public get fileName() {\n        return this._fileName;\n    }\n\n    /**\n     * Sets the file name which will be used for the exporting operation.\n     * ```typescript\n     * this.exportOptions.fileName = 'exportedData01';\n     * ```\n     *\n     * @memberof IgxExporterOptionsBase\n     */\n    public set fileName(value) {\n        this.setFileName(value);\n    }\n\n}\n","import { IgxExporterOptionsBase } from '../exporter-common/exporter-options-base';\n\n/**\n * Objects of this class are used to configure the CSV exporting process.\n */\nexport class IgxCsvExporterOptions extends IgxExporterOptionsBase {\n\n    private _valueDelimiter;\n    private _fileType;\n\n    constructor(fileName: string, fileType: CsvFileTypes) {\n        super(fileName, IgxCsvExporterOptions.getExtensionFromFileType(fileType));\n        this.setFileType(fileType);\n        this.setDelimiter();\n    }\n\n    private static getExtensionFromFileType(fType: CsvFileTypes) {\n        let extension = '';\n        switch (fType) {\n            case CsvFileTypes.CSV:\n                extension = '.csv';\n                break;\n            case CsvFileTypes.TSV:\n                extension = '.tsv';\n                break;\n            case CsvFileTypes.TAB:\n                extension = '.tab';\n                break;\n            default:\n                throw Error('Unsupported CSV file type!');\n        }\n        return extension;\n    }\n\n    /**\n     * Gets the value delimiter which will be used for the exporting operation.\n     * ```typescript\n     * let delimiter = this.exportOptions.valueDelimiter;\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public get valueDelimiter() {\n        return this._valueDelimiter;\n    }\n\n    /**\n     * Sets a value delimiter which will overwrite the default delimiter of the selected export format.\n     * ```typescript\n     * this.exportOptions.valueDelimiter = '|';\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public set valueDelimiter(value) {\n        this.setDelimiter(value);\n    }\n\n    /**\n     * Gets the CSV export format.\n     * ```typescript\n     * let filetype = this.exportOptions.fileType;\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public get fileType() {\n        return this._fileType;\n    }\n\n    /**\n     * Sets the CSV export format.\n     * ```typescript\n     * this.exportOptions.fileType = CsvFileTypes.TAB;\n     * ```\n     *\n     * @memberof IgxCsvExporterOptions\n     */\n    public set fileType(value) {\n        this.setFileType(value);\n    }\n\n    private setFileType(value) {\n        if (value !== undefined && value !== null && value !== this._fileType) {\n            this._fileType = value;\n            const extension = IgxCsvExporterOptions.getExtensionFromFileType(value);\n            if (!this.fileName.endsWith(extension)) {\n                const oldExt = '.' + this.fileName.split('.').pop();\n                const newName = this.fileName.replace(oldExt, extension);\n                this._fileExtension = extension;\n                this.fileName = newName;\n            }\n        }\n    }\n\n    private setDelimiter(value?) {\n        if (value !== undefined && value !== '' && value !== null) {\n            this._valueDelimiter = value;\n        } else {\n            switch (this.fileType) {\n                case CsvFileTypes.CSV:\n                    this._valueDelimiter = ',';\n                    break;\n                case CsvFileTypes.TSV:\n                case CsvFileTypes.TAB:\n                    this._valueDelimiter = '\\t';\n                    break;\n            }\n        }\n    }\n}\n\n/**\n * This enumeration is used to configure the default value separator\n * as well as the default file extension used when performing CSV exporting.\n */\nexport enum CsvFileTypes {\n    /**\n     * Character Separated Values, default separator is \"comma\", default file extension is .csv\n     */\n    CSV,\n    /**\n     * Tab Separated Values, default separator is tab, default file extension is .tsv\n     */\n    TSV,\n    /**\n     * Tab Separated Values, default separator is tab, default file extension is .tab\n     */\n    TAB\n}\n","import { IgxExporterOptionsBase } from '../exporter-common/exporter-options-base';\n\n/**\n * Objects of this class are used to configure the Excel exporting process.\n */\nexport class IgxExcelExporterOptions extends IgxExporterOptionsBase {\n    /**\n     * Specifies if column pinning should be ignored. If ignoreColumnsOrder is set to true,\n     * this option will always be considered as set to true.\n     * ```typescript\n     * let ignorePinning = this.exportOptions.ignorePinning;\n     * this.exportOptions.ignorePinning = true;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public ignorePinning = false;\n\n    /**\n     * Specifies whether the exported data should be formatted as Excel table. (True by default)\n     * ```typescript\n     * let exportAsTable = this.exportOptions.exportAsTable;\n     * this.exportOptions.exportAsTable = false;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public exportAsTable = true;\n\n    private _columnWidth: number;\n    private _rowHeight: number;\n    private _worksheetName: string;\n\n    constructor(fileName: string) {\n        super(fileName, '.xlsx');\n    }\n\n    /**\n     * Gets the width of the columns in the exported excel file.\n     * ```typescript\n     * let width = this.exportOptions.columnWidth;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public get columnWidth(): number {\n        return this._columnWidth;\n    }\n\n    /**\n     * Sets the width of the columns in the exported excel file. If left unspecified,\n     * the width of the column or the default width of the excel columns will be used.\n     * ```typescript\n     * this.exportOptions.columnWidth = 55;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public set columnWidth(value: number) {\n        if (value < 0) {\n            throw Error('Invalid value for column width!');\n        }\n\n        this._columnWidth = value;\n    }\n\n    /**\n     * Gets the height of the rows in the exported excel file.\n     * ```typescript\n     * let height = this.exportOptions.rowHeight;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public get rowHeight(): number {\n        return this._rowHeight;\n    }\n\n    /**\n     * Sets the height of the rows in the exported excel file. If left unspecified or 0,\n     * the default height of the excel rows will be used.\n     * ```typescript\n     * this.exportOptions.rowHeight = 25;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public set rowHeight(value: number) {\n        if (value < 0) {\n            throw Error('Invalid value for row height!');\n        }\n\n        this._rowHeight = value;\n    }\n\n    /**\n     * Gets the name of the worksheet in the exported excel file.\n     * ```typescript\n     * let worksheetName = this.exportOptions.worksheetName;\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public get worksheetName(): string {\n        if (this._worksheetName === undefined || this._worksheetName === null) {\n            return 'Sheet1';\n        }\n\n        return this._worksheetName;\n    }\n\n    /**\n     * Sets the name of the worksheet in the exported excel file.\n     * ```typescript\n     * this.exportOptions.worksheetName = \"Worksheet\";\n     * ```\n     *\n     * @memberof IgxExcelExporterOptions\n     */\n    public set worksheetName(value: string) {\n        this._worksheetName = value;\n    }\n}\n","import { IgxExporterOptionsBase } from '../exporter-common/exporter-options-base';\n\n/**\n * Objects of this class are used to configure the PDF exporting process.\n */\nexport class IgxPdfExporterOptions extends IgxExporterOptionsBase {\n    /**\n     * Specifies the page orientation. (portrait or landscape, landscape by default)\n     * ```typescript\n     * let pageOrientation = this.exportOptions.pageOrientation;\n     * this.exportOptions.pageOrientation = 'portrait';\n     * ```\n     *\n     * @memberof IgxPdfExporterOptions\n     */\n    public pageOrientation: 'portrait' | 'landscape' = 'landscape';\n\n    /**\n     * Specifies the page size. (a4, a3, letter, legal, etc., a4 by default)\n     * ```typescript\n     * let pageSize = this.exportOptions.pageSize;\n     * this.exportOptions.pageSize = 'letter';\n     * ```\n     *\n     * @memberof IgxPdfExporterOptions\n     */\n    public pageSize: string = 'a4';\n\n    /**\n     * Specifies whether to show table borders. (True by default)\n     * ```typescript\n     * let showTableBorders = this.exportOptions.showTableBorders;\n     * this.exportOptions.showTableBorders = false;\n     * ```\n     *\n     * @memberof IgxPdfExporterOptions\n     */\n    public showTableBorders = true;\n\n    /**\n     * Specifies the font size for the table content. (10 by default)\n     * ```typescript\n     * let fontSize = this.exportOptions.fontSize;\n     * this.exportOptions.fontSize = 12;\n     * ```\n     *\n     * @memberof IgxPdfExporterOptions\n     */\n    public fontSize = 10;\n\n    /**\n     * Custom font configuration for Unicode character support in PDF exports.\n     *\n     * By default, the PDF exporter uses the built-in Helvetica font, which only supports\n     * basic Latin characters. If your data contains non-Latin characters (such as Cyrillic,\n     * Chinese, Japanese, Arabic, Hebrew, or special symbols), you must provide a custom\n     * TrueType font (TTF) that includes the required character glyphs.\n     *\n     * The font data must be provided as a Base64-encoded string of the TTF file contents.\n     * You can optionally provide a separate bold variant for header styling.\n     *\n     * @remarks\n     * To convert a TTF file to Base64, you can use Node.js:\n     * ```javascript\n     * const fs = require('fs');\n     * const fontData = fs.readFileSync('path/to/font.ttf');\n     * const base64 = fontData.toString('base64');\n     * fs.writeFileSync('font-base64.ts', `export const MY_FONT = '${base64}';`);\n     * ```\n     *\n     * Or use an online Base64 encoder tool to convert your TTF file.\n     *\n     * @example\n     * Basic usage with a single font (used for both normal and bold text):\n     * ```typescript\n     * import { NOTO_SANS_REGULAR } from './fonts/noto-sans';\n     *\n     * const options = new IgxPdfExporterOptions('Export');\n     * options.customFont = {\n     *     name: 'NotoSans',\n     *     data: NOTO_SANS_REGULAR\n     * };\n     * this.pdfExporter.export(this.grid, options);\n     * ```\n     *\n     * @example\n     * Usage with separate normal and bold font variants:\n     * ```typescript\n     * import { NOTO_SANS_REGULAR, NOTO_SANS_BOLD } from './fonts/noto-sans';\n     *\n     * const options = new IgxPdfExporterOptions('Export');\n     * options.customFont = {\n     *     name: 'NotoSans',\n     *     data: NOTO_SANS_REGULAR,\n     *     bold: {\n     *         name: 'NotoSans-Bold',\n     *         data: NOTO_SANS_BOLD\n     *     }\n     * };\n     * this.pdfExporter.export(this.grid, options);\n     * ```\n     *\n     * @example\n     * Recommended fonts for Unicode support:\n     * - Noto Sans: Covers most Unicode scripts (https://fonts.google.com/noto)\n     * - Arial Unicode MS: Comprehensive Unicode coverage\n     * - Source Han Sans: Excellent CJK (Chinese, Japanese, Korean) support\n     *\n     * @memberof IgxPdfExporterOptions\n     */\n    public customFont?: PdfUnicodeFont;\n\n    constructor(fileName: string) {\n        super(fileName, '.pdf');\n    }\n}\n\n/**\n * Font configuration interface for PDF export with Unicode character support.\n *\n * This interface defines the structure for providing custom TrueType fonts (TTF)\n * to the PDF exporter. Custom fonts are required when exporting data that contains\n * non-Latin characters, as the default Helvetica font only supports basic Latin characters.\n *\n * @remarks\n * The font data must be Base64-encoded TTF file contents. Both the normal and optional\n * bold variants should be from the same font family for consistent styling.\n *\n * If the bold variant is not provided, the normal font will be used for both\n * regular text and headers (which are typically rendered in bold).\n *\n * @example\n * Minimal configuration:\n * ```typescript\n * const font: PdfUnicodeFont = {\n *     name: 'MyFont',\n *     data: 'AAEAAAATAQAABAAwR0...' // Base64-encoded TTF data\n * };\n * ```\n *\n * @example\n * Full configuration with bold variant:\n * ```typescript\n * const font: PdfUnicodeFont = {\n *     name: 'MyFont-Regular',\n *     data: 'AAEAAAATAQAABAAwR0...', // Base64-encoded regular TTF\n *     bold: {\n *         name: 'MyFont-Bold',\n *         data: 'BBFAAAAUBQAACAAxS1...' // Base64-encoded bold TTF\n *     }\n * };\n * ```\n */\nexport interface PdfUnicodeFont {\n    /**\n     * Base64-encoded font data from a TrueType Font (TTF) file.\n     *\n     * This should be the complete TTF file contents encoded as a Base64 string.\n     * The font must include glyphs for all characters that may appear in your grid data.\n     *\n     * @remarks\n     * To convert a TTF file to Base64 in Node.js:\n     * ```javascript\n     * const base64Data = require('fs').readFileSync('font.ttf').toString('base64');\n     * ```\n     */\n    data: string;\n\n    /**\n     * The font family name to register with the PDF library.\n     *\n     * This name is used internally by jsPDF to reference the font. It should be\n     * a simple identifier without spaces (e.g., 'NotoSans', 'ArialUnicode').\n     *\n     * @remarks\n     * The name does not need to match the actual font's internal name, but using\n     * a descriptive name helps with debugging and maintenance.\n     */\n    name: string;\n\n    /**\n     * Optional bold variant of the font for styling headers and emphasized text.\n     *\n     * If provided, this font will be used for table headers and any other text\n     * that should appear in bold. If not provided, the normal font specified\n     * by `data` and `name` will be used for all text, including headers.\n     *\n     * @remarks\n     * For best visual results, use the bold variant from the same font family\n     * as the regular font.\n     */\n    bold?: {\n        /**\n         * Base64-encoded font data from a bold TrueType Font (TTF) file.\n         */\n        data: string;\n\n        /**\n         * The font family name for the bold variant.\n         *\n         * This should be different from the regular font name to avoid conflicts\n         * (e.g., 'NotoSans-Bold' vs 'NotoSans').\n         */\n        name: string;\n    };\n}\n","/**\n * @hidden\n */\nexport enum ExcelFolderTypes {\n    RootExcelFolder,\n    RootRelsExcelFolder,\n    DocPropsExcelFolder,\n    XLExcelFolder,\n    XLRelsExcelFolder,\n    ThemeExcelFolder,\n    WorksheetsExcelFolder,\n    WorksheetsRelsExcelFolder,\n    TablesExcelFolder\n}\n/**\n * @hidden\n */\nexport enum ExcelFileTypes {\n    RootRelsFile,\n    AppFile,\n    CoreFile,\n    WorkbookRelsFile,\n    ThemeFile,\n    WorksheetFile,\n    StyleFile,\n    WorkbookFile,\n    ContentTypesFile,\n    SharedStringsFile,\n    WorksheetRelsFile,\n    TablesFile\n}\n","/** @hidden */\nexport class ExcelStrings {\n    private static XML_STRING = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\r\\n';\n    private static SHARED_STRING_RELATIONSHIP = '<Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\" />';\n\n    public static getRels(): string {\n        return ExcelStrings.XML_STRING + '<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\"/><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\"/></Relationships>';\n    }\n\n    public static getApp(worksheetName: string): string {\n        return ExcelStrings.XML_STRING + `<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\"><Application>Microsoft Excel</Application><DocSecurity>0</DocSecurity><ScaleCrop>false</ScaleCrop><HeadingPairs><vt:vector size=\"2\" baseType=\"variant\"><vt:variant><vt:lpstr>Worksheets</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size=\"1\" baseType=\"lpstr\"><vt:lpstr>${worksheetName}</vt:lpstr></vt:vector></TitlesOfParts><Company></Company><LinksUpToDate>false</LinksUpToDate><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0300</AppVersion></Properties>`;\n    }\n\n    public static getCore(): string {\n        return ExcelStrings.XML_STRING + '<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><dc:creator></dc:creator><cp:lastModifiedBy></cp:lastModifiedBy><dcterms:created xsi:type=\"dcterms:W3CDTF\">2015-06-05T18:17:20Z</dcterms:created><dcterms:modified xsi:type=\"dcterms:W3CDTF\">2015-06-05T18:17:26Z</dcterms:modified></cp:coreProperties>';\n    }\n\n    public static getTheme(): string {\n        return ExcelStrings.XML_STRING + '<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"44546A\"/></a:dk2><a:lt2><a:srgbClr val=\"E7E6E6\"/></a:lt2><a:accent1><a:srgbClr val=\"5B9BD5\"/></a:accent1><a:accent2><a:srgbClr val=\"ED7D31\"/></a:accent2><a:accent3><a:srgbClr val=\"A5A5A5\"/></a:accent3><a:accent4><a:srgbClr val=\"FFC000\"/></a:accent4><a:accent5><a:srgbClr val=\"4472C4\"/></a:accent5><a:accent6><a:srgbClr val=\"70AD47\"/></a:accent6><a:hlink><a:srgbClr val=\"0563C1\"/></a:hlink><a:folHlink><a:srgbClr val=\"954F72\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri Light\" panose=\"020F0302020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"游ゴシック Light\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"等线 Light\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Times New Roman\"/><a:font script=\"Hebr\" typeface=\"Times New Roman\"/><a:font script=\"Thai\" typeface=\"Tahoma\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"MoolBoran\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Times New Roman\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/></a:majorFont><a:minorFont><a:latin typeface=\"Calibri\" panose=\"020F0502020204030204\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"游ゴシック\"/><a:font script=\"Hang\" typeface=\"맑은 고딕\"/><a:font script=\"Hans\" typeface=\"等线\"/><a:font script=\"Hant\" typeface=\"新細明體\"/><a:font script=\"Arab\" typeface=\"Arial\"/><a:font script=\"Hebr\" typeface=\"Arial\"/><a:font script=\"Thai\" typeface=\"Tahoma\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"DaunPenh\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Arial\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/><a:font script=\"Geor\" typeface=\"Sylfaen\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"110000\"/><a:satMod val=\"105000\"/><a:tint val=\"67000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"103000\"/><a:tint val=\"73000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"105000\"/><a:satMod val=\"109000\"/><a:tint val=\"81000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:satMod val=\"103000\"/><a:lumMod val=\"102000\"/><a:tint val=\"94000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:satMod val=\"110000\"/><a:lumMod val=\"100000\"/><a:shade val=\"100000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:lumMod val=\"99000\"/><a:satMod val=\"120000\"/><a:shade val=\"78000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"6350\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"12700\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln><a:ln w=\"19050\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/><a:miter lim=\"800000\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"57150\" dist=\"19050\" dir=\"5400000\" algn=\"ctr\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"63000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:solidFill><a:schemeClr val=\"phClr\"><a:tint val=\"95000\"/><a:satMod val=\"170000\"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"93000\"/><a:satMod val=\"150000\"/><a:shade val=\"98000\"/><a:lumMod val=\"102000\"/></a:schemeClr></a:gs><a:gs pos=\"50000\"><a:schemeClr val=\"phClr\"><a:tint val=\"98000\"/><a:satMod val=\"130000\"/><a:shade val=\"90000\"/><a:lumMod val=\"103000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"63000\"/><a:satMod val=\"120000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"5400000\" scaled=\"0\"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri=\"{05A4C25C-085E-4340-85A3-A5531E510DB2}\"><thm15:themeFamily xmlns:thm15=\"http://schemas.microsoft.com/office/thememl/2012/main\" name=\"Office Theme\" id=\"{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}\" vid=\"{4A3C46E8-61CC-4603-A589-7422A47A8E4A}\"/></a:ext></a:extLst></a:theme>';\n    }\n\n    public static getStyles(): string {\n        return ExcelStrings.XML_STRING +\n        '<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac x16r2\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\" xmlns:x16r2=\"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main\"><numFmts count=\"5\"><numFmt numFmtId=\"164\" formatCode=\"&quot;$&quot;#,##0.00\"/><numFmt numFmtId=\"165\" formatCode=\"[$£-809]#,##0.00\"/><numFmt numFmtId=\"166\" formatCode=\"[$¥-804]#,##0.00\"/><numFmt numFmtId=\"167\" formatCode=\"#,##0.00\\ [$€-1]\"/><numFmt numFmtId=\"168\" formatCode=\"[$¥-411]#,##0.00\"/></numFmts><fonts count=\"2\" x14ac:knownFonts=\"1\"><font><sz val=\"11\"/><color theme=\"1\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font><font><b/><sz val=\"11\"/><color theme=\"0\"/><name val=\"Calibri\"/><family val=\"2\"/><scheme val=\"minor\"/></font></fonts><fills count=\"3\"><fill><patternFill patternType=\"none\"/></fill><fill><patternFill patternType=\"gray125\"/></fill><fill><patternFill patternType=\"solid\"><fgColor theme=\"4\"/><bgColor indexed=\"64\"/></patternFill></fill></fills><borders count=\"1\"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count=\"1\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/></cellStyleXfs><cellXfs count=\"13\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"14\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"0\" fontId=\"1\" fillId=\"2\" borderId=\"0\" xfId=\"0\"/><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyAlignment=\"1\"><alignment horizontal=\"center\" vertical=\"center\"/></xf><xf numFmtId=\"164\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"165\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"166\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"167\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"168\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"21\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"22\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/><xf numFmtId=\"10\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" applyNumberFormat=\"1\"/></cellXfs><cellStyles count=\"1\"><cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/></cellStyles><dxfs count=\"0\"/><tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\"/><extLst><ext uri=\"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}\" xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\"><x14:slicerStyles defaultSlicerStyle=\"SlicerStyleLight1\"/></ext><ext uri=\"{9260A510-F301-46a8-8635-F512D64BE5F5}\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"><x15:timelineStyles defaultTimelineStyle=\"TimeSlicerStyleLight1\"/></ext></extLst></styleSheet>';\n    }\n\n    public static getWorkbook(worksheetName: string): string {\n        return ExcelStrings.XML_STRING + `<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x15\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"><fileVersion appName=\"xl\" lastEdited=\"6\" lowestEdited=\"6\" rupBuild=\"14420\"/><workbookPr filterPrivacy=\"1\" defaultThemeVersion=\"164011\"/><bookViews><workbookView xWindow=\"0\" yWindow=\"0\" windowWidth=\"22260\" windowHeight=\"12645\"/></bookViews><sheets><sheet name=\"${worksheetName}\" sheetId=\"1\" r:id=\"rId1\"/></sheets><calcPr calcId=\"162913\"/><extLst><ext uri=\"{140A7094-0E35-4892-8432-C4D2E57EDEB5}\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\"><x15:workbookPr chartTrackingRefBase=\"1\"/></ext></extLst></workbook>`;\n    }\n\n    public static getWorksheetRels(): string {\n        return ExcelStrings.XML_STRING + `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table\" Target=\"../tables/table1.xml\"/></Relationships>`;\n    }\n\n    public static getWorkbookRels(hasSharedStrings): string {\n        let retVal = ExcelStrings.XML_STRING + `<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>`;\n\n        if (hasSharedStrings) {\n            retVal += ExcelStrings.SHARED_STRING_RELATIONSHIP;\n        }\n\n        retVal += '</Relationships>';\n\n        return retVal;\n    }\n\n    public static getSheetXML(dimension: string, freezePane: string, cols: string, sheetData: string, hasTable: boolean, outlineLevel = 0, isHierarchical: boolean): string {\n        const hasOutline = outlineLevel > 0;\n        const tableParts = hasTable ? '<tableParts count=\"1\"><tablePart r:id=\"rId1\"/></tableParts>' : '';\n        const sheetOutlineProp = hasOutline ? '<sheetPr><outlinePr summaryBelow=\"0\"/></sheetPr>' : '';\n        const sOutlineLevel =  hasOutline ? `outlineLevelRow=\"${outlineLevel}\"` : '';\n        const dimensions = isHierarchical ? '' : `<dimension ref=\"${dimension}\"/>`;\n\n        // return ExcelStrings.XML_STRING +\n        //     '<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\"><dimension ref=\"' + dimension + '\"/><sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\">' + freezePane + '</sheetView></sheetViews><sheetFormatPr defaultRowHeight=\"15\" x14ac:dyDescent=\"0.25\"/>' + cols + sheetData + '<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>' + tableParts + '</worksheet>';\n\n        return `${ExcelStrings.XML_STRING}\n<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\">\n${sheetOutlineProp}\n${dimensions}\n<sheetViews><sheetView tabSelected=\"1\" workbookViewId=\"0\">${freezePane}</sheetView></sheetViews>\n<sheetFormatPr defaultRowHeight=\"15\" ${sOutlineLevel} x14ac:dyDescent=\"0.25\"/>\n${cols}\n${sheetData}\n<pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\"/>\n${tableParts}</worksheet>`;\n\n    }\n\n    public static getSharedStringXML(count: number, uniqueCount: number, table: string): string {\n        return ExcelStrings.XML_STRING + '<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"' + count + '\" uniqueCount=\"' + uniqueCount + '\">' + table + '</sst>';\n    }\n\n    public static getContentTypesXML(hasSharedStrings: boolean, hasTable: boolean): string {\n        let contentTypes = ExcelStrings.XML_STRING +\n        `<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\\\">\n            <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\n            <Default Extension=\"xml\" ContentType=\"application/xml\"/>\n            <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\n            <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\n            <Override PartName=\"/xl/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>\n            <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\n            <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\n            <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>`;\n\n        contentTypes += hasSharedStrings ?\n        `\t<Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>` : '';\n\n        contentTypes += hasTable ?\n            `<Override PartName=\"/xl/tables/table1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\"/>` : '';\n        contentTypes += `</Types>`;\n\n        return contentTypes;\n    }\n\n    public static getTablesXML(autoFilterDimension: string, tableDimension: string, tableColumns: string, sort: string): string {\n        return `${ExcelStrings.XML_STRING}<table xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" id=\"1\" name=\"Table1\" displayName=\"Table1\" ref=\"${tableDimension}\" totalsRowShown=\"0\">\n    <autoFilter ref=\"${autoFilterDimension}\"/>${sort}${tableColumns}<tableStyleInfo name=\"TableStyleMedium2\" showFirstColumn=\"0\" showLastColumn=\"0\" showRowStripes=\"1\" showColumnStripes=\"0\"/>\n</table>`;\n    }\n\n\n    public static getExcelColumn(index: number): string {\n        // Returns the excel column name for given 0-based index\n        // For example 27 should return \"AB\"\n        let returnString = '';\n        while (index >= 0) {\n            const char = index % 26;\n            returnString = String.fromCharCode(65 + char) + returnString;\n            index = Math.floor(index / 26) - 1;\n        }\n        return returnString;\n    }\n}\n","/**\n * @hidden\n */\nexport class ExportUtilities {\n    public static getKeysFromData(data: any[]) {\n        const length = data.length;\n        if (length === 0) {\n            return [];\n        }\n\n        const dataEntry = data[0];\n        const dataEntryMiddle = data[Math.floor(length / 2)];\n        const dataEntryLast = data[length - 1];\n\n        const keys1 = Object.keys(dataEntry);\n        const keys2 = Object.keys(dataEntryMiddle);\n        const keys3 = Object.keys(dataEntryLast);\n\n        const keys = new Set(keys1.concat(keys2).concat(keys3));\n\n        return !ExportUtilities.isSpecialData(dataEntry) ? Array.from(keys) : ['Column 1'];\n    }\n\n    public static saveBlobToFile(blob: Blob, fileName) {\n        const doc = globalThis.document;\n        const a = doc.createElement('a');\n        const url = window.URL.createObjectURL(blob);\n        a.download = fileName;\n\n        a.href = url;\n        doc.body.appendChild(a);\n        a.click();\n        doc.body.removeChild(a);\n        window.URL.revokeObjectURL(url);\n    }\n\n    public static stringToArrayBuffer(s: string): ArrayBuffer {\n        const buf = new ArrayBuffer(s.length);\n        const view = new Uint8Array(buf);\n        for (let i = 0; i !== s.length; ++i) {\n            view[i] = s.charCodeAt(i) & 0xFF;\n        }\n        return buf;\n    }\n\n    public static isSpecialData(data: any): boolean {\n        return (typeof data === 'string' ||\n            typeof data === 'number' ||\n            data instanceof Date);\n    }\n\n    public static hasValue(value: any): boolean {\n        return value !== undefined && value !== null;\n    }\n\n    public static isNullOrWhitespaces(value: string): boolean {\n        return value === undefined || value === null || !value.trim();\n    }\n\n    public static sanitizeValue(value: any): string {\n        if (!this.hasValue(value)) {\n            return '';\n        } else {\n            const stringValue = String(value);\n            return stringValue.replace(/&/g, '&amp;')\n                              .replace(/</g, '&lt;')\n                              .replace(/>/g, '&gt;')\n                              .replace(/\"/g, '&quot;')\n                              .replace(/'/g, '&apos;')\n                              // Bug #14944 - Remove the not supported null character (\\u0000, \\x00)\n                              .replace(/\\x00/g, '');\n        }\n    }\n}\n","/* Copyright (c) 2014-2020 Denis Pushkarev\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE\n */\n\n// Note: Originally copied from core-js-pure package and modified. (https://github.com/zloirock/core-js)\n\nconst queue = {};\nlet counter = 0;\nlet eventListenerAdded = false;\n\ndeclare global {\n    interface Window {\n        setImmediate: any;\n        clearImmediate: any;\n    }\n}\n\nconst run = (id) => {\n    if (queue.hasOwnProperty(id)) {\n        const fn = queue[id];\n        delete queue[id];\n        fn();\n    }\n};\n\nconst listener = (event) => run(event.data);\n\n// Use function instead of arrow function to workaround an issue in codesandbox\nexport function setImmediate(cb: () => void, ...args) {\n    if (window.setImmediate) {\n        return window.setImmediate(cb);\n    }\n\n    if (!eventListenerAdded) {\n        eventListenerAdded = true;\n        window.addEventListener('message', listener, false);\n    }\n\n    queue[++counter] = () => {\n        cb.apply(undefined, args);\n    };\n\n    const windowLocation = window.location;\n    window.postMessage(counter + '', windowLocation.protocol + '//' + windowLocation.host);\n\n    return counter;\n}\n\nexport function clearImmediate(id: any) {\n    if (window.clearImmediate) {\n        return window.clearImmediate(id);\n    }\n\n    delete queue[id];\n}\n","import { setImmediate } from '../../setImmediate';\n\n/**\n * Executes a loop in chunks to avoid blocking the UI thread.\n * Uses setImmediate for efficient scheduling between chunks.\n * @hidden\n * @internal\n */\nexport const yieldingLoop = (count: number, chunkSize: number, callback: (index: number) => void, done: () => void) => {\n    let i = 0;\n    const chunk = () => {\n        const end = Math.min(i + chunkSize, count);\n        for (; i < end; ++i) {\n            callback(i);\n        }\n        if (i < count) {\n            setImmediate(chunk);\n        } else {\n            done();\n        }\n    };\n    chunk();\n};\n","import { EventEmitter } from '@angular/core';\nimport { ExportUtilities } from './export-utilities';\nimport { IgxExporterOptionsBase } from './exporter-options-base';\nimport { yieldingLoop } from './yielding-loop';\nimport { type ITreeGridRecord, type ColumnType, type GridTypeBase, type IPathSegment, type IgxSummaryResult, type GridColumnDataType, DataUtil, FilterUtil, GridSummaryCalculationMode, IBaseEventArgs, IFilteringState, IGroupByExpandState, IGroupByRecord, IGroupingState, TreeGridFilteringStrategy, cloneArray, cloneValue, columnFieldPath, resolveNestedPath, getHierarchy, isHierarchyMatch, BaseFormatter } from 'igniteui-angular/core';\nimport { FormatWidth, getLocaleDateFormat, getLocaleDateTimeFormat } from '@angular/common';\n\nexport enum ExportRecordType {\n    GroupedRecord = 'GroupedRecord',\n    TreeGridRecord = 'TreeGridRecord',\n    DataRecord = 'DataRecord',\n    HierarchicalGridRecord = 'HierarchicalGridRecord',\n    HeaderRecord = 'HeaderRecord',\n    SummaryRecord = 'SummaryRecord',\n    PivotGridRecord = 'PivotGridRecord'\n}\n\nexport enum ExportHeaderType {\n    RowHeader = 'RowHeader',\n    ColumnHeader = 'ColumnHeader',\n    MultiRowHeader = 'MultiRowHeader',\n    MultiColumnHeader = 'MultiColumnHeader',\n    PivotRowHeader = 'PivotRowHeader',\n    PivotMergedHeader = 'PivotMergedHeader',\n}\n\nexport interface IExportRecord {\n    data: any;\n    level: number;\n    type: ExportRecordType;\n    owner?: string | GridTypeBase;\n    hidden?: boolean;\n    summaryKey?: string;\n    hierarchicalOwner?: string;\n    references?: IColumnInfo[];\n    /* Adding `rawData` and `dimesnionKeys` properties to support properly exporting pivot grid data to CSV. */\n    rawData?: any;\n    dimensionKeys?: string[];\n}\n\nexport interface IColumnList {\n    columns: IColumnInfo[];\n    columnWidths: number[];\n    indexOfLastPinnedColumn: number;\n    maxLevel?: number;\n    maxRowLevel?: number;\n}\n\nexport interface IColumnInfo {\n    header: string;\n    field: string;\n    skip: boolean;\n    dataType?: GridColumnDataType;\n    skipFormatter?: boolean;\n    formatter?: any;\n    headerType?: ExportHeaderType;\n    startIndex?: number;\n    columnSpan?: number;\n    rowSpan?: number;\n    level?: number;\n    exportIndex?: number;\n    pinnedIndex?: number;\n    columnGroupParent?: ColumnType | string;\n    columnGroup?: ColumnType | string;\n    currencyCode?: string;\n    displayFormat?: string;\n    dateFormat?: string;\n    digitsInfo?: string;\n}\n/**\n * rowExporting event arguments\n * this.exporterService.rowExporting.subscribe((args: IRowExportingEventArgs) => {\n * // set args properties here\n * })\n */\nexport interface IRowExportingEventArgs extends IBaseEventArgs {\n    /**\n     * Contains the exporting row data\n     */\n    rowData: any;\n\n    /**\n     * Contains the exporting row index\n     */\n    rowIndex: number;\n\n    /**\n     * Skip the exporting row when set to true\n     */\n    cancel: boolean;\n}\n\n/**\n * columnExporting event arguments\n * ```typescript\n * this.exporterService.columnExporting.subscribe((args: IColumnExportingEventArgs) => {\n * // set args properties here\n * });\n * ```\n */\nexport interface IColumnExportingEventArgs extends IBaseEventArgs {\n    /**\n     * Contains the exporting column header\n     */\n    header: string;\n\n    /**\n     * Contains the exporting column field name\n     */\n    field: string;\n\n    /**\n     * Contains the exporting column index\n     */\n    columnIndex: number;\n\n    /**\n     * Skip the exporting column when set to true\n     */\n    cancel: boolean;\n\n    /**\n     * Export the column's data without applying its formatter, when set to true\n     */\n    skipFormatter: boolean;\n\n    /**\n     * A reference to the grid owner.\n     */\n    grid?: GridTypeBase;\n}\n\n/**hidden\n * A helper class used to identify whether the user has set a specific columnIndex\n * during columnExporting, so we can honor it at the exported file.\n*/\nclass IgxColumnExportingEventArgs implements IColumnExportingEventArgs {\n    public header: string;\n    public field: string;\n    public cancel: boolean;\n    public skipFormatter: boolean;\n    public grid?: GridTypeBase;\n    public owner?: any;\n    public userSetIndex? = false;\n\n    private _columnIndex?: number;\n\n    public get columnIndex(): number {\n        return this._columnIndex;\n    }\n\n    public set columnIndex(value: number) {\n        this._columnIndex = value;\n        this.userSetIndex = true;\n    }\n\n    constructor(original: IColumnExportingEventArgs) {\n        this.header = original.header;\n        this.field = original.field;\n        this.cancel = original.cancel;\n        this.skipFormatter = original.skipFormatter;\n        this.grid = original.grid;\n        this.owner = original.owner;\n        this._columnIndex = original.columnIndex;\n    }\n}\n\nexport const DEFAULT_OWNER = 'default';\nexport const GRID_ROOT_SUMMARY = 'igxGridRootSummary';\nexport const GRID_PARENT = 'grid-parent';\nexport const GRID_LEVEL_COL = 'GRID_LEVEL_COL';\nconst DEFAULT_COLUMN_WIDTH = 8.43;\nconst GRID_CHILD = 'grid-child-';\n\nexport abstract class IgxBaseExporter {\n\n    public exportEnded = new EventEmitter<IBaseEventArgs>();\n\n    /**\n     * This event is emitted when a row is exported.\n     * ```typescript\n     * this.exporterService.rowExporting.subscribe((args: IRowExportingEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public rowExporting = new EventEmitter<IRowExportingEventArgs>();\n\n    /**\n     * This event is emitted when a column is exported.\n     * ```typescript\n     * this.exporterService.columnExporting.subscribe((args: IColumnExportingEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public columnExporting = new EventEmitter<IColumnExportingEventArgs>();\n\n    protected _sort = null;\n    protected pivotGridFilterFieldsCount: number;\n    protected _ownersMap: Map<any, IColumnList> = new Map<any, IColumnList>();\n\n    private locale: string\n    private _setChildSummaries = false\n    private isPivotGridExport: boolean;\n    private options: IgxExporterOptionsBase;\n    private summaries: Map<string, Map<string, any[]>> = new Map<string, Map<string, IgxSummaryResult[]>>();\n    private rowIslandCounter = -1;\n    private flatRecords: IExportRecord[] = [];\n    private pivotGridColumns: IColumnInfo[] = []\n    private pivotGridRowDimensionsMap: Map<string, string>;\n    private ownerGrid: any;\n    private i18nFormatter: BaseFormatter;\n\n    /* alternateName: exportGrid */\n    /**\n     * Method for exporting IgxGrid component's data.\n     * ```typescript\n     * this.exporterService.export(this.igxGridForExport, this.exportOptions);\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public export(grid: any, options: IgxExporterOptionsBase): void {\n        if (options === undefined || options === null) {\n            throw Error('No options provided!');\n        }\n\n        this.options = options;\n        this.locale = grid.locale;\n        this.ownerGrid = grid;\n        this.i18nFormatter = grid.i18nFormatter;\n        let columns = grid.columns;\n\n        if (this.options.ignoreMultiColumnHeaders) {\n            columns = columns.filter(col => col.children === undefined);\n        }\n\n        const columnList = this.getColumns(columns);\n\n        if (grid.type === 'hierarchical') {\n            this._ownersMap.set(grid, columnList);\n\n            const childLayoutList = grid.childLayoutList;\n\n            for (const island of childLayoutList) {\n                const gridData = grid.data && grid.data.length > 0 ? grid.data[0] : {};\n                this.mapHierarchicalGridColumns(island, gridData);\n            }\n        } else if (grid.type === 'pivot') {\n            this.pivotGridColumns = [];\n            this.isPivotGridExport = true;\n            this.pivotGridRowDimensionsMap = new Map<string, string>();\n\n            grid.visibleRowDimensions.filter(r => r.enabled).forEach(rowDimension => {\n                this.addToRowDimensionsMap(rowDimension, rowDimension.memberName);\n            });\n\n            this._ownersMap.set(DEFAULT_OWNER, columnList);\n        } else {\n            this._ownersMap.set(DEFAULT_OWNER, columnList);\n        }\n\n        this.summaries = this.prepareSummaries(grid);\n        this._setChildSummaries = this.summaries.size > 1 && grid.summaryCalculationMode !== GridSummaryCalculationMode.rootLevelOnly;\n\n        this.addLevelColumns();\n        this.prepareData(grid);\n        this.addLevelData();\n        this.addPivotGridColumns(grid);\n        this.addPivotRowHeaders(grid);\n        this.exportGridRecordsData(this.flatRecords, grid);\n    }\n\n    /**\n     * Method for exporting any kind of array data.\n     * ```typescript\n     * this.exporterService.exportData(this.arrayForExport, this.exportOptions);\n     * ```\n     *\n     * @memberof IgxBaseExporter\n     */\n    public exportData(data: any[], options: IgxExporterOptionsBase): void {\n        if (options === undefined || options === null) {\n            throw Error('No options provided!');\n        }\n\n        this.options = options;\n\n        const records = data.map(d => {\n            const record: IExportRecord = {\n                data: d,\n                type: ExportRecordType.DataRecord,\n                level: 0\n            };\n\n            return record;\n        });\n\n        this.exportGridRecordsData(records);\n    }\n\n    private addToRowDimensionsMap(rowDimension: any, rootParentName: string) {\n        this.pivotGridRowDimensionsMap[rowDimension.memberName] = rootParentName;\n        if (rowDimension.childLevel) {\n            this.addToRowDimensionsMap(rowDimension.childLevel, rootParentName)\n        }\n    }\n\n    private exportGridRecordsData(records: IExportRecord[], grid?: GridTypeBase) {\n        if (this._ownersMap.size === 0) {\n            const recordsData = records.filter(r => r.type !== ExportRecordType.SummaryRecord).map(r => r.data);\n            const keys = ExportUtilities.getKeysFromData(recordsData);\n            const columns = keys.map((k) =>\n                ({ header: k, field: k, skip: false, headerType: ExportHeaderType.ColumnHeader, level: 0, columnSpan: 1 }));\n            const columnWidths = new Array<number>(keys.length).fill(DEFAULT_COLUMN_WIDTH);\n\n            const mapRecord: IColumnList = {\n                columns,\n                columnWidths,\n                indexOfLastPinnedColumn: -1,\n                maxLevel: 0\n            };\n\n            this._ownersMap.set(DEFAULT_OWNER, mapRecord);\n        }\n\n        let shouldReorderColumns = false;\n        for (const [key, mapRecord] of this._ownersMap) {\n            let skippedPinnedColumnsCount = 0;\n            let columnsWithoutHeaderCount = 1;\n            let indexOfLastPinnedColumn = mapRecord.indexOfLastPinnedColumn;\n\n            mapRecord.columns.forEach((column, index) => {\n                if (!column.skip) {\n                    const columnExportArgs: IColumnExportingEventArgs = {\n                        header: !ExportUtilities.isNullOrWhitespaces(column.header) ?\n                            column.header :\n                            'Column' + columnsWithoutHeaderCount++,\n                        field: column.field,\n                        columnIndex: index,\n                        cancel: false,\n                        skipFormatter: false,\n                        grid: key === DEFAULT_OWNER ? grid : key\n                    };\n\n                    const newColumnExportArgs = new IgxColumnExportingEventArgs(columnExportArgs);\n                    this.columnExporting.emit(newColumnExportArgs);\n\n                    column.header = newColumnExportArgs.header;\n                    column.skip = newColumnExportArgs.cancel;\n                    column.skipFormatter = newColumnExportArgs.skipFormatter;\n\n                    if (newColumnExportArgs.userSetIndex) {\n                        column.exportIndex = newColumnExportArgs.columnIndex;\n                        shouldReorderColumns = true;\n                    }\n\n                    if (column.skip) {\n                        if (index <= indexOfLastPinnedColumn) {\n                            skippedPinnedColumnsCount++;\n                        }\n\n                        this.calculateColumnSpans(column, mapRecord, column.columnSpan);\n\n                        const nonSkippedColumns = mapRecord.columns.filter(c => !c.skip);\n\n                        if (nonSkippedColumns.length > 0) {\n                            this._ownersMap.get(key).maxLevel = nonSkippedColumns.sort((a, b) => b.level - a.level)[0].level;\n                        }\n                    }\n\n                    if (this._sort && this._sort.fieldName === column.field) {\n                        if (column.skip) {\n                            this._sort = null;\n                        } else {\n                            this._sort.fieldName = column.header;\n                        }\n                    }\n                }\n            });\n\n            indexOfLastPinnedColumn -= skippedPinnedColumnsCount;\n\n            // Reorder columns only if a column has been assigned a specific columnIndex during columnExporting event\n            if (shouldReorderColumns) {\n                mapRecord.columns = this.reorderColumns(mapRecord.columns);\n            }\n        }\n\n        const dataToExport = new Array<IExportRecord>();\n        const actualData = records[0]?.data;\n        const isSpecialData = ExportUtilities.isSpecialData(actualData);\n\n        yieldingLoop(records.length, 100, (i) => {\n            const row = records[i];\n            this.exportRow(dataToExport, row, i, isSpecialData);\n        }, () => {\n            this.exportDataImplementation(dataToExport, this.options, () => {\n                this.resetDefaults();\n            });\n        });\n    }\n\n    private calculateColumnSpans(column: IColumnInfo, mapRecord: IColumnList, span: number) {\n        if (column.headerType === ExportHeaderType.MultiColumnHeader && column.skip) {\n            const columnGroupChildren = mapRecord.columns.filter(c => c.columnGroupParent === column.columnGroup);\n\n            columnGroupChildren.forEach(cgc => {\n                if (cgc.headerType === ExportHeaderType.MultiColumnHeader) {\n                    cgc.columnSpan = 0;\n                    cgc.columnGroupParent = null;\n                    cgc.skip = true;\n\n                    this.calculateColumnSpans(cgc, mapRecord, cgc.columnSpan);\n                } else {\n                    cgc.skip = true;\n                }\n            });\n        }\n\n        const targetCol = mapRecord.columns.filter(c => column.columnGroupParent !== null && column.columnGroupParent !== undefined && c.columnGroup === column.columnGroupParent)[0];\n        if (targetCol !== undefined) {\n            targetCol.columnSpan -= span;\n\n            if (targetCol.columnGroupParent !== null) {\n                this.calculateColumnSpans(targetCol, mapRecord, span);\n            }\n\n            if (targetCol.columnSpan === 0) {\n                targetCol.skip = true;\n            }\n        }\n    }\n\n    private exportRow(data: IExportRecord[], record: IExportRecord, index: number, isSpecialData: boolean) {\n        if (!isSpecialData) {\n            const owner = record.owner === undefined ? DEFAULT_OWNER : record.owner;\n            const ownerCols = this._ownersMap.get(owner).columns;\n            const hasRowHeaders = ownerCols.some(c => c.headerType === ExportHeaderType.RowHeader);\n\n            if (record.type !== ExportRecordType.HeaderRecord) {\n                const columns = ownerCols\n                    .filter(c => c.headerType === ExportHeaderType.ColumnHeader && !c.skip)\n                    .sort((a, b) => a.startIndex - b.startIndex)\n                    .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n\n                if (hasRowHeaders) {\n                    record.rawData = record.data;\n                }\n\n                record.data = columns.reduce((a, e) => {\n                    if (!e.skip) {\n                        let rawValue = resolveNestedPath(record.data, columnFieldPath(e.field)) as any;\n\n                        const shouldApplyFormatter = e.formatter && !e.skipFormatter && record.type !== ExportRecordType.GroupedRecord;\n                        const isOfDateType = e.dataType === 'date' || e.dataType === 'dateTime' || e.dataType === 'time';\n\n                        if (isOfDateType &&\n                            record.type !== ExportRecordType.SummaryRecord &&\n                            record.type !== ExportRecordType.GroupedRecord &&\n                            !(rawValue instanceof Date) &&\n                            !shouldApplyFormatter &&\n                            rawValue !== undefined &&\n                            rawValue !== null) {\n                            rawValue = new Date(rawValue);\n                        } else if (e.dataType === 'string' && rawValue instanceof Date) {\n                            rawValue = rawValue.toString();\n                        }\n\n                        let formattedValue = shouldApplyFormatter ? e.formatter(rawValue, record.data) : rawValue;\n\n                        if (this.isPivotGridExport && !isNaN(parseFloat(formattedValue))) {\n                            formattedValue = parseFloat(formattedValue);\n                        }\n\n                        a[e.field] = formattedValue;\n                    }\n                    return a;\n                }, {});\n            } else {\n                record.data = record.data.filter((_, i) => !record.references[i].skip)\n            }\n        }\n\n        const rowArgs = {\n            rowData: record.data,\n            rowIndex: index,\n            cancel: false,\n            owner: record.owner ?? this.ownerGrid\n        };\n\n        this.rowExporting.emit(rowArgs);\n\n        if (!rowArgs.cancel) {\n            data.push(record);\n        }\n    }\n\n    private reorderColumns(columns: IColumnInfo[]): IColumnInfo[] {\n        const filteredColumns = columns.filter(c => !c.skip);\n        const length = filteredColumns.length;\n        const specificIndicesColumns = filteredColumns.filter((col) => !isNaN(col.exportIndex))\n            .sort((a, b) => a.exportIndex - b.exportIndex);\n        const indices = specificIndicesColumns.map(col => col.exportIndex);\n\n        specificIndicesColumns.forEach(col => {\n            filteredColumns.splice(filteredColumns.indexOf(col), 1);\n        });\n\n        const reorderedColumns = new Array(length);\n\n        if (specificIndicesColumns.length > Math.max(...indices)) {\n            return specificIndicesColumns.concat(filteredColumns);\n        } else {\n            indices.forEach((i, index) => {\n                if (i < 0 || i >= length) {\n                    filteredColumns.push(specificIndicesColumns[index]);\n                } else {\n                    let k = i;\n                    while (k < length && reorderedColumns[k] !== undefined) {\n                        ++k;\n                    }\n                    reorderedColumns[k] = specificIndicesColumns[index];\n                }\n            });\n\n            for (let i = 0; i < length; i++) {\n                if (reorderedColumns[i] === undefined) {\n                    reorderedColumns[i] = filteredColumns.splice(0, 1)[0];\n                }\n            }\n\n        }\n        return reorderedColumns;\n    }\n\n    private prepareData(grid: GridTypeBase) {\n        this.flatRecords = [];\n        const hasFiltering = (grid.filteringExpressionsTree && grid.filteringExpressionsTree.filteringOperands.length > 0) ||\n            (grid.advancedFilteringExpressionsTree && grid.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n        const expressions = grid.groupingExpressions ? grid.groupingExpressions.concat(grid.sortingExpressions || []) : grid.sortingExpressions;\n        const hasSorting = expressions && expressions.length > 0;\n        let setSummaryOwner = false;\n\n        switch (grid.type) {\n            case 'pivot': {\n                this.preparePivotGridData(grid);\n                break;\n            }\n            case 'hierarchical': {\n                this.prepareHierarchicalGridData(grid, hasFiltering, hasSorting);\n                setSummaryOwner = true;\n                break;\n            }\n            case 'tree': {\n                this.prepareTreeGridData(grid, hasFiltering, hasSorting);\n                break;\n            }\n            default: {\n                this.prepareGridData(grid, hasFiltering, hasSorting);\n                break;\n            }\n        }\n\n        if (this.summaries.size > 0 && grid.summaryCalculationMode !== GridSummaryCalculationMode.childLevelsOnly) {\n            setSummaryOwner ?\n                this.setSummaries(GRID_ROOT_SUMMARY, 0, false, grid) :\n                this.setSummaries(GRID_ROOT_SUMMARY);\n        }\n    }\n\n    private preparePivotGridData(grid: GridTypeBase) {\n        for (const record of grid.filteredSortedData) {\n            const recordData = Object.fromEntries(record.aggregationValues);\n            record.dimensionValues.forEach((value, key) => {\n                const actualKey = this.pivotGridRowDimensionsMap[key];\n                recordData[actualKey] = value;\n            });\n\n            const pivotGridRecord: IExportRecord = {\n                data: recordData,\n                level: record.level,\n                type: ExportRecordType.PivotGridRecord\n            };\n\n            this.flatRecords.push(pivotGridRecord);\n        }\n\n        if (this.flatRecords.length) {\n            this.flatRecords[0].dimensionKeys = Object.values(this.pivotGridRowDimensionsMap);\n        }\n    }\n\n    private prepareHierarchicalGridData(grid: GridTypeBase, hasFiltering: boolean, hasSorting: boolean) {\n\n        const skipOperations =\n            (!hasFiltering || !this.options.ignoreFiltering) &&\n            (!hasSorting || !this.options.ignoreSorting);\n\n        if (skipOperations) {\n            const data = grid.filteredSortedData;\n            this.addHierarchicalGridData(grid, data);\n        } else {\n            let data = grid.data;\n\n            if (hasFiltering && !this.options.ignoreFiltering) {\n                const filteringState: IFilteringState = {\n                    expressionsTree: grid.filteringExpressionsTree,\n                    advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n                    strategy: grid.filterStrategy\n                };\n\n                data = FilterUtil.filter(data, filteringState, grid);\n            }\n\n            if (hasSorting && !this.options.ignoreSorting) {\n                this._sort = cloneValue(grid.sortingExpressions[0]);\n\n                data = DataUtil.sort(data, grid.sortingExpressions, grid.sortStrategy, grid);\n            }\n\n            this.addHierarchicalGridData(grid, data);\n        }\n    }\n\n    private addHierarchicalGridData(grid: GridTypeBase, records: any[]) {\n        const childLayoutList = grid.childLayoutList;\n        const columnFields = this._ownersMap.get(grid).columns.map(col => col.field);\n\n        for (const entry of records) {\n            const rowKey = grid.primaryKey ? entry[grid.primaryKey] : entry;\n            const expansionStateVal = grid.expansionStates.has(rowKey) ? grid.expansionStates.get(rowKey) : grid.getDefaultExpandState(entry);\n\n            const dataWithoutChildren = Object.keys(entry)\n                .filter(k => columnFields.includes(k))\n                .reduce((obj, key) => {\n                    obj[key] = entry[key];\n                    return obj;\n                }, {});\n\n            const hierarchicalGridRecord: IExportRecord = {\n                data: dataWithoutChildren,\n                level: 0,\n                type: ExportRecordType.HierarchicalGridRecord,\n                owner: grid,\n                hierarchicalOwner: GRID_PARENT\n            };\n\n            this.flatRecords.push(hierarchicalGridRecord);\n\n            for (const island of childLayoutList) {\n                const path: IPathSegment = {\n                    rowID: grid.primaryKey ? entry[grid.primaryKey] : entry,\n                    rowKey: grid.primaryKey ? entry[grid.primaryKey] : entry,\n                    rowIslandKey: island.key\n                };\n\n                const islandGrid = grid?.gridAPI.getChildGrid([path]);\n                const keyRecordData = this.prepareIslandData(island, islandGrid, entry[island.key]) || [];\n\n                this.getAllChildColumnsAndData(island, keyRecordData, expansionStateVal, islandGrid);\n            }\n        }\n    }\n\n    private prepareSummaries(grid: any): Map<string, Map<string, IgxSummaryResult[]>> {\n        let summaries = new Map<string, Map<string, IgxSummaryResult[]>>();\n\n        if (this.options.exportSummaries && grid.summaryService.summaryCacheMap.size > 0) {\n            const summaryCacheMap = grid.summaryService.summaryCacheMap;\n\n            switch (grid.summaryCalculationMode) {\n                case GridSummaryCalculationMode.childLevelsOnly:\n                    summaryCacheMap.delete(GRID_ROOT_SUMMARY);\n                    break;\n                case GridSummaryCalculationMode.rootLevelOnly:\n                    for (const k of summaryCacheMap.keys()) {\n                        if (k !== GRID_ROOT_SUMMARY) {\n                            summaryCacheMap.delete(k);\n                        }\n                    }\n                    break;\n            }\n\n            summaries = summaryCacheMap;\n        }\n\n        return summaries;\n    }\n\n    private prepareIslandData(island: any, islandGrid: GridTypeBase, data: any[]): any[] {\n        if (islandGrid !== undefined) {\n            const hasFiltering = (islandGrid.filteringExpressionsTree &&\n                islandGrid.filteringExpressionsTree.filteringOperands.length > 0) ||\n                (islandGrid.advancedFilteringExpressionsTree &&\n                    islandGrid.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n\n            const hasSorting = islandGrid.sortingExpressions &&\n                islandGrid.sortingExpressions.length > 0;\n\n            const skipOperations =\n                (!hasFiltering || !this.options.ignoreFiltering) &&\n                (!hasSorting || !this.options.ignoreSorting);\n\n            if (skipOperations) {\n                data = islandGrid.filteredSortedData;\n            } else {\n                if (hasFiltering && !this.options.ignoreFiltering) {\n                    const filteringState: IFilteringState = {\n                        expressionsTree: islandGrid.filteringExpressionsTree,\n                        advancedExpressionsTree: islandGrid.advancedFilteringExpressionsTree,\n                        strategy: islandGrid.filterStrategy\n                    };\n\n                    data = FilterUtil.filter(data, filteringState, islandGrid);\n                }\n\n                if (hasSorting && !this.options.ignoreSorting) {\n                    this._sort = cloneValue(islandGrid.sortingExpressions[0]);\n\n                    data = DataUtil.sort(data, islandGrid.sortingExpressions, islandGrid.sortStrategy, islandGrid);\n                }\n            }\n        } else {\n            const hasFiltering = (island.filteringExpressionsTree &&\n                island.filteringExpressionsTree.filteringOperands.length > 0) ||\n                (island.advancedFilteringExpressionsTree &&\n                    island.advancedFilteringExpressionsTree.filteringOperands.length > 0);\n\n            const hasSorting = island.sortingExpressions &&\n                island.sortingExpressions.length > 0;\n\n            const skipOperations =\n                (!hasFiltering || this.options.ignoreFiltering) &&\n                (!hasSorting || this.options.ignoreSorting);\n\n            if (!skipOperations) {\n                if (hasFiltering && !this.options.ignoreFiltering) {\n                    const filteringState: IFilteringState = {\n                        expressionsTree: island.filteringExpressionsTree,\n                        advancedExpressionsTree: island.advancedFilteringExpressionsTree,\n                        strategy: island.filterStrategy\n                    };\n\n                    data = FilterUtil.filter(data, filteringState, island);\n                }\n\n                if (hasSorting && !this.options.ignoreSorting) {\n                    this._sort = cloneValue(island.sortingExpressions[0]);\n\n                    data = DataUtil.sort(data, island.sortingExpressions, island.sortStrategy, island);\n                }\n            }\n        }\n\n        return data;\n    }\n\n    private getAllChildColumnsAndData(island: any,\n        childData: any[], expansionStateVal: boolean, grid: GridTypeBase) {\n        const hierarchicalOwner = `${GRID_CHILD}${++this.rowIslandCounter}`;\n        const columnList = this._ownersMap.get(island).columns;\n        const columnHeaders = columnList.filter(col => col.headerType === ExportHeaderType.ColumnHeader);\n        const columnHeader = columnHeaders.map(col => col.header ? col.header : col.field);\n\n        const headerRecord: IExportRecord = {\n            data: columnHeader,\n            level: island.level,\n            type: ExportRecordType.HeaderRecord,\n            owner: island,\n            hidden: !expansionStateVal,\n            references: columnHeaders,\n            hierarchicalOwner\n        };\n\n        if (childData && childData.length > 0) {\n            this.flatRecords.push(headerRecord);\n\n            for (const rec of childData) {\n                const exportRecord: IExportRecord = {\n                    data: rec,\n                    level: island.level,\n                    type: ExportRecordType.HierarchicalGridRecord,\n                    owner: island,\n                    hidden: !expansionStateVal,\n                    hierarchicalOwner\n                };\n\n                exportRecord.summaryKey = island.key;\n                this.flatRecords.push(exportRecord);\n\n                if (island.children.length > 0) {\n                    const islandRowKey = grid?.primaryKey ? rec[grid.primaryKey] : rec;\n                    const islandExpansionStateVal = grid === undefined ?\n                        false :\n                        grid.expansionStates.has(islandRowKey) ?\n                            grid.expansionStates.get(islandRowKey) :\n                            false;\n\n                    for (const childIsland of island.children) {\n                        const path: IPathSegment = {\n                            rowID: grid?.primaryKey ? rec[grid.primaryKey] : rec,\n                            rowKey: grid?.primaryKey ? rec[grid.primaryKey] : rec,\n                            rowIslandKey: childIsland.key\n                        };\n\n                        // only defined when row is expanded in UI\n                        const childIslandGrid = grid?.gridAPI.getChildGrid([path]);\n                        const keyRecordData = this.prepareIslandData(island, childIslandGrid, rec[childIsland.key]) || [];\n\n                        // Children should only be visible if both parent and current row are expanded\n                        const combinedExpansionState = expansionStateVal && islandExpansionStateVal;\n                        this.getAllChildColumnsAndData(childIsland, keyRecordData, combinedExpansionState, childIslandGrid);\n                    }\n                }\n            }\n\n            if (grid) {\n                const summaries = this.prepareSummaries(grid);\n                for (const k of summaries.keys()) {\n                    const summary = summaries.get(k);\n                    this.setSummaries(island.key, island.level, !expansionStateVal, island, summary, hierarchicalOwner)\n                }\n            }\n        }\n    }\n\n    private prepareGridData(grid: GridTypeBase, hasFiltering: boolean, hasSorting: boolean) {\n        const groupedGridGroupingState: IGroupingState = {\n            expressions: grid.groupingExpressions,\n            expansion: grid.groupingExpansionState,\n            defaultExpanded: grid.groupsExpanded,\n        };\n\n        const hasGrouping = grid.groupingExpressions &&\n            grid.groupingExpressions.length > 0;\n\n        const skipOperations =\n            (!hasFiltering || !this.options.ignoreFiltering) &&\n            (!hasSorting || !this.options.ignoreSorting) &&\n            (!hasGrouping || !this.options.ignoreGrouping);\n\n        if (skipOperations) {\n            if (hasGrouping) {\n                this.addGroupedData(grid, grid.groupsRecords, groupedGridGroupingState, true);\n            } else {\n                this.addFlatData(grid.filteredSortedData);\n            }\n        } else {\n            let gridData = grid.data;\n\n            if (hasFiltering && !this.options.ignoreFiltering) {\n                const filteringState: IFilteringState = {\n                    expressionsTree: grid.filteringExpressionsTree,\n                    advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n                    strategy: grid.filterStrategy\n                };\n\n                gridData = FilterUtil.filter(gridData, filteringState, grid);\n            }\n\n            if (hasSorting && !this.options.ignoreSorting) {\n                // TODO: We should drop support for this since in a grouped grid it doesn't make sense\n                // this._sort = !isGroupedGrid ?\n                //     cloneValue(grid.sortingExpressions[0]) :\n                //     grid.sortingExpressions.length > 1 ?\n                //         cloneValue(grid.sortingExpressions[1]) :\n                //         cloneValue(grid.sortingExpressions[0]);\n                const expressions = grid.groupingExpressions ? grid.groupingExpressions.concat(grid.sortingExpressions || []) : grid.sortingExpressions;\n                gridData = DataUtil.sort(gridData, expressions, grid.sortStrategy, grid);\n            }\n\n            if (hasGrouping && !this.options.ignoreGrouping) {\n                const groupsRecords = [];\n                DataUtil.group(cloneArray(gridData), groupedGridGroupingState, grid.groupStrategy, grid, groupsRecords);\n                gridData = groupsRecords;\n            }\n\n            if (hasGrouping && !this.options.ignoreGrouping) {\n                this.addGroupedData(grid, gridData, groupedGridGroupingState, true);\n            } else {\n                this.addFlatData(gridData);\n            }\n        }\n    }\n\n    private prepareTreeGridData(grid: GridTypeBase, hasFiltering: boolean, hasSorting: boolean) {\n        const skipOperations =\n            (!hasFiltering || !this.options.ignoreFiltering) &&\n            (!hasSorting || !this.options.ignoreSorting);\n\n        if (skipOperations) {\n            this.addTreeGridData(grid.processedRootRecords);\n        } else {\n            let gridData = grid.rootRecords;\n\n            if (hasFiltering && !this.options.ignoreFiltering) {\n                const filteringState: IFilteringState = {\n                    expressionsTree: grid.filteringExpressionsTree,\n                    advancedExpressionsTree: grid.advancedFilteringExpressionsTree,\n                    strategy: (grid.filterStrategy) ? grid.filterStrategy : new TreeGridFilteringStrategy()\n                };\n\n                gridData = filteringState.strategy\n                    .filter(gridData, filteringState.expressionsTree, filteringState.advancedExpressionsTree);\n            }\n\n            if (hasSorting && !this.options.ignoreSorting) {\n                this._sort = cloneValue(grid.sortingExpressions[0]);\n\n                gridData = DataUtil.treeGridSort(gridData, grid.sortingExpressions, grid.sortStrategy);\n            }\n\n            this.addTreeGridData(gridData);\n        }\n    }\n\n    private addTreeGridData(records: ITreeGridRecord[], parentExpanded = true, hierarchicalOwner?: string) {\n        if (!records) {\n            return;\n        }\n\n        for (const record of records) {\n            const treeGridRecord: IExportRecord = {\n                data: record.data,\n                level: record.level,\n                hidden: !parentExpanded,\n                type: ExportRecordType.TreeGridRecord,\n                summaryKey: record.key,\n                hierarchicalOwner: record.level === 0 ? GRID_PARENT : hierarchicalOwner\n            };\n\n            this.flatRecords.push(treeGridRecord);\n\n            if (record.children) {\n                this.getTreeGridChildData(record.children, record.key, record.level, record.expanded && parentExpanded)\n            }\n        }\n    }\n\n    private getTreeGridChildData(recordChildren: ITreeGridRecord[], key: string, level: number, parentExpanded = true) {\n        const hierarchicalOwner = `${GRID_CHILD}${++this.rowIslandCounter}`\n        let summaryLevel = level;\n        let summaryHidden = !parentExpanded;\n\n        for (const rc of recordChildren) {\n            if (rc.children && rc.children.length > 0) {\n                this.addTreeGridData([rc], parentExpanded, hierarchicalOwner);\n                summaryLevel = rc.level;\n            } else {\n\n                const currentRecord: IExportRecord = {\n                    data: rc.data,\n                    level: rc.level,\n                    hidden: !parentExpanded,\n                    type: ExportRecordType.DataRecord,\n                    hierarchicalOwner\n                };\n\n                if (this._setChildSummaries) {\n                    currentRecord.summaryKey = key;\n                }\n\n                this.flatRecords.push(currentRecord);\n                summaryLevel = rc.level;\n                summaryHidden = !parentExpanded\n            }\n        }\n\n        if (this._setChildSummaries) {\n            this.setSummaries(key, summaryLevel, summaryHidden, null, null, hierarchicalOwner);\n        }\n    }\n\n    private addFlatData(records: any) {\n        if (!records) {\n            return;\n        }\n        for (const record of records) {\n            const data: IExportRecord = {\n                data: record,\n                type: ExportRecordType.DataRecord,\n                level: 0\n            };\n\n            this.flatRecords.push(data);\n        }\n    }\n\n    private setSummaries(summaryKey: string, level = 0, hidden = false, owner?: any, summary?: Map<string, IgxSummaryResult[]>, hierarchicalOwner?: string) {\n        const rootSummary = summary ?? this.summaries.get(summaryKey);\n\n        if (rootSummary) {\n            const values = [...rootSummary.values()];\n            const biggest = values.sort((a, b) => b.length - a.length)[0];\n\n            for (let i = 0; i < biggest.length; i++) {\n                const obj = {}\n\n                for (const [key, value] of rootSummary) {\n                    const summaries = value.map(s => ({ label: s.label, value: s.summaryResult }))\n                    obj[key] = summaries[i];\n                }\n\n                const summaryRecord: IExportRecord = {\n                    data: obj,\n                    type: ExportRecordType.SummaryRecord,\n                    level,\n                    hidden,\n                    summaryKey,\n                    hierarchicalOwner\n                };\n\n                if (owner) {\n                    summaryRecord.owner = owner;\n                }\n\n                this.flatRecords.push(summaryRecord);\n            }\n        }\n    }\n\n    private addGroupedData(grid: GridTypeBase, records: IGroupByRecord[], groupingState: IGroupingState, setGridParent: boolean, parentExpanded = true, summaryKeysArr: string[] = []) {\n        if (!records) {\n            return;\n        }\n\n        let previousKey = ''\n        const firstCol = this._ownersMap.get(DEFAULT_OWNER).columns\n            .filter(c => c.headerType === ExportHeaderType.ColumnHeader && !c.skip)\n            .sort((a, b) => a.startIndex - b.startIndex)\n            .sort((a, b) => a.pinnedIndex - b.pinnedIndex)[0].field;\n\n        for (const record of records) {\n            let recordVal = record.value;\n            const hierarchicalOwner = setGridParent ? GRID_PARENT : `${GRID_CHILD}${++this.rowIslandCounter}`;\n            const hierarchy = getHierarchy(record);\n            const expandState: IGroupByExpandState = groupingState.expansion.find((s) =>\n                isHierarchyMatch(s.hierarchy || [{ fieldName: record.expression.fieldName, value: recordVal }],\n                    hierarchy,\n                    grid.groupingExpressions));\n            const expanded = expandState ? expandState.expanded : groupingState.defaultExpanded;\n\n            const isDate = recordVal instanceof Date;\n\n            if (isDate) {\n                const timeZoneOffset = recordVal.getTimezoneOffset() * 60000;\n                const isoString = (new Date(recordVal - timeZoneOffset)).toISOString();\n                recordVal = this.i18nFormatter.formatDate(isoString, 'mediumDate', grid.locale);\n            }\n\n            const groupExpressionName = record.column && record.column.header ?\n                record.column.header :\n                record.expression.fieldName;\n\n            recordVal = recordVal !== null ? recordVal : '';\n\n            const groupExpression: IExportRecord = {\n                data: { [firstCol]: `${groupExpressionName}: ${recordVal ?? '(Blank)'} (${record.records.length})` },\n                level: record.level,\n                hidden: !parentExpanded,\n                type: ExportRecordType.GroupedRecord,\n                hierarchicalOwner\n            };\n\n            this.flatRecords.push(groupExpression);\n\n            let currKey = '';\n            let summaryKey = '';\n\n            if (this._setChildSummaries) {\n                currKey = `'${record.expression.fieldName}': '${recordVal}'`;\n                summaryKeysArr = summaryKeysArr.filter(a => a !== previousKey);\n                previousKey = currKey;\n                summaryKeysArr.push(currKey);\n                summaryKey = `{ ${summaryKeysArr.join(', ')} }`;\n                groupExpression.summaryKey = summaryKey;\n            }\n\n            if (record.groups.length > 0) {\n                this.addGroupedData(grid, record.groups, groupingState, false, expanded && parentExpanded, summaryKeysArr);\n            } else {\n                const rowRecords = record.records;\n\n                for (const rowRecord of rowRecords) {\n                    const currentRecord: IExportRecord = {\n                        data: rowRecord,\n                        level: record.level + 1,\n                        hidden: !(expanded && parentExpanded),\n                        type: ExportRecordType.DataRecord,\n                        hierarchicalOwner\n                    };\n\n                    if (summaryKey) {\n                        currentRecord.summaryKey = summaryKey;\n                    }\n\n                    this.flatRecords.push(currentRecord);\n                }\n            }\n\n            if (this._setChildSummaries) {\n                this.setSummaries(summaryKey, record.level + 1, !(expanded && parentExpanded), null, null, hierarchicalOwner);\n                summaryKeysArr.pop();\n            }\n        }\n    }\n\n    private getColumns(columns: ColumnType[]): IColumnList {\n        const colList = [];\n        const colWidthList = [];\n        const hiddenColumns = [];\n        let indexOfLastPinnedColumn = -1;\n        let lastVisibleColumnIndex = -1;\n        let maxLevel = 0;\n\n        columns.forEach((column) => {\n            const columnHeader = !ExportUtilities.isNullOrWhitespaces(column.header) ? column.header : column.field;\n            const exportColumn = !column.hidden || this.options.ignoreColumnsVisibility;\n            const index = this.options.ignoreColumnsOrder || this.options.ignoreColumnsVisibility ? column.index : column.visibleIndex;\n            const columnWidth = Number(column.width?.slice(0, -2)) || DEFAULT_COLUMN_WIDTH;\n            const columnLevel = !this.options.ignoreMultiColumnHeaders ? column.level : 0;\n\n            const isMultiColHeader = column.columnGroup;\n            const colSpan = isMultiColHeader ?\n                column.allChildren\n                    .filter(ch => !(ch.columnGroup) && (!this.options.ignoreColumnsVisibility ? !ch.hidden : true))\n                    .length :\n                1;\n\n            const columnInfo: IColumnInfo = {\n                header: ExportUtilities.sanitizeValue(columnHeader),\n                dataType: column.dataType,\n                field: column.field,\n                skip: !exportColumn,\n                formatter: column.formatter,\n                skipFormatter: false,\n\n                headerType: isMultiColHeader ? ExportHeaderType.MultiColumnHeader : ExportHeaderType.ColumnHeader,\n                columnSpan: colSpan,\n                level: columnLevel,\n                startIndex: index,\n                pinnedIndex: !column.pinned ?\n                    Number.MAX_VALUE :\n                    !column.hidden ?\n                        column.grid.pinnedColumns.indexOf(column)\n                        : NaN,\n                columnGroupParent: column.parent ? column.parent : null,\n                columnGroup: isMultiColHeader ? column : null\n            };\n\n            if (column.dataType === 'currency') {\n                columnInfo.currencyCode = this.i18nFormatter.getCurrencyCode(this.locale, column.pipeArgs.currencyCode);;\n\n                columnInfo.displayFormat = column.pipeArgs.display\n                    ? column.pipeArgs.display\n                    : 'symbol';\n\n                columnInfo.digitsInfo = column.pipeArgs.digitsInfo\n                    ? column.pipeArgs.digitsInfo\n                    : '1.0-2';\n            }\n\n            if (column.dataType === 'date') {\n                columnInfo.dateFormat = getLocaleDateFormat(this.locale, FormatWidth.Medium);\n            }\n\n            if (column.dataType === 'dateTime') {\n                columnInfo.dateFormat = getLocaleDateTimeFormat(this.locale, FormatWidth.Medium);\n            }\n\n            if (this.options.ignoreColumnsOrder) {\n                if (columnInfo.startIndex !== columnInfo.pinnedIndex) {\n                    columnInfo.pinnedIndex = Number.MAX_VALUE;\n                }\n            }\n\n            if (column.level > maxLevel && !this.options.ignoreMultiColumnHeaders) {\n                maxLevel = column.level;\n            }\n\n            if (index !== -1) {\n                colList.push(columnInfo);\n                colWidthList.push(columnWidth);\n                lastVisibleColumnIndex = Math.max(lastVisibleColumnIndex, colList.indexOf(columnInfo));\n            } else {\n                hiddenColumns.push(columnInfo);\n            }\n\n            if (column.pinned && exportColumn && columnInfo.headerType === ExportHeaderType.ColumnHeader) {\n                indexOfLastPinnedColumn++;\n            }\n\n        });\n\n        //Append the hidden columns to the end of the list\n        hiddenColumns.forEach((hiddenColumn) => {\n            colList[++lastVisibleColumnIndex] = hiddenColumn;\n        });\n\n        const result: IColumnList = {\n            columns: colList,\n            columnWidths: colWidthList,\n            indexOfLastPinnedColumn,\n            maxLevel\n        };\n\n        return result;\n    }\n\n    private mapHierarchicalGridColumns(island: any, gridData: any) {\n        let columnList: IColumnList;\n        let keyData;\n\n        if (island.autoGenerate) {\n            keyData = gridData && gridData[island.key] ? gridData[island.key] : undefined;\n            const islandKeys = island.children && island.children.length > 0 ? island.children.map(i => i.key) : [];\n\n            if (keyData && Array.isArray(keyData) && keyData.length > 0) {\n                const islandData = keyData.map(i => {\n                    const newItem = {};\n\n                    Object.keys(i).map(k => {\n                        if (!islandKeys.includes(k)) {\n                            newItem[k] = i[k];\n                        }\n                    });\n\n                    return newItem;\n                });\n\n                columnList = this.getAutoGeneratedColumns(islandData);\n            } else {\n                // If no data available, create empty column list\n                columnList = this.getAutoGeneratedColumns([{}]);\n            }\n        } else {\n            const islandColumnList = island.columns;\n            columnList = this.getColumns(islandColumnList);\n        }\n\n        this._ownersMap.set(island, columnList);\n\n        if (island.children && island.children.length > 0) {\n            for (const childIsland of island.children) {\n                const islandKeyData = keyData && Array.isArray(keyData) && keyData.length > 0 ? keyData[0] : {};\n                this.mapHierarchicalGridColumns(childIsland, islandKeyData);\n            }\n        }\n    }\n\n    private getAutoGeneratedColumns(data: any[]) {\n        const colList = [];\n        const colWidthList = [];\n        const keys = Object.keys(data[0]);\n\n        keys.forEach((colKey, i) => {\n            const columnInfo: IColumnInfo = {\n                header: colKey,\n                field: colKey,\n                dataType: 'string',\n                skip: false,\n                headerType: ExportHeaderType.ColumnHeader,\n                columnSpan: 1,\n                level: 0,\n                startIndex: i,\n                pinnedIndex: Number.MAX_VALUE\n            };\n\n            colList.push(columnInfo);\n            colWidthList.push(DEFAULT_COLUMN_WIDTH);\n        });\n\n        const result: IColumnList = {\n            columns: colList,\n            columnWidths: colWidthList,\n            indexOfLastPinnedColumn: -1,\n            maxLevel: 0,\n        };\n\n        return result;\n    }\n\n    private addPivotRowHeaders(grid: any) {\n        if (grid?.pivotUI?.showRowHeaders) {\n            const headersList = this._ownersMap.get(DEFAULT_OWNER);\n            const enabledRows = grid.visibleRowDimensions.filter(r => r.enabled).map((r, index) => ({ name: r.displayName || r.memberName, level: index }));\n            let startIndex = 0;\n            enabledRows.forEach(x => {\n                headersList.columns.unshift({\n                    rowSpan: headersList.maxLevel + 1,\n                    field: x.name,\n                    header: x.name,\n                    startIndex: startIndex,\n                    skip: false,\n                    pinnedIndex: 0,\n                    level: x.level,\n                    dataType: 'string',\n                    headerType: ExportHeaderType.PivotRowHeader\n                });\n                startIndex += 1;\n            });\n            headersList.columnWidths.unshift(...Array(enabledRows.length).fill(200));\n        }\n    }\n\n    private addPivotGridColumns(grid: any) {\n        if (grid.type !== 'pivot') {\n            return;\n        }\n\n        const enabledRows = grid.visibleRowDimensions.map((r, i) => ({ name: r.memberName, level: i }));\n\n        this.preparePivotGridColumns(enabledRows);\n        this.pivotGridFilterFieldsCount = enabledRows.length;\n\n        const columnList = this._ownersMap.get(DEFAULT_OWNER);\n        columnList.columns.unshift(...this.pivotGridColumns);\n        columnList.columnWidths.unshift(...Array(this.pivotGridColumns.length).fill(200));\n        columnList.indexOfLastPinnedColumn = enabledRows.length - 1;\n        columnList.maxRowLevel = enabledRows.length;\n        this._ownersMap.set(DEFAULT_OWNER, columnList);\n    }\n\n    private preparePivotGridColumns(keys: any, columnGroupParent?: string): any {\n        if (keys.length === 0) {\n            return;\n        }\n\n        const records = this.flatRecords.map(r => r.data);\n        const groupedRecords = this.groupByKeys(records, keys);\n\n        this.createRowDimension(groupedRecords, keys, columnGroupParent);\n    }\n\n    private groupByKeys(items: any[], keys: any[]): any {\n        const group = (data: any[], groupKeys: any[]): any => {\n            if (groupKeys.length === 0) return data;\n\n            const newKeys = [...groupKeys];\n            const key = newKeys.shift().name;\n            const map = new Map<string, any>();\n\n            for (const item of data) {\n                const keyValue = item[key];\n                if (!map.has(keyValue)) {\n                    map.set(keyValue, []);\n                }\n                map.get(keyValue).push(item);\n            }\n\n            for (const [keyValue, value] of map) {\n                map.set(keyValue, group(value, newKeys));\n            }\n\n            return map;\n        };\n\n        return group(items, keys);\n    }\n\n    private calculateRowSpan(value: any): number {\n        if (value instanceof Map) {\n            return Array.from(value.values()).reduce(\n                (total, current) => total + this.calculateRowSpan(current),\n                0\n            )\n        } else if (Array.isArray(value)) {\n            return value.length;\n        }\n\n        return 0;\n    }\n\n    private createRowDimension(node: any, keys: any[], columnGroupParent?: string) {\n        if (!(node instanceof Map)) return;\n\n        const key = keys[0];\n        const newKeys = keys.filter(k => k.level > key.level);\n        let startIndex = 0;\n        for (const k of node.keys()) {\n            let groupKey = k;\n            const rowSpan = this.calculateRowSpan(node.get(k));\n\n            const rowDimensionColumn: IColumnInfo = {\n                columnSpan: 1,\n                rowSpan,\n                field: groupKey,\n                header: groupKey,\n                startIndex,\n                skip: false,\n                pinnedIndex: 0,\n                level: key.level,\n                dataType: 'string',\n                headerType: rowSpan > 1 ? ExportHeaderType.MultiRowHeader : ExportHeaderType.RowHeader,\n            };\n\n            if (!groupKey) {\n                // if (this.pivotGridColumns?.length)\n                //     this.pivotGridColumns[this.pivotGridColumns.length - 1].columnSpan += 1;\n                rowDimensionColumn.headerType = ExportHeaderType.PivotMergedHeader;\n                groupKey = columnGroupParent;\n            }\n            if (key.level > 0) {\n                rowDimensionColumn.columnGroupParent = columnGroupParent;\n            } else {\n                rowDimensionColumn.columnGroup = groupKey;\n            }\n\n            this.pivotGridColumns.push(rowDimensionColumn);\n            startIndex += rowSpan;\n        }\n\n        for (const k of node.keys()) {\n            this.createRowDimension(node.get(k), newKeys, columnGroupParent);\n        }\n    }\n\n    private addLevelColumns() {\n        if (this.options.exportSummaries && this.summaries.size > 0) {\n            this._ownersMap.forEach(om => {\n                const levelCol: IColumnInfo = {\n                    header: GRID_LEVEL_COL,\n                    dataType: 'number',\n                    field: GRID_LEVEL_COL,\n                    skip: false,\n                    skipFormatter: false,\n                    headerType: ExportHeaderType.ColumnHeader,\n                    columnSpan: 1,\n                    level: 0,\n                };\n\n                om.columns.push(levelCol);\n                om.columnWidths.push(20);\n            })\n        }\n    }\n\n    private addLevelData() {\n        if (this.options.exportSummaries && this.summaries.size > 0) {\n            for (const r of this.flatRecords) {\n                if (r.type === ExportRecordType.DataRecord || r.type === ExportRecordType.TreeGridRecord || r.type === ExportRecordType.HierarchicalGridRecord) {\n                    r.data[GRID_LEVEL_COL] = r.level;\n                }\n            }\n        }\n    }\n\n    private resetDefaults() {\n        this._sort = null;\n        this.flatRecords = [];\n        this.options = {} as IgxExporterOptionsBase;\n        this._ownersMap.clear();\n        this.rowIslandCounter = 0;\n    }\n\n    protected abstract exportDataImplementation(data: any[], options: IgxExporterOptionsBase, done: () => void): void;\n}\n","import { IExcelFile } from './excel-interfaces';\nimport { ExcelStrings } from './excel-strings';\nimport { WorksheetData } from './worksheet-data';\n\nimport { strToU8 } from 'fflate';\nimport { ExportHeaderType, ExportRecordType, IExportRecord, IColumnList, IColumnInfo, GRID_ROOT_SUMMARY, GRID_PARENT, GRID_LEVEL_COL } from '../exporter-common/base-export-service';\nimport { yieldingLoop } from '../exporter-common/yielding-loop';\n\n/**\n * @hidden\n */\nexport class RootRelsFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['.rels'] = strToU8(ExcelStrings.getRels());\n    }\n}\n\n/**\n * @hidden\n */\nexport class AppFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        folder['app.xml'] = strToU8(ExcelStrings.getApp(worksheetData.options.worksheetName));\n    }\n}\n\n/**\n * @hidden\n */\nexport class CoreFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['core.xml'] = strToU8(ExcelStrings.getCore());\n    }\n}\n\n/**\n * @hidden\n */\nexport class WorkbookRelsFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const hasSharedStrings = !worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders;\n        folder['workbook.xml.rels'] = strToU8(ExcelStrings.getWorkbookRels(hasSharedStrings));\n    }\n}\n\n/**\n * @hidden\n */\nexport class ThemeFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['theme1.xml'] = strToU8(ExcelStrings.getTheme());\n    }\n}\n\ninterface Dimensions {\n    startCoordinate: string\n    endCoordinate: string\n}\n\ninterface CurrencyInfo {\n    styleXf: number\n    symbol: string\n}\n\n/**\n * @hidden\n */\nexport class WorksheetFile implements IExcelFile {\n    private static MIN_WIDTH = 8.43;\n    private maxOutlineLevel = 0;\n    private sheetData = '';\n    private dimension = '';\n    private freezePane = '';\n    private rowHeight = '';\n\n    private mergeCellStr = '';\n    private mergeCellsCounter = 0;\n    private rowIndex = 0;\n    private pivotGridRowHeadersMap = new Map<number, string>();\n\n    private dimensionMap: Map<string, Dimensions> = new Map<string, Dimensions>();\n    private hierarchicalDimensionMap: Map<any,  Map<string, Dimensions>> = new Map<any,  Map<string, Dimensions>>();\n    private currentSummaryOwner = '';\n    private currentHierarchicalOwner = '';\n    private firstColumn = Number.MAX_VALUE;\n    private firstDataRow = Number.MAX_VALUE;\n    private isValidGrid: boolean;\n    private lastValidRow: string;\n\n    private currencyStyleMap = new Map<string, CurrencyInfo>([\n        ['USD', {styleXf: 5, symbol: '$'}],\n        ['GBP', {styleXf: 6, symbol: '£'}],\n        ['CNY', {styleXf: 7, symbol: '¥'}],\n        ['EUR', {styleXf: 8, symbol: '€'}],\n        ['JPY', {styleXf: 9, symbol: '¥'}],\n    ]);\n\n    public writeElement() {}\n\n    public async writeElementAsync(folder: Object, worksheetData: WorksheetData) {\n        return new Promise<void>(resolve => {\n            this.prepareDataAsync(worksheetData, (cols, rows) => {\n                const hasTable = (!worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders)\n                    && worksheetData.options.exportAsTable;\n\n                folder['sheet1.xml'] = strToU8(ExcelStrings.getSheetXML(\n                    this.dimension, this.freezePane, cols, rows, hasTable, this.maxOutlineLevel, worksheetData.isHierarchical));\n                resolve();\n            });\n        });\n    }\n\n    private prepareDataAsync(worksheetData: WorksheetData, done: (cols: string, sheetData: string) => void) {\n        this.sheetData = '';\n        let cols = '';\n        const dictionary = worksheetData.dataDictionary;\n        this.rowIndex = 0;\n\n        if (worksheetData.isEmpty && (!worksheetData.options.alwaysExportHeaders || worksheetData.owner.columns.length === 0)) {\n            this.sheetData += '<sheetData/>';\n            this.dimension = 'A1';\n            done('', this.sheetData);\n        } else {\n            const owner = worksheetData.owner;\n            const isHierarchicalGrid = worksheetData.isHierarchical;\n            const hasMultiColumnHeader = worksheetData.hasMultiColumnHeader;\n            const hasMultiRowHeader = worksheetData.hasMultiRowHeader;\n\n            const hasUserSetIndex = owner.columns.some(col => col.exportIndex !== undefined);\n\n            const height =  worksheetData.options.rowHeight;\n\n            this.isValidGrid = worksheetData.isHierarchical || worksheetData.isTreeGrid || worksheetData.isGroupedGrid;\n            this.rowHeight = height ? ` ht=\"${height}\" customHeight=\"1\"` : '';\n            this.sheetData += `<sheetData>`;\n\n            let headersForLevel: IColumnInfo[] = [];\n\n            for(let i = 0; i <= owner.maxRowLevel; i++) {\n                headersForLevel =  owner.columns.filter(c => c.level === i && c.rowSpan > 0 && !c.skip)\n\n                this.printHeaders(worksheetData, headersForLevel, i, true);\n\n                this.rowIndex++;\n            }\n\n            this.rowIndex = 0;\n\n            for (let i = 0; i <= owner.maxLevel; i++) {\n                this.rowIndex++;\n                const pivotGridColumns = this.pivotGridRowHeadersMap.get(this.rowIndex) ?? \"\";\n                this.sheetData += `<row r=\"${this.rowIndex}\"${this.rowHeight}>${pivotGridColumns}`;\n\n                const allowedColumns = owner.columns.filter(c => c.headerType !== ExportHeaderType.RowHeader &&\n                     c.headerType !== ExportHeaderType.MultiRowHeader &&\n                     c.headerType !== ExportHeaderType.PivotRowHeader &&\n                     c.headerType !== ExportHeaderType.PivotMergedHeader);\n\n                headersForLevel = hasMultiColumnHeader ?\n                    allowedColumns\n                        .filter(c => (c.level < i &&\n                            c.headerType !== ExportHeaderType.MultiColumnHeader || c.level === i) && c.columnSpan > 0 && !c.skip)\n                        .sort((a, b) => a.startIndex - b.startIndex)\n                        .sort((a, b) => a.pinnedIndex - b.pinnedIndex) :\n                    hasUserSetIndex ?\n                        allowedColumns.filter(c => !c.skip) :\n                        allowedColumns.filter(c => !c.skip)\n                            .sort((a, b) => a.startIndex - b.startIndex)\n                            .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n\n                this.printHeaders(worksheetData, headersForLevel, i, false);\n\n                this.sheetData += `</row>`;\n            }\n\n            const multiColumnHeaderLevel = worksheetData.options.ignoreMultiColumnHeaders ? 0 : owner.maxLevel;\n            const freezeHeaders = worksheetData.options.freezeHeaders ? 2 + multiColumnHeaderLevel : 1;\n\n            if (!isHierarchicalGrid) {\n                const col = worksheetData.hasSummaries ? worksheetData.columnCount + 1 : worksheetData.columnCount - 1\n                this.dimension = 'A1:' + ExcelStrings.getExcelColumn(col) + (worksheetData.rowCount);\n\n                cols += '<cols>';\n\n                if (!hasMultiColumnHeader) {\n                    for (let j = 0; j < worksheetData.columnCount; j++) {\n                        const width = dictionary.columnWidths[j];\n                        // Use the width provided in the options if it exists\n                        let widthInTwips = worksheetData.options.columnWidth !== undefined ?\n                                                worksheetData.options.columnWidth :\n                                                Math.max(((width / 96) * 14.4), WorksheetFile.MIN_WIDTH);\n                        if (!(widthInTwips > 0)) {\n                            widthInTwips = WorksheetFile.MIN_WIDTH;\n                        }\n\n                        cols += `<col min=\"${(j + 1)}\" max=\"${(j + 1)}\" width=\"${widthInTwips}\" customWidth=\"1\"/>`;\n                    }\n                } else {\n                    cols += `<col min=\"1\" max=\"${worksheetData.columnCount}\" width=\"15\" customWidth=\"1\"/>`;\n                }\n\n                const indexOfLastPinnedColumn = worksheetData.indexOfLastPinnedColumn;\n                const frozenColumnCount = indexOfLastPinnedColumn + 1;\n                let firstCell = ExcelStrings.getExcelColumn(frozenColumnCount) + freezeHeaders;\n                if (indexOfLastPinnedColumn !== undefined && indexOfLastPinnedColumn !== -1 &&\n                    !worksheetData.options.ignorePinning &&\n                    !worksheetData.options.ignoreColumnsOrder) {\n                    this.freezePane =\n                        `<pane xSplit=\"${frozenColumnCount}\" ySplit=\"${freezeHeaders - 1}\"\n                         topLeftCell=\"${firstCell}\" activePane=\"topRight\" state=\"frozen\"/>`;\n                } else if (worksheetData.options.freezeHeaders) {\n                    firstCell = ExcelStrings.getExcelColumn(0) + freezeHeaders;\n                    this.freezePane =\n                        `<pane xSplit=\"0\" ySplit=\"${freezeHeaders - 1}\"\n                         topLeftCell=\"${firstCell}\" activePane=\"topRight\" state=\"frozen\"/>`;\n                }\n            } else {\n                const columnWidth = worksheetData.options.columnWidth ? worksheetData.options.columnWidth : 20;\n                cols += `<cols><col min=\"1\" max=\"${worksheetData.columnCount}\" width=\"${columnWidth}\" customWidth=\"1\"/>`;\n\n                if (worksheetData.options.freezeHeaders) {\n                    const firstCell = ExcelStrings.getExcelColumn(0) + freezeHeaders;\n                    this.freezePane =\n                        `<pane xSplit=\"0\" ySplit=\"${freezeHeaders - 1}\"\n                         topLeftCell=\"${firstCell}\" activePane=\"topRight\" state=\"frozen\"/>`;\n                }\n            }\n\n            if (worksheetData.hasSummaries) {\n                cols += `<col min=\"${worksheetData.columnCount + 2}\" max=\"${worksheetData.columnCount + 2}\" hidden=\"1\"/>`;\n            }\n\n            cols += '</cols>';\n\n            this.processDataRecordsAsync(worksheetData, (rows) => {\n                this.sheetData += rows;\n                this.sheetData += '</sheetData>';\n\n                if ((hasMultiColumnHeader || hasMultiRowHeader) && this.mergeCellsCounter > 0) {\n                    this.sheetData += `<mergeCells count=\"${this.mergeCellsCounter}\">${this.mergeCellStr}</mergeCells>`;\n                }\n\n                done(cols, this.sheetData);\n            });\n        }\n    }\n\n    private processDataRecordsAsync(worksheetData: WorksheetData, done: (rows: string) => void) {\n        const rowDataArr = [];\n        const height =  worksheetData.options.rowHeight;\n        this.rowHeight = height ? ' ht=\"' + height + '\" customHeight=\"1\"' : '';\n\n        const isHierarchicalGrid = worksheetData.isHierarchical;\n        const hasUserSetIndex = worksheetData.owner.columns.some(c => c.exportIndex !== undefined);\n\n        let recordHeaders = [];\n\n        yieldingLoop(worksheetData.rowCount - worksheetData.multiColumnHeaderRows - 1, 1000,\n            (i) => {\n                if (!worksheetData.isEmpty){\n                    if (!isHierarchicalGrid) {\n                        if (hasUserSetIndex) {\n                            recordHeaders = worksheetData.rootKeys;\n                        } else {\n                            recordHeaders = worksheetData.owner.columns\n                                .filter(c => c.headerType === ExportHeaderType.ColumnHeader && !c.skip)\n                                .sort((a, b) => a.startIndex-b.startIndex)\n                                .sort((a, b) => a.pinnedIndex-b.pinnedIndex)\n                                .map(c => c.field);\n                        }\n                    } else {\n                        const record = worksheetData.data[i];\n\n                        if (record.type === ExportRecordType.HeaderRecord) {\n                            const recordOwner = worksheetData.owners.get(record.owner);\n                            const hasMultiColumnHeaders = recordOwner.columns.some(c => !c.skip && c.headerType === ExportHeaderType.MultiColumnHeader);\n\n                            if (hasMultiColumnHeaders) {\n                                this.hGridPrintMultiColHeaders(worksheetData, rowDataArr, record, recordOwner);\n                            }\n                        }\n\n                        recordHeaders = Object.keys(worksheetData.data[i].data);\n                    }\n\n                    rowDataArr.push(this.processRow(worksheetData, i, recordHeaders, isHierarchicalGrid));\n                }\n            },\n            () => {\n                done(rowDataArr.join(''));\n        });\n    }\n\n    private hGridPrintMultiColHeaders(worksheetData: WorksheetData, rowDataArr: any[], record: IExportRecord,\n        owner: IColumnList) {\n        for (let j = 0; j < owner.maxLevel; j++) {\n            const recordLevel = record.level;\n            const outlineLevel = recordLevel > 0 ? ` outlineLevel=\"${recordLevel}\"` : '';\n            this.maxOutlineLevel = this.maxOutlineLevel < recordLevel ? recordLevel : this.maxOutlineLevel;\n            const sHidden = record.hidden ? ` hidden=\"1\"` : '';\n\n            this.rowIndex++;\n            let row = `<row r=\"${this.rowIndex}\"${this.rowHeight}${outlineLevel}${sHidden}>`;\n\n            const headersForLevel = owner.columns\n                .filter(c => (c.level < j &&\n                    c.headerType !== ExportHeaderType.MultiColumnHeader || c.level === j) && c.columnSpan > 0 && !c.skip)\n                .sort((a, b) => a.startIndex - b.startIndex)\n                .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n\n            let startValue = 0 + record.level;\n\n            for (const currentCol of headersForLevel) {\n                if (currentCol.level === j) {\n                    let columnCoordinate;\n                    columnCoordinate =\n                        ExcelStrings.getExcelColumn(startValue) + this.rowIndex;\n\n                    const columnValue = worksheetData.dataDictionary.saveValue(currentCol.header, true);\n                    row += `<c r=\"${columnCoordinate}\" s=\"3\" t=\"s\"><v>${columnValue}</v></c>`;\n\n                    if (j !== owner.maxLevel) {\n                        this.mergeCellsCounter++;\n                        this.mergeCellStr += ` <mergeCell ref=\"${columnCoordinate}:`;\n\n                        if (currentCol.headerType === ExportHeaderType.ColumnHeader) {\n                            columnCoordinate = ExcelStrings.getExcelColumn(startValue) +\n                                (this.rowIndex + owner.maxLevel - currentCol.level);\n                        } else {\n                            for (let k = 1; k < currentCol.columnSpan; k++) {\n                                columnCoordinate = ExcelStrings.getExcelColumn(startValue + k) + this.rowIndex;\n                                row += `<c r=\"${columnCoordinate}\" s=\"3\" />`;\n                            }\n                        }\n\n                        this.mergeCellStr += `${columnCoordinate}\" />`;\n                    }\n                }\n\n                startValue += currentCol.columnSpan;\n            }\n            row += `</row>`;\n            rowDataArr.push(row);\n        }\n    }\n\n    private processRow(worksheetData: WorksheetData, i: number, headersForLevel: any[], isHierarchicalGrid: boolean) {\n        const record = worksheetData.data[i];\n\n        const rowData = new Array(worksheetData.columnCount + 2);\n\n        const rowLevel = record.level;\n        const outlineLevel = rowLevel > 0 ? ` outlineLevel=\"${rowLevel}\"` : '';\n        this.maxOutlineLevel = this.maxOutlineLevel < rowLevel ? rowLevel : this.maxOutlineLevel;\n\n        const sHidden = record.hidden ? ` hidden=\"1\"` : '';\n\n        this.rowIndex++;\n        const pivotGridColumns = this.pivotGridRowHeadersMap.get(this.rowIndex) ?? \"\";\n\n        rowData[0] = `<row r=\"${this.rowIndex}\"${this.rowHeight}${outlineLevel}${sHidden}>${pivotGridColumns}`;\n        const keys = worksheetData.isSpecialData ? [record.data] : headersForLevel;\n        const isDataRecord = record.type === ExportRecordType.HierarchicalGridRecord\n            || record.type === ExportRecordType.DataRecord\n            || record.type === ExportRecordType.GroupedRecord\n            || record.type === ExportRecordType.TreeGridRecord;\n\n        const isValidRecordType = isDataRecord || record.type === ExportRecordType.SummaryRecord;\n\n        if (isValidRecordType && worksheetData.hasSummaries) {\n            this.resolveSummaryDimensions(record, isDataRecord, worksheetData.isGroupedGrid)\n        }\n\n        for (let j = 0; j < keys.length; j++) {\n            const col = j + (isHierarchicalGrid ? rowLevel : worksheetData.isPivotGrid ? worksheetData.owner.maxRowLevel : 0);\n\n            const cellData = this.getCellData(worksheetData, i, col, keys[j]);\n\n            rowData[j + 1] = cellData;\n        }\n\n        rowData[keys.length + 1] = '</row>';\n\n        return rowData.join('');\n    }\n\n    private getCellData(worksheetData: WorksheetData, row: number, column: number, key: string): string {\n        const dictionary = worksheetData.dataDictionary;\n        let columnName = ExcelStrings.getExcelColumn(column) + (this.rowIndex);\n        const fullRow = worksheetData.data[row];\n        const isHeaderRecord = fullRow.type === ExportRecordType.HeaderRecord;\n        const isSummaryRecord = fullRow.type === ExportRecordType.SummaryRecord;\n        const isValidRecordType = fullRow.type === ExportRecordType.GroupedRecord\n            || fullRow.type === ExportRecordType.DataRecord\n            || fullRow.type === ExportRecordType.HierarchicalGridRecord\n            || fullRow.type === ExportRecordType.TreeGridRecord;\n\n        this.firstDataRow = this.firstDataRow > this.rowIndex ? this.rowIndex : this.firstDataRow;\n\n        const cellValue = worksheetData.isSpecialData ?\n            fullRow.data :\n            fullRow.data[key];\n\n        if (cellValue === GRID_LEVEL_COL || key === GRID_LEVEL_COL) {\n            columnName = ExcelStrings.getExcelColumn(worksheetData.columnCount + 1) + (this.rowIndex);\n        }\n\n        if (worksheetData.hasSummaries && (isValidRecordType || (worksheetData.isGroupedGrid && isSummaryRecord))) {\n            this.setSummaryCoordinates(columnName, key, fullRow.hierarchicalOwner, worksheetData.isGroupedGrid && isSummaryRecord)\n        }\n\n        if (fullRow.summaryKey && fullRow.summaryKey === GRID_ROOT_SUMMARY && key !== GRID_LEVEL_COL && worksheetData.isGroupedGrid) {\n            this.setRootSummaryStartCoordinate(column, key);\n\n            if (this.firstColumn > column) {\n                this.setRootSummaryStartCoordinate(worksheetData.columnCount + 1, GRID_LEVEL_COL);\n                this.firstColumn = column;\n            }\n        }\n\n        const targetColArr = Array.from(worksheetData.owners.values()).map(arr => arr.columns).find(product => product.some(item => item.field === key));\n        const targetCol = targetColArr ? targetColArr.find(col => col.field === key) : undefined;\n\n        if ((cellValue === undefined || cellValue === null) && !worksheetData.hasSummaries) {\n            return `<c r=\"${columnName}\" s=\"1\"/>`;\n        } else if ((worksheetData.hasSummaries && (isValidRecordType || isHeaderRecord)) || !worksheetData.hasSummaries) {\n            const savedValue = dictionary.saveValue(cellValue, isHeaderRecord);\n            const isSavedAsString = savedValue !== -1;\n\n            const isSavedAsDate = !isSavedAsString && cellValue instanceof Date;\n\n            let value = isSavedAsString ? savedValue : cellValue;\n\n            if (isSavedAsDate) {\n                const timeZoneOffset = value.getTimezoneOffset() * 60000;\n                const isoString = (new Date(value - timeZoneOffset)).toISOString();\n                value = isoString.substring(0, isoString.indexOf('.'));\n            }\n\n            const type = isSavedAsString ? ` t=\"s\"` : isSavedAsDate ? ` t=\"d\"` : '';\n\n            const isTime = targetCol?.dataType === 'time';\n            const isDateTime = targetCol?.dataType === 'dateTime';\n            const isPercentage = targetCol?.dataType === 'percent';\n            const isColumnCurrencyType = targetCol?.dataType === 'currency';\n\n            const format = isPercentage ? ` s=\"12\"` : isDateTime ? ` s=\"11\"` : isTime ? ` s=\"10\"` : isHeaderRecord ? ` s=\"3\"` : isSavedAsString ? '' : isSavedAsDate ? ` s=\"2\"` : isColumnCurrencyType ? ` s=\"${this.currencyStyleMap.get(targetCol.currencyCode)?.styleXf || 0}\"` : ` s=\"1\"`;\n\n            return `<c r=\"${columnName}\"${type}${format}><v>${value}</v></c>`;\n        } else {\n            let summaryFunc = `\"${cellValue ?? \"\"}\"`;\n\n            if (isSummaryRecord && cellValue) {\n                const dimensionMapKey = this.isValidGrid ? fullRow.hierarchicalOwner ?? GRID_PARENT : null;\n                const level = worksheetData.isGroupedGrid ? worksheetData.maxLevel : fullRow.level;\n\n                summaryFunc = this.getSummaryFunction(cellValue.label, key, dimensionMapKey, level, targetCol);\n\n                if (!summaryFunc) {\n                    let summaryValue;\n                    const label = cellValue.label?.toString();\n                    const value = cellValue.value?.toString();\n\n                    if (label && value) {\n                        summaryValue = `${cellValue.label}: ${cellValue.value}`;\n                    } else if (label) {\n                        summaryValue = cellValue.label;\n                    } else if (value) {\n                        summaryValue = cellValue.value;\n                    }\n\n                    const savedValue = dictionary.saveValue(summaryValue, false);\n                    const isSavedAsString = savedValue !== -1;\n                    const isSavedAsDate = !isSavedAsString && summaryValue instanceof Date;\n\n                    if (isSavedAsDate) {\n                        const timeZoneOffset = summaryValue.getTimezoneOffset() * 60000;\n                        const isoString = (new Date(summaryValue - timeZoneOffset)).toISOString();\n                        summaryValue = isoString.substring(0, isoString.indexOf('.'));\n                    }\n\n                    const resolvedValue = isSavedAsString ? savedValue : summaryValue;\n                    const type = isSavedAsString ? `t=\"s\"` : isSavedAsDate ? `t=\"d\"` : '';\n                    const style = isSavedAsDate ? `s=\"2\"` : `s=\"1\"`;\n\n                    return `<c r=\"${columnName}\" ${type} ${style}><v>${resolvedValue}</v></c>`;\n                }\n\n                return `<c r=\"${columnName}\"><f t=\"array\" ref=\"${columnName}\">${summaryFunc}</f></c>`;\n            }\n\n            return `<c r=\"${columnName}\" s=\"1\"><f>${summaryFunc}</f></c>`;\n        }\n    }\n\n    private resolveSummaryDimensions(record: IExportRecord, isDataRecord: boolean, isGroupedGrid: boolean) {\n        if (this.isValidGrid &&\n            this.currentHierarchicalOwner !== '' &&\n            this.currentHierarchicalOwner !== record.owner &&\n            !this.hierarchicalDimensionMap.get(this.currentHierarchicalOwner)) {\n            this.hierarchicalDimensionMap.set(this.currentHierarchicalOwner, new Map(this.dimensionMap))\n        }\n\n        if (isDataRecord) {\n            if (this.currentSummaryOwner !== record.summaryKey || this.currentHierarchicalOwner !== record.hierarchicalOwner) {\n                this.dimensionMap.clear();\n            }\n\n            this.currentSummaryOwner = record.summaryKey;\n\n            // For grouped grid we need to reset the parent map\n            // so we can change the startCoordinate for each record\n            if (isGroupedGrid && this.currentHierarchicalOwner !== '' && record.hierarchicalOwner === GRID_PARENT) {\n                this.hierarchicalDimensionMap.delete(GRID_PARENT)\n            }\n\n            this.currentHierarchicalOwner = record.hierarchicalOwner;\n        }\n    }\n\n    private setSummaryCoordinates(columnName: string, key: string, hierarchicalOwner: string, useLastValidEndCoordinate: boolean) {\n        const targetDimensionMap = this.hierarchicalDimensionMap.get(hierarchicalOwner) ?? this.dimensionMap;\n\n        if (!targetDimensionMap.get(key)) {\n            const initialDimensions: Dimensions = {\n                startCoordinate: columnName,\n                endCoordinate: columnName\n            };\n\n            targetDimensionMap.set(key, initialDimensions)\n        } else {\n            if (useLastValidEndCoordinate) {\n                this.setEndCoordinates(targetDimensionMap, true);\n            } else {\n                targetDimensionMap.get(key).endCoordinate = columnName;\n                this.lastValidRow = targetDimensionMap.get(key).endCoordinate.match(/[a-z]+|[^a-z]+/gi)[1]\n            }\n        }\n\n        if (this.isValidGrid && !useLastValidEndCoordinate && hierarchicalOwner !== GRID_PARENT) {\n            const parentMap = this.hierarchicalDimensionMap.get(GRID_PARENT);\n            this.setEndCoordinates(parentMap);\n        }\n    }\n\n    private setEndCoordinates(map: Map<string, Dimensions>, useLastValidEndCoordinate = false) {\n        for (const a of map.values()) {\n            const colName = a.endCoordinate.match(/[a-z]+|[^a-z]+/gi)[0];\n            a.endCoordinate = `${colName}${useLastValidEndCoordinate ? this.lastValidRow : this.rowIndex}`;\n         }\n    }\n\n    private getSummaryFunction(type: string, key: string, dimensionMapKey: any, recordLevel: number, col: IColumnInfo): string {\n        const dimensionMap = dimensionMapKey ? (this.hierarchicalDimensionMap.get(dimensionMapKey) ?? this.dimensionMap) : this.dimensionMap;\n        if (!dimensionMap) {\n            return '';\n        }\n        const dimensions = dimensionMap.get(key);\n        const levelDimensions = dimensionMap.get(GRID_LEVEL_COL);\n        if (!dimensions || !levelDimensions) {\n            return '';\n        }\n\n        let func = '';\n        let funcType = '';\n        let result = '';\n        const currencyInfo = this.currencyStyleMap.get(col.currencyCode);\n\n        switch(type?.toString().toLowerCase()) {\n            case \"count\":\n                return `\"Count: \"&amp;_xlfn.COUNTIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel})`\n            case \"min\":\n                func = `_xlfn.MIN(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate}))`\n                funcType = `\"Min: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"max\":\n                func = `_xlfn.MAX(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate}))`\n                funcType = `\"Max: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"sum\":\n                func =  `_xlfn.SUMIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})`\n                funcType = `\"Sum: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"avg\":\n                func = `_xlfn.AVERAGEIF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}, ${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})`\n                funcType = `\"Avg: \"&amp;`;\n\n                result = funcType + (col.dataType === 'currency' && currencyInfo\n                    ? `_xlfn.TEXT(${func}, \"${currencyInfo.symbol}#,##0.00\")`\n                    : `${func}`);\n\n                return result\n            case \"earliest\":\n                // TODO: get date format from locale\n                return `\"Earliest: \"&amp;_xlfn.TEXT(_xlfn.MIN(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})), \"m/d/yyyy\")`\n            case \"latest\":\n                // TODO: get date format from locale\n                return `\"Latest: \"&amp;_xlfn.TEXT(_xlfn.MAX(_xlfn.IF(${levelDimensions.startCoordinate}:${levelDimensions.endCoordinate}=${recordLevel}, ${dimensions.startCoordinate}:${dimensions.endCoordinate})), \"m/d/yyyy\")`\n        }\n    }\n\n    private setRootSummaryStartCoordinate(column: number, key: string) {\n        const firstDataRecordColName = ExcelStrings.getExcelColumn(column) + (this.firstDataRow);\n        const targetMap = this.hierarchicalDimensionMap.get(GRID_PARENT);\n\n        if (targetMap.get(key).startCoordinate !== firstDataRecordColName) {\n            targetMap.get(key).startCoordinate = firstDataRecordColName;\n        }\n    }\n\n    private printHeaders(worksheetData: WorksheetData, headersForLevel: IColumnInfo[], i: number, isVertical: boolean) {\n        let startValue = 0;\n        let str = '';\n\n        const isHierarchicalGrid = worksheetData.isHierarchical;\n        let rowStyle = isHierarchicalGrid ? ' s=\"3\"' : '';\n        const dictionary = worksheetData.dataDictionary;\n        const owner = worksheetData.owner;\n        const maxLevel = isVertical\n            ? owner.maxRowLevel\n            : owner.maxLevel;\n\n        for (const currentCol of headersForLevel) {\n            const spanLength = isVertical ? currentCol.rowSpan : currentCol.columnSpan;\n\n            if (currentCol.level === i) {\n                let columnCoordinate;\n                const column = isVertical\n                    ? this.rowIndex\n                    : startValue + (owner.maxRowLevel ?? 0)\n\n                let rowCoordinate = isVertical\n                    ? startValue + owner.maxLevel + 2\n                    : this.rowIndex\n                if (currentCol.headerType === ExportHeaderType.PivotRowHeader) {\n                    rowCoordinate = startValue + 1;\n                }\n\n                const columnValue = currentCol.headerType === ExportHeaderType.PivotMergedHeader ?\n                                        dictionary.saveValue(currentCol.field, true, true) :\n                                        dictionary.saveValue(currentCol.header, true, false);\n\n                columnCoordinate = (currentCol.field === GRID_LEVEL_COL\n                    ? ExcelStrings.getExcelColumn(worksheetData.columnCount + 1)\n                    : ExcelStrings.getExcelColumn(column)) + rowCoordinate;\n\n                rowStyle = isVertical && currentCol.rowSpan > 1 ? ' s=\"4\"' : rowStyle;\n                str = `<c r=\"${columnCoordinate}\"${rowStyle} t=\"s\"><v>${columnValue}</v></c>`;\n\n                if (isVertical) {\n                    if (this.pivotGridRowHeadersMap.has(rowCoordinate)) {\n                        this.pivotGridRowHeadersMap.set(rowCoordinate, this.pivotGridRowHeadersMap.get(rowCoordinate) + str)\n                    } else {\n                        this.pivotGridRowHeadersMap.set(rowCoordinate, str)\n                    }\n                } else {\n                    this.sheetData += str;\n                }\n\n                if (i !== maxLevel) {\n                    this.mergeCellsCounter++;\n                    this.mergeCellStr += ` <mergeCell ref=\"${columnCoordinate}:`;\n\n                    if (currentCol.headerType === ExportHeaderType.ColumnHeader) {\n                        const col = isVertical\n                            ? maxLevel\n                            : startValue + (owner.maxRowLevel ?? 0);\n\n                        const row = isVertical\n                            ? rowCoordinate\n                            : owner.maxLevel + 1;\n\n                        columnCoordinate = ExcelStrings.getExcelColumn(col) + row;\n                    } else {\n                        for (let k = 1; k < spanLength; k++) {\n                            const col = isVertical\n                                ? column\n                                : column + k;\n\n                            const row = isVertical\n                                ? rowCoordinate + k\n                                : this.rowIndex;\n\n                            columnCoordinate = ExcelStrings.getExcelColumn(col) + row;\n                            str = `<c r=\"${columnCoordinate}\"${rowStyle} />`;\n\n                            isVertical\n                                ? this.pivotGridRowHeadersMap.set(row, str)\n                                : this.sheetData += str\n                        }\n                    }\n                    if ((currentCol.headerType === ExportHeaderType.RowHeader || currentCol.headerType === ExportHeaderType.MultiRowHeader) &&\n                        currentCol.columnSpan && currentCol.columnSpan > 1 ) {\n                        columnCoordinate = ExcelStrings.getExcelColumn(column + currentCol.columnSpan - 1) + (rowCoordinate + spanLength - 1);\n                    }\n\n                    this.mergeCellStr += `${columnCoordinate}\" />`;\n                }\n            }\n            if (currentCol.headerType !== ExportHeaderType.PivotRowHeader) {\n                startValue += spanLength;\n            }\n        }\n    }\n}\n\n/**\n * @hidden\n */\nexport class StyleFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['styles.xml'] = strToU8(ExcelStrings.getStyles());\n    }\n}\n\n/**\n * @hidden\n */\nexport class WorkbookFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        folder['workbook.xml'] = strToU8(ExcelStrings.getWorkbook(worksheetData.options.worksheetName));\n    }\n}\n\n/**\n * @hidden\n */\nexport class ContentTypesFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const hasSharedStrings = !worksheetData.isEmpty || worksheetData.options.alwaysExportHeaders;\n        folder['[Content_Types].xml'] = strToU8(ExcelStrings.getContentTypesXML(hasSharedStrings, worksheetData.options.exportAsTable));\n    }\n}\n\n/**\n * @hidden\n */\nexport class SharedStringsFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const dict = worksheetData.dataDictionary;\n        const sortedValues = dict.getKeys();\n        const sharedStrings = new Array<string>(sortedValues.length);\n\n        for (const value of sortedValues) {\n            sharedStrings[dict.getSanitizedValue(value)] = '<si><t>' + value + '</t></si>';\n        }\n\n        folder['sharedStrings.xml'] = strToU8(ExcelStrings.getSharedStringXML(\n                        dict.stringsCount,\n                        sortedValues.length,\n                        sharedStrings.join(''))\n                    );\n    }\n}\n\n/**\n * @hidden\n */\nexport class TablesFile implements IExcelFile {\n    public writeElement(folder: Object, worksheetData: WorksheetData) {\n        const columnCount = worksheetData.columnCount;\n        const lastColumn = ExcelStrings.getExcelColumn(columnCount - 1) + worksheetData.rowCount;\n        const autoFilterDimension = 'A1:' + lastColumn;\n        const tableDimension = worksheetData.isEmpty\n            ? 'A1:' + ExcelStrings.getExcelColumn(columnCount - 1) + (worksheetData.rowCount + 1)\n            : autoFilterDimension;\n        const hasUserSetIndex = worksheetData.owner.columns.some(c => c.exportIndex !== undefined);\n        const values = hasUserSetIndex\n            ? worksheetData.rootKeys\n            : worksheetData.owner.columns\n                .filter(c => !c.skip)\n                .sort((a, b) => a.startIndex - b.startIndex)\n                .sort((a, b) => a.pinnedIndex - b.pinnedIndex)\n                .map(c => c.header);\n\n        let sortString = '';\n\n        let tableColumns = '<tableColumns count=\"' + columnCount + '\">';\n        for (let i = 0; i < columnCount; i++) {\n            const value =  values[i];\n            tableColumns += '<tableColumn id=\"' + (i + 1) + '\" name=\"' + value + '\"/>';\n        }\n\n        tableColumns += '</tableColumns>';\n\n        if (worksheetData.sort) {\n            const sortingExpression = worksheetData.sort;\n            const sc = ExcelStrings.getExcelColumn(values.indexOf(sortingExpression.fieldName));\n            const dir = sortingExpression.dir - 1;\n            sortString = `<sortState ref=\"A2:${lastColumn}\"><sortCondition descending=\"${dir}\" ref=\"${sc}1:${sc}15\"/></sortState>`;\n        }\n\n        folder['table1.xml'] = strToU8(ExcelStrings.getTablesXML(autoFilterDimension, tableDimension, tableColumns, sortString));\n    }\n}\n\n/**\n * @hidden\n */\nexport class WorksheetRelsFile implements IExcelFile {\n    public writeElement(folder: Object) {\n        folder['sheet1.xml.rels'] = strToU8(ExcelStrings.getWorksheetRels());\n    }\n}\n","import {\n    ExcelFileTypes,\n    ExcelFolderTypes\n} from './excel-enums';\n\nimport { IExcelFolder } from './excel-interfaces';\nimport { WorksheetData } from './worksheet-data';\n\n/** @hidden */\nexport class RootExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  '';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.ContentTypesFile];\n    }\n\n    public childFolders() {\n        return [\n            ExcelFolderTypes.RootRelsExcelFolder,\n            ExcelFolderTypes.DocPropsExcelFolder,\n            ExcelFolderTypes.XLExcelFolder\n        ];\n    }\n}\n\n/** @hidden */\nexport class RootRelsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  '_rels';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.RootRelsFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class DocPropsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'docProps';\n    }\n\n    public childFiles() {\n        return [\n            ExcelFileTypes.AppFile,\n            ExcelFileTypes.CoreFile\n        ];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class XLExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'xl';\n    }\n\n    public childFiles(data: WorksheetData) {\n        const retVal = [\n            ExcelFileTypes.StyleFile,\n            ExcelFileTypes.WorkbookFile\n        ];\n\n        if (!data.isEmpty || data.options.alwaysExportHeaders) {\n            retVal.push(ExcelFileTypes.SharedStringsFile);\n        }\n\n        return retVal;\n    }\n\n    public childFolders(data: WorksheetData) {\n        const retVal = [\n            ExcelFolderTypes.XLRelsExcelFolder,\n            ExcelFolderTypes.ThemeExcelFolder,\n            ExcelFolderTypes.WorksheetsExcelFolder\n        ];\n\n        if ((!data.isEmpty || data.options.alwaysExportHeaders) && data.options.exportAsTable) {\n            retVal.push(ExcelFolderTypes.TablesExcelFolder);\n        }\n\n        return retVal;\n    }\n}\n\n/** @hidden */\nexport class XLRelsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  '_rels';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.WorkbookRelsFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class ThemeExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'theme';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.ThemeFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class WorksheetsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return  'worksheets';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.WorksheetFile];\n    }\n\n    public childFolders(data: WorksheetData) {\n        return (data.isEmpty && !data.options.alwaysExportHeaders) || !data.options.exportAsTable ? [] : [ExcelFolderTypes.WorksheetsRelsExcelFolder];\n    }\n}\n\n/** @hidden */\nexport class TablesExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return 'tables';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.TablesFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n\n/** @hidden */\nexport class WorksheetsRelsExcelFolder implements IExcelFolder {\n    public get folderName() {\n        return '_rels';\n    }\n\n    public childFiles() {\n        return [ExcelFileTypes.WorksheetRelsFile];\n    }\n\n    public childFolders() {\n        return [];\n    }\n}\n","import {\n    ExcelFileTypes,\n    ExcelFolderTypes\n} from './excel-enums';\n\nimport {\n    AppFile,\n    ContentTypesFile,\n    CoreFile,\n    RootRelsFile,\n    SharedStringsFile,\n    StyleFile,\n    TablesFile,\n    ThemeFile,\n    WorkbookFile,\n    WorkbookRelsFile,\n    WorksheetFile,\n    WorksheetRelsFile\n} from './excel-files';\n\nimport {\n    DocPropsExcelFolder,\n    RootExcelFolder,\n    RootRelsExcelFolder,\n    TablesExcelFolder,\n    ThemeExcelFolder,\n    WorksheetsExcelFolder,\n    WorksheetsRelsExcelFolder,\n    XLExcelFolder,\n    XLRelsExcelFolder\n} from './excel-folders';\n\nimport {\n    IExcelFile,\n    IExcelFolder\n} from './excel-interfaces';\n\n/** @hidden */\nexport class ExcelElementsFactory {\n\n    public static getExcelFolder(type: ExcelFolderTypes): IExcelFolder {\n        switch (type) {\n            case ExcelFolderTypes.RootExcelFolder:\n                return new RootExcelFolder();\n            case ExcelFolderTypes.RootRelsExcelFolder:\n                return new RootRelsExcelFolder();\n            case ExcelFolderTypes.DocPropsExcelFolder:\n                return new DocPropsExcelFolder();\n            case ExcelFolderTypes.XLExcelFolder:\n                return new XLExcelFolder();\n            case ExcelFolderTypes.XLRelsExcelFolder:\n                return new XLRelsExcelFolder();\n            case ExcelFolderTypes.ThemeExcelFolder:\n                return new ThemeExcelFolder();\n            case ExcelFolderTypes.WorksheetsExcelFolder:\n                return  new WorksheetsExcelFolder();\n            case ExcelFolderTypes.WorksheetsRelsExcelFolder:\n                return new WorksheetsRelsExcelFolder();\n            case ExcelFolderTypes.TablesExcelFolder:\n                return new TablesExcelFolder();\n            default:\n                throw new Error('Unknown excel folder type!');\n        }\n    }\n\n    public static getExcelFile(type: ExcelFileTypes): IExcelFile {\n        switch (type) {\n            case ExcelFileTypes.RootRelsFile:\n                return  new RootRelsFile();\n            case ExcelFileTypes.AppFile:\n                return  new AppFile();\n            case ExcelFileTypes.CoreFile:\n                return new CoreFile();\n            case ExcelFileTypes.WorkbookRelsFile:\n                return new WorkbookRelsFile();\n            case ExcelFileTypes.ThemeFile:\n                return new ThemeFile();\n            case ExcelFileTypes.WorksheetFile:\n                return new WorksheetFile();\n            case ExcelFileTypes.StyleFile:\n                return new StyleFile();\n            case ExcelFileTypes.WorkbookFile:\n                return new WorkbookFile();\n            case ExcelFileTypes.ContentTypesFile:\n                return new ContentTypesFile();\n            case ExcelFileTypes.SharedStringsFile:\n                return new SharedStringsFile();\n            case ExcelFileTypes.WorksheetRelsFile:\n                return new WorksheetRelsFile();\n            case ExcelFileTypes.TablesFile:\n                return new TablesFile();\n            default:\n                throw Error('Unknown excel file type!');\n        }\n    }\n}\n","import { ExportUtilities } from '../exporter-common/export-utilities';\n\n/** @hidden */\nexport class WorksheetDataDictionary {\n    private static DEFAULT_FONT = '11pt Calibri';\n    private static TEXT_PADDING = 5;\n\n    public hasNumberValues = false;\n    public hasDateValues = false;\n\n    public stringsCount: number;\n\n    private _dictionary: any;\n    private _widthsDictionary: any;\n\n    private _keys: string[];\n    private _keysAreValid: boolean;\n\n    private _counter: number;\n    private _columnWidths: number[];\n    private _context: any;\n\n    constructor(columnCount: number, columnWidth: number, columnWidthsList: number[]) {\n        this._dictionary = {};\n        this._widthsDictionary = {};\n        this._counter = 0;\n        this.dirtyKeyCollections();\n\n        this._columnWidths = new Array<number>(columnCount);\n\n        if (columnWidth) {\n            this._columnWidths.fill(columnWidth);\n        } else {\n            this._columnWidths = columnWidthsList;\n        }\n\n        this.stringsCount = 0;\n    }\n\n    public get columnWidths() {\n        return this._columnWidths;\n    }\n\n    public saveValue(value: any, isHeader: boolean, shouldSanitizeValue = true): number {\n        let sanitizedValue = '';\n        const isDate = value instanceof Date;\n        const isSavedAsString = isHeader || (typeof value !== 'number' && value !== Number(value) && !Number.isFinite(value) && !isDate);\n\n        if (isSavedAsString) {\n            sanitizedValue = shouldSanitizeValue ? ExportUtilities.sanitizeValue(value) : value;\n\n            if (this._dictionary[sanitizedValue] === undefined) {\n                this._dictionary[sanitizedValue] = this._counter++;\n                this.dirtyKeyCollections();\n            }\n\n            this.stringsCount ++;\n        } else if (isDate) {\n            this.hasDateValues = true;\n        } else {\n            this.hasNumberValues = true;\n        }\n\n        return isSavedAsString ? this.getSanitizedValue(sanitizedValue) : -1;\n    }\n\n    public getValue(value: string): number {\n        return this.getSanitizedValue(ExportUtilities.sanitizeValue(value));\n    }\n\n    public getSanitizedValue(sanitizedValue: string): number {\n        return this._dictionary[sanitizedValue];\n    }\n\n    public getKeys(): string[] {\n        if (!this._keysAreValid) {\n            this._keys = Object.keys(this._dictionary);\n            this._keysAreValid = true;\n        }\n\n        return this._keys;\n    }\n\n    private getTextWidth(value: any): number {\n        if (this._widthsDictionary[value] === undefined) {\n            const context = this.getContext();\n            const metrics = context.measureText(value);\n            this._widthsDictionary[value] = metrics.width + WorksheetDataDictionary.TEXT_PADDING;\n        }\n\n        return this._widthsDictionary[value];\n    }\n\n    private getContext(): any {\n        if (!this._context) {\n            const canvas = globalThis.document?.createElement('canvas');\n            this._context = canvas.getContext('2d');\n            this._context.font = WorksheetDataDictionary.DEFAULT_FONT;\n        }\n\n        return this._context;\n    }\n\n    private dirtyKeyCollections(): void {\n        this._keysAreValid = false;\n    }\n}\n","import { ExportHeaderType, ExportRecordType, IColumnList, IExportRecord } from '../exporter-common/base-export-service';\nimport { ExportUtilities } from '../exporter-common/export-utilities';\nimport { IgxExcelExporterOptions } from './excel-exporter-options';\nimport { WorksheetDataDictionary } from './worksheet-data-dictionary';\n\n/** @hidden */\nexport class WorksheetData {\n    private _rowCount: number;\n    private _dataDictionary: WorksheetDataDictionary;\n    private _isSpecialData: boolean;\n    private _hasMultiColumnHeader: boolean;\n    private _hasMultiRowHeader: boolean;\n    private _isHierarchical: boolean;\n    private _hasSummaries: boolean;\n    private _isPivotGrid: boolean;\n    private _isTreeGrid: boolean;\n\n    constructor(private _data: IExportRecord[],\n                public options: IgxExcelExporterOptions,\n                public sort: any,\n                public columnCount: number,\n                public rootKeys: string[],\n                public indexOfLastPinnedColumn: number,\n                public columnWidths: number[],\n                public owner: IColumnList,\n                public owners: Map<any, IColumnList>) {\n            this.initializeData();\n    }\n\n    public get data(): IExportRecord[] {\n        return this._data;\n    }\n\n    public get rowCount(): number {\n        return this._rowCount;\n    }\n\n    public get isEmpty(): boolean {\n        return !this.rowCount\n            || this.rowCount === this.owner.maxLevel + 1\n            || !this.columnCount\n            || this.owner.columns.every(c => c.skip);\n    }\n\n    public get isSpecialData(): boolean {\n        return this._isSpecialData;\n    }\n\n    public get dataDictionary(): WorksheetDataDictionary {\n        return this._dataDictionary;\n    }\n\n    public get hasMultiColumnHeader(): boolean {\n        return this._hasMultiColumnHeader;\n    }\n\n    public get hasSummaries(): boolean {\n        return this._hasSummaries;\n    }\n\n    public get hasMultiRowHeader(): boolean {\n        return this._hasMultiRowHeader;\n    }\n\n    public get isHierarchical(): boolean {\n        return this._isHierarchical;\n    }\n\n    public get isTreeGrid(): boolean {\n        return this._isTreeGrid;\n    }\n\n    public get isPivotGrid(): boolean {\n        return this._isPivotGrid;\n    }\n\n    public get isGroupedGrid(): boolean {\n        return this._data.some(d => d.type === ExportRecordType.GroupedRecord);\n    }\n\n    public get maxLevel(): number {\n        return [...new Set(this._data.map(item => item.level))].sort((a,b) => (a > b ? -1 : 1))[0];\n    }\n\n    public get multiColumnHeaderRows(): number {\n        return !this.options.ignoreMultiColumnHeaders ? Array.from(this.owners.values()).map(c => c.maxLevel).reduce((a,b) => a + b) : 0;\n    }\n\n    private initializeData() {\n        this._dataDictionary = new WorksheetDataDictionary(this.columnCount, this.options.columnWidth, this.columnWidths);\n\n        this._hasMultiColumnHeader = Array.from(this.owners.values())\n            .some(o => o.columns.some(col => !col.skip && col.headerType === ExportHeaderType.MultiColumnHeader));\n\n        this._hasMultiRowHeader = Array.from(this.owners.values())\n            .some(o => o.columns.some(col => !col.skip && col.headerType === ExportHeaderType.MultiRowHeader));\n\n        this._isHierarchical = this.data[0]?.type === ExportRecordType.HierarchicalGridRecord\n            || !(typeof(Array.from(this.owners.keys())[0]) === 'string');\n\n        this._hasSummaries = this._data.filter(d => d.type === ExportRecordType.SummaryRecord).length > 0;\n\n        this._isTreeGrid = this._data.filter(d => d.type === ExportRecordType.TreeGridRecord).length > 0;\n\n        this._isPivotGrid = this.data[0]?.type === ExportRecordType.PivotGridRecord;\n\n        const exportMultiColumnHeaders = this._hasMultiColumnHeader && !this.options.ignoreMultiColumnHeaders;\n\n        if (this._isHierarchical || exportMultiColumnHeaders || this._isPivotGrid) {\n            this.options.exportAsTable = false;\n        }\n\n        if (!this._data || this._data.length === 0) {\n            if (!this._isHierarchical) {\n                this._rowCount = this.owner.maxLevel + 1;\n            }\n\n            return;\n        }\n\n        this._isSpecialData = ExportUtilities.isSpecialData(this._data[0].data);\n        this._rowCount = this._data.length + this.multiColumnHeaderRows + 1;\n    }\n}\n","import { zip } from 'fflate';\n\nimport { EventEmitter, Injectable } from '@angular/core';\nimport { ExcelElementsFactory } from './excel-elements-factory';\nimport { ExcelFolderTypes } from './excel-enums';\nimport { IgxExcelExporterOptions } from './excel-exporter-options';\nimport { IExcelFolder } from './excel-interfaces';\nimport { ExportRecordType, IExportRecord, IgxBaseExporter, DEFAULT_OWNER, ExportHeaderType, GRID_LEVEL_COL } from '../exporter-common/base-export-service';\nimport { ExportUtilities } from '../exporter-common/export-utilities';\nimport { WorksheetData } from './worksheet-data';\nimport { WorksheetFile } from './excel-files';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\n\nexport interface IExcelExportEndedEventArgs extends IBaseEventArgs {\n    xlsx?: Object\n}\n\nconst EXCEL_MAX_ROWS = 1048576;\nconst EXCEL_MAX_COLS = 16384;\n\n/**\n * **Ignite UI for Angular Excel Exporter Service** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter_excel.html)\n *\n * The Ignite UI for Angular Excel Exporter service can export data in Microsoft® Excel® format from both raw data\n * (array) or from an `IgxGrid`.\n *\n * Example:\n * ```typescript\n * public localData = [\n *   { Name: \"Eric Ridley\", Age: \"26\" },\n *   { Name: \"Alanis Brook\", Age: \"22\" },\n *   { Name: \"Jonathan Morris\", Age: \"23\" }\n * ];\n *\n * constructor(private excelExportService: IgxExcelExporterService) {\n * }\n *\n * this.excelExportService.exportData(this.localData, new IgxExcelExporterOptions(\"FileName\"));\n * ```\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxExcelExporterService extends IgxBaseExporter {\n\n    /**\n     * This event is emitted when the export process finishes.\n     * ```typescript\n     * this.exporterService.exportEnded.subscribe((args: IExcelExportEndedEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxExcelExporterService\n     */\n    public override exportEnded = new EventEmitter<IExcelExportEndedEventArgs>();\n\n    private static async populateZipFileConfig(fileStructure: Object, folder: IExcelFolder, worksheetData: WorksheetData) {\n        for (const childFolder of folder.childFolders(worksheetData)) {\n            const folderInstance = ExcelElementsFactory.getExcelFolder(childFolder);\n            const childStructure = fileStructure[folderInstance.folderName] = {};\n            await IgxExcelExporterService.populateZipFileConfig(childStructure, folderInstance, worksheetData);\n        }\n\n        for (const childFile of folder.childFiles(worksheetData)) {\n            const fileInstance = ExcelElementsFactory.getExcelFile(childFile);\n            if (fileInstance instanceof WorksheetFile) {\n                await (fileInstance as WorksheetFile).writeElementAsync(fileStructure, worksheetData);\n            } else {\n                fileInstance.writeElement(fileStructure, worksheetData);\n            }\n        }\n    }\n\n    protected exportDataImplementation(data: IExportRecord[], options: IgxExcelExporterOptions, done: () => void): void {\n        const firstDataElement = data[0];\n        const isHierarchicalGrid = firstDataElement?.type === ExportRecordType.HierarchicalGridRecord;\n        const isPivotGrid = firstDataElement?.type === ExportRecordType.PivotGridRecord;\n        const ownersKeys = Array.from(this._ownersMap.keys());\n        const firstKey = ownersKeys[0];\n        const isHierarchicalGridByMap = firstKey && typeof firstKey !== 'string';\n        const filterColumns = (columns) => columns.filter(col => col.field !== GRID_LEVEL_COL && !col.skip && col.headerType === ExportHeaderType.ColumnHeader);\n\n        let rootKeys;\n        let columnCount;\n        let columnWidths;\n        let indexOfLastPinnedColumn;\n        let defaultOwner;\n\n        const columnsExceedLimit = typeof firstDataElement !== 'undefined' ?\n            isHierarchicalGrid ?\n                data.some(d => Object.keys(d.data).length > EXCEL_MAX_COLS) :\n                Object.keys(firstDataElement.data).length > EXCEL_MAX_COLS :\n            false;\n\n        if (data.length > EXCEL_MAX_ROWS || columnsExceedLimit) {\n            throw Error('The Excel file can contain up to 1,048,576 rows and 16,384 columns.');\n        }\n\n        if (typeof firstDataElement !== 'undefined') {\n            let maxLevel = 0;\n\n            data.forEach((r) => {\n                maxLevel = Math.max(maxLevel, r.level);\n            });\n\n            if (maxLevel > 7) {\n                throw Error('Can create an outline of up to eight levels!');\n            }\n\n            if (isHierarchicalGrid) {\n                columnCount = data\n                    .map(a => this._ownersMap.get(a.owner).columns.filter(c => !c.skip).length + a.level)\n                    .sort((a, b) => b - a)[0];\n\n                rootKeys = this._ownersMap.get(firstDataElement.owner).columns.filter(c => !c.skip).map(c => c.field);\n                defaultOwner = this._ownersMap.get(firstDataElement.owner);\n            } else {\n                // Check if this is actually a hierarchical grid (when data only contains summary records)\n                defaultOwner = isHierarchicalGridByMap\n                    ? this._ownersMap.get(firstKey)\n                    : this._ownersMap.get(DEFAULT_OWNER) || this._ownersMap.get(firstKey);\n\n                if (defaultOwner) {\n                    const columns = filterColumns(defaultOwner.columns);\n\n                    columnWidths = defaultOwner.columnWidths;\n                    indexOfLastPinnedColumn = defaultOwner.indexOfLastPinnedColumn;\n                    columnCount = isPivotGrid ? columns.length + this.pivotGridFilterFieldsCount : columns.length;\n                    rootKeys = columns.map(c => c.field);\n                }\n            }\n        } else {\n            // For hierarchical grids with empty data, use the grid instance; otherwise try DEFAULT_OWNER first\n            defaultOwner = isHierarchicalGridByMap\n                ? this._ownersMap.get(firstKey)\n                : this._ownersMap.get(DEFAULT_OWNER) || this._ownersMap.get(firstKey);\n\n            if (defaultOwner) {\n                columnWidths = defaultOwner.columnWidths;\n                columnCount = filterColumns(defaultOwner.columns).length;\n            }\n        }\n\n        const worksheetData =\n            new WorksheetData(data, options, this._sort, columnCount, rootKeys, indexOfLastPinnedColumn,\n                columnWidths, defaultOwner, this._ownersMap);\n\n        const rootFolder = ExcelElementsFactory.getExcelFolder(ExcelFolderTypes.RootExcelFolder);\n        const fileData = {};\n        IgxExcelExporterService.populateZipFileConfig(fileData, rootFolder, worksheetData)\n            .then(() => {\n                zip(fileData, (_, result) => {\n                    this.saveFile(result, options.fileName);\n                    this.exportEnded.emit({ xlsx: fileData });\n                    done();\n                });\n            });\n    }\n\n    private saveFile(data: Uint8Array, fileName: string): void {\n        const blob = new Blob([data as BlobPart], {\n            type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n        });\n\n        ExportUtilities.saveBlobToFile(blob, fileName);\n    }\n}\n","import { ExportUtilities } from '../exporter-common/export-utilities';\nimport { IColumnInfo } from '../exporter-common/base-export-service';\nimport { yieldingLoop } from '../exporter-common/yielding-loop';\n\n/**\n * @hidden\n */\nexport class CharSeparatedValueData {\n    private _headerRecord = '';\n    private _dataRecords = '';\n    private _eor = '\\r\\n';\n    private _delimiter;\n    private _escapeCharacters = ['\\r', '\\n', '\\r\\n'];\n    private _delimiterLength = 1;\n    private _isSpecialData = false;\n\n    constructor(private _data: any[], valueDelimiter: string, private columns: IColumnInfo[] = [])  {\n        this.setDelimiter(valueDelimiter);\n    }\n\n    public prepareData(key?: any[]) {\n        if (!this._data || this._data.length === 0) {\n            return '';\n        }\n        let keys = [];\n        if (key){\n            keys = key;\n        }else {\n            keys = ExportUtilities.getKeysFromData(this._data);\n        }\n\n        if (keys.length === 0) {\n            return '';\n        }\n\n        this._isSpecialData = ExportUtilities.isSpecialData(this._data[0]);\n        this._escapeCharacters.push(this._delimiter);\n\n        this._headerRecord = this.processHeaderRecord(keys, this._data.length);\n        this._dataRecords = this.processDataRecords(this._data, keys);\n\n        return this._headerRecord + this._dataRecords;\n    }\n\n    public prepareDataAsync(done: (result: string) => void, alwaysExportHeaders: boolean = true) {\n        const columns = this.columns?.filter(c => !c.skip)\n                        .sort((a, b) => a.startIndex - b.startIndex)\n                        .sort((a, b) => a.pinnedIndex - b.pinnedIndex);\n        const keys = columns && columns.length ? columns.map(c => c.field) : ExportUtilities.getKeysFromData(this._data);\n\n        if (this._data && this._data.length > 0) {\n            this._isSpecialData = ExportUtilities.isSpecialData(this._data[0]);\n        }\n        this._escapeCharacters.push(this._delimiter);\n\n        const headers = columns && columns.length ?\n                        columns.map(c => c.header ?? c.field) :\n                        keys;\n\n        this._headerRecord = this.processHeaderRecord(headers, this._data.length);\n        if (keys.length === 0 || ((!this._data || this._data.length === 0) && keys.length === 0)) {\n            // If alwaysExportHeaders is true and we have headers, export headers only\n            if (alwaysExportHeaders && headers && headers.length > 0) {\n                done(this._headerRecord);\n            } else {\n                done('');\n            }\n        } else {\n            this.processDataRecordsAsync(this._data, keys, (dr) => {\n                done(this._headerRecord + dr);\n            });\n        }\n    }\n\n    private processField(value, escapeChars): string {\n        let safeValue = ExportUtilities.hasValue(value) ? String(value) : '';\n        if (escapeChars.some((v) => safeValue.includes(v))) {\n            safeValue = `\"${safeValue}\"`;\n        }\n        return safeValue + this._delimiter;\n    }\n\n    private processHeaderRecord(keys, dataLength): string {\n        let recordData = '';\n        for (const keyName of keys) {\n            recordData += this.processField(keyName, this._escapeCharacters);\n        }\n\n        const result = recordData.slice(0, -this._delimiterLength);\n\n        return dataLength > 0 ? result + this._eor : result;\n    }\n\n    private processRecord(record, keys): string {\n        const recordData = new Array(keys.length);\n        for (let index = 0; index < keys.length; index++) {\n            const value = (record[keys[index]] !== undefined) ? record[keys[index]] : this._isSpecialData ? record : '';\n            recordData[index] = this.processField(value, this._escapeCharacters);\n        }\n\n        return recordData.join('').slice(0, -this._delimiterLength) + this._eor;\n    }\n\n    private processDataRecords(currentData, keys) {\n        const dataRecords = new Array(currentData.length);\n\n        for (let i = 0; i < currentData.length; i++) {\n            const row = currentData[i];\n            dataRecords[i] = this.processRecord(row, keys);\n        }\n\n        return dataRecords.join('');\n    }\n\n    private processDataRecordsAsync(currentData, keys, done: (result: string) => void) {\n        const dataRecords = new Array(currentData.length);\n\n        yieldingLoop(currentData.length, 1000,\n            (i) => {\n                const row = currentData[i];\n                dataRecords[i] = this.processRecord(row, keys);\n            },\n            () => {\n                done(dataRecords.join(''));\n            });\n    }\n\n    private setDelimiter(value) {\n        this._delimiter = value;\n        this._delimiterLength = value.length;\n    }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { DEFAULT_OWNER, ExportHeaderType, ExportRecordType, IColumnInfo, IExportRecord, IgxBaseExporter } from '../exporter-common/base-export-service';\nimport { ExportUtilities } from '../exporter-common/export-utilities';\nimport { CharSeparatedValueData } from './char-separated-value-data';\nimport { CsvFileTypes, IgxCsvExporterOptions } from './csv-exporter-options';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\n\nexport interface ICsvExportEndedEventArgs extends IBaseEventArgs {\n    csvData?: string;\n}\n\n/**\n * **Ignite UI for Angular CSV Exporter Service** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter-csv)\n *\n * The Ignite UI for Angular CSV Exporter service can export data in a Character Separated Values format from\n * both raw data (array) or from an `IgxGrid`.\n *\n * Example:\n * ```typescript\n * public localData = [\n *   { Name: \"Eric Ridley\", Age: \"26\" },\n *   { Name: \"Alanis Brook\", Age: \"22\" },\n *   { Name: \"Jonathan Morris\", Age: \"23\" }\n * ];\n *\n * constructor(private csvExportService: IgxCsvExporterService) {\n * }\n *\n * const opt: IgxCsvExporterOptions = new IgxCsvExporterOptions(\"FileName\", CsvFileTypes.CSV);\n * this.csvExportService.exportData(this.localData, opt);\n * ```\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxCsvExporterService extends IgxBaseExporter {\n    /**\n     * This event is emitted when the export process finishes.\n     * ```typescript\n     * this.exporterService.exportEnded.subscribe((args: ICsvExportEndedEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxCsvExporterService\n     */\n    public override exportEnded = new EventEmitter<ICsvExportEndedEventArgs>();\n\n    private _stringData: string;\n\n    protected exportDataImplementation(data: IExportRecord[], options: IgxCsvExporterOptions, done: () => void) {\n        const firstDataElement = data[0];\n        const dimensionKeys = firstDataElement?.dimensionKeys;\n\n        const dataRecords = dimensionKeys?.length ?\n            data.filter(item => item.type !== ExportRecordType.SummaryRecord).map((item) => item.rawData):\n            data.filter(item => item.type !== ExportRecordType.SummaryRecord).map((item) => item.data);\n\n        // Get summary records if exportSummaries is enabled\n        const summaryRecords: any[] = [];\n        if (options.exportSummaries) {\n            const summaries = data.filter(item => item.type === ExportRecordType.SummaryRecord);\n            for (const summary of summaries) {\n                // Convert summary record data to a flat object format for CSV\n                const summaryData: any = {};\n                if (summary.data) {\n                    for (const [key, value] of Object.entries(summary.data)) {\n                        if (value && typeof value === 'object' && 'label' in value && 'value' in value) {\n                            summaryData[key] = `${value.label}: ${value.value}`;\n                        } else {\n                            summaryData[key] = value;\n                        }\n                    }\n                }\n                summaryRecords.push(summaryData);\n            }\n        }\n\n        // Combine data records and summary records\n        const allRecords = [...dataRecords, ...summaryRecords];\n\n        const columnList = this._ownersMap.get(DEFAULT_OWNER);\n        const columns = columnList?.columns.filter(c => c.headerType === ExportHeaderType.ColumnHeader);\n        if (dimensionKeys) {\n            const dimensionCols = dimensionKeys.map((key) => {\n                const columnInfo: IColumnInfo = {\n                    header: key,\n                    field: key,\n                    dataType: 'string',\n                    skip: false,\n                    headerType: ExportHeaderType.ColumnHeader,\n                    columnSpan: 1,\n                    startIndex: 0\n                };\n                return columnInfo;\n            });\n            columns.unshift(...dimensionCols);\n        }\n\n        const csvData = new CharSeparatedValueData(allRecords, options.valueDelimiter, columns);\n        csvData.prepareDataAsync((r) => {\n            this._stringData = r;\n            this.saveFile(options);\n            this.exportEnded.emit({ csvData: this._stringData });\n            done();\n        }, options.alwaysExportHeaders);\n    }\n\n    private saveFile(options: IgxCsvExporterOptions) {\n        switch (options.fileType) {\n            case CsvFileTypes.CSV:\n                this.exportFile(this._stringData, options.fileName, 'text/csv;charset=utf-8;');\n                break;\n            case CsvFileTypes.TSV:\n            case CsvFileTypes.TAB:\n                this.exportFile(this._stringData, options.fileName, 'text/tab-separated-values;charset=utf-8;');\n                break;\n        }\n    }\n\n    private exportFile(data: string, fileName: string, fileType: string): void {\n        const blob = new Blob([data ? '\\ufeff' : '', data], { type: fileType });\n        ExportUtilities.saveBlobToFile(blob, fileName);\n    }\n}\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { DEFAULT_OWNER, ExportHeaderType, ExportRecordType, GRID_LEVEL_COL, IExportRecord, IgxBaseExporter } from '../exporter-common/base-export-service';\nimport { ExportUtilities } from '../exporter-common/export-utilities';\nimport { IgxPdfExporterOptions } from './pdf-exporter-options';\nimport { IBaseEventArgs } from 'igniteui-angular/core';\nimport type { jsPDF } from 'jspdf';\n\nexport interface IPdfExportEndedEventArgs extends IBaseEventArgs {\n    pdf?: jsPDF;\n}\n\n/**\n * **Ignite UI for Angular PDF Exporter Service** -\n * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter_pdf.html)\n *\n * The Ignite UI for Angular PDF Exporter service can export data in PDF format from both raw data\n * (array) or from an `IgxGrid`.\n *\n * Example:\n * ```typescript\n * public localData = [\n *   { Name: \"Eric Ridley\", Age: \"26\" },\n *   { Name: \"Alanis Brook\", Age: \"22\" },\n *   { Name: \"Jonathan Morris\", Age: \"23\" }\n * ];\n *\n * constructor(private pdfExportService: IgxPdfExporterService) {\n * }\n *\n * this.pdfExportService.exportData(this.localData, new IgxPdfExporterOptions(\"FileName\"));\n * ```\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class IgxPdfExporterService extends IgxBaseExporter {\n\n    /**\n     * This event is emitted when the export process finishes.\n     * ```typescript\n     * this.exporterService.exportEnded.subscribe((args: IPdfExportEndedEventArgs) => {\n     * // put event handler code here\n     * });\n     * ```\n     *\n     * @memberof IgxPdfExporterService\n     */\n    public override exportEnded = new EventEmitter<IPdfExportEndedEventArgs>();\n\n    private _currentFontName = 'helvetica';\n    private _currentBoldFontName = 'helvetica';\n\n    protected exportDataImplementation(data: IExportRecord[], options: IgxPdfExporterOptions, done: () => void): void {\n        const firstDataElement = data[0];\n        const isHierarchicalGrid = firstDataElement?.type === ExportRecordType.HierarchicalGridRecord;\n        const isPivotGrid = firstDataElement?.type === ExportRecordType.PivotGridRecord;\n\n        const defaultOwner =  isHierarchicalGrid ?\n            this._ownersMap.get(firstDataElement.owner) :\n            this._ownersMap.get(DEFAULT_OWNER);\n\n        // Get all columns (including multi-column headers)\n        const allColumns = defaultOwner?.columns.filter(col => !col.skip) || [];\n\n        // Extract pivot grid row dimension fields (these are in the data, rendered as row headers)\n        // For pivot grids, the row dimension fields appear in each record's data\n        const rowDimensionFields: string[] = [];\n        const rowDimensionHeaders: string[] = [];\n        if (isPivotGrid && defaultOwner) {\n            const uniqueFields = new Set<string>();\n\n            // Primary source: use dimensionKeys from the first record (set by base exporter)\n            // This is the authoritative source for dimension field names\n            if (firstDataElement?.dimensionKeys && Array.isArray(firstDataElement.dimensionKeys) && firstDataElement.dimensionKeys.length > 0) {\n                firstDataElement.dimensionKeys.forEach(key => {\n                    if (!uniqueFields.has(key)) {\n                        uniqueFields.add(key);\n                        rowDimensionFields.push(key);\n                    }\n                });\n            }\n\n            // If we still don't have fields, try to get them from the record data\n            if (rowDimensionFields.length === 0 && firstDataElement && firstDataElement.data) {\n                // Fallback: Try to infer dimension keys from the record data structure\n                // Get row dimension columns to understand the structure\n                const rowHeaderCols = allColumns.filter(col =>\n                    (col.headerType === ExportHeaderType.RowHeader ||\n                    col.headerType === ExportHeaderType.MultiRowHeader ||\n                    col.headerType === ExportHeaderType.PivotMergedHeader) &&\n                    !col.skip\n                );\n\n                const recordKeys = Object.keys(firstDataElement.data);\n                // Try to match row dimension columns to record keys\n                rowHeaderCols.forEach(col => {\n                    const fieldName = typeof col.field === 'string' ? col.field : null;\n                    const columnGroup = typeof col.columnGroup === 'string' ? col.columnGroup :\n                                       (typeof col.columnGroupParent === 'string' ? col.columnGroupParent : null);\n                    // Check if the field or column group exists in record data\n                    if (fieldName && recordKeys.includes(fieldName) && !uniqueFields.has(fieldName)) {\n                        uniqueFields.add(fieldName);\n                        rowDimensionFields.push(fieldName);\n                    } else if (columnGroup && recordKeys.includes(columnGroup) && !uniqueFields.has(columnGroup)) {\n                        uniqueFields.add(columnGroup);\n                        rowDimensionFields.push(columnGroup);\n                    }\n                });\n\n                // If still no fields found, use the first few simple keys from record data\n                // (dimension keys are usually simple, aggregation keys are often complex)\n                if (rowDimensionFields.length === 0) {\n                    const simpleKeys = recordKeys.filter(key => {\n                        // Dimension keys are typically simple (no separators, reasonable length)\n                        return !key.includes('-') && !key.includes('_') &&\n                               key.length < 50 &&\n                               key === key.trim();\n                    });\n                    // Take up to the number of row dimensions (usually 1-3)\n                    simpleKeys.slice(0, Math.min(3, simpleKeys.length)).forEach(key => {\n                        if (!uniqueFields.has(key)) {\n                            uniqueFields.add(key);\n                            rowDimensionFields.push(key);\n                        }\n                    });\n                }\n            }\n\n            // Ensure we have at least some fields - if not, we can't display dimension values\n            // In this case, we'll still draw the columns but they'll be empty\n\n            // Get PivotRowHeader columns - these are the dimension names (like \"All My Products\", \"Product\", \"City\")\n            // These should match the enabled row dimensions in order\n            const pivotRowHeaders = allColumns\n                .filter(col => col.headerType === ExportHeaderType.PivotRowHeader)\n                .sort((a, b) => (a.startIndex ?? 0) - (b.startIndex ?? 0));\n\n            // Use PivotRowHeader names as column headers\n            const sortedPivotRowHeaders = pivotRowHeaders.map(col => col.header || col.field).filter(h => h);\n            rowDimensionHeaders.push(...sortedPivotRowHeaders);\n\n            // For hierarchical dimensions, we might need to add child level headers\n            // Check if we have row dimension columns at different levels that aren't covered by PivotRowHeaders\n            if (rowDimensionHeaders.length < rowDimensionFields.length) {\n                // Get row dimension columns to find missing headers\n                const rowHeaderCols = allColumns\n                    .filter(col =>\n                        (col.headerType === ExportHeaderType.RowHeader ||\n                         col.headerType === ExportHeaderType.MultiRowHeader ||\n                         col.headerType === ExportHeaderType.PivotMergedHeader) &&\n                        col.field &&\n                        !col.skip\n                    )\n                    .sort((a, b) => {\n                        const levelDiff = (a.level ?? 0) - (b.level ?? 0);\n                        if (levelDiff !== 0) return levelDiff;\n                        return (a.startIndex ?? 0) - (b.startIndex ?? 0);\n                    });\n\n                // Add missing headers using the header property from row dimension columns\n                const existingHeaders = new Set(rowDimensionHeaders);\n                rowHeaderCols.forEach(col => {\n                    const fieldName = typeof col.field === 'string' ? col.field : null;\n                    const headerName = (typeof col.header === 'string' ? col.header : fieldName) || '';\n                    // If this field is in rowDimensionFields but header is missing, add it\n                    if (fieldName && rowDimensionFields.includes(fieldName) && !existingHeaders.has(headerName)) {\n                        // Only add if we haven't reached the target count\n                        if (rowDimensionHeaders.length < rowDimensionFields.length) {\n                            rowDimensionHeaders.push(headerName);\n                            existingHeaders.add(headerName);\n                        }\n                    }\n                });\n\n                // If still missing, use field names\n                for (let i = rowDimensionHeaders.length; i < rowDimensionFields.length; i++) {\n                    rowDimensionHeaders.push(rowDimensionFields[i]);\n                }\n            } else if (rowDimensionHeaders.length > rowDimensionFields.length) {\n                // Trim excess headers to match fields count\n                rowDimensionHeaders.splice(rowDimensionFields.length);\n            }\n        }\n\n        // Get leaf columns (actual data columns), excluding GRID_LEVEL_COL and row dimension fields\n        // For pivot grids, we need to exclude row dimension fields since they're rendered separately\n        let leafColumns = allColumns.filter(col => {\n            if (col.field === GRID_LEVEL_COL) return false;\n            if (col.headerType !== ExportHeaderType.ColumnHeader) return false;\n            // For pivot grids, exclude row dimension fields from regular columns\n            if (isPivotGrid && rowDimensionFields.includes(col.field)) return false;\n            return true;\n        });\n\n        // Sort leaf columns by startIndex to maintain proper order\n        leafColumns = leafColumns.sort((a, b) => (a.startIndex ?? 0) - (b.startIndex ?? 0));\n\n        // Check if we have multi-level headers\n        const maxLevel = defaultOwner?.maxLevel || 0;\n        const maxRowLevel = defaultOwner?.maxRowLevel || 0;\n        const hasMultiColumnHeaders = maxLevel > 0 && allColumns.some(col => col.headerType === ExportHeaderType.MultiColumnHeader);\n        const hasMultiRowHeaders = maxRowLevel > 0 && rowDimensionFields.length > 0;\n\n        if (leafColumns.length === 0 && data.length > 0 && firstDataElement) {\n            // If no columns are defined, use the keys from the first data record\n            const keys = Object.keys(firstDataElement.data);\n\n            keys.forEach((key) => {\n                leafColumns.push({\n                    header: key,\n                    field: key,\n                    skip: false,\n                    headerType: ExportHeaderType.ColumnHeader,\n                    columnSpan: 1,\n                    startIndex: 0\n                });\n            });\n        }\n        // Dynamically import jsPDF to reduce initial bundle size\n        import('jspdf').then(({ jsPDF }) => {\n            // Create PDF document\n            const pdf = new jsPDF({\n                orientation: options.pageOrientation,\n                unit: 'pt',\n                format: options.pageSize\n            });\n\n            const font = options.customFont;\n            // Add custom Unicode font if provided\n            if (typeof font?.name === 'string' && font.name.trim() && typeof font?.data === 'string' && font.data.trim()) {\n                try {\n                    const fontFileName = `${font.name}.ttf`;\n                    pdf.addFileToVFS(fontFileName, font.data);\n                    pdf.addFont(fontFileName, font.name, 'normal');\n                    this._currentFontName = font.name;\n\n                    // Register bold font if provided\n                    if (typeof font.bold?.name === 'string' && font.bold.name.trim() && typeof font.bold?.data === 'string' && font.bold.data.trim()) {\n                        const boldFontFileName = `${font.bold.name}.ttf`;\n                        pdf.addFileToVFS(boldFontFileName, font.bold.data);\n                        pdf.addFont(boldFontFileName, font.bold.name, 'bold');\n                        this._currentBoldFontName = font.bold.name;\n                    } else {\n                        // If no bold variant provided, use the normal font for bold as well\n                        pdf.addFont(fontFileName, font.name, 'bold');\n                        this._currentBoldFontName = font.name;\n                    }\n                } catch (error) {\n                    console.warn(`Failed to load custom font '${font.name}', falling back to helvetica:`, error);\n                    this._currentFontName = 'helvetica';\n                    this._currentBoldFontName = 'helvetica';\n                }\n            } else if (options.customFont) {\n                console.warn('Custom font configuration is incomplete (missing name or data), falling back to helvetica');\n                this._currentFontName = 'helvetica';\n                this._currentBoldFontName = 'helvetica';\n            }\n\n            const pageWidth = pdf.internal.pageSize.getWidth();\n            const pageHeight = pdf.internal.pageSize.getHeight();\n            const margin = 40;\n            const usableWidth = pageWidth - (2 * margin);\n\n            // Calculate column widths\n            // For pivot grids with row dimensions, we need space for both row dimension columns and data columns\n            // Use the maximum of headers and fields to ensure we have space for all columns\n            // Headers determine how many columns to display, fields determine what data to show\n            const rowDimensionColumnCount = isPivotGrid ? Math.max(rowDimensionHeaders.length, rowDimensionFields.length) : 0;\n            const totalColumns = rowDimensionColumnCount + leafColumns.length;\n            const columnWidth = usableWidth / (totalColumns > 0 ? totalColumns : 1);\n            const rowHeight = 20;\n            const headerHeight = 25;\n            const indentSize = 15; // Indentation per level for hierarchical data (visual indent in first column)\n            const childTableIndent = 30; // Indent for child tables\n\n            let yPosition = margin;\n\n            // Set font\n            pdf.setFontSize(options.fontSize);\n\n            // Draw multi-level headers if present\n            // For pivot grids, always draw row dimension headers if they exist, even if there are no multi-column headers\n            if (hasMultiColumnHeaders || (isPivotGrid && rowDimensionHeaders.length > 0)) {\n                yPosition = this.drawMultiLevelHeaders(\n                    pdf,\n                    allColumns,\n                    rowDimensionHeaders,\n                    maxLevel,\n                    maxRowLevel,\n                    margin,\n                    yPosition,\n                    columnWidth,\n                    headerHeight,\n                    usableWidth,\n                    options,\n                    allColumns\n                );\n            } else {\n                // Draw simple single-level headers\n                this.drawTableHeaders(pdf, leafColumns, rowDimensionHeaders, margin, yPosition, columnWidth, headerHeight, usableWidth, options);\n                yPosition += headerHeight;\n            }\n\n            // Draw data rows\n            pdf.setFont(this._currentFontName, 'normal');\n\n            // Check if this is a tree grid export (tree grids can have both TreeGridRecord and DataRecord types for nested children)\n            const isTreeGridExport = data.some(record => record.type === ExportRecordType.TreeGridRecord);\n\n            // For pivot grids, get row dimension columns to help with value lookup\n            const rowDimensionColumnsByLevel: Map<number, any[]> = new Map();\n            if (isPivotGrid && defaultOwner) {\n                const allRowDimCols = allColumns.filter(col =>\n                    (col.headerType === ExportHeaderType.RowHeader ||\n                    col.headerType === ExportHeaderType.MultiRowHeader ||\n                    col.headerType === ExportHeaderType.PivotMergedHeader) &&\n                    !col.skip\n                );\n                // Group by level\n                allRowDimCols.forEach(col => {\n                    const level = col.level ?? 0;\n                    if (!rowDimensionColumnsByLevel.has(level)) {\n                        rowDimensionColumnsByLevel.set(level, []);\n                    }\n                    rowDimensionColumnsByLevel.get(level)!.push(col);\n                });\n                // Sort each level by startIndex\n                rowDimensionColumnsByLevel.forEach((cols, level) => {\n                    cols.sort((a, b) => (a.startIndex ?? 0) - (b.startIndex ?? 0));\n                });\n            }\n\n            let i = 0;\n            while (i < data.length) {\n                const record = data[i];\n\n                // Skip hidden records (collapsed hierarchy)\n                if (record.hidden) {\n                    i++;\n                    continue;\n                }\n\n                // Check if we need a new page\n                if (yPosition + rowHeight > pageHeight - margin) {\n                    pdf.addPage();\n                    yPosition = margin;\n\n                    // Redraw headers on new page\n                    if (hasMultiColumnHeaders || hasMultiRowHeaders) {\n                        yPosition = this.drawMultiLevelHeaders(\n                            pdf,\n                            allColumns,\n                            rowDimensionHeaders,\n                            maxLevel,\n                            maxRowLevel,\n                            margin,\n                            yPosition,\n                            columnWidth,\n                            headerHeight,\n                            usableWidth,\n                            options,\n                            allColumns\n                        );\n                    } else {\n                        this.drawTableHeaders(pdf, leafColumns, rowDimensionHeaders, margin, yPosition, columnWidth, headerHeight, usableWidth, options);\n                        yPosition += headerHeight;\n                    }\n                }\n\n                // Calculate indentation for hierarchical records\n                // TreeGrid supports both hierarchical data and flat self-referencing data (with foreignKey)\n                // In both cases, the base exporter sets the level property on TreeGridRecord\n                // Note: Nested child records without children are created as DataRecord type,\n                // but they still have a level property and should be treated as tree grid records\n                const recordIsHierarchicalGrid = record.type === 'HierarchicalGridRecord';\n\n                // For tree grids, indentation is visual (in the first column text)\n                // For hierarchical grids, we don't use indentation (level determines column offset instead)\n                // If this is a tree grid export and the record has a level property, use it for indentation\n                const indentLevel = (isTreeGridExport && record.level !== undefined) ? (record.level || 0) : 0;\n                const indent = indentLevel * indentSize;\n\n                // Draw parent row\n                this.drawDataRow(pdf, record, leafColumns, rowDimensionFields, margin, yPosition, columnWidth, rowHeight, indent, options, allColumns, isPivotGrid, rowDimensionColumnsByLevel, i, rowDimensionHeaders);\n                yPosition += rowHeight;\n\n                // For hierarchical grids, check if this record has child records\n                if (recordIsHierarchicalGrid) {\n                    const allDescendants: Array<IExportRecord & { __index: number }> = [];\n\n                    let j = i + 1;\n                    while (j < data.length && data[j].level > record.level) {\n                        if (!data[j].hidden) {\n                            // Attach the original index into data\n                            allDescendants.push({ ...(data[j] as any), __index: j });\n                        }\n                        j++;\n                    }\n\n                    if (allDescendants.length > 0) {\n                        const directDescendantsByOwner = new Map<any, Array<IExportRecord & { __index: number }>>();\n\n                        for (const desc of allDescendants) {\n                            if (desc.level === record.level + 1) {\n                                const owner = desc.owner;\n                                if (!directDescendantsByOwner.has(owner)) {\n                                    directDescendantsByOwner.set(owner, []);\n                                }\n                                directDescendantsByOwner.get(owner)!.push(desc);\n                            }\n                        }\n\n                        for (const [owner, directChildren] of directDescendantsByOwner) {\n                            yPosition = this.drawHierarchicalChildren(\n                                pdf,\n                                data,\n                                allDescendants,   // descendants WITH __index\n                                directChildren,   // direct children WITH __index\n                                owner,\n                                yPosition,\n                                margin,\n                                childTableIndent,\n                                usableWidth,\n                                pageHeight,\n                                headerHeight,\n                                rowHeight,\n                                options\n                            );\n                        }\n\n                        i = j - 1;\n                    }\n                }\n\n                i++;\n            }\n\n            // Save the PDF\n            this.saveFile(pdf, options.fileName);\n            this.exportEnded.emit({ pdf });\n            done();\n        });\n    }\n\n    private drawMultiLevelHeaders(\n        pdf: jsPDF,\n        columns: any[],\n        rowDimensionHeaders: string[],\n        maxLevel: number,\n        maxRowLevel: number,\n        xStart: number,\n        yStart: number,\n        baseColumnWidth: number,\n        headerHeight: number,\n        tableWidth: number,\n        options: IgxPdfExporterOptions,\n        allColumns?: any[]\n    ): number {\n        let yPosition = yStart;\n        pdf.setFont(this._currentBoldFontName, 'bold');\n\n        // First, draw row dimension header labels (for pivot grids) if present\n        // Draw headers if we have any row dimension headers, regardless of maxRowLevel\n        if (rowDimensionHeaders.length > 0 && allColumns) {\n            // Get PivotRowHeader columns - these are the dimension header names\n            const pivotRowHeaderCols = allColumns.filter(col =>\n                col.headerType === ExportHeaderType.PivotRowHeader &&\n                !col.skip\n            ).sort((a, b) => (a.startIndex ?? 0) - (b.startIndex ?? 0));\n\n            // Calculate how many header rows the data columns have (cities + number/value = 2 rows)\n            // The row dimension headers should span across all data column header rows\n            const dataColumnHeaderRows = maxLevel + 1; // maxLevel is 0-based, so +1 gives us the number of rows\n            const rowDimensionHeaderRowSpan = Math.max(dataColumnHeaderRows, 1);\n\n            // Draw each PivotRowHeader with rowSpan to span across data column headers\n            pivotRowHeaderCols.forEach((pivotCol, index) => {\n                const xPosition = xStart + (index * baseColumnWidth);\n                const headerText = pivotCol.header || pivotCol.field || rowDimensionHeaders[index] || '';\n                const width = baseColumnWidth;\n                const height = headerHeight * rowDimensionHeaderRowSpan;\n\n                // Skip if this is a merged/empty header that shouldn't be drawn\n                // PivotMergedHeader columns are typically placeholders and shouldn't be drawn separately\n                // Also skip if header text is empty and it's not a valid header\n                if ((pivotCol.headerType === ExportHeaderType.PivotMergedHeader && !headerText) ||\n                    (!headerText && !pivotCol.header && !pivotCol.field)) {\n                    return;\n                }\n\n                // Set fill color to light gray for header background (explicitly set before each cell)\n                pdf.setFillColor(240, 240, 240);\n                // Set stroke color to black for borders\n                pdf.setDrawColor(0, 0, 0);\n\n                if (options.showTableBorders) {\n                    // Draw filled rectangle for background (light gray)\n                    pdf.rect(xPosition, yPosition, width, height, 'F');\n                    // Draw border (black outline) - this should not fill, just stroke\n                    pdf.rect(xPosition, yPosition, width, height);\n                } else {\n                    // Even without borders, draw background\n                    pdf.rect(xPosition, yPosition, width, height, 'F');\n                }\n\n                // Only draw text if we have content\n                if (headerText) {\n                    // Center text in merged cell\n                    let displayText = headerText;\n                    const maxTextWidth = width - 10;\n\n                    if (pdf.getTextWidth(displayText) > maxTextWidth) {\n                        while (pdf.getTextWidth(displayText + '...') > maxTextWidth && displayText.length > 0) {\n                            displayText = displayText.substring(0, displayText.length - 1);\n                        }\n                        displayText += '...';\n                    }\n\n                    const textWidth = pdf.getTextWidth(displayText);\n                    const textX = xPosition + (width - textWidth) / 2;\n                    const textY = yPosition + (height / 2) + options.fontSize / 3;\n\n                    pdf.text(displayText, textX, textY);\n                }\n            });\n\n            // Don't move yPosition yet - data column headers will be drawn at the same yPosition\n            // We'll move yPosition after drawing all header rows\n        } else if (rowDimensionHeaders.length > 0) {\n            // Fallback: draw simple headers without merging\n            rowDimensionHeaders.forEach((headerText, index) => {\n                const width = baseColumnWidth;\n                const height = headerHeight;\n                const xPosition = xStart + (index * baseColumnWidth);\n\n                if (options.showTableBorders) {\n                    pdf.rect(xPosition, yPosition, width, height, 'F');\n                    pdf.rect(xPosition, yPosition, width, height);\n                }\n\n                // Center text in cell\n                let displayText = headerText || '';\n                const maxTextWidth = width - 10;\n\n                if (pdf.getTextWidth(displayText) > maxTextWidth) {\n                    while (pdf.getTextWidth(displayText + '...') > maxTextWidth && displayText.length > 0) {\n                        displayText = displayText.substring(0, displayText.length - 1);\n                    }\n                    displayText += '...';\n                }\n\n                const textWidth = pdf.getTextWidth(displayText);\n                const textX = xPosition + (width - textWidth) / 2;\n                const textY = yPosition + height / 2 + options.fontSize / 3;\n\n                pdf.text(displayText, textX, textY);\n            });\n            yPosition += headerHeight;\n        }\n\n        // Filter out row header types and GRID_LEVEL_COL from column rendering\n        const columnHeaders = columns.filter(col =>\n            col.headerType !== ExportHeaderType.PivotRowHeader &&\n            col.headerType !== ExportHeaderType.RowHeader &&\n            col.headerType !== ExportHeaderType.MultiRowHeader &&\n            col.headerType !== ExportHeaderType.PivotMergedHeader &&\n            col.field !== GRID_LEVEL_COL\n        );\n\n        const rowDimensionOffset = rowDimensionHeaders.length * baseColumnWidth;\n\n        const totalHeaderLevels = maxLevel + 1;\n\n        // Map layout positions based on actual leaf order so headers align with child data columns\n        const headerLayoutMap = new Map<any, number>();\n        const leafHeaders = columnHeaders\n            .filter(col => col.headerType === ExportHeaderType.ColumnHeader && col.columnSpan > 0)\n            .sort((a, b) => (a.startIndex ?? 0) - (b.startIndex ?? 0));\n\n        leafHeaders.forEach((col, idx) => headerLayoutMap.set(col, idx));\n\n        const resolveLayoutStartIndex = (col: any): number => {\n            if (headerLayoutMap.has(col)) {\n                return headerLayoutMap.get(col)!;\n            }\n\n            if (col.headerType === ExportHeaderType.MultiColumnHeader) {\n                const childColumns = columnHeaders.filter(child =>\n                    child.columnGroupParent === col.columnGroup && child.columnSpan > 0);\n                const childIndices = childColumns.map(child => resolveLayoutStartIndex(child));\n\n                if (childIndices.length > 0) {\n                    const minIndex = Math.min(...childIndices);\n                    headerLayoutMap.set(col, minIndex);\n                    return minIndex;\n                }\n            }\n\n            headerLayoutMap.set(col, 0);\n            return 0;\n        };\n\n        // Draw column headers level by level (from top/parent to bottom/children)\n        for (let level = 0; level <= maxLevel; level++) {\n            // Get headers for this level\n            const headersForLevel = columnHeaders\n                .filter(col =>\n                    col.level === level &&\n                    (col.headerType === ExportHeaderType.MultiColumnHeader || col.headerType === ExportHeaderType.ColumnHeader)\n                )\n                .filter(col => col.columnSpan > 0);\n\n            if (headersForLevel.length === 0) {\n                yPosition += headerHeight;\n                continue;\n            }\n\n            // Sort by startIndex to maintain order\n            headersForLevel.sort((a, b) => a.startIndex - b.startIndex);\n\n            // Draw each header in this level\n            headersForLevel.forEach((col, idx) => {\n                const colSpan = col.columnSpan || 1;\n                const width = baseColumnWidth * colSpan;\n                const normalizedStartIndex = resolveLayoutStartIndex(col);\n                const xPosition = xStart + rowDimensionOffset + (normalizedStartIndex * baseColumnWidth);\n                const rowSpan = col.headerType === ExportHeaderType.ColumnHeader ?\n                    Math.max(1, (totalHeaderLevels - (col.level ?? 0))) :\n                    1;\n                const height = headerHeight * rowSpan;\n\n                if (options.showTableBorders) {\n                    pdf.setFillColor(240, 240, 240);\n                    pdf.setDrawColor(0, 0, 0);\n                    pdf.rect(xPosition, yPosition, width, height, 'F');\n                    pdf.rect(xPosition, yPosition, width, height);\n                }\n\n                // Center text in cell with truncation if needed\n                let headerText = col.header || col.field || '';\n                const maxTextWidth = width - 10; // Leave 5px padding on each side\n\n                // Truncate text if it's too long\n                if (pdf.getTextWidth(headerText) > maxTextWidth) {\n                    while (pdf.getTextWidth(headerText + '...') > maxTextWidth && headerText.length > 0) {\n                        headerText = headerText.substring(0, headerText.length - 1);\n                    }\n                    headerText += '...';\n                }\n\n                const textWidth = pdf.getTextWidth(headerText);\n                const textX = xPosition + (width - textWidth) / 2;\n                const textY = yPosition + (height / 2) + options.fontSize / 3;\n\n                pdf.text(headerText, textX, textY);\n            });\n\n            yPosition += headerHeight;\n        }\n\n        // After drawing all headers, move yPosition down by the total header height\n        // For pivot grids with row dimension headers, this should be the max of row dimension header height and data column header height\n        if (rowDimensionHeaders.length > 0 && allColumns) {\n            const dataColumnHeaderRows = maxLevel + 1;\n            const rowDimensionHeaderRowSpan = Math.max(dataColumnHeaderRows, 1);\n            const totalHeaderHeight = headerHeight * rowDimensionHeaderRowSpan;\n            yPosition = yStart + totalHeaderHeight;\n        }\n\n        pdf.setFont(this._currentFontName, 'normal');\n        return yPosition;\n    }\n\n    private drawHierarchicalChildren(\n        pdf: jsPDF,\n        allData: IExportRecord[],\n        allDescendants: any[], // All descendants to search for grandchildren\n        childRecords: IExportRecord[], // Direct children to render at this level\n        childOwner: any, // Owner is the island object, not a string\n        yPosition: number,\n        margin: number,\n        indentPerLevel: number,\n        usableWidth: number,\n        pageHeight: number,\n        headerHeight: number,\n        rowHeight: number,\n        options: IgxPdfExporterOptions\n    ): number {\n        // Get columns for this child owner\n        const childOwnerObj = this._ownersMap.get(childOwner);\n\n        const allChildColumns = childOwnerObj?.columns.filter(\n            col => col.field !== GRID_LEVEL_COL && !col.skip\n        ) || [];\n\n        const childColumns = allChildColumns.filter(\n            col => col.headerType === ExportHeaderType.ColumnHeader\n        );\n\n        if (childColumns.length === 0) {\n            return yPosition;\n        }\n\n        // Filter out header records - they should not be rendered as data rows\n        const dataRecords = childRecords.filter(r => r.type !== 'HeaderRecord');\n\n        if (dataRecords.length === 0) {\n            return yPosition;\n        }\n\n        // Add some spacing before child table\n        yPosition += 5;\n\n        // Calculate available width after indentation\n        const availableWidth = usableWidth - indentPerLevel;\n\n        // Calculate total column span for proper width distribution\n        const maxLevel = childOwnerObj?.maxLevel || 0;\n\n        // Fix startIndex for all child columns\n        let currentIndex = 0;\n        for (const col of allChildColumns) {\n            if (col.level === 0 && (col.headerType === ExportHeaderType.MultiColumnHeader || col.headerType === ExportHeaderType.ColumnHeader)) {\n                col.startIndex = currentIndex;\n                currentIndex += col.columnSpan || 1;\n            }\n        }\n\n        let totalColumnSpan = 0;\n        if (maxLevel > 0) {\n            const baseLevelColumns = allChildColumns.filter(col =>\n                col.level === 0 &&\n                (col.headerType === ExportHeaderType.MultiColumnHeader || col.headerType === ExportHeaderType.ColumnHeader)\n            );\n            totalColumnSpan = baseLevelColumns.reduce((sum, col) => sum + (col.columnSpan || 1), 0);\n        } else {\n            totalColumnSpan = childColumns.length;\n        }\n\n        // Recalculate column width based on child's column count and available width\n        const childColumnWidth = availableWidth / totalColumnSpan;\n        const actualChildTableWidth = childColumnWidth * totalColumnSpan;\n        const childTableX = margin + indentPerLevel;\n\n        // Check if we need a new page for headers\n        if (yPosition + headerHeight > pageHeight - margin) {\n            pdf.addPage();\n            yPosition = margin;\n        }\n\n        // Draw child table headers\n        const hasMultiColumnHeaders = maxLevel > 0 && childOwnerObj.columns.some(col => col.headerType === ExportHeaderType.MultiColumnHeader);\n\n        if (hasMultiColumnHeaders) {\n            yPosition = this.drawMultiLevelHeaders(\n                pdf,\n                allChildColumns,\n                [], // rowDimensionHeaders, if any\n                maxLevel,\n                0, // maxRowLevel\n                childTableX,\n                yPosition,\n                childColumnWidth,\n                headerHeight,\n                actualChildTableWidth,\n                options\n            );\n        } else {\n            this.drawTableHeaders(pdf, childColumns, [], childTableX, yPosition, childColumnWidth, headerHeight, actualChildTableWidth, options);\n            yPosition += headerHeight;\n        }\n\n        // Find the minimum level in these records (direct children of parent)\n        const minLevel = Math.min(...dataRecords.map(r => r.level));\n\n        // Process each record at the minimum level (direct children)\n        const directChildren = dataRecords.filter(r => r.level === minLevel);\n\n        for (const childRecord of directChildren) {\n            // Check if we need a new page\n            if (yPosition + rowHeight > pageHeight - margin) {\n                pdf.addPage();\n                yPosition = margin;\n                // Redraw headers on new page\n                if (hasMultiColumnHeaders) {\n                    yPosition = this.drawMultiLevelHeaders(\n                        pdf, allChildColumns, [], maxLevel, 0,\n                        childTableX, yPosition, childColumnWidth, headerHeight,\n                        actualChildTableWidth, options\n                    );\n                } else {\n                    this.drawTableHeaders(pdf, childColumns, [], childTableX, yPosition, childColumnWidth, headerHeight, actualChildTableWidth, options);\n                    yPosition += headerHeight;\n                }\n            }\n\n            // Draw the child record\n            this.drawDataRow(pdf, childRecord, childColumns, [], childTableX, yPosition, childColumnWidth, rowHeight, 0, options);\n            yPosition += rowHeight;\n\n            // allDescendants here is an array of records with an extra __index property\n            const childIndex = (childRecord as any).__index as number | undefined;\n\n            if (childIndex !== undefined) {\n                // Find this child's position in allDescendants (by original index)\n                const childPosInDesc = allDescendants.findIndex(d => d.__index === childIndex);\n\n                if (childPosInDesc !== -1) {\n                    const subtree: Array<IExportRecord & { __index: number }> = [];\n                    const childLevel = childRecord.level;\n\n                    // Collect all deeper records until we hit same-or-higher level\n                    for (let k = childPosInDesc + 1; k < allDescendants.length; k++) {\n                        const rec = allDescendants[k];\n                        if (rec.level <= childLevel) {\n                            break;\n                        }\n                        if (rec.type !== 'HeaderRecord') {\n                            subtree.push(rec);\n                        }\n                    }\n\n                    if (subtree.length > 0) {\n                        // Direct grandchildren for this child: exactly one level deeper\n                        const grandchildrenForThisRecord = subtree.filter(r =>\n                            r.level === childRecord.level + 1 && r.owner !== childOwner\n                        );\n\n                        if (grandchildrenForThisRecord.length > 0) {\n                            const grandchildrenByOwner = new Map<any, Array<IExportRecord & { __index: number }>>();\n\n                            for (const gc of grandchildrenForThisRecord) {\n                                const gcOwner = gc.owner;\n                                if (!grandchildrenByOwner.has(gcOwner)) {\n                                    grandchildrenByOwner.set(gcOwner, []);\n                                }\n                                grandchildrenByOwner.get(gcOwner)!.push(gc);\n                            }\n\n                            for (const [gcOwner, directGrandchildren] of grandchildrenByOwner) {\n                                yPosition = this.drawHierarchicalChildren(\n                                    pdf,\n                                    allData,\n                                    subtree,            // only this child's subtree for deeper levels\n                                    directGrandchildren,\n                                    gcOwner,\n                                    yPosition,\n                                    margin,\n                                    indentPerLevel + 20,\n                                    usableWidth,\n                                    pageHeight,\n                                    headerHeight,\n                                    rowHeight,\n                                    options\n                                );\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        // Add spacing after child table\n        yPosition += 5;\n\n        return yPosition;\n    }\n\n    private drawTableHeaders(\n        pdf: jsPDF,\n        columns: any[],\n        rowDimensionHeaders: string[],\n        xStart: number,\n        yPosition: number,\n        columnWidth: number,\n        headerHeight: number,\n        tableWidth: number,\n        options: IgxPdfExporterOptions\n    ): void {\n        pdf.setFont(this._currentBoldFontName, 'bold');\n        pdf.setFillColor(240, 240, 240);\n\n        if (options.showTableBorders) {\n            pdf.rect(xStart, yPosition, tableWidth, headerHeight, 'F');\n        }\n\n        // Draw row dimension headers first (for pivot grids)\n        rowDimensionHeaders.forEach((headerText, index) => {\n            const xPosition = xStart + (index * columnWidth);\n            let displayText = headerText;\n\n            if (options.showTableBorders) {\n                pdf.rect(xPosition, yPosition, columnWidth, headerHeight);\n            }\n\n            // Truncate text if it's too long\n            const maxTextWidth = columnWidth - 10;\n            if (pdf.getTextWidth(displayText) > maxTextWidth) {\n                while (pdf.getTextWidth(displayText + '...') > maxTextWidth && displayText.length > 0) {\n                    displayText = displayText.substring(0, displayText.length - 1);\n                }\n                displayText += '...';\n            }\n\n            // Center text in cell\n            const textWidth = pdf.getTextWidth(displayText);\n            const textX = xPosition + (columnWidth - textWidth) / 2;\n            const textY = yPosition + headerHeight / 2 + options.fontSize / 3;\n\n            pdf.text(displayText, textX, textY);\n        });\n\n        const rowDimensionOffset = rowDimensionHeaders.length * columnWidth;\n\n        // Draw data column headers\n        columns.forEach((col, index) => {\n            // Skip GRID_LEVEL_COL - it shouldn't be rendered\n            if (col.field === GRID_LEVEL_COL) {\n                return;\n            }\n\n            const xPosition = xStart + rowDimensionOffset + (index * columnWidth);\n            let headerText = col.header || col.field;\n\n            if (options.showTableBorders) {\n                pdf.rect(xPosition, yPosition, columnWidth, headerHeight);\n            }\n\n            // Truncate text if it's too long\n            const maxTextWidth = columnWidth - 10; // Leave 5px padding on each side\n            if (pdf.getTextWidth(headerText) > maxTextWidth) {\n                while (pdf.getTextWidth(headerText + '...') > maxTextWidth && headerText.length > 0) {\n                    headerText = headerText.substring(0, headerText.length - 1);\n                }\n                headerText += '...';\n            }\n\n            // Center text in cell\n            const textWidth = pdf.getTextWidth(headerText);\n            const textX = xPosition + (columnWidth - textWidth) / 2;\n            const textY = yPosition + headerHeight / 2 + options.fontSize / 3;\n\n            pdf.text(headerText, textX, textY);\n        });\n\n        pdf.setFont(this._currentFontName, 'normal');\n    }\n\n    private drawDataRow(\n        pdf: jsPDF,\n        record: IExportRecord,\n        columns: any[],\n        rowDimensionFields: string[],\n        xStart: number,\n        yPosition: number,\n        columnWidth: number,\n        rowHeight: number,\n        indent: number,\n        options: IgxPdfExporterOptions,\n        allColumns?: any[],\n        isPivotGrid?: boolean,\n        rowDimensionColumnsByLevel?: Map<number, any[]>,\n        recordIndex?: number,\n        rowDimensionHeaders?: string[]\n    ): void {\n        const isSummaryRecord = record.type === 'SummaryRecord';\n\n        // Draw row dimension cells first (for pivot grids)\n        // For pivot grids, the row dimension columns have 'header' property that contains the actual dimension values\n        // Use the maximum of fields and headers to ensure we draw all columns\n        const maxRowDimCols = Math.max(rowDimensionFields.length, rowDimensionHeaders?.length || 0);\n        for (let index = 0; index < maxRowDimCols; index++) {\n            const xPosition = xStart + (index * columnWidth);\n            let cellValue: any = null;\n\n            // Primary approach: Get the value from row dimension columns' header property\n            // The row dimension columns are created with header = actual dimension value to display\n            if (isPivotGrid && allColumns) {\n                // Get all row dimension columns sorted by level and startIndex\n                const allRowDimCols = allColumns.filter(col =>\n                    (col.headerType === ExportHeaderType.RowHeader ||\n                     col.headerType === ExportHeaderType.MultiRowHeader ||\n                     col.headerType === ExportHeaderType.PivotMergedHeader) &&\n                    !col.skip\n                ).sort((a, b) => {\n                    const levelDiff = (a.level ?? 0) - (b.level ?? 0);\n                    if (levelDiff !== 0) return levelDiff;\n                    return (a.startIndex ?? 0) - (b.startIndex ?? 0);\n                });\n\n                // For hierarchical dimensions, match columns by level\n                // The index corresponds to the dimension level (0 = first dimension, 1 = second, etc.)\n                const colsForLevel = allRowDimCols.filter(col => (col.level ?? 0) === index);\n\n                // The row dimension columns are created in the same order as records appear\n                // We can use the record index to find the corresponding column\n                // However, for hierarchical dimensions, we need to account for row spans\n                if (colsForLevel.length > 0) {\n                    // Try to find the column that matches this record\n                    // First, try matching by checking if column field/header matches record data\n                    let matchedCol = null;\n                    if (record.data) {\n                        for (const col of colsForLevel) {\n                            const colField = typeof col.field === 'string' ? col.field : null;\n                            const colHeader = typeof col.header === 'string' ? col.header : null;\n\n                            // Check if column field exists as a key in record data\n                            if (colField && record.data[colField] !== undefined) {\n                                matchedCol = col;\n                                break;\n                            }\n                            // Check if column header matches a value in record data\n                            if (colHeader) {\n                                const recordValues = Object.values(record.data).map(v => String(v));\n                                if (recordValues.includes(colHeader)) {\n                                    matchedCol = col;\n                                    break;\n                                }\n                            }\n                        }\n                    }\n\n                    // If no match found, try to use record index to select column\n                    // This works because columns are created in the same order as records\n                    if (!matchedCol && recordIndex !== undefined) {\n                        // For hierarchical dimensions with row spans, we need to account for that\n                        // For now, use a simple index-based approach\n                        const colIndex = Math.min(recordIndex, colsForLevel.length - 1);\n                        matchedCol = colsForLevel[colIndex];\n                    }\n\n                    // If still no match, use the first column at this level\n                    if (!matchedCol && colsForLevel.length > 0) {\n                        matchedCol = colsForLevel[0];\n                    }\n\n                    // Use the header property - it contains the actual dimension value to display\n                    if (matchedCol) {\n                        if (matchedCol.header && typeof matchedCol.header === 'string') {\n                            cellValue = matchedCol.header;\n                        } else if (matchedCol.field && typeof matchedCol.field === 'string') {\n                            cellValue = matchedCol.field;\n                        }\n                    }\n                }\n            }\n\n            // Fallback: Try to get value using dimensionKeys (member names as keys in record.data)\n            if ((cellValue === null || cellValue === undefined) && record.data) {\n                const fieldName = rowDimensionFields[index];\n                if (fieldName) {\n                    cellValue = record.data[fieldName];\n                }\n            }\n\n            // Last resort: Try to find it by checking all keys in record data\n            if ((cellValue === null || cellValue === undefined) && record.data) {\n                const recordKeys = Object.keys(record.data);\n                const fieldName = rowDimensionFields[index];\n\n                // If we have a fieldName, try exact and fuzzy matching\n                if (fieldName) {\n                    const matchingKey = recordKeys.find(key =>\n                        key.toLowerCase() === fieldName.toLowerCase() ||\n                        key === fieldName ||\n                        fieldName.toLowerCase().includes(key.toLowerCase()) ||\n                        key.toLowerCase().includes(fieldName.toLowerCase())\n                    );\n                    if (matchingKey) {\n                        cellValue = record.data[matchingKey];\n                    }\n                }\n\n                // For hierarchical dimensions, try using dimension keys by index\n                if ((cellValue === null || cellValue === undefined) && isPivotGrid && recordKeys.length > 0) {\n                    const possibleDimKeys = recordKeys.filter(key => {\n                        return !key.includes('-') && !key.includes('_') &&\n                               key === key.trim() &&\n                               key.length < 50;\n                    });\n\n                    if (possibleDimKeys.length > index) {\n                        cellValue = record.data[possibleDimKeys[index]];\n                    } else if (possibleDimKeys.length > 0) {\n                        cellValue = record.data[possibleDimKeys[0]];\n                    }\n                }\n            }\n\n            // Convert value to string\n            if (cellValue === null || cellValue === undefined) {\n                cellValue = '';\n            } else if (cellValue instanceof Date) {\n                cellValue = cellValue.toLocaleDateString();\n            } else {\n                cellValue = String(cellValue);\n            }\n\n            if (options.showTableBorders) {\n                pdf.setFillColor(255, 255, 255);\n                pdf.setDrawColor(0, 0, 0);\n                pdf.rect(xPosition, yPosition, columnWidth, rowHeight);\n            }\n\n            // Truncate text if it's too long\n            const maxTextWidth = columnWidth - 10;\n            let displayText = cellValue;\n\n            if (pdf.getTextWidth(displayText) > maxTextWidth) {\n                while (pdf.getTextWidth(displayText + '...') > maxTextWidth && displayText.length > 0) {\n                    displayText = displayText.substring(0, displayText.length - 1);\n                }\n                displayText += '...';\n            }\n\n            const textY = yPosition + rowHeight / 2 + options.fontSize / 3;\n            pdf.text(displayText, xPosition + 5, textY);\n        }\n\n        const rowDimensionOffset = maxRowDimCols * columnWidth;\n\n        // Draw data columns\n        columns.forEach((col, index) => {\n            // Skip GRID_LEVEL_COL - it's an internal column\n            if (col.field === GRID_LEVEL_COL) {\n                return;\n            }\n\n            const xPosition = xStart + rowDimensionOffset + (index * columnWidth);\n            let cellValue = record.data[col.field];\n\n            // Handle summary records - cellValue is an IgxSummaryResult object\n            if (isSummaryRecord && cellValue) {\n                // For summary records, the cellValue has label and value properties\n                // or it might be summaryResult property\n                if (cellValue.label !== undefined || cellValue.value !== undefined) {\n                    const label = cellValue.label?.toString() || '';\n                    const value = cellValue.value?.toString() || cellValue.summaryResult?.toString() || '';\n                    if (label && value) {\n                        cellValue = `${label}: ${value}`;\n                    } else if (label) {\n                        cellValue = label;\n                    } else if (value) {\n                        cellValue = value;\n                    } else {\n                        cellValue = '';\n                    }\n                } else if (cellValue.summaryResult !== undefined) {\n                    cellValue = cellValue.summaryResult;\n                }\n            }\n\n            // Convert value to string\n            if (cellValue === null || cellValue === undefined) {\n                cellValue = '';\n            } else if (cellValue instanceof Date) {\n                cellValue = cellValue.toLocaleDateString();\n            } else {\n                cellValue = String(cellValue);\n            }\n\n            if (options.showTableBorders) {\n                pdf.setFillColor(255, 255, 255);\n                pdf.setDrawColor(0, 0, 0);\n                pdf.rect(xPosition, yPosition, columnWidth, rowHeight);\n            }\n\n            // Apply indentation to the first column for hierarchical data\n            const textIndent = (index === 0) ? indent : 0;\n\n            // Truncate text if it's too long, accounting for indentation\n            const maxTextWidth = columnWidth - 10 - textIndent;\n            let displayText = cellValue;\n\n            if (pdf.getTextWidth(displayText) > maxTextWidth) {\n                while (pdf.getTextWidth(displayText + '...') > maxTextWidth && displayText.length > 0) {\n                    displayText = displayText.substring(0, displayText.length - 1);\n                }\n                displayText += '...';\n            }\n\n            const textY = yPosition + rowHeight / 2 + options.fontSize / 3;\n            pdf.text(displayText, xPosition + 5 + textIndent, textY);\n        });\n    }\n\n    private saveFile(pdf: jsPDF, fileName: string): void {\n        const blob = pdf.output('blob');\n        ExportUtilities.saveBlobToFile(blob, fileName);\n    }\n}\n","import { Component, Input, Output, EventEmitter, booleanAttribute, inject } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { BaseToolbarDirective } from './grid-toolbar.base';\nimport { IgxExcelTextDirective, IgxCSVTextDirective, IgxPdfTextDirective } from './common';\nimport { GridType } from '../common/grid.interface';\nimport { IgxButtonDirective, IgxRippleDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { CsvFileTypes, IgxCsvExporterOptions } from '../services/csv/csv-exporter-options';\nimport { IgxExcelExporterOptions } from '../services/excel/excel-exporter-options';\nimport { IgxPdfExporterOptions } from '../services/pdf/pdf-exporter-options';\nimport { IgxBaseExporter } from '../services/exporter-common/base-export-service';\nimport { IgxExcelExporterService } from '../services/excel/excel-exporter';\nimport { IgxCsvExporterService } from '../services/csv/csv-exporter';\nimport { IgxPdfExporterService } from '../services/pdf/pdf-exporter';\n\nexport type IgxExporterOptions = IgxCsvExporterOptions | IgxExcelExporterOptions | IgxPdfExporterOptions;\n\n/* jsonAPIComplexObject */\n/* wcAlternateName: ExporterEventArgs */\nexport interface IgxExporterEvent {\n    exporter: IgxBaseExporter;\n    /* alternateType: ExporterOptionsBase */\n    options: IgxExporterOptions;\n    grid: GridType;\n    cancel: boolean;\n}\n\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-exporter */\n/* blazorIndirectRender */\n/* jsonAPIManageItemInMarkup */\n/* singleInstanceIdentifier */\n/**\n * Provides a pre-configured exporter component for the grid.\n *\n * @remarks\n * This component still needs the actual exporter service(s) provided in the DI chain\n * in order to export something.\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent, IgxGridToolbarActionsComponent\n *\n */\n@Component({\n    selector: 'igx-grid-toolbar-exporter',\n    templateUrl: './grid-toolbar-exporter.component.html',\n    imports: [IgxButtonDirective, IgxRippleDirective, IgxIconComponent, IgxToggleDirective, IgxExcelTextDirective, IgxCSVTextDirective, IgxPdfTextDirective]\n})\nexport class IgxGridToolbarExporterComponent extends BaseToolbarDirective {\n    private excelExporter = inject(IgxExcelExporterService);\n    private csvExporter = inject(IgxCsvExporterService);\n    private pdfExporter = inject(IgxPdfExporterService);\n\n    /**\n     * Show entry for CSV export.\n     */\n    @Input({ transform: booleanAttribute })\n    public exportCSV = true;\n\n    /**\n     * Show entry for Excel export.\n     */\n    @Input({ transform: booleanAttribute })\n    public exportExcel = true;\n\n    /**\n     * Show entry for PDF export.\n     */\n    @Input({ transform: booleanAttribute })\n    public exportPDF = true;\n\n    /**\n     * The name for the exported file.\n     */\n    @Input()\n    public filename = 'ExportedData';\n\n    /**\n     * Emitted when starting an export operation. Re-emitted additionally\n     * by the grid itself.\n     */\n    @Output()\n    public exportStarted = new EventEmitter<IgxExporterEvent>();\n\n    /**\n     * Emitted on successful ending of an export operation.\n     */\n    @Output()\n    public exportEnded = new EventEmitter<void>();\n\n    /**\n     * Indicates whether there is an export in progress.\n     */\n    protected isExporting = false;\n\n    protected exportClicked(type: 'excel' | 'csv' | 'pdf', toggleRef?: IgxToggleDirective) {\n        toggleRef?.close();\n        this.export(type);\n    }\n\n    /* alternateName: exportGrid */\n    /**\n     * Export the grid's data\n     * @param type File type to export\n     */\n    public export(type: 'excel' | 'csv' | 'pdf'): void {\n        let options: IgxExporterOptions;\n        let exporter: IgxBaseExporter;\n\n        switch (type) {\n            case 'csv':\n                options = new IgxCsvExporterOptions(this.filename, CsvFileTypes.CSV);\n                exporter = this.csvExporter;\n                break;\n            case 'excel':\n                options = new IgxExcelExporterOptions(this.filename);\n                exporter = this.excelExporter;\n                break;\n            case 'pdf':\n                options = new IgxPdfExporterOptions(this.filename);\n                exporter = this.pdfExporter;\n        }\n\n        const args = { exporter, options, grid: this.grid, cancel: false } as IgxExporterEvent;\n\n        this.exportStarted.emit(args);\n        this.grid.toolbarExporting.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n\n        this.isExporting = true;\n        this.toolbar.showProgress = true;\n\n        exporter.exportEnded.pipe(first()).subscribe(() => {\n            this.exportEnded.emit();\n            this.isExporting = false;\n            this.toolbar.showProgress = false;\n        });\n\n        exporter.export(this.grid, options);\n    }\n}\n","<button [title]=\"grid?.resourceStrings.igx_grid_toolbar_exporter_button_tooltip\" [disabled]=\"isExporting\"\n    igxButton=\"outlined\" type=\"button\" igxRipple #btn (click)=\"toggle(btn, toggleRef)\">\n\n    <igx-icon family=\"default\" name=\"file_download\"></igx-icon>\n    <span #ref>\n        <ng-content></ng-content>\n    </span>\n    @if (!ref.textContent.trim()) {\n        <span>\n            {{ grid?.resourceStrings.igx_grid_toolbar_exporter_button_label }}\n        </span>\n    }\n    <igx-icon family=\"default\" name=\"arrow_drop_down\"></igx-icon>\n</button>\n\n<div class=\"igx-grid-toolbar__dropdown\" id=\"btnExport\">\n    <ul class=\"igx-grid-toolbar__dd-list\" igxToggle #toggleRef=\"toggle\">\n        @if (exportExcel) {\n            <li #btnExportExcel id=\"btnExportExcel\"\n                class=\"igx-grid-toolbar__dd-list-items\" igxRipple (click)=\"exportClicked('excel', toggleRef)\">\n                <span #excel>\n                    <ng-content select=[excelText],excel-text></ng-content>\n                </span>\n                @if (!excel.childNodes.length) {\n                    <excel-text>\n                        {{ grid?.resourceStrings.igx_grid_toolbar_exporter_excel_entry_text}}\n                    </excel-text>\n                }\n            </li>\n        }\n\n        @if (exportCSV) {\n            <li #btnExportCsv id=\"btnExportCsv\" class=\"igx-grid-toolbar__dd-list-items\"\n                igxRipple (click)=\"exportClicked('csv', toggleRef)\">\n                <span #csv>\n                    <ng-content select=[csvText],csv-text></ng-content>\n                </span>\n                @if (!csv.childNodes.length) {\n                    <csv-text>\n                        {{ grid?.resourceStrings.igx_grid_toolbar_exporter_csv_entry_text }}\n                    </csv-text>\n                }\n            </li>\n        }\n\n        @if (exportPDF) {\n            <li #btnExportPdf id=\"btnExportPdf\" class=\"igx-grid-toolbar__dd-list-items\"\n                igxRipple (click)=\"exportClicked('pdf', toggleRef)\">\n                <span #pdf>\n                    <ng-content select=[pdfText],pdf-text></ng-content>\n                </span>\n                @if (!pdf.childNodes.length) {\n                    <pdf-text>\n                        {{ grid?.resourceStrings.igx_grid_toolbar_exporter_pdf_entry_text }}\n                    </pdf-text>\n                }\n            </li>\n        }\n    </ul>\n</div>\n","import { Component, ViewChild } from '@angular/core';\nimport { IgxColumnActionsComponent } from '../column-actions/column-actions.component';\nimport { IgxColumnHidingDirective } from '../column-actions/column-hiding.directive';\nimport { BaseToolbarColumnActionsDirective } from './grid-toolbar.base';\nimport { AsyncPipe } from '@angular/common';\nimport { IgxButtonDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\n\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-hiding */\n/* blazorIndirectRender */\n/* jsonAPIManageItemInMarkup */\n/* singleInstanceIdentifier */\n/**\n * Provides a pre-configured column hiding component for the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent, IgxGridToolbarActionsComponent\n *\n * @example\n * ```html\n *  <igx-grid-toolbar-hiding></igx-grid-toolbar-hiding>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-hiding',\n    templateUrl: './grid-toolbar-hiding.component.html',\n    imports: [IgxButtonDirective, IgxIconComponent, IgxColumnActionsComponent, IgxColumnHidingDirective, IgxToggleDirective, AsyncPipe]\n})\nexport class IgxGridToolbarHidingComponent extends BaseToolbarColumnActionsDirective {\n\n    @ViewChild(IgxColumnHidingDirective, {read: IgxColumnActionsComponent})\n    private set content(content: IgxColumnActionsComponent) {\n        this.columnActionsUI = content;\n    }\n}\n","@if (grid.rendered$ | async) {\n    <button\n        [title]=\"grid?.resourceStrings.igx_grid_toolbar_hiding_button_tooltip\"\n        #btn\n        igxButton=\"outlined\"\n        type=\"button\"\n        name=\"btnColumnHiding\" (click)=\"toggle(btn, ref, actions)\">\n        <igx-icon\n            family=\"default\"\n            [name]=\"!grid.hiddenColumnsCount ? 'show' : 'hide'\">\n        </igx-icon>\n        <span>{{ grid.hiddenColumnsCount }}</span>\n        <span>{{ buttonText }}</span>\n    </button>\n    <igx-column-actions #actions igxColumnHiding igxToggle (opened)=\"focusSearch(ref.element)\" #ref=\"toggle\"\n        [grid]=\"grid\" [title]=\"title || grid?.resourceStrings.igx_grid_toolbar_hiding_title\"\n        [filterColumnsPrompt]=\"prompt || grid?.resourceStrings.igx_grid_toolbar_actions_filter_prompt\"\n        [hideFilter]=\"hideFilter\" [filterCriteria]=\"filterCriteria\" [columnDisplayOrder]=\"columnDisplayOrder\" [columnsAreaMaxHeight]=\"columnsAreaMaxHeight\"\n        [uncheckAllText]=\"uncheckAllText\" [checkAllText]=\"checkAllText\" [indentation]=\"indentetion\">\n    </igx-column-actions>\n}\n","import { Component, ViewChild } from '@angular/core';\nimport { IgxColumnActionsComponent } from '../column-actions/column-actions.component';\nimport { IgxColumnPinningDirective } from '../column-actions/column-pinning.directive';\nimport { BaseToolbarColumnActionsDirective } from './grid-toolbar.base';\nimport { AsyncPipe } from '@angular/common';\nimport { IgxButtonDirective, IgxToggleDirective } from 'igniteui-angular/directives';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\n\n/* blazorElement */\n/* wcElementTag: igc-grid-toolbar-pinning */\n/* singleInstanceIdentifier */\n/* blazorIndirectRender */\n/* jsonAPIManageItemInMarkup */\n/**\n * Provides a pre-configured column pinning component for the grid.\n *\n *\n * @igxModule IgxGridToolbarModule\n * @igxParent IgxGridToolbarComponent, IgxGridToolbarActionsComponent\n *\n * @example\n * ```html\n *  <igx-grid-toolbar-pinning></igx-grid-toolbar-pinning>\n * ```\n */\n@Component({\n    selector: 'igx-grid-toolbar-pinning',\n    templateUrl: './grid-toolbar-pinning.component.html',\n    imports: [IgxButtonDirective, IgxIconComponent, IgxColumnActionsComponent, IgxColumnPinningDirective, IgxToggleDirective, AsyncPipe]\n})\nexport class IgxGridToolbarPinningComponent extends BaseToolbarColumnActionsDirective {\n\n    @ViewChild(IgxColumnPinningDirective, {read: IgxColumnActionsComponent})\n    private set content(content: IgxColumnActionsComponent) {\n        this.columnActionsUI = content;\n    }\n}\n","@if (grid.rendered$ | async) {\n    <button\n        [title]=\"grid?.resourceStrings.igx_grid_toolbar_pinning_button_tooltip\"\n        #btn\n        igxButton=\"outlined\"\n        type=\"button\"\n        name=\"btnColumnPinning\" (click)=\"toggle(btn, ref, actions)\">\n        <igx-icon\n            family=\"default\"\n            [name]=\"!grid.pinnedColumnsCount ? 'unpin' : 'pin'\">\n        </igx-icon>\n        <span>{{ grid.pinnedColumnsCount }}</span>\n        <span>{{ buttonText }}</span>\n    </button>\n    <igx-column-actions #actions igxColumnPinning igxToggle (opened)=\"focusSearch(ref.element)\" #ref=\"toggle\"\n        [grid]=\"grid\" [title]=\"title || grid?.resourceStrings.igx_grid_toolbar_pinning_title\"\n        [filterColumnsPrompt]=\"prompt || grid?.resourceStrings.igx_grid_toolbar_actions_filter_prompt\"\n        [hideFilter]=\"hideFilter\" [filterCriteria]=\"filterCriteria\" [columnDisplayOrder]=\"columnDisplayOrder\" [columnsAreaMaxHeight]=\"columnsAreaMaxHeight\"\n        [uncheckAllText]=\"uncheckAllText\" [checkAllText]=\"checkAllText\" [indentation]=\"indentetion\">\n    </igx-column-actions>\n}\n","// import { IgxCSVTextDirective, IgxExcelTextDirective, IgxGridToolbarActionsComponent, IgxGridToolbarDirective, IgxGridToolbarTitleComponent } from './common';\n// import { IgxGridToolbarAdvancedFilteringComponent } from './grid-toolbar-advanced-filtering.component';\n// import { IgxGridToolbarExporterComponent } from './grid-toolbar-exporter.component';\n// import { IgxGridToolbarHidingComponent } from './grid-toolbar-hiding.component';\n// import { IgxGridToolbarPinningComponent } from './grid-toolbar-pinning.component';\n// import { IgxGridToolbarComponent } from './grid-toolbar.component';\n\nexport * from './grid-toolbar.component';\nexport * from './common';\nexport * from './grid-toolbar-advanced-filtering.component';\nexport * from './grid-toolbar-exporter.component';\nexport * from './grid-toolbar-hiding.component';\nexport * from './grid-toolbar-pinning.component';\nexport * from './grid-toolbar-exporter.component';\nexport * from './token';\n\n/* NOTE: Grid toolbar directives collection for ease-of-use import in standalone components scenario */\n// export const 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// ] as const;\n","import { Directive, ElementRef, HostListener, inject } from '@angular/core';\nimport { IgxGridEmptyTemplateContext, IgxGridRowEditActionsTemplateContext, IgxGridRowEditTemplateContext, IgxGridRowEditTextTemplateContext, IGX_GRID_BASE } from './common/grid.interface';\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowEdit]',\n    standalone: true\n})\nexport class IgxRowEditTemplateDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowEditTemplateDirective,\n        context: unknown): context is IgxGridRowEditTemplateContext { \n        return true;\n    }\n }\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowEditText]',\n    standalone: true\n})\nexport class IgxRowEditTextDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowEditTextDirective,\n        context: unknown): context is IgxGridRowEditTextTemplateContext { \n        return true;\n    }\n }\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowAddText]',\n    standalone: true\n})\nexport class IgxRowAddTextDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowAddTextDirective,\n        context: unknown): context is IgxGridEmptyTemplateContext { \n        return true;\n    }\n }\n\n/** @hidden @internal */\n@Directive({\n    selector: '[igxRowEditActions]',\n    standalone: true\n})\nexport class IgxRowEditActionsDirective {\n    public static ngTemplateContextGuard(_directive: IgxRowEditActionsDirective,\n        context: unknown): context is IgxGridRowEditActionsTemplateContext { \n        return true;\n    }\n }\n\n\n// TODO: Refactor circular ref, deps and logic\n/** @hidden @internal */\n@Directive({\n    selector: `[igxRowEditTabStop]`,\n    standalone: true\n})\nexport class IgxRowEditTabStopDirective {\n    public grid = inject(IGX_GRID_BASE);\n    public element = inject(ElementRef<HTMLElement>);\n\n    private currentCellIndex: number;\n\n    @HostListener('keydown.tab', [`$event`])\n    @HostListener('keydown.shift.tab', [`$event`])\n    public handleTab(event: KeyboardEvent): void {\n        event.stopPropagation();\n        if ((this.grid.rowEditTabs.last === this && !event.shiftKey) ||\n            (this.grid.rowEditTabs.first === this && event.shiftKey)\n        ) {\n            this.move(event);\n        }\n    }\n\n    @HostListener('keydown.escape', [`$event`])\n    public handleEscape(event: KeyboardEvent): void {\n        this.grid.crudService.endEdit(false, event);\n        this.grid.tbody.nativeElement.focus();\n    }\n\n    @HostListener('keydown.enter', ['$event'])\n    public handleEnter(event: KeyboardEvent): void {\n        event.stopPropagation();\n    }\n\n    /**\n     * Moves focus to first/last editable cell in the editable row and put the cell in edit mode.\n     * If cell is out of view first scrolls to the cell\n     *\n     * @param event keyboard event containing information about whether SHIFT key was pressed\n     */\n    private move(event: KeyboardEvent) {\n        event.preventDefault();\n        this.currentCellIndex = event.shiftKey ? this.grid.lastEditableColumnIndex : this.grid.firstEditableColumnIndex;\n        this.grid.navigation.activeNode.row = this.grid.crudService.rowInEditMode.index;\n        this.grid.navigation.activeNode.column = this.currentCellIndex;\n        this.grid.navigateTo(this.grid.crudService.rowInEditMode.index, this.currentCellIndex, (obj) => {\n            obj.target.activate(event);\n            this.grid.cdr.detectChanges();\n        });\n    }\n}\n","import { InjectionToken } from '@angular/core';\nimport { State, Transaction, TransactionService } from 'igniteui-angular/core';\n\n/* tsPlainInterface */\n/* marshalByValue */\n/**\n * Represents a range selection between certain rows and columns of the grid.\n * Range selection can be made either through drag selection or through keyboard selection.\n */\nexport interface GridSelectionRange {\n    /** The index of the starting row of the selection range. */\n    rowStart: number;\n     /** The index of the ending row of the selection range. */\n    rowEnd: number;\n    /* blazorAlternateType: double */\n    /**\n     * The identifier or index of the starting column of the selection range.\n     * It can be either a string representing the column's field name or a numeric index.\n     */\n    columnStart: string | number;\n    /* blazorAlternateType: double */\n    /**\n     * The identifier or index of the ending column of the selection range.\n     * It can be either a string representing the column's field name or a numeric index.\n     */\n    columnEnd: string | number;\n}\n\n/**\n * Represents a single selected cell or node in a grid.\n */\nexport interface ISelectionNode {\n    /**\n     * The index of the selected row.\n     */\n    row: number;\n    /**\n     * The index of the selected column.\n     */\n    column: number;\n    /**\n     * (Optional)\n     * Additional layout information for multi-row selection nodes.\n     */\n    layout?: IMultiRowLayoutNode;\n    /**\n     * (Optional)\n     * Indicates if the selected node is a summary row.\n     * This property is true if the selected row is a summary row; otherwise, it is false.\n     */\n    isSummaryRow?: boolean;\n}\n\nexport interface IMultiRowLayoutNode {\n    rowStart: number;\n    colStart: number;\n    rowEnd: number;\n    colEnd: number;\n    columnVisibleIndex: number;\n}\n\n/**\n * Represents the state of the keyboard when selecting.\n */\nexport interface ISelectionKeyboardState {\n    /** The selected node in the grid, if any. Can be null if no node is selected. */\n    node: null | ISelectionNode;\n    /** Indicates whether the Shift key is currently pressed during the selection. */\n    shift: boolean;\n    /** The range of the selected cells in the grid. Can be null when resetting the selection. */\n    range: GridSelectionRange;\n    /** Indicates whether the selection is currently active (being performed). `False` when resetting the selection.  */\n    active: boolean;\n}\n\n/**\n * Represents the state of the grid selection using pointer interactions (mouse).\n * Extends ISelectionKeyboardState to include pointer-specific properties.\n */\nexport interface ISelectionPointerState extends ISelectionKeyboardState {\n    /** Indicates whether the Ctrl key is currently pressed during the selection. */\n    ctrl: boolean;\n    /** Indicates whether the primary pointer button is pressed during the selection (clicked). */\n    primaryButton: boolean;\n}\n\n/**\n * Represents the state of the columns in the grid.\n */\nexport interface IColumnSelectionState {\n     /** Represents the field name of the selected column, if any. Can be null if no column is selected. */\n    field: null | string;\n    /** An array of strings representing the ranges of selected columns in the grid. */\n    range: string[];\n}\n\n/**\n * Represents the overall state of grid selection, combining both keyboard and pointer interaction states.\n * It can be either an ISelectionKeyboardState or an ISelectionPointerState.\n */\nexport type SelectionState = ISelectionKeyboardState | ISelectionPointerState;\n\n/**\n * Injection token for accessing the grid transaction object.\n * This allows injecting the grid transaction object into components or services.\n */\nexport const IgxGridTransaction = /*@__PURE__*/new InjectionToken<TransactionService<Transaction, State>>('IgxGridTransaction');\n","\nimport type { PivotGridType } from './grid.interface';\nimport { type ColumnType, FilteringStrategy, IgxFilterItem } from 'igniteui-angular/core';\nimport { cloneArray } from 'igniteui-angular/core';\nimport { IFilteringExpressionsTree } from 'igniteui-angular/core';\nimport { IDataCloneStrategy } from 'igniteui-angular/core';\nimport { DEFAULT_PIVOT_KEYS, IPivotDimension, IPivotDimensionStrategy, IPivotGridRecord, IPivotKeys, IPivotValue, PivotDimensionType } from '../pivot-grid.interface';\nimport { PivotUtil } from '../pivot-util';\n\n/* csSuppress */\nexport class NoopPivotDimensionsStrategy implements IPivotDimensionStrategy {\n    private static _instance: NoopPivotDimensionsStrategy = null;\n\n    public static instance(): NoopPivotDimensionsStrategy {\n        return this._instance || (this._instance = new NoopPivotDimensionsStrategy());\n    }\n\n    public process(collection: any[], _: IPivotDimension[], __: IPivotValue[]): any[] {\n        return collection;\n    }\n}\n\n\nexport class PivotRowDimensionsStrategy implements IPivotDimensionStrategy {\n    private static _instance: PivotRowDimensionsStrategy = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new PivotRowDimensionsStrategy());\n    }\n\n    public process(\n        collection: any,\n        rows: IPivotDimension[],\n        values: IPivotValue[],\n        cloneStrategy: IDataCloneStrategy,\n        pivotKeys: IPivotKeys = DEFAULT_PIVOT_KEYS\n    ): IPivotGridRecord[] {\n        let hierarchies;\n        let data: IPivotGridRecord[];\n        const prevRowDims = [];\n        const currRows = cloneArray(rows, true);\n        PivotUtil.assignLevels(currRows);\n\n        if (currRows.length === 0) {\n            hierarchies = PivotUtil.getFieldsHierarchy(collection, [{ memberName: '', enabled: true }], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n            // generate flat data from the hierarchies\n            data = PivotUtil.processHierarchy(hierarchies, pivotKeys, 0, true);\n            return data;\n        }\n\n        for (const row of currRows) {\n            if (!data) {\n                // build hierarchies - groups and subgroups\n                hierarchies = PivotUtil.getFieldsHierarchy(collection, [row], PivotDimensionType.Row, pivotKeys, cloneStrategy);\n                // generate flat data from the hierarchies\n                data = PivotUtil.processHierarchy(hierarchies, pivotKeys, 0, true);\n                prevRowDims.push(row);\n            } else {\n                PivotUtil.processGroups(data, row, pivotKeys, cloneStrategy);\n            }\n        }\n        return data;\n    }\n}\n\nexport class PivotColumnDimensionsStrategy implements IPivotDimensionStrategy {\n    private static _instance: PivotRowDimensionsStrategy = null;\n\n    public static instance() {\n        return this._instance || (this._instance = new PivotColumnDimensionsStrategy());\n    }\n\n    public process(\n        collection: IPivotGridRecord[],\n        columns: IPivotDimension[],\n        values: IPivotValue[],\n        cloneStrategy: IDataCloneStrategy,\n        pivotKeys: IPivotKeys = DEFAULT_PIVOT_KEYS\n    ): any[] {\n        const res = this.processHierarchy(collection, columns, values, pivotKeys, cloneStrategy);\n        return res;\n    }\n\n    private processHierarchy(collection: IPivotGridRecord[], columns: IPivotDimension[], values, pivotKeys, cloneStrategy) {\n        const result: IPivotGridRecord[] = [];\n        collection.forEach(rec => {\n            // apply aggregations based on the created groups and generate column fields based on the hierarchies\n            this.groupColumns(rec, columns, values, pivotKeys, cloneStrategy);\n            result.push(rec);\n        });\n        return result;\n    }\n\n    private groupColumns(rec: IPivotGridRecord, columns, values, pivotKeys, cloneStrategy) {\n        const children = rec.children;\n        if (children && children.size > 0) {\n            children.forEach((childRecs) => {\n                if (childRecs) {\n                    childRecs.forEach(child => {\n                        this.groupColumns(child, columns, values, pivotKeys, cloneStrategy);\n                    })\n                }\n            });\n        }\n        this.applyAggregates(rec, columns, values, pivotKeys, cloneStrategy);\n    }\n\n    private applyAggregates(rec, columns, values, pivotKeys, cloneStrategy) {\n        const leafRecords = this.getLeafs(rec.records, pivotKeys);\n        const hierarchy = PivotUtil.getFieldsHierarchy(leafRecords, columns, PivotDimensionType.Column, pivotKeys, cloneStrategy);\n        PivotUtil.applyAggregations(rec, hierarchy, values, pivotKeys)\n    }\n\n    private getLeafs(records, pivotKeys) {\n        let leafs = [];\n        for (const rec of records) {\n            if (rec[pivotKeys.records]) {\n                leafs = leafs.concat(this.getLeafs(rec[pivotKeys.records], pivotKeys));\n            } else {\n                leafs.push(rec);\n            }\n        }\n        return leafs;\n    }\n}\n\nexport class DimensionValuesFilteringStrategy extends FilteringStrategy {\n\n    /**\n     * Creates a new instance of FormattedValuesFilteringStrategy.\n     *\n     * @param fields An array of column field names that should be formatted.\n     * If omitted the values of all columns which has formatter will be formatted.\n     */\n    constructor(private fields?: string[]) {\n        super();\n    }\n\n    protected override getFieldValue(rec: any, fieldName: string, _isDate = false, _isTime = false,\n        grid?: PivotGridType): any {\n        const allDimensions = grid.allDimensions;\n        const enabledDimensions = allDimensions.filter(x => x && x.enabled);\n        const dim :IPivotDimension = PivotUtil.flatten(enabledDimensions).find(x => x.memberName === fieldName);\n        const value = dim.childLevel ? this._getDimensionValueHierarchy(dim, rec).map(x => `[` + x +`]`).join('.') : PivotUtil.extractValueFromDimension(dim, rec);\n        return value;\n    }\n\n    public override getFilterItems(column: ColumnType, tree: IFilteringExpressionsTree): Promise<IgxFilterItem[]> {\n        const grid = (column.grid as any);\n        const enabledDimensions = grid.allDimensions.filter(x => x && x.enabled);\n        const data = column.grid.gridAPI.filterDataByExpressions(tree);\n        const dim = enabledDimensions.find(x => x.memberName === column.field);\n        const allValuesHierarchy = PivotUtil.getFieldsHierarchy(\n            data,\n            [dim],\n            PivotDimensionType.Column,\n            grid.pivotKeys,\n            grid.pivotValueCloneStrategy\n        );\n        const isNoop = grid.pivotConfiguration.columnStrategy instanceof NoopPivotDimensionsStrategy || grid.pivotConfiguration.rowStrategy instanceof NoopPivotDimensionsStrategy;\n        const items: IgxFilterItem[] = !isNoop ? this._getFilterItems(allValuesHierarchy, grid.pivotKeys) : [{value : ''}];\n        return Promise.resolve(items);\n    }\n\n    private _getFilterItems(hierarchy: Map<string, any>, pivotKeys: IPivotKeys) : IgxFilterItem[] {\n        const items:  IgxFilterItem[] = [];\n        hierarchy.forEach((value) => {\n            const val = value.value;\n            const path = val.split(pivotKeys.columnDimensionSeparator);\n            const hierarchicalValue = path.length > 1 ? path.map(x => `[` + x +`]`).join('.') : val;\n            const text = path[path.length -1];\n            items.push({\n                value: hierarchicalValue,\n                label: text,\n                children: this._getFilterItems(value.children, pivotKeys)\n            });\n        });\n        return items;\n    }\n\n    private _getDimensionValueHierarchy(dim: IPivotDimension, rec: any) : string[] {\n        let path = [];\n        const value = PivotUtil.extractValueFromDimension(dim, rec);\n        path.push(value);\n        if (dim.childLevel) {\n            const childVals = this._getDimensionValueHierarchy(dim.childLevel, rec);\n            path = path.concat(childVals);\n        }\n        return path;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport type { GridType, FlatGridType, TreeGridType } from '../common/grid.interface';\nimport { cloneArray, columnFieldPath, DataUtil, type IgxSummaryResult, resolveNestedPath } from 'igniteui-angular/core';\n\n/** @hidden */\n@Injectable()\nexport class IgxGridSummaryService {\n    public grid: GridType;\n    public rootSummaryID = 'igxGridRootSummary';\n    public summaryHeight = 0;\n    public maxSummariesLength = 0;\n    public groupingExpressions = [];\n    public retriggerRootPipe = 0;\n    public deleteOperation = false;\n\n    protected summaryCacheMap: Map<string, Map<string, any[]>> = new Map<string, Map<string, IgxSummaryResult[]>>();\n\n    public recalculateSummaries() {\n        this.resetSummaryHeight();\n        this.grid.notifyChanges(true);\n    }\n\n    public clearSummaryCache(args?) {\n        if (!this.summaryCacheMap.size) {\n            return;\n        }\n        if (!args) {\n            this.summaryCacheMap.clear();\n            if (this.grid?.rootSummariesEnabled) {\n                this.retriggerRootPipe++;\n            }\n            return;\n        }\n        if (args.data) {\n            const rowID = this.grid.primaryKey ? args.data[this.grid.primaryKey] : args.data;\n            this.removeSummaries(rowID);\n        }\n        if (args.rowID !== undefined && args.rowID !== null) {\n            let columnName = args.cellID ? this.grid.columns.find(col => col.index === args.cellID.columnID).field : undefined;\n            if (columnName && this.grid.rowEditable) {\n                return;\n            }\n\n            const isGroupedColumn = (this.grid as FlatGridType).groupingExpressions &&\n                (this.grid as FlatGridType).groupingExpressions.map(expr => expr.fieldName).indexOf(columnName) !== -1;\n            if (columnName && isGroupedColumn) {\n                columnName = undefined;\n            }\n            this.removeSummaries(args.rowID, columnName);\n        }\n    }\n\n    public removeSummaries(rowID, columnName?) {\n        this.deleteSummaryCache(this.rootSummaryID, columnName);\n        if (this.summaryCacheMap.size === 1 && this.summaryCacheMap.has(this.rootSummaryID)) {\n            return;\n        }\n        if (this.grid.type === 'tree') {\n            if (this.grid.transactions.enabled && this.deleteOperation) {\n                this.deleteOperation = false;\n                // TODO: this.removeChildRowSummaries(rowID, columnName);\n                this.summaryCacheMap.clear();\n                return;\n            }\n            this.removeAllTreeGridSummaries(rowID, columnName);\n        } else if (this.grid.type === 'hierarchical') {\n            if (this.grid.transactions.enabled && this.deleteOperation) {\n                this.deleteOperation = false;\n                this.summaryCacheMap.clear();\n            }\n        } else {\n            const summaryIds = this.getSummaryID(rowID, (this.grid as FlatGridType).groupingExpressions);\n            summaryIds.forEach(id => {\n                this.deleteSummaryCache(id, columnName);\n            });\n        }\n    }\n\n    public removeSummariesCachePerColumn(columnName) {\n        this.summaryCacheMap.forEach((cache) => {\n            if (cache.get(columnName)) {\n                cache.delete(columnName);\n            }\n        });\n        if (this.grid.rootSummariesEnabled) {\n            this.retriggerRootPipe++;\n        }\n    }\n\n    public calcMaxSummaryHeight() {\n        if (this.summaryHeight) {\n            return this.summaryHeight;\n        }\n        if (!this.grid.data) {\n            return this.summaryHeight = 0;\n        }\n        let maxSummaryLength = 0;\n        this.grid.columns.filter((col) => col.hasSummary && !col.hidden).forEach((column) => {\n            const getCurrentSummary = column.summaries.operate([], [], column.field);\n            const getCurrentSummaryColumn = column.disabledSummaries.length > 0\n                ? getCurrentSummary.filter(s => !column.disabledSummaries.includes(s.key)).length\n                : getCurrentSummary.length;\n\n            if (maxSummaryLength < getCurrentSummaryColumn) {\n                maxSummaryLength = getCurrentSummaryColumn;\n            }\n        });\n        this.maxSummariesLength = maxSummaryLength;\n        this.summaryHeight = maxSummaryLength * this.grid.defaultSummaryHeight;\n        return this.summaryHeight;\n    }\n\n    public calculateSummaries(rowID, data, groupRecord) {\n        let rowSummaries = this.summaryCacheMap.get(rowID);\n        if (!rowSummaries) {\n            rowSummaries = new Map<string, IgxSummaryResult[]>();\n            this.summaryCacheMap.set(rowID, rowSummaries);\n        }\n\n        if (!this.hasSummarizedColumns || !data) {\n            return rowSummaries;\n        }\n\n        const columns = this.grid.columns.filter(col => col.hasSummary);\n        const columnPathParts = columns.map(col => columnFieldPath(col.field));\n\n        for (const [idx, column] of columns.entries()) {\n            if (!rowSummaries.get(column.field)) {\n                let summaryResult = column.summaries.operate(\n                    data.map(r => resolveNestedPath(r, columnPathParts[idx])),\n                    data,\n                    column.field,\n                    groupRecord,\n                    this.grid.locale,\n                    column.pipeArgs\n                );\n\n                summaryResult = column.disabledSummaries.length > 0\n                    ? summaryResult.filter(s => !column.disabledSummaries.includes(s.key))\n                    : summaryResult;\n\n                rowSummaries.set(column.field, summaryResult);\n            }\n        }\n\n        return rowSummaries;\n    }\n\n    public resetSummaryHeight() {\n        this.summaryHeight = 0;\n        if (this.grid) {\n            this.grid.summaryPipeTrigger++;\n            if (this.grid.rootSummariesEnabled) {\n                this.retriggerRootPipe++;\n                Promise.resolve().then(() => this.grid.notifyChanges(true));\n            }\n        }\n    }\n\n    public updateSummaryCache(groupingArgs) {\n        if (this.summaryCacheMap.size === 0 || !this.hasSummarizedColumns) {\n            return;\n        }\n        if (this.groupingExpressions.length === 0) {\n            this.groupingExpressions = groupingArgs.expressions.map(record => record.fieldName);\n            return;\n        }\n        if (groupingArgs.length === 0) {\n            this.groupingExpressions = [];\n            this.clearSummaryCache();\n            return;\n        }\n        this.compareGroupingExpressions(this.groupingExpressions, groupingArgs);\n        this.groupingExpressions = groupingArgs.expressions.map(record => record.fieldName);\n    }\n\n    public get hasSummarizedColumns(): boolean {\n        const summarizedColumns = this.grid.columns.filter(col => col.hasSummary && !col.hidden);\n        return summarizedColumns.length > 0;\n    }\n\n    private deleteSummaryCache(id, columnName) {\n        if (this.summaryCacheMap.get(id)) {\n            const filteringApplied = columnName && this.grid.filteringExpressionsTree &&\n                this.grid.filteringExpressionsTree.filteringOperands.map((expr) => expr.fieldName).indexOf(columnName) !== -1;\n            if (columnName && this.summaryCacheMap.get(id).get(columnName) && !filteringApplied) {\n                this.summaryCacheMap.get(id).delete(columnName);\n            } else {\n                this.summaryCacheMap.delete(id);\n            }\n            if (id === this.rootSummaryID && this.grid.rootSummariesEnabled) {\n                this.retriggerRootPipe++;\n            }\n        }\n    }\n\n    private getSummaryID(rowID, groupingExpressions) {\n        if (groupingExpressions.length === 0) {\n            return [];\n        }\n        const summaryIDs = [];\n        let data = this.grid.data;\n        if (this.grid.transactions.enabled) {\n            data = DataUtil.mergeTransactions(\n                cloneArray(this.grid.data),\n                this.grid.transactions.getAggregatedChanges(true),\n                this.grid.primaryKey,\n                this.grid.dataCloneStrategy\n            );\n        }\n        const rowData = this.grid.primaryKey ? data.find(rec => rec[this.grid.primaryKey] === rowID) : rowID;\n        if (!rowData) {\n            return summaryIDs;\n        }\n        let id = '{ ';\n        groupingExpressions.forEach(expr => {\n            id += `'${expr.fieldName}': '${rowData[expr.fieldName]}'`;\n            summaryIDs.push(id.concat(' }'));\n            id += ', ';\n        });\n        return summaryIDs;\n    }\n\n    private removeAllTreeGridSummaries(rowID, columnName?) {\n        let row = (this.grid as TreeGridType).records.get(rowID);\n        if (!row) {\n            return;\n        }\n        row = row.children ? row : row.parent;\n        while (row) {\n            rowID = row.key;\n            this.deleteSummaryCache(rowID, columnName);\n            row = row.parent;\n        }\n    }\n\n    // TODO: remove only deleted rows\n    // private removeChildRowSummaries(rowID, columnName?) {\n    // }\n\n    private compareGroupingExpressions(current, groupingArgs) {\n        const newExpressions = groupingArgs.expressions.map(record => record.fieldName);\n        const removedCols = groupingArgs.ungroupedColumns;\n        if (current.length <= newExpressions.length) {\n            const newExpr = newExpressions.slice(0, current.length).toString();\n            if (current.toString() !== newExpr) {\n                this.clearSummaryCache();\n            }\n        } else {\n            const currExpr = current.slice(0, newExpressions.length).toString();\n            if (currExpr !== newExpressions.toString()) {\n                this.clearSummaryCache();\n                return;\n            }\n            removedCols.map(col => col.field).forEach(colName => {\n                this.summaryCacheMap.forEach((cache, id) => {\n                    if (id.indexOf(colName) !== -1) {\n                        this.summaryCacheMap.delete(id);\n                    }\n                });\n            });\n        }\n    }\n}\n","import { Component, Input, HostBinding, HostListener, ChangeDetectionStrategy, ElementRef, TemplateRef, booleanAttribute, inject } from '@angular/core';\nimport {\n    IgxSummaryOperand\n} from './grid-summary';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ISelectionNode } from '../common/types';\nimport { GridTypeBase,  ColumnType, GridColumnDataType, IgxSummaryResult, trackByIdentity, BaseFormatter } from 'igniteui-angular/core';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-summary-cell',\n    templateUrl: './summary-cell.component.html',\n    imports: [NgTemplateOutlet]\n})\nexport class IgxSummaryCellComponent {\n    private element = inject(ElementRef);\n\n\n    @Input()\n    public summaryResults: IgxSummaryResult[];\n\n    @Input()\n    public column: ColumnType;\n\n    @Input()\n    public firstCellIndentation = 0;\n\n    @Input({ transform: booleanAttribute })\n    public hasSummary = false;\n\n    @Input()\n    public summaryFormatter: (summaryResult: IgxSummaryResult, summaryOperand: IgxSummaryOperand) => any;\n\n    @Input()\n    public summaryTemplate: TemplateRef<any>;\n\n    @Input()\n    public locale;\n\n    @Input()\n    public gridResourceStrings;\n\n    /** @hidden */\n    @Input()\n    @HostBinding('class.igx-grid-summary--active')\n    public active: boolean;\n\n    @Input()\n    @HostBinding('attr.data-rowIndex')\n    public rowIndex: number;\n\n    @HostBinding('attr.data-visibleIndex')\n    public get visibleColumnIndex(): number {\n        return this.column.visibleIndex;\n    }\n\n    @HostBinding('attr.id')\n    public get attrCellID() {\n        return `${this.grid.id}_${this.rowIndex}_${this.visibleColumnIndex}`;\n    }\n\n    @HostListener('pointerdown')\n    public activate() {\n        const currNode = this.grid.navigation.activeNode;\n        if (currNode && this.rowIndex === currNode.row && this.visibleColumnIndex === currNode.column) {\n            return;\n        }\n\n        this.grid.navigation.setActiveNode({ row: this.rowIndex, column: this.visibleColumnIndex }, 'summaryCell');\n        this.grid.cdr.detectChanges();\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.rowIndex,\n            column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex,\n            isSummaryRow: true\n        };\n    }\n\n    public get width() {\n        return this.column.getCellWidth();\n    }\n\n    public get nativeElement(): any {\n        return this.element.nativeElement;\n    }\n\n    public get columnDatatype(): GridColumnDataType {\n        return this.column.dataType;\n    }\n\n    public get itemHeight() {\n        return this.column.grid.defaultSummaryHeight;\n    }\n\n    /**\n     * @hidden\n     */\n    public get grid(): GridTypeBase {\n        return this.column.grid;\n    }\n\n    /**\n     * @hidden\n     */\n    public get i18nFormatter(): BaseFormatter {\n        return this.grid.i18nFormatter;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public get currencyCode(): string {\n        return this.i18nFormatter.getCurrencyCode(this.locale, this.column.pipeArgs.currencyCode);\n    }\n\n    /** cached single summary res after filter resets collection */\n    protected trackSummaryResult = trackByIdentity;\n\n    public translateSummary(summary: IgxSummaryResult): string {\n        return this.gridResourceStrings[`igx_grid_summary_${summary.key}`] || summary.label;\n    }\n\n    /**\n     * @hidden @internal\n     */\n    public formatSummaryResult(summary: IgxSummaryResult): string {\n        if (summary.summaryResult === undefined || summary.summaryResult === null || summary.summaryResult === '') {\n            return '';\n        }\n\n        if (this.summaryFormatter) {\n            return this.summaryFormatter(summary, this.column.summaries);\n        }\n\n        const args = this.column.pipeArgs;\n        const locale = this.locale;\n\n        if (summary.key === 'count') {\n            return this.i18nFormatter.formatNumber(summary.summaryResult, locale)\n        }\n\n        if (summary.defaultFormatting) {\n            switch (this.column.dataType) {\n                case GridColumnDataType.Number:\n                    return this.i18nFormatter.formatNumber(summary.summaryResult, locale, args.digitsInfo);\n                case GridColumnDataType.Date:\n                case GridColumnDataType.DateTime:\n                case GridColumnDataType.Time:\n                    return this.i18nFormatter.formatDate(summary.summaryResult, args.format, locale, args.timezone);\n                case GridColumnDataType.Currency:\n                    return this.i18nFormatter.formatCurrency(summary.summaryResult, locale, args.display, this.currencyCode, args.digitsInfo);\n                case GridColumnDataType.Percent:\n                    return this.i18nFormatter.formatPercent(summary.summaryResult, locale, args.digitsInfo);\n            }\n        }\n        return summary.summaryResult;\n    }\n}\n","@if (hasSummary) {\n    <ng-container *ngTemplateOutlet=\"summaryTemplate ? summaryTemplate : defaultSummary; context: { $implicit: summaryResults }\">\n    </ng-container>\n}\n<ng-template #defaultSummary>\n    @for (summary of summaryResults; track trackSummaryResult(summary)) {\n        <div class=\"igx-grid-summary__item\" [style.height.px]=\"itemHeight\">\n            <span class=\"igx-grid-summary__label\" [title]=\"summary.label\">{{ translateSummary(summary) }}</span>\n            <span class=\"igx-grid-summary__result\" [title]=\"formatSummaryResult(summary)\">\n                {{ formatSummaryResult(summary) }}\n            </span>\n        </div>\n    }\n</ng-template>\n","import {\n    Component,\n    Input,\n    ViewChildren,\n    QueryList,\n    HostBinding,\n    ViewChild,\n    ElementRef,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    DoCheck,\n    inject\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { IgxSummaryCellComponent } from './summary-cell.component';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\nimport { IgxGridNotGroupedPipe } from '../common/pipes';\nimport { IgxForOfSyncService, IgxGridForOfDirective } from 'igniteui-angular/directives';\nimport { ColumnType, IgxSummaryResult, trackByIdentity } from 'igniteui-angular/core';\n\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-summary-row',\n    templateUrl: './summary-row.component.html',\n    providers: [IgxForOfSyncService],\n    imports: [NgTemplateOutlet, IgxGridForOfDirective, IgxSummaryCellComponent, IgxGridNotGroupedPipe]\n})\nexport class IgxSummaryRowComponent implements DoCheck  {\n    public grid = inject<GridType>(IGX_GRID_BASE);\n    public element = inject<ElementRef<HTMLElement>>(ElementRef);\n    public cdr = inject(ChangeDetectorRef);\n\n\n    @Input()\n    public summaries: Map<string, IgxSummaryResult[]>;\n\n    @Input()\n    public gridID;\n\n    @Input()\n    public index: number;\n\n    @Input()\n    public firstCellIndentation = -1;\n\n    @HostBinding('attr.data-rowIndex')\n    public get dataRowIndex() {\n        return this.index;\n    }\n\n    public get minHeight() {\n        return this.grid.summaryRowHeight - 1;\n    }\n\n    @ViewChildren(IgxSummaryCellComponent, { read: IgxSummaryCellComponent })\n    public _summaryCells: QueryList<IgxSummaryCellComponent>;\n\n    public get summaryCells(): QueryList<IgxSummaryCellComponent> {\n        const res = new QueryList<IgxSummaryCellComponent>();\n        if (!this._summaryCells) {\n            return res;\n        }\n        const cList = this._summaryCells.filter(c => c.nativeElement.isConnected);\n        res.reset(cList);\n        return res;\n    }\n    public set summaryCells(cells) { }\n\n    /**\n     * @hidden\n     */\n    @ViewChild('igxDirRef', { read: IgxGridForOfDirective })\n    public virtDirRow: IgxGridForOfDirective<ColumnType, ColumnType[]>;\n\n    public ngDoCheck() {\n        this.cdr.markForCheck();\n    }\n\n    public get nativeElement() {\n        return this.element.nativeElement;\n    }\n\n    public getColumnSummaries(columnName: string) {\n        if (!this.summaries.get(columnName)) {\n            return [];\n        }\n        return this.summaries.get(columnName);\n\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public isCellActive(visibleColumnIndex) {\n        const node = this.grid.navigation.activeNode;\n        return node ? node.row === this.index && node.column === visibleColumnIndex : false;\n    }\n\n    /**\n     * @hidden\n     */\n    public get pinnedColumns(): ColumnType[] {\n        return this.grid.pinnedColumns;\n    }\n\n\n    /**\n     * @hidden\n     */\n    public get pinnedStartColumns(): ColumnType[] {\n        return this.grid.pinnedStartColumns;\n    }\n\n\n    /**\n     * @hidden\n     */\n    public get pinnedEndColumns(): ColumnType[] {\n        return this.grid.pinnedEndColumns;\n    }\n\n    /**\n     * @hidden\n     */\n    public get unpinnedColumns(): ColumnType[] {\n        return this.grid.unpinnedColumns;\n    }\n\n    public getContext(row, cols) {\n        return {\n            $implicit: row,\n            columns: cols\n        };\n    }\n\n    /** state persistence switching all pinned columns resets collection */\n    protected trackPinnedColumn = trackByIdentity;\n}\n","@if (summaries.size) {\n    @if (grid.summariesMargin) {\n        <div\n            class=\"igx-grid__summaries-patch\"\n            [style.min-width.px]=\"grid.summariesMargin\"\n            [style.flex-basis.px]=\"grid.summariesMargin\"\n            (pointerdown)=\"$event.preventDefault()\"\n        ></div>\n    }\n    @if (pinnedStartColumns.length > 0) {\n        <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this, pinnedStartColumns)\"></ng-container>\n    }\n    <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForTrackBy]=\"grid.trackColumnChanges\" [igxForSizePropName]='\"calcPixelWidth\"' #igxDirRef>\n        <igx-grid-summary-cell\n            class=\"igx-grid-summary igx-grid-summary--fw\"\n            role=\"cell\"\n            [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n            [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n            [column]=\"col\"\n            [locale]=\"grid.locale\"\n            [gridResourceStrings]=\"grid.resourceStrings\"\n            [rowIndex]=\"index\"\n            [firstCellIndentation]=\"firstCellIndentation\"\n            [summaryResults]=\"getColumnSummaries(col.field)\"\n            [summaryTemplate]=\"col.summaryTemplate\"\n            [hasSummary]=\"col.hasSummary\"\n            [summaryFormatter]=\"col.summaryFormatter\"\n            [active]=\"isCellActive(col.visibleIndex)\"\n            [style.max-height.px]=\"minHeight\"\n            [style.min-height.px]=\"minHeight\"\n            [style.min-width]=\"col.resolvedWidth\"\n            [style.max-width]=\"col.resolvedWidth\"\n            [style.flex-basis]=\"col.resolvedWidth\">\n        </igx-grid-summary-cell>\n    </ng-template>\n    @if (pinnedEndColumns.length > 0) {\n        <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this, pinnedEndColumns)\"></ng-container>\n    }\n}\n\n<ng-template #summaryCellTemplate let-col let-columns=\"columns\">\n    @for (col of columns | igxNotGrouped; track trackPinnedColumn(col)) {\n        <igx-grid-summary-cell\n            role=\"cell\"\n            class=\"igx-grid-summary igx-grid-summary--fw igx-grid-summary--pinned\"\n            [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n            [class.igx-grid-summary--pinned-first]=\"col.isFirstPinned\"\n            [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n            [column]=\"col\"\n            [locale]=\"grid.locale\"\n            [gridResourceStrings]=\"grid.resourceStrings\"\n            [firstCellIndentation]=\"firstCellIndentation\"\n            [rowIndex]=\"index\"\n            [summaryResults]=\"getColumnSummaries(col.field)\"\n            [summaryTemplate]=\"col.summaryTemplate\"\n            [hasSummary]=\"col.hasSummary\"\n            [active]=\"isCellActive(col.visibleIndex)\"\n            [style.max-height.px]=\"minHeight\"\n            [style.min-height.px]=\"minHeight\"\n            [style.min-width]=\"col.resolvedWidth\"\n            [style.max-width]=\"col.resolvedWidth\"\n            [style.flex-basis]=\"col.resolvedWidth\">\n        </igx-grid-summary-cell>\n    }\n</ng-template>\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { GridType, IGX_GRID_BASE } from '../common/grid.interface';\n\n@Pipe({\n    name: 'igxGridSummaryDataPipe',\n    standalone: true\n})\nexport class IgxSummaryDataPipe implements PipeTransform {\n    private grid = inject<GridType>(IGX_GRID_BASE);\n\n\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    public transform(id: string, trigger = 0) {\n        const summaryService = this.grid.summaryService;\n        return summaryService.calculateSummaries(\n            summaryService.rootSummaryID,\n            this.grid.gridAPI.get_summary_data()\n        );\n    }\n}\n","import { Directive, ElementRef, Input, NgZone, Output, OnInit, OnDestroy, DOCUMENT, inject } from '@angular/core';\nimport { Subject, fromEvent, animationFrameScheduler, interval } from 'rxjs';\nimport { map, switchMap, takeUntil, throttle } from 'rxjs/operators';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxResizer]',\n    standalone: true\n})\nexport class IgxColumnResizerDirective implements OnInit, OnDestroy {\n    public element = inject<ElementRef<HTMLElement>>(ElementRef);\n    public document = inject(DOCUMENT);\n    public zone = inject(NgZone);\n\n\n    @Input()\n    public restrictHResizeMin: number = Number.MIN_SAFE_INTEGER;\n\n    @Input()\n    public restrictHResizeMax: number = Number.MAX_SAFE_INTEGER;\n\n    @Input()\n    public restrictResizerTop: number;\n\n    @Output()\n    public resizeEnd = new Subject<MouseEvent>();\n\n    @Output()\n    public resizeStart = new Subject<MouseEvent>();\n\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public resize = new Subject<any>();\n\n    private _left: number;\n    private _ratio: number = 1;\n    private _destroy = new Subject<boolean>();\n\n    public get ratio(): number {\n        return this._ratio;\n    }\n\n    constructor() {\n\n        this.resizeStart.pipe(\n            takeUntil<MouseEvent>(this._destroy),\n            map((event) => event.clientX),\n            switchMap((offset) => this.resize\n                .pipe(\n                    takeUntil(this._destroy),\n                    takeUntil<MouseEvent>(this.resizeEnd),\n                    map((event) => (event.clientX - offset) / (this._ratio)),\n                ))\n        )\n            .subscribe((pos) => {\n                const left = this._left + pos;\n                const min = this._left - this.restrictHResizeMin;\n                const max = this._left + this.restrictHResizeMax;\n\n                this.left = left < min ? min : left;\n\n                if (left > max) {\n                    this.left = max;\n                }\n            });\n\n    }\n\n    public ngOnInit() {\n        this.zone.runOutsideAngular(() => {\n            fromEvent(this.document.defaultView, 'mousemove')\n                .pipe(\n                    takeUntil<MouseEvent>(this._destroy),\n                    throttle(() => interval(0, animationFrameScheduler)),\n                )\n                .subscribe((res) => this.onMousemove(res));\n\n            fromEvent(this.document.defaultView, 'mouseup')\n                .pipe(takeUntil<MouseEvent>(this._destroy))\n                .subscribe((res) => this.onMouseup(res));\n        });\n    }\n\n    public ngOnDestroy() {\n        this._destroy.next(true);\n        this._destroy.complete();\n    }\n\n    public set left(val: number) {\n        requestAnimationFrame(() => this.element.nativeElement.style.left = val + 'px');\n    }\n\n    public set top(val: number) {\n        if (this.restrictResizerTop != undefined) {\n            requestAnimationFrame(() => this.element.nativeElement.style.top = this.restrictResizerTop + 'px');\n        } else {\n            requestAnimationFrame(() => this.element.nativeElement.style.top = val + 'px');\n        }\n    }\n\n    public onMouseup(event: MouseEvent) {\n        this.resizeEnd.next(event);\n        this.resizeEnd.complete();\n    }\n\n    public onMousedown(event: MouseEvent, resizeHandleTarget: HTMLElement) {\n        event.preventDefault();\n        const parent = this.element.nativeElement.parentElement.parentElement;\n        const parentRectWidth = parent.getBoundingClientRect().width;\n        const parentComputedWidth = parseFloat(window.getComputedStyle(parent).width);\n        if (Math.abs(parentRectWidth - parentComputedWidth) > 1) {\n            this._ratio = parentRectWidth / parentComputedWidth;\n        }\n        this.left = this._left = (event.clientX - parent.getBoundingClientRect().left) / this._ratio;\n        this.top = (resizeHandleTarget.getBoundingClientRect().top - parent.getBoundingClientRect().top) / this._ratio;\n\n        this.resizeStart.next(event);\n    }\n\n    public onMousemove(event: MouseEvent) {\n        event.preventDefault();\n        this.resize.next(event);\n    }\n}\n","import { ChangeDetectionStrategy, Component, Input, ViewChild, inject } from '@angular/core';\nimport { IgxColumnResizingService } from './resizing.service';\nimport { IgxColumnResizerDirective } from './resizer.directive';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-column-resizer',\n    templateUrl: './resizer.component.html',\n    imports: [IgxColumnResizerDirective]\n})\nexport class IgxGridColumnResizerComponent {\n    public colResizingService = inject(IgxColumnResizingService);\n\n    @Input()\n    public restrictResizerTop: number;\n\n    @ViewChild(IgxColumnResizerDirective, { static: true })\n    public resizer: IgxColumnResizerDirective;\n}\n","<div class=\"igx-grid-th__resize-line\"\n    [style.left.px]=\"-99999\" igxResizer\n    [style.height.px]=\"colResizingService.resizerHeight\"\n    [restrictHResizeMax]=\"colResizingService.restrictResizeMax\"\n    [restrictHResizeMin]=\"colResizingService.restrictResizeMin\"\n    [restrictResizerTop]=\"restrictResizerTop\"\n    (resizeEnd)=\"colResizingService.resizeColumn($event, resizer.ratio)\">\n</div>\n","import { Injectable } from '@angular/core';\nimport { IgxColumnResizingService } from '../resizing.service';\nimport { ColumnType } from 'igniteui-angular/core';\nimport { PivotRowHeaderGroupType } from '../../pivot-grid.interface';\n\n\n/**\n * @hidden\n * @internal\n */\n@Injectable()\nexport class IgxPivotColumnResizingService extends IgxColumnResizingService {\n    /**\n     * @hidden\n     */\n    public rowHeaderGroup: PivotRowHeaderGroupType;\n\n    /**\n     * @hidden\n     */\n    public override getColumnHeaderRenderedWidth() {\n        return this.rowHeaderGroup.header.nativeElement.getBoundingClientRect().width;\n    }\n\n    protected override _handlePixelResize(diff: number, column: ColumnType) {\n        const rowDim = this.rowHeaderGroup.parent.rootDimension;\n        if (!rowDim) return;\n\n        const currentColWidth = parseFloat(column.width);\n        const colMinWidth = column.minWidthPx;\n        const colMaxWidth = column.maxWidthPx;\n        let newWidth = currentColWidth;\n        if (currentColWidth + diff < colMinWidth) {\n            newWidth = colMinWidth;\n        } else if (colMaxWidth && (currentColWidth + diff > colMaxWidth)) {\n            newWidth = colMaxWidth;\n        } else {\n            newWidth = (currentColWidth + diff);\n        }\n\n        this.rowHeaderGroup.grid.resizeRowDimensionPixels(rowDim, newWidth);\n    }\n\n    protected override _handlePercentageResize() { }\n}\n","import {\n    Directive,\n    inject,\n    Input} from '@angular/core';\nimport { IgxPivotColumnResizingService } from './pivot-resizing.service'\nimport { IgxResizeHandleDirective } from '../resize-handle.directive';\nimport { ColumnType } from 'igniteui-angular/core';\nimport { PivotRowHeaderGroupType } from '../../pivot-grid.interface';\n\n/**\n * @hidden\n * @internal\n */\n@Directive({\n    selector: '[igxPivotResizeHandle]',\n    standalone: true\n})\nexport class IgxPivotResizeHandleDirective extends IgxResizeHandleDirective {\n    public override colResizingService = inject(IgxPivotColumnResizingService);\n\n\n    /**\n     * @hidden\n     */\n    @Input('igxPivotResizeHandle')\n    public set pivotColumn(value: ColumnType) {\n        this.column = value;\n    }\n\n    public get pivotColumn() {\n        return this.column;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input('igxPivotResizeHandleHeader')\n    public rowHeaderGroup: PivotRowHeaderGroupType;\n\n    /**\n     * @hidden\n     */\n    public override onDoubleClick() {\n        this._dblClick = true;\n        this.initResizeService();\n        this.rowHeaderGroup.grid.autoSizeRowDimension(this.rowHeaderGroup.parent.rootDimension);\n    }\n\n    /**\n     * @hidden\n     */\n    protected override initResizeService(event = null) {\n        super.initResizeService(event);\n        this.colResizingService.rowHeaderGroup = this.rowHeaderGroup;\n    }\n}\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { IgxGridColumnResizerComponent } from '../resizer.component';\nimport { IgxPivotColumnResizingService } from './pivot-resizing.service';\nimport { IgxColumnResizerDirective } from '../resizer.directive';\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-pivot-grid-column-resizer',\n    templateUrl: '../resizer.component.html',\n    imports: [IgxColumnResizerDirective]\n})\nexport class IgxPivotGridColumnResizerComponent extends IgxGridColumnResizerComponent {\n    public override colResizingService = inject(IgxPivotColumnResizingService);\n}\n","import { NAVIGATION_KEYS } from 'igniteui-angular/core';\n\n/**\n * Horizontal navigation keys for grid columns\n * @hidden\n * @internal\n */\nexport const HORIZONTAL_NAV_KEYS = new Set(['arrowleft', 'left', 'arrowright', 'right', 'home', 'end']);\n\n/**\n * Keys for expanding rows (tree-grid, hierarchical-grid, master-detail)\n * @hidden\n * @internal\n */\nexport const ROW_EXPAND_KEYS = new Set('right down arrowright arrowdown'.split(' '));\n\n/**\n * Keys for collapsing rows (tree-grid, hierarchical-grid, master-detail)\n * @hidden\n * @internal\n */\nexport const ROW_COLLAPSE_KEYS = new Set('left up arrowleft arrowup'.split(' '));\n\n/**\n * Keys for adding rows in editable grids\n * @hidden\n * @internal\n */\nexport const ROW_ADD_KEYS = new Set(['+', 'add', '≠', '±', '=']);\n\n/**\n * All supported navigation and action keys for grid cells\n * @hidden\n * @internal\n */\nexport const SUPPORTED_KEYS = new Set([...Array.from(NAVIGATION_KEYS),\n    ...Array.from(ROW_ADD_KEYS), 'enter', 'f2', 'escape', 'esc', 'pagedown', 'pageup']);\n\n/**\n * Navigation keys for grid headers\n * @hidden\n * @internal\n */\nexport const HEADER_KEYS = new Set([...Array.from(NAVIGATION_KEYS), 'escape', 'esc', 'l',\n    /** This symbol corresponds to the Alt + L combination under MAC. */\n    '¬']);\n","import { inject, Injectable } from '@angular/core';\nimport { first, throttleTime } from 'rxjs/operators';\nimport { IgxForOfDirective } from 'igniteui-angular/directives';\nimport { GridType } from './common/grid.interface';\nimport {\n    NAVIGATION_KEYS,\n    PlatformUtil,\n    SortingDirection\n} from 'igniteui-angular/core';\nimport {\n    ROW_COLLAPSE_KEYS,\n    ROW_EXPAND_KEYS,\n    SUPPORTED_KEYS,\n    HORIZONTAL_NAV_KEYS,\n    HEADER_KEYS,\n    ROW_ADD_KEYS\n} from './grid-navigation-keys';\nimport { GridKeydownTargetType, GridSelectionMode, FilterMode } from './common/enums';\nimport { IActiveNodeChangeEventArgs } from './common/events';\nimport { IMultiRowLayoutNode } from './common/types';\nimport { animationFrameScheduler, Subject } from 'rxjs';\n\nexport interface ColumnGroupsCache {\n    level: number;\n    visibleIndex: number;\n}\nexport interface IActiveNode {\n    gridID?: string;\n    row: number;\n    column?: number;\n    level?: number;\n    mchCache?: ColumnGroupsCache;\n    layout?: IMultiRowLayoutNode;\n}\n\n/** @hidden */\n@Injectable()\nexport class IgxGridNavigationService {\n    protected platform = inject(PlatformUtil);\n    public grid: GridType;\n    public _activeNode: IActiveNode = {} as IActiveNode;\n    public lastActiveNode: IActiveNode = {} as IActiveNode;\n    protected pendingNavigation = false;\n    protected keydownNotify = new Subject<KeyboardEvent>();\n\n    public get activeNode() {\n        return this._activeNode;\n    }\n\n    public set activeNode(value: IActiveNode) {\n        this._activeNode = value;\n    }\n\n    constructor() {\n        this.keydownNotify.pipe(\n            throttleTime(30, animationFrameScheduler),\n        )\n        .subscribe((event: KeyboardEvent) => {\n            this.dispatchEvent(event);\n        });\n\n     }\n\n    public handleNavigation(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (NAVIGATION_KEYS.has(key)) {\n            event.stopPropagation();\n        }\n        if (this.grid.crudService.cell && NAVIGATION_KEYS.has(key)) {\n            return;\n        }\n        if (event.repeat && SUPPORTED_KEYS.has(key) || (key === 'tab' && this.grid.crudService.cell)) {\n            event.preventDefault();\n        }\n        if (event.repeat) {\n            this.keydownNotify.next(event);\n        } else {\n            this.dispatchEvent(event);\n        }\n    }\n\n    public dispatchEvent(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        const cellOrRowInEdit = this.grid.crudService.cell || this.grid.crudService.row;\n        if (!this.activeNode || !(SUPPORTED_KEYS.has(key) || (key === 'tab' && cellOrRowInEdit))) {\n            return;\n        }\n        const shift = event.shiftKey;\n        const ctrl = event.ctrlKey;\n        if (NAVIGATION_KEYS.has(key) && this.pendingNavigation) {\n            event.preventDefault();\n            return;\n        }\n\n        const type = this.isDataRow(this.activeNode.row) ? 'dataCell' :\n            this.isDataRow(this.activeNode.row, true) ? 'summaryCell' : 'groupRow';\n        if (this.emitKeyDown(type, this.activeNode.row, event)) {\n            return;\n        }\n        if (event.altKey) {\n            this.handleAlt(key, event);\n            return;\n        }\n        if ([' ', 'spacebar', 'space'].indexOf(key) === -1) {\n            this.grid.selectionService.keyboardStateOnKeydown(this.activeNode, shift, shift && key === 'tab');\n        }\n        const position = this.getNextPosition(this.activeNode.row, this.activeNode.column, key, shift, ctrl, event);\n        if (NAVIGATION_KEYS.has(key)) {\n            event.preventDefault();\n            this.navigateInBody(position.rowIndex, position.colIndex, (obj) => {\n                obj.target.activate(event);\n            });\n        }\n    }\n\n    public summaryNav(event: KeyboardEvent) {\n        if (this.grid.hasSummarizedColumns) {\n            this.horizontalNav(event, event.key.toLowerCase(), this.grid.dataView.length, 'summaryCell');\n        }\n    }\n\n    public headerNavigation(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (!HEADER_KEYS.has(key) || this.activeNode?.row !== -1) {\n            return;\n        }\n        event.preventDefault();\n\n        const ctrl = event.ctrlKey;\n        const shift = event.shiftKey;\n        const alt = event.altKey;\n\n        this.performHeaderKeyCombination(this.currentActiveColumn, key, shift, ctrl, alt, event);\n        if (shift || alt || (ctrl && (key.includes('down') || key.includes('down')))) {\n            return;\n        }\n        if (this.grid.hasColumnGroups) {\n            this.handleMCHeaderNav(key, ctrl);\n        } else {\n            this.horizontalNav(event, key, -1, 'headerCell');\n        }\n    }\n\n    public focusTbody(event) {\n        const gridRows = this.grid.verticalScrollContainer.totalItemCount ?? this.grid.dataView.length;\n        if (gridRows < 1) {\n            this.activeNode = null;\n            return;\n        }\n        if (!this.activeNode || !Object.keys(this.activeNode).length || this.activeNode.row < 0 || this.activeNode.row > gridRows - 1) {\n            const hasLastActiveNode = Object.keys(this.lastActiveNode).length;\n            const shouldClearSelection = hasLastActiveNode && (this.lastActiveNode.row < 0 || this.lastActiveNode.row > gridRows - 1);\n            this.setActiveNode(this.lastActiveNode.row >= 0 && this.lastActiveNode.row < gridRows ?\n                this.firstVisibleNode(this.lastActiveNode.row) : this.firstVisibleNode());\n            if (shouldClearSelection || (this.grid.cellSelection !== GridSelectionMode.multiple)) {\n                this.grid.clearCellSelection();\n                this.grid.navigateTo(this.activeNode.row, this.activeNode.column, (obj) => {\n                    obj.target?.activate(event);\n                });\n            } else {\n                if (hasLastActiveNode && !this.grid.selectionService.selected(this.lastActiveNode)) {\n                    return;\n                }\n                const range = {\n                    rowStart: this.activeNode.row, rowEnd: this.activeNode.row,\n                    columnStart: this.activeNode.column, columnEnd: this.activeNode.column\n                };\n                this.grid.selectRange(range);\n                this.grid.notifyChanges();\n            }\n        }\n    }\n\n    public focusFirstCell(header = true) {\n        if ((header || this.grid.dataView.length) && this.activeNode &&\n            (this.activeNode.row === -1 || this.activeNode.row === this.grid.dataView.length ||\n                (!header && !this.grid.hasSummarizedColumns))) {\n            return;\n        }\n        const shouldScrollIntoView = this.lastActiveNode && (header && this.lastActiveNode.row !== -1) ||\n            (!header && this.lastActiveNode.row !== this.grid.dataView.length);\n        this.setActiveNode(this.firstVisibleNode(header ? -1 : this.grid.dataView.length));\n        if (shouldScrollIntoView) {\n            this.performHorizontalScrollToCell(this.activeNode.column);\n        }\n    }\n\n    public isColumnFullyVisible(columnIndex: number) {\n        if (columnIndex < 0 || this.isColumnPinned(columnIndex, this.forOfDir())) {\n            return true;\n        }\n        const index = this.getColumnUnpinnedIndex(columnIndex);\n        const width = this.forOfDir().getColumnScrollLeft(index + 1) - this.forOfDir().getColumnScrollLeft(index);\n        if (this.displayContainerWidth < width && this.displayContainerScrollLeft === this.forOfDir().getColumnScrollLeft(index)) {\n            return true;\n        }\n        return this.displayContainerWidth >= this.forOfDir().getColumnScrollLeft(index + 1) - this.displayContainerScrollLeft &&\n            this.displayContainerScrollLeft <= this.forOfDir().getColumnScrollLeft(index);\n    }\n\n    public shouldPerformHorizontalScroll(visibleColIndex: number, rowIndex = -1) {\n        if (visibleColIndex < 0 || visibleColIndex > this.grid.visibleColumns.length - 1) {\n            return false;\n        }\n        if (rowIndex < 0 || rowIndex > this.grid.dataView.length - 1) {\n            return !this.isColumnFullyVisible(visibleColIndex);\n        }\n        const row = this.grid.dataView[rowIndex];\n        return row.expression || row.detailsData ? false : !this.isColumnFullyVisible(visibleColIndex);\n    }\n\n    public shouldPerformVerticalScroll(targetRowIndex: number, _visibleColIndex: number): boolean {\n        if (this.grid.isRecordPinnedByViewIndex(targetRowIndex)) {\n            return false;\n        }\n        const scrollRowIndex = this.grid.hasPinnedRecords && this.grid.isRowPinningToTop ?\n            targetRowIndex - this.grid.pinnedDataView.length : targetRowIndex;\n        const targetRow = this.getRowElementByIndex(targetRowIndex);\n        const rowHeight = this.grid.verticalScrollContainer.getSizeAt(scrollRowIndex);\n        const containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;\n        const endTopOffset = targetRow ? targetRow.offsetTop + rowHeight + this.containerTopOffset : containerHeight + rowHeight;\n        // this is workaround: endTopOffset - containerHeight > 5 and should be replaced with: containerHeight < endTopOffset\n        // when the page is zoomed the grid does not scroll the row completely in the view\n        return !targetRow || targetRow.offsetTop < Math.abs(this.containerTopOffset)\n            || containerHeight && endTopOffset - containerHeight > 5;\n    }\n\n    public performVerticalScrollToCell(rowIndex: number, visibleColIndex = -1, cb?: () => void) {\n        if (!this.shouldPerformVerticalScroll(rowIndex, visibleColIndex)) {\n            if (cb) {\n                cb();\n            }\n            return;\n        }\n        this.pendingNavigation = true;\n        // Only for top pinning we need to subtract pinned count because virtualization indexing doesn't count pinned rows.\n        const scrollRowIndex = this.grid.hasPinnedRecords && this.grid.isRowPinningToTop ?\n            rowIndex - this.grid.pinnedDataView.length : rowIndex;\n        this.grid.verticalScrollContainer.scrollTo(scrollRowIndex);\n        this.grid.verticalScrollContainer.chunkLoad\n            .pipe(first()).subscribe(() => {\n                this.pendingNavigation = false;\n                if (cb) {\n                    cb();\n                }\n            });\n    }\n\n    public performHorizontalScrollToCell(visibleColumnIndex: number, cb?: () => void) {\n        if (this.grid.rowList < 1 && this.grid.summariesRowList.length < 1 && this.grid.hasColumnGroups) {\n            let column = this.grid.getColumnByVisibleIndex(visibleColumnIndex);\n            while (column.parent) {\n                column = column.parent;\n            }\n            visibleColumnIndex = this.forOfDir().igxForOf.indexOf(column);\n        }\n        if (!this.shouldPerformHorizontalScroll(visibleColumnIndex)) {\n            return;\n        }\n        this.pendingNavigation = true;\n        this.grid.parentVirtDir.chunkLoad\n            .pipe(first())\n            .subscribe(() => {\n                this.pendingNavigation = false;\n                if (cb) {\n                    cb();\n                }\n            });\n        this.forOfDir().scrollTo(this.getColumnUnpinnedIndex(visibleColumnIndex));\n    }\n\n    public isDataRow(rowIndex: number, includeSummary = false) {\n        let curRow: any;\n\n        if (rowIndex < 0 || rowIndex > this.grid.dataView.length - 1) {\n            curRow = this.grid.dataView[rowIndex - this.grid.virtualizationState.startIndex];\n            if (!curRow) {\n                // if data is remote, record might not be in the view yet.\n                return this.grid.verticalScrollContainer.isRemote && rowIndex >= 0 && rowIndex <= (this.grid as any).totalItemCount - 1;\n            }\n        } else {\n            curRow = this.grid.dataView[rowIndex];\n        }\n        return curRow && !this.grid.isGroupByRecord(curRow) && !this.grid.isDetailRecord(curRow)\n            && !curRow.childGridsData && (includeSummary || !curRow.summaries);\n    }\n\n    public isGroupRow(rowIndex: number): boolean {\n        if (rowIndex < 0 || rowIndex > this.grid.dataView.length - 1) {\n            return false;\n        }\n        const curRow = this.grid.dataView[rowIndex];\n        return curRow && this.grid.isGroupByRecord(curRow);\n    }\n\n    public setActiveNode(activeNode: IActiveNode) {\n        if (!this.isActiveNodeChanged(activeNode)) {\n            return;\n        }\n\n        if (!this.activeNode) {\n            this.activeNode = activeNode;\n        }\n\n        Object.assign(this.activeNode, activeNode);\n\n        const currRow = this.grid.dataView[activeNode.row];\n        const type: GridKeydownTargetType = activeNode.row < 0 ? 'headerCell' :\n            this.isDataRow(activeNode.row) ? 'dataCell' :\n                currRow && this.grid.isGroupByRecord(currRow) ? 'groupRow' :\n                    currRow && this.grid.isDetailRecord(currRow) ? 'masterDetailRow' : 'summaryCell';\n\n        const args: IActiveNodeChangeEventArgs = {\n            row: this.activeNode.row,\n            column: this.activeNode.column,\n            level: this.activeNode.level,\n            tag: type\n        };\n\n        this.grid.activeNodeChange.emit(args);\n    }\n\n    public isActiveNodeChanged(activeNode: IActiveNode) {\n        let isChanged = false;\n        const checkInnerProp = (aciveNode: ColumnGroupsCache | IMultiRowLayoutNode, prop) => {\n            if (!aciveNode) {\n                isChanged = true;\n                return;\n            }\n\n            props = Object.getOwnPropertyNames(aciveNode);\n            for (const propName of props) {\n                if (this.activeNode[prop][propName] !== aciveNode[propName]) {\n                    isChanged = true;\n                }\n            }\n        };\n\n        if (!this.activeNode) {\n            return isChanged = true;\n        }\n\n        let props = Object.getOwnPropertyNames(activeNode);\n        for (const propName of props) {\n            if (!!this.activeNode[propName] && typeof this.activeNode[propName] === 'object') {\n                checkInnerProp(activeNode[propName], propName);\n            } else if (this.activeNode[propName] !== activeNode[propName]) {\n                isChanged = true;\n            }\n        }\n\n        return isChanged;\n    }\n\n    /** Focus the Grid section (header, body, footer) depending on the current activeNode */\n    public restoreActiveNodeFocus() {\n        if (!this.activeNode || !Object.keys(this.activeNode).length) {\n            return;\n        }\n\n        if (this.activeNode.row >= 0 && this.activeNode.row < this.grid.dataView.length) {\n            this.grid.tbody.nativeElement.focus();\n        }\n        if (this.activeNode.row === -1) {\n            this.grid.theadRow.nativeElement.focus();\n        }\n        if (this.activeNode.row === this.grid.dataView.length) {\n            this.grid.tfoot.nativeElement.focus();\n        }\n    }\n\n    protected getNextPosition(rowIndex: number, colIndex: number, key: string, shift: boolean, ctrl: boolean, event: KeyboardEvent) {\n        if (!this.isDataRow(rowIndex, true) && (key.indexOf('down') < 0 || key.indexOf('up') < 0) && ctrl) {\n            return { rowIndex, colIndex };\n        }\n        switch (key) {\n            case 'pagedown':\n            case 'pageup':\n                event.preventDefault();\n                if (key === 'pagedown') {\n                    this.grid.verticalScrollContainer.scrollNextPage();\n                } else {\n                    this.grid.verticalScrollContainer.scrollPrevPage();\n                }\n                const editCell = this.grid.crudService.cell;\n                this.grid.verticalScrollContainer.chunkLoad\n                    .pipe(first()).subscribe(() => {\n                        if (editCell && this.grid.rowList.map(r => r.index).indexOf(editCell.rowIndex) < 0) {\n                            this.grid.tbody.nativeElement.focus({ preventScroll: true });\n                        }\n                    });\n                break;\n            case 'tab':\n                this.handleEditing(shift, event);\n                break;\n            case 'end':\n                rowIndex = ctrl ? this.findLastDataRowIndex() : this.activeNode.row;\n                colIndex = this.lastColumnIndex;\n                break;\n            case 'home':\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : this.activeNode.row;\n                colIndex = 0;\n                break;\n            case 'arrowleft':\n            case 'left':\n                colIndex = ctrl ? 0 : this.activeNode.column - 1;\n                break;\n            case 'arrowright':\n            case 'right':\n                colIndex = ctrl ? this.lastColumnIndex : this.activeNode.column + 1;\n                break;\n            case 'arrowup':\n            case 'up':\n                if (ctrl && !this.isDataRow(rowIndex) || (this.grid.rowEditable && this.grid.crudService.rowEditingBlocked)) {\n                    break;\n                }\n                colIndex = this.activeNode.column !== undefined ? this.activeNode.column : 0;\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : this.activeNode.row - 1;\n                break;\n            case 'arrowdown':\n            case 'down':\n                if ((ctrl && !this.isDataRow(rowIndex)) || (this.grid.rowEditable && this.grid.crudService.rowEditingBlocked)) {\n                    break;\n                }\n                colIndex = this.activeNode.column !== undefined ? this.activeNode.column : 0;\n                rowIndex = ctrl ? this.findLastDataRowIndex() : this.activeNode.row + 1;\n                break;\n            case 'enter':\n            case 'f2':\n                const cell = this.grid.gridAPI.get_cell_by_visible_index(this.activeNode.row, this.activeNode.column);\n                if (!this.isDataRow(rowIndex) || !cell.editable) {\n                    break;\n                }\n                this.grid.crudService.enterEditMode(cell, event);\n                break;\n            case 'escape':\n            case 'esc':\n                if (!this.isDataRow(rowIndex)) {\n                    break;\n                }\n\n                if (this.grid.crudService.isInCompositionMode) {\n                    return;\n                }\n\n                if (this.grid.crudService.cellInEditMode || this.grid.crudService.rowInEditMode) {\n                    this.grid.crudService.endEdit(false, event);\n                    if (this.platform.isEdge) {\n                        this.grid.cdr.detectChanges();\n                    }\n                    this.grid.tbody.nativeElement.focus();\n                }\n                break;\n            case ' ':\n            case 'spacebar':\n            case 'space':\n                const rowObj = this.grid.gridAPI.get_row_by_index(this.activeNode.row);\n                if (this.grid.isRowSelectable && rowObj) {\n                    if (this.isDataRow(rowIndex)) {\n                        if (rowObj.selected) {\n                            this.grid.selectionService.deselectRow(rowObj.key, event);\n                        } else {\n                            this.grid.selectionService.selectRowById(rowObj.key, false, event);\n                        }\n                    }\n                    if (this.isGroupRow(rowIndex)) {\n                        (rowObj as any).onGroupSelectorClick(event);\n                    }\n                }\n                break;\n            default:\n                return;\n        }\n        return { rowIndex, colIndex };\n    }\n\n    protected horizontalNav(event: KeyboardEvent, key: string, rowIndex: number, tag: GridKeydownTargetType) {\n        const ctrl = event.ctrlKey;\n        if (!HORIZONTAL_NAV_KEYS.has(event.key.toLowerCase())) {\n            return;\n        }\n        event.preventDefault();\n        this.activeNode.row = rowIndex;\n        if (rowIndex > 0) {\n            if (this.emitKeyDown('summaryCell', this.activeNode.row, event)) {\n                return;\n            }\n        }\n\n        const newActiveNode = {\n            column: this.activeNode.column,\n            mchCache: {\n                level: this.activeNode.level,\n                visibleIndex: this.activeNode.column\n            }\n        };\n\n        if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n            newActiveNode.column = ctrl || key === 'home' ? 0 : this.activeNode.column - 1;\n        }\n        if ((key.includes('right') || key === 'end') && this.activeNode.column < this.lastColumnIndex) {\n            newActiveNode.column = ctrl || key === 'end' ? this.lastColumnIndex : this.activeNode.column + 1;\n        }\n\n        if (tag === 'headerCell') {\n            const column = this.grid.getColumnByVisibleIndex(newActiveNode.column);\n            newActiveNode.mchCache.level = column.level;\n            newActiveNode.mchCache.visibleIndex = column.visibleIndex;\n        }\n\n        this.setActiveNode({ row: this.activeNode.row, column: newActiveNode.column, mchCache: newActiveNode.mchCache });\n        this.performHorizontalScrollToCell(this.activeNode.column);\n    }\n\n    public get lastColumnIndex() {\n        return Math.max(...this.grid.visibleColumns.map(col => col.visibleIndex));\n    }\n    public get displayContainerWidth() {\n        return Math.round(this.grid.parentVirtDir.dc.instance._viewContainer.element.nativeElement.offsetWidth);\n    }\n    public get displayContainerScrollLeft() {\n        return Math.ceil(this.grid.headerContainer.scrollPosition);\n    }\n    public get containerTopOffset() {\n        const transform = this.grid.verticalScrollContainer.dc.instance._viewContainer.element.nativeElement.style.transform\n        return  Number(transform.match(/translateY\\((-?\\d+\\.?\\d*)px\\)/)?.[1])\n    }\n\n    protected getColumnUnpinnedIndex(visibleColumnIndex: number) {\n        const column = this.grid.unpinnedColumns.find((col) => !col.columnGroup && col.visibleIndex === visibleColumnIndex);\n        return this.grid.pinnedColumns.length ? this.grid.unpinnedColumns.filter((c) => !c.columnGroup).indexOf(column) :\n            visibleColumnIndex;\n    }\n\n    protected forOfDir(): IgxForOfDirective<any> {\n        const forOfDir = this.grid.dataRowList.length > 0 ? this.grid.dataRowList.first.virtDirRow : this.grid.summariesRowList.length ?\n            this.grid.summariesRowList.first.virtDirRow : this.grid.headerContainer;\n        return forOfDir as IgxForOfDirective<any>;\n    }\n\n    protected handleAlt(key: string, event: KeyboardEvent) {\n        event.preventDefault();\n        // todo TODO ROW\n        const row = this.grid.gridAPI.get_row_by_index(this.activeNode.row);\n\n        if (!(this.isToggleKey(key) || this.isAddKey(key)) || !row) {\n            return;\n        }\n        if (this.isAddKey(key)) {\n            if (!this.grid.rowEditable) {\n                console.warn('The grid must be in row edit mode to perform row adding!');\n                return;\n            }\n\n            if (event.shiftKey && row.treeRow !== undefined) {\n                this.grid.crudService.enterAddRowMode(row, true, event);\n            } else if (!event.shiftKey) {\n                this.grid.crudService.enterAddRowMode(row, false, event);\n            }\n        } else if (!row.expanded && ROW_EXPAND_KEYS.has(key)) {\n            if (row.key === undefined) {\n                // TODO use expanded row.expanded = !row.expanded;\n                (row as any).toggle();\n            } else {\n                this.grid.gridAPI.set_row_expansion_state(row.key, true, event);\n            }\n        } else if (row.expanded && ROW_COLLAPSE_KEYS.has(key)) {\n            if (row.key === undefined) {\n                // TODO use expanded row.expanded = !row.expanded;\n                (row as any).toggle();\n            } else {\n                this.grid.gridAPI.set_row_expansion_state(row.key, false, event);\n            }\n        }\n        this.grid.notifyChanges();\n    }\n\n    protected handleEditing(shift: boolean, event: KeyboardEvent) {\n        const next = shift ? this.grid.getPreviousCell(this.activeNode.row, this.activeNode.column, col => col.editable) :\n            this.grid.getNextCell(this.activeNode.row, this.activeNode.column, col => col.editable);\n        if (!this.grid.crudService.rowInEditMode && this.isActiveNode(next.rowIndex, next.visibleColumnIndex)) {\n            this.grid.crudService.endEdit(true, event);\n            this.grid.tbody.nativeElement.focus();\n            return;\n        }\n        event.preventDefault();\n        if ((this.grid.crudService.rowInEditMode && this.grid.rowEditTabs.length) &&\n            (this.activeNode.row !== next.rowIndex || this.isActiveNode(next.rowIndex, next.visibleColumnIndex))) {\n            const args = this.grid.crudService.updateCell(true, event);\n            if (args.cancel) {\n                return;\n            } else if (shift) {\n                this.grid.rowEditTabs.last.element.nativeElement.focus();\n            } else {\n                this.grid.rowEditTabs.first.element.nativeElement.focus();\n            }\n            return;\n        }\n\n        if (this.grid.crudService.rowInEditMode && !this.grid.rowEditTabs.length) {\n            if (shift && next.rowIndex === this.activeNode.row && next.visibleColumnIndex === this.activeNode.column) {\n                next.visibleColumnIndex = this.grid.lastEditableColumnIndex;\n            } else if (!shift && next.rowIndex === this.activeNode.row && next.visibleColumnIndex === this.activeNode.column) {\n                next.visibleColumnIndex = this.grid.firstEditableColumnIndex;\n            } else {\n                next.rowIndex = this.activeNode.row;\n            }\n        }\n\n        this.navigateInBody(next.rowIndex, next.visibleColumnIndex, (obj) => {\n            obj.target.activate(event);\n        });\n    }\n\n    protected navigateInBody(rowIndex, visibleColIndex, cb: (arg: any) => void = null): void {\n        if (!this.isValidPosition(rowIndex, visibleColIndex) || this.isActiveNode(rowIndex, visibleColIndex)) {\n            return;\n        }\n        this.grid.navigateTo(rowIndex, visibleColIndex, cb);\n    }\n\n\n    protected emitKeyDown(type: GridKeydownTargetType, rowIndex, event) {\n        const row = this.grid.summariesRowList.toArray().concat(this.grid.rowList.toArray()).find(r => r.index === rowIndex);\n        if (!row) {\n            return;\n        }\n\n        const target = type === 'groupRow' ? row :\n            type === 'dataCell' ? row.cells?.find(c => c.visibleColumnIndex === this.activeNode.column) :\n                row.summaryCells?.find(c => c.visibleColumnIndex === this.activeNode.column);\n        const keydownArgs = { targetType: type, event, cancel: false, target };\n        this.grid.gridKeydown.emit(keydownArgs);\n        if (keydownArgs.cancel && type === 'dataCell') {\n            this.grid.selectionService.clear();\n            this.grid.selectionService.keyboardState.active = true;\n            return keydownArgs.cancel;\n        }\n    }\n\n    protected isColumnPinned(columnIndex: number, forOfDir: IgxForOfDirective<any>): boolean {\n        const horizontalScroll = forOfDir.getScroll();\n        return (!horizontalScroll.clientWidth || this.grid.getColumnByVisibleIndex(columnIndex)?.pinned);\n    }\n\n    protected findFirstDataRowIndex(): number {\n        return this.grid.dataView.findIndex(rec => !this.grid.isGroupByRecord(rec) && !this.grid.isDetailRecord(rec) && !rec.summaries);\n    }\n\n    protected findLastDataRowIndex(): number {\n        if ((this.grid as any).totalItemCount) {\n            return (this.grid as any).totalItemCount - 1;\n        }\n        let i = this.grid.dataView.length;\n        while (i--) {\n            if (this.isDataRow(i)) {\n                return i;\n            }\n        }\n    }\n\n    protected getRowElementByIndex(index) {\n        if (this.grid.hasDetails) {\n            const detail = this.grid.nativeElement.querySelector(`[detail=\"true\"][data-rowindex=\"${index}\"]`);\n            if (detail) {\n                return detail;\n            }\n        }\n        return this.grid.rowList.toArray().concat(this.grid.summariesRowList.toArray()).find(r => r.index === index)?.nativeElement;\n    }\n\n    protected isValidPosition(rowIndex: number, colIndex: number): boolean {\n        const length = (this.grid as any).totalItemCount ?? this.grid.dataView.length;\n        if (rowIndex < 0 || colIndex < 0 || length - 1 < rowIndex || this.lastColumnIndex < colIndex) {\n            return false;\n        }\n        return this.activeNode.column !== colIndex && !this.isDataRow(rowIndex, true) ? false : true;\n    }\n    protected performHeaderKeyCombination(column, key, shift, ctrl, alt, event) {\n        let direction = this.grid.sortingExpressions.find(expr => expr.fieldName === column.field)?.dir;\n        if (ctrl && key.includes('up') && column.sortable && !column.columnGroup) {\n            direction = direction === SortingDirection.Asc ? SortingDirection.None : SortingDirection.Asc;\n            this.grid.sort({ fieldName: column.field, dir: direction, ignoreCase: false });\n            return;\n        }\n        if (ctrl && key.includes('down') && column.sortable && !column.columnGroup) {\n            direction = direction === SortingDirection.Desc ? SortingDirection.None : SortingDirection.Desc;\n            this.grid.sort({ fieldName: column.field, dir: direction, ignoreCase: false });\n            return;\n        }\n        if (shift && alt && this.isToggleKey(key) && !column.columnGroup && column.groupable) {\n            direction = direction || SortingDirection.Asc;\n            if (key.includes('right')) {\n                (this.grid as any).groupBy({\n                    fieldName: column.field,\n                    dir: direction,\n                    ignoreCase: column.sortingIgnoreCase,\n                    strategy: column.sortStrategy,\n                    groupingComparer: column.groupingComparer,\n                });\n            } else {\n                (this.grid as any).clearGrouping(column.field);\n            }\n            this.activeNode.column = key.includes('right') && (this.grid as any).hideGroupedColumns &&\n                column.visibleIndex === this.lastColumnIndex ? this.lastColumnIndex - 1 : this.activeNode.column;\n            return;\n        }\n        if (alt && (ROW_EXPAND_KEYS.has(key) || ROW_COLLAPSE_KEYS.has(key))) {\n            this.handleMCHExpandCollapse(key, column);\n            return;\n        }\n        if ([' ', 'spacebar', 'space'].indexOf(key) !== -1) {\n            this.handleColumnSelection(column, event);\n        }\n        if (alt && (key === 'l' || key === '¬') && this.grid.allowAdvancedFiltering) {\n            this.grid.openAdvancedFilteringDialog();\n        }\n        if (ctrl && shift && key === 'l' && this.grid.allowFiltering && !column.columnGroup && column.filterable) {\n            if (this.grid.filterMode === FilterMode.excelStyleFilter) {\n                const headerEl = this.grid.headerGroups.find(g => g.active).nativeElement;\n                this.grid.filteringService.toggleFilterDropdown(headerEl, column);\n            } else {\n                this.performHorizontalScrollToCell(column.visibleIndex);\n                this.grid.filteringService.filteredColumn = column;\n                this.grid.filteringService.isFilterRowVisible = true;\n            }\n        }\n    }\n\n    private firstVisibleNode(rowIndex?) {\n        const colIndex = this.lastActiveNode.column !== undefined ? this.lastActiveNode.column :\n            this.grid.visibleColumns.sort((c1, c2) => c1.visibleIndex - c2.visibleIndex)\n                .find(c => this.isColumnFullyVisible(c.visibleIndex))?.visibleIndex;\n        const column = this.grid.visibleColumns.find((col) => !col.columnLayout && col.visibleIndex === colIndex);\n        const rowInd = rowIndex ? rowIndex : this.grid.rowList.find(r => !this.shouldPerformVerticalScroll(r.index, colIndex))?.index;\n        const node = {\n            row: rowInd ?? 0,\n            column: column?.visibleIndex ?? 0, level: column?.level ?? 0,\n            mchCache: column ? { level: column.level, visibleIndex: column.visibleIndex } : {} as ColumnGroupsCache,\n            layout: column && column.columnLayoutChild ? {\n                rowStart: column.rowStart, colStart: column.colStart,\n                rowEnd: column.rowEnd, colEnd: column.colEnd, columnVisibleIndex: column.visibleIndex\n            } : null\n        };\n        return node;\n    }\n\n    private handleMCHeaderNav(key: string, ctrl: boolean) {\n        const newHeaderNode: ColumnGroupsCache = {\n            visibleIndex: this.activeNode.mchCache.visibleIndex,\n            level: this.activeNode.mchCache.level\n        };\n        const activeCol = this.currentActiveColumn;\n        const lastGroupIndex = Math.max(... this.grid.visibleColumns.\n            filter(c => c.level <= this.activeNode.level).map(col => col.visibleIndex));\n        let nextCol = activeCol;\n        if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n            const index = ctrl || key === 'home' ? 0 : this.activeNode.column - 1;\n            nextCol = this.getNextColumnMCH(index);\n            newHeaderNode.visibleIndex = nextCol.visibleIndex;\n        }\n        if ((key.includes('right') || key === 'end') && activeCol.visibleIndex < lastGroupIndex) {\n            const nextVIndex = activeCol.children ? Math.max(...activeCol.allChildren.map(c => c.visibleIndex)) + 1 :\n                activeCol.visibleIndex + 1;\n            nextCol = ctrl || key === 'end' ? this.getNextColumnMCH(this.lastColumnIndex) : this.getNextColumnMCH(nextVIndex);\n            newHeaderNode.visibleIndex = nextCol.visibleIndex;\n        }\n        if (!ctrl && key.includes('up') && this.activeNode.level > 0) {\n            nextCol = activeCol.parent;\n            newHeaderNode.level = nextCol.level;\n        }\n        if (!ctrl && key.includes('down') && activeCol.children) {\n            nextCol = activeCol.children.find(c => c.visibleIndex === newHeaderNode.visibleIndex) ||\n                activeCol.children.toArray().sort((a, b) => b.visibleIndex - a.visibleIndex)\n                    .filter(col => col.visibleIndex < newHeaderNode.visibleIndex)[0];\n            newHeaderNode.level = nextCol.level;\n        }\n\n        this.setActiveNode({\n            row: this.activeNode.row,\n            column: nextCol.visibleIndex,\n            level: nextCol.level,\n            mchCache: newHeaderNode\n        });\n        this.performHorizontalScrollToCell(nextCol.visibleIndex);\n    }\n\n    private handleMCHExpandCollapse(key, column) {\n        if (!column.children || !column.collapsible) {\n            return;\n        }\n        if (!column.expanded && ROW_EXPAND_KEYS.has(key)) {\n            column.expanded = true;\n        } else if (column.expanded && ROW_COLLAPSE_KEYS.has(key)) {\n            column.expanded = false;\n        }\n    }\n\n    private handleColumnSelection(column, event) {\n        if (!column.selectable || this.grid.columnSelection === GridSelectionMode.none) {\n            return;\n        }\n        const clearSelection = this.grid.columnSelection === GridSelectionMode.single;\n        const columnsToSelect = !column.children ? [column.field] :\n            column.allChildren.filter(c => !c.hidden && c.selectable && !c.columnGroup).map(c => c.field);\n        if (column.selected) {\n            this.grid.selectionService.deselectColumns(columnsToSelect, event);\n        } else {\n            this.grid.selectionService.selectColumns(columnsToSelect, clearSelection, false, event);\n        }\n    }\n\n    private getNextColumnMCH(visibleIndex) {\n        let col = this.grid.getColumnByVisibleIndex(visibleIndex);\n        let parent = col.parent;\n        while (parent && col.level > this.activeNode.mchCache.level) {\n            col = col.parent;\n            parent = col.parent;\n        }\n        return col;\n    }\n\n    private get currentActiveColumn() {\n        return this.grid.visibleColumns.find(c => c.visibleIndex === this.activeNode.column && c.level === this.activeNode.level);\n    }\n\n    private isActiveNode(rIndex: number, cIndex: number): boolean {\n        return this.activeNode ? this.activeNode.row === rIndex && this.activeNode.column === cIndex : false;\n    }\n\n    private isToggleKey(key: string): boolean {\n        return ROW_COLLAPSE_KEYS.has(key) || ROW_EXPAND_KEYS.has(key);\n    }\n\n    private isAddKey(key: string): boolean {\n        return ROW_ADD_KEYS.has(key);\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { FormControl, FormGroup } from '@angular/forms';\nimport { columnFieldPath, type ColumnType, resolveNestedPath } from 'igniteui-angular/core';\nimport { GridType, IFieldValidationState, IGridFormGroupCreatedEventArgs, IRecordValidationState, ValidationStatus } from './common/grid.interface';\n\n@Injectable()\nexport class IgxGridValidationService {\n    /**\n     * @hidden\n     * @internal\n     */\n    public grid: GridType;\n    private _validityStates = new Map<any, FormGroup>();\n    private _valid = true;\n\n\n    /** Gets whether state is valid.\n    */\n    public get valid(): boolean {\n        return this._valid;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public create(rowId, data) {\n        let formGroup = this.getFormGroup(rowId);\n        if (!formGroup) {\n            formGroup = new FormGroup({});\n            for (const col of this.grid.columns) {\n                this.addFormControl(formGroup, data, col);\n            }\n            const args: IGridFormGroupCreatedEventArgs = {\n                formGroup,\n                owner: this.grid\n            };\n            this.grid.formGroupCreated.emit(args);\n            formGroup.patchValue(data);\n            this.add(rowId, formGroup);\n        } else {\n            // reset to pristine.\n            for (const col of this.grid.columns) {\n                const formControl = formGroup.get(col.field);\n                if (formControl) {\n                    formControl.markAsPristine();\n                } else {\n                    this.addFormControl(formGroup, data, col);\n                }\n            }\n        }\n\n        return formGroup;\n    }\n\n    /**\n    * @hidden\n    * @internal\n    */\n    private addFormControl(formGroup: FormGroup, data: any, column: ColumnType) {\n        const value = resolveNestedPath(data || {}, columnFieldPath(column.field));\n        const control = new FormControl(value, { updateOn: this.grid.validationTrigger });\n        control.addValidators(column.validators);\n        formGroup.addControl(column.field, control);\n        control.setValue(value);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     Wraps the provided path into an array. This way FormGroup.get will return proper result.\n     Otherwise, if the path is a string (e.g. 'address.street'), FormGroup.get will treat it as there is a nested structure\n     and will look for control with a name of 'address' which returns undefined.\n     */\n    private getFormControlPath(path: string): (string)[] {\n        return [path];\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getFormGroup(id: any) {\n        return this._validityStates.get(id);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getFormControl(rowId: any, columnKey: string) {\n        const formControl = this.getFormGroup(rowId);\n        const path = this.getFormControlPath(columnKey);\n        return formControl?.get(path);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public add(rowId: any, form: FormGroup) {\n        this._validityStates.set(rowId, form);\n    }\n\n    /**\n     * Checks the validity of the native ngControl\n     */\n    public isFieldInvalid(formGroup: FormGroup, fieldName: string): boolean {\n        const path = this.getFormControlPath(fieldName);\n        return formGroup.get(path)?.invalid && formGroup.get(path)?.touched;\n    }\n\n    /**\n     * Checks the validity of the native ngControl after edit\n     */\n    public isFieldValidAfterEdit(formGroup: FormGroup, fieldName: string): boolean {\n        const path = this.getFormControlPath(fieldName);\n        return !formGroup.get(path)?.invalid && formGroup.get(path)?.dirty;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private getValidity(): IRecordValidationState[] {\n        const states: IRecordValidationState[] = [];\n        this._validityStates.forEach((formGroup, key) => {\n            const state: IFieldValidationState[] = [];\n            for (const col of this.grid.columns) {\n                const path = this.getFormControlPath(col.field);\n                const control = formGroup.get(path);\n                if (control) {\n                    state.push({ field: col.field, status: control.status as ValidationStatus, errors: control.errors })\n                }\n            }\n            states.push({ key: key, status: formGroup.status as ValidationStatus, fields: state, errors: formGroup.errors });\n        });\n        return states;\n    }\n\n    /**\n     * Returns all invalid record states.\n     */\n    public getInvalid(): IRecordValidationState[] {\n        const validity = this.getValidity();\n        return validity.filter(x => x.status === 'INVALID');\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public update(rowId: any, rowData: any) {\n        if (!rowData) return;\n        const keys = Object.keys(rowData);\n        const rowGroup = this.getFormGroup(rowId);\n        for (const key of keys) {\n            const path = this.getFormControlPath(key);\n            const control = rowGroup?.get(path);\n            if (control && control.value !== rowData[key]) {\n                control.setValue(rowData[key], { emitEvent: false });\n            }\n        }\n\n        this.updateStatus();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     * Update validity based on new data.\n     */\n    public updateAll(newData: any) {\n        if (!newData || this._validityStates.size === 0) return;\n        for (const rec of newData) {\n            const rowId = rec[this.grid.primaryKey] || rec;\n            if (this.getFormGroup(rowId)) {\n                const recAggregatedData = this.grid.transactions.getAggregatedValue(rowId, true) || rec;\n                this.update(rowId, recAggregatedData);\n            }\n        }\n    }\n\n    /** Marks the associated record or field as touched.\n     * @param key The id of the record that will be marked as touched.\n     * @param field Optional. The field from the record that will be marked as touched. If not provided all fields will be touched.\n    */\n    public markAsTouched(key: any, field?: string) {\n        const rowGroup = this.getFormGroup(key);\n        if (!rowGroup) return;\n        rowGroup.markAsTouched();\n        const fields = field ? [field] : this.grid.columns.map(x => x.field);\n        for (const currField of fields) {\n            const path = this.getFormControlPath(currField);\n            rowGroup?.get(path)?.markAsTouched();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private updateStatus() {\n        const currentValid = this.valid;\n        this._valid = this.getInvalid().length === 0;\n        if (this.valid !== currentValid) {\n            this.grid.validationStatusChange.emit({ status: this.valid ? 'VALID' : 'INVALID', owner: this.grid });\n        }\n    }\n\n    /** Clears validation state by key or all states if none is provided.\n     * @param key Optional. The key of the record for which to clear state.\n    */\n    public clear(key?: any) {\n        if (key !== undefined) {\n            this._validityStates.delete(key);\n        } else {\n            this._validityStates.clear();\n        }\n        this.updateStatus();\n    }\n\n}\n","import { Directive } from '@angular/core';\nimport { ConnectedPositioningStrategy } from 'igniteui-angular/core';\nimport { VerticalAlignment, PositionSettings, Point, Util } from 'igniteui-angular/core';\nimport { IgxForOfSyncService } from 'igniteui-angular/directives';\nimport { scaleInVerBottom, scaleInVerTop } from 'igniteui-angular/animations';\n\n\n@Directive({\n    selector: '[igxGridBody]',\n    providers: [IgxForOfSyncService],\n    standalone: true\n})\nexport class IgxGridBodyDirective { }\n\n\n/**\n * @hidden\n */\nexport interface RowEditPositionSettings extends PositionSettings {\n    container?: HTMLElement;\n}\n\n/**\n * @hidden\n */\nexport class RowEditPositionStrategy extends ConnectedPositioningStrategy {\n    public isTop = false;\n    public isTopInitialPosition = null;\n    public override settings: RowEditPositionSettings;\n    private io: IntersectionObserver | null = null;\n\n    public override position(contentElement: HTMLElement, _size: { width: number; height: number }, document?: Document, initialCall?: boolean,\n        target?: Point | HTMLElement): void {\n        this.internalPosition(contentElement, _size, document, initialCall, target);\n        // Use the IntersectionObserverHelper to manage position updates when the target moves\n        this.io?.disconnect();\n        const targetElement: HTMLElement = target as HTMLElement; // current grid.row\n        this.io = Util.setupIntersectionObserver(\n            targetElement,\n            document,\n            () => this.internalPosition(contentElement, { width: targetElement.clientWidth, height: targetElement.clientHeight }, document, false, targetElement)\n        );\n    }\n\n    private internalPosition(contentElement: HTMLElement, _size: { width: number; height: number }, document?: Document, initialCall?: boolean,\n        target?: Point | HTMLElement): void {\n        const container = this.settings.container; // grid.tbody\n        const targetElement: HTMLElement = target as HTMLElement; // current grid.row\n\n        // Position of the overlay depends on the available space in the grid.\n        // If the bottom space is not enough then the the row overlay will show at the top of the row.\n        // Once shown, either top or bottom, then this position stays until the overlay is closed (isTopInitialPosition property),\n        // which means that when scrolling then overlay may hide, while the row is still visible (UX requirement).\n        this.isTop = this.isTopInitialPosition !== null ?\n            this.isTopInitialPosition :\n            container.getBoundingClientRect().bottom <\n            targetElement.getBoundingClientRect().bottom + contentElement.getBoundingClientRect().height;\n\n        // Set width of the row editing overlay to equal row width, otherwise it fits 100% of the grid.\n        contentElement.style.width = targetElement.clientWidth + 'px';\n        this.settings.verticalStartPoint = this.settings.verticalDirection = this.isTop ? VerticalAlignment.Top : VerticalAlignment.Bottom;\n        this.settings.openAnimation = this.isTop ? scaleInVerBottom : scaleInVerTop;\n\n        super.position(contentElement, { width: targetElement.clientWidth, height: targetElement.clientHeight },\n            document, initialCall, targetElement);\n    }\n\n    /**\n     * Cleans up the IntersectionObserver and stored references\n     */\n    public dispose(): void {\n        this.io?.disconnect();\n        this.io = null;\n    }\n}\n","import { useAnimation } from '@angular/animations';\nimport {\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ElementRef,\n    HostBinding,\n    HostListener,\n    Input,\n    TemplateRef,\n    ViewChild,\n    NgZone,\n    OnInit,\n    OnDestroy,\n    OnChanges,\n    SimpleChanges,\n    ViewChildren,\n    QueryList,\n    AfterViewInit,\n    booleanAttribute,\n    inject\n} from '@angular/core';\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\n\nimport { first, takeUntil, takeWhile } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\n\nimport {\n    PlatformUtil,\n    AutoPositionStrategy,\n    HorizontalAlignment,\n    IgxOverlayService,\n    GridColumnDataType,\n    ColumnType,\n    IgxNumberFormatterPipe,\n    IgxDateFormatterPipe,\n    IgxCurrencyFormatterPipe,\n    IgxPercentFormatterPipe\n} from 'igniteui-angular/core';\nimport { IgxGridSelectionService } from './selection/selection.service';\nimport { HammerGesturesManager } from 'igniteui-angular/core';\nimport { GridSelectionMode } from './common/enums';\nimport { CellType, IgxCellTemplateContext, IGX_GRID_BASE, RowType } from './common/grid.interface';\nimport { IgxRowDirective } from './row.directive';\nimport { ISearchInfo } from './common/events';\nimport { IgxGridCell } from './grid-public-cell';\nimport { ISelectionNode } from './common/types';\nimport { IgxIconComponent } from 'igniteui-angular/icon';\nimport { IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxColumnFormatterPipe } from './common/pipes';\nimport {\n    IgxTooltipDirective,\n    IgxTooltipTargetDirective,\n    IgxDateTimeEditorDirective,\n    IgxTextSelectionDirective,\n    IgxFocusDirective,\n    IgxTextHighlightDirective\n } from 'igniteui-angular/directives';\nimport { fadeOut, scaleInCenter } from 'igniteui-angular/animations';\nimport { IgxChipComponent } from 'igniteui-angular/chips';\nimport { IgxInputDirective, IgxInputGroupComponent, IgxPrefixDirective, IgxSuffixDirective } from 'igniteui-angular/input-group';\nimport { IgxCheckboxComponent } from 'igniteui-angular/checkbox';\nimport { IgxDatePickerComponent } from 'igniteui-angular/date-picker';\nimport { IgxTimePickerComponent } from 'igniteui-angular/time-picker';\n\n/**\n * Providing reference to `IgxGridCellComponent`:\n * ```typescript\n * @ViewChild('grid', { read: IgxGridComponent })\n *  public grid: IgxGridComponent;\n * ```\n * ```typescript\n *  let column = this.grid.columnList.first;\n * ```\n * ```typescript\n *  let cell = column.cells[0];\n * ```\n */\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    selector: 'igx-grid-cell',\n    templateUrl: './cell.component.html',\n    providers: [HammerGesturesManager],\n    imports: [\n        NgClass,\n        NgTemplateOutlet,\n        IgxNumberFormatterPipe,\n        IgxPercentFormatterPipe,\n        IgxCurrencyFormatterPipe,\n        IgxDateFormatterPipe,\n        ReactiveFormsModule,\n        IgxChipComponent,\n        IgxTextHighlightDirective,\n        IgxIconComponent,\n        IgxInputGroupComponent,\n        IgxInputDirective,\n        IgxFocusDirective,\n        IgxTextSelectionDirective,\n        IgxCheckboxComponent,\n        IgxDatePickerComponent,\n        IgxTimePickerComponent,\n        IgxDateTimeEditorDirective,\n        IgxPrefixDirective,\n        IgxSuffixDirective,\n        IgxTooltipTargetDirective,\n        IgxTooltipDirective,\n        IgxGridCellImageAltPipe,\n        IgxStringReplacePipe,\n        IgxColumnFormatterPipe\n    ]\n})\nexport class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy, CellType, AfterViewInit {\n    protected selectionService = inject(IgxGridSelectionService);\n    public grid = inject(IGX_GRID_BASE);\n    protected overlayService = inject(IgxOverlayService);\n    public cdr = inject(ChangeDetectorRef);\n    private element = inject(ElementRef<HTMLElement>);\n    protected zone = inject(NgZone);\n    private touchManager = inject(HammerGesturesManager);\n    protected platformUtil = inject(PlatformUtil);\n\n    private _destroy$ = new Subject<void>();\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid__td--new')\n    public get isEmptyAddRowCell() {\n        return this.intRow.addRowUI && (this.value === undefined || this.value === null);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChildren('error', { read: IgxTooltipDirective })\n    public errorTooltip: QueryList<IgxTooltipDirective>;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @ViewChild('errorIcon', { read: IgxIconComponent, static: false })\n    public errorIcon: IgxIconComponent;\n\n    /**\n     * Gets the default error template.\n     * @hidden @internal\n     */\n    @ViewChild('defaultError', { read: TemplateRef, static: true })\n    public defaultErrorTemplate: TemplateRef<any>;\n\n    /**\n     * Gets the column of the cell.\n     * ```typescript\n     *  let cellColumn = this.cell.column;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public column: ColumnType;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public isPlaceholder: boolean;\n\n    /**\n        Gets whether this cell is a merged cell.\n     */\n    @Input()\n    public isMerged: boolean;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    protected get formGroup(): FormGroup {\n        return this.grid.validation.getFormGroup(this.intRow.key);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public intRow: IgxRowDirective;\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 get row(): RowType {\n        return this.grid.createRow(this.intRow.index);\n    }\n\n    /**\n     * Gets the data of the row of the cell.\n     * ```typescript\n     * let rowData = this.cell.rowData;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public rowData: any;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public columnData: any;\n\n    /**\n     * Sets/gets the template of the cell.\n     * ```html\n     * <ng-template #cellTemplate igxCell let-value>\n     *   <div style=\"font-style: oblique; color:blueviolet; background:red\">\n     *       <span>{{value}}</span>\n     *   </div>\n     * </ng-template>\n     * ```\n     * ```typescript\n     * @ViewChild('cellTemplate',{read: TemplateRef})\n     * cellTemplate: TemplateRef<any>;\n     * ```\n     * ```typescript\n     * this.cell.cellTemplate = this.cellTemplate;\n     * ```\n     * ```typescript\n     * let template =  this.cell.cellTemplate;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public cellTemplate: TemplateRef<any>;\n\n    @Input()\n    public cellValidationErrorTemplate: TemplateRef<any>;\n\n    @Input()\n    public pinnedIndicator: TemplateRef<any>;\n\n    /**\n     * Sets/gets the cell value.\n     * ```typescript\n     * this.cell.value = \"Cell Value\";\n     * ```\n     * ```typescript\n     * let cellValue = this.cell.value;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public value: any;\n\n    /**\n     * Gets the cell formatter.\n     * ```typescript\n     * let cellForamatter = this.cell.formatter;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public formatter: (value: any, rowData?: any, columnData?: any) => any;\n\n    /**\n     * Gets the cell template context object.\n     * ```typescript\n     *  let context = this.cell.context();\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get context(): IgxCellTemplateContext {\n        const getCellType = () => this.getCellType(true);\n        const ctx: IgxCellTemplateContext = {\n            $implicit: this.value,\n            additionalTemplateContext: this.column.additionalTemplateContext,\n            get cell() {\n                /* Turns the `cell` property from the template context object into lazy-evaluated one.\n                 * Otherwise on each detection cycle the cell template is recreating N cell instances where\n                 * N = number of visible cells in the grid, leading to massive performance degradation in large grids.\n                 */\n                return getCellType();\n            }\n        };\n        if (this.editMode) {\n            ctx.formControl = this.formControl;\n        }\n        if (this.isInvalid) {\n            ctx.defaultErrorTemplate = this.defaultErrorTemplate;\n        }\n        return ctx;\n    }\n\n    /**\n     * Gets the cell template.\n     * ```typescript\n     * let template = this.cell.template;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get template(): TemplateRef<any> {\n        if (this.isPlaceholder) {\n            return this.emptyCellTemplate;\n        }\n        if (this.editMode && this.formGroup) {\n            const inlineEditorTemplate = this.column.inlineEditorTemplate;\n            return inlineEditorTemplate ? inlineEditorTemplate : this.inlineEditorTemplate;\n        }\n        if (this.cellTemplate) {\n            return this.cellTemplate;\n        }\n        if (this.grid.rowEditable && this.intRow.addRowUI) {\n            return this.addRowCellTemplate;\n        }\n        return this.defaultCellTemplate;\n    }\n\n    /**\n     * Gets the pinned indicator template.\n     * ```typescript\n     * let template = this.cell.pinnedIndicatorTemplate;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get pinnedIndicatorTemplate() {\n        if (this.pinnedIndicator) {\n            return this.pinnedIndicator;\n        }\n        return this.defaultPinnedIndicator;\n    }\n\n    /**\n     * Gets the `id` of the grid in which the cell is stored.\n     * ```typescript\n     * let gridId = this.cell.gridID;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get gridID(): any {\n        return this.intRow.gridID;\n    }\n\n\n    /**\n     * Gets the `index` of the row where the cell is stored.\n     * ```typescript\n     * let rowIndex = this.cell.rowIndex;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.data-rowIndex')\n    public get rowIndex(): number {\n        return this.intRow.index;\n    }\n\n    /**\n     * Gets the `index` of the cell column.\n     * ```typescript\n     * let columnIndex = this.cell.columnIndex;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get columnIndex(): number {\n        return this.column.index;\n    }\n\n    /**\n     * Returns the column visible index.\n     * ```typescript\n     * let visibleColumnIndex = this.cell.visibleColumnIndex;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.data-visibleIndex')\n    @Input()\n    public get visibleColumnIndex() {\n        return this.column.columnLayoutChild ? this.column.visibleIndex : this._vIndex;\n    }\n\n    public set visibleColumnIndex(val) {\n        this._vIndex = val;\n    }\n\n    /**\n     * Gets the ID of the cell.\n     * ```typescript\n     * let cellID = this.cell.cellID;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get cellID() {\n        const primaryKey = this.grid.primaryKey;\n        const rowID = primaryKey ? this.rowData[primaryKey] : this.rowData;\n        return { rowID, columnID: this.columnIndex, rowIndex: this.rowIndex };\n    }\n\n    @HostBinding('attr.id')\n    public get attrCellID() {\n        return `${this.intRow.gridID}_${this.rowIndex}_${this.visibleColumnIndex}`;\n    }\n\n    @HostBinding('attr.title')\n    public get title() {\n        if (this.editMode || this.cellTemplate || this.errorShowing) {\n            return '';\n        }\n\n        if (this.formatter) {\n            return this.formatter(this.value, this.rowData, this.columnData);\n        }\n\n        const args = this.column.pipeArgs;\n        const locale = this.grid.locale;\n        const i18nFormatter = this.grid.i18nFormatter;\n\n        switch (this.column.dataType) {\n            case GridColumnDataType.Percent:\n                return i18nFormatter.formatPercent(this.value, locale, args.digitsInfo);\n            case GridColumnDataType.Currency:\n                return i18nFormatter.formatCurrency(this.value, locale, args.display, this.currencyCode, args.digitsInfo);\n            case GridColumnDataType.Date:\n            case GridColumnDataType.DateTime:\n            case GridColumnDataType.Time:\n                return i18nFormatter.formatDate(this.value, args.format, locale, args.timezone);\n        }\n        return this.value;\n    }\n\n    @HostBinding('class.igx-grid__td--bool-true')\n    public get booleanClass() {\n        return this.column.dataType === 'boolean' && this.value;\n    }\n\n    /**\n     * Returns a reference to the nativeElement of the cell.\n     * ```typescript\n     * let cellNativeElement = this.cell.nativeElement;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get nativeElement(): HTMLElement {\n        return this.element.nativeElement;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public get cellSelectionMode() {\n        return this._cellSelection;\n    }\n\n    public set cellSelectionMode(value) {\n        if (this._cellSelection === value) {\n            return;\n        }\n        this.zone.runOutsideAngular(() => {\n            if (value === GridSelectionMode.multiple) {\n                this.addPointerListeners(value);\n            } else {\n                this.removePointerListeners(this._cellSelection);\n            }\n        });\n        this._cellSelection = value;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    public set lastSearchInfo(value: ISearchInfo) {\n        this._lastSearchInfo = value;\n        this.highlightText(this._lastSearchInfo.searchText, this._lastSearchInfo.caseSensitive, this._lastSearchInfo.exactMatch);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--pinned-last')\n    public lastPinned = false;\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--pinned-first')\n    public firstPinned = false;\n\n    /**\n     * Returns whether the cell is in edit mode.\n     */\n    @Input({ transform: booleanAttribute })\n    @HostBinding('class.igx-grid__td--editing')\n    public editMode = false;\n\n    /**\n     * Sets/get the `role` property of the cell.\n     * Default value is `\"gridcell\"`.\n     * ```typescript\n     * this.cell.role = 'grid-cell';\n     * ```\n     * ```typescript\n     * let cellRole = this.cell.role;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.role')\n    public role = 'gridcell';\n\n    /**\n     * Gets whether the cell is editable.\n     * ```typescript\n     * let isCellReadonly = this.cell.readonly;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('attr.aria-readonly')\n    public get readonly(): boolean {\n        return !this.editable;\n    }\n\n    /** @hidden @internal */\n    @HostBinding('attr.aria-describedby')\n    public get ariaDescribeBy() {\n        return this.isInvalid ? this.ariaErrorMessage : null;\n    }\n\n    /** @hidden @internal */\n    public get ariaErrorMessage() {\n        return this.grid.id + '_' + this.column.field + '_' + this.intRow.index + '_error';\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid__td--invalid')\n    @HostBinding('attr.aria-invalid')\n    public get isInvalid() {\n        if (this.formGroup) {\n            const isInvalid = this.grid.validation?.isFieldInvalid(this.formGroup, this.column?.field);\n            return !this.intRow.deleted && isInvalid;\n        }\n        return false;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostBinding('class.igx-grid__td--valid')\n    public get isValidAfterEdit() {\n        if (this.formGroup) {\n            const isValidAfterEdit = this.grid.validation?.isFieldValidAfterEdit(this.formGroup, this.column?.field);\n            return this.editMode && isValidAfterEdit;\n        }\n        return false;\n    }\n\n    /**\n     * Gets the formControl responsible for value changes and validation for this cell.\n     */\n    protected get formControl(): FormControl {\n        return this.grid.validation.getFormControl(this.intRow.key, this.column.field) as FormControl;\n    }\n\n    public get gridRowSpan(): number {\n        return this.column.gridRowSpan;\n    }\n\n    public get gridColumnSpan(): number {\n        return this.column.gridColumnSpan;\n    }\n\n    public get rowEnd(): number {\n        return this.column.rowEnd;\n    }\n\n    public get colEnd(): number {\n        return this.column.colEnd;\n    }\n\n    public get rowStart(): number {\n        return this.column.rowStart;\n    }\n\n    public get colStart(): number {\n        return this.column.colStart;\n    }\n\n    /**\n     * Gets the width of the cell.\n     * ```typescript\n     * let cellWidth = this.cell.width;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @Input()\n    public width = '';\n\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--active')\n    public active = false;\n\n    @HostBinding('attr.aria-selected')\n    public get ariaSelected() {\n        return this.selected || this.column.selected || this.intRow.selected;\n    }\n\n    /**\n     * Gets whether the cell is selected.\n     * ```typescript\n     * let isSelected = this.cell.selected;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('class.igx-grid__td--selected')\n    public get selected() {\n        return this.selectionService.selected(this.selectionNode);\n    }\n\n    /**\n     * Selects/deselects the cell.\n     * ```typescript\n     * this.cell.selected = true.\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public set selected(val: boolean) {\n        const node = this.selectionNode;\n        if (val) {\n            this.selectionService.add(node);\n        } else {\n            this.selectionService.remove(node);\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Gets whether the cell column is selected.\n     * ```typescript\n     * let isCellColumnSelected = this.cell.columnSelected;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    @HostBinding('class.igx-grid__td--column-selected')\n    public get columnSelected() {\n        return this.selectionService.isColumnSelected(this.column.field);\n    }\n\n    /**\n     * Sets the current edit value while a cell is in edit mode.\n     * Only for cell editing mode.\n     * ```typescript\n     * this.cell.editValue = value;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public set editValue(value) {\n        if (this.grid.crudService.cellInEditMode) {\n            this.grid.crudService.cell.editValue = value;\n        }\n    }\n\n    /**\n     * Gets the current edit value while a cell is in edit mode.\n     * Only for cell editing mode.\n     * ```typescript\n     * let editValue = this.cell.editValue;\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public get editValue() {\n        if (this.grid.crudService.cellInEditMode) {\n            return this.grid.crudService.cell.editValue;\n        }\n    }\n\n    /**\n     * Returns whether the cell is editable.\n     */\n    public get editable(): boolean {\n        return this.column.editable && !this.intRow.disabled;\n    }\n\n    /**\n     * @hidden\n     */\n    @Input()\n    @HostBinding('class.igx-grid__td--row-pinned-first')\n    public displayPinnedChip = false;\n\n    @HostBinding('style.min-height.px')\n    protected get minHeight() {\n        if ((this.grid as any).isCustomSetRowHeight) {\n            return this.grid.renderedRowHeight;\n        }\n    }\n\n    @HostBinding('attr.aria-rowindex')\n    protected get ariaRowIndex(): number {\n        // +2 because aria-rowindex is 1-based and the first row is the header\n        return this.rowIndex + 2;\n    }\n\n    @HostBinding('attr.aria-colindex')\n    protected get ariaColIndex(): number {\n        return this.column.index + 1;\n    }\n\n    @ViewChild('defaultCell', { read: TemplateRef, static: true })\n    protected defaultCellTemplate: TemplateRef<any>;\n\n    @ViewChild('emptyCell', { read: TemplateRef, static: true })\n    protected emptyCellTemplate: TemplateRef<any>;\n\n    @ViewChild('defaultPinnedIndicator', { read: TemplateRef, static: true })\n    protected defaultPinnedIndicator: TemplateRef<any>;\n\n    @ViewChild('inlineEditor', { read: TemplateRef, static: true })\n    protected inlineEditorTemplate: TemplateRef<any>;\n\n    @ViewChild('addRowCell', { read: TemplateRef, static: true })\n    protected addRowCellTemplate: TemplateRef<any>;\n\n    @ViewChild(IgxTextHighlightDirective, { read: IgxTextHighlightDirective })\n    protected set highlight(value: IgxTextHighlightDirective) {\n        this._highlight = value;\n\n        if (this._highlight && this.grid.lastSearchInfo.searchText) {\n            this._highlight.highlight(this.grid.lastSearchInfo.searchText,\n                this.grid.lastSearchInfo.caseSensitive,\n                this.grid.lastSearchInfo.exactMatch);\n            this._highlight.activateIfNecessary();\n        }\n    }\n\n    protected get highlight() {\n        return this._highlight;\n    }\n\n    protected get selectionNode(): ISelectionNode {\n        return {\n            row: this.rowIndex,\n            column: this.column.columnLayoutChild ? this.column.parent.visibleIndex : this.visibleColumnIndex,\n            layout: this.column.columnLayoutChild ? {\n                rowStart: this.column.rowStart,\n                colStart: this.column.colStart,\n                rowEnd: this.column.rowEnd,\n                colEnd: this.column.colEnd,\n                columnVisibleIndex: this.visibleColumnIndex\n            } : null\n        };\n    }\n\n    /**\n     * Sets/gets the highlight class of the cell.\n     * Default value is `\"igx-highlight\"`.\n     * ```typescript\n     * let highlightClass = this.cell.highlightClass;\n     * ```\n     * ```typescript\n     * this.cell.highlightClass = 'igx-cell-highlight';\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public highlightClass = 'igx-highlight';\n\n    /**\n     * Sets/gets the active highlight class class of the cell.\n     * Default value is `\"igx-highlight__active\"`.\n     * ```typescript\n     * let activeHighlightClass = this.cell.activeHighlightClass;\n     * ```\n     * ```typescript\n     * this.cell.activeHighlightClass = 'igx-cell-highlight_active';\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public activeHighlightClass = 'igx-highlight__active';\n\n    /** @hidden @internal */\n    public get step(): number {\n        const digitsInfo = this.column.pipeArgs.digitsInfo;\n        if (!digitsInfo) {\n            return 1;\n        }\n        const step = +digitsInfo.substr(digitsInfo.indexOf('.') + 1, 1);\n        return 1 / (Math.pow(10, step));\n    }\n\n    /** @hidden @internal */\n    public get currencyCode(): string {\n        return this.grid.i18nFormatter.getCurrencyCode(this.grid.locale, this.column.pipeArgs.currencyCode);\n    }\n\n    /** @hidden @internal */\n    public get currencyCodeSymbol(): string {\n        return this.grid.i18nFormatter.getCurrencySymbol(this.currencyCode, this.grid.locale);\n    }\n\n    protected _lastSearchInfo: ISearchInfo;\n    private _highlight: IgxTextHighlightDirective;\n    private _cellSelection: GridSelectionMode = GridSelectionMode.multiple;\n    private _vIndex = -1;\n\n\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('dblclick', ['$event'])\n    public onDoubleClick = (event: MouseEvent) => {\n        if (event.type === 'doubletap') {\n            // prevent double-tap to zoom on iOS\n            event.preventDefault();\n        }\n        if (this.editable && !this.editMode && !this.intRow.deleted && !this.grid.crudService.rowEditingBlocked) {\n            this.grid.crudService.enterEditMode(this, event as Event);\n        }\n\n        this.grid.doubleClick.emit({\n            cell: this.getCellType(),\n            event\n        });\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    @HostListener('click', ['$event'])\n    public onClick(event: MouseEvent) {\n        this.grid.cellClick.emit({\n            cell: this.getCellType(),\n            event\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnInit() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.addEventListener('pointerdown', this.pointerdown);\n            this.addPointerListeners(this.cellSelectionMode);\n        });\n        if (this.platformUtil.isIOS) {\n            this.touchManager.addEventListener(this.nativeElement, 'doubletap', this.onDoubleClick, {\n                cssProps: {} /* don't disable user-select, etc */\n            });\n        }\n\n    }\n\n    public ngAfterViewInit() {\n        this.errorTooltip.changes.pipe(takeUntil(this._destroy$)).subscribe(() => {\n            if (this.errorTooltip.length > 0 && this.active) {\n                // error ocurred\n                this.cdr.detectChanges();\n                this.openErrorTooltip();\n            }\n        });\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public errorShowing = false;\n\n    private openErrorTooltip() {\n        const tooltip = this.errorTooltip.first;\n        tooltip.open(\n            {\n                target: this.errorIcon.el.nativeElement,\n                closeOnOutsideClick: true,\n                excludeFromOutsideClick: [this.nativeElement],\n                closeOnEscape: false,\n                outlet: this.grid.outlet,\n                modal: false,\n                positionStrategy: new AutoPositionStrategy({\n                    horizontalStartPoint: HorizontalAlignment.Center,\n                    horizontalDirection: HorizontalAlignment.Center,\n                    openAnimation: useAnimation(scaleInCenter, { params: { duration: '150ms' } }),\n                    closeAnimation: useAnimation(fadeOut, { params: { duration: '75ms' } })\n                })\n            }\n        );\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnDestroy() {\n        this.zone.runOutsideAngular(() => {\n            this.nativeElement.removeEventListener('pointerdown', this.pointerdown);\n            this.removePointerListeners(this.cellSelectionMode);\n        });\n        this.touchManager.destroy();\n        this._destroy$.next();\n        this._destroy$.complete();\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.editMode && changes.editMode.currentValue && this.formControl) {\n            // ensure when values change, form control is forced to be marked as touche.\n            this.formControl.valueChanges.pipe(takeWhile(() => this.editMode)).subscribe(() => this.formControl.markAsTouched());\n            // while in edit mode subscribe to value changes on the current form control and set to editValue\n            this.formControl.statusChanges.pipe(takeWhile(() => this.editMode)).subscribe(status => {\n                if (status === 'INVALID' && this.errorTooltip.length > 0) {\n                    this.cdr.detectChanges();\n                    const tooltip = this.errorTooltip.first;\n                    this.resizeAndRepositionOverlayById(tooltip.overlayId, this.errorTooltip.first.element.offsetWidth);\n                }\n            });\n        }\n        if (changes.value && !changes.value.firstChange) {\n            if (this.highlight) {\n                this.highlight.lastSearchInfo.searchText = this.grid.lastSearchInfo.searchText;\n                this.highlight.lastSearchInfo.caseSensitive = this.grid.lastSearchInfo.caseSensitive;\n                this.highlight.lastSearchInfo.exactMatch = this.grid.lastSearchInfo.exactMatch;\n            }\n            const isInEdit = this.grid.rowEditable ? this.row.inEditMode : this.editMode;\n            if (this.formControl && this.formControl.value !== changes.value.currentValue && !isInEdit) {\n                this.formControl.setValue(changes.value.currentValue);\n            }\n        }\n    }\n\n\n\n    /**\n     * @hidden @internal\n     */\n    private resizeAndRepositionOverlayById(overlayId: string, newSize: number) {\n        const overlay = this.overlayService.getOverlayById(overlayId);\n        if (!overlay) return;\n        overlay.initialSize.width = newSize;\n        overlay.elementRef.nativeElement.parentElement.style.width = newSize + 'px';\n        this.overlayService.reposition(overlayId);\n    }\n\n    /**\n     * Starts/ends edit mode for the cell.\n     *\n     * ```typescript\n     * cell.setEditMode(true);\n     * ```\n     */\n    public setEditMode(value: boolean): void {\n        if (this.intRow.deleted) {\n            return;\n        }\n        if (this.editable && value) {\n            if (this.grid.crudService.cellInEditMode) {\n                this.grid.gridAPI.update_cell(this.grid.crudService.cell);\n                this.grid.crudService.endCellEdit();\n            }\n            this.grid.crudService.enterEditMode(this);\n        } else {\n            this.grid.crudService.endCellEdit();\n        }\n        this.grid.notifyChanges();\n    }\n\n    /**\n     * Sets new value to the cell.\n     * ```typescript\n     * this.cell.update('New Value');\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    // TODO: Refactor\n    public update(val: any) {\n        if (this.intRow.deleted) {\n            return;\n        }\n\n        let cell = this.grid.crudService.cell;\n        if (!cell) {\n            cell = this.grid.crudService.createCell(this);\n        }\n        cell.editValue = val;\n        this.grid.gridAPI.update_cell(cell);\n        this.grid.crudService.endCellEdit();\n        this.cdr.markForCheck();\n    }\n\n    /**\n     *\n     * @hidden\n     * @internal\n     */\n    public pointerdown = (event: PointerEvent) => {\n\n        if (this.isMerged) {\n            // need an approximation of where in the cell the user clicked to get actual index to be activated.\n            const scrollOffset = this.grid.verticalScrollContainer.scrollPosition + (event.y - this.grid.tbody.nativeElement.getBoundingClientRect().y);\n            const targetRowIndex = this.grid.verticalScrollContainer.getIndexAtScroll(scrollOffset);\n            if (targetRowIndex != this.rowIndex) {\n                const row = this.grid.rowList.toArray().find(x => x.index === targetRowIndex);\n                const actualTarget = row.cells.find(x => x.column === this.column);\n                actualTarget.pointerdown(event);\n                return;\n            }\n        }\n\n        if (this.cellSelectionMode !== GridSelectionMode.multiple) {\n            this.activate(event);\n            return;\n        }\n        if (!this.platformUtil.isLeftClick(event)) {\n            event.preventDefault();\n            this.grid.navigation.setActiveNode({ rowIndex: this.rowIndex, colIndex: this.visibleColumnIndex });\n            this.selectionService.addKeyboardRange();\n            this.selectionService.initKeyboardState();\n            this.selectionService.primaryButton = false;\n            // Ensure RMB Click on edited cell does not end cell editing\n            if (!this.selected) {\n                this.grid.crudService.updateCell(true, event);\n            }\n            return;\n        } else {\n            this.selectionService.primaryButton = true;\n        }\n        this.selectionService.pointerDown(this.selectionNode, event.shiftKey, event.ctrlKey);\n        this.activate(event);\n    };\n\n    /**\n     *\n     * @hidden\n     * @internal\n     */\n    public pointerenter = (event: PointerEvent) => {\n        const isHierarchicalGrid = this.grid.type === 'hierarchical';\n        if (isHierarchicalGrid && (!this.grid.navigation?.activeNode?.gridID || this.grid.navigation.activeNode.gridID !== this.gridID)) {\n            return;\n        }\n        const dragMode = this.selectionService.pointerEnter(this.selectionNode, event);\n        if (dragMode) {\n            this.grid.cdr.detectChanges();\n        }\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public focusout = () => {\n        this.closeErrorTooltip();\n    }\n\n    private closeErrorTooltip() {\n        const tooltip = this.errorTooltip.first;\n        if (tooltip) {\n            tooltip.close();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public pointerup = (event: PointerEvent) => {\n        const isHierarchicalGrid = this.grid.type === 'hierarchical';\n        if (!this.platformUtil.isLeftClick(event) || (isHierarchicalGrid && (!this.grid.navigation?.activeNode?.gridID ||\n            this.grid.navigation.activeNode.gridID !== this.gridID))) {\n            return;\n        }\n        if (this.selectionService.pointerUp(this.selectionNode, this.grid.rangeSelected)) {\n            this.grid.cdr.detectChanges();\n        }\n    };\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public activate(event: FocusEvent | KeyboardEvent) {\n        const node = this.selectionNode;\n        let shouldEmitSelection = !this.selectionService.isActiveNode(node);\n\n        if (this.selectionService.primaryButton) {\n            const currentActive = this.selectionService.activeElement;\n            if (this.cellSelectionMode === GridSelectionMode.single && (event as any)?.ctrlKey && this.selected) {\n                this.selectionService.activeElement = null;\n                shouldEmitSelection = true;\n            } else {\n                this.selectionService.activeElement = node;\n            }\n            const cancel = this._updateCRUDStatus(event);\n            if (cancel) {\n                this.selectionService.activeElement = currentActive;\n                return;\n            }\n\n            const activeElement = this.selectionService.activeElement;\n            const row = activeElement ? this.grid.gridAPI.get_row_by_index(activeElement.row) : null;\n            if (this.grid.crudService.rowEditingBlocked && row && this.intRow.key !== row.key) {\n                return;\n            }\n\n        } else {\n            this.selectionService.activeElement = null;\n            if (this.grid.crudService.cellInEditMode && !this.editMode) {\n                this.grid.crudService.updateCell(true, event);\n            }\n        }\n\n        this.grid.navigation.setActiveNode({ row: this.rowIndex, column: this.visibleColumnIndex });\n\n        const isTargetErrorIcon = event && event.target && event.target === this.errorIcon?.el.nativeElement\n        if (this.isInvalid && !isTargetErrorIcon) {\n            this.cdr.detectChanges();\n            this.openErrorTooltip();\n            this.grid.activeNodeChange.pipe(first()).subscribe(() => {\n                this.closeErrorTooltip();\n            });\n        }\n        this.selectionService.primaryButton = true;\n        if (this.cellSelectionMode === GridSelectionMode.multiple && this.selectionService.activeElement) {\n            if (this.selectionService.isInMap(this.selectionService.activeElement) && (event as any)?.ctrlKey && !(event as any)?.shiftKey) {\n                this.selectionService.remove(this.selectionService.activeElement);\n                shouldEmitSelection = true;\n            } else {\n                this.selectionService.add(this.selectionService.activeElement, false); // pointer events handle range generation\n                this.selectionService.keyboardStateOnFocus(node, this.grid.rangeSelected, this.nativeElement);\n            }\n        }\n        if (this.grid.isCellSelectable && shouldEmitSelection) {\n            this.zone.run(() => this.grid.selected.emit({ cell: this.getCellType(), event }));\n        }\n    }\n\n    /**\n     * If the provided string matches the text in the cell, the text gets highlighted.\n     * ```typescript\n     * this.cell.highlightText('Cell Value', true);\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public highlightText(text: string, caseSensitive?: boolean, exactMatch?: boolean): number {\n        return this.highlight && this.column.searchable ? this.highlight.highlight(text, caseSensitive, exactMatch) : 0;\n    }\n\n    /**\n     * Clears the highlight of the text in the cell.\n     * ```typescript\n     * this.cell.clearHighLight();\n     * ```\n     *\n     * @memberof IgxGridCellComponent\n     */\n    public clearHighlight() {\n        if (this.highlight && this.column.searchable) {\n            this.highlight.clearHighlight();\n        }\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public calculateSizeToFit(range: any): number {\n        return this.platformUtil.getNodeSizeViaRange(range, this.nativeElement);\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public get searchMetadata() {\n        const meta = new Map<string, any>();\n        meta.set('pinned', this.grid.isRecordPinnedByViewIndex(this.intRow.index));\n        return meta;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    private _updateCRUDStatus(event?: Event) {\n        if (this.editMode) {\n            return;\n        }\n\n        let editableArgs;\n        const crud = this.grid.crudService;\n        const editableCell = this.grid.crudService.cell;\n        const editMode = !!(crud.row || crud.cell);\n\n        if (this.editable && editMode && !this.intRow.deleted) {\n            if (editableCell) {\n                editableArgs = this.grid.crudService.updateCell(false, event);\n\n                /* This check is related with the following issue #6517:\n                 * when edit cell that belongs to a column which is sorted and press tab,\n                 * the next cell in edit mode is with wrong value /its context is not updated/;\n                 * So we reapply sorting before the next cell enters edit mode.\n                 * Also we need to keep the notifyChanges below, because of the current\n                 * change detection cycle when we have editing with enabled transactions\n                 */\n                if (this.grid.sortingExpressions.length && this.grid.sortingExpressions.indexOf(editableCell.column.field)) {\n                    this.grid.cdr.detectChanges();\n                }\n\n                if (editableArgs && editableArgs.cancel) {\n                    return true;\n                }\n\n                crud.exitCellEdit(event);\n            }\n            this.grid.tbody.nativeElement.focus({ preventScroll: true });\n            this.grid.notifyChanges();\n            crud.enterEditMode(this, event);\n            return false;\n        }\n\n        if (editableCell && crud.sameRow(this.cellID.rowID)) {\n            this.grid.crudService.updateCell(true, event);\n        } else if (editMode && !crud.sameRow(this.cellID.rowID)) {\n            this.grid.crudService.endEdit(true, event);\n        }\n    }\n\n    private addPointerListeners(selection) {\n        if (selection !== GridSelectionMode.multiple) {\n            return;\n        }\n        this.nativeElement.addEventListener('pointerenter', this.pointerenter);\n        this.nativeElement.addEventListener('pointerup', this.pointerup);\n        this.nativeElement.addEventListener('focusout', this.focusout);\n    }\n\n    private removePointerListeners(selection) {\n        if (selection !== GridSelectionMode.multiple) {\n            return;\n        }\n        this.nativeElement.removeEventListener('pointerenter', this.pointerenter);\n        this.nativeElement.removeEventListener('pointerup', this.pointerup);\n        this.nativeElement.removeEventListener('focusout', this.focusout);\n    }\n\n    private getCellType(useRow?: boolean): CellType {\n        const rowID = useRow ? this.grid.createRow(this.intRow.index, this.intRow.data) : this.intRow.index;\n        return new IgxGridCell(this.grid, rowID, this.column);\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:columnData)\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:columnData)\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\n<ng-template #emptyCell></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        >{{\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>\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 [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [igxTextSelection]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n        </igx-input-group>\n    }\n    @if (column.dataType === 'boolean') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-checkbox\n                [checked]=\"editValue\"\n                [igxFocus]=\"true\"\n                [disableRipple]=\"true\"\n                [formControl]=\"formControl\"\n            ></igx-checkbox>\n        </ng-container>\n    }\n    @if (column.dataType === 'date') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-date-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [weekStart]=\"column.pipeArgs.weekStart\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n            >\n            </igx-date-picker>\n        </ng-container>\n    }\n    @if (column.dataType === 'time') {\n        <ng-container [formGroup]=\"formGroup\">\n            <igx-time-picker\n                [style.width.%]=\"100\"\n                [outlet]=\"grid.outlet\"\n                mode=\"dropdown\"\n                [locale]=\"grid.locale\"\n                [inputFormat]=\"column.editorOptions?.dateTimeFormat\"\n                [displayFormat]=\"column.pipeArgs.format\"\n                [(value)]=\"editValue\"\n                [igxFocus]=\"true\"\n                [formControl]=\"formControl\"\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 [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                [igxTextSelection]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            @if (!grid.currencyPositionLeft) {\n                <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n            }\n        </igx-input-group>\n    }\n    @if (column.dataType === 'percent') {\n        <igx-input-group [formGroup]=\"formGroup\">\n            <input\n                igxInput\n                [attr.aria-describedby]=\"ariaDescribeBy\"\n                [attr.aria-invalid]=\"isInvalid\"\n                [igxFocus]=\"true\"\n                [igxTextSelection]=\"true\"\n                [step]=\"step\"\n                type=\"number\"\n                [formControl]=\"formControl\"\n            />\n            <igx-suffix> {{ editValue | percent:column.pipeArgs.digitsInfo:grid.locale }} </igx-suffix>\n        </igx-input-group>\n    }\n</ng-template>\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\"></ng-container>\n\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 #defaultError>\n    @let errors = formControl.errors;\n    @if (errors?.['required']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_required_validation_error}}\n        </div>\n    }\n    @if (errors?.['minlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_length_validation_error | igxStringReplace:'{0}':errors.minlength.requiredLength }}\n        </div>\n    }\n    @if (errors?.['maxlength']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_length_validation_error | igxStringReplace:'{0}':errors.maxlength.requiredLength }}\n        </div>\n    }\n    @if (errors?.['min']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_min_validation_error | igxStringReplace:'{0}':errors.min.min }}\n        </div>\n    }\n    @if (errors?.['max']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_max_validation_error | igxStringReplace:'{0}':errors.max.max }}\n        </div>\n    }\n    @if (errors?.['email']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_email_validation_error }}\n        </div>\n    }\n    @if (errors?.['pattern']) {\n        <div>\n            {{grid.resourceStrings.igx_grid_pattern_validation_error}}\n        </div>\n    }\n</ng-template>\n","import { Injectable } from '@angular/core';\nimport { first } from 'rxjs/operators';\nimport { IgxGridNavigationService } from './grid-navigation.service';\nimport { ColumnType } from 'igniteui-angular/core';\nimport { HORIZONTAL_NAV_KEYS, HEADER_KEYS } from './grid-navigation-keys';\nimport { GridKeydownTargetType } from './common/enums';\n\n/** @hidden */\n@Injectable()\nexport class IgxGridMRLNavigationService extends IgxGridNavigationService {\n\n    public override isValidPosition(rowIndex: number, colIndex: number): boolean {\n        if (rowIndex < 0 || colIndex < 0 || this.grid.dataView.length - 1 < rowIndex ||\n            Math.max(...this.grid.visibleColumns.map(col => col.visibleIndex)) < colIndex ||\n            (this.activeNode.column !== colIndex && !this.isDataRow(rowIndex, true))) {\n            return false;\n        }\n        return true;\n    }\n\n    public override shouldPerformVerticalScroll(targetRowIndex: number, visibleColIndex: number): boolean {\n        if (!super.shouldPerformVerticalScroll(targetRowIndex, visibleColIndex)) {\n            return false;\n        }\n        if (!this.isDataRow(targetRowIndex) || visibleColIndex < 0) {\n            return super.shouldPerformVerticalScroll(targetRowIndex, visibleColIndex);\n        }\n\n        const targetRow = super.getRowElementByIndex(targetRowIndex);\n        const containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;\n        const scrollPos = this.getVerticalScrollPositions(targetRowIndex, visibleColIndex);\n        return (!targetRow || targetRow.offsetTop + scrollPos.topOffset < Math.abs(this.containerTopOffset)\n            || containerHeight && containerHeight < scrollPos.rowBottom -  Math.ceil(this.scrollTop));\n    }\n\n    public override isColumnFullyVisible(visibleColIndex: number): boolean {\n        const targetCol = this.grid.getColumnByVisibleIndex(visibleColIndex);\n        if (this.isParentColumnFullyVisible(targetCol?.parent) || super.isColumnPinned(visibleColIndex, this.forOfDir())) {\n            return true;\n        }\n\n        const scrollPos = this.getChildColumnScrollPositions(visibleColIndex);\n        const colWidth = scrollPos.rightScroll - scrollPos.leftScroll;\n        if (this.displayContainerWidth < colWidth && this.displayContainerScrollLeft === scrollPos.leftScroll) {\n            return true;\n        }\n        return this.displayContainerWidth >= scrollPos.rightScroll - this.displayContainerScrollLeft &&\n            this.displayContainerScrollLeft <= scrollPos.leftScroll;\n    }\n\n    public getVerticalScrollPositions(rowIndex: number, visibleIndex: number) {\n        const targetCol = this.grid.getColumnByVisibleIndex(visibleIndex);\n        const rowSpan = targetCol.rowEnd && targetCol.rowEnd - targetCol.rowStart ? targetCol.rowEnd - targetCol.rowStart : 1;\n        const topOffset = this.grid.defaultRowHeight * (targetCol.rowStart - 1);\n        const rowTop = this.grid.verticalScrollContainer.sizesCache[rowIndex] + topOffset;\n        return { topOffset, rowTop, rowBottom: rowTop + (this.grid.defaultRowHeight * rowSpan) };\n    }\n\n    public override performHorizontalScrollToCell(visibleColumnIndex: number, cb?: () => void) {\n        if (!this.shouldPerformHorizontalScroll(visibleColumnIndex)) {\n            return;\n        }\n        const scrollPos = this.getChildColumnScrollPositions(visibleColumnIndex);\n        const startScroll = scrollPos.rightScroll - this.displayContainerScrollLeft;\n        const nextScroll = !(this.displayContainerScrollLeft <= scrollPos.leftScroll) && this.displayContainerWidth >= startScroll ?\n            scrollPos.leftScroll : scrollPos.rightScroll - this.displayContainerWidth;\n        this.forOfDir().getScroll().scrollLeft = nextScroll;\n        this.grid.parentVirtDir.chunkLoad\n            .pipe(first())\n            .subscribe(() => {\n                if (cb) {\n                    cb();\n                }\n            });\n    }\n\n    public override performVerticalScrollToCell(rowIndex: number, visibleColIndex: number, cb?: () => void) {\n        const children = this.parentByChildIndex(visibleColIndex || 0)?.children;\n        if (!super.isDataRow(rowIndex) || (children && children.length < 2) || visibleColIndex < 0) {\n            return super.performVerticalScrollToCell(rowIndex, visibleColIndex, cb);\n        }\n\n        const containerHeight = this.grid.calcHeight ? Math.ceil(this.grid.calcHeight) : 0;\n        const pos = this.getVerticalScrollPositions(rowIndex, visibleColIndex);\n        const row = super.getRowElementByIndex(rowIndex);\n        if ((this.scrollTop > pos.rowTop) && (!row || row.offsetTop + pos.topOffset < Math.abs(this.containerTopOffset))) {\n            if (pos.topOffset === 0) {\n                this.grid.verticalScrollContainer.scrollTo(rowIndex);\n            } else {\n                this.grid.verticalScrollContainer.scrollPosition = pos.rowTop;\n            }\n        } else {\n            this.grid.verticalScrollContainer.addScrollTop(Math.abs(pos.rowBottom - this.scrollTop - containerHeight));\n        }\n        this.grid.verticalScrollContainer.chunkLoad\n            .pipe(first()).subscribe(() => {\n                if (cb) {\n                    cb();\n                }\n            });\n    }\n\n    public getNextHorizontalCellPosition(previous = false) {\n        const parent = this.parentByChildIndex(this.activeNode.column);\n        if (!this.hasNextHorizontalPosition(previous, parent)) {\n            return { row: this.activeNode.row, column: this.activeNode.column };\n        }\n        const columns = previous ? parent.children.filter(c => c.rowStart <= this.activeNode.layout.rowStart)\n            .sort((a, b) => b.visibleIndex - a.visibleIndex) : parent.children.filter(c => c.rowStart <= this.activeNode.layout.rowStart);\n        let column = columns.find((col) => previous ?\n                col.visibleIndex < this.activeNode.column && this.rowEnd(col) > this.activeNode.layout.rowStart :\n                col.visibleIndex > this.activeNode.column && col.colStart > this.activeNode.layout.colStart);\n        if (!column || (previous && this.activeNode.layout.colStart === 1)) {\n            const index = previous ? parent.visibleIndex - 1 : parent.visibleIndex + 1;\n            const children = this.grid.columns.find(cols => cols.columnLayout && cols.visibleIndex === index).children;\n            column = previous ? children.toArray().reverse().find(child => child.rowStart <= this.activeNode.layout.rowStart) :\n                children.find(child => this.rowEnd(child) > this.activeNode.layout.rowStart && child.colStart === 1);\n        }\n        return { row: this.activeNode.row, column: column.visibleIndex };\n    }\n\n    public getNextVerticalPosition(previous = false) {\n        this.activeNode.column = this.activeNode.column || 0;\n        if (!this.hasNextVerticalPosition(previous)) {\n            return { row: this.activeNode.row, column: this.activeNode.column };\n        }\n        const currentRowStart = this.grid.getColumnByVisibleIndex(this.activeNode.column).rowStart;\n        const nextBlock = !this.isDataRow(this.activeNode.row) ||\n        (previous ? currentRowStart === 1 : currentRowStart === this.lastRowStartPerBlock());\n        const nextRI = previous ? this.activeNode.row - 1 : this.activeNode.row + 1;\n        if (nextBlock && !this.isDataRow(nextRI)) {\n            return {row: nextRI,  column: this.activeNode.column};\n        }\n        const children = this.parentByChildIndex(this.activeNode.column).children;\n        const col = previous ? this.getPreviousRowIndex(children, nextBlock) : this.getNextRowIndex(children, nextBlock);\n        return { row: nextBlock ? nextRI : this.activeNode.row, column: col.visibleIndex };\n    }\n\n    public override headerNavigation(event: KeyboardEvent) {\n        const key = event.key.toLowerCase();\n        if (!HEADER_KEYS.has(key)) {\n            return;\n        }\n        event.preventDefault();\n        if (!this.activeNode.layout) {\n            this.activeNode.layout = this.layout(this.activeNode.column || 0);\n        }\n        const alt = event.altKey;\n        const ctrl = event.ctrlKey;\n        this.performHeaderKeyCombination(this.grid.getColumnByVisibleIndex(this.activeNode.column), key, event.shiftKey, ctrl, alt, event);\n        if (!ctrl && !alt && (key.includes('down') || key.includes('up'))) {\n            const children = this.parentByChildIndex(this.activeNode.column).children;\n            const col = key.includes('down') ? this.getNextRowIndex(children, false) : this.getPreviousRowIndex(children, false);\n            if (!col) {\n                return;\n            }\n            this.activeNode.column = col.visibleIndex;\n            const layout = this.layout(this.activeNode.column);\n            const nextLayout = {...this.activeNode.layout, rowStart: layout.rowStart, rowEnd: layout.rowEnd};\n            this.setActiveNode({row: this.activeNode.row, layout: nextLayout});\n            return;\n        }\n        this.horizontalNav(event, key, -1, 'headerCell');\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public layout(visibleIndex) {\n        const column = this.grid.getColumnByVisibleIndex(visibleIndex);\n        return {colStart: column.colStart, rowStart: column.rowStart,\n                colEnd: column.colEnd, rowEnd: column.rowEnd, columnVisibleIndex: column.visibleIndex };\n    }\n\n    protected override getNextPosition(rowIndex: number, colIndex: number, key: string, shift: boolean, ctrl: boolean, event: KeyboardEvent) {\n        if (!this.activeNode.layout) {\n            this.activeNode.layout = this.layout(this.activeNode.column || 0);\n        }\n        switch (key) {\n            case 'tab':\n            case ' ':\n            case 'spacebar':\n            case 'space':\n            case 'escape':\n            case 'esc':\n            case 'enter':\n            case 'f2':\n                super.getNextPosition(rowIndex, colIndex, key, shift, ctrl, event);\n                break;\n            case 'end':\n                rowIndex = ctrl ? this.findLastDataRowIndex() : this.activeNode.row;\n                colIndex = ctrl ? this.lastColIndexPerMRLBlock(this.lastIndexPerRow) : this.lastIndexPerRow;\n                break;\n            case 'home':\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : this.activeNode.row;\n                colIndex = ctrl ? 0 : this.firstIndexPerRow;\n                break;\n            case 'arrowleft':\n            case 'left':\n                colIndex = ctrl ? this.firstIndexPerRow : this.getNextHorizontalCellPosition(true).column;\n                break;\n            case 'arrowright':\n            case 'right':\n                colIndex = ctrl ? this.lastIndexPerRow : this.getNextHorizontalCellPosition().column;\n                break;\n            case 'arrowup':\n            case 'up':\n                const prevPos = this.getNextVerticalPosition(true);\n                colIndex = ctrl ? this.activeNode.column : prevPos.column;\n                rowIndex = ctrl ? this.findFirstDataRowIndex() : prevPos.row;\n                break;\n            case 'arrowdown':\n            case 'down':\n                const nextPos = this.getNextVerticalPosition();\n                colIndex = ctrl ? this.activeNode.column : nextPos.column;\n                rowIndex = ctrl ? this.findLastDataRowIndex() : nextPos.row;\n                break;\n            default:\n                return;\n        }\n        const nextLayout = this.layout(colIndex);\n        const newLayout = key.includes('up') || key.includes('down') ? {rowStart: nextLayout.rowStart} : {colStart: nextLayout.colStart};\n        if (!this.activeNode.layout) {\n            this.activeNode.layout = this.layout(this.activeNode.column || 0);\n        }\n        Object.assign(this.activeNode.layout, newLayout, {rowEnd: nextLayout.rowEnd});\n\n        if (ctrl && (key === 'home' || key === 'end')) {\n            this.activeNode.layout = nextLayout;\n        }\n        return { rowIndex, colIndex };\n    }\n\n    protected override horizontalNav(event: KeyboardEvent, key: string, rowIndex: number, tag: GridKeydownTargetType) {\n        const ctrl = event.ctrlKey;\n        if (!HORIZONTAL_NAV_KEYS.has(key) || event.altKey) {\n            return;\n        }\n        this.activeNode.row = rowIndex;\n\n        const newActiveNode = {\n            column: this.activeNode.column,\n            mchCache: {\n                level: this.activeNode.level,\n                visibleIndex: this.activeNode.column\n            }\n        };\n\n        if ((key.includes('left') || key === 'home') && this.activeNode.column > 0) {\n            newActiveNode.column = ctrl || key === 'home' ? this.firstIndexPerRow : this.getNextHorizontalCellPosition(true).column;\n        }\n        if ((key.includes('right') || key === 'end') && this.activeNode.column !== this.lastIndexPerRow) {\n            newActiveNode.column = ctrl || key === 'end' ? this.lastIndexPerRow : this.getNextHorizontalCellPosition().column;\n        }\n\n        if (tag === 'headerCell') {\n            const column = this.grid.getColumnByVisibleIndex(newActiveNode.column);\n            newActiveNode.mchCache.level = column.level;\n            newActiveNode.mchCache.visibleIndex = column.visibleIndex;\n        }\n\n        const layout = this.layout(newActiveNode.column);\n        const newLayout = {...this.activeNode.layout, colStart: layout.colStart, rowEnd: layout.rowEnd};\n        this.setActiveNode({row: this.activeNode.row, column: newActiveNode.column,\n            layout: newLayout, mchCache: newActiveNode.mchCache});\n        this.performHorizontalScrollToCell(newActiveNode.column);\n    }\n\n    private isParentColumnFullyVisible(parent: ColumnType): boolean {\n        if (!this.forOfDir().getScroll().clientWidth || parent?.pinned) {\n            return true;\n        }\n\n        const index = this.forOfDir().igxForOf.indexOf(parent);\n        return this.displayContainerWidth >= this.forOfDir().getColumnScrollLeft(index + 1) - this.displayContainerScrollLeft &&\n            this.displayContainerScrollLeft <= this.forOfDir().getColumnScrollLeft(index);\n    }\n\n    private getChildColumnScrollPositions(visibleColIndex: number) {\n        const targetCol = this.grid.getColumnByVisibleIndex(visibleColIndex);\n        const parentVIndex = this.forOfDir().igxForOf.indexOf(targetCol.parent);\n        let leftScroll = this.forOfDir().getColumnScrollLeft(parentVIndex);\n        let rightScroll = this.forOfDir().getColumnScrollLeft(parentVIndex + 1);\n        targetCol.parent.children.forEach((c) => {\n            if (c.rowStart >= targetCol.rowStart && c.visibleIndex < targetCol.visibleIndex) {\n                leftScroll += parseInt(c.width, 10);\n            }\n            if (c.rowStart <= targetCol.rowStart && c.visibleIndex > targetCol.visibleIndex) {\n                rightScroll -= parseInt(c.width, 10);\n            }\n        });\n        return { leftScroll, rightScroll };\n    }\n\n    private getNextRowIndex(children, next) {\n        const rowStart = next ? 1 : this.rowEnd(this.grid.getColumnByVisibleIndex(this.activeNode.column));\n        const  col = children.filter(c => c.rowStart === rowStart);\n        return col.find(co => co.colStart === this.activeNode.layout.colStart) ||\n            col.sort((a, b) => b.visibleIndex - a.visibleIndex).find(co => co.colStart <= this.activeNode.layout.colStart);\n}\n\n    private getPreviousRowIndex(children, prev) {\n        const end = prev ? Math.max(...children.map(c => this.rowEnd(c))) :\n            this.grid.getColumnByVisibleIndex(this.activeNode.column).rowStart;\n        const col = children.filter(c => this.rowEnd(c) ===  end);\n        return col.find(co => co.colStart === this.activeNode.layout.colStart) ||\n            col.sort((a, b) => b.visibleIndex - a.visibleIndex).find(co => co.colStart <= this.activeNode.layout.colStart);\n    }\n\n    private get lastIndexPerRow(): number {\n        const children = this.grid.visibleColumns.find(c => c.visibleIndex === this.lastLayoutIndex && c.columnLayout)\n            .children.toArray().reverse();\n        const column = children.find(co => co.rowStart === this.activeNode.layout.rowStart) ||\n        children.find(co => co.rowStart <= this.activeNode.layout.rowStart);\n        return column.visibleIndex;\n    }\n\n    private get firstIndexPerRow(): number {\n        const children = this.grid.visibleColumns.find(c => c.visibleIndex === 0 && c.columnLayout).children;\n        const column = children.find(co => co.rowStart === this.activeNode.layout.rowStart) ||\n        children.find(co => co.rowStart <= this.activeNode.layout.rowStart);\n        return column.visibleIndex;\n    }\n\n    private get lastLayoutIndex(): number {\n        return Math.max(...this.grid.visibleColumns.filter(c => c.columnLayout).map(col => col.visibleIndex));\n    }\n\n    private get scrollTop(): number {\n       return Math.abs(this.grid.verticalScrollContainer.getScroll().scrollTop);\n    }\n\n    private lastColIndexPerMRLBlock(visibleIndex = this.activeNode.column): number {\n        return this.parentByChildIndex(visibleIndex).children.last.visibleIndex;\n    }\n\n    private lastRowStartPerBlock(visibleIndex = this.activeNode.column) {\n        return Math.max(...this.parentByChildIndex(visibleIndex).children.map(c => c.rowStart));\n    }\n\n    private rowEnd(column): number {\n        return column.rowEnd && column.rowEnd - column.rowStart ? column.rowStart + column.rowEnd - column.rowStart : column.rowStart + 1;\n    }\n\n    private parentByChildIndex(visibleIndex) {\n        return this.grid.getColumnByVisibleIndex(visibleIndex)?.parent;\n\n    }\n\n    private hasNextHorizontalPosition(previous = false, parent) {\n        if (previous && parent.visibleIndex === 0 && this.activeNode.layout.colStart === 1 ||\n            !previous && parent.visibleIndex === this.lastLayoutIndex && this.activeNode.column === this.lastIndexPerRow) {\n            return false;\n        }\n        return true;\n    }\n\n    private hasNextVerticalPosition(prev = false) {\n        if ((prev && this.activeNode.row === 0 && (!this.isDataRow(this.activeNode.row) || this.activeNode.layout.rowStart === 1)) ||\n            (!prev && this.activeNode.row >= this.grid.dataView.length - 1 &&\n                this.activeNode.layout.rowStart === this.lastRowStartPerBlock())) {\n            return false;\n        }\n        return true;\n    }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport {\n    cloneArray,\n    reverseMapper,\n    mergeObjects,\n    Transaction,\n    TransactionType,\n    State,\n    DataUtil,\n    FilterUtil,\n    GridColumnDataType,\n    IFilteringExpressionsTree,\n    IGroupingExpression,\n    ISortingExpression,\n    SortingDirection,\n    ColumnType\n} from 'igniteui-angular/core';\nimport { IgxCell, IgxGridCRUDService, IgxEditRow } from './common/crud.service';\nimport { CellType, GridServiceType, GridType, RowType } from './common/grid.interface';\nimport { IGridEditEventArgs, IPinRowEventArgs, IRowToggleEventArgs } from './common/events';\nimport { IgxColumnMovingService } from './moving/moving.service';\n\n/**\n * @hidden\n */\n@Injectable()\nexport class GridBaseAPIService<T extends GridType> implements GridServiceType {\n\n    public crudService = inject(IgxGridCRUDService);\n    public cms = inject(IgxColumnMovingService)\n\n    public grid: T;\n    protected destroyMap: Map<string, Subject<boolean>> = new Map<string, Subject<boolean>>();\n\n    public get_column_by_name(name: string): ColumnType {\n        return this.grid.columns.find((col: ColumnType) => col.field === name);\n    }\n\n    public get_summary_data(): any[] | null {\n        const grid = this.grid;\n        let data = grid.filteredData;\n        if (data && grid.hasPinnedRecords) {\n            data = grid._filteredUnpinnedData;\n        }\n        if (!data) {\n            if (grid.transactions.enabled) {\n                data = DataUtil.mergeTransactions(\n                    cloneArray(grid.data),\n                    grid.transactions.getAggregatedChanges(true),\n                    grid.primaryKey,\n                    grid.dataCloneStrategy\n                );\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            } else {\n                data = grid.data;\n            }\n        }\n        return data;\n    }\n\n    /**\n     * @hidden\n     * @internal\n     */\n    public getRowData(rowID: any) {\n        const data = this.get_all_data(this.grid.transactions.enabled);\n        const index = this.get_row_index_in_data(rowID, data);\n        return data[index];\n    }\n\n    public get_row_index_in_data(rowID: any, dataCollection?: any[]): number {\n        const grid = this.grid;\n        if (!grid) {\n            return -1;\n        }\n        const data = dataCollection ?? this.get_all_data(grid.transactions.enabled);\n        return grid.primaryKey ? data.findIndex(record => record.recordRef ? record.recordRef[grid.primaryKey] === rowID\n            : record[grid.primaryKey] === rowID) : data.indexOf(rowID);\n    }\n\n    public get_row_by_key(rowSelector: any): RowType {\n        if (!this.grid) {\n            return null;\n        }\n        const primaryKey = this.grid.primaryKey;\n        if (primaryKey !== undefined && primaryKey !== null) {\n            return this.grid.dataRowList.find((row) => row.data[primaryKey] === rowSelector);\n        } else {\n            return this.grid.dataRowList.find((row) => row.data === rowSelector);\n        }\n    }\n\n    public get_row_by_index(rowIndex: number): RowType {\n        return this.grid.rowList.find((row) => row.index === rowIndex);\n    }\n\n    /**\n     * Gets the rowID of the record at the specified data view index\n     *\n     * @param index\n     * @param dataCollection\n     */\n    public get_rec_id_by_index(index: number, dataCollection?: any[]): any {\n        dataCollection = dataCollection || this.grid.data;\n        if (index >= 0 && index < dataCollection.length) {\n            const rec = dataCollection[index];\n            return this.grid.primaryKey ? rec[this.grid.primaryKey] : rec;\n        }\n        return null;\n    }\n\n    public get_cell_by_key(rowSelector: any, field: string): CellType {\n        const row = this.get_row_by_key(rowSelector);\n        if (row && row.cells) {\n            return row.cells.find((cell) => cell.column.field === field);\n        }\n    }\n\n    public get_cell_by_index(rowIndex: number, columnID: number | string): CellType {\n        const row = this.get_row_by_index(rowIndex);\n        const hasCells = row && row.cells;\n        if (hasCells && typeof columnID === 'number') {\n            return row.cells.find((cell) => cell.column.index === columnID);\n        }\n        if (hasCells && typeof columnID === 'string') {\n            return row.cells.find((cell) => cell.column.field === columnID);\n        }\n\n    }\n\n    public get_cell_by_visible_index(rowIndex: number, columnIndex: number): CellType {\n        const row = this.get_row_by_index(rowIndex);\n        if (row && row.cells) {\n            return row.cells.find((cell) => cell.visibleColumnIndex === columnIndex);\n        }\n    }\n\n    public update_cell(cell: IgxCell): IGridEditEventArgs {\n        if (!cell) {\n            return;\n        }\n        const args = cell.createCellEditEventArgs(true);\n        if (!this.grid.crudService.row) { // should not recalculate summaries when there is row in edit mode\n            this.grid.summaryService.clearSummaryCache(args);\n        }\n        const data = this.getRowData(cell.id.rowID);\n        const newRowData = reverseMapper(cell.column.field, args.newValue);\n        this.updateData(this.grid, cell.id.rowID, data, cell.rowData, newRowData);\n        if (!this.grid.crudService.row) {\n            this.grid.validation.update(cell.id.rowID, newRowData);\n        }\n        if (this.grid.primaryKey === cell.column.field) {\n            if (this.grid.pinnedRecords.length > 0) {\n                const rowIndex = this.grid.pinnedRecords.indexOf(cell.rowData);\n                if (rowIndex !== -1) {\n                    const previousRowId = cell.value;\n                    const rowType = this.grid.getRowByIndex(cell.rowIndex);\n                    this.unpin_row(previousRowId, rowType);\n                    this.pin_row(args.newValue, rowIndex, rowType);\n                }\n            }\n            if (this.grid.selectionService.isRowSelected(cell.id.rowID)) {\n                this.grid.selectionService.deselectRow(cell.id.rowID);\n                this.grid.selectionService.selectRowById(args.newValue);\n            }\n            if (this.grid.hasSummarizedColumns) {\n                this.grid.summaryService.removeSummaries(cell.id.rowID);\n            }\n        }\n        if (!this.grid.rowEditable || !this.crudService.row ||\n            this.crudService.row.id !== cell.id.rowID || !this.grid.transactions.enabled) {\n            this.grid.summaryService.clearSummaryCache(args);\n            this.grid.pipeTrigger++;\n        }\n\n        return args;\n    }\n\n    // TODO: CRUD refactor to not emit editing evts.\n    public update_row(row: IgxEditRow, value: any, event?: Event) {\n        const grid = this.grid;\n        const selected = grid.selectionService.isRowSelected(row.id);\n        const rowInEditMode = this.crudService.row;\n        const data = this.get_all_data(grid.transactions.enabled);\n        const index = this.get_row_index_in_data(row.id, data);\n        const hasSummarized = grid.hasSummarizedColumns;\n        this.crudService.updateRowEditData(row, value);\n\n        const args = row.createRowEditEventArgs(true, event);\n\n        // If no valid row is found\n        if (index === -1) {\n            return args;\n        }\n\n        if (rowInEditMode) {\n            const hasChanges = grid.transactions.getState(args.rowID, true);\n            grid.transactions.endPending(false);\n            if (!hasChanges) {\n                return args;\n            }\n        }\n\n        if (!args.newValue) {\n            return args;\n        }\n\n        if (hasSummarized) {\n            grid.summaryService.removeSummaries(args.rowID);\n        }\n\n        this.updateData(grid, row.id, data[index], args.oldValue, args.newValue);\n        this.grid.validation.update(row.id, args.newValue);\n        const newId = grid.primaryKey ? args.newValue[grid.primaryKey] : args.newValue;\n        if (selected) {\n            grid.selectionService.deselectRow(row.id);\n            grid.selectionService.selectRowById(newId);\n        }\n        // make sure selection is handled prior to updating the row.id\n        row.id = newId;\n        if (hasSummarized) {\n            grid.summaryService.removeSummaries(newId);\n        }\n        grid.pipeTrigger++;\n\n        return args;\n    }\n\n    public sort(expression: ISortingExpression): void {\n        if (expression.dir === SortingDirection.None) {\n            this.remove_grouping_expression(expression.fieldName);\n        }\n        const sortingState = cloneArray(this.grid.sortingExpressions);\n        this.prepare_sorting_expression([sortingState], expression);\n        this.grid.sortingExpressions = sortingState;\n    }\n\n    public sort_decoupled(expression: IGroupingExpression): void {\n        if (expression.dir === SortingDirection.None) {\n            this.remove_grouping_expression(expression.fieldName);\n        }\n        const groupingState = cloneArray((this.grid as any).groupingExpressions);\n        this.prepare_grouping_expression([groupingState], expression);\n        (this.grid as any).groupingExpressions = groupingState;\n    }\n\n    public sort_multiple(expressions: ISortingExpression[]): void {\n        const sortingState = cloneArray(this.grid.sortingExpressions);\n\n        for (const each of expressions) {\n            if (each.dir === SortingDirection.None) {\n                this.remove_grouping_expression(each.fieldName);\n            }\n            this.prepare_sorting_expression([sortingState], each);\n        }\n\n        this.grid.sortingExpressions = sortingState;\n    }\n\n    public sort_groupBy_multiple(expressions: ISortingExpression[]): void {\n        const groupingState = cloneArray((this.grid as any).groupingExpressions);\n\n        for (const each of expressions) {\n            if (each.dir === SortingDirection.None) {\n                this.remove_grouping_expression(each.fieldName);\n            }\n            this.prepare_grouping_expression([groupingState], each);\n        }\n    }\n\n    public clear_sort(fieldName: string) {\n        const sortingState = this.grid.sortingExpressions;\n        const index = sortingState.findIndex((expr) => expr.fieldName === fieldName);\n        if (index > -1) {\n            sortingState.splice(index, 1);\n            this.grid.sortingExpressions = sortingState;\n        }\n    }\n\n    public clear_groupby(_name?: string | Array<string>) {\n    }\n\n    public should_apply_number_style(column: ColumnType): boolean {\n        return column.dataType === GridColumnDataType.Number\n            || column.dataType === GridColumnDataType.Currency\n            || column.dataType === GridColumnDataType.Percent;\n    }\n\n    public get_data(): any[] {\n        const grid = this.grid;\n        const data = grid.data ? grid.data : [];\n        return data;\n    }\n\n    public get_all_data(includeTransactions = false): any[] {\n        const grid = this.grid;\n        let data = grid && grid.data ? grid.data : [];\n        data = includeTransactions ? grid.dataWithAddedInTransactionRows : data;\n        return data;\n    }\n\n    public get_filtered_data(): any[] {\n        return this.grid.filteredData;\n    }\n\n    public addRowToData(rowData: any, _parentID?: any) {\n        // Add row goes to transactions and if rowEditable is properly implemented, added rows will go to pending transactions\n        // If there is a row in edit - > commit and close\n        const grid = this.grid;\n        const rowId = grid.primaryKey ? rowData[grid.primaryKey] : rowData;\n        if (grid.transactions.enabled) {\n            const transaction: Transaction = { id: rowId, type: TransactionType.ADD, newValue: rowData };\n            grid.transactions.add(transaction);\n        } else {\n            grid.data.push(rowData);\n            grid.data = cloneArray(grid.data);\n        }\n        grid.validation.markAsTouched(rowId);\n        grid.validation.update(rowId, rowData);\n    }\n\n    public deleteRowFromData(rowID: any, index: number) {\n        //  if there is a row (index !== 0) delete it\n        //  if there is a row in ADD or UPDATE state change it's state to DELETE\n        const grid = this.grid;\n        if (index !== -1) {\n            if (grid.transactions.enabled) {\n                const transaction: Transaction = { id: rowID, type: TransactionType.DELETE, newValue: null };\n                grid.transactions.add(transaction, grid.data[index]);\n            } else {\n                grid.data.splice(index, 1);\n                grid.data = cloneArray(grid.data);\n            }\n        } else {\n            const state: State = grid.transactions.getState(rowID);\n            grid.transactions.add({ id: rowID, type: TransactionType.DELETE, newValue: null }, state && state.recordRef);\n        }\n        grid.validation.clear(rowID);\n    }\n\n    public deleteRowById(rowId: any): any {\n        let index: number;\n        const grid = this.grid;\n        const data = this.get_all_data(grid.transactions.enabled);\n        if (grid.primaryKey) {\n            index = data.map((record) => record[grid.primaryKey]).indexOf(rowId);\n        } else {\n            index = data.indexOf(rowId);\n        }\n        const state: State = grid.transactions.getState(rowId);\n        const hasRowInNonDeletedState = state && state.type !== TransactionType.DELETE;\n\n        //  if there is a row (index !== -1) and the we have cell in edit mode on same row exit edit mode\n        //  if there is no row (index === -1), but there is a row in ADD or UPDATE state do as above\n        //  Otherwise just exit - there is nothing to delete\n        if (index !== -1 || hasRowInNonDeletedState) {\n            // Always exit edit when row is deleted\n            this.crudService.endEdit(true);\n        } else {\n            return;\n        }\n\n        const record = data[index];\n        const key = record ? record[grid.primaryKey] : undefined;\n        grid.rowDeletedNotifier.next({ data: record, rowData: record, owner: grid, primaryKey: key, rowKey: key });\n\n        this.deleteRowFromData(rowId, index);\n\n        if (grid.selectionService.isRowSelected(rowId)) {\n            grid.selectionService.deselectRowsWithNoEvent([rowId]);\n        } else {\n            grid.selectionService.clearHeaderCBState();\n        }\n        grid.pipeTrigger++;\n        grid.notifyChanges();\n        // Data needs to be recalculated if transactions are in place\n        // If no transactions, `data` will be a reference to the grid getter, otherwise it will be stale\n        const dataAfterDelete = grid.transactions.enabled ? grid.dataWithAddedInTransactionRows : data;\n        grid.refreshSearch();\n        if (dataAfterDelete.length % grid.perPage === 0 && dataAfterDelete.length / grid.perPage - 1 < grid.page && grid.page !== 0) {\n            grid.page--;\n        }\n\n        return record;\n    }\n\n    public get_row_id(rowData) {\n        return this.grid.primaryKey ? rowData[this.grid.primaryKey] : rowData;\n    }\n\n    public row_deleted_transaction(rowID: any): boolean {\n        const grid = this.grid;\n        if (!grid) {\n            return false;\n        }\n        if (!grid.transactions.enabled) {\n            return false;\n        }\n        const state = grid.transactions.getState(rowID);\n        if (state) {\n            return state.type === TransactionType.DELETE;\n        }\n\n        return false;\n    }\n\n    public get_row_expansion_state(record: any): boolean {\n        const grid = this.grid;\n        const states = grid.expansionStates;\n        const rowID = grid.primaryKey ? record[grid.primaryKey] : record;\n        const expanded = states.get(rowID);\n\n        if (expanded !== undefined) {\n            return expanded;\n        } else {\n            return grid.getDefaultExpandState(record);\n        }\n    }\n\n    public set_row_expansion_state(rowID: any, expanded: boolean, event?: Event) {\n        const grid = this.grid;\n        const expandedStates = grid.expansionStates;\n\n        if (!this.allow_expansion_state_change(rowID, expanded)) {\n            return;\n        }\n\n        const args: IRowToggleEventArgs = {\n            rowKey: rowID,\n            rowID,\n            expanded,\n            event,\n            cancel: false\n        };\n\n        grid.rowToggle.emit(args);\n\n        if (args.cancel) {\n            return;\n        }\n        expandedStates.set(rowID, expanded);\n        grid.expansionStates = expandedStates;\n        // K.D. 28 Feb, 2022 #10634 Don't trigger endEdit/commit upon row expansion state change\n        // this.crudService.endEdit(false);\n    }\n\n    public get_rec_by_id(rowID) {\n        return this.grid.primaryKey ? this.getRowData(rowID) : 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 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[this.grid.primaryKey] === pk) : -1;\n    }\n\n    public allow_expansion_state_change(rowID, expanded) {\n        return this.grid.expansionStates.get(rowID) !== expanded;\n    }\n\n    public prepare_sorting_expression(stateCollections: Array<Array<any>>, expression: ISortingExpression) {\n        if (expression.dir === SortingDirection.None) {\n            stateCollections.forEach(state => {\n                state.splice(state.findIndex((expr) => expr.fieldName === expression.fieldName), 1);\n            });\n            return;\n        }\n\n        /**\n         * We need to make sure the states in each collection with same fields point to the same object reference.\n         * If the different state collections provided have different sizes we need to get the largest one.\n         * That way we can get the state reference from the largest one that has the same fieldName as the expression to prepare.\n         */\n        let maxCollection = stateCollections[0];\n        for (let i = 1; i < stateCollections.length; i++) {\n            if (maxCollection.length < stateCollections[i].length) {\n                maxCollection = stateCollections[i];\n            }\n        }\n        const maxExpr = maxCollection.find((expr) => expr.fieldName === expression.fieldName);\n\n        stateCollections.forEach(collection => {\n            const myExpr = collection.find((expr) => expr.fieldName === expression.fieldName);\n            if (!myExpr && !maxExpr) {\n                // Expression with this fieldName is missing from the current and the max collection.\n                collection.push(expression);\n            } else if (!myExpr && maxExpr) {\n                // Expression with this fieldName is missing from the current and but the max collection has.\n                collection.push(maxExpr);\n                Object.assign(maxExpr, expression);\n            } else {\n                // The current collection has the expression so just update it.\n                Object.assign(myExpr, expression);\n            }\n        });\n    }\n\n    public prepare_grouping_expression(stateCollections: Array<Array<any>>, expression: IGroupingExpression) {\n        if (expression.dir === SortingDirection.None) {\n            stateCollections.forEach(state => {\n                state.splice(state.findIndex((expr) => expr.fieldName === expression.fieldName), 1);\n            });\n            return;\n        }\n\n        /**\n         * We need to make sure the states in each collection with same fields point to the same object reference.\n         * If the different state collections provided have different sizes we need to get the largest one.\n         * That way we can get the state reference from the largest one that has the same fieldName as the expression to prepare.\n         */\n        let maxCollection = stateCollections[0];\n        for (let i = 1; i < stateCollections.length; i++) {\n            if (maxCollection.length < stateCollections[i].length) {\n                maxCollection = stateCollections[i];\n            }\n        }\n        const maxExpr = maxCollection.find((expr) => expr.fieldName === expression.fieldName);\n\n        stateCollections.forEach(collection => {\n            const myExpr = collection.find((expr) => expr.fieldName === expression.fieldName);\n            if (!myExpr && !maxExpr) {\n                // Expression with this fieldName is missing from the current and the max collection.\n                collection.push(expression);\n            } else if (!myExpr && maxExpr) {\n                // Expression with this fieldName is missing from the current and but the max collection has.\n                collection.push(maxExpr);\n                Object.assign(maxExpr, expression);\n            } else {\n                // The current collection has the expression so just update it.\n                Object.assign(myExpr, expression);\n            }\n        });\n    }\n\n    public remove_grouping_expression(_fieldName) {\n    }\n\n    public filterDataByExpressions(expressionsTree: IFilteringExpressionsTree): any[] {\n        let data = this.get_all_data();\n\n        if (expressionsTree.filteringOperands.length) {\n            const state = { expressionsTree, strategy: this.grid.filterStrategy };\n            data = FilterUtil.filter(cloneArray(data), state, this.grid);\n        }\n\n        return data;\n    }\n\n    public sortDataByExpressions(data: any[], expressions: ISortingExpression[]) {\n        return DataUtil.sort(cloneArray(data), expressions, this.grid.sortStrategy, this.grid);\n    }\n\n    public pin_row(rowID: any, index?: number, row?: RowType): void {\n        const grid = (this.grid as any);\n        if (grid._pinnedRecordIDs.indexOf(rowID) !== -1) {\n            return;\n        }\n        const eventArgs = this.get_pin_row_event_args(rowID, index, row, true);\n        grid.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        const insertIndex = typeof eventArgs.insertAtIndex === 'number' ? eventArgs.insertAtIndex : grid._pinnedRecordIDs.length;\n        grid._pinnedRecordIDs.splice(insertIndex, 0, rowID);\n    }\n\n    public unpin_row(rowID: any, row: RowType): void {\n        const grid = (this.grid as any);\n        const index = grid._pinnedRecordIDs.indexOf(rowID);\n        if (index === -1) {\n            return;\n        }\n        const eventArgs = this.get_pin_row_event_args(rowID, null , row, false);\n        grid.rowPinning.emit(eventArgs);\n\n        if (eventArgs.cancel) {\n            return;\n        }\n        grid._pinnedRecordIDs.splice(index, 1);\n    }\n\n    public get_pin_row_event_args(rowID: any, index?: number, row?: RowType, pinned?: boolean) {\n        const eventArgs: IPinRowEventArgs = {\n            isPinned: pinned ? true : false,\n            rowKey: rowID,\n            rowID,\n            row,\n            cancel: false\n        }\n        if (typeof index === 'number') {\n            eventArgs.insertAtIndex = index <= this.grid.pinnedRecords.length ? index : this.grid.pinnedRecords.length;\n        }\n        return eventArgs;\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 updateData(grid, rowID, rowValueInDataSource: any, rowCurrentValue: any, rowNewValue: { [x: string]: any }) {\n        if (grid.transactions.enabled) {\n            const transaction: Transaction = {\n                id: rowID,\n                type: TransactionType.UPDATE,\n                newValue: rowNewValue\n            };\n            grid.transactions.add(transaction, rowCurrentValue);\n        } else {\n            mergeObjects(rowValueInDataSource, rowNewValue);\n        }\n    }\n\n\n    protected update_row_in_array(value: any, rowID: any, index: number) {\n        const grid = this.grid;\n        grid.data[index] = value;\n    }\n\n    protected getSortStrategyPerColumn(fieldName: string) {\n        return this.get_column_by_name(fieldName) ?\n            this.get_column_by_name(fieldName).sortStrategy : undefined;\n    }\n\n}\n","import {\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective\n} from './column-actions/public_api';\nimport {\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent\n} from './columns/public_api';\nimport { IgxAdvancedFilteringDialogComponent } from './filtering/advanced-filtering/advanced-filtering-dialog.component';\nimport {\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} from './filtering/excel-style/public_api';\nimport { IgxGridActionButtonComponent, IgxGridActionsBaseDirective, IgxGridEditingActionsComponent, IgxGridPinningActionsComponent } from './grid-actions/public_api';\nimport { IgxGridFooterComponent } from './grid-footer/grid-footer.component';\nimport { IgxExcelStyleHeaderIconDirective, IgxHeaderCollapsedIndicatorDirective, IgxHeaderExpandedIndicatorDirective, IgxRowCollapsedIndicatorDirective, IgxRowExpandedIndicatorDirective, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective, IgxGridEmptyTemplateDirective, IgxGridLoadingTemplateDirective } from './grid.directives';\nimport {\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent\n} from './headers/public_api';\nimport { IgxDragIndicatorIconDirective, IgxRowDragGhostDirective } from './row-drag.directive';\nimport { IgxRowDirective } from './row.directive';\nimport {\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective\n} from './selection/public_api';\nimport { IgxGridStateDirective } from './state.directive';\nimport {\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective\n} from './toolbar/public_api';\n\nexport { IgxRowDirective } from './row.directive';\nexport * from './grid.directives';\nexport * from './grid-public-row';\nexport * from './grid-public-cell';\nexport * from './row-drag.directive';\nexport {\n    IgxRowEditTextDirective,\n    IgxRowAddTextDirective,\n    IgxRowEditActionsDirective,\n    IgxRowEditTabStopDirective,\n    IgxRowEditTemplateDirective\n} from './grid.rowEdit.directive';\nexport * from './state-base.directive';\nexport * from './state.directive';\nexport * from './columns/public_api';\nexport * from './headers/public_api';\nexport * from './common/public_api';\nexport * from './grid-actions/public_api';\nexport * from './grid-footer/grid-footer.component';\nexport { IgxAdvancedFilteringDialogComponent } from './filtering/advanced-filtering/advanced-filtering-dialog.component';\nexport * from './filtering/excel-style/public_api';\nexport * from './filtering/base/grid-filtering-cell.component';\nexport * from './filtering/base/grid-filtering-row.component';\nexport * from './filtering/grid-filtering.service';\nexport * from './selection/public_api';\nexport * from './summaries/grid-summary';\nexport * from './summaries/grid-summary.service';\nexport * from './summaries/summary-row.component';\nexport * from './summaries/grid-root-summary.pipe';\nexport * from './column-actions/public_api';\nexport * from './toolbar/public_api';\nexport * from './moving/moving.service';\nexport * from './moving/moving.drag.directive';\nexport * from './moving/moving.drop.directive';\nexport * from './resizing/resizing.service';\nexport * from './resizing/resizer.directive';\nexport * from './resizing/resizer.component';\nexport * from './resizing/pivot-grid/pivot-resize-handle.directive';\nexport * from './resizing/pivot-grid/pivot-resizer.component';\nexport * from './resizing/pivot-grid/pivot-resizing.service';\nexport * from './grid-navigation.service';\nexport * from './grid-navigation-keys';\nexport * from './grid-validation.service';\nexport * from './grid.common';\nexport { IgxGridCellComponent } from './cell.component';\nexport * from './grouping/group-by-area.directive';\nexport * from './grid-mrl-navigation.service';\nexport * from './api.service';\nexport * from './pivot-util';\nexport * from './pivot-grid.interface';\nexport * from './pivot-grid-dimensions';\nexport * from './pivot-grid-aggregate';\nexport * from './watch-changes';\n// Exporter services (moved from core)\nexport * from './services/exporter-common/base-export-service';\nexport * from './services/exporter-common/exporter-options-base';\nexport * from './services/exporter-common/export-utilities';\nexport * from './services/csv/csv-exporter';\nexport * from './services/csv/csv-exporter-options';\nexport * from './services/csv/char-separated-value-data';\nexport * from './services/excel/excel-exporter';\nexport * from './services/excel/excel-exporter-options';\nexport * from './services/pdf/pdf-exporter';\nexport * from './services/pdf/pdf-exporter-options';\n\n/*\n\n// export * from './common/shared.module';\nexport * from './columns/interfaces';\n// export * from './headers/headers.module';\n// export * from './filtering/base/filtering.module';\nexport * from './grid-base.directive';\n// export * from './grid-common.module';\n//\n// export * from './toolbar/toolbar.module';\nexport * from './grid/grid-validation.service';\n\n\nexport * from './resizing/resize.module';\n// export * from './summaries/summary.module';\n*/\n\n/* NOTE: Common grid directives collection for reuse\n    Import `IGX_GRID_DIRECTIVES` or `IGX_TREE_GRID_DIRECTIVES` or `IGX_HIERARCHICAL_GRID_DIRECTIVES` instead of `IGX_GRID_COMMON_DIRECTIVES`\n*/\nexport const IGX_GRID_COMMON_DIRECTIVES = [\n    IgxRowDirective,\n    IgxGridFooterComponent,\n    IgxAdvancedFilteringDialogComponent,\n    IgxRowExpandedIndicatorDirective,\n    IgxRowCollapsedIndicatorDirective,\n    IgxHeaderExpandedIndicatorDirective,\n    IgxHeaderCollapsedIndicatorDirective,\n    IgxExcelStyleHeaderIconDirective,\n    IgxSortAscendingHeaderIconDirective,\n    IgxSortDescendingHeaderIconDirective,\n    IgxSortHeaderIconDirective,\n    IgxGridEmptyTemplateDirective,\n    IgxGridLoadingTemplateDirective,\n    IgxDragIndicatorIconDirective,\n    IgxRowDragGhostDirective,\n    IgxGridStateDirective,\n    // IGX_GRID_HEADERS_DIRECTIVES:\n    IgxGridHeaderComponent,\n    IgxGridHeaderGroupComponent,\n    IgxGridHeaderRowComponent,\n    // IGX_GRID_COLUMN_DIRECTIVES:\n    IgxFilterCellTemplateDirective,\n    IgxSummaryTemplateDirective,\n    IgxCellTemplateDirective,\n    IgxCellValidationErrorDirective,\n    IgxCellHeaderTemplateDirective,\n    IgxCellFooterTemplateDirective,\n    IgxCellEditorTemplateDirective,\n    IgxCollapsibleIndicatorTemplateDirective,\n    IgxColumnComponent,\n    IgxColumnGroupComponent,\n    IgxColumnLayoutComponent,\n    // IGX_GRID_COLUMN_ACTIONS_DIRECTIVES:\n    IgxColumnActionsComponent,\n    IgxColumnHidingDirective,\n    IgxColumnPinningDirective,\n    // IGX_GRID_SELECTION_DIRECTIVES:\n    IgxRowSelectorDirective,\n    IgxGroupByRowSelectorDirective,\n    IgxHeadSelectorDirective,\n    // IGX_GRID_TOOLBAR_DIRECTIVES:\n    IgxCSVTextDirective,\n    IgxExcelTextDirective,\n    IgxGridToolbarActionsComponent,\n    IgxGridToolbarAdvancedFilteringComponent,\n    IgxGridToolbarComponent,\n    IgxGridToolbarExporterComponent,\n    IgxGridToolbarHidingComponent,\n    IgxGridToolbarPinningComponent,\n    IgxGridToolbarTitleComponent,\n    IgxGridToolbarDirective,\n    // IGX_GRID_EXCEL_STYLE_FILTER_DIRECTIVES:\n    IgxGridExcelStyleFilteringComponent,\n    IgxExcelStyleHeaderComponent,\n    IgxExcelStyleSortingComponent,\n    IgxExcelStylePinningComponent,\n    IgxExcelStyleHidingComponent,\n    IgxExcelStyleSelectingComponent,\n    IgxExcelStyleClearFiltersComponent,\n    IgxExcelStyleConditionalFilterComponent,\n    IgxExcelStyleMovingComponent,\n    IgxExcelStyleSearchComponent,\n    IgxExcelStyleColumnOperationsTemplateDirective,\n    IgxExcelStyleFilterOperationsTemplateDirective,\n    IgxExcelStyleLoadingValuesTemplateDirective,\n    // IGX_GRID_ACTION_STRIP_DIRECTIVES:\n    IgxGridPinningActionsComponent,\n    IgxGridEditingActionsComponent,\n    IgxGridActionsBaseDirective,\n    IgxGridActionButtonComponent\n] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["NEXT_ID","first","isEqual","ɵSize"],"mappings":"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"}