igniteui-angular 22.1.0-beta.6 → 22.1.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/fesm2022/igniteui-angular-accordion.mjs +4 -4
  2. package/fesm2022/igniteui-angular-accordion.mjs.map +1 -1
  3. package/fesm2022/igniteui-angular-action-strip.mjs +0 -1
  4. package/fesm2022/igniteui-angular-action-strip.mjs.map +1 -1
  5. package/fesm2022/igniteui-angular-avatar.mjs.map +1 -1
  6. package/fesm2022/igniteui-angular-badge.mjs +0 -1
  7. package/fesm2022/igniteui-angular-badge.mjs.map +1 -1
  8. package/fesm2022/igniteui-angular-banner.mjs +2 -2
  9. package/fesm2022/igniteui-angular-banner.mjs.map +1 -1
  10. package/fesm2022/igniteui-angular-button-group.mjs.map +1 -1
  11. package/fesm2022/igniteui-angular-calendar.mjs +4 -5
  12. package/fesm2022/igniteui-angular-calendar.mjs.map +1 -1
  13. package/fesm2022/igniteui-angular-card.mjs.map +1 -1
  14. package/fesm2022/igniteui-angular-carousel.mjs.map +1 -1
  15. package/fesm2022/igniteui-angular-chips.mjs.map +1 -1
  16. package/fesm2022/igniteui-angular-combo.mjs +17 -6
  17. package/fesm2022/igniteui-angular-combo.mjs.map +1 -1
  18. package/fesm2022/igniteui-angular-core.mjs +16 -337
  19. package/fesm2022/igniteui-angular-core.mjs.map +1 -1
  20. package/fesm2022/igniteui-angular-date-picker.mjs +12 -14
  21. package/fesm2022/igniteui-angular-date-picker.mjs.map +1 -1
  22. package/fesm2022/igniteui-angular-dialog.mjs +1 -1
  23. package/fesm2022/igniteui-angular-dialog.mjs.map +1 -1
  24. package/fesm2022/igniteui-angular-directives.mjs +45 -47
  25. package/fesm2022/igniteui-angular-directives.mjs.map +1 -1
  26. package/fesm2022/igniteui-angular-drop-down.mjs +3 -2
  27. package/fesm2022/igniteui-angular-drop-down.mjs.map +1 -1
  28. package/fesm2022/igniteui-angular-expansion-panel.mjs +23 -12
  29. package/fesm2022/igniteui-angular-expansion-panel.mjs.map +1 -1
  30. package/fesm2022/igniteui-angular-grids-core.mjs +484 -202
  31. package/fesm2022/igniteui-angular-grids-core.mjs.map +1 -1
  32. package/fesm2022/igniteui-angular-grids-grid.mjs +115 -94
  33. package/fesm2022/igniteui-angular-grids-grid.mjs.map +1 -1
  34. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs +15 -19
  35. package/fesm2022/igniteui-angular-grids-hierarchical-grid.mjs.map +1 -1
  36. package/fesm2022/igniteui-angular-grids-lite.mjs.map +1 -1
  37. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs +75 -153
  38. package/fesm2022/igniteui-angular-grids-pivot-grid.mjs.map +1 -1
  39. package/fesm2022/igniteui-angular-grids-tree-grid.mjs +28 -35
  40. package/fesm2022/igniteui-angular-grids-tree-grid.mjs.map +1 -1
  41. package/fesm2022/igniteui-angular-icon.mjs.map +1 -1
  42. package/fesm2022/igniteui-angular-input-group.mjs +1 -1
  43. package/fesm2022/igniteui-angular-input-group.mjs.map +1 -1
  44. package/fesm2022/igniteui-angular-list.mjs.map +1 -1
  45. package/fesm2022/igniteui-angular-navbar.mjs.map +1 -1
  46. package/fesm2022/igniteui-angular-navigation-drawer.mjs +2 -3
  47. package/fesm2022/igniteui-angular-navigation-drawer.mjs.map +1 -1
  48. package/fesm2022/igniteui-angular-paginator.mjs.map +1 -1
  49. package/fesm2022/igniteui-angular-progressbar.mjs +5 -2
  50. package/fesm2022/igniteui-angular-progressbar.mjs.map +1 -1
  51. package/fesm2022/igniteui-angular-query-builder.mjs +18 -19
  52. package/fesm2022/igniteui-angular-query-builder.mjs.map +1 -1
  53. package/fesm2022/igniteui-angular-radio.mjs +1 -1
  54. package/fesm2022/igniteui-angular-radio.mjs.map +1 -1
  55. package/fesm2022/igniteui-angular-select.mjs.map +1 -1
  56. package/fesm2022/igniteui-angular-simple-combo.mjs +10 -7
  57. package/fesm2022/igniteui-angular-simple-combo.mjs.map +1 -1
  58. package/fesm2022/igniteui-angular-slider.mjs +3 -3
  59. package/fesm2022/igniteui-angular-slider.mjs.map +1 -1
  60. package/fesm2022/igniteui-angular-splitter.mjs +1 -1
  61. package/fesm2022/igniteui-angular-splitter.mjs.map +1 -1
  62. package/fesm2022/igniteui-angular-stepper.mjs +1 -1
  63. package/fesm2022/igniteui-angular-stepper.mjs.map +1 -1
  64. package/fesm2022/igniteui-angular-tabs.mjs.map +1 -1
  65. package/fesm2022/igniteui-angular-time-picker.mjs +3 -6
  66. package/fesm2022/igniteui-angular-time-picker.mjs.map +1 -1
  67. package/fesm2022/igniteui-angular-tree.mjs +8 -10
  68. package/fesm2022/igniteui-angular-tree.mjs.map +1 -1
  69. package/migrations/migration-collection.json +0 -7
  70. package/package.json +1 -1
  71. package/types/igniteui-angular-avatar.d.ts +1 -1
  72. package/types/igniteui-angular-banner.d.ts +3 -3
  73. package/types/igniteui-angular-calendar.d.ts +9 -9
  74. package/types/igniteui-angular-card.d.ts +1 -1
  75. package/types/igniteui-angular-carousel.d.ts +9 -9
  76. package/types/igniteui-angular-chat.d.ts +1 -1
  77. package/types/igniteui-angular-chips.d.ts +5 -5
  78. package/types/igniteui-angular-combo.d.ts +17 -13
  79. package/types/igniteui-angular-core.d.ts +200 -495
  80. package/types/igniteui-angular-date-picker.d.ts +3 -3
  81. package/types/igniteui-angular-dialog.d.ts +4 -4
  82. package/types/igniteui-angular-directives.d.ts +60 -59
  83. package/types/igniteui-angular-drop-down.d.ts +16 -16
  84. package/types/igniteui-angular-expansion-panel.d.ts +6 -6
  85. package/types/igniteui-angular-grids-core.d.ts +1053 -791
  86. package/types/igniteui-angular-grids-grid.d.ts +104 -267
  87. package/types/igniteui-angular-grids-hierarchical-grid.d.ts +68 -547
  88. package/types/igniteui-angular-grids-lite.d.ts +7 -7
  89. package/types/igniteui-angular-grids-pivot-grid.d.ts +94 -129
  90. package/types/igniteui-angular-grids-tree-grid.d.ts +5 -51
  91. package/types/igniteui-angular-icon.d.ts +2 -2
  92. package/types/igniteui-angular-input-group.d.ts +4 -4
  93. package/types/igniteui-angular-list.d.ts +4 -4
  94. package/types/igniteui-angular-navigation-drawer.d.ts +3 -3
  95. package/types/igniteui-angular-progressbar.d.ts +1 -0
  96. package/types/igniteui-angular-query-builder.d.ts +9 -9
  97. package/types/igniteui-angular-radio.d.ts +1 -1
  98. package/types/igniteui-angular-select.d.ts +5 -5
  99. package/types/igniteui-angular-simple-combo.d.ts +2 -2
  100. package/types/igniteui-angular-slider.d.ts +4 -4
  101. package/types/igniteui-angular-splitter.d.ts +3 -3
  102. package/types/igniteui-angular-time-picker.d.ts +8 -8
  103. package/types/igniteui-angular-tree.d.ts +8 -8
  104. package/migrations/update-22_1_0_import-migration/index.d.ts +0 -2
  105. package/migrations/update-22_1_0_import-migration/index.js +0 -228
  106. package/migrations/update-22_1_0_import-migration/index.spec.d.ts +0 -1
  107. package/migrations/update-22_1_0_import-migration/index.spec.js +0 -188
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, ElementRef, ChangeDetectorRef, TemplateRef, HostBinding, HostListener, ViewChild, Input, ChangeDetectionStrategy, Component, Pipe, DOCUMENT, forwardRef, InjectionToken, QueryList, NgZone, IterableDiffers, ViewContainerRef, Injector, EnvironmentInjector, LOCALE_ID, EventEmitter, createComponent, booleanAttribute, ViewChildren, ContentChildren, ContentChild, Output, Directive, CUSTOM_ELEMENTS_SCHEMA, ViewEncapsulation, NgModule } from '@angular/core';
3
3
  import { NgTemplateOutlet, NgClass, NgStyle } from '@angular/common';
4
- import { GridBaseAPIService, IGX_GRID_BASE, IgxGridSelectionService, IgxFilteringService, GridSelectionMode, IgxColumnFormatterPipe, IgxGroupByAreaDirective, IgxGroupAreaDropDirective, IgxGroupByMetaPipe, GridSummaryPosition, RowPinningPosition, IgxGridCellComponent, IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxRowDirective, IgxRowDragDirective, IgxGridNotGroupedPipe, IgxGridTopLevelColumns, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe, FilterMode, GridCellMergeMode, IgxGridValidationService, IgxColumnResizingService, IGX_GRID_SERVICE_BASE, IgxGridNavigationService, IgxGridSummaryService, RowEditPositionStrategy, getUUID, IgxGridExcelStyleFilteringComponent, DropPosition, IgxCell, IgxEditRow, IgxColumnComponent, CharSeparatedValueData, IgxAdvancedFilteringDialogComponent, IgxColumnGroupComponent, IgxGridPinningActionsComponent, IgxGridColumnResizerComponent, IgxGridHeaderRowComponent, IgxGridBodyDirective, IgxRowEditTabStopDirective, IgxSummaryRowComponent, IgxExcelStyleLoadingValuesTemplateDirective, IgxRowAddTextDirective, IgxRowExpandedIndicatorDirective, IgxRowCollapsedIndicatorDirective, IgxHeaderExpandedIndicatorDirective, IgxHeaderCollapsedIndicatorDirective, IgxExcelStyleHeaderIconDirective, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective, IgxGridLoadingTemplateDirective, IgxGridEmptyTemplateDirective, IgxHeadSelectorDirective, IgxRowSelectorDirective, IgxRowDragGhostDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective, IgxRowEditActionsDirective, IgxDragIndicatorIconDirective, IgxToolbarToken, WatchChanges, IgxGridRow, IgxGridCell, IgxGroupByRow, IgxSummaryRow, IgxGridMRLNavigationService, IgxGridDragSelectDirective, IgxColumnMovingDropDirective, IgxGridTransactionPipe, IgxHasVisibleColumnsPipe, IgxGridRowPinningPipe, IgxGridAddRowPipe, IgxGridRowClassesPipe, IgxGridRowStylesPipe, IgxSummaryDataPipe, IgxGridDetailTemplateDirective, IgxGroupByRowTemplateDirective, IgxGroupByRowSelectorDirective, IgxGridCRUDService, IgxGridFooterComponent, IgxGridStateDirective, IgxGridEditingActionsComponent, IgxGridActionsBaseDirective, IgxGridActionButtonComponent, IgxGridHeaderComponent, IgxGridHeaderGroupComponent, IgxFilterCellTemplateDirective, IgxSummaryTemplateDirective, IgxCellTemplateDirective, IgxCellValidationErrorDirective, IgxCellHeaderTemplateDirective, IgxCellFooterTemplateDirective, IgxCellEditorTemplateDirective, IgxCollapsibleIndicatorTemplateDirective, IgxColumnLayoutComponent, IgxColumnActionsComponent, IgxColumnHidingDirective, IgxColumnPinningDirective, IgxCSVTextDirective, IgxExcelTextDirective, IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarPinningComponent, IgxGridToolbarTitleComponent, IgxGridToolbarDirective, IgxExcelStyleHeaderComponent, IgxExcelStyleSortingComponent, IgxExcelStylePinningComponent, IgxExcelStyleHidingComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleClearFiltersComponent, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleMovingComponent, IgxExcelStyleSearchComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective, IgxColumnRequiredValidatorDirective, IgxColumnMinValidatorDirective, IgxColumnMaxValidatorDirective, IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, IgxColumnPatternValidatorDirective } from 'igniteui-angular/grids/core';
5
- import { cloneArray, DataUtil, GridColumnDataType, IgxNumberFormatterPipe, IgxDateFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, GridSummaryCalculationMode, FilteringExpressionsTree, FilterUtil, isTree, FilteringLogic, FilteringExpressionsTreeType, getCurrentResourceStrings, GridResourceStringsEN, isObject, TransactionType, IgxFlatTransactionFactory, IgxOverlayService, PlatformUtil, IgxGridTransaction, I18N_FORMATTER, DefaultMergeStrategy, FilteringStrategy, ColumnPinningPosition, VerticalAlignment, HorizontalAlignment, ConnectedPositioningStrategy, AbsoluteScrollStrategy, DefaultDataCloneStrategy, ɵSize as _Size, IgxStylesRegistrar, areEqualArrays, runAfterRenderOnce, resizeObservable, compareMaps, TransactionEventOrigin, mergeObjects, ContainerPositionStrategy, resolveNestedPath, columnFieldPath, recreateTree, recreateTreeFromFields, DEFAULT_LOCALE, onResourceChangeHandle, IgxOverlayOutletDirective, IgxActionStripToken } from 'igniteui-angular/core';
4
+ import { GridBaseAPIService, IGX_GRID_BASE, IgxGridSelectionService, IgxFilteringService, GridSelectionMode, IgxColumnFormatterPipe, IgxGroupByAreaDirective, IgxGroupAreaDropDirective, IgxGroupByMetaPipe, GridSummaryPosition, RowPinningPosition, IgxGridCellComponent, IgxGridCellImageAltPipe, IgxStringReplacePipe, IgxRowDirective, IgxRowDragDirective, IgxGridNotGroupedPipe, IgxGridTopLevelColumns, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe, FilterMode, GridCellMergeMode, IgxGridValidationService, IgxColumnResizingService, IGX_GRID_SERVICE_BASE, IgxGridNavigationService, IgxGridSummaryService, IgxGridTransaction, RowEditPositionStrategy, getUUID, IgxGridExcelStyleFilteringComponent, DropPosition, IgxCell, IgxEditRow, IgxColumnComponent, CharSeparatedValueData, IgxAdvancedFilteringDialogComponent, IgxColumnGroupComponent, IgxGridPinningActionsComponent, IgxGridColumnResizerComponent, IgxGridHeaderRowComponent, IgxGridBodyDirective, IgxRowEditTabStopDirective, IgxSummaryRowComponent, IgxExcelStyleLoadingValuesTemplateDirective, IgxRowAddTextDirective, IgxRowExpandedIndicatorDirective, IgxRowCollapsedIndicatorDirective, IgxHeaderExpandedIndicatorDirective, IgxHeaderCollapsedIndicatorDirective, IgxExcelStyleHeaderIconDirective, IgxSortAscendingHeaderIconDirective, IgxSortDescendingHeaderIconDirective, IgxSortHeaderIconDirective, IgxGridLoadingTemplateDirective, IgxGridEmptyTemplateDirective, IgxHeadSelectorDirective, IgxRowSelectorDirective, IgxRowDragGhostDirective, IgxRowEditTemplateDirective, IgxRowEditTextDirective, IgxRowEditActionsDirective, IgxDragIndicatorIconDirective, IgxToolbarToken, WatchChanges, IgxGridRow, IgxGridCell, IgxGroupByRow, IgxSummaryRow, IgxGridMRLNavigationService, IgxGridDragSelectDirective, IgxColumnMovingDropDirective, IgxGridTransactionPipe, IgxHasVisibleColumnsPipe, IgxGridRowPinningPipe, IgxGridAddRowPipe, IgxGridRowClassesPipe, IgxGridRowStylesPipe, IgxSummaryDataPipe, IgxGridDetailTemplateDirective, IgxGroupByRowTemplateDirective, IgxGroupByRowSelectorDirective, IgxGridCRUDService, IgxGridFooterComponent, IgxGridStateDirective, IgxGridEditingActionsComponent, IgxGridActionsBaseDirective, IgxGridActionButtonComponent, IgxGridHeaderComponent, IgxGridHeaderGroupComponent, IgxFilterCellTemplateDirective, IgxSummaryTemplateDirective, IgxCellTemplateDirective, IgxCellValidationErrorDirective, IgxCellHeaderTemplateDirective, IgxCellFooterTemplateDirective, IgxCellEditorTemplateDirective, IgxCollapsibleIndicatorTemplateDirective, IgxColumnLayoutComponent, IgxColumnActionsComponent, IgxColumnHidingDirective, IgxColumnPinningDirective, IgxCSVTextDirective, IgxExcelTextDirective, IgxGridToolbarActionsComponent, IgxGridToolbarAdvancedFilteringComponent, IgxGridToolbarComponent, IgxGridToolbarExporterComponent, IgxGridToolbarHidingComponent, IgxGridToolbarPinningComponent, IgxGridToolbarTitleComponent, IgxGridToolbarDirective, IgxExcelStyleHeaderComponent, IgxExcelStyleSortingComponent, IgxExcelStylePinningComponent, IgxExcelStyleHidingComponent, IgxExcelStyleSelectingComponent, IgxExcelStyleClearFiltersComponent, IgxExcelStyleConditionalFilterComponent, IgxExcelStyleMovingComponent, IgxExcelStyleSearchComponent, IgxExcelStyleColumnOperationsTemplateDirective, IgxExcelStyleFilterOperationsTemplateDirective, IgxColumnRequiredValidatorDirective, IgxColumnMinValidatorDirective, IgxColumnMaxValidatorDirective, IgxColumnEmailValidatorDirective, IgxColumnMinLengthValidatorDirective, IgxColumnMaxLengthValidatorDirective, IgxColumnPatternValidatorDirective } from 'igniteui-angular/grids/core';
5
+ import { cloneArray, DataUtil, GridColumnDataType, IgxNumberFormatterPipe, IgxDateFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, GridSummaryCalculationMode, FilteringExpressionsTree, FilterUtil, isTree, FilteringLogic, FilteringExpressionsTreeType, getCurrentResourceStrings, GridResourceStringsEN, isObject, TransactionType, IgxFlatTransactionFactory, IgxOverlayService, PlatformUtil, I18N_FORMATTER, DefaultMergeStrategy, FilteringStrategy, ColumnPinningPosition, VerticalAlignment, HorizontalAlignment, ConnectedPositioningStrategy, AbsoluteScrollStrategy, DefaultDataCloneStrategy, ɵSize as _Size, IgxStylesRegistrar, areEqualArrays, runAfterRenderOnce, resizeObservable, compareMaps, TransactionEventOrigin, mergeObjects, ContainerPositionStrategy, resolveNestedPath, columnFieldPath, recreateTree, recreateTreeFromFields, DEFAULT_LOCALE, onResourceChangeHandle, IgxOverlayOutletDirective, IgxActionStripToken } from 'igniteui-angular/core';
6
6
  import { takeUntil, shareReplay, filter, throttle, take, switchMap, throttleTime, takeWhile, map, first } from 'rxjs/operators';
7
7
  import { Subject, BehaviorSubject, animationFrameScheduler, fromEvent, timer, pipe, merge } from 'rxjs';
8
8
  import { IgxIconComponent } from 'igniteui-angular/icon';
@@ -279,10 +279,10 @@ class IgxGridGroupByRowComponent {
279
279
  }
280
280
  event.stopPropagation();
281
281
  if (this.areAllRowsInTheGroupSelected) {
282
- this.gridSelection.deselectRows(this.groupRow.records.map(x => this.getRowID(x)), event);
282
+ this.gridSelection.deselectRows(this.groupRow.records.map(x => this.getRowID(x)));
283
283
  }
284
284
  else {
285
- this.gridSelection.selectRows(this.groupRow.records.map(x => this.getRowID(x)), false, event);
285
+ this.gridSelection.selectRows(this.groupRow.records.map(x => this.getRowID(x)));
286
286
  }
287
287
  }
288
288
  /**
@@ -359,7 +359,7 @@ class IgxGridGroupByRowComponent {
359
359
  return this.grid.rowSelection !== GridSelectionMode.none && !this.hideGroupRowSelectors;
360
360
  }
361
361
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxGridGroupByRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
362
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: IgxGridGroupByRowComponent, isStandalone: true, selector: "igx-grid-groupby-row", inputs: { hideGroupRowSelectors: "hideGroupRowSelectors", rowDraggable: "rowDraggable", index: "index", gridID: "gridID", groupRow: "groupRow", isFocused: "isFocused" }, host: { listeners: { "pointerdown": "activate()", "click": "onClick($event)" }, properties: { "attr.aria-describedby": "this.describedBy", "attr.data-rowIndex": "this.dataRowIndex", "attr.id": "this.attrCellID", "class": "this.styleClasses", "attr.role": "this.role" } }, viewQueries: [{ propertyName: "groupContent", first: true, predicate: ["groupContent"], descendants: true, static: true }, { propertyName: "defaultGroupByExpandedTemplate", first: true, predicate: ["defaultGroupByExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupByCollapsedTemplate", first: true, predicate: ["defaultGroupByCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-container #defaultGroupRow>\n\n @if (rowDraggable) {\n <div class=\"igx-grid__drag-indicator igx-grid__tr-action\" role=\"gridcell\">\n <igx-icon family=\"default\" name=\"drag_indicator\" [style.visibility]=\"'hidden'\"></igx-icon>\n </div>\n }\n\n @if (showRowSelectors) {\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" role=\"gridcell\" (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onGroupSelectorClick($event)\">\n <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n context: { $implicit: {\n selectedCount: selectedRowsInTheGroup.length,\n totalCount: this.groupRow.records.length,\n groupRow: this.groupRow }}\">\n </ng-template>\n </div>\n }\n\n <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\" role=\"gridcell\" [attr.aria-expanded]=\"expanded\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: $any(this) }\">\n </ng-container>\n </div>\n\n <div class=\"igx-grid__group-content\" role=\"gridcell\" #groupContent>\n <ng-container\n *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n </ng-container>\n </div>\n\n <ng-template #defaultGroupByExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n </ng-template>\n\n <ng-template #defaultGroupByCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n </ng-template>\n\n\n <ng-template #defaultGroupByTemplate>\n <div class=\"igx-group-label\">\n <igx-icon family=\"default\" name=\"group_work\" class=\"igx-group-label__icon\"></igx-icon>\n <span class=\"igx-group-label__column-name\">\n {{ groupRow.column && groupRow.column.header ?\n groupRow.column.header :\n (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n </span>\n\n <span class=\"igx-group-label__text\">{{\n formatter\n ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n : dataType === \"number\"\n ? (groupRow.value | number:groupRow.column!.pipeArgs.digitsInfo:grid.locale)\n : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n ? (groupRow.value | date:groupRow.column!.pipeArgs.format:groupRow.column!.pipeArgs.timezone:grid.locale)\n : dataType === 'currency'\n ? (groupRow.value | currency:currencyCode:groupRow.column!.pipeArgs.display:groupRow.column!.pipeArgs.digitsInfo:grid.locale)\n : dataType === 'percent'\n ? (groupRow.value | percent:groupRow.column!.pipeArgs.digitsInfo:grid.locale)\n : groupRow.value\n }}</span>\n\n <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n </igx-badge>\n </div>\n </ng-template>\n <ng-template #groupByRowSelectorBaseTemplate let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n #groupByRowCheckbox>\n </igx-checkbox>\n </div>\n </ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "component", type: IgxBadgeComponent, selector: "igx-badge", inputs: ["id", "type", "value", "icon", "iconSet", "shape", "outlined", "dot"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "pipe", type: IgxNumberFormatterPipe, name: "number" }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }, { kind: "pipe", type: IgxPercentFormatterPipe, name: "percent" }, { kind: "pipe", type: IgxCurrencyFormatterPipe, name: "currency" }, { kind: "pipe", type: IgxColumnFormatterPipe, name: "columnFormatter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
362
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: IgxGridGroupByRowComponent, isStandalone: true, selector: "igx-grid-groupby-row", inputs: { hideGroupRowSelectors: "hideGroupRowSelectors", rowDraggable: "rowDraggable", index: "index", gridID: "gridID", groupRow: "groupRow", isFocused: "isFocused" }, host: { listeners: { "pointerdown": "activate()", "click": "onClick($event)" }, properties: { "attr.aria-describedby": "this.describedBy", "attr.data-rowIndex": "this.dataRowIndex", "attr.id": "this.attrCellID", "class": "this.styleClasses", "attr.role": "this.role" } }, viewQueries: [{ propertyName: "groupContent", first: true, predicate: ["groupContent"], descendants: true, static: true }, { propertyName: "defaultGroupByExpandedTemplate", first: true, predicate: ["defaultGroupByExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupByCollapsedTemplate", first: true, predicate: ["defaultGroupByCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-container #defaultGroupRow>\n\n @if (rowDraggable) {\n <div class=\"igx-grid__drag-indicator igx-grid__tr-action\" role=\"gridcell\">\n <igx-icon family=\"default\" name=\"drag_indicator\" [style.visibility]=\"'hidden'\"></igx-icon>\n </div>\n }\n\n @if (showRowSelectors) {\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" role=\"gridcell\" (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onGroupSelectorClick($event)\">\n <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n context: { $implicit: {\n selectedCount: selectedRowsInTheGroup.length,\n totalCount: this.groupRow.records.length,\n groupRow: this.groupRow }}\">\n </ng-template>\n </div>\n }\n\n <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\" role=\"gridcell\" [attr.aria-expanded]=\"expanded\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n\n <div class=\"igx-grid__group-content\" role=\"gridcell\" #groupContent>\n <ng-container\n *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n </ng-container>\n </div>\n\n <ng-template #defaultGroupByExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n </ng-template>\n\n <ng-template #defaultGroupByCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n </ng-template>\n\n\n <ng-template #defaultGroupByTemplate>\n <div class=\"igx-group-label\">\n <igx-icon family=\"default\" name=\"group_work\" class=\"igx-group-label__icon\"></igx-icon>\n <span class=\"igx-group-label__column-name\">\n {{ groupRow.column && groupRow.column.header ?\n groupRow.column.header :\n (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n </span>\n\n <span class=\"igx-group-label__text\">{{\n formatter\n ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n : dataType === \"number\"\n ? (groupRow.value | number:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n ? (groupRow.value | date:groupRow.column.pipeArgs.format:groupRow.column.pipeArgs.timezone:grid.locale)\n : dataType === 'currency'\n ? (groupRow.value | currency:currencyCode:groupRow.column.pipeArgs.display:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : dataType === 'percent'\n ? (groupRow.value | percent:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : groupRow.value\n }}</span>\n\n <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n </igx-badge>\n </div>\n </ng-template>\n <ng-template #groupByRowSelectorBaseTemplate let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n #groupByRowCheckbox>\n </igx-checkbox>\n </div>\n </ng-template>\n</ng-container>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "component", type: IgxBadgeComponent, selector: "igx-badge", inputs: ["id", "type", "value", "icon", "iconSet", "shape", "outlined", "dot"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "pipe", type: IgxNumberFormatterPipe, name: "number" }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }, { kind: "pipe", type: IgxPercentFormatterPipe, name: "percent" }, { kind: "pipe", type: IgxCurrencyFormatterPipe, name: "currency" }, { kind: "pipe", type: IgxColumnFormatterPipe, name: "columnFormatter" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
363
363
  }
364
364
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxGridGroupByRowComponent, decorators: [{
365
365
  type: Component,
@@ -373,7 +373,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
373
373
  IgxBadgeComponent,
374
374
  IgxCheckboxComponent,
375
375
  IgxColumnFormatterPipe
376
- ], template: "<ng-container #defaultGroupRow>\n\n @if (rowDraggable) {\n <div class=\"igx-grid__drag-indicator igx-grid__tr-action\" role=\"gridcell\">\n <igx-icon family=\"default\" name=\"drag_indicator\" [style.visibility]=\"'hidden'\"></igx-icon>\n </div>\n }\n\n @if (showRowSelectors) {\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" role=\"gridcell\" (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onGroupSelectorClick($event)\">\n <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n context: { $implicit: {\n selectedCount: selectedRowsInTheGroup.length,\n totalCount: this.groupRow.records.length,\n groupRow: this.groupRow }}\">\n </ng-template>\n </div>\n }\n\n <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\" role=\"gridcell\" [attr.aria-expanded]=\"expanded\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: $any(this) }\">\n </ng-container>\n </div>\n\n <div class=\"igx-grid__group-content\" role=\"gridcell\" #groupContent>\n <ng-container\n *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n </ng-container>\n </div>\n\n <ng-template #defaultGroupByExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n </ng-template>\n\n <ng-template #defaultGroupByCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n </ng-template>\n\n\n <ng-template #defaultGroupByTemplate>\n <div class=\"igx-group-label\">\n <igx-icon family=\"default\" name=\"group_work\" class=\"igx-group-label__icon\"></igx-icon>\n <span class=\"igx-group-label__column-name\">\n {{ groupRow.column && groupRow.column.header ?\n groupRow.column.header :\n (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n </span>\n\n <span class=\"igx-group-label__text\">{{\n formatter\n ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n : dataType === \"number\"\n ? (groupRow.value | number:groupRow.column!.pipeArgs.digitsInfo:grid.locale)\n : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n ? (groupRow.value | date:groupRow.column!.pipeArgs.format:groupRow.column!.pipeArgs.timezone:grid.locale)\n : dataType === 'currency'\n ? (groupRow.value | currency:currencyCode:groupRow.column!.pipeArgs.display:groupRow.column!.pipeArgs.digitsInfo:grid.locale)\n : dataType === 'percent'\n ? (groupRow.value | percent:groupRow.column!.pipeArgs.digitsInfo:grid.locale)\n : groupRow.value\n }}</span>\n\n <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n </igx-badge>\n </div>\n </ng-template>\n <ng-template #groupByRowSelectorBaseTemplate let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n #groupByRowCheckbox>\n </igx-checkbox>\n </div>\n </ng-template>\n</ng-container>\n" }]
376
+ ], template: "<ng-container #defaultGroupRow>\n\n @if (rowDraggable) {\n <div class=\"igx-grid__drag-indicator igx-grid__tr-action\" role=\"gridcell\">\n <igx-icon family=\"default\" name=\"drag_indicator\" [style.visibility]=\"'hidden'\"></igx-icon>\n </div>\n }\n\n @if (showRowSelectors) {\n <div class=\"igx-grid__cbx-selection igx-grid__tr-action\" role=\"gridcell\" (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onGroupSelectorClick($event)\">\n <ng-template #groupByRowSelector *ngTemplateOutlet=\"\n this.grid.groupByRowSelectorTemplate ? this.grid.groupByRowSelectorTemplate : groupByRowSelectorBaseTemplate;\n context: { $implicit: {\n selectedCount: selectedRowsInTheGroup.length,\n totalCount: this.groupRow.records.length,\n groupRow: this.groupRow }}\">\n </ng-template>\n </div>\n }\n\n <div (click)=\"toggle()\" class=\"igx-grid__grouping-indicator\" role=\"gridcell\" [attr.aria-expanded]=\"expanded\">\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: this }\">\n </ng-container>\n </div>\n\n <div class=\"igx-grid__group-content\" role=\"gridcell\" #groupContent>\n <ng-container\n *ngTemplateOutlet=\"grid.groupRowTemplate ? grid.groupRowTemplate : defaultGroupByTemplate; context: { $implicit: groupRow }\">\n </ng-container>\n </div>\n\n <ng-template #defaultGroupByExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n </ng-template>\n\n <ng-template #defaultGroupByCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n </ng-template>\n\n\n <ng-template #defaultGroupByTemplate>\n <div class=\"igx-group-label\">\n <igx-icon family=\"default\" name=\"group_work\" class=\"igx-group-label__icon\"></igx-icon>\n <span class=\"igx-group-label__column-name\">\n {{ groupRow.column && groupRow.column.header ?\n groupRow.column.header :\n (groupRow.expression ? groupRow.expression.fieldName : '') }}:\n </span>\n\n <span class=\"igx-group-label__text\">{{\n formatter\n ? (groupRow.value | columnFormatter:formatter:groupRow.records[0]:null)\n : dataType === \"number\"\n ? (groupRow.value | number:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : (dataType === 'date' || dataType === 'time' || dataType === 'dateTime')\n ? (groupRow.value | date:groupRow.column.pipeArgs.format:groupRow.column.pipeArgs.timezone:grid.locale)\n : dataType === 'currency'\n ? (groupRow.value | currency:currencyCode:groupRow.column.pipeArgs.display:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : dataType === 'percent'\n ? (groupRow.value | percent:groupRow.column.pipeArgs.digitsInfo:grid.locale)\n : groupRow.value\n }}</span>\n\n <igx-badge [value]=\"groupRow.records ? groupRow.records.length : 0\" class='igx-group-label__count-badge'>\n </igx-badge>\n </div>\n </ng-template>\n <ng-template #groupByRowSelectorBaseTemplate let-context>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox [tabindex]=\"-1\" [readonly]=\"true\" [checked]=\"areAllRowsInTheGroupSelected\"\n [disableRipple]=\"true\" [indeterminate]=\"groupByRowCheckboxIndeterminateState\"\n [disabled]=\"this.grid.rowSelection === 'single'\" [aria-label]=\"groupByRowSelectorBaseAriaLabel\"\n #groupByRowCheckbox>\n </igx-checkbox>\n </div>\n </ng-template>\n</ng-container>\n" }]
377
377
  }], ctorParameters: () => [], propDecorators: { hideGroupRowSelectors: [{
378
378
  type: Input
379
379
  }], rowDraggable: [{
@@ -746,7 +746,7 @@ class IgxGridUnmergeActivePipe {
746
746
  const cols = colsToMerge.filter(col => colKeys.indexOf(col.field) !== -1);
747
747
  for (const col of cols) {
748
748
  const childData = x.cellMergeMeta.get(col.field).childRecords;
749
- const childRecs = childData.map((rec) => rec.recordRef);
749
+ const childRecs = childData.map(rec => rec.recordRef);
750
750
  if (childRecs.length === 0) {
751
751
  // nothing to unmerge
752
752
  continue;
@@ -874,9 +874,7 @@ class IgxGridExpandableCellComponent extends IgxGridCellComponent {
874
874
  * @hidden
875
875
  */
876
876
  onIndicatorFocus() {
877
- if (this.grid.crudService.cell) {
878
- this.grid.gridAPI.update_cell(this.grid.crudService.cell);
879
- }
877
+ this.grid.gridAPI.update_cell(this.grid.crudService.cell);
880
878
  }
881
879
  /**
882
880
  * @hidden
@@ -909,7 +907,7 @@ class IgxGridExpandableCellComponent extends IgxGridCellComponent {
909
907
  return !this.editMode && (!this.intRow.pinned || isGhost);
910
908
  }
911
909
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxGridExpandableCellComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
912
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: IgxGridExpandableCellComponent, isStandalone: true, selector: "igx-expandable-grid-cell", inputs: { expanded: "expanded" }, viewQueries: [{ propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "indentationDiv", first: true, predicate: ["indentationDiv"], descendants: true, read: ElementRef }, { propertyName: "defaultExpandedTemplate", first: true, predicate: ["defaultExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultCollapsedTemplate", first: true, predicate: ["defaultCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<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 }\n</ng-template>\n<ng-template #defaultCell>\n @if (\n (column.dataType !== 'boolean' && column.dataType !== 'image') ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [class.igx-grid__td--number]=\"\n column.dataType === 'number' ||\n column.dataType === 'percent' ||\n column.dataType === 'currency'\n \"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : grid.locale)\n : column.dataType === 'percent'\n ? (value | percent: column.pipeArgs.digitsInfo : grid.locale)\n : value\n }}\n </div>\n }\n\n @if (column.dataType === 'boolean' && !this.formatter) {\n <div [class.igx-grid__td--bool]=\"column.dataType === 'boolean'\">\n <igx-icon\n family=\"default\"\n [name]=\"value ? 'confirm' : 'close'\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >\n </igx-icon>\n </div>\n }\n @if (column.dataType === 'image') {\n <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n @if (\n column.dataType !== 'boolean' ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{ value ? value : column.header || column.field }}\n </div>\n }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n @if (column.dataType === 'string' || column.dataType === 'image') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-input-group [style.--ig-size]=\"1\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n />\n </igx-input-group>\n </ng-container>\n }\n @if (column.dataType === 'number') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'boolean') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-checkbox\n [checked]=\"editValue\"\n [igxFocus]=\"true\"\n [disableRipple]=\"true\"\n [formControl]=\"formControl\"\n ></igx-checkbox>\n </ng-container>\n }\n @if (column.dataType === 'date') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-date-picker\n [style.width.%]=\"100\"\n 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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"column.editorOptions?.dateTimeFormat!\"\n [displayFormat]=\"column.pipeArgs.format!\"\n ></igx-time-picker>\n </ng-container>\n }\n @if (column.dataType === 'dateTime') {\n <igx-input-group [formGroup]=\"formGroup\">\n <input\n type=\"text\"\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [formControl]=\"formControl\"\n igxInput\n [locale]=\"grid.locale\"\n [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat!\"\n [defaultFormatType]=\"column.dataType\"\n [displayFormat]=\"column.pipeArgs.format!\"\n [igxFocus]=\"true\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'currency') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n @if (grid.currencyPositionLeft) {\n <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n }\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n @if (!grid.currencyPositionLeft) {\n <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n }\n </igx-input-group>\n }\n @if (column.dataType === 'percent') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n <igx-suffix>\n {{ editValue | percent: column.pipeArgs.digitsInfo : grid.locale }}\n </igx-suffix>\n </igx-input-group>\n }\n</ng-template>\n@if (showExpanderIndicator) {\n <div\n #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\"\n (focus)=\"onIndicatorFocus()\"\n >\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: row }\">\n </ng-container>\n </div>\n}\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </ng-container>\n@if (isInvalid) {\n <igx-icon\n family=\"default\"\n name=\"error\"\n #errorIcon\n [igxTooltipTarget]=\"tooltipRef\"\n (mouseover)=\"errorShowing = true\"\n (mouseout)=\"errorShowing = false\"\n >\n </igx-icon>\n <div [id]=\"ariaErrorMessage\" igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container\n *ngTemplateOutlet=\"\n cellValidationErrorTemplate || defaultError;\n context: context\n \"\n ></ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultError>\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['required']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_required_validation_error }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.[\n 'minlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_length_validation_error!\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field)!.errors!.minlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.[\n 'maxlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_length_validation_error!\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field)!.errors!.maxlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['min']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_validation_error!\n | igxStringReplace: '{0}' : formGroup.get(column.field)!.errors!.min.min\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['max']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_validation_error!\n | igxStringReplace: '{0}' : formGroup.get(column.field)!.errors!.max.max\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['email']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['pattern']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_pattern_validation_error }}\n </div>\n }\n</ng-template>\n", dependencies: [{ kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "directive", type: IgxTextHighlightDirective, selector: "[igxTextHighlight]", inputs: ["cssClass", "activeCssClass", "containerClass", "groupName", "value", "row", "column", "metadata"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxFocusDirective, selector: "[igxFocus]", inputs: ["igxFocus"], exportAs: ["igxFocus"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "orientation", "showWeekNumbers", "activeDate", "formatter", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "component", type: IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "defaultFormatType", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "directive", type: IgxPrefixDirective, selector: "[igxPrefix],[igxStart],igx-prefix" }, { kind: "directive", type: IgxSuffixDirective, selector: "[igxSuffix],[igxEnd],igx-suffix" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxTooltipTargetDirective, selector: "[igxTooltipTarget]", inputs: ["showDelay", "hideDelay", "hasArrow", "sticky", "closeButtonTemplate", "positionSettings", "tooltipDisabled", "showTriggers", "hideTriggers", "igxTooltipTarget", "tooltip"], outputs: ["tooltipShow", "tooltipHide"], exportAs: ["tooltipTarget"] }, { kind: "directive", type: IgxTooltipDirective, selector: "[igxTooltip]", inputs: ["context", "id", "role"], exportAs: ["tooltip"] }, { kind: "pipe", type: IgxGridCellImageAltPipe, name: "igxCellImageAlt" }, { kind: "pipe", type: IgxStringReplacePipe, name: "igxStringReplace" }, { kind: "pipe", type: IgxColumnFormatterPipe, name: "columnFormatter" }, { kind: "pipe", type: IgxNumberFormatterPipe, name: "number" }, { kind: "pipe", type: IgxPercentFormatterPipe, name: "percent" }, { kind: "pipe", type: IgxCurrencyFormatterPipe, name: "currency" }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
910
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: IgxGridExpandableCellComponent, isStandalone: true, selector: "igx-expandable-grid-cell", inputs: { expanded: "expanded" }, viewQueries: [{ propertyName: "indicator", first: true, predicate: ["indicator"], descendants: true, read: ElementRef }, { propertyName: "indentationDiv", first: true, predicate: ["indentationDiv"], descendants: true, read: ElementRef }, { propertyName: "defaultExpandedTemplate", first: true, predicate: ["defaultExpandedTemplate"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultCollapsedTemplate", first: true, predicate: ["defaultCollapsedTemplate"], descendants: true, read: TemplateRef, static: true }], usesInheritance: true, ngImport: i0, template: "<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 }\n</ng-template>\n<ng-template #defaultCell>\n @if (\n (column.dataType !== 'boolean' && column.dataType !== 'image') ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [class.igx-grid__td--number]=\"\n column.dataType === 'number' ||\n column.dataType === 'percent' ||\n column.dataType === 'currency'\n \"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : grid.locale)\n : column.dataType === 'percent'\n ? (value | percent: column.pipeArgs.digitsInfo : grid.locale)\n : value\n }}\n </div>\n }\n\n @if (column.dataType === 'boolean' && !this.formatter) {\n <div [class.igx-grid__td--bool]=\"column.dataType === 'boolean'\">\n <igx-icon\n family=\"default\"\n [name]=\"value ? 'confirm' : 'close'\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >\n </igx-icon>\n </div>\n }\n @if (column.dataType === 'image') {\n <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n @if (\n column.dataType !== 'boolean' ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{ value ? value : column.header || column.field }}\n </div>\n }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n @if (column.dataType === 'string' || column.dataType === 'image') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-input-group [style.--ig-size]=\"1\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n />\n </igx-input-group>\n </ng-container>\n }\n @if (column.dataType === 'number') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'boolean') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-checkbox\n [checked]=\"editValue\"\n [igxFocus]=\"true\"\n [disableRipple]=\"true\"\n [formControl]=\"formControl\"\n ></igx-checkbox>\n </ng-container>\n }\n @if (column.dataType === 'date') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-date-picker\n [style.width.%]=\"100\"\n mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [weekStart]=\"column.pipeArgs.weekStart\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\n [displayFormat]=\"column.pipeArgs.format\"\n ></igx-time-picker>\n </ng-container>\n }\n @if (column.dataType === 'dateTime') {\n <igx-input-group [formGroup]=\"formGroup\">\n <input\n type=\"text\"\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [formControl]=\"formControl\"\n igxInput\n [locale]=\"grid.locale\"\n [igxDateTimeEditor]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\n [defaultFormatType]=\"column.dataType\"\n [displayFormat]=\"column.pipeArgs.format\"\n [igxFocus]=\"true\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'currency') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n @if (grid.currencyPositionLeft) {\n <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n }\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n @if (!grid.currencyPositionLeft) {\n <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n }\n </igx-input-group>\n }\n @if (column.dataType === 'percent') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n <igx-suffix>\n {{ editValue | percent: column.pipeArgs.digitsInfo : grid.locale }}\n </igx-suffix>\n </igx-input-group>\n }\n</ng-template>\n@if (showExpanderIndicator) {\n <div\n #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\"\n (focus)=\"onIndicatorFocus()\"\n >\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: row }\">\n </ng-container>\n </div>\n}\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </ng-container>\n@if (isInvalid) {\n <igx-icon\n family=\"default\"\n name=\"error\"\n #errorIcon\n [igxTooltipTarget]=\"tooltipRef\"\n (mouseover)=\"errorShowing = true\"\n (mouseout)=\"errorShowing = false\"\n >\n </igx-icon>\n <div [id]=\"ariaErrorMessage\" igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container\n *ngTemplateOutlet=\"\n cellValidationErrorTemplate || defaultError;\n context: context\n \"\n ></ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultError>\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['required']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_required_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'minlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.minlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'maxlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.maxlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['min']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.min.min\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['max']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.max.max\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['email']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['pattern']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_pattern_validation_error }}\n </div>\n }\n</ng-template>\n", dependencies: [{ kind: "component", type: IgxChipComponent, selector: "igx-chip", inputs: ["variant", "id", "tabIndex", "data", "draggable", "animateOnRelease", "hideBaseOnDrag", "removable", "removeIcon", "selectable", "selectIcon", "class", "disabled", "selected", "color", "resourceStrings"], outputs: ["selectedChange", "moveStart", "moveEnd", "remove", "chipClick", "selectedChanging", "selectedChanged", "keyDown", "dragEnter", "dragLeave", "dragOver", "dragDrop"] }, { kind: "directive", type: IgxTextHighlightDirective, selector: "[igxTextHighlight]", inputs: ["cssClass", "activeCssClass", "containerClass", "groupName", "value", "row", "column", "metadata"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox]):not([ngNoCva])[formControlName],textarea:not([ngNoCva])[formControlName],input:not([type=checkbox]):not([ngNoCva])[formControl],textarea:not([ngNoCva])[formControl],input:not([type=checkbox]):not([ngNoCva])[ngModel],textarea:not([ngNoCva])[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number]:not([ngNoCva])[formControlName],input[type=number]:not([ngNoCva])[formControl],input[type=number]:not([ngNoCva])[ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IgxInputGroupComponent, selector: "igx-input-group", inputs: ["resourceStrings", "suppressInputAutofocus", "type", "theme"] }, { kind: "directive", type: IgxInputDirective, selector: "[igxInput]", inputs: ["value", "disabled", "required"], exportAs: ["igxInput"] }, { kind: "directive", type: IgxFocusDirective, selector: "[igxFocus]", inputs: ["igxFocus"], exportAs: ["igxFocus"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxDatePickerComponent, selector: "igx-date-picker", inputs: ["hideOutsideDays", "displayMonthsCount", "orientation", "showWeekNumbers", "activeDate", "formatter", "todayButtonLabel", "cancelButtonLabel", "spinLoop", "spinDelta", "id", "formatViews", "disabledDates", "specialDates", "calendarFormat", "value", "minValue", "maxValue", "resourceStrings", "readOnly"], outputs: ["valueChange", "validationFailed"] }, { kind: "component", type: IgxTimePickerComponent, selector: "igx-time-picker", inputs: ["id", "displayFormat", "inputFormat", "mode", "minValue", "maxValue", "spinLoop", "formatter", "readOnly", "value", "resourceStrings", "okButtonLabel", "cancelButtonLabel", "itemsDelta"], outputs: ["selected", "valueChange", "validationFailed"] }, { kind: "directive", type: IgxDateTimeEditorDirective, selector: "[igxDateTimeEditor]", inputs: ["locale", "minValue", "maxValue", "spinLoop", "displayFormat", "igxDateTimeEditor", "value", "defaultFormatType", "spinDelta"], outputs: ["valueChange", "validationFailed"], exportAs: ["igxDateTimeEditor"] }, { kind: "directive", type: IgxPrefixDirective, selector: "[igxPrefix],[igxStart],igx-prefix" }, { kind: "directive", type: IgxSuffixDirective, selector: "[igxSuffix],[igxEnd],igx-suffix" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxTooltipTargetDirective, selector: "[igxTooltipTarget]", inputs: ["showDelay", "hideDelay", "hasArrow", "sticky", "closeButtonTemplate", "positionSettings", "tooltipDisabled", "showTriggers", "hideTriggers", "igxTooltipTarget", "tooltip"], outputs: ["tooltipShow", "tooltipHide"], exportAs: ["tooltipTarget"] }, { kind: "directive", type: IgxTooltipDirective, selector: "[igxTooltip]", inputs: ["context", "id", "role"], exportAs: ["tooltip"] }, { kind: "pipe", type: IgxGridCellImageAltPipe, name: "igxCellImageAlt" }, { kind: "pipe", type: IgxStringReplacePipe, name: "igxStringReplace" }, { kind: "pipe", type: IgxColumnFormatterPipe, name: "columnFormatter" }, { kind: "pipe", type: IgxNumberFormatterPipe, name: "number" }, { kind: "pipe", type: IgxPercentFormatterPipe, name: "percent" }, { kind: "pipe", type: IgxCurrencyFormatterPipe, name: "currency" }, { kind: "pipe", type: IgxDateFormatterPipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
913
911
  }
914
912
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxGridExpandableCellComponent, decorators: [{
915
913
  type: Component,
@@ -917,7 +915,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
917
915
  IgxInputGroupComponent, IgxInputDirective, IgxFocusDirective, IgxCheckboxComponent, IgxDatePickerComponent,
918
916
  IgxTimePickerComponent, IgxDateTimeEditorDirective, IgxPrefixDirective, IgxSuffixDirective, NgTemplateOutlet,
919
917
  IgxTooltipTargetDirective, IgxTooltipDirective, IgxGridCellImageAltPipe, IgxStringReplacePipe,
920
- IgxColumnFormatterPipe, IgxNumberFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, IgxDateFormatterPipe], template: "<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 }\n</ng-template>\n<ng-template #defaultCell>\n @if (\n (column.dataType !== 'boolean' && column.dataType !== 'image') ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [class.igx-grid__td--number]=\"\n column.dataType === 'number' ||\n column.dataType === 'percent' ||\n column.dataType === 'currency'\n \"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : grid.locale)\n : column.dataType === 'percent'\n ? (value | percent: column.pipeArgs.digitsInfo : grid.locale)\n : value\n }}\n </div>\n }\n\n @if (column.dataType === 'boolean' && !this.formatter) {\n <div [class.igx-grid__td--bool]=\"column.dataType === 'boolean'\">\n <igx-icon\n family=\"default\"\n [name]=\"value ? 'confirm' : 'close'\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >\n </igx-icon>\n </div>\n }\n @if (column.dataType === 'image') {\n <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n @if (\n column.dataType !== 'boolean' ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{ value ? value : column.header || column.field }}\n </div>\n }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n @if (column.dataType === 'string' || column.dataType === 'image') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-input-group [style.--ig-size]=\"1\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n />\n </igx-input-group>\n </ng-container>\n }\n @if (column.dataType === 'number') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'boolean') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-checkbox\n [checked]=\"editValue\"\n [igxFocus]=\"true\"\n [disableRipple]=\"true\"\n [formControl]=\"formControl\"\n ></igx-checkbox>\n </ng-container>\n }\n @if (column.dataType === 'date') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-date-picker\n [style.width.%]=\"100\"\n 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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"column.editorOptions?.dateTimeFormat!\"\n [displayFormat]=\"column.pipeArgs.format!\"\n ></igx-time-picker>\n </ng-container>\n }\n @if (column.dataType === 'dateTime') {\n <igx-input-group [formGroup]=\"formGroup\">\n <input\n type=\"text\"\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [formControl]=\"formControl\"\n igxInput\n [locale]=\"grid.locale\"\n [igxDateTimeEditor]=\"column.editorOptions?.dateTimeFormat!\"\n [defaultFormatType]=\"column.dataType\"\n [displayFormat]=\"column.pipeArgs.format!\"\n [igxFocus]=\"true\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'currency') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n @if (grid.currencyPositionLeft) {\n <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n }\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n @if (!grid.currencyPositionLeft) {\n <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n }\n </igx-input-group>\n }\n @if (column.dataType === 'percent') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n <igx-suffix>\n {{ editValue | percent: column.pipeArgs.digitsInfo : grid.locale }}\n </igx-suffix>\n </igx-input-group>\n }\n</ng-template>\n@if (showExpanderIndicator) {\n <div\n #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\"\n (focus)=\"onIndicatorFocus()\"\n >\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: row }\">\n </ng-container>\n </div>\n}\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </ng-container>\n@if (isInvalid) {\n <igx-icon\n family=\"default\"\n name=\"error\"\n #errorIcon\n [igxTooltipTarget]=\"tooltipRef\"\n (mouseover)=\"errorShowing = true\"\n (mouseout)=\"errorShowing = false\"\n >\n </igx-icon>\n <div [id]=\"ariaErrorMessage\" igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container\n *ngTemplateOutlet=\"\n cellValidationErrorTemplate || defaultError;\n context: context\n \"\n ></ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultError>\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['required']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_required_validation_error }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.[\n 'minlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_length_validation_error!\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field)!.errors!.minlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.[\n 'maxlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_length_validation_error!\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field)!.errors!.maxlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['min']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_validation_error!\n | igxStringReplace: '{0}' : formGroup.get(column.field)!.errors!.min.min\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['max']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_validation_error!\n | igxStringReplace: '{0}' : formGroup.get(column.field)!.errors!.max.max\n }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['email']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (\n formGroup.get($safeNavigationMigration(column.field))!.errors?.['pattern']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_pattern_validation_error }}\n </div>\n }\n</ng-template>\n" }]
918
+ IgxColumnFormatterPipe, IgxNumberFormatterPipe, IgxPercentFormatterPipe, IgxCurrencyFormatterPipe, IgxDateFormatterPipe], template: "<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 }\n</ng-template>\n<ng-template #defaultCell>\n @if (\n (column.dataType !== 'boolean' && column.dataType !== 'image') ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [class.igx-grid__td--number]=\"\n column.dataType === 'number' ||\n column.dataType === 'percent' ||\n column.dataType === 'currency'\n \"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : grid.locale)\n : column.dataType === 'percent'\n ? (value | percent: column.pipeArgs.digitsInfo : grid.locale)\n : value\n }}\n </div>\n }\n\n @if (column.dataType === 'boolean' && !this.formatter) {\n <div [class.igx-grid__td--bool]=\"column.dataType === 'boolean'\">\n <igx-icon\n family=\"default\"\n [name]=\"value ? 'confirm' : 'close'\"\n [ngClass]=\"{ 'igx-icon--success': value, 'igx-icon--error': !value }\"\n >\n </igx-icon>\n </div>\n }\n @if (column.dataType === 'image') {\n <img [src]=\"value\" [alt]=\"value | igxCellImageAlt\" />\n }\n</ng-template>\n<ng-template #addRowCell let-cell=\"cell\">\n @if (\n column.dataType !== 'boolean' ||\n (column.dataType === 'boolean' && this.formatter)\n ) {\n <div\n igxTextHighlight\n class=\"igx-grid__td-text\"\n [cssClass]=\"highlightClass\"\n [activeCssClass]=\"activeHighlightClass\"\n [groupName]=\"gridID\"\n [value]=\"\n formatter\n ? (value | columnFormatter: formatter : rowData)\n : column.dataType === 'number'\n ? (value | number: column.pipeArgs.digitsInfo : grid.locale)\n : column.dataType === 'date' ||\n column.dataType === 'time' ||\n column.dataType === 'dateTime'\n ? (value\n | date\n : column.pipeArgs.format\n : column.pipeArgs.timezone\n : grid.locale)\n : column.dataType === 'currency'\n ? (value\n | currency\n : currencyCode\n : column.pipeArgs.display\n : column.pipeArgs.digitsInfo\n : 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 {{ value ? value : column.header || column.field }}\n </div>\n }\n</ng-template>\n<ng-template #inlineEditor let-cell=\"cell\">\n @if (column.dataType === 'string' || column.dataType === 'image') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-input-group [style.--ig-size]=\"1\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n (compositionstart)=\"grid.crudService.isInCompositionMode = true\"\n (compositionend)=\"grid.crudService.isInCompositionMode = false\"\n />\n </igx-input-group>\n </ng-container>\n }\n @if (column.dataType === 'number') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'boolean') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-checkbox\n [checked]=\"editValue\"\n [igxFocus]=\"true\"\n [disableRipple]=\"true\"\n [formControl]=\"formControl\"\n ></igx-checkbox>\n </ng-container>\n }\n @if (column.dataType === 'date') {\n <ng-container [formGroup]=\"formGroup\">\n <igx-date-picker\n [style.width.%]=\"100\"\n mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [weekStart]=\"column.pipeArgs.weekStart\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\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 mode=\"dropdown\"\n [locale]=\"grid.locale\"\n [(value)]=\"editValue\"\n [igxFocus]=\"true\"\n [formControl]=\"formControl\"\n [inputFormat]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\n [displayFormat]=\"column.pipeArgs.format\"\n ></igx-time-picker>\n </ng-container>\n }\n @if (column.dataType === 'dateTime') {\n <igx-input-group [formGroup]=\"formGroup\">\n <input\n type=\"text\"\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [formControl]=\"formControl\"\n igxInput\n [locale]=\"grid.locale\"\n [igxDateTimeEditor]=\"\n $safeNavigationMigration(column.editorOptions?.dateTimeFormat)\n \"\n [defaultFormatType]=\"column.dataType\"\n [displayFormat]=\"column.pipeArgs.format\"\n [igxFocus]=\"true\"\n />\n </igx-input-group>\n }\n @if (column.dataType === 'currency') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n @if (grid.currencyPositionLeft) {\n <igx-prefix>{{ currencyCodeSymbol }}</igx-prefix>\n }\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n @if (!grid.currencyPositionLeft) {\n <igx-suffix>{{ currencyCodeSymbol }}</igx-suffix>\n }\n </igx-input-group>\n }\n @if (column.dataType === 'percent') {\n <igx-input-group [style.--ig-size]=\"1\" [formGroup]=\"formGroup\">\n <input\n igxInput\n [attr.aria-describedby]=\"ariaDescribeBy\"\n [attr.aria-invalid]=\"isInvalid\"\n [igxFocus]=\"true\"\n [step]=\"step\"\n type=\"number\"\n [formControl]=\"formControl\"\n />\n <igx-suffix>\n {{ editValue | percent: column.pipeArgs.digitsInfo : grid.locale }}\n </igx-suffix>\n </igx-input-group>\n }\n</ng-template>\n@if (showExpanderIndicator) {\n <div\n #indicator\n class=\"igx-grid__tree-grouping-indicator\"\n (click)=\"toggle($event)\"\n (focus)=\"onIndicatorFocus()\"\n >\n <ng-container *ngTemplateOutlet=\"iconTemplate; context: { $implicit: row }\">\n </ng-container>\n </div>\n}\n<ng-container *ngTemplateOutlet=\"pinnedIndicatorTemplate; context: context\">\n</ng-container>\n<ng-container *ngTemplateOutlet=\"template; context: context\"> </ng-container>\n@if (isInvalid) {\n <igx-icon\n family=\"default\"\n name=\"error\"\n #errorIcon\n [igxTooltipTarget]=\"tooltipRef\"\n (mouseover)=\"errorShowing = true\"\n (mouseout)=\"errorShowing = false\"\n >\n </igx-icon>\n <div [id]=\"ariaErrorMessage\" igxTooltip #error #tooltipRef=\"tooltip\">\n <div [style.width]=\"'max-content'\">\n <ng-container\n *ngTemplateOutlet=\"\n cellValidationErrorTemplate || defaultError;\n context: context\n \"\n ></ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon family=\"default\" name=\"tree_collapse\"></igx-icon>\n</ng-template>\n<ng-template #defaultCollapsedTemplate>\n <igx-icon family=\"default\" name=\"tree_expand\"></igx-icon>\n</ng-template>\n\n<ng-template #defaultError>\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['required']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_required_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'minlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.minlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.[\n 'maxlength'\n ]\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_length_validation_error\n | igxStringReplace\n : '{0}'\n : formGroup.get(column.field).errors.maxlength.requiredLength\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['min']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_min_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.min.min\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['max']\n ) {\n <div>\n {{\n grid.resourceStrings.igx_grid_max_validation_error\n | igxStringReplace: '{0}' : formGroup.get(column.field).errors.max.max\n }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['email']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_email_validation_error }}\n </div>\n }\n @if (\n formGroup?.get($safeNavigationMigration(column?.field)).errors?.['pattern']\n ) {\n <div>\n {{ grid.resourceStrings.igx_grid_pattern_validation_error }}\n </div>\n }\n</ng-template>\n" }]
921
919
  }], propDecorators: { expanded: [{
922
920
  type: Input
923
921
  }], indicator: [{
@@ -950,11 +948,11 @@ class IgxGridRowComponent extends IgxRowDirective {
950
948
  };
951
949
  }
952
950
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxGridRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
953
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: IgxGridRowComponent, isStandalone: true, selector: "igx-grid-row", providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxGridRowComponent) }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"\n></ng-container>\n\n<ng-template #addTemp>\n <div\n class=\"igx-grid__tr--inner\"\n [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\"\n (animationend)=\"animationEndHandler()\"\n >\n <ng-container *ngTemplateOutlet=\"defaultTemp\"></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div\n [class]=\"resolveDragIndicatorClasses\"\n role=\"gridcell\"\n [igxRowDrag]=\"this\"\n (click)=\"$event.stopPropagation()\"\n [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()!\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n this.grid.dragIndicatorIconTemplate\n ? this.grid.dragIndicatorIconTemplate\n : this.grid.dragIndicatorIconBase\n \"\n ></ng-container>\n </div>\n }\n @if (this.showRowSelectors) {\n <div\n class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n role=\"gridcell\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onRowSelectorClick($event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate\n ? this.grid.rowSelectorTemplate\n : rowSelectorBaseTemplate;\n context: {\n $implicit: {\n index: viewIndex,\n rowID: key,\n key,\n selected: selected,\n },\n }\n \"\n >\n </ng-template>\n </div>\n }\n @if (grid.groupingExpressions!.length > 0) {\n <div\n class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{\n grid.groupingExpressions!.length\n }}\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n ></div>\n }\n\n @if (!grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n @for (\n col of pinnedStartColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n @for (\n col of pinnedEndColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n }\n\n @if (grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedStartColumns, this)\n \"\n ></ng-container>\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n let-colIndex=\"index\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n <div\n class=\"igx-grid__mrl-block\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n }\"\n >\n @for (col of col.children; track trackPinnedColumn(col)) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedEndColumns, this)\n \"\n ></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #mrlPinnedTemplate let-pinnedColumns>\n @for (col of pinnedColumns | igxTopLevel; track trackPinnedColumn(col)) {\n <div\n class=\"igx-grid__mrl-block\"\n [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n [class.igx-grid__td--pinned-first]=\"col.hasFirstPinnedChildColumn\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n 'z-index': col.pinned ? 1 : null,\n }\"\n >\n @for (col of col.children; track col) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [checked]=\"selected\"\n [readonly]=\"true\"\n [disabled]=\"deleted\"\n [disableRipple]=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\"\n >\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n <igx-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [class.igx-grid__td--image]=\"col.dataType === 'image'\"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n <igx-expandable-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n <igx-expandable-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxRowDragDirective, selector: "[igxRowDrag]", inputs: ["igxRowDrag"] }, { kind: "directive", type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf", "igxGridForOfUniqueSizeCache", "igxGridForOfVariableSizes"], outputs: ["dataChanging"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxGridCellComponent, selector: "igx-grid-cell", inputs: ["column", "isPlaceholder", "isMerged", "intRow", "row", "rowData", "columnData", "cellTemplate", "cellValidationErrorTemplate", "pinnedIndicator", "value", "formatter", "visibleColumnIndex", "cellSelectionMode", "lastSearchInfo", "lastPinned", "firstPinned", "editMode", "width", "active", "displayPinnedChip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IgxGridExpandableCellComponent, selector: "igx-expandable-grid-cell", inputs: ["expanded"] }, { kind: "pipe", type: IgxGridNotGroupedPipe, name: "igxNotGrouped" }, { kind: "pipe", type: IgxGridTopLevelColumns, name: "igxTopLevel" }, { kind: "pipe", type: IgxGridCellStylesPipe, name: "igxCellStyles" }, { kind: "pipe", type: IgxGridCellStyleClassesPipe, name: "igxCellStyleClasses" }, { kind: "pipe", type: IgxGridDataMapperPipe, name: "dataMapper" }, { kind: "pipe", type: IgxGridTransactionStatePipe, name: "transactionState" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
951
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.1", type: IgxGridRowComponent, isStandalone: true, selector: "igx-grid-row", providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxGridRowComponent) }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"\n></ng-container>\n\n<ng-template #addTemp>\n <div\n class=\"igx-grid__tr--inner\"\n [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\"\n (animationend)=\"animationEndHandler()\"\n >\n <ng-container *ngTemplateOutlet=\"defaultTemp\"></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div\n [class]=\"resolveDragIndicatorClasses\"\n role=\"gridcell\"\n [igxRowDrag]=\"this\"\n (click)=\"$event.stopPropagation()\"\n [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n this.grid.dragIndicatorIconTemplate\n ? this.grid.dragIndicatorIconTemplate\n : this.grid.dragIndicatorIconBase\n \"\n ></ng-container>\n </div>\n }\n @if (this.showRowSelectors) {\n <div\n class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n role=\"gridcell\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onRowSelectorClick($event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate\n ? this.grid.rowSelectorTemplate\n : rowSelectorBaseTemplate;\n context: {\n $implicit: {\n index: viewIndex,\n rowID: key,\n key,\n selected: selected,\n },\n }\n \"\n >\n </ng-template>\n </div>\n }\n @if (grid.groupingExpressions.length > 0) {\n <div\n class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{\n grid.groupingExpressions.length\n }}\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n ></div>\n }\n\n @if (!grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n @for (\n col of pinnedStartColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n @for (\n col of pinnedEndColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n }\n\n @if (grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedStartColumns, this)\n \"\n ></ng-container>\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n let-colIndex=\"index\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n <div\n class=\"igx-grid__mrl-block\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n }\"\n >\n @for (col of col.children; track trackPinnedColumn(col)) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedEndColumns, this)\n \"\n ></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #mrlPinnedTemplate let-pinnedColumns>\n @for (col of pinnedColumns | igxTopLevel; track trackPinnedColumn(col)) {\n <div\n class=\"igx-grid__mrl-block\"\n [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n [class.igx-grid__td--pinned-first]=\"col.hasFirstPinnedChildColumn\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n 'z-index': col.pinned ? 1 : null,\n }\"\n >\n @for (col of col.children; track col) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [checked]=\"selected\"\n [readonly]=\"true\"\n [disabled]=\"deleted\"\n [disableRipple]=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\"\n >\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n <igx-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [class.igx-grid__td--image]=\"col.dataType === 'image'\"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n <igx-expandable-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n <igx-expandable-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxRowDragDirective, selector: "[igxRowDrag]", inputs: ["igxRowDrag"] }, { kind: "directive", type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf", "igxGridForOfUniqueSizeCache", "igxGridForOfVariableSizes"], outputs: ["dataChanging"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: IgxCheckboxComponent, selector: "igx-checkbox", inputs: ["indeterminate", "checked", "disabled", "invalid", "readonly", "disableTransitions"] }, { kind: "component", type: IgxGridCellComponent, selector: "igx-grid-cell", inputs: ["column", "isPlaceholder", "isMerged", "intRow", "row", "rowData", "columnData", "cellTemplate", "cellValidationErrorTemplate", "pinnedIndicator", "value", "formatter", "visibleColumnIndex", "cellSelectionMode", "lastSearchInfo", "lastPinned", "firstPinned", "editMode", "width", "active", "displayPinnedChip"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: IgxGridExpandableCellComponent, selector: "igx-expandable-grid-cell", inputs: ["expanded"] }, { kind: "pipe", type: IgxGridNotGroupedPipe, name: "igxNotGrouped" }, { kind: "pipe", type: IgxGridTopLevelColumns, name: "igxTopLevel" }, { kind: "pipe", type: IgxGridCellStylesPipe, name: "igxCellStyles" }, { kind: "pipe", type: IgxGridCellStyleClassesPipe, name: "igxCellStyleClasses" }, { kind: "pipe", type: IgxGridDataMapperPipe, name: "dataMapper" }, { kind: "pipe", type: IgxGridTransactionStatePipe, name: "transactionState" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
954
952
  }
955
953
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxGridRowComponent, decorators: [{
956
954
  type: Component,
957
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxGridRowComponent) }], imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, NgStyle, IgxCheckboxComponent, IgxGridCellComponent, NgClass, IgxGridExpandableCellComponent, IgxGridNotGroupedPipe, IgxGridTopLevelColumns, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe], template: "<ng-container\n *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"\n></ng-container>\n\n<ng-template #addTemp>\n <div\n class=\"igx-grid__tr--inner\"\n [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\"\n (animationend)=\"animationEndHandler()\"\n >\n <ng-container *ngTemplateOutlet=\"defaultTemp\"></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div\n [class]=\"resolveDragIndicatorClasses\"\n role=\"gridcell\"\n [igxRowDrag]=\"this\"\n (click)=\"$event.stopPropagation()\"\n [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()!\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n this.grid.dragIndicatorIconTemplate\n ? this.grid.dragIndicatorIconTemplate\n : this.grid.dragIndicatorIconBase\n \"\n ></ng-container>\n </div>\n }\n @if (this.showRowSelectors) {\n <div\n class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n role=\"gridcell\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onRowSelectorClick($event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate\n ? this.grid.rowSelectorTemplate\n : rowSelectorBaseTemplate;\n context: {\n $implicit: {\n index: viewIndex,\n rowID: key,\n key,\n selected: selected,\n },\n }\n \"\n >\n </ng-template>\n </div>\n }\n @if (grid.groupingExpressions!.length > 0) {\n <div\n class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{\n grid.groupingExpressions!.length\n }}\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n ></div>\n }\n\n @if (!grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n @for (\n col of pinnedStartColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n @for (\n col of pinnedEndColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n }\n\n @if (grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedStartColumns, this)\n \"\n ></ng-container>\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n let-colIndex=\"index\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n <div\n class=\"igx-grid__mrl-block\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n }\"\n >\n @for (col of col.children; track trackPinnedColumn(col)) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedEndColumns, this)\n \"\n ></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #mrlPinnedTemplate let-pinnedColumns>\n @for (col of pinnedColumns | igxTopLevel; track trackPinnedColumn(col)) {\n <div\n class=\"igx-grid__mrl-block\"\n [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n [class.igx-grid__td--pinned-first]=\"col.hasFirstPinnedChildColumn\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n 'z-index': col.pinned ? 1 : null,\n }\"\n >\n @for (col of col.children; track col) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [checked]=\"selected\"\n [readonly]=\"true\"\n [disabled]=\"deleted\"\n [disableRipple]=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\"\n >\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n <igx-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [class.igx-grid__td--image]=\"col.dataType === 'image'\"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n <igx-expandable-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n <igx-expandable-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n" }]
955
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-row', providers: [{ provide: IgxRowDirective, useExisting: forwardRef(() => IgxGridRowComponent) }], imports: [NgTemplateOutlet, IgxRowDragDirective, IgxGridForOfDirective, NgStyle, IgxCheckboxComponent, IgxGridCellComponent, NgClass, IgxGridExpandableCellComponent, IgxGridNotGroupedPipe, IgxGridTopLevelColumns, IgxGridCellStylesPipe, IgxGridCellStyleClassesPipe, IgxGridDataMapperPipe, IgxGridTransactionStatePipe], template: "<ng-container\n *ngTemplateOutlet=\"addRowUI ? addTemp : defaultTemp\"\n></ng-container>\n\n<ng-template #addTemp>\n <div\n class=\"igx-grid__tr--inner\"\n [class.igx-grid__tr--add-animate]=\"triggerAddAnimationClass\"\n (animationend)=\"animationEndHandler()\"\n >\n <ng-container *ngTemplateOutlet=\"defaultTemp\"></ng-container>\n </div>\n</ng-template>\n<ng-template #defaultTemp>\n @if (rowDraggable) {\n <div\n [class]=\"resolveDragIndicatorClasses\"\n role=\"gridcell\"\n [igxRowDrag]=\"this\"\n (click)=\"$event.stopPropagation()\"\n [ghostTemplate]=\"this.grid.getDragGhostCustomTemplate()\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n this.grid.dragIndicatorIconTemplate\n ? this.grid.dragIndicatorIconTemplate\n : this.grid.dragIndicatorIconBase\n \"\n ></ng-container>\n </div>\n }\n @if (this.showRowSelectors) {\n <div\n class=\"igx-grid__cbx-selection igx-grid__tr-action\"\n role=\"gridcell\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"onRowSelectorClick($event)\"\n >\n <ng-template\n *ngTemplateOutlet=\"\n this.grid.rowSelectorTemplate\n ? this.grid.rowSelectorTemplate\n : rowSelectorBaseTemplate;\n context: {\n $implicit: {\n index: viewIndex,\n rowID: key,\n key,\n selected: selected,\n },\n }\n \"\n >\n </ng-template>\n </div>\n }\n @if (grid.groupingExpressions.length > 0) {\n <div\n class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{\n grid.groupingExpressions.length\n }}\"\n (pointerdown)=\"$event.preventDefault()\"\n (click)=\"$event.stopPropagation()\"\n ></div>\n }\n\n @if (!grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n @for (\n col of pinnedStartColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n @for (\n col of pinnedEndColumns | igxNotGrouped;\n track trackPinnedColumn(col)\n ) {\n @if (this.hasMergedCells) {\n <div\n [style.height.px]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? getRowHeight()\n : null\n \"\n class=\"igx-grid__mrl-block\"\n [style.visibility]=\"\n this.metaData?.cellMergeMeta.get(col.field)?.root\n ? 'hidden'\n : 'visible'\n \"\n [ngStyle]=\"{\n 'grid-template-rows':\n this.metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n ? this.getMergeCellSpan(col)\n : null,\n }\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n </div>\n } @else {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? expandableCellTemplate\n : cellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n }\n }\n }\n\n @if (grid.hasColumnLayouts) {\n @if (pinnedStartColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedStartColumns, this)\n \"\n ></ng-container>\n }\n <ng-template\n igxGridFor\n let-col\n [igxGridForOf]=\"unpinnedColumns | igxTopLevel\"\n [igxForScrollContainer]=\"grid.parentVirtDir\"\n let-colIndex=\"index\"\n [igxForScrollOrientation]=\"'horizontal'\"\n [igxForContainerSize]=\"grid.unpinnedWidth\"\n [igxForSizePropName]=\"'calcPixelWidth'\"\n [igxForTrackBy]=\"grid.trackColumnChanges\"\n #igxDirRef\n >\n <div\n class=\"igx-grid__mrl-block\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n }\"\n >\n @for (col of col.children; track trackPinnedColumn(col)) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n </ng-template>\n @if (pinnedEndColumns.length > 0) {\n <ng-container\n *ngTemplateOutlet=\"\n mrlPinnedTemplate;\n context: getContextMRL(pinnedEndColumns, this)\n \"\n ></ng-container>\n }\n }\n</ng-template>\n\n<ng-template #mrlPinnedTemplate let-pinnedColumns>\n @for (col of pinnedColumns | igxTopLevel; track trackPinnedColumn(col)) {\n <div\n class=\"igx-grid__mrl-block\"\n [class.igx-grid__td--pinned-last]=\"col.hasLastPinnedChildColumn\"\n [class.igx-grid__td--pinned-first]=\"col.hasFirstPinnedChildColumn\"\n [ngStyle]=\"{\n 'grid-template-rows': col.getGridTemplate(true),\n 'grid-template-columns': col.getGridTemplate(false),\n 'z-index': col.pinned ? 1 : null,\n }\"\n >\n @for (col of col.children; track col) {\n <ng-container\n *ngTemplateOutlet=\"\n col.visibleIndex === 0 && grid.hasDetails\n ? mrlExpandableCellTemplate\n : mrlCellTemplate;\n context: getContext(col, this)\n \"\n ></ng-container>\n }\n </div>\n }\n</ng-template>\n\n<ng-template #rowSelectorBaseTemplate>\n <div class=\"igx-grid__cbx-padding\">\n <igx-checkbox\n [tabindex]=\"-1\"\n [checked]=\"selected\"\n [readonly]=\"true\"\n [disabled]=\"deleted\"\n [disableRipple]=\"true\"\n [disableTransitions]=\"grid.disableTransitions\"\n [aria-label]=\"rowCheckboxAriaLabel\"\n >\n </igx-checkbox>\n </div>\n</ng-template>\n\n<ng-template #cellTemplate let-col>\n <igx-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [class.igx-grid__td--bool]=\"col.dataType === 'boolean'\"\n [class.igx-grid__td--image]=\"col.dataType === 'image'\"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #expandableCellTemplate let-col>\n <igx-expandable-grid-cell\n [class.igx-grid__td--merged]=\"\n metaData?.cellMergeMeta.get(col.field)?.rowSpan > 1\n \"\n [class.igx-grid__td--merged-selected]=\"isSelectionRoot(col)\"\n [class.igx-grid__td--merged-hovered]=\"isHoveredRoot(col)\"\n [isMerged]=\"\n $safeNavigationMigration(\n metaData?.cellMergeMeta.get(col.field)?.rowSpan\n ) > 1\n \"\n [isPlaceholder]=\"!!this.metaData?.cellMergeMeta.get(col.field)?.root\"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [rowData]=\"data\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [width]=\"col.getCellWidth()\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n\n<ng-template #mrlCellTemplate let-col>\n <igx-grid-cell\n class=\"igx-grid__td igx-grid__td--fw\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency'\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [firstPinned]=\"col.columnLayoutChild ? null : col.isFirstPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-grid-cell>\n</ng-template>\n\n<ng-template #mrlExpandableCellTemplate let-col>\n <igx-expandable-grid-cell\n class=\"igx-grid__td igx-grid__td--fw igx-grid__td--tree-cell\"\n [class.igx-grid__td--edited]=\"\n key\n | transactionState\n : col.field\n : grid.rowEditable\n : grid.transactions\n : grid.pipeTrigger\n : grid.gridAPI.crudService.cell\n : grid.gridAPI.crudService.row\n \"\n [class.igx-grid__td--pinned]=\"col.pinned\"\n [class.igx-grid__td--number]=\"\n (col.dataType === 'number' ||\n col.dataType === 'percent' ||\n col.dataType === 'currency') &&\n col.visibleIndex !== 0\n \"\n [ngClass]=\"\n col.cellClasses\n | igxCellStyleClasses\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [ngStyle]=\"\n col.cellStyles\n | igxCellStyles\n : data[col.field]\n : data\n : col.field\n : viewIndex\n : grid.pipeTrigger\n \"\n [expanded]=\"expanded\"\n [editMode]=\"\n col.editable && this.grid.crudService.targetInEdit(index, col.index)\n \"\n [column]=\"col\"\n [style.grid-row-end]=\"col.rowEnd\"\n [style.grid-column-end]=\"col.colEnd\"\n [style.grid-row-start]=\"col.rowStart\"\n [style.grid-column-start]=\"col.colStart\"\n [lastPinned]=\"col.columnLayoutChild ? null : col.isLastPinned\"\n [formatter]=\"col.formatter\"\n [intRow]=\"this\"\n [rowData]=\"data\"\n [visibleColumnIndex]=\"col.visibleIndex\"\n [value]=\"\n data\n | dataMapper\n : col.field\n : grid.pipeTrigger\n : data[col.field]\n : col.hasNestedPath\n \"\n [cellTemplate]=\"col.bodyTemplate\"\n [cellValidationErrorTemplate]=\"col.errorTemplate\"\n [lastSearchInfo]=\"grid.lastSearchInfo\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [cellSelectionMode]=\"grid.cellSelection\"\n [displayPinnedChip]=\"shouldDisplayPinnedChip(col)\"\n #cell\n >\n </igx-expandable-grid-cell>\n</ng-template>\n" }]
958
956
  }] });
959
957
 
960
958
  // Auto-generated — do not edit manually. Re-run build:styles to update.
@@ -2205,7 +2203,7 @@ class IgxGridBaseDirective {
2205
2203
  }
2206
2204
  set batchEditing(val) {
2207
2205
  if (val !== this._batchEditing) {
2208
- this._transactions = null;
2206
+ delete this._transactions;
2209
2207
  this._batchEditing = val;
2210
2208
  this.switchTransactionService(val);
2211
2209
  this.subscribeToTransactions();
@@ -2308,7 +2306,7 @@ class IgxGridBaseDirective {
2308
2306
  */
2309
2307
  set pagingState(value) {
2310
2308
  this._pagingState = value;
2311
- if (this.paginator && !this._init && value.metadata) {
2309
+ if (this.paginator && !this._init) {
2312
2310
  this.paginator.totalRecords = value.metadata.countRecords;
2313
2311
  }
2314
2312
  }
@@ -2418,7 +2416,6 @@ class IgxGridBaseDirective {
2418
2416
  if (this.hasNoData) {
2419
2417
  return this.emptyGridTemplate ? this.emptyGridTemplate : this.emptyGridDefaultTemplate;
2420
2418
  }
2421
- return undefined;
2422
2419
  }
2423
2420
  /**
2424
2421
  * @hidden @internal
@@ -3449,14 +3446,13 @@ class IgxGridBaseDirective {
3449
3446
  * @hidden @internal
3450
3447
  */
3451
3448
  this.preventContainerScroll = (evt) => {
3452
- const target = evt.target;
3453
- if (target.scrollTop !== 0) {
3454
- this.verticalScrollContainer.addScroll(target.scrollTop);
3455
- target.scrollTop = 0;
3449
+ if (evt.target.scrollTop !== 0) {
3450
+ this.verticalScrollContainer.addScroll(evt.target.scrollTop);
3451
+ evt.target.scrollTop = 0;
3456
3452
  }
3457
- if (target.scrollLeft !== 0) {
3458
- this.headerContainer.scrollPosition += target.scrollLeft;
3459
- target.scrollLeft = 0;
3453
+ if (evt.target.scrollLeft !== 0) {
3454
+ this.headerContainer.scrollPosition += evt.target.scrollLeft;
3455
+ evt.target.scrollLeft = 0;
3460
3456
  }
3461
3457
  };
3462
3458
  /**
@@ -3697,7 +3693,7 @@ class IgxGridBaseDirective {
3697
3693
  // resizing occurs due to the change of --ig-size css var
3698
3694
  this._gridSize = this.gridSize;
3699
3695
  this.updateDefaultRowHeight();
3700
- this._autoSize = !!(this.isPercentHeight && this.calcHeight !== this.getDataBasedBodyHeight());
3696
+ this._autoSize = this.isPercentHeight && this.calcHeight !== this.getDataBasedBodyHeight();
3701
3697
  this.crudService.endEdit(false);
3702
3698
  if (this._summaryRowHeight === 0) {
3703
3699
  this.summaryService.summaryHeight = 0;
@@ -4190,7 +4186,7 @@ class IgxGridBaseDirective {
4190
4186
  this.textHighlightService.destroyGroup(this.id);
4191
4187
  if (this._advancedFilteringOverlayId) {
4192
4188
  this.overlayService.detach(this._advancedFilteringOverlayId);
4193
- this._advancedFilteringOverlayId = '';
4189
+ delete this._advancedFilteringOverlayId;
4194
4190
  }
4195
4191
  this.overlayIDs.forEach(overlayID => {
4196
4192
  const overlay = this.overlayService.getOverlayById(overlayID);
@@ -4514,7 +4510,7 @@ class IgxGridBaseDirective {
4514
4510
  getHeaderGroupWidth(column) {
4515
4511
  return this.hasColumnLayouts
4516
4512
  ? ''
4517
- : `${parseFloat(column.calcWidth?.toString() || column.defaultWidth)}px`;
4513
+ : `${parseFloat(column.calcWidth)}px`;
4518
4514
  }
4519
4515
  /**
4520
4516
  * Returns the column by field name.
@@ -4575,7 +4571,7 @@ class IgxGridBaseDirective {
4575
4571
  * ```
4576
4572
  */
4577
4573
  get totalRecords() {
4578
- return this._totalRecords >= 0 ? this._totalRecords : this.pagingState?.metadata?.countRecords || 0;
4574
+ return this._totalRecords >= 0 ? this._totalRecords : this.pagingState?.metadata.countRecords;
4579
4575
  }
4580
4576
  set totalRecords(total) {
4581
4577
  if (total >= 0) {
@@ -4597,7 +4593,7 @@ class IgxGridBaseDirective {
4597
4593
  let totalWidth = 0;
4598
4594
  let i = 0;
4599
4595
  for (i; i < cols.length; i++) {
4600
- totalWidth += parseFloat(cols[i].calcWidth?.toString() || cols[i].defaultWidth);
4596
+ totalWidth += parseFloat(cols[i].calcWidth) || 0;
4601
4597
  }
4602
4598
  this._totalWidth = totalWidth;
4603
4599
  return totalWidth;
@@ -4956,26 +4952,50 @@ class IgxGridBaseDirective {
4956
4952
  filterGlobal(value, condition, ignoreCase) {
4957
4953
  this.filteringService.filterGlobal(value, condition, ignoreCase);
4958
4954
  }
4959
- enableSummaries(rest, customSummary) {
4960
- if (Array.isArray(rest)) {
4961
- this._multipleSummaries(rest, true);
4962
- }
4963
- else if (typeof rest === 'string') {
4964
- this._summaries(rest, true, customSummary);
4955
+ /**
4956
+ * Enables summaries for the specified column and applies your customSummary.
4957
+ *
4958
+ * @remarks
4959
+ * If you do not provide the customSummary, then the default summary for the column data type will be applied.
4960
+ * @example
4961
+ * ```typescript
4962
+ * grid.enableSummaries([{ fieldName: 'ProductName' }, { fieldName: 'ID' }]);
4963
+ * ```
4964
+ * Enable summaries for the listed columns.
4965
+ * @example
4966
+ * ```typescript
4967
+ * grid.enableSummaries('ProductName');
4968
+ * ```
4969
+ * @param rest
4970
+ */
4971
+ enableSummaries(...rest) {
4972
+ if (rest.length === 1 && Array.isArray(rest[0])) {
4973
+ this._multipleSummaries(rest[0], true);
4965
4974
  }
4966
4975
  else {
4967
- this._summaries(rest.fieldName, true, rest.customSummary);
4976
+ this._summaries(rest[0], true, rest[1]);
4968
4977
  }
4969
4978
  }
4970
- disableSummaries(rest) {
4971
- if (Array.isArray(rest)) {
4972
- this._disableMultipleSummaries(rest);
4973
- }
4974
- else if (typeof rest === 'string') {
4975
- this._summaries(rest, false);
4979
+ /**
4980
+ * Disable summaries for the specified column.
4981
+ *
4982
+ * @example
4983
+ * ```typescript
4984
+ * grid.disableSummaries('ProductName');
4985
+ * ```
4986
+ * @remarks
4987
+ * Disable summaries for the listed columns.
4988
+ * @example
4989
+ * ```typescript
4990
+ * grid.disableSummaries([{ fieldName: 'ProductName' }]);
4991
+ * ```
4992
+ */
4993
+ disableSummaries(...rest) {
4994
+ if (rest.length === 1 && Array.isArray(rest[0])) {
4995
+ this._disableMultipleSummaries(rest[0]);
4976
4996
  }
4977
4997
  else {
4978
- this._summaries(rest.fieldName, false);
4998
+ this._summaries(rest[0], false);
4979
4999
  }
4980
5000
  }
4981
5001
  /**
@@ -5016,10 +5036,10 @@ class IgxGridBaseDirective {
5016
5036
  /**
5017
5037
  * @hidden @internal
5018
5038
  */
5019
- refreshGridState(args) {
5039
+ refreshGridState(_args) {
5020
5040
  this.crudService.endEdit(true);
5021
5041
  this.selectionService.clearHeaderCBState();
5022
- this.summaryService.clearSummaryCache(args);
5042
+ this.summaryService.clearSummaryCache();
5023
5043
  this.summaryPipeTrigger++;
5024
5044
  this.cdr.detectChanges();
5025
5045
  }
@@ -5075,7 +5095,7 @@ class IgxGridBaseDirective {
5075
5095
  const eventArgs = this.gridAPI.get_pin_row_event_args(rowID, index, row, true);
5076
5096
  this.rowPinning.emit(eventArgs);
5077
5097
  if (eventArgs.cancel) {
5078
- return undefined;
5098
+ return;
5079
5099
  }
5080
5100
  this.crudService.endEdit(false);
5081
5101
  const insertIndex = typeof eventArgs.insertAtIndex === 'number' ? eventArgs.insertAtIndex : this._pinnedRecordIDs.length;
@@ -5107,7 +5127,7 @@ class IgxGridBaseDirective {
5107
5127
  const eventArgs = this.gridAPI.get_pin_row_event_args(rowID, null, row, false);
5108
5128
  this.rowPinning.emit(eventArgs);
5109
5129
  if (eventArgs.cancel) {
5110
- return undefined;
5130
+ return;
5111
5131
  }
5112
5132
  this.crudService.endEdit(false);
5113
5133
  this._pinnedRecordIDs.splice(index, 1);
@@ -5356,6 +5376,7 @@ class IgxGridBaseDirective {
5356
5376
  const colsPerBlock = columnBlocks.map(block => block.getInitialChildColumnSizes(block.children));
5357
5377
  const combinedBlocksSize = colsPerBlock.reduce((acc, item) => acc + item.length, 0);
5358
5378
  colsPerBlock.forEach(blockCols => visibleCols = visibleCols.concat(blockCols));
5379
+ //
5359
5380
  const columnsWithSetWidths = this.hasColumnLayouts ?
5360
5381
  visibleCols.filter(c => c.widthSetByUser) :
5361
5382
  visibleChildColumns.filter(c => (c.widthSetByUser || c.widthConstrained) && c.width !== 'fit-content');
@@ -5366,7 +5387,7 @@ class IgxGridBaseDirective {
5366
5387
  .reduce((prev, curr) => {
5367
5388
  const colInstance = this.hasColumnLayouts ? curr.ref : curr;
5368
5389
  const colWidth = !colInstance.widthConstrained ? curr.width : colInstance.calcPixelWidth;
5369
- let widthValue = typeof colWidth === 'string' ? parseFloat(colWidth) : colWidth;
5390
+ let widthValue = parseFloat(colWidth);
5370
5391
  if (isNaN(widthValue)) {
5371
5392
  widthValue = MINIMUM_COLUMN_WIDTH;
5372
5393
  }
@@ -5420,7 +5441,7 @@ class IgxGridBaseDirective {
5420
5441
  let sum = 0;
5421
5442
  for (const col of fc) {
5422
5443
  if (col.level === 0) {
5423
- sum += parseFloat(col.calcWidth?.toString() || col.defaultWidth);
5444
+ sum += parseFloat(col.calcWidth);
5424
5445
  }
5425
5446
  }
5426
5447
  // includes features at start
@@ -5441,7 +5462,7 @@ class IgxGridBaseDirective {
5441
5462
  let sum = 0;
5442
5463
  for (const col of fc) {
5443
5464
  if (col.level === 0) {
5444
- sum += parseFloat(col.calcWidth?.toString() || col.defaultWidth);
5465
+ sum += parseFloat(col.calcWidth);
5445
5466
  }
5446
5467
  }
5447
5468
  return sum;
@@ -5452,6 +5473,21 @@ class IgxGridBaseDirective {
5452
5473
  isColumnGrouped(_fieldName) {
5453
5474
  return false;
5454
5475
  }
5476
+ /**
5477
+ * @hidden @internal
5478
+ * TODO: REMOVE
5479
+ */
5480
+ onHeaderSelectorClick(event) {
5481
+ if (!this.isMultiRowSelectionEnabled) {
5482
+ return;
5483
+ }
5484
+ if (this.selectionService.areAllRowSelected()) {
5485
+ this.selectionService.clearRowSelection(event);
5486
+ }
5487
+ else {
5488
+ this.selectionService.selectAllRows(event);
5489
+ }
5490
+ }
5455
5491
  /**
5456
5492
  * @hidden @internal
5457
5493
  */
@@ -5767,7 +5803,7 @@ class IgxGridBaseDirective {
5767
5803
  * @internal
5768
5804
  */
5769
5805
  copyHandler(event) {
5770
- const eventPathElements = event.composedPath().map((el) => el.tagName?.toLowerCase());
5806
+ const eventPathElements = event.composedPath().map(el => el.tagName?.toLowerCase());
5771
5807
  if (eventPathElements.includes('igx-grid-filtering-row') ||
5772
5808
  eventPathElements.includes('igx-grid-filtering-cell')) {
5773
5809
  return;
@@ -5780,7 +5816,7 @@ class IgxGridBaseDirective {
5780
5816
  }
5781
5817
  let data = [];
5782
5818
  let result;
5783
- if (event instanceof KeyboardEvent && event.code === 'KeyC' && (event.ctrlKey || event.metaKey) && event.currentTarget?.className === 'igx-grid-thead__wrapper') {
5819
+ if (event.code === 'KeyC' && (event.ctrlKey || event.metaKey) && event.currentTarget.className === 'igx-grid-thead__wrapper') {
5784
5820
  if (selectedData.length) {
5785
5821
  if (columnData.length === 0) {
5786
5822
  result = this.prepareCopyData(event, selectedData);
@@ -5808,9 +5844,7 @@ class IgxGridBaseDirective {
5808
5844
  data = selectedData;
5809
5845
  result = this.prepareCopyData(event, data);
5810
5846
  }
5811
- // Note: when the gridCopy event is cancelled `result` is undefined and the
5812
- // clipboard is intentionally set to the string 'undefined', as it always has been.
5813
- event.clipboardData?.setData('text/plain', result);
5847
+ event.clipboardData.setData('text/plain', result);
5814
5848
  }
5815
5849
  }
5816
5850
  /**
@@ -5831,8 +5865,8 @@ class IgxGridBaseDirective {
5831
5865
  result = result.slice(0, -2);
5832
5866
  }
5833
5867
  event.preventDefault();
5834
- /* Necessary for the hierarchical case but will probably have to
5835
- change how getSelectedData is propagated in the hierarchical grid
5868
+ /* Necessary for the hiearachical case but will probably have to
5869
+ change how getSelectedData is propagated in the hiearachical grid
5836
5870
  */
5837
5871
  event.stopPropagation();
5838
5872
  return result;
@@ -5981,7 +6015,7 @@ class IgxGridBaseDirective {
5981
6015
  * @hidden @internal
5982
6016
  */
5983
6017
  trackColumnChanges(_index, col) {
5984
- return col.field + col.calcWidth?.toString();
6018
+ return col.field + col._calcWidth.toString();
5985
6019
  }
5986
6020
  /**
5987
6021
  * @hidden
@@ -6139,7 +6173,7 @@ class IgxGridBaseDirective {
6139
6173
  /* blazorCSSuppress */
6140
6174
  endEdit(commit = true, event) {
6141
6175
  if (!this.crudService.cellInEditMode && !this.crudService.rowInEditMode) {
6142
- return undefined;
6176
+ return;
6143
6177
  }
6144
6178
  const document = this.nativeElement?.getRootNode();
6145
6179
  const focusWithin = this.nativeElement?.contains(document.activeElement);
@@ -6237,10 +6271,9 @@ class IgxGridBaseDirective {
6237
6271
  * @hidden
6238
6272
  */
6239
6273
  preventHeaderScroll(args) {
6240
- const target = args.target;
6241
- if (target.scrollLeft !== 0) {
6242
- this.navigation.forOfDir().getScroll().scrollLeft = target.scrollLeft;
6243
- target.scrollLeft = 0;
6274
+ if (args.target.scrollLeft !== 0) {
6275
+ this.navigation.forOfDir().getScroll().scrollLeft = args.target.scrollLeft;
6276
+ args.target.scrollLeft = 0;
6244
6277
  }
6245
6278
  }
6246
6279
  beginAddRowForIndex(index, asChild = false) {
@@ -6316,9 +6349,6 @@ class IgxGridBaseDirective {
6316
6349
  // check virtualization state of data record added from cache
6317
6350
  // in case state is no longer valid - update it.
6318
6351
  const rowForOf = row.virtDirRow;
6319
- if (!rowForOf) {
6320
- return;
6321
- }
6322
6352
  const gridScrLeft = rowForOf.getScroll().scrollLeft;
6323
6353
  rowForOf.onHScroll(gridScrLeft);
6324
6354
  rowForOf.cdr.detectChanges();
@@ -6894,7 +6924,7 @@ class IgxGridBaseDirective {
6894
6924
  */
6895
6925
  _disableMultipleSummaries(expressions) {
6896
6926
  expressions.forEach((column) => {
6897
- const columnName = typeof column === 'string' ? column : column.fieldName;
6927
+ const columnName = column && column.fieldName ? column.fieldName : column;
6898
6928
  this._summaries(columnName, false);
6899
6929
  });
6900
6930
  }
@@ -7035,18 +7065,18 @@ class IgxGridBaseDirective {
7035
7065
  const isRemote = totalItems && totalItems > this.dataView.length;
7036
7066
  let selectionMap;
7037
7067
  if (this.type === 'hierarchical' && selectionCollection.size > 0) {
7038
- selectionMap = isRemote ? new Map(selectionCollection) :
7039
- new Map(Array.from(selectionCollection).filter((tuple) => tuple[0] < source.length));
7068
+ selectionMap = isRemote ? Array.from(selectionCollection) :
7069
+ Array.from(selectionCollection).filter((tuple) => tuple[0] < source.length);
7040
7070
  }
7041
7071
  else {
7042
- selectionMap = isRemote ? new Map(this.selectionService.selection) :
7043
- new Map(Array.from(this.selectionService.selection).filter((tuple) => tuple[0] < source.length));
7072
+ selectionMap = isRemote ? Array.from(this.selectionService.selection) :
7073
+ Array.from(this.selectionService.selection).filter((tuple) => tuple[0] < source.length);
7044
7074
  }
7045
7075
  if (this.cellSelection === GridSelectionMode.single && activeEl) {
7046
- selectionMap.set(activeEl.row, new Set().add(activeEl.column));
7076
+ selectionMap.push([activeEl.row, new Set().add(activeEl.column)]);
7047
7077
  }
7048
7078
  if (this.cellSelection === GridSelectionMode.none && activeEl) {
7049
- selectionMap.set(activeEl.row, new Set().add(activeEl.column));
7079
+ selectionMap.push([activeEl.row, new Set().add(activeEl.column)]);
7050
7080
  }
7051
7081
  if (columnData) {
7052
7082
  selectedData = columnData;
@@ -7274,7 +7304,7 @@ class IgxGridBaseDirective {
7274
7304
  const cols = this.hasColumnLayouts ?
7275
7305
  this.visibleColumns.filter(x => x.columnLayout) : this.visibleColumns.filter(x => !x.columnGroup);
7276
7306
  cols.forEach((item) => {
7277
- colSum += parseInt((item.calcWidth?.toString() || item.defaultWidth), 10) || this.minColumnWidth;
7307
+ colSum += parseInt((item.calcWidth || item.defaultWidth), 10) || this.minColumnWidth;
7278
7308
  });
7279
7309
  if (!colSum) {
7280
7310
  return null;
@@ -7379,15 +7409,12 @@ class IgxGridBaseDirective {
7379
7409
  if (!cb) {
7380
7410
  return;
7381
7411
  }
7382
- let row = this.summariesRowList.filter(s => s.index !== 0).find(r => r.index === rowIndex) || this.rowList.find(r => r.index === rowIndex);
7412
+ let row = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).find(r => r.index === rowIndex);
7383
7413
  if (!row) {
7384
7414
  if (this.totalItemCount) {
7385
7415
  this.verticalScrollContainer.dataChanged.pipe(first(), takeUntil(this.destroy$)).subscribe(() => {
7386
7416
  this.cdr.detectChanges();
7387
- row = this.summariesRowList.filter(s => s.index !== 0).find(r => r.index === rowIndex) || this.rowList.find(r => r.index === rowIndex);
7388
- if (!row) {
7389
- return;
7390
- }
7417
+ row = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).find(r => r.index === rowIndex);
7391
7418
  const cbArgs = this.getNavigationArguments(row, visibleColIndex);
7392
7419
  cb(cbArgs);
7393
7420
  });
@@ -7405,7 +7432,7 @@ class IgxGridBaseDirective {
7405
7432
  getNavigationArguments(row, visibleColIndex) {
7406
7433
  let targetType;
7407
7434
  let target;
7408
- switch (row.nativeElement?.tagName.toLowerCase()) {
7435
+ switch (row.nativeElement.tagName.toLowerCase()) {
7409
7436
  case 'igx-grid-groupby-row':
7410
7437
  targetType = 'groupRow';
7411
7438
  target = row;
@@ -7413,7 +7440,7 @@ class IgxGridBaseDirective {
7413
7440
  case 'igx-grid-summary-row':
7414
7441
  targetType = 'summaryCell';
7415
7442
  target = visibleColIndex !== -1 ?
7416
- row.summaryCells?.find(c => c.visibleColumnIndex === visibleColIndex) : row.summaryCells.first;
7443
+ row.summaryCells.find(c => c.visibleColumnIndex === visibleColIndex) : row.summaryCells.first;
7417
7444
  break;
7418
7445
  case 'igx-child-grid-row':
7419
7446
  targetType = 'hierarchicalRow';
@@ -7421,7 +7448,7 @@ class IgxGridBaseDirective {
7421
7448
  break;
7422
7449
  default:
7423
7450
  targetType = 'dataCell';
7424
- target = visibleColIndex !== -1 ? row.cells?.find(c => c.visibleColumnIndex === visibleColIndex) : row.cells.first;
7451
+ target = visibleColIndex !== -1 ? row.cells.find(c => c.visibleColumnIndex === visibleColIndex) : row.cells.first;
7425
7452
  break;
7426
7453
  }
7427
7454
  return { targetType, target };
@@ -7479,7 +7506,7 @@ class IgxGridBaseDirective {
7479
7506
  return isPinned && !isInPinnedArea;
7480
7507
  }
7481
7508
  isValidPosition(rowIndex, colIndex) {
7482
- const rows = this.summariesRowList.filter(s => s.index !== 0).length + this.rowList.length;
7509
+ const rows = this.summariesRowList.filter(s => s.index !== 0).concat(this.rowList.toArray()).length;
7483
7510
  const cols = this._columns.filter(col => !col.columnGroup && col.visibleIndex >= 0 && !col.hidden).length;
7484
7511
  if (rows < 1 || cols < 1) {
7485
7512
  return false;
@@ -7615,7 +7642,7 @@ class IgxGridBaseDirective {
7615
7642
  }
7616
7643
  updateDefaultRowHeight() {
7617
7644
  if (this.dataRowList.length > 0 && this.dataRowList.first.cells && this.dataRowList.first.cells.length > 0) {
7618
- const targetCell = this.dataRowList.first.cells.find((x) => !x.isMerged);
7645
+ const targetCell = this.dataRowList.first.cells.toArray().find((x) => !x.isMerged);
7619
7646
  if (!targetCell) {
7620
7647
  this._shouldRecalcRowHeight = true;
7621
7648
  return;
@@ -8393,10 +8420,6 @@ class IgxGridComponent extends IgxGridBaseDirective {
8393
8420
  * @hidden
8394
8421
  */
8395
8422
  this._groupingExpandState = [];
8396
- /**
8397
- * @hidden
8398
- */
8399
- this.groupingDiffer = null;
8400
8423
  this._hideGroupedColumns = false;
8401
8424
  this._dropAreaMessage = null;
8402
8425
  this._showGroupArea = true;
@@ -9200,7 +9223,6 @@ class IgxGridComponent extends IgxGridBaseDirective {
9200
9223
  }
9201
9224
  return new IgxGridCell(this, row.index, column);
9202
9225
  }
9203
- return undefined;
9204
9226
  }
9205
9227
  /**
9206
9228
  * Returns a `CellType` object that matches the conditions.
@@ -9220,7 +9242,6 @@ class IgxGridComponent extends IgxGridBaseDirective {
9220
9242
  if (row && column) {
9221
9243
  return new IgxGridCell(this, row.index, column);
9222
9244
  }
9223
- return undefined;
9224
9245
  }
9225
9246
  pinRow(rowID, index) {
9226
9247
  const row = this.getRowByKey(rowID);
@@ -9337,11 +9358,11 @@ class IgxGridComponent extends IgxGridBaseDirective {
9337
9358
  }
9338
9359
  return !expression.fieldName;
9339
9360
  }
9340
- _setGroupColsVisibility(hidden) {
9361
+ _setGroupColsVisibility(value) {
9341
9362
  if (this._columns.length > 0 && !this.hasColumnLayouts) {
9342
9363
  this.groupingExpressions.forEach((expr) => {
9343
9364
  const col = this.getColumnByName(expr.fieldName);
9344
- col.hidden = hidden;
9365
+ col.hidden = value;
9345
9366
  });
9346
9367
  }
9347
9368
  }
@@ -9366,7 +9387,7 @@ class IgxGridComponent extends IgxGridBaseDirective {
9366
9387
  IgxColumnResizingService,
9367
9388
  IgxForOfSyncService,
9368
9389
  IgxForOfScrollSyncService,
9369
- ], queries: [{ propertyName: "detailTemplateDirective", first: true, predicate: IgxGridDetailTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "groupTemplate", first: true, predicate: IgxGroupByRowTemplateDirective, descendants: true, read: IgxGroupByRowTemplateDirective }, { propertyName: "groupByRowSelectorsTemplates", predicate: IgxGroupByRowSelectorDirective, read: TemplateRef }], viewQueries: [{ propertyName: "recordTemplate", first: true, predicate: ["record_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "detailTemplateContainer", first: true, predicate: ["detail_template_container"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupTemplate", first: true, predicate: ["group_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "summaryTemplate", first: true, predicate: ["summary_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "_groupsRowList", predicate: IgxGridGroupByRowComponent, descendants: true, read: IgxGridGroupByRowComponent }], usesInheritance: true, ngImport: i0, template: "<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n\n<!-- Group-by area -->\n@if (showGroupArea && (groupingExpressions.length > 0 || hasGroupableColumns)) {\n <igx-grid-group-by-area #groupArea [style.flex-basis.px]=\"outerWidth\"\n [grid]=\"this\"\n [expressions]=\"groupingExpressions\"\n [sortingExpressions]=\"sortingExpressions\"\n [dropAreaTemplate]=\"dropAreaTemplate\"\n [dropAreaMessage]=\"dropAreaMessage\"\n >\n </igx-grid-group-by-area>\n}\n\n<!-- Grid table head row area -->\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [width]=\"calcWidth\"\n [pinnedStartColumnCollection]=\"pinnedStartColumns\"\n [pinnedEndColumnCollection]=\"pinnedEndColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($any($event))\"\n (keydown.control.c)=\"copyHandler($any($event))\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (scroll)=\"preventHeaderScroll($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($any($event))\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"presentation\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? 'rowgroup' : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" (scroll)=\"preventContainerScroll($event)\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]=\"totalHeight\" [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody [attr.aria-activedescendant]=\"activeDescendant\">\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedStartWidth\"></span>\n }\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"this.verticalScrollContainer.dc.instance.scrollContainer\"\n [IgxScrollInertiaDirection]=\"this.verticalScrollContainer.dc.instance.scrollDirection\">\n @for (rowData of mergedDataInView; track rowData.record;) {\n <igx-grid-row class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [data]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:hasCellsToMerge:false:rowData.record:pipeTrigger\"\n [ngStyle]=\"rowStyles! | igxGridRowStyles:rowData.record:rowData.index:pipeTrigger\" #row>\n </igx-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (data!\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger:true\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData) {\n @if (pinnedData.length > 0) {\n <div #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n @for (rowData of pinnedData; track (rowData.recordRef || rowData); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData!\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger\n | gridGroupBy:groupingExpressions:groupingExpansionState:groupStrategy:groupsExpanded:id:groupsRecords:pipeTrigger\n | gridPaging:!!paginator:page:perPage:pipeTrigger\n | gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | gridDetails:hasDetails:expansionStates:pipeTrigger\n | gridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n [igxForContainerSize]=\"calcHeight\"\n [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n [igxForTrackBy]=\"trackChanges\"\n #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\" (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n <div [attr.data-index]=\"rowIndex\">\n <ng-template\n [igxTemplateOutlet]=\"getRowTemplate(rowData)\"\n [igxTemplateOutletContext]=\"getContext(rowData, rowIndex)\"\n (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n (viewCreated)=\"viewCreatedHandler($event)\"\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (viewMoved)=\"viewMovedHandler($event)\">\n </ng-template>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-rowData let-disabledRow=\"disabled\" let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles! | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles! | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-grid-row>\n </ng-template>\n <ng-template #group_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" [hideGroupRowSelectors]=\"hideRowSelectors\" [rowDraggable]=\"rowDraggable\" #row>\n </igx-grid-groupby-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row role=\"row\" [gridID]=\"id\" [summaries]=\"rowData.summaries\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-template #detail_template_container let-rowIndex=\"index\" let-rowData>\n <div detail=\"true\" id=\"{{id}}_{{rowIndex}}\" (pointerdown)=\"detailsViewFocused(detailsContainer, rowIndex)\" #detailsContainer [attr.data-rowindex]=\"rowIndex\"\n [ngClass]=\"{\n 'igx-grid__tr-container': true,\n 'igx-grid__tr-container--active': isDetailActive(rowIndex)\n }\">\n <div class=\"igx-grid__hierarchical-indent\">\n @if (this.groupingExpressions.length > 0) {\n <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{groupingExpressions.length}}\"></div>\n }\n <ng-template\n [ngTemplateOutlet]=\"detailTemplate\"\n [ngTemplateOutletContext]=\"getDetailsContext(rowData, rowIndex)\">\n </ng-template>\n </div>\n </div>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n <ng-container #bodyViewContainerRef></ng-container>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n @if (moving && columnInDrag) {\n <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n }\n <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n </div>\n\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div class=\"igx-grid__loading-outlet\">\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\"></igx-circular-bar>\n }\n </div>\n </div>\n</div>\n\n\n<div class=\"igx-grid__tfoot\" role=\"presentation\" [style.height.px]=\"summaryRowHeight\" #tfoot>\n <div tabindex=\"0\" role=\"rowgroup\" (focus)=\"navigation.focusFirstCell(false)\" (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row [style.width.px]=\"calcWidth\" [style.height.px]=\"summaryRowHeight\"\n [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n }\n <div class=\"igx-grid__tfoot-thumb\" [hidden]=\"!hasVerticalScroll()\" [style.height.px]=\"summaryRowHeight\"\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" role=\"presentation\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\"\n [class.igx-grid__scroll-start--pinned]=\"pinnedStartColumns.length > 0\"\n [class.igx-grid__scroll-start--column-selection]=\"columnSelection !== 'none'\"\n [style.width.px]=\"pinnedStartWidth\" [style.min-width.px]=\"pinnedStartWidth\"></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n <ng-template igxGridFor [igxGridForOf]=\"EMPTY_DATA\" #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.float]=\"'right'\" [style.width.px]=\"pinnedEndWidth\" [style.min-width.px]=\"pinnedEndWidth\" [hidden]=\"pinnedEndWidth === 0\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" role=\"presentation\" #footer>\n <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_less\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n >\n </igx-icon>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_more\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n ></igx-icon>\n</ng-template>\n\n@if (rowEditable) {\n <div igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.endEdit.bind(this), $implicit: $any(this) }\">\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{ this.resourceStrings.igx_grid_row_edit_text! | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.isAddRow ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n context: { $implicit: !this.crudService.row?.isAddRow ? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n <div #sink style=\"display: none;\"></div>\n <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-column-layout,igc-column-layout,igx-action-strip,igc-action-strip\"></ng-content>\n}\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxGridGroupByAreaComponent, selector: "igx-grid-group-by-area", inputs: ["sortingExpressions", "grid"] }, { kind: "component", type: IgxGridHeaderRowComponent, selector: "igx-grid-header-row", inputs: ["grid", "pinnedStartColumnCollection", "pinnedEndColumnCollection", "unpinnedColumnCollection", "hasMRL", "width"] }, { kind: "directive", type: IgxGridBodyDirective, selector: "[igxGridBody]" }, { kind: "directive", type: IgxGridDragSelectDirective, selector: "[igxGridDragSelect]", inputs: ["igxGridDragSelect"], outputs: ["dragStop", "dragScroll"] }, { kind: "directive", type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { kind: "directive", type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf", "igxGridForOfUniqueSizeCache", "igxGridForOfVariableSizes"], outputs: ["dataChanging"] }, { kind: "directive", type: IgxTemplateOutletDirective, selector: "[igxTemplateOutlet]", inputs: ["igxTemplateOutletContext", "igxTemplateOutlet"], outputs: ["viewCreated", "viewMoved", "cachedViewLoaded", "beforeViewDetach"] }, { kind: "component", type: IgxGridRowComponent, selector: "igx-grid-row" }, { kind: "component", type: IgxGridGroupByRowComponent, selector: "igx-grid-groupby-row", inputs: ["hideGroupRowSelectors", "rowDraggable", "index", "gridID", "groupRow", "isFocused"] }, { kind: "component", type: IgxSummaryRowComponent, selector: "igx-grid-summary-row", inputs: ["summaries", "gridID", "index", "firstCellIndentation"] }, { kind: "directive", type: IgxOverlayOutletDirective, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"] }, { kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { kind: "component", type: IgxCircularProgressBarComponent, selector: "igx-circular-bar", inputs: ["id", "textVisibility", "type"] }, { kind: "component", type: IgxSnackbarComponent, selector: "igx-snackbar", inputs: ["id", "actionText", "positionSettings"], outputs: ["clicked", "animationStarted", "animationDone"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: IgxRowEditTabStopDirective, selector: "[igxRowEditTabStop]" }, { kind: "component", type: IgxGridColumnResizerComponent, selector: "igx-grid-column-resizer", inputs: ["restrictResizerTop"] }, { kind: "directive", type: IgxScrollInertiaDirective, selector: "[igxScrollInertia]", inputs: ["IgxScrollInertiaDirection", "IgxScrollInertiaScrollContainer", "wheelStep", "inertiaStep", "smoothingStep", "smoothingDuration", "swipeToleranceX", "inertiaDeltaY", "inertiaDeltaX", "inertiaDuration"] }, { kind: "pipe", type: IgxGridTransactionPipe, name: "gridTransaction" }, { kind: "pipe", type: IgxHasVisibleColumnsPipe, name: "visibleColumns" }, { kind: "pipe", type: IgxGridRowPinningPipe, name: "gridRowPinning" }, { kind: "pipe", type: IgxGridAddRowPipe, name: "gridAddRow" }, { kind: "pipe", type: IgxGridRowClassesPipe, name: "igxGridRowClasses" }, { kind: "pipe", type: IgxGridRowStylesPipe, name: "igxGridRowStyles" }, { kind: "pipe", type: IgxSummaryDataPipe, name: "igxGridSummaryDataPipe" }, { kind: "pipe", type: IgxGridGroupingPipe, name: "gridGroupBy" }, { kind: "pipe", type: IgxGridPagingPipe, name: "gridPaging" }, { kind: "pipe", type: IgxGridSortingPipe, name: "gridSort" }, { kind: "pipe", type: IgxGridFilteringPipe, name: "gridFiltering" }, { kind: "pipe", type: IgxGridSummaryPipe, name: "gridSummary" }, { kind: "pipe", type: IgxGridDetailsPipe, name: "gridDetails" }, { kind: "pipe", type: IgxStringReplacePipe, name: "igxStringReplace" }, { kind: "pipe", type: IgxGridCellMergePipe, name: "gridCellMerge" }, { kind: "pipe", type: IgxGridUnmergeActivePipe, name: "gridUnmergeActive" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9390
+ ], queries: [{ propertyName: "detailTemplateDirective", first: true, predicate: IgxGridDetailTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "groupTemplate", first: true, predicate: IgxGroupByRowTemplateDirective, descendants: true, read: IgxGroupByRowTemplateDirective }, { propertyName: "groupByRowSelectorsTemplates", predicate: IgxGroupByRowSelectorDirective, read: TemplateRef }], viewQueries: [{ propertyName: "recordTemplate", first: true, predicate: ["record_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "detailTemplateContainer", first: true, predicate: ["detail_template_container"], descendants: true, read: TemplateRef, static: true }, { propertyName: "defaultGroupTemplate", first: true, predicate: ["group_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "summaryTemplate", first: true, predicate: ["summary_template"], descendants: true, read: TemplateRef, static: true }, { propertyName: "_groupsRowList", predicate: IgxGridGroupByRowComponent, descendants: true, read: IgxGridGroupByRowComponent }], usesInheritance: true, ngImport: i0, template: "<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n\n<!-- Group-by area -->\n@if (showGroupArea && (groupingExpressions.length > 0 || hasGroupableColumns)) {\n <igx-grid-group-by-area #groupArea [style.flex-basis.px]=\"outerWidth\"\n [grid]=\"this\"\n [expressions]=\"groupingExpressions\"\n [sortingExpressions]=\"sortingExpressions\"\n [dropAreaTemplate]=\"dropAreaTemplate\"\n [dropAreaMessage]=\"dropAreaMessage\"\n >\n </igx-grid-group-by-area>\n}\n\n<!-- Grid table head row area -->\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [width]=\"calcWidth\"\n [pinnedStartColumnCollection]=\"pinnedStartColumns\"\n [pinnedEndColumnCollection]=\"pinnedEndColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($event)\"\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (scroll)=\"preventHeaderScroll($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"presentation\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? 'rowgroup' : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" (scroll)=\"preventContainerScroll($event)\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]=\"totalHeight\" [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody [attr.aria-activedescendant]=\"activeDescendant\">\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedStartWidth\"></span>\n }\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"this.verticalScrollContainer.dc.instance.scrollContainer\"\n [IgxScrollInertiaDirection]=\"this.verticalScrollContainer.dc.instance.scrollDirection\">\n @for (rowData of mergedDataInView; track rowData.record;) {\n <igx-grid-row class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [data]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:hasCellsToMerge:false:rowData.record:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData.record:rowData.index:pipeTrigger\" #row>\n </igx-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (data\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger:true\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData) {\n @if (pinnedData.length > 0) {\n <div #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n @for (rowData of pinnedData; track (rowData.recordRef || rowData); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger\n | gridGroupBy:groupingExpressions:groupingExpansionState:groupStrategy:groupsExpanded:id:groupsRecords:pipeTrigger\n | gridPaging:!!paginator:page:perPage:pipeTrigger\n | gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | gridDetails:hasDetails:expansionStates:pipeTrigger\n | gridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n [igxForContainerSize]=\"calcHeight\"\n [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n [igxForTrackBy]=\"trackChanges\"\n #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\" (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n <div [attr.data-index]=\"rowIndex\">\n <ng-template\n [igxTemplateOutlet]=\"getRowTemplate(rowData)\"\n [igxTemplateOutletContext]=\"getContext(rowData, rowIndex)\"\n (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n (viewCreated)=\"viewCreatedHandler($event)\"\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (viewMoved)=\"viewMovedHandler($event)\">\n </ng-template>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-rowData let-disabledRow=\"disabled\" let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-grid-row>\n </ng-template>\n <ng-template #group_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" [hideGroupRowSelectors]=\"hideRowSelectors\" [rowDraggable]=\"rowDraggable\" #row>\n </igx-grid-groupby-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row role=\"row\" [gridID]=\"id\" [summaries]=\"rowData.summaries\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-template #detail_template_container let-rowIndex=\"index\" let-rowData>\n <div detail=\"true\" id=\"{{id}}_{{rowIndex}}\" (pointerdown)=\"detailsViewFocused(detailsContainer, rowIndex)\" #detailsContainer [attr.data-rowindex]=\"rowIndex\"\n [ngClass]=\"{\n 'igx-grid__tr-container': true,\n 'igx-grid__tr-container--active': isDetailActive(rowIndex)\n }\">\n <div class=\"igx-grid__hierarchical-indent\">\n @if (this.groupingExpressions.length > 0) {\n <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{groupingExpressions.length}}\"></div>\n }\n <ng-template\n [ngTemplateOutlet]=\"detailTemplate\"\n [ngTemplateOutletContext]=\"getDetailsContext(rowData, rowIndex)\">\n </ng-template>\n </div>\n </div>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n <ng-container #bodyViewContainerRef></ng-container>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n @if (moving && columnInDrag) {\n <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n }\n <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n </div>\n\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div class=\"igx-grid__loading-outlet\">\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\"></igx-circular-bar>\n }\n </div>\n </div>\n</div>\n\n\n<div class=\"igx-grid__tfoot\" role=\"presentation\" [style.height.px]=\"summaryRowHeight\" #tfoot>\n <div tabindex=\"0\" role=\"rowgroup\" (focus)=\"navigation.focusFirstCell(false)\" (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row [style.width.px]=\"calcWidth\" [style.height.px]=\"summaryRowHeight\"\n [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n }\n <div class=\"igx-grid__tfoot-thumb\" [hidden]=\"!hasVerticalScroll()\" [style.height.px]=\"summaryRowHeight\"\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" role=\"presentation\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\"\n [class.igx-grid__scroll-start--pinned]=\"pinnedStartColumns.length > 0\"\n [class.igx-grid__scroll-start--column-selection]=\"columnSelection !== 'none'\"\n [style.width.px]=\"pinnedStartWidth\" [style.min-width.px]=\"pinnedStartWidth\"></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n <ng-template igxGridFor [igxGridForOf]=\"EMPTY_DATA\" #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.float]=\"'right'\" [style.width.px]=\"pinnedEndWidth\" [style.min-width.px]=\"pinnedEndWidth\" [hidden]=\"pinnedEndWidth === 0\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" role=\"presentation\" #footer>\n <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_less\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n >\n </igx-icon>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_more\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n ></igx-icon>\n</ng-template>\n\n@if (rowEditable) {\n <div igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.endEdit.bind(this), $implicit: this }\">\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{ this.resourceStrings.igx_grid_row_edit_text | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.isAddRow ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n context: { $implicit: !this.crudService.row?.isAddRow ? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n <div #sink style=\"display: none;\"></div>\n <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-column-layout,igc-column-layout,igx-action-strip,igc-action-strip\"></ng-content>\n}\n", dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IgxGridGroupByAreaComponent, selector: "igx-grid-group-by-area", inputs: ["sortingExpressions", "grid"] }, { kind: "component", type: IgxGridHeaderRowComponent, selector: "igx-grid-header-row", inputs: ["grid", "pinnedStartColumnCollection", "pinnedEndColumnCollection", "unpinnedColumnCollection", "hasMRL", "width"] }, { kind: "directive", type: IgxGridBodyDirective, selector: "[igxGridBody]" }, { kind: "directive", type: IgxGridDragSelectDirective, selector: "[igxGridDragSelect]", inputs: ["igxGridDragSelect"], outputs: ["dragStop", "dragScroll"] }, { kind: "directive", type: IgxColumnMovingDropDirective, selector: "[igxColumnMovingDrop]", inputs: ["igxColumnMovingDrop"] }, { kind: "directive", type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf", "igxGridForOfUniqueSizeCache", "igxGridForOfVariableSizes"], outputs: ["dataChanging"] }, { kind: "directive", type: IgxTemplateOutletDirective, selector: "[igxTemplateOutlet]", inputs: ["igxTemplateOutletContext", "igxTemplateOutlet"], outputs: ["viewCreated", "viewMoved", "cachedViewLoaded", "beforeViewDetach"] }, { kind: "component", type: IgxGridRowComponent, selector: "igx-grid-row" }, { kind: "component", type: IgxGridGroupByRowComponent, selector: "igx-grid-groupby-row", inputs: ["hideGroupRowSelectors", "rowDraggable", "index", "gridID", "groupRow", "isFocused"] }, { kind: "component", type: IgxSummaryRowComponent, selector: "igx-grid-summary-row", inputs: ["summaries", "gridID", "index", "firstCellIndentation"] }, { kind: "directive", type: IgxOverlayOutletDirective, selector: "[igxOverlayOutlet]", exportAs: ["overlay-outlet"] }, { kind: "directive", type: IgxToggleDirective, selector: "[igxToggle]", inputs: ["id"], outputs: ["opened", "opening", "closed", "closing", "appended"], exportAs: ["toggle"] }, { kind: "component", type: IgxCircularProgressBarComponent, selector: "igx-circular-bar", inputs: ["id", "textVisibility", "type"] }, { kind: "component", type: IgxSnackbarComponent, selector: "igx-snackbar", inputs: ["id", "actionText", "positionSettings"], outputs: ["clicked", "animationStarted", "animationDone"] }, { kind: "directive", type: IgxButtonDirective, selector: "[igxButton]", inputs: ["selected", "igxButton", "igxLabel"], outputs: ["buttonSelected"] }, { kind: "directive", type: IgxRippleDirective, selector: "[igxRipple]", inputs: ["igxRippleTarget", "igxRipple", "igxRippleDuration", "igxRippleCentered", "igxRippleDisabled"] }, { kind: "component", type: IgxIconComponent, selector: "igx-icon", inputs: ["ariaHidden", "family", "name", "active"] }, { kind: "directive", type: IgxRowEditTabStopDirective, selector: "[igxRowEditTabStop]" }, { kind: "component", type: IgxGridColumnResizerComponent, selector: "igx-grid-column-resizer", inputs: ["restrictResizerTop"] }, { kind: "directive", type: IgxScrollInertiaDirective, selector: "[igxScrollInertia]", inputs: ["IgxScrollInertiaDirection", "IgxScrollInertiaScrollContainer", "wheelStep", "inertiaStep", "smoothingStep", "smoothingDuration", "swipeToleranceX", "inertiaDeltaY", "inertiaDeltaX", "inertiaDuration"] }, { kind: "pipe", type: IgxGridTransactionPipe, name: "gridTransaction" }, { kind: "pipe", type: IgxHasVisibleColumnsPipe, name: "visibleColumns" }, { kind: "pipe", type: IgxGridRowPinningPipe, name: "gridRowPinning" }, { kind: "pipe", type: IgxGridAddRowPipe, name: "gridAddRow" }, { kind: "pipe", type: IgxGridRowClassesPipe, name: "igxGridRowClasses" }, { kind: "pipe", type: IgxGridRowStylesPipe, name: "igxGridRowStyles" }, { kind: "pipe", type: IgxSummaryDataPipe, name: "igxGridSummaryDataPipe" }, { kind: "pipe", type: IgxGridGroupingPipe, name: "gridGroupBy" }, { kind: "pipe", type: IgxGridPagingPipe, name: "gridPaging" }, { kind: "pipe", type: IgxGridSortingPipe, name: "gridSort" }, { kind: "pipe", type: IgxGridFilteringPipe, name: "gridFiltering" }, { kind: "pipe", type: IgxGridSummaryPipe, name: "gridSummary" }, { kind: "pipe", type: IgxGridDetailsPipe, name: "gridDetails" }, { kind: "pipe", type: IgxStringReplacePipe, name: "igxStringReplace" }, { kind: "pipe", type: IgxGridCellMergePipe, name: "gridCellMerge" }, { kind: "pipe", type: IgxGridUnmergeActivePipe, name: "gridUnmergeActive" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
9370
9391
  }
9371
9392
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: IgxGridComponent, decorators: [{
9372
9393
  type: Component,
@@ -9423,7 +9444,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImpor
9423
9444
  IgxGridCellMergePipe,
9424
9445
  IgxGridUnmergeActivePipe,
9425
9446
  IgxScrollInertiaDirective
9426
- ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n\n<!-- Group-by area -->\n@if (showGroupArea && (groupingExpressions.length > 0 || hasGroupableColumns)) {\n <igx-grid-group-by-area #groupArea [style.flex-basis.px]=\"outerWidth\"\n [grid]=\"this\"\n [expressions]=\"groupingExpressions\"\n [sortingExpressions]=\"sortingExpressions\"\n [dropAreaTemplate]=\"dropAreaTemplate\"\n [dropAreaMessage]=\"dropAreaMessage\"\n >\n </igx-grid-group-by-area>\n}\n\n<!-- Grid table head row area -->\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [width]=\"calcWidth\"\n [pinnedStartColumnCollection]=\"pinnedStartColumns\"\n [pinnedEndColumnCollection]=\"pinnedEndColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($any($event))\"\n (keydown.control.c)=\"copyHandler($any($event))\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (scroll)=\"preventHeaderScroll($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($any($event))\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"presentation\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? 'rowgroup' : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" (scroll)=\"preventContainerScroll($event)\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]=\"totalHeight\" [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody [attr.aria-activedescendant]=\"activeDescendant\">\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedStartWidth\"></span>\n }\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"this.verticalScrollContainer.dc.instance.scrollContainer\"\n [IgxScrollInertiaDirection]=\"this.verticalScrollContainer.dc.instance.scrollDirection\">\n @for (rowData of mergedDataInView; track rowData.record;) {\n <igx-grid-row class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [data]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:hasCellsToMerge:false:rowData.record:pipeTrigger\"\n [ngStyle]=\"rowStyles! | igxGridRowStyles:rowData.record:rowData.index:pipeTrigger\" #row>\n </igx-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (data!\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger:true\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData) {\n @if (pinnedData.length > 0) {\n <div #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n @for (rowData of pinnedData; track (rowData.recordRef || rowData); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData!\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger\n | gridGroupBy:groupingExpressions:groupingExpansionState:groupStrategy:groupsExpanded:id:groupsRecords:pipeTrigger\n | gridPaging:!!paginator:page:perPage:pipeTrigger\n | gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | gridDetails:hasDetails:expansionStates:pipeTrigger\n | gridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n [igxForContainerSize]=\"calcHeight\"\n [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n [igxForTrackBy]=\"trackChanges\"\n #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\" (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n <div [attr.data-index]=\"rowIndex\">\n <ng-template\n [igxTemplateOutlet]=\"getRowTemplate(rowData)\"\n [igxTemplateOutletContext]=\"getContext(rowData, rowIndex)\"\n (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n (viewCreated)=\"viewCreatedHandler($event)\"\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (viewMoved)=\"viewMovedHandler($event)\">\n </ng-template>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-rowData let-disabledRow=\"disabled\" let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles! | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles! | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-grid-row>\n </ng-template>\n <ng-template #group_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" [hideGroupRowSelectors]=\"hideRowSelectors\" [rowDraggable]=\"rowDraggable\" #row>\n </igx-grid-groupby-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row role=\"row\" [gridID]=\"id\" [summaries]=\"rowData.summaries\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-template #detail_template_container let-rowIndex=\"index\" let-rowData>\n <div detail=\"true\" id=\"{{id}}_{{rowIndex}}\" (pointerdown)=\"detailsViewFocused(detailsContainer, rowIndex)\" #detailsContainer [attr.data-rowindex]=\"rowIndex\"\n [ngClass]=\"{\n 'igx-grid__tr-container': true,\n 'igx-grid__tr-container--active': isDetailActive(rowIndex)\n }\">\n <div class=\"igx-grid__hierarchical-indent\">\n @if (this.groupingExpressions.length > 0) {\n <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{groupingExpressions.length}}\"></div>\n }\n <ng-template\n [ngTemplateOutlet]=\"detailTemplate\"\n [ngTemplateOutletContext]=\"getDetailsContext(rowData, rowIndex)\">\n </ng-template>\n </div>\n </div>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n <ng-container #bodyViewContainerRef></ng-container>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n @if (moving && columnInDrag) {\n <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n }\n <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n </div>\n\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div class=\"igx-grid__loading-outlet\">\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\"></igx-circular-bar>\n }\n </div>\n </div>\n</div>\n\n\n<div class=\"igx-grid__tfoot\" role=\"presentation\" [style.height.px]=\"summaryRowHeight\" #tfoot>\n <div tabindex=\"0\" role=\"rowgroup\" (focus)=\"navigation.focusFirstCell(false)\" (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row [style.width.px]=\"calcWidth\" [style.height.px]=\"summaryRowHeight\"\n [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n }\n <div class=\"igx-grid__tfoot-thumb\" [hidden]=\"!hasVerticalScroll()\" [style.height.px]=\"summaryRowHeight\"\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" role=\"presentation\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\"\n [class.igx-grid__scroll-start--pinned]=\"pinnedStartColumns.length > 0\"\n [class.igx-grid__scroll-start--column-selection]=\"columnSelection !== 'none'\"\n [style.width.px]=\"pinnedStartWidth\" [style.min-width.px]=\"pinnedStartWidth\"></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n <ng-template igxGridFor [igxGridForOf]=\"EMPTY_DATA\" #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.float]=\"'right'\" [style.width.px]=\"pinnedEndWidth\" [style.min-width.px]=\"pinnedEndWidth\" [hidden]=\"pinnedEndWidth === 0\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" role=\"presentation\" #footer>\n <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_less\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n >\n </igx-icon>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_more\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n ></igx-icon>\n</ng-template>\n\n@if (rowEditable) {\n <div igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.endEdit.bind(this), $implicit: $any(this) }\">\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{ this.resourceStrings.igx_grid_row_edit_text! | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.isAddRow ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n context: { $implicit: !this.crudService.row?.isAddRow ? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n <div #sink style=\"display: none;\"></div>\n <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-column-layout,igc-column-layout,igx-action-strip,igc-action-strip\"></ng-content>\n}\n" }]
9447
+ ], schemas: [CUSTOM_ELEMENTS_SCHEMA], template: "<!-- Toolbar area -->\n<ng-content select=\"igx-grid-toolbar,igc-grid-toolbar\"></ng-content>\n\n<!-- Group-by area -->\n@if (showGroupArea && (groupingExpressions.length > 0 || hasGroupableColumns)) {\n <igx-grid-group-by-area #groupArea [style.flex-basis.px]=\"outerWidth\"\n [grid]=\"this\"\n [expressions]=\"groupingExpressions\"\n [sortingExpressions]=\"sortingExpressions\"\n [dropAreaTemplate]=\"dropAreaTemplate\"\n [dropAreaMessage]=\"dropAreaMessage\"\n >\n </igx-grid-group-by-area>\n}\n\n<!-- Grid table head row area -->\n<igx-grid-header-row class=\"igx-grid-thead\" tabindex=\"0\"\n [grid]=\"this\"\n [hasMRL]=\"hasColumnLayouts\"\n [width]=\"calcWidth\"\n [pinnedStartColumnCollection]=\"pinnedStartColumns\"\n [pinnedEndColumnCollection]=\"pinnedEndColumns\"\n [unpinnedColumnCollection]=\"unpinnedColumns\"\n (keydown.meta.c)=\"copyHandler($event)\"\n (keydown.control.c)=\"copyHandler($event)\"\n (copy)=\"copyHandler($event)\"\n (keydown)=\"navigation.headerNavigation($event)\"\n (scroll)=\"preventHeaderScroll($event)\"\n (focus)=\"navigation.focusFirstCell()\"\n>\n</igx-grid-header-row>\n\n<div igxGridBody (keydown.control.c)=\"copyHandler($event)\" (copy)=\"copyHandler($event)\" class=\"igx-grid__tbody\" role=\"presentation\">\n <div class=\"igx-grid__tbody-content\" tabindex=\"0\" [attr.role]=\"dataView.length ? 'rowgroup' : 'row'\" (keydown)=\"navigation.handleNavigation($event)\" (focus)=\"navigation.focusTbody($event)\"\n (dragStop)=\"selectionService.dragMode = $event\" (scroll)=\"preventContainerScroll($event)\"\n (dragScroll)=\"dragScroll($event)\" [igxGridDragSelect]=\"selectionService.dragMode\"\n [style.height.px]=\"totalHeight\" [style.width.px]=\"totalCalcWidth\" [style.width]=\"!platform.isBrowser ? '100%' : undefined\" #tbody [attr.aria-activedescendant]=\"activeDescendant\">\n @if (moving && columnInDrag && pinnedColumns.length <= 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-left\"></span>\n }\n @if (moving && columnInDrag && pinnedColumns.length > 0) {\n <span\n [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\" id=\"left\"\n class=\"igx-grid__scroll-on-drag-pinned\" [style.left.px]=\"pinnedStartWidth\"></span>\n }\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n\n @if (mergedDataInView && mergedDataInView.length > 0) {\n <div igxScrollInertia\n [IgxScrollInertiaScrollContainer]=\"this.verticalScrollContainer.dc.instance.scrollContainer\"\n [IgxScrollInertiaDirection]=\"this.verticalScrollContainer.dc.instance.scrollDirection\">\n @for (rowData of mergedDataInView; track rowData.record;) {\n <igx-grid-row class=\"igx-grid__tr--merged-top\" [gridID]=\"id\" [index]=\"rowData.index\" [data]=\"rowData.record.recordRef\" [metaData]=\"rowData.record\" [style.top.px]=\"getMergeCellOffset(rowData)\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowData.index:hasColumnLayouts:hasCellsToMerge:false:rowData.record:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData.record:rowData.index:pipeTrigger\" #row>\n </igx-grid-row>\n }\n </div>\n }\n\n <ng-template #pinnedRecordsTemplate>\n @if (data\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridAddRow:true:pipeTrigger\n | gridRowPinning:id:true:pipeTrigger\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger:true\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger:true\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:true:pipeTrigger; as pinnedData) {\n @if (pinnedData.length > 0) {\n <div #pinContainer\n [ngClass]=\"{\n 'igx-grid__tr--pinned-bottom': !isRowPinningToTop,\n 'igx-grid__tr--pinned-top': isRowPinningToTop\n }\"\n class=\"igx-grid__tr--pinned\" [style.width.px]=\"calcWidth\">\n @for (rowData of pinnedData; track (rowData.recordRef || rowData); let rowIndex = $index) {\n <ng-container *ngTemplateOutlet=\"pinned_record_template; context: getContext(rowData, rowIndex, true)\">\n </ng-container>\n }\n </div>\n }\n }\n </ng-template>\n <ng-template igxGridFor let-rowData [igxGridForOf]=\"renderData\n | gridTransaction:id:pipeTrigger\n | visibleColumns:hasVisibleColumns\n | gridFiltering:filteringExpressionsTree:filterStrategy:advancedFilteringExpressionsTree:id:pipeTrigger:filteringPipeTrigger\n | gridSort:sortingExpressions:groupingExpressions:sortStrategy:id:pipeTrigger\n | gridGroupBy:groupingExpressions:groupingExpansionState:groupStrategy:groupsExpanded:id:groupsRecords:pipeTrigger\n | gridPaging:!!paginator:page:perPage:pipeTrigger\n | gridSummary:hasSummarizedColumns:summaryCalculationMode:summaryPosition:id:showSummaryOnCollapse:pipeTrigger:summaryPipeTrigger\n | gridDetails:hasDetails:expansionStates:pipeTrigger\n | gridAddRow:false:pipeTrigger\n | gridRowPinning:id:false:pipeTrigger\n | gridCellMerge:columnsToMerge:cellMergeMode:mergeStrategy:pipeTrigger\n | gridUnmergeActive:columnsToMerge:activeRowIndexes:false:pipeTrigger\"\n let-rowIndex=\"index\" [igxForScrollOrientation]=\"'vertical'\" [igxForScrollContainer]=\"verticalScroll\"\n [igxForContainerSize]=\"calcHeight\"\n [igxForItemSize]=\"hasColumnLayouts ? rowHeight * multiRowLayoutRowSize + 1 : renderedRowHeight\"\n [igxForTrackBy]=\"trackChanges\"\n #verticalScrollContainer (chunkPreload)=\"dataLoading($event)\" (dataChanging)=\"dataRebinding($event)\" (dataChanged)=\"dataRebound($event)\">\n <div [attr.data-index]=\"rowIndex\">\n <ng-template\n [igxTemplateOutlet]=\"getRowTemplate(rowData)\"\n [igxTemplateOutletContext]=\"getContext(rowData, rowIndex)\"\n (cachedViewLoaded)=\"cachedViewLoaded($event)\"\n (viewCreated)=\"viewCreatedHandler($event)\"\n (beforeViewDetach)=\"viewDetachHandler($event)\"\n (viewMoved)=\"viewMovedHandler($event)\">\n </ng-template>\n </div>\n </ng-template>\n <ng-container *ngTemplateOutlet=\"hasPinnedRecords && !isRowPinningToTop ? pinnedRecordsTemplate : null\">\n </ng-container>\n <ng-template #record_template let-rowIndex=\"index\" let-rowData let-disabledRow=\"disabled\" let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [disabled]=\"disabledRow\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\" #row>\n </igx-grid-row>\n </ng-template>\n <ng-template #pinned_record_template let-rowIndex=\"index\" let-rowData let-metaData=\"metaData\">\n <igx-grid-row [gridID]=\"id\" [index]=\"rowIndex\" [data]=\"rowData\" [metaData]=\"metaData\"\n [ngClass]=\"rowClasses | igxGridRowClasses:row:row.inEditMode:row.selected:row.dirty:row.deleted:row.dragging:rowIndex:hasColumnLayouts:hasCellsToMerge:false:rowData:pipeTrigger\"\n [ngStyle]=\"rowStyles | igxGridRowStyles:rowData:rowIndex:pipeTrigger\"#row #pinnedRow>\n </igx-grid-row>\n </ng-template>\n <ng-template #group_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-groupby-row [gridID]=\"id\" [index]=\"rowIndex\" [groupRow]=\"rowData\" [hideGroupRowSelectors]=\"hideRowSelectors\" [rowDraggable]=\"rowDraggable\" #row>\n </igx-grid-groupby-row>\n </ng-template>\n <ng-template #summary_template let-rowIndex=\"index\" let-rowData>\n <igx-grid-summary-row role=\"row\" [gridID]=\"id\" [summaries]=\"rowData.summaries\" [index]=\"rowIndex\"\n class=\"igx-grid__summaries--body\" #summaryRow>\n </igx-grid-summary-row>\n </ng-template>\n <ng-template #detail_template_container let-rowIndex=\"index\" let-rowData>\n <div detail=\"true\" id=\"{{id}}_{{rowIndex}}\" (pointerdown)=\"detailsViewFocused(detailsContainer, rowIndex)\" #detailsContainer [attr.data-rowindex]=\"rowIndex\"\n [ngClass]=\"{\n 'igx-grid__tr-container': true,\n 'igx-grid__tr-container--active': isDetailActive(rowIndex)\n }\">\n <div class=\"igx-grid__hierarchical-indent\">\n @if (this.groupingExpressions.length > 0) {\n <div class=\"igx-grid__row-indentation igx-grid__row-indentation--level-{{groupingExpressions.length}}\"></div>\n }\n <ng-template\n [ngTemplateOutlet]=\"detailTemplate\"\n [ngTemplateOutletContext]=\"getDetailsContext(rowData, rowIndex)\">\n </ng-template>\n </div>\n </div>\n </ng-template>\n\n <ng-container *ngTemplateOutlet=\"template; context: { $implicit: this }\"></ng-container>\n <ng-container #bodyViewContainerRef></ng-container>\n <igc-trial-watermark></igc-trial-watermark>\n </div>\n @if (moving && columnInDrag) {\n <span [igxColumnMovingDrop]=\"headerContainer\" [attr.droppable]=\"true\"\n id=\"right\" class=\"igx-grid__scroll-on-drag-right\"></span>\n }\n <div [hidden]=\"!hasVerticalScroll()\" class=\"igx-grid__tbody-scrollbar\" [style.width.px]=\"scrollSize\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__tbody-scrollbar-start\" [style.height.px]=\"isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n <div class=\"igx-grid__tbody-scrollbar-main\" [style.height.px]=\"calcHeight\">\n <ng-template igxGridFor [igxGridForOf]=\"[]\" #verticalScrollHolder></ng-template>\n </div>\n <div class=\"igx-grid__tbody-scrollbar-end\" [style.height.px]=\"!isRowPinningToTop ? pinnedRowHeight : 0\"></div>\n </div>\n\n <div class=\"igx-grid__addrow-snackbar\">\n <igx-snackbar #addRowSnackbar [actionText]=\"resourceStrings.igx_grid_snackbar_addrow_actiontext\" [displayTime]=\"snackbarDisplayTime\">{{resourceStrings.igx_grid_snackbar_addrow_label}}</igx-snackbar>\n </div>\n\n <div class=\"igx-grid__loading-outlet\">\n <div igxToggle #loadingOverlay>\n @if (shouldOverlayLoading) {\n <igx-circular-bar [indeterminate]=\"true\"></igx-circular-bar>\n }\n </div>\n </div>\n</div>\n\n\n<div class=\"igx-grid__tfoot\" role=\"presentation\" [style.height.px]=\"summaryRowHeight\" #tfoot>\n <div tabindex=\"0\" role=\"rowgroup\" (focus)=\"navigation.focusFirstCell(false)\" (keydown)=\"navigation.summaryNav($event)\" [attr.aria-activedescendant]=\"activeDescendant\">\n @if (hasSummarizedColumns && rootSummariesEnabled) {\n <igx-grid-summary-row [style.width.px]=\"calcWidth\" [style.height.px]=\"summaryRowHeight\"\n [gridID]=\"id\" role=\"row\"\n [summaries]=\"id | igxGridSummaryDataPipe:summaryService.retriggerRootPipe\" [index]=\"dataView.length\"\n class=\"igx-grid__summaries\" #summaryRow>\n </igx-grid-summary-row>\n }\n <div class=\"igx-grid__tfoot-thumb\" [hidden]=\"!hasVerticalScroll()\" [style.height.px]=\"summaryRowHeight\"\n [style.width.px]=\"scrollSize\"></div>\n </div>\n</div>\n\n<div class=\"igx-grid__scroll\" role=\"presentation\" [style.height.px]=\"scrollSize\" #scr [hidden]=\"isHorizontalScrollHidden\" (pointerdown)=\"$event.preventDefault()\">\n <div class=\"igx-grid__scroll-start\"\n [class.igx-grid__scroll-start--pinned]=\"pinnedStartColumns.length > 0\"\n [class.igx-grid__scroll-start--column-selection]=\"columnSelection !== 'none'\"\n [style.width.px]=\"pinnedStartWidth\" [style.min-width.px]=\"pinnedStartWidth\"></div>\n <div class=\"igx-grid__scroll-main\" [style.width.px]=\"unpinnedWidth\">\n <ng-template igxGridFor [igxGridForOf]=\"EMPTY_DATA\" #scrollContainer>\n </ng-template>\n </div>\n <div class=\"igx-grid__scroll-end\" [style.float]=\"'right'\" [style.width.px]=\"pinnedEndWidth\" [style.min-width.px]=\"pinnedEndWidth\" [hidden]=\"pinnedEndWidth === 0\"></div>\n</div>\n\n<div class=\"igx-grid__footer\" role=\"presentation\" #footer>\n <ng-content select=\"igx-grid-footer,igc-grid-footer\"></ng-content>\n <ng-content select=\"igx-paginator,igc-paginator\"></ng-content>\n</div>\n\n<ng-template #emptyFilteredGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyFilteredGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultEmptyGrid>\n <span class=\"igx-grid__tbody-message\" role=\"cell\">\n <span>{{emptyGridMessage}}</span>\n @if (showAddButton) {\n <span>\n <ng-container *ngTemplateOutlet=\"addRowEmptyTemplate || defaultAddRowEmptyTemplate\"></ng-container>\n </span>\n }\n </span>\n</ng-template>\n\n<ng-template #defaultAddRowEmptyTemplate>\n <button type=\"button\" igxButton=\"contained\" igxRipple (click)=\"this.crudService.enterAddRowMode(null, false, $event)\">\n {{resourceStrings.igx_grid_add_row_label}}\n </button>\n</ng-template>\n\n<ng-template #defaultLoadingGrid>\n <div class=\"igx-grid__loading\">\n <igx-circular-bar [indeterminate]=\"true\">\n </igx-circular-bar>\n </div>\n</ng-template>\n\n<ng-template #defaultExpandedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_less\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n >\n </igx-icon>\n</ng-template>\n\n<ng-template #defaultCollapsedTemplate>\n <igx-icon\n family=\"default\"\n name=\"unfold_more\"\n role=\"button\"\n [ngClass]=\"{\n 'igx-grid__group-expand-btn': true,\n 'igx-grid__group-expand-btn--push': filteringService.isFilterRowVisible\n }\"\n ></igx-icon>\n</ng-template>\n\n@if (rowEditable) {\n <div igxToggle #rowEditingOverlay>\n <div [className]=\"bannerClass\">\n <ng-container\n *ngTemplateOutlet=\"rowEditContainer; context: { rowChangesCount: rowChangesCount, endEdit: this.endEdit.bind(this), $implicit: this }\">\n </ng-container>\n </div>\n </div>\n}\n\n<ng-template #defaultRowEditText>\n {{ this.resourceStrings.igx_grid_row_edit_text | igxStringReplace:'{0}':rowChangesCount.toString() | igxStringReplace:'{1}':hiddenColumnsCount.toString() }}\n</ng-template>\n\n<ng-template #defaultRowEditActions>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(false, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_cancel }}</button>\n <button igxButton igxRowEditTabStop type=\"button\" (click)=\"this.endRowEditTabStop(true, $event)\">{{ this.resourceStrings.igx_grid_row_edit_btn_done }}</button>\n</ng-template>\n\n<ng-template #defaultRowEditTemplate>\n <div class=\"igx-banner__message\">\n <span class=\"igx-banner__text\">\n <ng-container\n *ngTemplateOutlet=\"this.crudService.row?.isAddRow ? rowAddTextTemplate : rowEditTextTemplate ? rowEditTextTemplate : defaultRowEditText;\n context: { $implicit: !this.crudService.row?.isAddRow ? rowChangesCount : null }\">\n </ng-container>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container\n *ngTemplateOutlet=\"rowEditActionsTemplate ? rowEditActionsTemplate : defaultRowEditActions; context: { $implicit: this.endEdit.bind(this) }\">\n </ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #dragIndicatorIconBase>\n <igx-icon family=\"default\" name=\"drag_indicator\"></igx-icon>\n</ng-template>\n\n@if (colResizingService.showResizer) {\n <igx-grid-column-resizer></igx-grid-column-resizer>\n}\n<div class=\"igx-grid__outlet\" #igxFilteringOverlayOutlet igxOverlayOutlet></div>\n@if (platform.isElements) {\n <div #sink style=\"display: none;\"></div>\n <ng-content select=\"igx-grid-state,igc-grid-state\"></ng-content>\n <ng-content select=\"igx-column,igc-column,igx-column-group,igc-column-group,igx-column-layout,igc-column-layout,igx-action-strip,igc-action-strip\"></ng-content>\n}\n" }]
9427
9448
  }], propDecorators: { dataPreLoad: [{
9428
9449
  type: Output
9429
9450
  }], groupingExpressionsChange: [{